劉 亞,康艷榮,趙 露,于文浩,張國(guó)臣
(1.中國(guó)人民公安大學(xué),北京 100038;2.公安部物證鑒定中心,北京 100038;3.中國(guó)政法大學(xué),北京 100088)
·論 著·
基于LiME工具的Android手機(jī)動(dòng)態(tài)內(nèi)存提取
劉 亞1,康艷榮2,*,趙 露2,于文浩3,張國(guó)臣2
(1.中國(guó)人民公安大學(xué),北京 100038;2.公安部物證鑒定中心,北京 100038;3.中國(guó)政法大學(xué),北京 100088)
本文以手機(jī)內(nèi)核源碼為研究對(duì)象,利用LiME工具對(duì)不同Android版本內(nèi)核的手機(jī)進(jìn)行動(dòng)態(tài)內(nèi)存提取,詳細(xì)分析了其內(nèi)核校驗(yàn)機(jī)制,并闡述了如何通過修改內(nèi)核配置和內(nèi)核源碼的方式,編譯出可用的內(nèi)存提取模塊,建立了手機(jī)動(dòng)態(tài)內(nèi)存提取方法,為國(guó)內(nèi)Android手機(jī)動(dòng)態(tài)內(nèi)存取證提供了一個(gè)新思路。實(shí)驗(yàn)表明,此方法能夠成功提取多個(gè)品牌、型號(hào)手機(jī)的動(dòng)態(tài)內(nèi)存,可以解決普遍的Android手機(jī)動(dòng)態(tài)內(nèi)存提取問題。
電子物證;Android手機(jī);動(dòng)態(tài)內(nèi)存; 內(nèi)核模塊
隨著Android市場(chǎng)份額的日益增長(zhǎng),對(duì)Android平臺(tái)手機(jī)進(jìn)行取證和分析也成為司法鑒定機(jī)構(gòu)的關(guān)注熱點(diǎn),目前關(guān)于Android取證研究大多數(shù)是關(guān)于Android文件系統(tǒng)分析、Android程序分析、手機(jī)外置內(nèi)存的提取分析等。手機(jī)動(dòng)態(tài)內(nèi)存(也稱RAM、隨機(jī)訪問存儲(chǔ)器)包含了大量的斷電后不可恢復(fù)的有價(jià)值信息,包括手機(jī)中正在運(yùn)行和已結(jié)束的進(jìn)程的數(shù)據(jù)、打開的文件、網(wǎng)絡(luò)活動(dòng)、內(nèi)存映射等。這些數(shù)據(jù)并不會(huì)保存在手機(jī)內(nèi)置的閃存或外圍存儲(chǔ)卡里,可能成為潛在的證據(jù)信息動(dòng)態(tài),因此內(nèi)存的提取分析是至關(guān)重要的。動(dòng)態(tài)內(nèi)存取證和分析方面的研究還比較少。2008年,Anderson[1]最早提出Crash項(xiàng)目,主要面向?qū)崟r(shí)Linux系統(tǒng)進(jìn)行取證,并不適用大多數(shù)的Android設(shè)備。2010年,Cannon[2]提出的一種新機(jī)制來轉(zhuǎn)儲(chǔ)Android應(yīng)用程序的內(nèi)存,通過向應(yīng)用程序發(fā)送一個(gè)特別信號(hào)(SIGUSR1),在/ data/misc中獲取特定pid進(jìn)程的內(nèi)存轉(zhuǎn)儲(chǔ),這個(gè)方法只適用于Android版本為2.1以下的移動(dòng)設(shè)備。Sylve等[3]發(fā)布了一個(gè)實(shí)用的內(nèi)存獲取工具DMD(現(xiàn)稱LiME Forensics),首次對(duì)Android設(shè)備的動(dòng)態(tài)內(nèi)存進(jìn)行獲取和深度分析,但實(shí)驗(yàn)的手機(jī)系統(tǒng)版本僅限于Linux2.6的內(nèi)核,沒有進(jìn)一步分析轉(zhuǎn)儲(chǔ)的內(nèi)存來發(fā)現(xiàn)敏感的數(shù)據(jù)。在LiME的基礎(chǔ)上,Muller等[4]提出FROST技術(shù),一種在低溫狀態(tài)下提取Android手機(jī)隨機(jī)訪問內(nèi)存的方法。Stüttgen等指出傳統(tǒng)物理內(nèi)存提取方法存在的不足,提出了一種通過PTE(page table entry,也稱頁(yè)面表入口)獲取物理內(nèi)存的新技術(shù),但該技術(shù)不適用于Android設(shè)備[5]。2014年,Stüttgen等又提出了獲取Linux物理內(nèi)存新方法,通過重定向模塊內(nèi)部的操作,使得內(nèi)存提取模塊可以繞過內(nèi)核版本的校驗(yàn)而在不同的Linux版本運(yùn)行,解決了內(nèi)存提取工具頻繁的重編譯問題,該技術(shù)尚未支持Android設(shè)備[6]。在國(guó)內(nèi),手機(jī)取證的研究主要集中在SIM卡、SD卡和flash閃存數(shù)據(jù)的提取分析,尚無有關(guān)此類研究的報(bào)道。LiME是一個(gè)可以從Linux或基于Linux的設(shè)備獲取動(dòng)態(tài)內(nèi)存的可裝載內(nèi)核模塊,在提取過程中,LiME可以將用戶空間和內(nèi)核空間的交互影響降到最小,從而降低對(duì)內(nèi)存的覆蓋,比較其他基于Linux內(nèi)存的提取工具,LiME的法律效應(yīng)評(píng)價(jià)是最好的[7]。
1.1 環(huán)境配置
(1)打開手機(jī)USB調(diào)試模式,確保手機(jī)已取得最高的系統(tǒng)權(quán)限,才能裝載內(nèi)核模塊。目前關(guān)于Android手機(jī)的root技術(shù)已比較成熟,應(yīng)選取成熟且對(duì)手機(jī)內(nèi)部交互影響最小的工具,將其對(duì)手機(jī)動(dòng)態(tài)內(nèi)存的影響降到最低。(2)準(zhǔn)備合適的Linux系統(tǒng)。本文采用32位Ubuntu 12.04,研究表明64位的Linux系統(tǒng)或非Debian系的Linux發(fā)行版,在交叉編譯模塊時(shí)會(huì)出現(xiàn)未知問題。(3)配置Android SDK與NDK,通過adb調(diào)試橋連接手機(jī)。(4)配置合適的交叉編譯工具鏈,本文配置為arm-eabi-4.4.3 與arm-linux-androideabi-4.6,研究表明交叉編譯工具或版本的不同均會(huì)影響編譯的成功率。(5)獲取最新的LiME工具,LiME通過Subversion(一個(gè)開放源代碼的版本控制系統(tǒng))發(fā)布,可在Linux終端下通過SVN進(jìn)行同步。(6)獲取目標(biāo)設(shè)備的內(nèi)核源代碼,可在各手機(jī)廠商的官方網(wǎng)站下載。
1.2 繞過內(nèi)核檢查
Android手機(jī)系統(tǒng)內(nèi)核會(huì)對(duì)模塊進(jìn)行檢查,故須繞過目標(biāo)手機(jī)內(nèi)核檢查機(jī)制,才能使用LiME模塊提取動(dòng)態(tài)內(nèi)存。
1.2.1 vermagicmagic檢查機(jī)制
對(duì)于Linux2.6的內(nèi)核,內(nèi)核檢查機(jī)制主要是vermagic字符串匹配檢查。Vermagic格式定義如下所示:
Vermagic字符串可通過內(nèi)核配置文件.config和Makefile中的宏定義進(jìn)行設(shè)置,各字段定義見表1。
繞過目標(biāo)手機(jī)內(nèi)核的vermagic檢查,可以從目標(biāo)手機(jī)中找到現(xiàn)有的模塊作參考,vermagic信息存放在內(nèi)核模塊中的.modinfo段中,在Linux終端下輸入命令modinfo
表1 vermagic各字段定義Table 1 Defi nition of each section in vermagic
1.2.2 modversionssions檢查機(jī)制
某些使用linux3.0及以上版本內(nèi)核的手機(jī),具有vermagic和modversions兩種檢查機(jī)制。modversions是模塊的版本校驗(yàn)機(jī)制。通過對(duì)模塊的反匯編發(fā)現(xiàn),啟用此校驗(yàn)的模塊多了_versions段。通過分析源碼目錄下的kernel/module.c文件,可知該檢查機(jī)制在模塊編譯前通過宏定義CONFIG_MODVERSIONS啟用,并在模塊的vermagic字符串中引入MODULE_ VERMAGIC_MODVERSIONS字 段。 經(jīng) 分 析, 當(dāng) 啟 用了modversions檢查機(jī)制后,在模塊的_versions段數(shù)據(jù)中會(huì)出現(xiàn)module_layout字段值,若模塊中的module_ layout值與目標(biāo)手機(jī)系統(tǒng)中的module_layo-ut值不匹配,就會(huì)出現(xiàn)拒絕裝載的提示信息,因此禁用CONFIG_ MODVERSIONS可關(guān)閉內(nèi)核中的模塊版本校驗(yàn)機(jī)制。若在內(nèi)核配置中禁用CONFIG_MODVERSIONS宏定義后,則會(huì)改變內(nèi)核模塊的VERMAGIC_STRING值,提取時(shí)會(huì)出現(xiàn)vermagic校驗(yàn)失敗的錯(cuò)誤。因此繞過手機(jī)中的module_layout校驗(yàn)可通過偽造vermagic中的 MODULE_VERMAGIC_MODVERSIONS值。MODULE_VERMAGIC_MOD-VERSIONS值可在內(nèi)核源碼目錄的include/linux/vermagic.h文件中偽造,如下所示:
本文以多個(gè)品牌、機(jī)型作為實(shí)驗(yàn)對(duì)象,對(duì)不同Android內(nèi)核版本的手機(jī)進(jìn)行動(dòng)態(tài)內(nèi)存提取(見表2)。本文以HTC S710d(內(nèi)核源碼為ace-gb-crc-2.6.35-2ec1b80)為實(shí)例說明。
表2 實(shí)驗(yàn)所用機(jī)型及其提取實(shí)驗(yàn)結(jié)果Table 2 Tested phones and its testing results
2.1 編譯內(nèi)核源碼
2.1.1 配置交叉編譯工具
編譯內(nèi)核源碼之前,對(duì)根目錄下的Makefile文件進(jìn)行相關(guān)配置。打開Makefile文件,定位到# Cross compiling and selecting different set of gcc/bin-utils段,定義如下所示的KBuild變量來配置交叉編譯工具鏈:
2.1.2 配置內(nèi)核
Android手機(jī)的內(nèi)核功能配置文件一般位于系統(tǒng)中的/ proc/config.gz,但大多數(shù)Android手機(jī)沒有提供此配置文件,在此不討論配置文件,僅進(jìn)行通用的內(nèi)核功能配置。在Linux終端下切換到源碼目錄,輸入make menuconfig命令進(jìn)入內(nèi)核功能配置,見圖1。進(jìn)入Enable loadable module support,并選擇Forced module loading 、Module unloading和子選項(xiàng)Forced module unloading ,保存退出后在源碼根目錄生成.config隱藏文件。若源碼提供默認(rèn)的配置文件,也可直接使用該默認(rèn)配置進(jìn)行編譯。.config為內(nèi)核配置文件,對(duì)其中的宏定義進(jìn)行配置可實(shí)現(xiàn)不同的功能。
圖1 內(nèi)核功能配置Fig.1 Confi guration of kernel function
2.1.3 交叉編譯
現(xiàn)對(duì)源碼進(jìn)行編譯,在終端里輸入命令“make KERNELRELEASE=
2.2 編譯LiME模塊
進(jìn)入LiME主目錄,修改Makefile文件與以下所示結(jié)構(gòu)匹配:
在終端下輸入make命令進(jìn)行編譯,編譯完成后在主目錄下生成一個(gè)lime.ko的文件。通過modinfo命令查看其信息,確認(rèn)與目標(biāo)手機(jī)參考模塊的信息完全一致,如下所示:
2.3 提取內(nèi)存
通過USB數(shù)據(jù)線連接手機(jī),在終端下輸入adb devices確認(rèn)手機(jī)成功連接,見圖2。
圖2 連接手機(jī)Fig.2 Phone connection
在終端輸入命令“adb push lime.ko /sdcard/lime. ko”將lime.ko文件拷貝至手機(jī)SD卡目錄。提取動(dòng)態(tài)內(nèi)存文件有TCP通道和SD卡轉(zhuǎn)儲(chǔ)兩種方式。TCP通道方式是通過adb命令在手機(jī)與計(jì)算機(jī)之間建立一條端口傳輸?shù)耐ǖ?,一般選用較高的端口避免與系統(tǒng)端口相沖突。由于通過TCP方式提取會(huì)對(duì)動(dòng)態(tài)內(nèi)存中網(wǎng)絡(luò)緩存數(shù)據(jù)有一定的覆蓋率,在不希望網(wǎng)絡(luò)數(shù)據(jù)丟失的情況下,可通過SD卡轉(zhuǎn)儲(chǔ)的方式提取。SD卡轉(zhuǎn)儲(chǔ)方式是將動(dòng)態(tài)內(nèi)存文件直接寫入手機(jī)SD卡里,由于這種方式會(huì)直接覆蓋掉SD卡中的數(shù)據(jù),一般先將手機(jī)中的SD卡進(jìn)行鏡像操作,再通過此方式提取動(dòng)態(tài)內(nèi)存。以下所示為通過SD卡轉(zhuǎn)儲(chǔ)方式提取HTC S710d的動(dòng)態(tài)內(nèi)存:
提取完成后,輸入命令“adb pull /sdcard/lime.dump ./s710d.dump”從手機(jī)SD卡中拷貝至計(jì)算機(jī)端。
通過LiME工具提取的手機(jī)動(dòng)態(tài)內(nèi)存情況見表2與圖3。可以看出,成功 提取的動(dòng)態(tài)內(nèi)存大小比手機(jī)系統(tǒng)額定的動(dòng)態(tài)內(nèi)存少,這是因?yàn)槎喾N原因造成的,一方面手機(jī)中的顯卡GPU要與手機(jī)系統(tǒng)共用RAM,不同的機(jī)型分占的RAM大小也不一樣,另一方面Android系統(tǒng)啟動(dòng)時(shí)RAMFS也需要占用一定的RAM空間??傮w來說,大部分機(jī)型都能成功提取到80%以上的動(dòng)態(tài)內(nèi)存,其中包含了大量的有價(jià)值數(shù)據(jù),因此對(duì)實(shí)際取證工作有一定的積極幫助。
圖3 手機(jī)動(dòng)態(tài)內(nèi)存提取比例Fig.3 Average proportion of memory acquisition
本文就Android手機(jī)的動(dòng)態(tài)內(nèi)存取證技術(shù)進(jìn)行了探討,利用LiME工具,詳細(xì)闡述了使用LiME的一些關(guān)鍵技術(shù),包括提取前的準(zhǔn)備工作、手機(jī)內(nèi)核源碼的交叉編譯,以及如何提取內(nèi)存數(shù)據(jù)等。通過不同品牌、型號(hào)手機(jī)的實(shí)驗(yàn)證實(shí),本文介紹的取證技術(shù)能夠有效提取到Android手機(jī)的動(dòng)態(tài)內(nèi)存數(shù)據(jù)。
[1] Anderson D. Crash Available. 2008. http://people.redhat.com/ anderson/crash_whitepaper/.
[2] Cannon T. Android Reverse. http://thomascannon.net/projects/ android-reversing/.
[3] Sylve J, Case A, Marziale L, et al. Acquisition and analysis of volatile memory from Android devices. Digital Investigation,2012,8:175-184.
[4] Müller T, Spreitzenbarth M, Felix C. Freiling: FROST. 2012.
[5] Stüttgen J, Cohen M. Anti-forensic resilient memory acquisition. Digital Investigation, 2013,10:S105-S115.
[6] Stüttgen J, Cohen M. Robust Linux memory acquisition with minimal target impact. Digital Investigation, 2014,11:S112-S119
[7] Sylve J. LiME-Linux memory extractor//ShmooCon‘12. Washington DC: Digital Forensics Solutions LLC, 2012.
Volatile Memory Acquisition from Android Devices with LiME Forensics
LIU Ya1, KANG Yanrong2,*, ZHAO Lu2, YU Wenhao3, ZHANG Guochen2
(1. People's Public Security University of China, Beijing 100038, China; 2. Institute of Forensic Science, Ministry of Public Security, Beijing 100038, China; 3. China University of Political science and Law, Beijing 100088, China)
Volatile memory acquisition from cell phone has gained popularity in recent years, because its analysis yields a wealth of information not available in non-volatile storage. Such aspects as the executing and terminated processes, application data, network connections, some user names and passwords, are important for investigation storage in the volatile memory. In this paper, we introduce a novel idea for cell phone forensics by analyzing a set of kernel source of android phone, and establishing an acquisition method that could extract volatile memory from phones with different kernel version. On Linux,kernel modules must be compiled against the relevant version of kernel headers and confi guration so that it can be executed on the target system. During the module installation, the kernel starts to analyze two special sections in the module of .modinfo and_versions, and will refuse to load if this module contains incompatible version magic. Aiming at different Android kernel versions for different mobile phone, we analyzed the kernel verifi cation mechanism, and explained how to modify the kernel confi guration mode and kernel source code, to compile the available memory extraction module. The results show that this method can successfully extract volatile memory from multiple brands and models of Android mobile phones.
digital forensics;Android phone;volatile memory;kernel module
DF793.2
A
1008-3650(2015)06-0431-04
10.16467/j.1008-3650.2015.06.001
2015-05-18
公安部應(yīng)用創(chuàng)新計(jì)劃(2014YYCXGAES050-JB)
劉 亞,在讀碩士生,研究方向?yàn)殡娮游镒C檢驗(yàn)。 E-mail: liuya9012@gmail.com
康艷榮,副研究員,碩士,研究方向?yàn)閿?shù)據(jù)挖掘、電子物證。 E-mail: katherinekangyr@163.com
引用本文格式:劉亞,康艷榮,趙露,等. 基于LiME工具的Android手機(jī)動(dòng)態(tài)內(nèi)存提取. 刑事技術(shù),2015,40(6):431-434.