源代碼安全審計(jì)的核心宗旨在于提升代碼品質(zhì),通過對(duì)軟件源碼進(jìn)行細(xì)致的審查與評(píng)估,揭示其在開發(fā)、測(cè)試、部署等環(huán)節(jié)可能潛藏的安全隱患或漏洞,從而在根源上防止安全風(fēng)險(xiǎn)的衍生。源代碼安全審計(jì)手段主要分為三類:靜態(tài)分析(SAST)、動(dòng)態(tài)分析(DAST)以及靜動(dòng)結(jié)合(IAST)。
源代碼靜態(tài)分析,顧名思義,是在不執(zhí)行代碼的前提下,對(duì)代碼的數(shù)據(jù)流程、控制流程及語義層面進(jìn)行深入剖析,利用數(shù)據(jù)流分析、污點(diǎn)分析等手段,對(duì)代碼進(jìn)行抽象化處理和建模,探究代碼的控制依賴性、數(shù)據(jù)依賴性以及變量的污染狀況,并通過安全規(guī)則驗(yàn)證、模式匹配等策略,挖掘出源碼中的安全漏洞。靜態(tài)分析通常將源碼轉(zhuǎn)換為標(biāo)記、抽象語法樹、圖形等中間表示形式,并結(jié)合多種檢測(cè)算法和模型進(jìn)行漏洞查找。
以某電商平臺(tái)為例,該平臺(tái)在經(jīng)歷了一次安全審計(jì)后,發(fā)現(xiàn)了一個(gè)嚴(yán)重的SQL注入漏洞。這個(gè)漏洞是通過靜態(tài)分析技術(shù)(SAST)被發(fā)現(xiàn)的。審計(jì)團(tuán)隊(duì)使用靜態(tài)分析工具對(duì)源代碼進(jìn)行了全面掃描,發(fā)現(xiàn)了一個(gè)用戶登錄功能模塊中的代碼片段,該代碼沒有正確地處理用戶輸入,導(dǎo)致攻擊者可以構(gòu)造特定的輸入來操縱數(shù)據(jù)庫(kù)查詢,從而竊取用戶數(shù)據(jù)。
源代碼動(dòng)態(tài)分析就是向程序注入專門設(shè)計(jì)的測(cè)試數(shù)據(jù),觀察程序的實(shí)際運(yùn)行結(jié)果與預(yù)期結(jié)果的差異,以此來評(píng)估程序的正確性和穩(wěn)健性,進(jìn)而確定是否存在安全漏洞。動(dòng)態(tài)分析技術(shù)主要包括模糊測(cè)試、動(dòng)態(tài)符號(hào)執(zhí)行和動(dòng)態(tài)污點(diǎn)分析等技術(shù)手段。
一家金融服務(wù)公司在進(jìn)行源代碼動(dòng)態(tài)分析(DAST)時(shí),通過模糊測(cè)試技術(shù)發(fā)現(xiàn)了其在線交易系統(tǒng)的一個(gè)安全漏洞。測(cè)試人員向系統(tǒng)輸入了一系列異常和非標(biāo)準(zhǔn)的輸入數(shù)據(jù),結(jié)果發(fā)現(xiàn)系統(tǒng)在處理某些特定格式的數(shù)據(jù)時(shí)會(huì)發(fā)生崩潰,這可能導(dǎo)致拒絕服務(wù)攻擊,甚至數(shù)據(jù)泄露。
而動(dòng)靜結(jié)合的檢測(cè)方法,是將源代碼靜態(tài)分析與源代碼動(dòng)態(tài)分析的優(yōu)勢(shì)相結(jié)合,首先通過靜態(tài)分析對(duì)大量源代碼進(jìn)行初步篩選和劃分,然后利用動(dòng)態(tài)分析對(duì)特定代碼片段進(jìn)行數(shù)據(jù)輸入測(cè)試,根據(jù)數(shù)據(jù)流動(dòng)情況來判定漏洞的存在與否。
動(dòng)靜結(jié)合檢測(cè)(IAST)的應(yīng)用也可以在一家大型社交網(wǎng)絡(luò)公司的案例中看到。該公司使用IAST技術(shù)對(duì)其移動(dòng)應(yīng)用進(jìn)行了安全審計(jì)。首先,靜態(tài)分析工具對(duì)代碼庫(kù)進(jìn)行了快速掃描,識(shí)別出潛在的脆弱點(diǎn)。隨后,動(dòng)態(tài)分析工具在這些脆弱點(diǎn)上進(jìn)行更深入的測(cè)試,最終發(fā)現(xiàn)了一個(gè)在用戶頭像上傳功能中的文件上傳漏洞。這個(gè)漏洞允許攻擊者上傳惡意文件,進(jìn)而控制服務(wù)器。
這些案例表明,源代碼安全審計(jì)不僅能夠發(fā)現(xiàn)已知的安全漏洞,還能夠揭示那些在傳統(tǒng)安全測(cè)試中難以發(fā)現(xiàn)的問題。通過這些技術(shù)的綜合應(yīng)用,企業(yè)能夠更有效地保護(hù)其軟件系統(tǒng)免受攻擊,確保用戶數(shù)據(jù)和系統(tǒng)的安全。