在CTF中,取證賽題包括了文件分析、隱寫、內存鏡像分析和流量抓包分析。任何要求檢查一個靜態數據文件(與可執行程序和遠程伺服器不同)從而獲取隱藏信息的都可以被認為是取證題(除非它包含了密碼學知識而被認為是密碼類賽題)。
取證作為CTF中的一大類題目,不完全包括安全產業中的實際工作,常見的與之相關的工作是事故相應。但即使在事故響應工作中,計算機取證也經常是執法部門獲取證據數據和證物的工作,而非對防禦攻擊者或恢復系統感興趣的商業事故相應企業。
與大多數CTF取證題目不同,現實生活中的計算機取證任務很少會涉及巧妙的編碼、隱藏數據、層層嵌套的文件中的文件,或是其他腦洞類的謎題。很多時候刑事案件需要的是精心恢復一個被破壞的PNG文件,根據一張照片或QR碼來解碼獲取包含NES只讀內存鏡像來輸出證據的壓縮包密碼。也就是說,現實的取證需要從業者能夠找出間接的惡意行為證據:攻擊者攻擊系統的痕跡,或是內部威脅行為的痕跡。實際工作中計算機取證大部分是從日誌、內存、文件系統中找出犯罪線索,並找出與文件或文件系統中數據的關係。而網絡(流量抓包)取證比起內容數據的分析,更注重元數據的分析,也就是當前不同端點間常用TLS加密的網絡會話。
CTF競賽中的取證類謎題和實際生活中的工作關聯較少的原因可能在於這類題目並不像漏洞利用一類的題目受到人們的注意。也有可能是它很少吸引黑客們來參與解答此類題目。不管怎麼樣,許多參賽者都喜歡解答CTF中各種簡單多樣化的取證題目,考慮到大多數參賽者沒有能夠在可執行文件分析大賽中帶來巨大優勢的售價5000美元的帶有Hex-Rays反編譯器的IDA Pro專業版,這類題目還是相對適合入門新手來做的。
前兩類技術你可以在CTF外自行學習,而第三種則只能在實戰中不斷熟練。好在通過本文檔,你可以有個大致的了解。
當然了,在大部分CTF比賽中最常用的環境是Linux系統,有時候也會用到VM虛擬機中的Windows。MacOS也可以拿來代替Linux,前提是你得忍受部分開源工具無法正確編譯運行。
通過python操作二進位數據
假設你已經初步掌握了一些Python編程技巧,你也可能不太清楚如何有效地操作二進位數據。類似C的低級語言可能更適合這一工作,但Python開源社區中的各種包比起學習C語言的難度,可以幫助你更快速的上手操作二進位數據。
下面是常用的python操作二進位數據的例子
在二進位模式中讀取和寫入文件:
f = open('Reverseit', "rb")
s = f.read()
f.close()
f = open('ItsReversed', "wb")
f.write(s[::-1])
f.close()
字節數組是一種數組的可變序列,在Python2和3都可以使用。
>>> s = bytearray(b"Hello World")
>>> for c in s: print(c)
...
72
101
108
108
111
32
87
111
114
108
100
你也可以通過16進位的字節數組來表示Unicode字符串:
>>> example2 = bytearray.fromhex(u'00 ff')
>>> example2
bytearray(b'x00xff')
>>> example2[1]
255
字節數組的格式包括了大多數python中常用的字符串和列表函數,例如:split(), insert(), reverse(), extend(), pop(), remove().
將文件以二進位數組形式讀取的例子:
data = bytearray(open('challenge.png', 'rb').read())
接下來會講述常見的CTF取證題目概念和一些幫助初步解題的推薦工具。
文件格式的判斷(以及』魔法字節』)
幾乎所有的取證題目都會涉及到一個有時候連告訴你是什麼文件類型的提示都沒有的文件。文件類型對於用戶來說長期是和文件擴展名相關聯的(例如MarkDown的readme.md文件)MIME類型(網際網路上指定應用程式打開對應擴展名的協議)或是存儲在文件系統上的元數據(淚如Mac OS上的mdls命令)。在CTF中,有時候是用各種方法來嘗試判斷文件的類型。
在UNIX系統中,傳統的識別文件類型方法是libmagic,也就是識別被稱作『魔法數字』或者『魔法字節』——文件頭中特定字節的庫。libmagic庫是文件操作中最基礎的命令:
$ file screenshot.png
screenshot.png: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced
考慮到這是CTF競賽,因此競賽時命題人會故意設計一些針對常用工具和方法,故意誤導人的文件。同時如果一個文件內部包含了其他文件的信息,那麼文件命令只能夠識別其中包含的文件類型。此時你需要進一步深入地分析文件內容。
TrID是一個專業的文件分析工具,儘管它沒有開源,但它在多個平臺上都是免費使用的。它還允許一定程度上的自主分析功能。它的優勢在於內部包含有世上大多數文件類型的屬性和混淆格式。
文件中的文件,或是加載在固件和文件系統中的文件是CTF中常見的一類取證題目。針對識別文件系統中附加的其他文件並進行提取的技術稱作『文件雕復』。最常用於這一工作的固件分析工具是binwalk。
scalpel作為SluethKit(在文件系統中會具體談到)是另一個用於文件恢復的文件雕復工具。
要手動提取文件(已知偏移量)的部分信息,你可以使用dd命令。許多16進位編輯器也提供了複製黏貼部分字節到新建文件中的功能,所以你不需要專門去研究偏移量。
使用dd命令從一個偏移量1335205的文件中提取40668937位元組數據的文件雕復例子:
$ dd if=./file_with_a_file_in_it.xxx of=./extracted_file.xxx bs=1 skip=1335205 count=40668937
儘管上述工具能夠滿足基本需求,但有時候你還是需要人工利用Python的re或regex模塊來編程提取文件中的一小部分信息,從而判斷魔法字節,以及Python的zlib模塊來提取zlib數據流。
剛開始你可能一頭霧水,面對著題目文件不知道如何進行下一步。常見的一些方式包括搜索文件中所有的明文字符串,例如grep指令搜索特定字符串,bgrep來搜索非文本形式的數據規律,還有hexdump命令。
通過文件偏移來獲取所有ASCII字符串的例子如下:
Unicode字符串,例如UTF-8會在搜索ASCII字符串時出現。但如果要搜索其他編碼,可以翻閱幫助文檔中關於-e指令的說明。需要注意許多編碼都有可能在取證中出現,但最簡單的編碼始終佔據著主導地位。
搜索PNG文件中PNG魔法字節的例子
$ bgrep 89504e47 screenshot.png
screenshot.png: 00000000
使用hexdump的例子:
hexdump的優勢不在於它是最好的16進位編輯器(它絕對不是)而在於你可以用操作命令直接輸出hexdump,或用grep命令來輸出,還能用字符串格式化命令來設置輸出格式。
使用hexdump格式化命令以64位元組整數的16進位來輸出文件前50個字節例子如下:
$ hexdump -n 50 -e '"0x%08x "' screenshot.png
0x474e5089 0x0a1a0a0d 0x0d000000 0x52444849 0xca050000 0x88020000 0x00000608 0xc93d4000 0x180000a4 0x43436924 0x43434950 0x6f725020 0x00006966
其他16進位鏡像操作例子。
二進位指的是1和0,但它們經常以文本的形式傳輸著。因為如果真的要發送一組101010101的序列無疑是十分浪費的,所以數據經常先通過一種方式進行編碼。這就是所說的二進位到文本編碼,一種十分流行的CTF賽題。當遇到在分析文件種字符串的情況時,可以嘗試將二進位數據編碼為文本字符串。
我們之前提到要精通CTF取證題目,需要認識各類編碼形式。有些一眼就能看出來,例如編碼有著字母數字和=結尾的特徵(如果出現的話)。現在有許多在線編碼/解碼器,你也可以使用命令:
$ echo aGVsbG8gd29ybGQh | -D
hello world!
ASCII編碼的16進位由於字符特徵(0-9,A-F)而十分好認。ASCII字符本身佔據了一段字節(0x00到0x7f)所以如果你在文件中找到了類似68 65 6c 6c 6f 20 77 6f 72 6c 64 21的字符串,很明顯會都是類似0x60的特點——這就是ASCII碼。從技術角度來說,這個是文本(「hello world!」)通過ASCII(二進位)編碼後以16進位(文本)編碼獲得的。是不是已經暈了?
下列多個站點提供了多種在線的編碼/解碼。在本地上可以嘗試使用xxd命令。
使用xxd將文本從ASCII轉換為16進位編碼的例子:
$ echo hello world! | xxd -p
68656c6c6f20776f726c64210a
我們已經討論了取證任務中常用的基礎概念和工具,現在我們將具體的分類討論取證題目,以及各種情況下推薦用於分析的工具。
儘管無法準備每一種可能遇到的數據格式,但CTF中還是有不少經常出現的格式。如果你能針對下述情況準備號分析工具,你就能應付大多數的取證賽題:
壓縮包文件(ZIP,TGZ)
圖片格式文件 (JPG, GIF, BMP, PNG)
文件流圖片 (especially EXT4)
流量包文件(PCAP, PCAPNG)
內存鏡像
視頻(尤其是MP4)或音頻(尤其是WAV, MP3)
微軟的OFFICE文件 (RTF, OLE, OOXML)
在一些難度較高的CTF競賽中,命題人會自豪地出一些要求參賽者分析沒有現成的公開工具拿來分析的複雜格式文件。你需要了解如何快速找到沒見過的格式相關的文檔和工具。許多文件格式都可以通過網際網路搜索找到相關的具體開源報告,但如果事先了解過相關文檔,無疑會受益匪淺。所以我們列出了下列的參考連結。
當分析文件格式時,能夠用於識別不同文件格式(模板)的16進位編輯器010 Editor是十分有用的,另一個類似的開源工具是Kaitai。還有類似功能的Wireshark網絡協議分析器可以用來分析特定的多媒體文件(例如GIF,JPG和PNG)。然而這些工具都是分析完整無損的文件,無法有效的用於CTF競賽中要求你重構缺失一定內容的文件。
你也可以查看下由Ange Albertini編輯的文件格式可視化說明。
許多CTF題目都會壓縮一個在zip,7z,rar,tar或tag文件中,但只有取證題會將壓縮包作為題目的一部分。很多時候題目的目標是從一個損壞的壓縮包中提取文件,或是在一個沒有用到的區域(常規的取證題目)中找到加載的數據。Zip既是現實中最常用的,也是CTF中最常見的。
下面有多個命令行工具來幫助了解zip壓縮文件的信息:
解壓縮操作經常會給出zip文件無法解壓的相關有用信息
Zipdetails -v能夠根據參數提供多種信息
Zipinfo在無需提取的情況下列出了zip文件的內容信息
zip -F input.zip --out output.zip和zip -FF input.zip --out output.zip 嘗試修復損壞的zip文件
fcrackzip 嘗試爆破zip壓縮包密碼(適用於少於7個字母的密碼)
在遇到密碼保護的zip文件時,需要注意它並沒有加密文件名和壓縮包中的原始文件大小,而加密保護的RAR和7z文件則無法查看。
在破解加密zip時,如果你有加密壓縮包其中一個文件的未加密/未壓縮副本,你可以嘗試進行(點擊查看操作過程和學術原理)的明文攻擊操作。但新的密碼保護壓縮文件(如採用AES-256而不是ZIP加密)沒有這一安全隱患。
CTF是十分有趣的,而圖像文件能夠很好地包含黑客文化,因此CTF競賽中經常會出現各種圖像文件。圖像文件有多種複雜的格式,可以用於各種涉及到元數據、信息丟失和無損壓縮、校驗、隱寫或可視化數據編碼的分析解密。
第一步往往是使用exiftool檢查圖像文件的元數據,CTF中使用的圖像文件中EXIF信息往往保留著原始圖像例如相機、略縮圖、注釋、GPS定位等信息。不論這些元數據是否有用,都值得先去看一看。
Exiftool導出的部分數據例子:
PNG圖片在CTF競賽中可能由於它低損壓縮的格式適合在圖片中隱藏不可見的數據而十分流行。PNG圖片也可以在wireshark中分割開來,你可以嘗試使用pngcheck來試圖修復被破壞的PNG圖片,如果你需要深入研究PNG文件的數據,那麼你可以使用pngtools。
隱寫技術指的是將一些秘密數據儲存在現實中較為罕見無關數據(明文)中(通過密碼學進行有效加密)的技術,但在CTF取證題目中,隱寫題目十分流行。隱寫的明文可以是任何一種數據,但視頻文件由於能夠允許一定量不引人注意的數據丟失(同樣特徵可以實現低損壓縮)而更適合作為賽題。隱寫的難點不光在於如何識別需要提取的隱寫技術,還包括如果使用steganographic工具來進行提取。針對賽題的文件,我們可以進行一些方法來嘗試驗證其是否是一個隱寫題目。Stegsolve(JAR下載連結)經常用於各種圖片隱寫中判斷和提取隱藏數據。你也可以嘗試zsteg。
Gimp提供了轉換各類圖像文件可視化數據的功能,CTF命題人經常使用修改過的Hue/Saturation/Luminance值或顏色通道來隱藏一段秘密信息。Gimp還可以用於確認文件是否是一個圖像文件,例如你從內存鏡像或其他地方獲取了一個圖片文件,但你不知道它標註像素格式等信息的頭文件,那麼你可以將這些數據作為『Raw image data』交給Gimp進行各種處理操作。
ImageMagick工具集可以嵌入在腳本中幫助你快速進行識別、調整、修改、轉換圖像文件的各類操作,它的比較工具還可以幫助你快速找出兩張看似相同的圖片中的數據區別。
如果你在寫一個自製的圖像解析,可以試著導入Pillow(Python圖像處理庫PTL)。它允許你從動態GIF中提取每一幀圖像或是從JPG圖片中提取不同位置的像素——它基本支持所有的圖像文件格式。
如果題目是一個QR碼(2D條形碼)使用Python的qrtools模塊來檢查一下,你能通過不到5行的Python代碼來對QR碼的圖像進行解碼。當然你也可以用智慧型手機來掃一掃對單獨的一個QR碼解碼。
有時候,CTF取證類賽題會提供一個完整的磁碟鏡像,參賽者需要具備一定的策略來在這個數據系統中尋找特定的flag。在計算機取證中,這類策略指的是快速理清內容的能力。沒有策略的話只能耗時耗力地查看所有的信息。
加載光碟機文件系統鏡像的例子:
mkdir /mnt/challenge
mount -t iso9660 challengefile /mnt/challenge
一旦你加載了文件系統,那麼使用tree命令來快速查看目錄結構從而判斷是否有值得你進一步分析的內容是個好主意。
你也許不需要在可見文件系統中尋找特定的文件,而是要在隱藏卷、未使用空間(硬碟中沒有劃分到任何一部分的空間)或是類似http://www.nirsoft.net/utils/alternate_data_streams.html的非文件系統結構中尋找被刪除的文件。對於EXT3和EXT4文件系統來說,你可以使用extundelete嘗試恢復被刪除的文件。對於其他系統,則可以使用TestDisk進行恢復丟失的分區表,修復損壞的文件,恢復FAT或NTFS盤中的刪除文件等多種操作。
The Sleuth Kit和它的WEB用戶界面『Autospy』是一個用於文件系統分析的開源工具,它也許過於針對執法部門的工作需求,但在搜索整個硬碟鏡像的特定關鍵字或未使用空間時仍是個十分好用的工具。
專門針對固定功能的低資源系統中加載了驅動的文件系統是一類特別的題目,它們可以使壓縮過的單獨文件,或是只讀文件。Squashfs是一類非常受歡迎的驅動文件系統,你可以使用firmware-mod-kit或binwalk來分析其中加載的鏡像文件。
網絡流量經常通過如tcpdump或Wireshark(都基於libpcap)的軟體以PCAP(抓包)文件的格式來捕捉並保存。通常CTF比賽中會提供一個包含一些流量數據和需要參賽者恢復/重構傳輸文件或信息的PCAP文件。複雜的地方在於數據包裡充滿著大量無關的流量信息,因此如何分類和過濾數據是參賽者需要完成的工作。
在初步分析中,可以嘗試使用Wiresharks的靜態和會話視圖或capinfos命令來從高層視圖查看報文。Wireshark以及命令行版本的tshark都支持過濾功能也就是說你精通正則的話,可以快速縮小你需要分析的範圍。還有個叫做PacketTotal的在線工具能夠將你上傳的不超過50MB的PCAP文件轉換為可視化時間關係以及SSL元數據的界面,它還能夠高亮文件傳輸過程,便於你發現可疑的活動。如果你已經知道你要找的是什麼,也可以用ngrep命令來搜索整個數據報文。
正如同文件雕復指的是識別和提取加載在其他文件中的文件一樣,報文雕復指的是從抓到的數據包中提取出文件。有一些昂貴的商業工具專門完成這類工作,但Xplico框架作為開源工具,也能滿足這一需求。Wireshark也有一個能夠將數據從抓包中提取的功能『導出對象』(例如:文件—到處對象—HTTP—保存全部),除此之外,你也可以嘗試tcpxtract,Network Miner,Foremost,或是Snort。
如果你想要編寫自己的腳本來直接處理PCAP文件,那麼推薦用於操作pcap的Python包dpkt,你也可以用Wirepy來寫Wireshark的交互。
如果你要嘗試修復損壞的PCAP文件,這裡有一個叫做PCAPfix的在線修復PCAP文件服務。
注意PCAP和PCAPNG的不同:這是兩種版本的PCAP文件格式。PCAPNG版本較新,因此有工具不支持該類型文件。你可能需要使用Wireshark或其他兼容工具將PCAPNG文件轉換為PCAP從而在其他工具中使用。
多年來計算機取證經常被看作是文件系統取證,但當攻擊者們越來越熟練時,它們開始避開硬碟進行攻擊。同時內存快照由於保存了實時環境(系統設置、遠程腳本、密碼、密鑰等)這些無法在硬碟上找到的線索。所以內存快照/鏡像取證是這些年事故響應中越來越多的方法。在CTF競賽中,你可能會遇到提供一個內存鏡像文件,並讓你從中定位和提取一個隱藏文件或信息的題目。
用於內存鏡像分析的主流開源框架是Volatility,Volatility是一個支持解析外部工具採集的內存獎項(例如VM採集的VMware內存鏡像)的Python腳本。在提供內存鏡像文件和相關資料(從鏡像中獲取的系統)後,Volatility能夠開始識別數據的結構,運行進程,密碼等資料。它還支持提取多種信息的人工插件拓展功能。
Ethscan是一個在內存鏡像中尋找類似流量數據,並提取為Wireshark中查看的PCAP文件的工具。它還有插件可以提取SQL資料庫,Chrome訪問記錄,Firefox訪問記錄等數據。
PDF文件是一個非常複雜的文檔文件格式,多年來已經出現了多種可以隱藏數據的地方和技巧,因此它在CTF取證題中十分流行。NSA在2008年發表過標題為「Adobe PDF中的隱藏數據和元數據:公開危險和應對措施」。儘管原URL已經無法打開,但你仍可以在這裡打開副本。Ange Albertini也在Github上保留著一份關於PDF文件格式的隱藏小技巧的Wiki。
PDF格式類似HTML一樣有著部分的明文,但其中還包括了許多二進位『對象』。Didier Steven寫過關於PDF格式的具體材料分析,這些二進位『對象』可以是壓縮數據,也可以是加密數據,還可以類似Java或Flash的腳本語言。你可以通過文本編輯器也可以使用類似Origami的PDF文件編輯器來顯示PDF的結構。
qpdf是一個查看pdf文件並整理提取信息時十分有用的工具,另一個是Ruby中的Origami框架。
在搜索PDF文件中的隱藏數據時,常見的隱藏地方包括:
還有許多Python包能夠幫助處理PDF文件,例如PeepDF允許你製作自己的分解腳本。
像圖像文件一樣,不僅僅因為其趣味,還由於現實中經常運用音頻和視頻來隱藏數據,因此音頻和視頻文件也經常出現在CTF取證賽題中。正如同圖像文件一樣,隱寫技術可以將秘密信息加載在內容數據上,你需要知道如何查看文件元數據區域來尋找線索。第一步一般是使用mediainfo工具(或exiftool)來查看內容區域和元數據信息。
Audacity是一個開源的音頻文件和波形圖處理工具,CTF命題人也喜歡用它在音頻波形(也就是你看到的頻譜圖,當然你可以用更加專業的Sonic Visualiser來查看))中添加文本信息。Audiacity還允許你進行降低播放速度、倒置播放等操作來幫助你從懷疑有隱藏信息(比如你聽到的雜音、電磁音、混亂的聲音等)中尋找隱藏的信息。Sox是另一個用於轉換和操作音頻文件的命令行工具。
還有種常見的方法是通過檢查LSB來尋找隱藏信息。許多音頻和視頻都採用了分離(固定長度)的數據塊從而實現流暢播放,這些數據塊的LSB是一個非常常見的不影響文件肉眼可見層面的隱藏數據的位置。
其他情況還有將信息通過雙音多頻或莫爾斯碼的編碼方式隱藏在音頻中,針對這些可以使用multimon-ng來解碼。
視頻文件格式由於它採用分離的音頻流和視頻流而十分適合存儲各類信息。推薦使用ffmpeg來分析和操作視頻文件。Ffmpeg -i能夠提供文件內容的初步分析,也可以用於分離或播放不同的內容流。在Python中也可以ffmpy實現ffmpeg的功能。
微軟開發了多種office文檔的文件格式,其中多數由於支持宏(VBA腳本)而被用於釣魚攻擊和執行惡意軟體。微軟文檔的取證分析與PDF的取證分析區別不大,只是更貼近現實中的事故相應。
大致來說存在兩類Office文件格式:早期的文件格式(例如RTF,DOC,XLS,PPT等擴展名)和Office Open XML格式(例如DOCX、XLSX、PPTX等擴展名)。這兩類格式都是支持連結和附加內容(對象)的組合結構二進位文件格式。OOXML文件實際上是一種壓縮包容器(參考上文提及的壓縮文件),也就是解壓縮文件是最簡單地查看隱藏數據的方法:
正如你所看到的一樣,有一些數據結構是由文件和文件夾關系所生成的。其他則在XML文件中標註出來。New Steganographic Techniques for the OOXML File Format, 2011論文具體講述了一些數據隱藏的技巧,但CTF競賽命題人總是會出一些新的想法。
有一個Python工具集專門用於查看和分析OLE和OOXML文檔:oletools。對於OOXML文檔,OfficeDissector是一個非常強大的分析框架(Python庫)後者還包含了一個快速上手說明。
有時候賽題不一定是找出隱藏的固定數據,也有可能是分析一個VBA宏的行為模式,這也是更加貼近現實的一個場景。你可能需要花上一整天來進行這一分析。前文提到的解析工具可以幫助你判斷是否存在一個宏,以及如何從中提取出來。一個常見的VBA宏是在Windows的Office文檔中,嘗試下載一個Powershell腳本到TEMP文件夾並加以運行,此時你就要開始分析這個Powershell腳本。惡意VBA宏由於VBA相當於一個跨平臺代碼編譯執行框架而易於分析。著案例中你只需要了解複雜的VBA宏,以及它的混淆和運行環境,而無須獲取微軟的許可證進行調試。你也可以使用Libre Office,它提供了一個友好的調試程序界面,你可以設置端點和生成觀察變量,捕獲任意時刻運行後的變量值,你也可以使用命令行從特定文件中執行宏:
$ soffice path/to/test.docx macro://./standard.module1.mymacro
本文由看雪翻譯小組 xycxmz 編譯,來源Mike's Blo
文章出處:看雪社區
CTF逆向工程入門(上)【鵬越·學霸專區】
CTF逆向工程入門(下)【鵬越·學霸專區】
聲明:
本文內容或圖片來自網際網路收集或網友投稿,如有版權問題請與我們取得聯繫:webadm@pengyueisos.com
現在關注「鵬越網絡空間安全研究院」微信公眾號,在對話框中輸入「工控」、「培訓」、「CTF」 、「物聯網」、 「人工智慧」、「招聘」等關鍵字,系統自動推送相應內容。今後我們還會推出更多方便搜索和閱讀的服務,敬請期待!