浅谈Android软件安全自动化审计
作者:???? riusksk(泉哥)
郵箱:?????riusksk@qq.com
博客:?????http://hi.baidu.com/riusksk
微博:?????http://t.qq.com/riusksk
【目錄】?
?
0x00 前言 0x10 Android軟件常見(jiàn)漏洞原理及檢測(cè)0x11 敏感信息明文保存0x12 程序文件及進(jìn)程權(quán)限問(wèn)題0x13 網(wǎng)絡(luò)數(shù)據(jù)明文傳輸0x14 組件權(quán)限安全問(wèn)題0x15 其它 0x20 自動(dòng)化審計(jì)工具——DroidAppAuditter 0x30 業(yè)界Android軟件安全現(xiàn)狀 0x40 總結(jié) 0x50 關(guān)于我們?
【正文】
0×00? 前言
??? 隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,移動(dòng)終端安全也越來(lái)越受到關(guān)注。特別是Android系統(tǒng)的崛起,互聯(lián)網(wǎng)上的各類(lèi)Andriod軟件數(shù)量迅速上升。因Android系統(tǒng)是開(kāi)源的,導(dǎo)致各種android惡意軟件迅猛增加,成為手機(jī)系統(tǒng)的最大受害者。與此同時(shí),android系統(tǒng)和軟件本身的漏洞也進(jìn)一步危害到用戶(hù)的隱私安全。本文主要針對(duì)Android軟件安全進(jìn)行審計(jì),提供一些常見(jiàn)的安全檢測(cè)點(diǎn),并借此實(shí)現(xiàn)自動(dòng)化審計(jì)工具,最后評(píng)估下業(yè)界常見(jiàn)android軟件安全的現(xiàn)狀。
0×10? Android軟件常見(jiàn)漏洞原理及檢測(cè)
??? 0×11 敏感信息明文保存
??? 敏感信息明文保存一直是Andriod軟件常容易出現(xiàn)的,這些敏感信息包括用戶(hù)密碼、住址、姓名等等內(nèi)容,特別是密碼問(wèn)題。有些支持“記住密碼”功能的軟件常常將密碼明文保存在軟件目錄下的某xml文件中,若手機(jī)中毒或者被其它惡意軟件利用,直接讀取xml文件中的明文密碼然后遠(yuǎn)程發(fā)送給***者,這將會(huì)嚴(yán)重影響到用戶(hù)帳號(hào)安全。以下是用于檢測(cè)敏感信息的關(guān)鍵代碼:
?
foreach $msg (@msgs) {my $base64msg = encode_base64($msg);my $md5msg = md5_hex($msg);if(/$msg/){print "[高危]:$curfile: 行 $lines: 發(fā)現(xiàn)明文敏感信息:$msg !!!\n";$SearchStrResult .= "[高危]:$curfile: 行 $lines: 發(fā)現(xiàn)明文敏感信息:$msg !!!\n";push (@risk_level,4);$highnum++;}if(/$base64msg/){print "[高危]:$curfile: 行 $lines: 發(fā)現(xiàn) Base64 敏感信息:$base64msg !!!\n";$SearchStrResult .= "[高危]:$curfile: 行 $lines: 發(fā)現(xiàn) Base64 敏感信息:$base64msg !!!\n";push (@risk_level,4);$highnum++;}if(/$md5msg/){print "[安全]:$curfile: 行 $lines: 發(fā)現(xiàn) MD5 加密信息:$md5msg !!!\n";$SearchStrResult .= "[安全]:$curfile:行 $lines:發(fā)現(xiàn) MD5 加密信息:$md5msg !!!\n";push (@risk_level,1);$secnum++;}}以下是當(dāng)檢測(cè)到明文密碼時(shí)的輸出結(jié)果(已過(guò)濾掉包名):
[高危]:data/data/com.***.v7/shared_prefs/rem_password.xml: 行 3: 發(fā)現(xiàn)明文敏感信息:passwd123 !!!??? 0×12 程序文件及進(jìn)程權(quán)限問(wèn)題
??? 如果我們限制程序目錄的權(quán)限,禁止其它第三方軟件訪(fǎng)問(wèn),也能夠在一定程度上防止明文密碼泄露,除非軟件已獲得root權(quán)限,而軟件一般無(wú)需root權(quán)限,大多是一些惡意軟件或者殺毒軟件才會(huì)用到,對(duì)于普通軟件應(yīng)該遵循“最低授權(quán)原則”,盡量以最低權(quán)限來(lái)完成所需操作,避免權(quán)限被惡意濫用。因此也可將程序目錄權(quán)限和進(jìn)程是否為root權(quán)限作為一個(gè)檢測(cè)點(diǎn),以下是DroidAppAuditter檢測(cè)到問(wèn)題時(shí)的輸出結(jié)果:
?
[低危]:-rw-rw--w- :data/data/com.snda.cloudary/shared_prefs/UserInfo.xml [低危]:存在Root權(quán)限 !??? 0×13 網(wǎng)絡(luò)數(shù)據(jù)明文傳輸
?
??? 在2012年2月UCWEB瀏覽器被爆存在明文密碼網(wǎng)絡(luò)傳輸漏洞,若開(kāi)啟“云端加速”功能,在登錄一些SSL站點(diǎn)時(shí),它會(huì)將用戶(hù)發(fā)送的WEB請(qǐng)求會(huì)轉(zhuǎn)發(fā)到UC的代理服務(wù)器上,并且未進(jìn)行任何加密處理,可能導(dǎo)致用戶(hù)密碼泄露。最初UC不承認(rèn)此問(wèn)題,后來(lái)在微博上確認(rèn)存在此漏洞。對(duì)于存在明文網(wǎng)絡(luò)傳輸?shù)能浖?#xff0c;若結(jié)合中間人***就極有可能造成密碼泄露,特別是在KFC、麥當(dāng)勞等公共場(chǎng)所。在Android中本身自帶有tcpdump可用于網(wǎng)絡(luò)抓包,再借助perl模塊去解析cap,或者利用wireshark的命令行工具來(lái)解析也是可行的(以下為示例代碼,不考慮命令注入問(wèn)題):
?
print "[*] 捕獲網(wǎng)絡(luò)數(shù)據(jù)包......\n\n"; system("adb shell tcpdump -p -vv -s 0 -c 500 -w /sdcard/$targetfile.cap"); print "\n[*] 提取cap文件至PC端分析......\n\n"; system("adb pull sdcard/$targetfile.cap $cwd/TestSoft/$targetfile/$targetfile.cap"); print "\n[*] 解析cap數(shù)據(jù)包......\n\n"; system("$cwd/tshark/tshark.exe -r $cwd/TestSoft/$targetfile/$targetfile.cap -V > $cwd/TestSoft/$targetfile/$targetfile.txt")以下是檢測(cè)到明文敏感信息網(wǎng)絡(luò)傳輸時(shí)的輸出結(jié)果:
[中危]:存在明文傳輸內(nèi)容: password=passwd123&provider=sdo&login=13613****** [低危]:存在 IMEI(國(guó)際移動(dòng)設(shè)備身份碼)隱私信息竊取行為、IP地址隱私信息竊取行為、SIM序列號(hào)隱私信息竊取行為:?
channel=6666&model=sdk&ip=10.0.2.15&mac=&sim=89014103211118510720&imei=000000000000000&size=480*800&os=2.2&platform=Android&version=1.0.5.1&ua=Mozilla/5.0 (Linux; U; Android 2.2; zh-cn; sdk Build/FRF91) AppleWebKit/533.1??? 0×14 組件權(quán)限安全問(wèn)題
??? 在Android中存在多種組件,比如Content Provider、Broadcast Receiver等等,這些組件可能因權(quán)限設(shè)置不當(dāng)導(dǎo)致信息泄露或者釣魚(yú)欺騙等***。在2011年,香港理工大學(xué)的安全研究人員陸續(xù)報(bào)告了許多android軟件中存在的Content Provider信息泄露漏洞(參見(jiàn)鏈接:http://www4.comp.polyu.edu.hk/~appsec/),由于程序?qū)rovider的權(quán)限設(shè)置不當(dāng),導(dǎo)致第三方軟件可讀取Content Provider提供的信息,其危害程度取決于Content Provider提供的信息內(nèi)容,比如聯(lián)系人、電話(huà)、短信等隱私信息就可能包含其中。默認(rèn)情況下,Content Provider的權(quán)限為android:protectionLevel=”normal”,最好的權(quán)限設(shè)置應(yīng)為signature或者signatureOrSystem,進(jìn)而避免被第三方惡意軟件利用。下面是DroidAppAuditter中用于檢測(cè)Content Provider權(quán)限的關(guān)鍵代碼:
?
while(index($cont[$line],"<permission android:name=\"$ProviderName\"") == -1){if ($line <= $linecount) {$line++;}else{print "[中危]:Content Provider:$ProviderName 默認(rèn)設(shè)置為\“normal\”權(quán)限,可能導(dǎo)致敏感信息泄露!\n";$CheckComponentResult .= "[中危]:Content Provider:$ProviderName 默認(rèn)設(shè)置為\“normal\”權(quán)限,可能導(dǎo)致敏感信息泄露,建議修改為\“signature\”或者\(yùn)“signatureOrSystem\”!\n";……省略……last;}}if(index($cont[$line],"android:protectionLevel=\"normal\"") > -1){print "[中危]:Content Provider:$ProviderName 權(quán)限為\“normal\”,可能導(dǎo)致敏感信息泄露!\n";$CheckComponentResult .= "[中危]:Content Provider:$ProviderName 為\“normal\”權(quán)限,可能導(dǎo)致敏感信息泄露,建議修改為\“signature\”或者\(yùn)“signatureOrSystem\”!\n";……省略……}?
除protectionLevel權(quán)限問(wèn)題外,<grant-uri-permission>權(quán)限問(wèn)題也可作為一個(gè)檢測(cè)點(diǎn),若設(shè)為true,可被其它程序通過(guò)URL訪(fǎng)問(wèn)到content provider的內(nèi)容,容易造成信息泄露。
??? 2011年盛大的安全研究人員DoDo在其博客寫(xiě)一系列關(guān)于Android安全的文章,其中有篇就提到關(guān)于Broadcast Receiver的問(wèn)題,鏈接見(jiàn):http://www.sectop.com/?p=128,這個(gè)依然是組件權(quán)限控制的問(wèn)題,由于Broadcast Receiver被允許外部調(diào)用,可能被第三方惡意軟件標(biāo)記相關(guān)action給正常應(yīng)用發(fā)送broadcast,那么正常應(yīng)用就會(huì)對(duì)此進(jìn)行響應(yīng)處理,其危害程度也是取決于正常應(yīng)用對(duì)廣播接收采取的操作,比如發(fā)送短信、任務(wù)欄通知等操作,就有可能被用于釣魚(yú)欺騙。防御此問(wèn)題最簡(jiǎn)單的方法就是通過(guò)android:exproted來(lái)關(guān)閉receiver對(duì)外部應(yīng)用的響應(yīng),但可能在同一公司開(kāi)發(fā)的一些產(chǎn)品之間需要進(jìn)行相互廣播通訊,此時(shí)就可采取DoDo在文中提到的另一種方法:在receiver方的androidmanifest.xml中增加<permission>自定義權(quán)限項(xiàng),并在sendbroadcast方得androidmanifest.xml中增加<uses-permission>匹配此權(quán)限。
下面是DroidAppAuditter用于檢測(cè)Broadcast Receiver權(quán)限的部分檢測(cè)代碼:
?
if(index($cont[$line],"android:exported=\"flase\"") > -1){print "[安全]:Broadcast Receiver:$Receiver 禁止被外部調(diào)用!\n";$CheckComponentResult .= "[安全]:$Receiver 禁止被外部調(diào)用!\n";} elsif(index($cont[$line],"android:permission=") == -1){print "[低危]:Broadcast Receiver:$Receiver 可被外部調(diào)用,可能造成釣魚(yú)欺騙,建議添加 android:exported=\"flase\"!\n";$CheckComponentResult .= "[低危]:Brodcat Receiver:$Receiver 可被外部調(diào)用,可能造成釣魚(yú)欺騙,建議添加 android:exported=\"flase\"!\n";……省略……}??
除receiver和content provider的權(quán)限問(wèn)題外,其它組件如service和activies也可能存在權(quán)限安全問(wèn)題,亦可將其列入檢測(cè)范圍。
??? 0×15 其它
??? 除上文中提到的各個(gè)安全檢查點(diǎn)之外,讀者還可進(jìn)行擴(kuò)充,比如其它組件權(quán)限、XSS、SQL注入檢測(cè)、內(nèi)存泄露、intent fuzzing等多個(gè)方向進(jìn)行分析,DoDo’s Blog上面也有一些安全文章可作為參考,大家如果有什么好的思路或檢測(cè)點(diǎn)也可郵件與本人交流:riusksk@qq.com。
0×20? 自動(dòng)化審計(jì)工具——DroidAppAuditter
??? 對(duì)于業(yè)務(wù)量較大的公司,Android軟件產(chǎn)品可能會(huì)很多,若一一通過(guò)手工檢測(cè),就會(huì)影響到效率,因此實(shí)現(xiàn)一款自動(dòng)化審計(jì)工具是非常有必要的,至少可以減輕工作量,以騰出更多的時(shí)間出來(lái)看片……筆者將此審計(jì)工具命名為DroidAppAuditter,主要用Perl語(yǔ)言編寫(xiě)的,支持Android模擬器和實(shí)體機(jī),可自動(dòng)安裝apk文件并運(yùn)行軟件,然后實(shí)現(xiàn)動(dòng)態(tài)自動(dòng)化檢測(cè),并圖文并茂地輸出分析報(bào)告。最后這里附上一份輸出的完整分析報(bào)告,如下圖所示,報(bào)告中的漏洞已于2011年修復(fù):
?
0×02? 業(yè)界Android軟件安全現(xiàn)狀
?
???????? 2011年我們借助自動(dòng)化審計(jì)工具DroidAppAuditter,對(duì)業(yè)界各個(gè)主流Android軟件進(jìn)行安全審計(jì),共審計(jì)了29個(gè)國(guó)內(nèi)流行的Android軟件,其中存在明文保存密碼的有10個(gè),其它XSS漏洞、明文傳輸,以及隱私竊取的行為共有12個(gè),所有被審計(jì)的軟件有超過(guò)一半是存在安全漏洞的。由此可見(jiàn),目前android軟件安全還未受到業(yè)界重視,但這也將成為今后發(fā)展的趨勢(shì)。最后附上審計(jì)結(jié)果的部分截圖,如下圖所示:
0×03? 總結(jié)
???????? 本文主要探討了Android軟件的一些常用安全檢測(cè)點(diǎn),并通過(guò)代碼實(shí)現(xiàn)自動(dòng)化審計(jì)工具,希望對(duì)各位有所幫助,如果你有更好的檢測(cè)方案,也可與本人探討。至于審計(jì)工具,由于各種原因就不公開(kāi)了,因?yàn)槲蚁嘈?#xff1a;“授人以魚(yú)不如授人以漁”。
0×04? 關(guān)于我們
???????? 騰訊安全應(yīng)急響應(yīng)中心(Tencent Security Response Center)簡(jiǎn)稱(chēng)TSRC,是騰訊公司負(fù)責(zé)突發(fā)安全事件處理的團(tuán)隊(duì),如果您對(duì)騰訊產(chǎn)品和業(yè)務(wù)有任何安全上的建議和意見(jiàn)可以與我們聯(lián)系,也歡迎有意在互聯(lián)網(wǎng)安全行業(yè)發(fā)展的同學(xué)加入我們。
轉(zhuǎn)載于:https://blog.51cto.com/metasploit/1005801
總結(jié)
以上是生活随笔為你收集整理的浅谈Android软件安全自动化审计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2上的svn部署
- 下一篇: 怎样解决ASP图片上传漏洞的方法