背景
在Android應(yīng)用開(kāi)發(fā)過(guò)程中,基于項(xiàng)目需求一般是團(tuán)隊(duì)開(kāi)發(fā),這就會(huì)出現(xiàn)使用多種編程語(yǔ)言(java、Kotlin、C++等)和一些通用框架。因此,當(dāng)忽略和沒(méi)有重視安全編程實(shí)踐時(shí),常見(jiàn)的注入型漏洞(如SQL注入、XML注入和跨站點(diǎn)腳本(XSS)等)可能會(huì)在應(yīng)用中表現(xiàn)出來(lái),從而給項(xiàng)目帶來(lái)一些安全風(fēng)險(xiǎn)和危害。
下面從基礎(chǔ)理論方面做下這方面的小總結(jié)。
注入漏洞原理
注入漏洞它就是將用戶(hù)輸入或插入后端查詢(xún)或命令時(shí)發(fā)生的一類(lèi)安全漏洞。通過(guò)注入元字符,攻擊者可以執(zhí)行無(wú)意中被解釋為命令或查詢(xún)的一部分的惡意代碼。
例如,通過(guò)操縱SQL查詢(xún),攻擊者可以檢索任意數(shù)據(jù)庫(kù)記錄或操縱后端數(shù)據(jù)庫(kù)的內(nèi)容。
這種注入類(lèi)型漏洞在服務(wù)器端或web服務(wù)中最常見(jiàn)。android應(yīng)用中也存在可利用的實(shí)例,但這種情況不太常見(jiàn),而且攻擊面更小。
SQL注入攻擊
SQL注入攻擊,它涉及將SQL命令集成到輸入的數(shù)據(jù)中,模仿預(yù)定義SQL命令的語(yǔ)法。成功的SQL注入攻擊允許攻擊者讀取或?qū)懭霐?shù)據(jù)庫(kù),并可能執(zhí)行管理命令,具體取決于服務(wù)器授予的權(quán)限。
Android應(yīng)用程序中一般情況下,使用SQLite數(shù)據(jù)庫(kù)來(lái)控制和管理本地?cái)?shù)據(jù)存儲(chǔ)。假設(shè)Android應(yīng)用程序通過(guò)將用戶(hù)憑據(jù)存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中來(lái)處理本地用戶(hù)身份驗(yàn)證。當(dāng)?shù)卿汼QLite數(shù)據(jù)庫(kù)后,應(yīng)用程序查詢(xún)數(shù)據(jù)庫(kù)以搜索用戶(hù)輸入的用戶(hù)名和密碼的記錄。
如果上圖中用戶(hù)名和密碼都設(shè)置為'1' = '1'并且都為真的情況下,這個(gè)查詢(xún)后的數(shù)據(jù)庫(kù)就會(huì)返回所有記錄,這樣就能夠正常登錄,這樣就出現(xiàn)非正常授權(quán)的用戶(hù)也能夠正常登錄數(shù)據(jù)庫(kù)。
因此針對(duì)這種類(lèi)型的注入攻擊,除了對(duì)輸入數(shù)據(jù)進(jìn)行校驗(yàn)外,也可結(jié)合對(duì)用戶(hù)進(jìn)行多重身份驗(yàn)證。確保登錄的用戶(hù)為指定授權(quán)的用戶(hù)。
XML注入攻擊
在XML注入攻擊中,攻擊者注入XML元字符以從結(jié)構(gòu)上去改變XML內(nèi)容。這可以用來(lái)破壞基于XML的應(yīng)用程序或服務(wù)的邏輯,也可能允許攻擊者利用XML解析器處理內(nèi)容的操作。
這種XML攻擊的一個(gè)流行變體是XML外部實(shí)體(XXE)。攻擊者將包含統(tǒng)一資源標(biāo)識(shí)符(URI)的外部實(shí)體定義注入到輸入XML中。在解析過(guò)程中,XML解析器通過(guò)訪(fǎng)問(wèn)URI指定的資源來(lái)擴(kuò)展攻擊者定義的實(shí)體。解析應(yīng)用程序的完整性最終決定了攻擊者所具備的能力,惡意用戶(hù)可以在其中執(zhí)行以下任何操作:訪(fǎng)問(wèn)本地文件,觸發(fā)對(duì)任意主機(jī)和端口的HTTP請(qǐng)求,發(fā)起跨站點(diǎn)請(qǐng)求偽造(CSRF)攻擊,并導(dǎo)致拒絕服務(wù)條件。
XXE示例:打開(kāi)本地文件/dev/random,返回?zé)o限字節(jié)流,可能導(dǎo)致拒絕服務(wù)。
當(dāng)前的Android應(yīng)用開(kāi)發(fā)趨勢(shì)主要集中于基于REST/JSON的服務(wù),基于XML越來(lái)越不常見(jiàn)。但是在使用用戶(hù)提供的或不受信任的內(nèi)容來(lái)構(gòu)造XML查詢(xún)的罕見(jiàn)情況下,它可以由本地XML解析器進(jìn)行解釋。因此,在開(kāi)發(fā)過(guò)程中應(yīng)始終做好驗(yàn)證所述輸入,并轉(zhuǎn)義元字符。
注入攻擊向量
android應(yīng)用程序的攻擊面與典型的web和網(wǎng)絡(luò)應(yīng)用程序截然不同。android應(yīng)用程序通常不會(huì)在網(wǎng)絡(luò)上公開(kāi)服務(wù),應(yīng)用程序用戶(hù)界面上的可行攻擊向量也比較少。針對(duì)android應(yīng)用程序的注入攻擊最有可能通過(guò)進(jìn)程間通信(IPC)接口發(fā)生,其中惡意應(yīng)用程序攻擊設(shè)備上運(yùn)行的另一個(gè)應(yīng)用程序。
在手動(dòng)安全審查過(guò)程中發(fā)現(xiàn),潛在漏洞需要執(zhí)行以下任一操作:
1.識(shí)別不可信輸入的可能入口點(diǎn),然后從這些位置進(jìn)行跟蹤,以查看目標(biāo)是否包含潛在的易受攻擊的函數(shù)。
2.識(shí)別已知的、危險(xiǎn)的庫(kù)/API調(diào)用(例如SQL查詢(xún)),然后檢查未檢查的輸入是否成功地與相應(yīng)的查詢(xún)交互。
對(duì)于不受信任的輸入,一般是通過(guò)以下常見(jiàn)的幾個(gè)方式進(jìn)入應(yīng)用程序:IPC調(diào)用;自定義URL方案;二維碼;通過(guò)藍(lán)牙、NFC或其它方式接收的輸入文件;粘貼板;用戶(hù)界面。
降低注入攻擊向量的實(shí)踐方案:
1.使用可接受值列表對(duì)不受信任的輸入進(jìn)行類(lèi)型檢查和/或驗(yàn)證。
2.執(zhí)行數(shù)據(jù)庫(kù)查詢(xún)時(shí),使用帶有變量綁定的準(zhǔn)備語(yǔ)句(即參數(shù)化查詢(xún))。如果定義了準(zhǔn)備好的語(yǔ)句,用戶(hù)提供的數(shù)據(jù)和SQL代碼將自動(dòng)分離。
3.解析XML數(shù)據(jù)時(shí),確保解析器應(yīng)用程序配置為拒絕解析外部實(shí)體,以防止XXE攻擊。
4.使用x509格式的證書(shū)數(shù)據(jù)時(shí),請(qǐng)確保使用了安全的解析器。
跨站點(diǎn)腳本
跨站點(diǎn)腳本(XSS),它允許攻擊者將客戶(hù)端腳本注入用戶(hù)查看的網(wǎng)頁(yè)。這種類(lèi)型的漏洞在web應(yīng)用中很常見(jiàn)。
當(dāng)用戶(hù)在瀏覽器中查看注入的腳本時(shí),攻擊者能夠繞過(guò)同源策略,從而實(shí)現(xiàn)各種攻擊(例如竊取會(huì)話(huà)cookie、記錄按鍵、執(zhí)行任意操作等)。
在本地應(yīng)用程序的環(huán)境中,XSS風(fēng)險(xiǎn)遠(yuǎn)沒(méi)有那么普遍,原因很簡(jiǎn)單,這類(lèi)應(yīng)用程序不依賴(lài)web瀏覽器。然而,android中存在很多使用WebView組件,這樣就可能容易受到此類(lèi)攻擊。
可以在android應(yīng)用程序中,分析所有存在的WebView,并分析應(yīng)用程序呈現(xiàn)的不可信輸入。
如果WebView打開(kāi)的URL部分由用戶(hù)輸入決定,則可能存在XSS問(wèn)題。
如果使用WebView顯示遠(yuǎn)程網(wǎng)站,則逃避HTML的負(fù)擔(dān)將轉(zhuǎn)移到服務(wù)器端。如果web服務(wù)器上存在XSS漏洞,則可用于在WebView上下文中執(zhí)行腳本。
降低跨站點(diǎn)腳本攻擊實(shí)踐:
1.除非絕對(duì)必要,否則不會(huì)在HTML、JavaScript或其它解釋上下文中呈現(xiàn)不受信任的數(shù)據(jù)。
2.適當(dāng)?shù)木幋a應(yīng)用于轉(zhuǎn)義字符,例如HTML實(shí)體編碼。特別注意:當(dāng)HTML嵌套在其他代碼中時(shí),轉(zhuǎn)義規(guī)則會(huì)變得復(fù)雜,呈現(xiàn)位于JavaScript塊中的URL。
考慮如何在響應(yīng)中呈現(xiàn)數(shù)據(jù)。如果數(shù)據(jù)在HTML上下文中呈現(xiàn),則必須轉(zhuǎn)義六個(gè)控制字符:
針對(duì)跨站點(diǎn)腳本動(dòng)態(tài)分析,可以使用手動(dòng)或者自動(dòng)輸入模糊化來(lái)檢測(cè),即將HTML標(biāo)記和特殊字符注入所有可用的輸入字段,以驗(yàn)證web應(yīng)用程序拒絕無(wú)效輸入或轉(zhuǎn)義其輸出中的HTML元字符。
反射XSS攻擊是指通過(guò)惡意鏈接注入惡意代碼的攻擊。為了測(cè)試這些攻擊,自動(dòng)輸入模糊被認(rèn)為是一種有效的方法。例如,BURP掃描程序在識(shí)別反映的XSS漏洞方面非常有效。
與自動(dòng)化分析一樣,確保所有輸入向量都包含在測(cè)試參數(shù)的手動(dòng)審查中。
審核編輯:劉清
-
Android
+關(guān)注
關(guān)注
12文章
3936瀏覽量
127403 -
JAVA
+關(guān)注
關(guān)注
19文章
2967瀏覽量
104751 -
SQL
+關(guān)注
關(guān)注
1文章
764瀏覽量
44130 -
XSS
+關(guān)注
關(guān)注
0文章
24瀏覽量
2378
原文標(biāo)題:Android中注入型漏洞總結(jié)
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論