WhatsApp是世界上最受歡迎的智能手機即時通訊應用之一。現如今,全世界各地每月有超過13億的用戶活躍在WhatsApp上,使用該應用進行免費通信(2017年7月份的統(tǒng)計數據)。WhatsApp采用了基于whisper systems的通信協(xié)議,因此即便有人成功攔截通信數據,這種點對點通信數據仍然可以保持安全。顯而易見的是,這些通信數據中可能包含調查人員非常關心的與案件有關的重要信息,因此現在WhatsApp已經成為移動取證方面最炙手可熱的一個領域。然而眾所周知,智能手機的調查取證并沒有那么簡單。調查人員可能會遇到各種各樣的問題(如加密數據庫、系統(tǒng)安全機制、消息被刪除等等)。因此在本文中,我們會介紹如何解密WhatsApp的加密數據庫、如何繞過WhatsApp的加密機制以及如何恢復已刪除的WhatsApp消息。
如何解密WhatsApp數據庫
與許多智能手機應用一樣,WhatsApp會將數據存放在SQLite數據庫文件中。對于Android設備上的WhatsApp來說,兩個數據庫最為重要,一個是msgstore.db,包含聊天記錄;一個是wa.db,包含聯(lián)系人列表。處理這些數據庫比較簡單,因為WhatsApp具有備份功能,會將數據庫備份到SD卡上,無需任何權限(比如root權限)就能訪問。然而,安裝最新的安全更新后,WhatsApp數據庫就會被加密處理,無法再直接分析,給執(zhí)法調查人員帶來極大的挑戰(zhàn)。聊天記錄、消息記錄以及通話記錄使用的是AES-256標準,而類似照片、視頻等媒體文件沒有加密處理。并且WhatsApp的加密方式已經從Crypt5、Crypt7、Crypt8更新到了Crypt12。
那么,此時我們該怎么解密WhatsApp數據庫呢?最關鍵的步驟是獲取加密密鑰(cipher key)。當用戶首次進行WhatsApp備份時,就會生成加密密鑰,密鑰永遠不會存儲在云端,只會保存在智能手機上,而且每個智能手機對應不同的密鑰。因此,為了解密數據庫,我們首先必須從創(chuàng)建備份時所使用的那臺手機上提取加密密鑰。加密密鑰的具體路徑為:userdata/data/com.whatsapp/files/key。
根據SalvationDATA數據取證專家的研究結果,我們研發(fā)了一種專門的算法,可以使用這個key文件來解密WhatsApp數據庫。我們不久后會公布這款工具,將其集成到 SmartPhone Forensic System(SPF)中,讓不具備任何計算機編程基礎的調查人員能夠順利處理WhatsApp的加密數據庫。用戶只需導入key文件以及加密的數據庫文件,程序就可以自動生成正確的未加密的數據庫文件。
?如何繞過WhatsApp加密機制
然而,如果不root設備,想要獲取key文件并不會一帆風順。因此,接下來我們討論下如何繞過WhatsApp的加密機制。換句話說,如何在不具備root訪問權限的前提下提取WhatsApp數據。
key文件以及未加密的數據庫始終存儲在WhatsApp目錄中。如果調查人員可以接觸這些文件,那么就能查看當前設備上WhatsApp的通信記錄。唯一的問題在于,如果沒有root權限,我們無法直接訪問這些文件。
在不具備root權限的情況下,有兩種方法可以提取WhatsApp數據。
1、系統(tǒng)備份&還原
第一種方法是利用Android系統(tǒng)的備份及還原功能。許多Android手機廠商允許用戶使用內置的系統(tǒng)應用創(chuàng)建備份。利用這種方式創(chuàng)建的備份存儲在SD卡中,沒有經過加密處理。因此,執(zhí)法部門可以使用這種簡單的方法訪問WhatsApp的通訊記錄。
如下圖所示,我們可以使用OPPO智能手機來創(chuàng)建WhatsApp的備份。用戶可以在Tools文件夾中找到“Backup Restore”應用,創(chuàng)建新的備份,記得要勾選WhatsApp。
然后,我們就可以在手機的SD卡上找到WhatsApp備份數據。這個備份中包括所有未加密的數據庫文件以及WhatsApp的key文件。現在,我們要做的就是使用移動取證工具來分析目標數據庫。
2、降級備份
另一種方法就是降級WhatsApp應用,降級到不具備加密機制的那個版本。v.2.11.431版的WhatsApp是沒有強制使用加密備份的最后一個版本。因此,我們可以在不刪除用戶數據的前提下將WhatsApp降級到v.2.11.431版,然后使用老版本的WhatsApp創(chuàng)建備份文件,然后提取所需的數據庫。
這個過程需要操作人員具備專業(yè)技能,并伴隨著永久性丟失數據的風險。因此,我們強烈建議用戶使用專業(yè)的取證工具進行版本降級。
如何恢復已刪除的WhatsApp消息
現在我們已經知道如何從智能機中提取WhatsApp數據庫文件,接下來看看如何利用數據庫文件,在Android以及iOS設備上恢復已刪除的WhatsApp消息。
用戶可以通過兩種方法來刪除WhatsApp的消息。用戶可以逐條刪除消息,或者使用“clear/delete”聊天按鈕一次性刪除所有消息。根據我們的測試結果,不論用戶使用哪種方式刪除消息,我們都可以使用下面的方法進行恢復。
前面我們提到過,WhatsApp使用SQLite數據庫來存儲消息。與Android系統(tǒng)不同的是,iOS系統(tǒng)會將WhatsApp相關的所有數據存放在ChatStorage.sqlite這個數據庫中。這些數據庫文件通常會附帶后綴為”-wal”的緩存文件。大多數情況下,這些緩存文件的大小為0,但如果這些緩存文件的大小不為0,那么就可能包含尚未存儲在數據庫中的重要數據。一旦出現這種情況,我們必須謹慎處理,因為如果我們不在意這些緩存文件,那么存放在其中的信息可能就會被覆蓋掉,永遠無法找回。
根據我們的分析,可以正常訪問的WhatsApp消息存儲在msgstore.db中,而已刪除的消息存放在msgstore.db-wal中,這個文件正是消息的緩存文件。WhatsApp始終會把消息先存放在緩存文件中,然后再保存到真正的數據庫中。
有趣的是,有些時候緩存文件會比數據庫文件更大。這是因為一條消息只能以單條記錄存放在數據庫中,但緩存文件中并沒有這種限制。一條消息可能同時存在多條記錄。因此,我們有機會能恢復已刪除或者已丟失的WhatsApp消息。
然而,為了避免覆蓋緩存文件中已有的數據,在正確處理緩存文件之前,我們不能直接打開數據庫文件。我們必須先處理緩存文件,匹配特征,然后保存并分析緩存文件中的所有數據。
以“this is a test message”這條消息為例。當用戶刪除這條消息時,該消息對應的那條記錄通常也會從msgstore.db中刪除。
然而,msgstore.db-wal緩存文件中可能還保留這條消息的一些記錄。“This is a test message”這條消息被刪除前后的情況如下圖所示。我們可以看到,當該消息被刪除后,相關數據仍然保存在緩存文件中,并且記錄的偏移位置也保持不變。
因此,通過分析并提取msgstore.db-wal緩存文件中的數據,我們給出了恢復已刪除或已丟失的WhatsApp消息的一種方法。前面提到的這種方法可以有效并可靠地提取出已刪除的WhatsApp數據,也是恢復已刪除消息和已清空聊天記錄的完美解決方案。
根據SalvationDATA數字取證專家的研究結果,我們可以在未Root的Android設備上解密WhatsApp的加密數據庫,并且也能在Android以及iOS設備上恢復已刪除的WhatsApp消息。提醒一下,前面提到的所有技術及解決方案已經或者即將公布,會集成到SmartPhone Forensic System(SPF)中。希望本文能進一步幫助DFIR(數字取證與應急響應)社區(qū)處理移動設備,收集盡可能多的數字證據。后面我們會為大家提供更多實用的數字取證方案。
原文:https://blog.salvationdata.com/2018/02/08/whatsapp-forensics-decryption-of-encrypted-databases-and-extraction-of-deleted-messages-on-non-rooted-android-devices/