|
注入攻擊(Injection Flaws)
From OWASP
http://www./index.php/Injection_Flaws
簡介 注入攻擊是攻擊者通過Web應用傳播惡意的代碼到其他的系統(tǒng)上。這些攻擊包括系統(tǒng)調用(通過shell命令調用外部程序)和后臺數(shù)據(jù)庫調用(通過SQL注入)一些設計上有缺陷的Web應用中的Perl,python和其他語言寫的腳本(script)可能被惡意代碼注入和執(zhí)行。任何使用解釋執(zhí)行的Web應用都有被攻擊的危險。 Any time a web application uses an interpreter of any type there is a danger of an injection attack.
很多Web應用使用操作系統(tǒng)的特性和外部程序來完成他們的某些功能。發(fā)送郵件或許是最常用的外部程序,很多其他程序也一同被使用。當一個Web應用通過Http請求把外部請求的信息傳遞給應用后臺時,必須非常小心。否則攻擊這可以把某些特殊字符、惡意代碼或者命令改變器注入這些信息中,你的Web應用可能會把這些攻擊代碼傳遞給后臺執(zhí)行。
SQL注入是一種廣泛使用的危險度極高的注入攻擊方式。要使用這種攻擊方式,攻擊者必須找到Web應用傳遞給數(shù)據(jù)庫的參數(shù)。通過把惡意的SQL命令嵌入?yún)?shù)中,攻擊者可以讓Web應用把這些查詢發(fā)送到數(shù)據(jù)庫中。發(fā)現(xiàn)這些攻擊和系統(tǒng)漏洞并不難。但是攻擊產生的后果卻相當致命,攻擊者可以得到,破壞或者摧毀你所有數(shù)據(jù)庫的內容。
注入攻擊的系統(tǒng)漏洞可以很容易的被發(fā)現(xiàn)和攻擊,但是他們在系統(tǒng)中也是相當?shù)碾[蔽。攻擊的結果也會很嚴重,從小的錯誤到危及整個系統(tǒng),甚至是系統(tǒng)被破壞。在任何情況下,外部調用的使用是非常廣泛的,所以Web應用的注入漏洞必須高度重視。
影響的系統(tǒng)
每個Web應用系統(tǒng)都允許外部命令,比如系統(tǒng)調用、shell調用和SQL請求。注入攻擊依賴于這些系統(tǒng)如何使用這些調用和系統(tǒng)的哪些部分使用這些調用。但是如果Web應用沒有很好的設計和編碼,所有的外部調用(external calls)都會受到攻擊。
案例
· Examples: 一個惡意的參數(shù)修改可以使系統(tǒng)訪問其他用戶的文件(比如文件請求加上文件追溯符“../” characters as part of a filename request). 另外一些命令也可以附加到參數(shù)中使得腳本運行 (如., “; rm –r *”). SQL查詢可以通過在SQL語句中增加一些限制條件,比如”where”子句中增加“OR 1=1”)來獲得對數(shù)據(jù)請求的訪問的權限.
· 如何創(chuàng)建HTTP驗證引擎(通過Stinger驗證J2EE) http://www./columns/jeffwilliams/jeffwilliams2
· Have Your Cake and Eat it Too (.NET validation) http://www./columns/jpoteet/jpoteet2
如何找到你系統(tǒng)的漏洞
最好的方法是搜索你所有的源代碼,找到使用外部資源的命令(比如system,exec,fork,Runtime.exec,SQL queries,或者在你系統(tǒng)里面使用解釋器interpreters的任何創(chuàng)建請求的的語法)注意很多語言通過多種方式來運行外部命令。開發(fā)者應檢查他們的代碼,找到所有的可以通過HTTP請求注入的漏洞。檢查過代碼之后,注意采用如下的步驟來保護你的應用。
保護你的系統(tǒng)
最簡單的防護措施是盡可能避免執(zhí)行外部解釋器。對于腳本命令和系統(tǒng)調用,有很多特點的類庫來執(zhí)行他們。使用這些類庫但不引入系統(tǒng)腳本解釋器,通過這種方式可以避免腳本命令導致的大量問題。
對于你仍然要是用的系統(tǒng)命令,比如對后臺數(shù)據(jù)庫的訪問,你必須仔細檢查確保其中不包含任何惡意內容。你也可以結構化你的請求代碼使得參數(shù)傳入的都是數(shù)據(jù)而不是可執(zhí)行的語句。使用存儲過程和Prepared statement會提供很好的保護,確保提供的輸入都作為數(shù)據(jù). 這些方法會減少,但不是完全減少外部調用的風險。你仍然必須驗證這些輸入來確保它滿足安全的要求。
另外一個提供對命令注入很好的預防方法是通過系統(tǒng)權限配置,只允許Web應用使用某些特定的命令. 因此你不能以root用戶來啟動Web服務器或者以DBADMIN用戶來訪問數(shù)據(jù)庫。否則攻擊者可以利用這些權限很高的用戶攻擊系統(tǒng)。某些J2EE系統(tǒng)可以允許使用JAVA沙箱(java sand box),這種方式也可以防止某些系統(tǒng)命令的執(zhí)行。
如果一個外部命令必須執(zhí)行,任何插入到命令的用戶信息都必須強制檢查。要提供處理錯誤的機制,比如處理請求時的超時處理和阻塞處理。所有的輸出,返回代碼錯誤代碼都必須檢查來確保所有的處理過程沒有受到攻擊。這樣至少可以讓你檢查是否系統(tǒng)運行中是否出現(xiàn)了問題。否則攻擊永遠不能被檢測到。
“OWASP Filters project“ 是一個可重用的防止注入攻擊的組件。OWASP 發(fā)布的CodeSeeker是一個應用級別的防火墻。
如果您需要這樣的安全服務,可以找我聯(lián)系li.woohoo@gmail.com
|
|
|
來自: shawnsun007 > 《安全分析》