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