首页 > 个性签名 正文
【个性签名符号】Finger:函数符号识别工具

时间:2023-02-27 09:13:14 阅读: 评论: 作者:佚名

简介:阿里云云安全技术研究所正式发布了二进制函数符号识别引擎。Finger Ariyun云安全技术研究所正式推出了Finger,这是一款二进制函数符号识别引擎。IDA插件和python SDK使用户能够识别二进制程序中的库函数和常用第三方函数。

产品背景

应用程序静态编译后,代码量扩大了几十倍,但实际用户逻辑代码的比例非常低。下图只是一个简单的测试程序,其中静态链接上的函数数大约是动态链接函数数的65倍。这在二进制恶意代码检测领域很常见,恶意代码和库代码混杂在一起,大大增加了安全研究员的逆向分析难度,分析过程需要花费大量时间。

# include

Int main(){

printf(' hello world \ n ');

return 0;

}

产品介绍

基于阿里云安全中心在二进制感知能力建设中多年的经验和人工智能在软件安全领域的实践探索,阿里云云安全技术研究所以阿里云平台的大数据分析能力为基础,结合专业知识和人工智能技术,提出了二进制函数签名算法,并集成到函数符号识别工具Finger中,免费向用户开放。目的是促进二进制恶意代码检测领域的基本能力建设,促进未知样本搜索、漏洞挖掘、二进制文件组件分析等研究领域的开发。

使用方法

目前,Finger同时支持IDA插件和python SDK。

通过

方式一:Python SDK

pip安装python SDK:

Pip install Finger_sdk提示:安装了Finger的python版本必须与IDA python版本匹配。

使用示例如下:

# IDA python

# coding: UTF-8

Import IDC

Import idaapi

Import idautils

Fromfinger _ SDK导入客户端,IDA _ func

Import平台

Def recognize _ functions(客户端):

For func_ea in idau():

Pfn=idaa(func_ea)

Func_name=idaa_name(func_ea)

Func_feat=ida_)

Iffunc _ feat3360

Func _ id,RES=client . recognize _ function(func _ feat)

If RES and res[func_id]:

Func_symbol=res[func_id]

print('[]recognize % s :% s ' %(func _ name,func _ symbol))

Def main():

URL='

headers={ ' content-type ' ' application/JSON ' }

Timeout=5

Version=()

If ver('3'):

Ida_au()

My _ client=client.client (URL、头、timeout)

Recognize_functions(my_client)

Ida_(0)

Else:

Wait()

My _ client=client.client (URL、头、timeout)

Recognize_functions(my_client)

退出(0)

If _ _ name _ _==' _ _ main _ _ '

根据Main()

方式二:IDA插件

方法1,将Finger IDA plugin复制到IDA安装目录中的plugins目录。

Finger IDA插件支持上传单个函数、多个选定的函数和所有函数,并可从菜单栏、反汇编窗口和函数窗口发送信函。

数符号识别。

菜单栏-Finger

反汇编窗口-Finger

函数窗口-Finger

成功识别的函数符号将在反汇编窗口和函数窗口高亮显示。

海量数据支持

基于阿里云平台的大数据处理和分析能力,我们将阿里云海量样本数据与已知信息的公开二进制文件融合,利用基于专家知识和AI的二进制函数签名算法,从中提取函数签名并将其入库。目前函数签名库中已有亿级的函数签名与函数符号,且每天以百万级的速度自动增长,这使得Finger可以自动迭代成长,降低了人工维护成本,并保证了Finger识别的准确率。Finger目前已支持x86/ARM/MIPS架构的32位/64位的ELF/PE文件的函数符号识别。

识别准确率高

目前,Finger已作为基础组件集成于阿里云云安全中心的多个安全产品中,并在日常工作中辅助团队研究人员在样本分析中快速定位恶意代码。经过数月阿里云平台日均过百万的海量样本数据训练和测试,准确率较高。

示例程序1

下图的二进制程序样本来源于上文产品背景中的测试程序,通过Finger进行函数符号识别,可将glibc中的库函数精准识别出来。

示例程序2

下图是同属于Skidmap木马家族的两个恶意样本(样本md5分别为
04b75469060b9a2aa986af3c1533c058和4ff73477a06a3412145d1a7e6d9ce4c9),其中04b75469060b9a2aa986af3c1533c058样本静态编译没有符号。

04b75469060b9a2aa986af3c1533c058 无符号 4ff73477a06a3412145d1a7e6d9ce4c9 有符号

使用Finger对无符号的04b75469060b9a2aa986af3c1533c058进行函数符号识别,Finger成功恢复出了程序的主体逻辑:

将Finger的识别结果与有符号的4ff73477a06a3412145d1a7e6d9ce4c9进行对比,可以看到Finger的函数符号识别准确率较高。利用Finger的函数符号识别能力,可以帮助安全研究人员快速地对未知样本进行分类打标。

示例程序3

下图是一个sshd基础软件污染样本(md5为eab14398a66bb088d0cfab4f7737c58d),使用Finger识别函数符号后,安全研究人员可以快速筛选出用户逻辑代码,从而定位恶意代码。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 评论列表

发表评论: