站在巨人的肩頭才會看見更遠的世界,這是一篇來自技術牛人的神總結,運用多年實戰經驗總結的CTF取證方法,全面細緻,通俗易懂,掌握了這個技能定會讓你在CTF路上少走很多彎路,不看真的會後悔!

本篇文章大約6千字,閱讀時間需20分鐘,希望大家耐心看完!

取證

在CTF(Capture The Flag,中文一般譯作奪旗賽,在網路安全領域中指的是網路安全技術人員之間進行技術競技的一種比賽形式)中,取證的挑戰可能包括文件格式分析,隱寫術,內存轉儲分析或網路數據包捕獲分析等。檢查和處理靜態數據文件,而不是可執行程序或遠程伺服器的隱藏信息,這其中任何挑戰都可以被認為一個取證挑戰,除非它涉及密碼學,在這種情況下它可能屬於Crypto類別。

取證是一個非常寬泛的CTF類別概念,因為這個叫法不能很好對應到安全行業中的特定工作角色,儘管一些挑戰模擬了事件響應(IR)中看到的任務種類,即使在IR工作中,計算機取證通常是執法人員為了尋求證據數據和歸屬而做的事,很少有人是為了預防被攻擊或僅僅是為了恢復系統完整性的商業行為。

與大多數CTF取證挑戰不同,現實世界的計算機取證任務幾乎不會涉及解開巧妙編碼的位元組、隱藏數據、文件夾中的mastroshka文件或其他複雜的問題。通常人們不會通過仔細重新組裝損壞的PNG文件來破壞刑事案件的分析,揭示QR碼的照片,該QR碼解碼為包含NES rom的zip存檔的密碼。

但是,現實世界的取證通常要求取證人找到間接的惡意證據,比如系統中的攻擊者的痕迹或內部威脅行為的痕迹。實際的計算機取證主要在於對日誌,內存,文件系統或註冊表以及相關的文件和文件系統元數據中找到犯罪的線索。此外,網路(數據包捕獲)取證更多的涉及元數據分析,而不是內容分析,因為現在大多數網路會話都在端點之間進行TLS加密。

之所以會在CTF進行這個脫離實踐的挑戰遊戲,就是為了提高此項賽事的觀賞性和難度。

為了解決這個挑戰,你需要具備以下三個基本技能:

1、了解腳本語言,例如Python;

2、知道如何處理該語言的二進位數據(位元組級操作);

3、識別格式、協議、結構和編碼。

當然,像大多數CTF一樣,理想的環境是一個Linux系統。如果你願意使用Windows系統也行,不過不建議用Mac系統。

在Python中處理二進位數據

假設你已經選擇了一些Python編程,你仍然可能不知道如何有效的處理二進位數據。像C這樣的低級語言可能更適合這個任務。

以下是使用Python中的二進位數據的一些示例。

以二進位方式寫入或讀取文件:

f = open(Reverseit, "rb")s = f.read()f.close()f = open

(ItsReversed, "wb")f.write(s[::-1])f.close()bytearray類型是一個可變的位元組序列,可以在Python 2和3中使用:

你還可以從十六進位表示的Unicode字元串中定義一個bytearray:

bytearray類型具有與Python str或list大致相同的方便方法split(), insert(), reverse(),extend(),pop(),remove()等。

將一個文件讀入一個字母進行處理:

data = bytearray(open(challenge.png, rb).read())

常見取證概念和工具

文件格式識別和魔術位元組

幾乎所有的取證挑戰都將涉及一個文件,通常會在沒有任何上下文的環境中讓你猜測這個文件是幹什麼的。 Filetype作為用戶熟知的概念,歷史上已被指定為filetype擴展名,例如,MarkDown的readme.md,MIME類型,如Web上Content-Type頭文件,或者存儲在文件系統中的元數據(as在MacOS中使用mdls命令)。在CTF中,比賽的一部分就是使用啟發式方法來自己識別文件。

用於在UNIX上識別文件類型的傳統啟發式是libmagic,它是用於識別所謂的「魔術數字」或「魔術位元組」的庫,它是文件類型頭文件中的唯一標識標記位元組。 libmagic 庫是文件命令的基礎。

$ file screenshot.png screenshot.png: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced請記住,啟發式和使用它們的工具很容易被混淆。因為在比賽中,你可能會看到一個被故意製作來誤導的文件。另外,如果一個文件包含一個嵌入其中的其他文件,那麼文件命令只能識別包含的文件類型。在這些情況下,你可能需要更仔細的檢查文件內容。

TrID是更複雜的文件版本,雖然它是封閉源代碼,但它是免費的,可以跨平台運行。它還使用識別啟發式,又具有確定的百分比。它的優點是其較大的已知文件類型,包括現實世界中看到的許多專有和晦澀的格式。

File Carving

File Carving是數字取證研究中頻繁使用的一種文件恢復技術,它從表面上無差別的二進位數據集,即原始磁碟映象中提取(或者說恢復)文件,而不利用磁碟映象的文件系統類型。這個過程就如同在一塊光滑的石頭上雕刻出許多圖案一樣,故稱之為「Carving」(雕刻)。

scalpel,現在是SleuthKit的一部分,SleuthKit是File Carving的另一種工具,以前稱為Foremost。

要手動提取文件的子部分,可以使用dd命令。許多十六進位編輯器還提供複製位元組並將其粘貼為新文件的功能,因此你不需要研究偏移量。

以下是使用dd從文件偏移量1335205處進行File Carving的示例,長度為40668937位元組:

$ dd if=./file_with_a_file_in_it.xxx of=./extracted_file.xxx bs=1 skip=1335205 count=40668937儘管上述工具應該足夠了,但在某些情況下,你可能還需要使用Python編程方式提取文件的子部分,使用Python的re或regex模塊來識別魔術位元組,以及zlib模塊來提取zlib流。

初始分析

在搜索文件中的所有純文本字元串時要用到一些有用的命令字元串,比如,grep是用來搜索特定的字元串,bgrep是用來搜索非文本數據模式和hexdump。

以下是使用字元串查找ASCII字元串和文件偏移量的示例:

$ strings -o screenshot.png 12 IHDR 36 $iCCPICC Profile 88 U2EI4HB... 767787 IENDUnicode字元串(如果是UTF-8)可能會顯示在搜索ASCII字元串中,但是要搜索其他編碼,請參閱-e標誌的文檔。請注意字元串會存在許多編碼陷阱。

以下是在PNG文件中搜索PNG魔術位元組的示例:

$ bgrep 89504e47 screenshot.png screenshot.png: 00000000以下是使用hexdump的例子:

hexdump的優點不在於它是最好的十六進位編輯器,而是可以將其他命令的直接輸出管道轉換為hexdump,或將其輸出管道輸出到grep又或者使用格式字元串對其輸出格式化。

以下是使用hexdump格式字元串將文件的前50個位元組作為一個64位整數以十六進位輸出:

hexdump命令的其他用途

二進位文本編碼

二進位就是1和0,但通常作為文本傳輸,傳輸101010101的實際序列將是浪費的,因此首先要使用各種方法對數據進行編碼。這就是所謂的二進位到文本編碼。當對上述文件進行字元串分析時,你可能會發現編碼為文本字元串的二進位數據。

前面已經說過取證最重要的是能夠識別編碼,有一些可以一目了然地識別,例如Base64編碼的內容,可以通過其字母數字字符集和其「=」填充後綴識別。網上有很多Base64編碼器或者可以使用base64命令:

$ echo aGVsbG8gd29ybGQh | base64 -Dhello world!ASCII編碼的十六進位也可以通過其字符集(0-9,A-F)來標識,ASCII字元本身佔用了一定範圍的位元組(0x00到0x7f,見man ascii),所以如果你正在檢查一個文件並找到一個像68 65 6c 6c 6f 20 77 6f 72 6c 64 21這樣的字元串,那麼請注意這就是ASCII碼。在技術上,它是以ASCII(二進位)編碼為十六進位編碼的文本。

目前已經有幾個網站為各種編碼提供在線編碼解碼器,對於本地的轉換器,請嘗試使用xxd命令。

以下是使用xxd執行text-as-ascii-to-hex編碼的示例:

$ echo hello world! | xxd -p68656c6c6f20776f726c64210a

普通文件格式

前面介紹了通用取證任務的基本概念和工具,接下來將更具體介紹一些有挑戰的取證方法以及用於分析每個方法中的推薦工具。

對每種可能的數據格式做準備是不可能實現的,但在CTF中有一些是特別受歡迎的,例如你需要準備以下工具:

· 歸檔文件(ZIP,TGZ)

· 圖像文件格式(JPG,GIF,BMP,PNG)

· 文件系統映像(特別是EXT4)

· 數據包捕獲(PCAP,PCAPNG)

· 內存轉儲

· PDF

· 視頻(特別是MP4)或音頻(尤其是WAV,MP3)

· Microsoft的Office格式(RTF,OLE,OOXML)

分析文件格式時,文件格式感知(a.k.a.模板化)十六進位編輯器,如010編輯器,一個被稱為Kaitai的開源產品,此外,Wireshark網路協議分析儀的一個不太知名的功能是能夠分析某些媒體文件格式,如GIF,JPG和PNG。然而,所有這些工具都是用於分析未損壞和格式良好的文件,許多CTF挑戰會讓參賽者根據丟失或清零的格式欄位等重建文件的任務。

Zip文件的分析

大多數CTF挑戰都包含在zip,7z,rar,tar或tgz文件中,但只有在取證挑戰中,存檔容器文件才是挑戰的一部分。通常,挑戰的目標是從損壞的存檔中提取文件或者在未使用的欄位中找到嵌入的數據(常見的取證挑戰),而zip文件是目前最常見的。

有一些zip文件的命令行工具將有助於我們的分析:

· unzip通常會輸出有關zip無法解壓原因的有用信息。

· zipdetails -v將提供有關格式各個欄位中存在的值的深入信息。

· zipinfo列出了有關zip文件內容的信息,而不提取它。

· zip -F input.zip –out output.zip和zip -FF input.zip –out output.zip嘗試修復損壞的zip文件。

· fcrackzip brute-force會嘗試猜測一個密碼小於7個字元的zip密碼。

Zip文件格式規範

與密碼保護的RAR或7z文件不同,zip文件的一個重要的安全相關注意事項是它們不加密其包含壓縮文件的文件名和原始文件大小。

關於zip破解的另一個注意事項是,如果你有加密zip中壓縮的任何一個文件的未加密或未壓縮副本,你可以執行明文攻擊並破解zip。用於密碼保護zip文件的新方案(使用AES-256,而不是「ZipCrypto」)並沒有這個弱點。

圖像文件格式分析

圖像文件格式是複雜的,會以許多方式被攻擊,這就使得挑戰涉及元數據欄位,有損和無損壓縮,校驗和隱寫術或視覺數據編碼方案。

簡單的初步分析步驟是使用exiftool來檢查圖像文件的元數據欄位,如果圖像文件的挑戰被濫用於CTF,則其EXIF可能會識別原始圖像尺寸,相機類型,嵌入的縮略圖,注釋和版權字元串,GPS位置坐標等。

exiftool輸出示例:

特別是,PNG文件在CTF挑戰中很受歡迎,可能是因為它們的無損壓縮適用於隱藏圖像中的非可視數據。可以在Wireshark中解析PNG文件,要驗證是否正確或嘗試修復損壞的PNG,你可以使用pngcheck。如果你需要深入挖掘PNG,pngtools軟體包可能會有用。

利用隱寫術在一個不相關的數據中隱藏一些秘密數據的做法在現實中非常罕見,所以在CTF中的另一個受歡迎的取證挑戰就是利用隱寫術來破解任何類型的數據。隱寫術的挑戰難點在於,提取隱藏的消息不僅需要使用隱寫術的檢測,而且還需要用於嵌入隱藏消息準確的隱寫工具。如果我們懷疑某文件使用了隱寫術,我們至少要檢查它是否存在。 Stegsolve通常用於將各種隱寫術技術應用於圖像文件,以嘗試檢測和提取隱藏的數據,你也可以試試zsteg。

Gimp提供了改變圖像文件的視覺數據的能力,曾經有CTF挑戰者使用改變的色相、飽和度、亮度值和顏色通道來隱藏秘密信息。Gimp還有助於確認是否真的是一個圖像文件,例如,當你從內存轉儲或其他地方的顯示緩衝區恢復圖像數據,但是缺少指定像素格式的圖像文件頭,圖像高度和寬度等,Gimp會將你的數據作為原始圖像數據打開,並嘗試使用不同的設置。

ImageMagick工具可以合併到腳本中,讓你能夠快速識別,調整大小,裁剪,修改,轉換或以其他方式處理圖像文件。它也可以使用比較功能找到兩個看似相同的圖像之間的視覺和數據差異。

如果你正在編寫自定義圖像文件格式解析器,請導入Python圖像庫(PIL),也稱為Pillow。它可以讓你從動畫GIF中提取幀,甚至可以從JPG中提取單個像素,它支持大多數主要圖像文件的格式。

如果使用QR碼(2D條形碼),還可以查看Python的qrtools模塊。你可以使用少於5行的Python來解碼QR碼的圖像。當然,如果你只需要解碼一個QR碼,任何智能手機都可以。

文件系統分析

計算機取證中的分類是指迅速縮小查看內容的能力,以下是安裝CD-ROM文件系統映像的示例:

mkdir /mnt/challengemount -t iso9660 challengefile /mnt/challenge一旦安裝了文件系統,tree命令會幫你快速查看目錄結構,看看是否有任何東西可以進一步分析。

你可能沒有在可視文件系統中查找文件,但很有可能是一個隱藏的卷,未分配的空間(不是任何分區的一部分的磁碟空間),已刪除的文件或非文件文件系統結構,

nirsoft.net/utils/alter。對於EXT3和EXT4文件系統,你可以嘗試使用extenelete查找已刪除的文件。對於其他的,比如TestDisk,恢復丟失的分區表,修復損壞的分區,取消刪除FAT或NTFS上的文件等。

Sleuth Kit及其附帶的基於Web的用戶界面「Autopsy」是用於文件系統分析的強大開源工具包,可以幫助你在整個磁碟映像中搜索關鍵字或查看未分配的空間等任務。

嵌入式設備文件系統是獨有的類別,專門針對固定功能的低資源環境,可以壓縮,單文件或只讀。 Squashfs是嵌入式設備文件系統的一種流行實現工具。對於嵌入式設備的圖像,你最好使用固件模塊或二進位解析器進行分析。

數據包捕獲(PCAP)文件分析

CTF挑戰之一就是提供一個表示一些網路流量的PCAP文件,並挑戰播放器恢復或重構傳輸的文件或傳輸的秘密。

要進行初步分析,請使用Wireshark的統計信息或對話視圖或其capinfos命令對數據包進行高級視圖。Wireshark及其命令行版本tshark都支持使用「過濾器」功能,如果你掌握語法,則可以快速減少分析範圍。

還有一個名為PacketTotal的在線服務,你可以提交高達50MB的PCAP文件,並在安全連接上以圖形方式顯示連接的時間線和SSL元數據。此外,它將突出顯示文件傳輸並顯示任何「可疑」活動。如果你已經知道要搜索的內容,可以使用ngrep進行grep搜索。

正如File Carving一樣,識別和提取文件中嵌入的文件,而「分組式的File Carving」則是用於描述從數據包捕獲中提取文件的術語,它是用於從捕獲的數據包中恢復文件的昂貴商業工具,但是一個開放源代碼的選擇是Xplico框架。Wireshark還具有「導出對象」功能,用於從捕獲中提取數據,例如,File – > Export Objects – > HTTP – > Save all。除此之外,你可以嘗試使用tcpxtract,Network Miner, Foremost或Snort。

如果要編寫自己的腳本直接處理PCAP文件,建議使用用於pcap操作的dpkt Python包。你也可以使用Wirepy從你的Python中使用Wireshark。如果嘗試修復損壞的PCAP文件,則有一個在線服務來修複名為PCAPfix的PCAP文件。

關於PCAP與PCAPNG的注意事項,有兩個版本的PCAP文件格式。你可能需要使用Wireshark或其他兼容工具將文件從PCAPNG轉換為PCAP,以便在其他工具中使用它。

內存轉儲分析

多年來,人們一直把計算機取證與文件系統取證看作是同一回事,但隨著攻擊越來越複雜,攻擊者開始避開磁碟。而且內存快照通常包含在磁碟上無法找到的上下文和線索中,因為它們只存在於運行時,例如操作配置,遠程攻擊shellcode,密碼和加密密鑰等。因此,內存快照或內存轉儲取證已經成為事件響應中的流行做法。

用於內存轉儲分析的首選開源框架是Volatility,Volatility是用於解析使用外部工具,或通過暫停VM收集的VMware內存映像收集的內存轉儲的Python腳本。因此,只要知道內存轉儲文件和相關的配置文件(收集轉儲的操作系統),Volatility就可以開始識別數據中的結構,運行進程,密碼等,它還可以使用插件來提取各種工件類型。

Ethscan用於在內存轉儲中查找看起來像網路數據包的數據,然後將其解壓縮到pcap文件中,以便在Wireshark中查看,用於提取SQL資料庫,Chrome歷史記錄,Firefox歷史等的插件。

PDF文件分析

PDF是一個非常複雜的文檔文件格式, PDF格式是部分純文本,如HTML,但內容中包含許多二進位對象。二進位對象可以是壓縮或甚至加密的數據,並且包括腳本語言中的內容,如JavaScript或Flash。要顯示PDF的結構,你可以使用文本編輯器瀏覽它,也可以使用PDF感覺文件格式編輯器打開它,如Origami。

qpdf是一個可以用於探索PDF並從中轉換或提取信息的工具。另一個是Ruby中的一個框架,叫做Origami。

當探索隱藏數據的PDF內容時,隱藏位置通常指的是以下幾個:

· 不可見層

· Adobe的元數據格式「XMP」

· PDF的「增量生成」功能,其中保留先前版本,但對用戶不可見

· 在白色背景上的白色文本

· 文字背後的圖像

· 重疊圖像後面的圖像

· 未顯示的評論

還有幾個Python包用於處理PDF文件格式,如PeepDF,可以讓你編寫自己的解析腳本。

視頻和音頻文件分析

與圖像文件格式一樣,可以使用stegonagraphy在內容數據中嵌入一個秘密消息,也要知道檢查文件元數據區域的線索。第一步是使用mediainfo工具或exiftool來查看內容類型並查看其元數據。

Audacity是很流行的開源音頻文件和波形查看工具,CTF挑戰者喜歡將文本編碼成音頻波形,儘管一個名為Sonic Visualiser的專用工具特別適合此任,但我還是建議使用spectogram視圖查看。Audacity還可以讓你減緩,反轉和執行其他可能顯示隱藏消息的操作,Sox是轉換和操作音頻文件的另一個有用的命令行工具。

檢查秘密消息的最低有效位(LSB)也是常見的。大多數音頻和視頻媒體格式使用離散方式以便可以流式傳輸,最低有效位的方法就是偷走某些數據而不會明顯影響文件的常見地點。

其他時候,消息可能會被編碼為DTMF音調或莫爾斯碼。

視頻文件格式實際上是容器格式,其中包含音頻和視頻的單獨流,它們被多路復用在一起進行播放。為了分析和處理視頻文件格式,建議使用ffmpeg。 ffmpeg –i可以給出文件內容的初步分析。它還可以解復用或回放內容流。

辦公文件分析

迄今為止,微軟已經創建了數十種Office文檔文件格式,其中許多文件格式已經被網路釣魚和惡意軟體作為傳播惡意程序的載體,因為它們包含宏(VBA腳本)。Office文檔取證分析與PDF文檔取證並不相同。

一般來說,Office文件格式有兩種類型:OLE格式(RTF,DOC,XLS,PPT等文件擴展名)和「Office Open XML」格式(包括DOCX,XLSX,PPTX的文件擴展名)。兩種格式都是結構化的複合文件二進位格式,可以啟用鏈接或嵌入式內容。OOXML文件實際上是zip文件容器,這意味著檢查隱藏數據的最簡單方法之一是簡單地解壓縮文檔:

你可以看到,一些結構是由文件和文件夾層次結構創建的,其餘的在XML文件中指定。

另外,Python工具集存在用於檢查和分析OLE和OOXML文檔——oletools。對於OOXML文檔,OfficeDissector和Python庫是一個非常強大的分析框架。有時,對辦公文件分析的挑戰不是找到隱藏的靜態數據,而是分析一個VBA宏來確定其行為。

上述解析器工具可以指示宏是否存在,並可能為你提取數據。 Windows文檔中的一個典型的VBA宏會將PowerShell腳本下載到%TEMP%,並嘗試執行它,在這種情況下,你可以使用PowerShell腳本分析任務。但惡意的VBA宏不會很複雜,因為VBA通常只是作為一個跳出平台來引導代碼執行。

如果宏被模糊化並且具有解壓縮程序,則不需要擁有Office許可證來進行調試。你可以使用Libre Office,任何已調試程序的人都會熟悉其界面。你可以設置斷點並創建觀察變數,並在解壓後捕獲其值,但在執行任何有效負載行為之前,可以從命令行啟動特定文檔的宏:

$ soffice path/to/test.docx macro://./standard.module1.mymacro


推薦閱讀:
相关文章