代碼審計(jì),屬于白盒測試,審查代碼檢查是否有安全問題,核心就兩點(diǎn):跟蹤用戶輸入數(shù)據(jù)+敏感函數(shù)參數(shù)回溯。
代碼審計(jì)
關(guān)鍵詞查詢
1. 密碼硬編碼(密碼明文存儲(chǔ))——即將密碼直接以明文的形式寫在代碼中,既不安全,也難以維護(hù):password,pass,pwd,jdbc等
2. 反射型XSS——從用戶那兒獲取參數(shù)中的值,未經(jīng)檢查參數(shù)合法性的情況下,直接輸出在js代碼中,產(chǎn)生腳本攻擊:getParameter,<%=,param等
3. 存儲(chǔ)型XSS——指非法數(shù)據(jù)存入到數(shù)據(jù)庫中,每次加載都會(huì)執(zhí)行惡意代碼產(chǎn)生攻擊。為了檢查代碼是否有該漏洞,需從數(shù)據(jù)庫的插入語句中回溯參數(shù)的來源,如果整個(gè)流程都沒有對參數(shù)進(jìn)行過濾,且沒有全局過濾器,則判斷存在存儲(chǔ)型XSS:insert,save,update等
4. SQL注入——sql語句中出現(xiàn)+,Append,$(),#等拼接字眼且沒有配置SQL過濾文件,則存在sql漏洞。根本解決辦法是預(yù)編譯,也就是sql語句事先編譯好了,隨后傳入?yún)?shù)填坑,不會(huì)重新再編譯,也就不會(huì)有sql注入:select,update,delete,insert等
5. 任意文件下載——整個(gè)流程中沒有對用戶請求的文件名進(jìn)行合法性檢查,導(dǎo)致用戶能夠下載一些配置文件:fileName,filePath,getFile,getWriter等
6. 任意文件刪除——同樣也是沒有對用戶請求的參數(shù)進(jìn)行過濾,導(dǎo)致輸入?yún)?shù)拼接以能夠刪除重要文件:delete,deleteFile,fileName,filePath等
7. 任意文件上傳——未過濾用戶輸入文件名,導(dǎo)致能夠上傳惡意可執(zhí)行文件。需注意有沒有配置文件上傳白名單,是否有檢查后綴名,配置文件是否設(shè)置了白名單或者黑名單:upload,write,fileName,filePath等
8. 命令注入——判斷是否直接拼接外部傳來的值:getRuntime,exec,cmd,shell等
9. 緩沖區(qū)溢出——直接拷貝或*,未考慮大小:strcpy,strcat,scanf,memcpy,memmove,memeccpy,Getc(),fgetc(),getchar,read,printf等
10. XML注入——在導(dǎo)入配置、數(shù)據(jù)傳輸接口等場景,留意XML解析器是否禁用外部實(shí)體:DocumentBuilder、XMLStreamReader、SAXBuilder、SAXParser、SAXReader 、XMLReader、SAXSource 、TransformerFactory 、SAXTransformerFactory 、SchemaFactory等
11. 日志記錄敏感信息——由于日志文件保存位置有一定要求,一般不在考慮范圍之內(nèi)(不結(jié)合其他漏洞一起考慮的情況下):log.info,logger.info等
12. URL跳轉(zhuǎn)——注意是否配置了url跳轉(zhuǎn)白名單:sendRedirect,setHeader,forward等
13. 敏感信息泄露及錯(cuò)誤處理——查看配置文件是否配置了統(tǒng)一錯(cuò)誤頁面,如果有則不存在此漏洞,如果沒有則搜索定位看是否泄露敏感信息:Getmessage,exception等
14. 反序列化漏洞——當(dāng)輸入的反序列化的數(shù)據(jù)可被用戶控制,那么攻擊者即可通過構(gòu)造惡意輸入,讓反序列化產(chǎn)生非預(yù)期的對象,在此過程中執(zhí)行構(gòu)造的任意代碼:
ObjectInputStream.readObject,ObjectInputStream.readUnshared,XMLDecoder.readObject,Yaml.load,XStream.fromXML,ObjectMapper.readValue,JSON.parseobject
15. 不安全組件暴露——通過查看配置文件 AndroidManifest.xml,查看屬性有沒有配置 false。
邏輯漏洞
1. CSRF(Cross Site Request Forgery, 跨站域請求偽造)——查看配置文件有沒有配置csrf全局過濾器,如果沒有則看每個(gè)操作前有沒有添加token的防護(hù)機(jī)制。
2. SSRF(Server-Side Request Forgery:服務(wù)器端請求偽造)——查看用戶可控輸入鏈接有沒有過濾機(jī)制。
3. 越權(quán)漏洞——重點(diǎn)關(guān)注用戶操作請求時(shí)是否有對當(dāng)前登陸用戶權(quán)限做校驗(yàn)或者權(quán)限框架的配置文件以及實(shí)現(xiàn)方法。
4. 敏感數(shù)據(jù)弱加密——看數(shù)據(jù)傳輸中的加密方法,一般寫在工具類util中。
5. 短信驗(yàn)證碼——時(shí)間限制防止可爆破,次數(shù)限制防止對手機(jī)產(chǎn)生攻擊,可否自定義防止發(fā)送不良信息。