<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/8148

            將一個普通的文件系統想象為一個大的筆記本。當一個文件被刪除時,許多人以為這一頁是被用“三福”牌記號筆完全涂黑了,就像關于51 區的機密文檔那樣。但事實上,在這個操作背后所發生的一切更像是用一支很細的紅色筆在這一頁上面畫了一個巨大的X。文件被標記為已刪除,但內容實際上還存在于筆記本上。所有想知道其看起來是什么樣的人還是可以輕松地讀出它的內容,而不管有一個紅色的X 將它標記為已刪除。這就是庭審律師(不論是美劇Boston Legal 中的還是真實生活中的律師)如何從嫌疑犯的電腦里還原出大量已刪除的文件。蘋果公司也知道這一點,因此,在iOS 4 中開始使用一些特殊的精心設計的文件系統加密方法來防止已刪除文件被還原出來。然而,這種技巧并不完美,有時候文件依然可能被盜。

            在前面我們已經看到,iOS 4iOS 5 使用了加密的文件系統,在這個文件系統中的所有文件都使用了一個唯一的密鑰進行加密。在文件系統中,這個密鑰被保存在名為cprotect的屬性中,并且它實際上也是被所謂的AES-Wrap 方式加密的,加密它的密鑰或者是存放在NAND 可擦除區域的Dkey,或者是保護等級密鑰中的一個。當刪除一個文件時,該文件的cprotect 屬性會隨之被丟掉。而拿不到這個屬性中的加密密鑰,文件就無法被揭秘,那么將其還原出來也就沒有意義。

            想象一下,無論你走到哪里都有一個秘書跟著,我們把這個秘書叫作Iris。現在想象一下Iris會幫你記住過去一兩個月所做的每一件事情,記住的方法則是記錄下所有你說過的話,當然,這么做是你同意的。好,這么做確實很有幫助,因為你有時候容易忘事,尤其是你喝了太多的咖啡并且經常性地情緒崩潰的情況下。你可以告訴Iris在哪一天要和哪一個特定的客戶說些什么,這樣她會在到時候復述給你聽。

            但是Iris(除了在你晨浴時總是帶來尷尬以外)有一個缺點,因為她會記住你所說過的所有內容,所以一不留意就會就記錄下你要交給客戶用來訪問你網站上一些文件的密碼。你采用了非常嚴格的安全機制來保證你的密碼不會被泄露。但是Iris始終和你在一起,如果有人能夠拿下她,那就能夠拿到你的客戶的所有文件。

            蘋果公司的HFS日志就是iOS 的電子版IrisHSF日志記錄了所有文件系統的寫入、更改和刪除操作,這樣文件系統不會在設備毀壞或者電源無效后丟失數據。HFS日志使用EMF 密鑰加密,前面我們已經了解到,該密鑰存儲在NAND的可擦除存儲區域中。EMF密鑰并沒有使用需要的密碼來加密,所以任何人知道該怎么做就都能夠輕易解密HFS日志,而不需要用戶的密碼。在第5 章中介紹的Sogeti暴力破解工具除了可以從設備中抽取所有其他的加密密鑰外,還具有這個額外的功能。當一個文件的加密密鑰被寫入磁盤的cprotect屬性中時,HFS 日志會自動將它的一份副本記錄到磁盤中。

            如果一個文件已經被刪除,寫入到磁盤的加密密鑰會被抹掉,但是寫入到HFS日志中的那份副本并不會。這可能是因為HFS日志功能早于HFS+加密卷出現,因此,其運行是獨立于加密功能以及文件系統的其他附加功能的。除非蘋果公司從日志中定位并且清除一個已刪除文件的加密密鑰,否則可以竊取到這個密鑰副本并還原出原始文件。

            0x00 刮取HFS 日志


            在第5章中已經介紹了Sogeti 的免費數據保護工具套件,它包含一組用于解密iOS 文件和鑰匙鏈數據的工具。這個套件中的另一個名為emf_undelete的工具用于刮取出HFS 日志中包含了文件加密密鑰的cprotect屬性。這個工具會嘗試著使用這些密鑰來解密磁盤中殘留的文件。就像Iris一樣,HFS日志只會存儲有限的一段時間里的信息,直到這些信息成為更舊的數據被輪換出去。這段時間的長度取決于設備的活躍程度,可能短到只有一天,也可能長達數周。設備使用得越頻繁,HFS 日志輪換出老舊數據就越快。

            為了獲得日志的內容,我們進入Sogeti工具集的python_scripts目錄下,執行其中的emf_undelete.py腳本,并輸入用RawTheft 載荷獲取到的原始磁盤鏡像。此外,還需要用第4 章中的KeyTheft 載荷獲取一份設備的加密密鑰。

            $ python emf_undelete.py rdisk0s1s2.dmg
            Keybag: SIGN check OK
            Keybag unlocked with passcode key
            cprotect version : 2
            Found deleted file record 109296 lto2.dat
            Found deleted file record 111607 NetworkInterfaces.plist
            Found deleted file record 111939 com.apple.AutoWake.plist
            Found deleted file record 111571 com.apple.PowerManagement.plist
            Found deleted file record 109294 com.apple.network.identification.plist
            Found deleted file record 111874 com.apple.wifi.plist
            Found deleted file record 111871 preferences.plist
            ...
            

            當腳本運行時,會去掃描日志中已刪除的文件和加密密鑰,然后,它會執行第二遍掃描,將數據抽取到兩個名為junkundelete 的目錄中。其中,undelete 目錄包含腳本可以驗證已經成功解密的文件;junk 目錄則包含它無法驗證的那些,但也許仍然是有效的。

            這個EMF 反刪除腳本中預先寫入了一些基本的文件頭部(稱為magic 值),它使用這些頭部來判斷文件是否有效。檢查一下hfs/journal.py 文件的isDecryptedCorrectly 函數,就會看到它們。

            magics=["SQLite", "bplist", "<?xml", "\xFF\xD8\xFF", "\xCE\xFA\xED\xFE"]
            """
            HAX: should do something better like compute entropy or something
            """
            def isDecryptedCorrectly(data):
            for m in magics:
            if data.startswith(m):
            return True
            return False
            

            事實上,我們應該對它做些改進以取得更好的效果。上面的實現方法限制了反刪除腳本可以驗證的文件類型。要改進這個功能,并減少被移到junk 文件夾的有效文件數量,可以將這個函數用下列代碼替換:

            def isDecryptedCorrectly(data, filekey):
            filename = "/tmp/%s.bin" % (filekey.encode("hex")[:8])
            write_file(filename,data)
            filetype = commands.getoutput("/usr/bin/file -b %s" % filename)
            os.unlink(filename)
            print "file type for %s: %s" %(filename, filetype)
            if filetype == "data":
            return False
            return True
            

            上述代碼會調用一個名為file 的外部程序。該程序是一個包含在Mac OS X 系統中的UNIX 工具,用于判斷文件類型。它可以識別出非常多的有效文件,判斷一個成功解密后的文件是否有效、可讀,并且給出更精確的結果。當file 工具無法判斷正在查看的這個文件是哪種類型時,會簡單返回一個通用的data 類型。

            雖然file 工具更加精確,但是它也無法識別專有版權類型的文件。如果你的應用軟件在一些特定文件中使用了自定義的格式,由于反刪除工具無法識別它們,你可能得去junk 文件夾中查找。

            0x01 還原閑置空間


            徹底掃描未分配的空間,這是試圖恢復已刪除數據的最后方法。在反刪除工具中默認禁用該功能,因為要刮取未分配的內存需要相當長的時間,而且效果通常也并不太好。

            可以通過編輯hfs/journal.py 腳本來激活這個功能。在該文件的最底部附近,有一個對carveEMFemptySpace 的調用,但是被一條if False 語句禁用了:

            if False:
            fks = set(reduce(lambda x,y: x+y, filekeys.values()))
            print "%d file keys left, try carving empty space (slow) ? CTRL-C to
            exit" % len(fks)
            raw_input()
            carveEMFemptySpace(volume, fks, carveokdir)
            

            將這條語句改為if True,然后保存這一修改。這樣,在原來的日志操作完成后,就會看到開始還原的提示。

            0x02 常被還原出來的數據


            通過刮取HFS 日志可以還原出許多不同的文件來。事實上,任何曾經存在于文件系統上的東西都可能被還原,尤其是像屬性列表、圖像等較小的文件。由于HFS 日志的大小有限,因此,小文件被還原出來的概率更大。

            應用軟件屏幕截圖

            當一個應用軟件掛起到后臺時,會有一個屏幕截圖被捕獲并寫入磁盤中。這是為了當用戶下次返回到應用軟件時可以產生出窗口縮放回到屏幕的效果,就好像應用軟件立即就從后臺加載起來一樣。事實上,應用軟件需要花一些時間加載回來重新變為活躍狀態,而這個動畫效果則給了軟件一些時間。

            每一次應用軟件掛起時,應用軟件的截屏都會重復來一次,晚些時候再將截屏文件刪除或者覆蓋。當一通電話進來時,或者其他可能導致應用軟件掛起的事件發生時,也會有截屏發生。從HFS 日志中經常可以找到這些已刪除的應用軟件截屏,從而泄露你的應用

            軟件中哪怕是最安全的加密數據的內容(見圖6-1)。

            enter image description here

            圖6-1.恢復出來的用戶郵件截屏,郵件軟件是取證中非常有用的工具

            除了應用軟件截屏泄露,安全的網站也會面臨這一問題。不管是Google(見圖6-2),還是你在企業VPN 內部看到的機密郵件,截屏泄露都會導致保護得最好的數據變得不安全。

            enter image description here

            圖6-2.從一個Safari瀏覽會話中恢復出來的截屏

            已刪除的屬性列表

            從日志中還經常能恢復出舊的屬性列表以及其他配置文件。如果這些文件中存儲了網站的機密數據、加密密鑰或者其他敏感數據,然后又被刪除了,這些數據還是有可能被恢復。一些應用軟件會先寫好一個明文的屬性列表,然后使用加密函數來對其中的數據進行加密。即便明文副本已被刪除,依然可以被恢復出來,這樣其中最初的明文內容就泄露了。

            在一個這樣的案例里,一個安全郵件客戶端將它當前正在處理的郵件副本存儲到一個臨時的SQLite 數據庫。這個數據庫文件用于該應用不同組件之間來回復制數據,而操作完成后,會被刪除。雖然該應用軟件將郵件安全地存儲到它的主數據庫中,任何在其中曾經被選中并且處理過的郵件都在這個臨時數據庫中臨時存儲過。因此,就會輕易泄露給攻擊者。

            已刪除的語音郵件和錄音

            語音郵件會直接推送到與可視化語音郵箱相連的iPhone 中,從而可以根據用戶的意愿隨機訪問和離線收聽,甚至在用戶收聽信息之前,這些文件就已經被推送下來了,因此,在設備上甚至都能找到未讀的語音郵件。語音郵件文件使用AMR 編碼格式,這是一種專門為聲音錄音設計的音頻編碼方法。 錄音文件也使用了相同的音頻格式。已刪除的錄音也可能從設備上找到。

            已刪除的鍵盤緩存

            在第4 章中已介紹過,鍵盤緩存中包含了在應用軟件的任何地方通過鍵盤輸入的數據的緩存,除非這個軟件的這個文本框被專門禁用了自動糾錯功能或者被設置為安全密碼框。從HFS 日志中可以找到已刪除的鍵盤緩存文件副本,其中甚至包含非常早之前通過鍵盤輸入的緩存數據副本。

            照片和其他個人信息

            類似地,從HFS 日志中可以還原出已刪除的照片以及已刪除文件中存儲的其他個人信息。例如,一個網銀類應用軟件存儲了通過設備自帶相機拍下的支票照片,當這張支票照片被清除時,事實上,它是被刪除了,而不是被徹底抹掉,這樣攻擊者就可能拿到殘留的數據。

            0x03 總結


            任何剛剛被刪除的文件都可能存在于日志中。千萬不要依賴于設備會在文件刪除后安全地抹除它們這一假設,而最好是認為文件系統在底層壓根就沒有加密保護能力。如果數據中包含了你不希望攻擊者能還原出來的敏感信息,那就不要將這段數據的明文副本寫入磁盤中。在第11 章中,你會學到一系列的反取證技巧。通過這些技巧,可以使刪除文件時會安全地清除數據,并且使你的應用軟件在掛起時不會保存屏幕截圖。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线