Finger:一款函数符号识别神器-阿里云开发者社区

开发者社区> 云安全专家> 正文

Finger:一款函数符号识别神器

简介: 阿里云·云安全技术实验室正式推出一款二进制函数符号识别引擎--Finger
+关注继续查看

阿里云·云安全技术实验室正式推出一款二进制函数符号识别引擎--Finger,用户可以通过IDA插件和python SDK两种方式,识别二进制程序中的库函数与常见的第三方函数,快速定位恶意代码,提高样本分析效率。

产品背景

应用程序静态编译后,代码体积膨胀了几十倍,然而真正的用户逻辑代码所占比例很低。下图仅是一个简单的测试程序,静态链接的函数数量约为动态链接函数数量的65倍。这在二进制恶意代码检测领域中十分常见,恶意代码与库代码杂糅在一起,极大地增加了安全研究人员的逆向分析难度,分析过程极为耗时。

#include <stdio.h>

int main(){
   printf("hello world\n");
   return 0;
}

1.png

产品介绍

基于阿里云云安全中心在二进制检测能力建设上多年的经验,以及人工智能在软件安全领域中的实践探索,阿里云·云安全技术实验室立足于阿里云平台的大数据分析能力,将专家知识和人工智能技术结合,提出一套二进制函数签名算法,并将其集成于函数符号识别工具Finger中,免费向用户开放。旨在推动二进制恶意代码检测领域的基础能力建设,促进未知样本发现、漏洞挖掘、二进制文件组成成分分析等研究领域的发展。

2.jpg

使用方式

目前,Finger支持IDA插件和python SDK两种使用方式。

方式一:Python SDK

通过pip安装python SDK:

pip install finger_sdk

提示:安装Finger的python的版本要与IDAPython的版本一致。

使用示例如下:

# IDA Python
# coding: utf-8
import idc
import idaapi
import idautils
from finger_sdk import client, ida_func
import platform

def recognize_functions(client):
    for func_ea in idautils.Functions():
        pfn = idaapi.get_func(func_ea)
        func_name = idaapi.get_func_name(func_ea)
        func_feat = ida_func.get_func_feature(pfn.start_ea)
        if func_feat:
            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 = "https://sec-lab.aliyun.com/finger/recognize/"
    headers = {'content-type': 'application/json'}
    timeout = 5
    version = platform.python_version()
    if version.startswith('3'):
        ida_auto.auto_wait()
        my_client = client.Client(url, headers, timeout)
        recognize_functions(my_client)
        ida_pro.qexit(0)
    else:
        Wait()
        my_client = client.Client(url, headers, timeout)
        recognize_functions(my_client)
        Exit(0)

if __name__ == "__main__":
    main()

方式二:IDA插件

在方式一的基础上,再将Finger IDA plugin复制到IDA安装目录的plugins目录中。

Finger IDA插件支持单个函数、选中的多个函数和全部函数上传,用户可以在菜单栏、反汇编窗口和函数窗口进行函数符号识别。

菜单栏-Finger

3.png

反汇编窗口-Finger

4.png

函数窗口-Finger

5.png

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

海量数据支持

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

识别准确率高

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

示例程序1

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

7.png

示例程序2

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

04b75469060b9a2aa986af3c1533c058   无符号
4ff73477a06a3412145d1a7e6d9ce4c9   有符号

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

8.png

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

9.png

示例程序3

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

10.png

团队介绍

阿里云·云安全技术实验室 --- 长期从事病毒检测,立体化防御,漏洞挖掘,安全底层技术研究等,保障海量阿里云业务安全。

欢迎各位安全爱好者加入交流
钉钉群号:34132850,群二维码如下:

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

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
22513 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6324 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
2152 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3950 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
10711 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
1997 0
+关注
云安全专家
阿里云安全
312
文章
1
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载