天天看點

淺談Android軟體安全自動化審計

作者:     riusksk(泉哥)

郵箱:     [email protected]

部落格:     http://hi.baidu.com/riusksk

微網誌:     http://t.qq.com/riusksk

【目錄】 

0x00  前言
0x10  Android軟體常見漏洞原理及檢測
   0x11 敏感資訊明文儲存
   0x12 程式檔案及程序權限問題
   0x13 網絡資料明文傳輸
   0x14 元件權限安全問題
   0x15 其它
0x20  自動化審計工具——DroidAppAuditter
0x30  業界Android軟體安全現狀
0x40  總結
0x50  關于我們      

【正文】

0×00  前言

    随着移動網際網路的發展,移動終端安全也越來越受到關注。特别是Android系統的崛起,網際網路上的各類Andriod軟體數量迅速上升。因Android系統是開源的,導緻各種android惡意軟體迅猛增加,成為手機系統的最大受害者。與此同時,android系統和軟體本身的漏洞也進一步危害到使用者的隐私安全。本文主要針對Android軟體安全進行審計,提供一些常見的安全檢測點,并借此實作自動化審計工具,最後評估下業界常見android軟體安全的現狀。

0×10  Android軟體常見漏洞原理及檢測

    0×11 敏感資訊明文儲存

    敏感資訊明文儲存一直是Andriod軟體常容易出現的,這些敏感資訊包括使用者密碼、住址、姓名等等内容,特别是密碼問題。有些支援“記住密碼”功能的軟體常常将密碼明文儲存在軟體目錄下的某xml檔案中,若手機中毒或者被其它惡意軟體利用,直接讀取xml檔案中的明文密碼然後遠端發送給攻擊者,這将會嚴重影響到使用者帳号安全。以下是用于檢測敏感資訊的關鍵代碼:

foreach $msg (@msgs) {
	my $base64msg = encode_base64($msg);
	my $md5msg = md5_hex($msg);
	if(/$msg/)
	{
		print "[高危]:$curfile: 行 $lines: 發現明文敏感資訊:$msg !!!\n";
		$SearchStrResult .= "[高危]:$curfile: 行 $lines: 發現明文敏感資訊:$msg !!!\n";
		push (@risk_level,4);
		$highnum++;
	}

	if(/$base64msg/)
	{
		print "[高危]:$curfile: 行 $lines: 發現 Base64 敏感資訊:$base64msg !!!\n";
		$SearchStrResult .= "[高危]:$curfile: 行 $lines: 發現 Base64 敏感資訊:$base64msg !!!\n";
		push (@risk_level,4);
		$highnum++;
	}

	if(/$md5msg/)
	{
		print "[安全]:$curfile: 行 $lines: 發現 MD5 加密資訊:$md5msg !!!\n";
		$SearchStrResult .= "[安全]:$curfile:行 $lines:發現 MD5 加密資訊:$md5msg !!!\n";
		push (@risk_level,1);
		$secnum++;
	}
 }      

以下是當檢測到明文密碼時的輸出結果(已過濾掉包名):

[高危]:data/data/com.***.v7/shared_prefs/rem_password.xml: 行 3: 發現明文敏感資訊:passwd123 !!!      

    0×12 程式檔案及程序權限問題

    如果我們限制程式目錄的權限,禁止其它第三方軟體通路,也能夠在一定程度上防止明文密碼洩露,除非軟體已獲得root權限,而軟體一般無需root權限,大多是一些惡意軟體或者防毒軟體才會用到,對于普通軟體應該遵循“最低授權原則”,盡量以最低權限來完成所需操作,避免權限被惡意濫用。是以也可将程式目錄權限和程序是否為root權限作為一個檢測點,以下是DroidAppAuditter檢測到問題時的輸出結果:

[低危]:-rw-rw--w- :data/data/com.snda.cloudary/shared_prefs/UserInfo.xml [低危]:存在Root權限 !      

    0×13 網絡資料明文傳輸

    在2012年2月UCWEB浏覽器被爆存在明文密碼網絡傳輸漏洞,若開啟“雲端加速”功能,在登入一些SSL站點時,它會将使用者發送的WEB請求會轉發到UC的代理伺服器上,并且未進行任何加密處理,可能導緻使用者密碼洩露。最初UC不承認此問題,後來在微網誌上确認存在此漏洞。對于存在明文網絡傳輸的軟體,若結合中間人攻擊就極有可能造成密碼洩露,特别是在KFC、麥當勞等公共場所。在Android中本身自帶有tcpdump可用于網絡抓包,再借助perl子產品去解析cap,或者利用wireshark的指令行工具來解析也是可行的(以下為示例代碼,不考慮指令注入問題):

print "[*] 捕獲網絡資料包......\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資料包......\n\n";
system("$cwd/tshark/tshark.exe -r $cwd/TestSoft/$targetfile/$targetfile.cap -V > $cwd/TestSoft/$targetfile/$targetfile.txt")      

以下是檢測到明文敏感資訊網絡傳輸時的輸出結果:

[中危]:存在明文傳輸内容: password=passwd123&provider=sdo&login=13613******
[低危]:存在 IMEI(國際移動裝置身份碼)隐私資訊竊取行為、IP位址隐私資訊竊取行為、SIM序列号隐私資訊竊取行為:       
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 元件權限安全問題

    在Android中存在多種元件,比如Content Provider、Broadcast Receiver等等,這些元件可能因權限設定不當導緻資訊洩露或者釣魚欺騙等攻擊。在2011年,香港理工大學的安全研究人員陸續報告了許多android軟體中存在的Content Provider資訊洩露漏洞(參見連結:http://www4.comp.polyu.edu.hk/~appsec/),由于程式對Provider的權限設定不當,導緻第三方軟體可讀取Content Provider提供的資訊,其危害程度取決于Content Provider提供的資訊内容,比如聯系人、電話、短信等隐私資訊就可能包含其中。預設情況下,Content Provider的權限為android:protectionLevel=”normal”,最好的權限設定應為signature或者signatureOrSystem,進而避免被第三方惡意軟體利用。下面是DroidAppAuditter中用于檢測Content Provider權限的關鍵代碼:

while(index($cont[$line],"<permission android:name=\"$ProviderName\"") == -1){
         if ($line <= $linecount) {
                   $line++;
         }else{
                   print "[中危]:Content Provider:$ProviderName 預設設定為\“normal\”權限,可能導緻敏感資訊洩露!\n";
                   $CheckComponentResult .=  "[中危]:Content Provider:$ProviderName 預設設定為\“normal\”權限,可能導緻敏感資訊洩露,建議修改為\“signature\”或者\“signatureOrSystem\”!\n";
                   ……省略……
                   last;
          }}if(index($cont[$line],"android:protectionLevel=\"normal\"") > -1){
                   print "[中危]:Content Provider:$ProviderName 權限為\“normal\”,可能導緻敏感資訊洩露!\n";
                   $CheckComponentResult .= "[中危]:Content Provider:$ProviderName 為\“normal\”權限,可能導緻敏感資訊洩露,建議修改為\“signature\”或者\“signatureOrSystem\”!\n";
                   ……省略……}      

除protectionLevel權限問題外,<grant-uri-permission>權限問題也可作為一個檢測點,若設為true,可被其它程式通過URL通路到content provider的内容,容易造成資訊洩露。

    2011年盛大的安全研究人員DoDo在其部落格寫一系列關于Android安全的文章,其中有篇就提到關于Broadcast Receiver的問題,連結見:http://www.sectop.com/?p=128,這個依然是元件權限控制的問題,由于Broadcast Receiver被允許外部調用,可能被第三方惡意軟體标記相關action給正常應用發送broadcast,那麼正常應用就會對此進行響應處理,其危害程度也是取決于正常應用對廣播接收采取的操作,比如發送短信、工作列通知等操作,就有可能被用于釣魚欺騙。防禦此問題最簡單的方法就是通過android:exproted來關閉receiver對外部應用的響應,但可能在同一公司開發的一些産品之間需要進行互相廣播通訊,此時就可采取DoDo在文中提到的另一種方法:在receiver方的androidmanifest.xml中增加<permission>自定義權限項,并在sendbroadcast方得androidmanifest.xml中增加<uses-permission>比對此權限。

下面是DroidAppAuditter用于檢測Broadcast Receiver權限的部分檢測代碼:

if(index($cont[$line],"android:exported=\"flase\"") > -1){
         print "[安全]:Broadcast Receiver:$Receiver 禁止被外部調用!\n";
         $CheckComponentResult .= "[安全]:$Receiver 禁止被外部調用!\n";}
elsif(index($cont[$line],"android:permission=") == -1){
         print "[低危]:Broadcast Receiver:$Receiver 可被外部調用,可能造成釣魚欺騙,建議添加 android:exported=\"flase\"!\n";
         $CheckComponentResult .= "[低危]:Brodcat Receiver:$Receiver 可被外部調用,可能造成釣魚欺騙,建議添加 android:exported=\"flase\"!\n";
         ……省略……}       

除receiver和content provider的權限問題外,其它元件如service和activies也可能存在權限安全問題,亦可将其列入檢測範圍。

    0×15 其它

    除上文中提到的各個安全檢查點之外,讀者還可進行擴充,比如其它元件權限、XSS、SQL注入檢測、記憶體洩露、intent fuzzing等多個方向進行分析,DoDo’s Blog上面也有一些安全文章可作為參考,大家如果有什麼好的思路或檢測點也可郵件與本人交流:[email protected]

0×20  自動化審計工具——DroidAppAuditter

    對于業務量較大的公司,Android軟體産品可能會很多,若一一通過手工檢測,就會影響到效率,是以實作一款自動化審計工具是非常有必要的,至少可以減輕工作量,以騰出更多的時間出來看片……筆者将此審計工具命名為DroidAppAuditter,主要用Perl語言編寫的,支援Android模拟器和實體機,可自動安裝apk檔案并運作軟體,然後實作動态自動化檢測,并圖文并茂地輸出分析報告。最後這裡附上一份輸出的完整分析報告,如下圖所示,報告中的漏洞已于2011年修複:

淺談Android軟體安全自動化審計

0×02  業界Android軟體安全現狀

         2011年我們借助自動化審計工具DroidAppAuditter,對業界各個主流Android軟體進行安全審計,共審計了29個國内流行的Android軟體,其中存在明文儲存密碼的有10個,其它XSS漏洞、明文傳輸,以及隐私竊取的行為共有12個,所有被審計的軟體有超過一半是存在安全漏洞的。由此可見,目前android軟體安全還未受到業界重視,但這也将成為今後發展的趨勢。最後附上審計結果的部分截圖,如下圖所示:

淺談Android軟體安全自動化審計

0×03  總結