七個(gè)常見的Java應(yīng)用安全陷阱及應(yīng)對

Java應(yīng)用程序已經(jīng)成為黑客經(jīng)常攻擊的目標(biāo),畢竟,它涉及的組件太多:服務(wù)器端邏輯、客戶端邏輯、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸、API及其他組件,確保所有組件安全無疑困難重重。實(shí)際上,23%的.NET應(yīng)用程序存在嚴(yán)重漏洞,而44%的Java應(yīng)用程序存在嚴(yán)重漏洞。
Java應(yīng)用安全方面的挑戰(zhàn)有很多,不過,本文列舉了七個(gè)較常見的典型安全陷阱,如果企業(yè)安全團(tuán)隊(duì)意識(shí)到Java應(yīng)用程序中可能存在漏洞,先試著從這幾個(gè)方面著手開展工作,可能會(huì)更容易、更快捷發(fā)現(xiàn)并消除問題。
XXE攻擊
如果網(wǎng)絡(luò)攻擊者利用可擴(kuò)展標(biāo)記語言(XML)解析器讀取服務(wù)器上的任意文件,會(huì)出現(xiàn)這種攻擊。隨后他們可以部署XML外部實(shí)體(XXE),以檢索獲取用戶信息、配置文件甚至云環(huán)境的憑證。大多數(shù)Java XML解析器默認(rèn)啟用XXE要求,因此企業(yè)安全人員應(yīng)該主動(dòng)禁用XXE以避免XXE攻擊。
不安全的反序列化
在序列化過程中,編程語言中的對象被轉(zhuǎn)換成可以保存到數(shù)據(jù)庫或通過網(wǎng)絡(luò)傳輸?shù)母袷健7葱蛄谢^程中則出現(xiàn)相反的情況,即序列化的對象從文件或網(wǎng)絡(luò)中讀取,因此可以將其轉(zhuǎn)回成對象。然而,黑客會(huì)尋找不安全的反序列化漏洞,以便可以操縱序列化對象,發(fā)起身份驗(yàn)證繞過、拒絕服務(wù)或任意代碼執(zhí)行等攻擊。為防止出現(xiàn)這種情況,安全人員需要打上最新補(bǔ)丁,并確保第三方代碼符合防御標(biāo)準(zhǔn),因?yàn)樵S多不安全的反序列化漏洞通過依賴項(xiàng)引入。
遠(yuǎn)程代碼執(zhí)行
黑客經(jīng)常在受害者的機(jī)器上執(zhí)行遠(yuǎn)程代碼(RCE),常常通過命令注入漏洞來實(shí)現(xiàn):用戶輸入直接與系統(tǒng)命令相關(guān)聯(lián)。因?yàn)閼?yīng)用程序無法區(qū)分用戶輸入和系統(tǒng)命令,所以會(huì)將用戶輸入作為代碼來執(zhí)行,這讓黑客得以在機(jī)器上執(zhí)行任意命令。最有效的對策是列出一份有效的許可名單,這將確保形成穩(wěn)健的輸入驗(yàn)證機(jī)制。
SQL注入
籠統(tǒng)地講,當(dāng)應(yīng)用程序無法正確區(qū)分不受信任的用戶數(shù)據(jù)和合法/有效代碼時(shí),就會(huì)出現(xiàn)注入。在操作系統(tǒng)命令中,這會(huì)導(dǎo)致命令注入。以結(jié)構(gòu)化查詢語言(SQL)注入為例,攻擊者注入數(shù)據(jù)以操縱SQL命令。如果應(yīng)用程序無法正確驗(yàn)證用戶輸入,攻擊者將會(huì)插入為SQL語言指定的字符,以破壞查詢邏輯,并執(zhí)行任意SQL代碼。他們可以利用受感染的查詢結(jié)構(gòu)來篡改或竊取數(shù)據(jù),及/或在操作系統(tǒng)中執(zhí)行任意命令。為此可以預(yù)編譯SQL語句,以便嚴(yán)格提供插入到語句來執(zhí)行的參數(shù)(或變量/輸入)。
NoSQL注入
NoSQL數(shù)據(jù)庫不使用SQL語言。在NoSQL注入期間,黑客會(huì)將數(shù)據(jù)注入到數(shù)據(jù)庫語言邏輯中,以啟用身份驗(yàn)證繞過和RCE。MongoDB、Couchbase、Cassandra、HBase及其他NoSQL數(shù)據(jù)庫容易受到這類攻擊。NoSQL查詢語法針對特定的數(shù)據(jù)庫,查詢常常用應(yīng)用程序的編程語言來編寫。因此,必須采用針對特定數(shù)據(jù)庫的方法來阻止NoSQL注入。
LDAP注入
輕量級目錄訪問協(xié)議(LDAP)使開發(fā)人員能夠查詢有關(guān)系統(tǒng)用戶和設(shè)備的目錄服務(wù)。但是當(dāng)應(yīng)用程序在這些查詢中允許不受信任的輸入時(shí),黑客可以提交精心設(shè)計(jì)的輸入,以繞過身份驗(yàn)證,并篡改存儲(chǔ)在目錄中的數(shù)據(jù)。設(shè)置參數(shù)化查詢在這里同樣會(huì)起到有效的預(yù)防作用。
日志注入
安全團(tuán)隊(duì)依靠系統(tǒng)日志來檢測網(wǎng)絡(luò)中的惡意活動(dòng)。攻擊者也意識(shí)到這一點(diǎn),會(huì)在攻擊期間篡改日志文件以掩飾行蹤,通過典型的日志注入,他們可以誘騙應(yīng)用程序在日志文件中寫入虛假條目。比如,攻擊者可能會(huì)尋找那些不清理寫入到日志輸入內(nèi)容中換行符的應(yīng)用程序,引入自己的換行符,并插入新的應(yīng)用程序日志條目?;蛘邔阂釮TML注入到日志條目中,對監(jiān)管日志的管理員的瀏覽器發(fā)起跨站點(diǎn)腳本(XSS)攻擊。
為避免出現(xiàn)這種情況,企業(yè)安全人員需要在每個(gè)日志條目前加上時(shí)間戳、進(jìn)程ID、主機(jī)名及其他形式的元數(shù)據(jù),以此區(qū)分真實(shí)日志條目和虛假日志條目。在采用零信任原則時(shí),應(yīng)該將日志文件內(nèi)容視為不受信任的輸入,除非輸入完全通過了驗(yàn)證,否則不能允許訪問和操作。
參考鏈接:https://sdtimes.com/java/how-to-avoid-the-top-7-java-security-pitfalls/















 
 
 












 
 
 
 