悟空云課堂 | 代碼安全第十期:日志偽造漏洞

該欄目為中科天齊全新規(guī)劃的悟空云課堂,旨在科普軟件安全相關(guān)知識,助力企業(yè)有效防范軟件安全漏洞,提升網(wǎng)絡(luò)安全防護(hù)能力。本期主題為日志偽造漏洞缺陷的相關(guān)介紹。
一、什么是日志偽造漏洞?
應(yīng)用程序通常使用日志文件來存儲事件或事務(wù)的歷史,以供以后查看、收集統(tǒng)計信息或調(diào)試。根據(jù)應(yīng)用程序的性質(zhì),檢查日志文件的任務(wù)可以根據(jù)需要手動執(zhí)行,也可以使用工具自動篩選重要事件或趨勢信息的日志。
當(dāng)日志條目包含未經(jīng)過授權(quán)的用戶輸入時,會造成日志偽造。
二、日志偽造漏洞的構(gòu)成條件有哪些?
滿足以下條件,就構(gòu)成了一個日志偽造的安全漏洞:
1、數(shù)據(jù)是從不可靠的來源(包括但不局限于不可靠用戶的輸入信息或是不可靠用戶可能更改的文件)進(jìn)入應(yīng)用程序;
2、數(shù)據(jù)寫入到應(yīng)用程序或是系統(tǒng)日志文件。
三、日志偽造漏洞會造成哪些后果?
關(guān)鍵詞:修改應(yīng)用程序的數(shù)據(jù);隱藏活動;執(zhí)行未授權(quán)的代碼或命令
如果攻擊者向記錄到日志文件的應(yīng)用程序提供惡意數(shù)據(jù),則可能會妨礙或誤導(dǎo)日志文件的解讀。最理想的情況是,攻擊者可能通過向應(yīng)用程序提供包括適當(dāng)字符的輸入,在日志文件中插入錯誤的條目。如果日志文件是自動處理的,那么攻擊者可以破壞文件格式或注入意外的字符,從而使文件無法使用。通過偽造或其他方式,可能會導(dǎo)致日志文件中的統(tǒng)計信息發(fā)生偏差,受到破壞的日志文件可用于掩護(hù)攻擊者的跟蹤軌跡,甚至還可以牽連第三方來執(zhí)行惡意行為。最糟糕的情況是,攻擊者可能向日志文件注入代碼或者其他命令,利用日志處理實用程序中的漏洞。
四、日志偽造漏洞的防范和修補(bǔ)方法有哪些?
1、輸入驗證:對輸入的信息進(jìn)行驗證。假設(shè)所有輸入都是惡意的,使用“接受已知好的數(shù)據(jù)”輸入驗證策略,即,使用嚴(yán)格符合規(guī)范的可接受輸入列表。拒絕任何不嚴(yán)格符合規(guī)范的輸入,或者將其轉(zhuǎn)換為符合規(guī)范的輸入。
2、輸出編碼:對要寫入日志文件的信息進(jìn)行編碼,使之符合日志文件的編碼格式要求。常見的編碼格式包括ISO-8859-1, UTF-7, 和UTF-8。
五、日志偽造導(dǎo)致的漏洞樣例:

用Wukong軟件檢測上述程序代碼,則可以發(fā)現(xiàn)代碼中存在著日志偽造導(dǎo)致的代碼缺陷,如下圖:

日志偽造在CWE中被編號為CWE-117:Improper Output Neutralization for Logs
