首页 > 其他分享 >二进制SCA指纹提取黑科技: go语言逆向技术

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

时间:2022-10-13 22:37:02浏览次数:75  
标签:语言 二进制 检测 SCA 指纹 xff Go go


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

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


什么是二进制SCA检测

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

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

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



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

无需依赖源码,操作方便

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

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


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


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

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

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

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

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

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


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

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

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

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

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



方法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+漏洞源、百万级开源组件版本,开源问题全覆盖。​

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



标签:语言,二进制,检测,SCA,指纹,xff,Go,go
From: https://blog.51cto.com/u_15801904/5754824

相关文章

  • 记录go语言 gin 中一个天坑
    1.想写回数据,可以使用context.String或者JSON。2.但如果自己以及marshal了的话,就只能返回String!用JSON去返回的话会导致接收端不能解析。  第二个参数可以是数组或......
  • GO 学习之实现的二分查找算法
    packagemainimport"fmt"varindexintfuncmain(){ //有序数组 vararray=[17]int{2,5,8,14,15,18,19,20,29,34,55,56,57,58,59,60,67} va......
  • Centos7部署mongodb三节点复制集
    Centos7部署mongodb三节点复制集一、安装mongodb#使用yum安装mongodb1、自定义yum源文件vim/etc/yum.repos.d/mongodb.repo[mongodb-org]name=MongoDBRepository......
  • django部署
    https://www.liujiangblog.com/course/django/181理论上配置完nginx就可以看到Nginx欢迎界面,如果没有,可能是端口问题。用天翼云,在备案之前不允许使用80端口(默认端口,zrhan......
  • 虚拟上安装Redis和MongoDB教程---Redis安装
    为了完成后续大数据实验,不得不进行工具的安装(自我感觉挺麻烦的)一、首先安装redis1、官网:https://redis.io/download2、将下载好的软件上传至虚拟机上(我上传到自己建立......
  • 研一入坑Go 文件操作
    1packagemain23import(4"fmt"5"os"6"path"7"path/filepath"8)910funcmain(){11fileInfo,err:=os.......
  • Go:基于 Redis 实现的延迟队列详解
    大家好,本文来自Go爱好者投稿,作者:finley背景我们在工作中经常遇到等待一段时间后再执行某些任务的需求,比如:若订单创建15分钟后仍未支付,需要关闭订单并释放库存。用......
  • 研一小白入坑Go (time使用)
    1packagemain23import(4"fmt"5"time"6)78funcmain(){9//获取当前时间10t1:=time.Now()11fmt.Println(t1)12......
  • Redis延迟队列golang高效实践
    一、背景 业务中经常会有这样的场景: 到期后自动执行指定操作; 查询某个任务是否完成,未完成等待一定时间再次查询; 回调通知,当回调失败时,等待后重试;等等还......
  • Go语言学习日记【二十四】将字符串中连续多个空格压缩为一个
    packagemainimport("fmt""regexp")funcmain(){oldstr:="Ihaveadream"fmt.Println(oldstr)newstr:=DeleteExtraSpace(oldstr)fmt.......