iT邦幫忙

2021 iThome 鐵人賽

DAY 12
1

Agenda

  • 資安宣言
  • 測試環境與工具
  • 前情提要
  • 技術原理
  • 下期預告

資安宣言


撰寫本系列文章目的在於提升資訊安全之實務能力,
並透過實作體悟到資訊安全領域的重要性,
本系列所有文章之內容皆有一定技術水平,
不得從事非法行為、惡意攻擊等非法活動,
「一切不合法規之行為皆受法律所約束」,
為了避免造成公司、廠商或玩家之間困擾,
所有實作不會拿已上市產品、Online Game 等等來作範例學習,
且部分具有深度、價值之內容,將會提升一定閱讀門檻(不對該技術做分析、解說),
請勿透過本系列文章所學,從事任何非法活動,請不要以身試法!!!


測試環境與工具

前情提要

在昨天的文章中,
【Day 11】- 再次創造 Ghost Process,這次找不到了吧哈哈(基於修改 PspCidTable 隱藏的 Rookit)
已經有說到第二種隱藏 Process 的方法,
這種方法是修改 Process 的 PspCidTable,
這樣就拿不到 Process 的 Object 了。
今天會來談談如何找出透過這種方式隱藏的 Process。

技術原理

首先開始前要先說一下,
小弟我目前還屬於菜鳥階段,正不斷努力學習中,
若有發現錯誤或不妥之處還請不吝賜教。
歡迎大家多多留言,互相交流交流。

那就開始今天的主題吧~~

在今天開始前,先來看看透過以下兩種方法所隱藏的 Process 能不能逃過 ARK 工具的偵測:

  1. 修改 EProcess 的 ActiveProcessLinks
  2. 修改 PspCidTable

一、Windows-Kernel-Explorer

二、YDark

可以看到兩種 ARK 工具都有偵測出來,
只是 YDark 偵測的結果較不完整、資訊較少,
不過也許是因為我使用的版本較低,所以沒有偵測出來,
在這篇文章發布前幾十天已經有新版本在它們 GitHub 上發布。

再來看到 Windows-Kernel-Explorer 就稍微強大了一些,
還是能完整的將藏起來的 Process 找出來,
今天就要來說說找出這種 Rookit 的一種辦法,
我個人稱之為:「暴力搜尋法」

一個 Process 能執行是因為已經載入了 Memory,
既然載入了 Memory 一定會有 EProcess Address,
EProcess Address 就相當於是 Process 的身分證,
只要能拿到 EProcess Address 就有 Process 相關資訊,
所以其實這個方法說爛不爛、說好不好,就是窮舉 EProcess Address,
然後判斷是有效的 EProcess Address,且當前 Process 還「活著」。

怎麼從 EProcess 判斷 Process 還「活著」?
下方列個幾點供參考:

  1. ExitTime,這東西有時 Process 退出不會被清空,最好別只判斷這個。
  2. VadRoot
  3. NumberOfPrivatePages
  4. ActiveThreads
  5. ObjectTable,這東西經過測試,Process 退出後基本上都為空,可以判斷這個。
  6. ... ...
  7. ... ... ...

暴力搜尋 EProcess:

其實以上方式都還是有機會被繞過的,缺點就是地址空間較大,會花滿長時間在窮舉地址。

最後結論就是沒有一個完美的方法能隱藏或找出來,
因為攻防戰無時無刻都在創新,只有花比較多時間下去研究的那一方勝率會較大。

接著,這篇文章其實已經結束了,
不過以下來講講、複習一下這幾天所講的這個 Process 隱藏系列:

在【Day 08】講了簡單修改 PEB 的方法,來達到偽裝成其他 Process 的效果。

還沒看的可以去看一下哦:
【Day 08】- 見鬼了(っ °Д °;)っ我明明沒有啟動這支程式…

在【Day 09】講了基礎的 Process 隱藏方法,
這個方法是基於修改 EProcess 的 ActiveProcessLinks 來達成(斷鏈)之目的。

還沒看的可以去看一下哦:
【Day 09】- 今天來創造 Ghost Process(基於斷鏈隱藏 Process 的手法)

在【Day 10】講了如何找出斷鏈後所隱藏的 Process,
這個方法是基於 CALL 現有 API 來找到斷鏈後隱藏的 Process,
這幾個 API 是透過 PspCidTable 來找到對應的 EProcess Object。

還沒看的可以去看一下哦:
【Day 10】- 藏起來的 Process 真的看不見摸不著?(講解找出斷鏈後的 Process 方法)

在【Day 11】講了 Day 10 所講到的兩種 API 部分實作方法,
找到 PspCidTable 後,列舉所有 HANDLE TABLE 找出所有的 Process,
最後修改 PspCidTable 來隱藏 Process。

還沒看的可以去看一下哦:
【Day 11】- 再次創造 Ghost Process,這次找不到了吧哈哈(基於修改 PspCidTable 隱藏的 Rookit)

最後來講講今天之後的規劃:
明天 Day 13 會來講一下如何禁止一個 Process 的新建。
後天 Day 14 會來實作/講解一款驅動級別的「鍵盤側錄器」。
再來 Day 15 會開始來談談在 R0 下的 HOOK,目標是實作一個系統時鐘加速器。

最後的最後,提前公布一下 Day 16:
沒意外的話會來實作一款阻止關機的驅動 XD,只能透過長按電源或拔插頭來關機。

後面的主題就會在 Day 15 公布!敬請期待 :D

好了,這篇就講到這結束了,
大家若有發現哪裡寫得不好或錯誤的地方,都留個言討論一下吧 XD
那我們下期見 o( ̄▽ ̄)ブ

下期預告


上一篇
【Day 11】- 再次創造 Ghost Process,這次找不到了吧哈哈(基於修改 PspCidTable 隱藏的 Rookit)
下一篇
【Day 13】- 有了這個,就沒有打得開的程式了 XD(SetCreateProcessNotifyRoutine)
系列文
打通任督二脈奇幻之旅 - 用 30 天探索 Windows 底層運作原理15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言