摘要:二進制SCA工具要想更好的輔助安全人員實作安全審計、降低漏洞檢測的誤報率,必須向更細顆粒度的檢測維度發展,而不僅僅停留在開源軟體的層面,同時對漏洞庫的要求也需要向細顆粒度的精準資訊提出的挑戰,
本文分享自華為云社區《Linux內核漏洞精準檢測》,作者: 安全技術猿,
Linux內核結構:
Linux內核由七個部分構成,每個不同的部分又有多個內核模塊組成,結構框圖如下:

圖片參考來自ttps://blog.csdn.net/weixin_44742824/article/details/113814934
Linux裁剪場景分析:
通過分析Linux內核源代碼可以看到不同目錄中存放著不同模塊的實作代碼,同時在編譯時可以config中配置的資訊來控制哪些模塊編譯到最終的二進制中,哪些模塊被裁剪掉,比如以IPV6模塊為例,控制該模塊的配置名稱為CONFIG_IPV6,如果該配置項為設定為y,則表示該功能模塊未被編譯到最終的二進制檔案中,如下所示:

如果該功能模塊被裁剪了,即使該漏洞沒有被補丁修復,那么該功能模塊中存在的漏洞在二進制中也是不受影響的,因此和IPV6相關的漏洞在漏洞檢測時就應該在報告中明顯的標識出不受該漏洞的影響,如CVE-2013-0343(Linux kernel 3.8之前版本內的net/ipv6/addrconf.c中的函式 ipv6_create_tempaddr沒有正確處理IPv6臨時地址生成問題,可允許遠程攻擊者通過 ICMPv6 Router Advertisement (RA) 訊息,造成拒絕服務,然后獲取敏感資訊,),
業界二進制SCA工具不能檢測的原因分析:
為什么目前業界通常的二進制SCA工具無法做到精準檢測,原因是因為業界二進制SCA工具是基于檢測到的開源軟體名稱和版本號來關聯出已知漏洞清單的,而這種通過裁剪功能模塊的方法來應用Linux內核,開源軟體名稱和版本號是不會改變的,因此工具就無法精準的檢測出來了,
二進制SCA工具如何實作該功能:
要實作Linux內核裁剪場景下的已知漏洞精準檢測,二進制SCA工具必須在原來檢測開源軟體名稱和版本號的基礎上,需要實作更新細顆粒度的檢測技術,基于源代碼檔案顆粒度、函式顆粒度的檢測能力,從而實作裁剪場景下已知漏洞的精準檢測,即可以知道哪些代碼被編譯到最終的二進制檔案中,哪些代碼沒有參與編譯,同時漏洞庫也必須實作對細顆粒維度的支持,即漏洞資訊必須精準定位是由哪些檔案和函式中的代碼片段引入的,
以CVE-2013-0343為例,通過分析漏洞描述資訊和Linux內核源代碼,可以獲取到該漏洞和下面這些位置代碼相關的定位資訊:
"CVE-2013-0343": {
"net/ipv6/addrconf.c": [
“addrconf_add_ifaddr”,
“addrconf_dad_begin”,
“addrconf_dad_stop”,
“addrconf_dad_work”,
“addrconf_del_ifaddr”,
“addrconf_prefix_rcv”,
“addrconf_verify_rtnl”,
“addrconf_verify_work”,
“inet6_addr_add”,
“inet6_addr_del”,
“inet6_addr_modify”,
“inet6_rtm_deladdr”,
“inet6_rtm_newaddr”,
“inet6_set_iftoken”,
“inet6_set_link_af”,
“ipv6_create_tempaddr”,
“manage_tempaddrs”
]
}
基于如果引入漏洞的源代碼沒有參與編譯出二進制,那么編譯出來的二進制也就是不存在該漏洞的原理;因此只要二進制SCA工具能檢測出上述位置的源代碼沒有參與編譯出最終的vmlinux二進制檔案,那么此vmlinux檔案就不受CVE-2013-0343漏洞的影響,
總結:
二進制SCA工具要想更好的輔助安全人員實作安全審計、降低漏洞檢測的誤報率,必須向更細顆粒度的檢測維度發展,而不僅僅停留在開源軟體的層面,同時對漏洞庫的要求也需要向細顆粒度的精準資訊提出的挑戰,
文末福利:華為云漏洞掃描服務VSS 基礎版限時免費體驗>>>
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342025.html
標籤:其他
