写点什么

二进制 SCA 指纹提取黑科技:Go 语言逆向技术

  • 2022 年 7 月 22 日
  • 本文字数:1623 字

    阅读完需:约 5 分钟

二进制SCA指纹提取黑科技:Go语言逆向技术

华为云 DevCloud 软件开发平台在 2022 华为伙伴暨开发者大会重磅推出了 4 大新能力,其中的二进制成分分析安全检测能力,能够实现对开源软件漏洞的全面排查、快速精准定位问题、并迅速响应修复;本文将对什么是二进制 SCA 检测服务以及该服务的优势进行解读。

什么是二进制 SCA 检测服务


SCA(Software Composition Analysis)软件成分分析,指通过对软件源码、二进制软件包等的静态分析,挖掘其所存在的开源合规、已知漏洞等安全合规风险,是一种业界常见的安全测试手段(目前华为云提供二进制 SCA 检测服务,源码 SCA 检测服务后续正式发布)。


二进制 SCA 检测服务,检测对象为二进制软件包/固件,直接从二进制文件中提取常量字符串、部分类名称、函数名称等特征信息,再运用匹配算法进行相似度计算,根据相似度门限来检测出引用的开源软件名称和版本号。


二进制 SCA 检测对比源码 SCA 检测的优势

无需依赖源码,操作方便


用户只需上传二进制软件包/固件,服务会采用静态检测技术,不用构建运行环境,不用运行程序即可快速分析二进制软件包/固件中存在的安全风险问题,并输出一份专业的分析报告


图:二进制成分分析-检测处理流程

二进制 SCA 指纹提取黑科技:Go 语言逆向技术之---恢复函数名称算法


在对程序做安全审计、漏洞检测时,通常都需要对程序做逆向分析,我们在没有符号表的情况下,提出了一种恢复函数名称的算法,方便对 Go 语言二进制文件进行逆向分析,提升分析效率。


Go 语言是最近几年发展非常火的一种语言,它具备和 C/C++一样的运行速度快的优点,同时又具备开发效率高,支持包管理机制高阶语言特点。其编译出来的二进制文件格式和 C/C++一样运行在 Linux 平台下是 elf 格式,运行在 windows 平台下是 pe 格式,但同时在二进制文件的内部细节上 Go 语言有自己特有的属性,二进制逆向人员可以利用 Go 语言这些特有属性来实现对二进制文件进行更精准的逆向分析。

特性 1:利用 Go 语言中特有的节信息来判断 elf/pe 文件的源代码语言类型,是 Go 语言还是 C、C++语言


通过判断二进制文件中是否存在“.noptrdata”、“.Gopclntab“、”.data.rel.ro.Gopclntab“确定源代码,如果存在上述节名称,则源代码为 Go 语言。


特性 2:在没有符号表的情况下如何恢复函数名称


我们知道在 C/C++编译出来的二进制文件中,如果没有符号表信息是没法看到函数名称的,在 IDA 工具中只能看到地址信息。



Go 语言怎么来恢复函数名称呢,可以通过从.data.rel.ro 节来恢复函数名,具体查找定位算法如下:


方法 1:


解析头信息可以获取 magic, quantum, ptr_size, func_tab_count 数据,当 magic 为'\xfb\xff\xff\xff'时,entry_size = 2 * ptr_size 为 entry 结构体大小,func_tab_count 为 entry 结构体数量;解析 entry 结构获取到名称信息结构数据位置偏移(需要注意 64 位和 32 位 Go 程序 func_info_offset 位置相反),读取名称信息结构体数据,再从中获取到名称字符串位置偏移(name_offset),根据此偏移定位到函数名称字符串起始位置偏移,从该位置解析得到函数名称。

方法 2:


1.16 版本 Go 语言结构有些新变化,magic 变为'\xfa\xff\xff\xff',解析头信息获取 func_tab_cnt, file_cnt, func_name_off, cu_off, filetab_off, pctab_off, func_tab_off 数据,其中 func_tab_off 为 entry 数据起始位置,解析 entry 结构获取 code_off, func_info_offset 数据,后续解析过程与 magic='\xfb\xff\xff\xff'一致。


通过上述两个方法可以恢复函数真实名称,从而方便对 Go 语言二进制文件的逆向分析,提升分析效率。

DevCloud 软件开发平台基于二进制成分分析技术,可以为开发者提供以下能力支持:


  • 支持多种类型安装包:支持 windows、linux、IoT 固件包、安卓部署包等常见软件包的安全检测。

  • 检测全面:支持针对开源软件的许可证、漏洞、信息泄露、安全配置等 3 大项、25 小类的安全问题检测。

  • 开源软件覆盖全面:覆盖 100+漏洞源、百万级开源组件版本,开源问题全覆盖。

  • 保障迅速:小时级漏洞更新,提升漏洞发现速度,降低安全风险。



作者:郑志强 |华为云二进制安全测试工具专家


点击关注,第一时间了解华为云新鲜技术~

发布于: 4 小时前阅读数: 21
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
二进制SCA指纹提取黑科技:Go语言逆向技术_云计算_华为云开发者联盟_InfoQ写作社区