特殊條件資料傳輸

wyzsk發表於2020-08-19
作者: Beta-TNT · 2016/04/07 15:16

0x00 借問酒家


有什麼東西想拿卻拿不出來?不妨開開腦洞。

緣起是2014年底的時候看到金山做的線上惡意程式碼分析系統“Fire eye”(https://fireeye.ijinshan.com/)。感覺很新鮮,丟了自己攢的幾個樣本丟了上去,分析的結果還算可以。從分析報告來看,它也是一類沙箱檢測工具,把樣本丟到虛擬機器裡跑,再在虛擬機器內外布控,監測樣本的各種行為,最後生成分析報告並給出判斷是否惡意樣本,分析報告裡還包含樣本執行時的截圖。

0x01 柳暗


於是我開始有點好奇,這個沙箱大概是個什麼樣的,於是自己寫了一些小的檢測程式丟進去,把環境變數、系統資訊、網路配置、程式列表、服務和驅動什麼的讀出來顯示在窗體上,這樣從分析報告裡的樣本截圖就能讀到這些資訊了。

嘛,這裡先說一下,本人並不會挖漏洞和逆向,說來慚愧,大學時候的彙編都是補考才過的。就是個小小的.net碼農而已。

然後我在系統環境變數裡發現一個別的地方沒有的玩意:%FEKERNEL%,指向c:\mon\資料夾,想來應該是“FIRE EYE KERNEL”,即包含沙箱內部監控程式的核心資料夾。

有了這個發現自然不會放過,另外專門編寫了程式去列舉和讀取FEKERNEL裡的東西,然而發現只要碰了那個資料夾,樣本分析報告就會被隱去大部分內容,和FEKERNEL資料夾直接和間接(比如複製出來之後再讀取複製的檔案)相關的內容都被刪掉了,想來應該是做了某種自我保護。只有讀取資料夾大小的操作沒被攔截。

0x02 花明


不過既然有了目標,路就好找了。試了幾次找到了繞過保護的辦法,成功讀取到了FEKERNEL裡的檔案並把詳細資訊。下一步當然就是如何拿到裡面的東西咯。

裡面是大概幾十MB的二進位制檔案,有EXE有DLL有SYS甚至還有PDB,估計是開發人員方便除錯直接把符號檔案也一起扔裡面了。這麼多東西怎麼拿出來呢?最初的想法是透過網路傳出來,然而沙箱的網路和網際網路是不通的,對使用者的唯一輸出僅限樣本分析報告。

然後我發現早幾年前有人透過編寫樣本在登錄檔裡寫入HTML程式碼內容的鍵值在分析報告頁面成功實施了XSS,覺得這個思路是可行的。然而幾十MB的東西即便壓縮成十幾MB再按BASE64編碼,寫到一個監控程式會監控的地方,仍然沒法全部拿出來,因為太多了。就算畫在窗體上也…………

……慢著,畫在窗體上?

腦袋靈光一閃,這辦法可以啊!我先想到的是把BASE64串按能分辨的最小字號寫在窗體上,然後進一步想到乾脆利用窗體上的畫素,一個畫素表示一個位元組,然後直接想到乾脆一個畫素用RGB分量儲存三個位元組,這樣可輸出的資料量就成幾何級數上升。稍微計算了一下,按最高密度的資料傳輸方案,一個窗體能被截圖下來的最大面積足夠“畫下”壓縮過的完整目標資料。

思路有了,東西直接就搞出來了。由於FE只能上傳單個可執行檔案樣本,於是把所有用到的東西打包成一個自解壓RAR,並附帶解壓後執行指令碼,先繞過保護讀取到FEKERNEL裡的所有內容並複製到另外的位置,然後用自帶的WINRAR.EXE透過命令列將其壓縮,最後把壓縮包以二進位制開啟,把內容“畫”在自己窗體上。

這樣我就順利拿到了FEKERNEL裡的所有東西。當然這還得感謝FE在處理樣本截圖的時候沒有做任何有失真壓縮,雖然是JPEG格式。

這個漏洞我已在去年提交給烏雲:火眼惡意程式碼分析系統自保機制繞過導致二進位制洩露

0x03 又一村


總結:如果有什麼東西你知道在哪,但沒法直接拿到,不妨冷靜分析一下:

  1. 你能控制的輸入因素有哪些;
  2. 阻攔你拿到資料的限制因素有什麼,有沒有繞過的辦法;
  3. 你能拿到的輸出資料有哪些,其中哪些可以透過輸入資料直接或間接控制,哪些輸出資料包含的資訊量最大。

綜合考慮這三方面因素,並仔細分析,就不難達成目標了。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章