Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面
摘要:二进制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 基础版限时免费体验>>>

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
带你了解3类预训练语音模型预测方法
摘要:在调研多篇论文后,笔者发现预训练语音模型的预测方法基本可以分为以下3类:<1>用前文预测当前及后文(自回归)<2> 随机mask 一些帧并预测 <3> 用两侧上下文预测中间帧。 本文分享自华为云社区《预训练语音模型调研小结》,作者: Hudson。 在调研多篇论文后,笔者发现预训练语音模型的预测方法基本可以分为以下3类:<1>用前文预测当前及后文(自回归)<2> 随机mask 一些帧并预测 <3> 用两侧上下文预测中间帧。下文会按照这三类来介绍预训练语音模型的方法。 1.用前文信息预测当前信息及后文信息 (1)CPC & Modified CPC CPC(Contrastive Predictive Coding)[1] 是预训练语音模型中较早提出的模型。它的模型架构如下图所示。 首先,语音信号被分成段输入到CNN模型,用于抽取特征,CNN层的输出Z再作为GRU层的输入,拿到带有时序信息的输出C,然后用当前时刻t的带有时序信息的Ct(见过序列前面的信息),来预测后续k个时刻的CNN层输出Zt+k。Lo...
- 下一篇
Pokémon GO 如何通过谷歌云同时拓展数百万个请求?
Pokémon GO 也就是《精灵宝可梦》,任天堂和谷歌 Niantic Labs 合作开发的现实增强(AR)游戏,也是谷歌云罕见的支持的大型的游戏,就目前来看,Pokémon GO目前在线用户可以达到数百万人次,谷歌云平台是如何支持 Pokémon GO 容纳如此多的用户的呢? Pokémon GO 的扩展 Pokémon GO 的扩展性主要是基于 Google Kubernetes Engine(谷歌云上的kubernetes的全面托管工具) 和 Cloud Spanner(全球分布式企业级数据库),前端服务托管在 GKE上,可以通过 GKE 这个托管平台轻松扩展结点,直接使用谷歌云平台上的管理k8s集群所需的工具。目前在流量庞大的时间点,会有数千个专门为 Pokémon GO 运行的 kubernetes 节点,以及运行有助于增强游戏体验的各种微服务的 GKE 节点,在特定时间支撑世界各地的数百万玩家,与其他大型多人在线游戏不同的是, Pokémon GO 上的游戏玩家共享一个“realm”,玩家可以相互交互并共享相同的游戏状态。 除了GKE外,谷歌云平台提供 Goggle Cl...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- CentOS7,8上快速安装Gitea,搭建Git服务器
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6