簡介:阿里云·云安全技術實驗室正式推出一款二進制函數符號識別引擎--Finger
阿里云·云安全技術實驗室正式推出一款二進制函數符號識別引擎--Finger,用戶可以通過A插件和python SDK兩種方式,識別二進制程序中得庫函數與常見得第三方函數,快速定位惡意代碼,提高樣本分析效率。
產品背景應用程序靜態編譯后,代碼體積膨脹了幾十倍,然而真正得用戶邏輯代碼所占比例很低。下圖僅是一個簡單得測試程序,靜態鏈接得函數數量約為動態鏈接函數數量得65倍。這在二進制惡意代碼檢測領域中十分常見,惡意代碼與庫代碼雜糅在一起,極大地增加了安全研究人員得逆向分析難度,分析過程極為耗時。
#include <stdio.h>int main(){ printf("hello world\n"); return 0;}
產品介紹
基于阿里云云安全中心在二進制檢測能力建設上多年得經驗,以及人工智能在軟件安全領域中得實踐探索,阿里云·云安全技術實驗室立足于阿里云平臺得大數據分析能力,將可能知識和人工智能技術結合,提出一套二進制函數簽名算法,并將其集成于函數符號識別工具Finger中,免費向用戶開放。旨在推動二進制惡意代碼檢測領域得基礎能力建設,促進未知樣本發現、漏洞挖掘、二進制文件組成成分分析等研究領域得發展。
使用方式目前,Finger支持A插件和python SDK兩種使用方式。
方式一:Python SDK通過pip安裝python SDK:
pip install finger_sdk
提示:安裝Finger得python得版本要與APython得版本一致。
使用示例如下:
# A Python# coding: utf-8import idcimport idaapiimport idautilsfrom finger_sdk import client, ida_funcimport platformdef 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 = "sec-lab.aliyun/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()
方式二:A插件
在方式一得基礎上,再將Finger A plugin復制到A安裝目錄得plugins目錄中。
Finger A插件支持單個函數、選中得多個函數和全部函數上傳,用戶可以在菜單欄、反匯編窗口和函數窗口進行函數符號識別。
菜單欄-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識別函數符號后,安全研究人員可以快速篩選出用戶邏輯代碼,從而定位惡意代碼。
感謝聲明:感謝內容由阿里云實名注冊用戶自發貢獻,感謝歸原所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲得內容,填寫投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌內容。