0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

IT科技苏辞 来源:IT科技苏辞 作者:IT科技苏辞 2022-10-13 22:20 次阅读

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

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

什么是二进制SCA检测

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

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

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

无需依赖源码,操作方便

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

poYBAGNIHqaAXlLnAAD_pOIaJ3E452.png

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

二进制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语言。

poYBAGNIHqaAIagFAAJbL3-JMcI632.png

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

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

pYYBAGNIHqaADP1_AAHNY017fkQ727.png

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

poYBAGNIHqaARTzDAABmQbGPRGw432.png



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

方法2:另外1.16版本Go语言结构有些新变化,magic变为’xfaxffxffxff’,解析头信息获取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=’xfbxffxffxff’一致。通过上述两个方法可以恢复函数真实名称,从而方便对Go语言二进制文件的逆向分析,提升分析效率。

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

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

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

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

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

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    751

    浏览量

    41434
  • SCA
    SCA
    +关注

    关注

    1

    文章

    36

    浏览量

    11917
  • go语言
    +关注

    关注

    1

    文章

    156

    浏览量

    8987
收藏 人收藏

    评论

    相关推荐

    二进制处理中的一些技巧

    二进制和十 进制的处理中,有时候一些小技巧是很有用的。 1、把十 进制数转换成 二进制数 (1)在MATLAB中有一个函数dec2bin,可以把正整数转换为2
    的头像 发表于07-05 11:51 312次阅读

    二进制串行计数器工作原理是什么?

    在数字电路设计中,计数器是一种非常关键的组件,用于测量时间、计数事件或跟踪状态变化等。其中, 二进制串行计数器作为一种常用的计数器类型,在多种应用场景中都发挥着重要作用。本文将对 二进制串行计数器
    的头像 发表于05-28 15:52 430次阅读

    如何实现二进制和BCD码数据的相互转变?

    如何实现 二进制和BCD码数据的相互转变? 二进制码是将十 进制数字表示为 二进制数和十 进制数的一种表示方法。在计算机系统中,
    的头像 发表于02-18 14:51 2002次阅读

    二进制与逻辑电平的变化范围

    二进制中的两个数字0和1称为位(bit, 是 二进制数字binary digit的缩写)。在数字电路中,使用两个不同的电平表示这两个位。一般情况下,1 用高电平表示,0用低电平表示,这种逻辑体制称为正逻辑。
    的头像 发表于02-04 16:54 805次阅读
    <b class='flag-5'>二进制</b>与逻辑电平的变化范围

    鸿蒙二进制数组创建

    背景 c++层数据都是 二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的 二进制数组数据都是错误的。 接口
    的头像 发表于01-31 15:24 1076次阅读

    二进制、八进制、十六进制在现实当中有什么意义?

    二进制、八 进制、十六 进制在现实当中有什么意义? 二进制、八 进制和十六 进制在现实生活中有着广泛的应
    的头像 发表于01-16 11:14 1372次阅读

    10进制转换为二进制的算法

    进制转换为 二进制是计算机科学中非常基础且重要的概念之一。在理解和应用计算机科学的基础知识时,掌握这个算法是至关重要的。 在开始讲解十 进制转换为 二进制的算法之前,让我们回顾一下十
    的头像 发表于01-15 10:32 1174次阅读

    10进制转换为二进制的算法

    10 进制转换为 二进制是计算机领域中非常重要的一个问题。在计算机中,所有的数据都是以 二进制形式进行存储和处理的。因此,我们常常需要将10 进制数转换为
    的头像 发表于01-11 09:14 1314次阅读

    labview二进制字符串转数值

    LabVIEW是一种图形化编程环境,用于实时数据采集、信号处理以及自动化控制等领域。它采取了数据流编程的思想,用户可以通过将各种功能模块进行连接,轻松搭建起复杂的系统。 在LabVIEW中, 二进制
    的头像 发表于01-05 16:20 2010次阅读

    你知道十进制二进制如何进行转换吗?

    你知道十 进制二进制如何进行转换吗? 当我们提到数字系统时,最常见的是十 进制系统和 二进制系统。十 进制是基于10的系统,而
    的头像 发表于12-20 17:05 942次阅读

    二进制DAC示例介绍

    德赢Vwin官网 网站提供《 二进制DAC示例介绍.pdf》资料免费下载
    发表于11-28 11:23 1次下载
    <b class='flag-5'>二进制</b>DAC示例介绍

    进制、十六进制二进制数制的区别

    计算机内部一般也是8位的倍数(8位= 1字节),所以每个字节可以方便地用2个十六 进制数字表示。对于工程师来说,这比长的 二进制数字序列更容易处理,但是计算机内部仍然是以2为基数的 二进制数字系统。
    的头像 发表于11-28 10:45 1134次阅读
    十<b class='flag-5'>进制</b>、十六<b class='flag-5'>进制</b>和<b class='flag-5'>二进制</b>数制的区别

    二进制最佳接收原理二进制最佳接收机的实现形式有哪两种?

    二进制最佳接收原理 二进制最佳接收机的实现形式有哪两种? 二进制最佳接收原理是计算机通信中的重要概念,它是指在 二进制通信中通过一定的方法,使接收机在信号传输过程中能够准确、可靠地接收到
    的头像 发表于11-27 16:19 811次阅读

    二进制数据及取值范围的计算方法

    本文介绍 二进制数据的相关知识,如定义、取值范围计算、转换为十 进制的方法以及一些常见位数的 二进制数据的取值范围等。
    的头像 发表于11-08 15:48 1400次阅读
    <b class='flag-5'>二进制</b>数据及取值范围的计算方法

    M451如何丢弃函数的二进制代码填入SRAM的二进制代码

    应用程序 : 示例代码演示了如何丢弃函数的 二进制代码, 然后填入 SRAM 的 二进制代码, 然后调用它 。 BSP版本:M451系列BSP V3.01.001 硬件: 任何 M451 系列板块
    发表于08-30 07:35