關于Sekiryu

Sekiryu是一款針對Ghidra Headless模式的綜合性安全工具,該工具旨在簡化Ghidra在以Headless模式下運行時的相關任務執行,并以自動化的形式實現這一任務。該工具提供了一系列可以在Ghidra內部執行的腳本,支持用戶在分析代碼庫的同時執行漏洞檢測、使用ChatGPT進行偽代碼注釋以及使用數據可視化的方法聲稱安全報告。除此之外,該工具還允許廣大研究人員根據需求加載和保存自己的腳本,并于腳本的內置API進行交互。

功能介紹

1、Headless模式自動化任務:

2、腳本代碼庫/管理:

3、靈活的輸入選項:

可用腳本

1、基于模式識別實現的漏洞檢測腳本:利用工具的腳本來識別正在分析的代碼庫中是否存在潛在的安全漏洞;

2、SemGrep漏洞搜索腳本:工具支持使用簡單的規則和SemGrep來檢測C/C++偽代碼中的漏洞;

3、自動偽代碼生成腳本:在Ghidra的Headless模式下自動生成偽代碼,此功能有助于理解和記錄代碼邏輯,而無需手動干預;

4、使用ChatGPT進行偽代碼注釋:通過利用ChatGPT為偽代碼片段生成人類可讀的注釋以增強代碼庫的可讀性,有助于記錄和解釋代碼邏輯;

5、報告生成和數據可視化:生成具有數據可視化功能的綜合報告,以有效地總結和呈現分析結果。該工具包提供了數據可視化功能,以幫助我們識別代碼庫中的模式、依賴項和異常;

工具要求

在使用該項目之前,我們還需要提前安裝并配置好下列工具組件:

1、Ghidra

2、Java

3、BinExport(可選)

4、SemGrep(可選)

工具安裝

在安裝好上述工具組件之后,由于該工具基于Python開發,因此我們還需要在本地設備上安裝并配置好Python環境。

接下來,廣大研究人員可以直接使用下列命令將該項目源碼克隆至本地:

git clone https://github.com/20urc3/Sekiryu.git

然后切換到項目目錄中,使用pip工具和項目提供的requirements.txt文件安裝該工具所需的其他依賴組件:

cd Sekiryu

pip install -r requirements.txt

或者直接使用pip工具來安裝:

pip install sekiryu

工具使用

我們可以直接運行下列命令并將要分析的代碼文件作為參數提供給Sekiryu即可:

sekiryu [-F FILE][OPTIONS]

需要注意的是,使用Ghidra來進行二進制代碼分析相對來說速度會比較慢,因此具體的分析所需時間得根據設備性能來定。

API使用

“server.py”腳本的功能就是允許工具腳本與Ghidra和主機系統交互,我們可以根據自己的需求自定義擴展和開發腳本代碼,并將其加載或保存到腳本文件夾中,以使用已知的函數來與Ghidra進行交互。

首先,用戶必須在自己的腳本中導入xmlrpc,并按照下列方式調用函數:

proxy.send_data

函數介紹

send_data():允許用戶向服務器發送數據,數據為字典;
recv_data():允許用戶從服務器接收數據,數據為字典;
request_GPT():允許用戶通過ChatGPT API發送字符串數據;

使用你自己的腳本

腳本存儲在/modules/scripts目錄中,我們可以直接將自己的腳本拷貝到此處。在ghidra_pilot.py文件中,我們可以找到下列負責運行Headless Ghidra腳本的函數代碼:

def exec_headless(file, script):

"""

Execute the headless analysis of ghidra

"""

path = ghidra_path + 'analyzeHeadless'

# Setting variables

tmp_folder = "/tmp/out"

os.mkdir(tmp_folder)

cmd = ' ' + tmp_folder + ' TMP_DIR -import'+ ' '+ file + ' '+ "-postscript "+ script +" -deleteProject"

 

# Running ghidra with specified file and script

try:

p = subprocess.run([str(path + cmd)], shell=True, capture_output=True)

os.rmdir(tmp_folder)

 

except KeyError as e:

print(e)

os.rmdir(tmp_folder)

我們可以創建自己的腳本,然后在ghidra_pilot.py文件中添加一個函數即可:

def yourfunction(file):

try:

# Setting script

script = "modules/scripts/your_script.py"

 

# Start the exec_headless function in a new thread

thread = threading.Thread(target=exec_headless, args=(file, script))

thread.start()

thread.join()

except Exception as e:

print(str(e))

cli.py文件負責與命令行接口交互,允許我們以下列形式添加參數或命令:

analysis_parser.add_argument('[-ShortCMD]', '[--LongCMD]', help="Your Help Message", action="store_true")

工具使用演示

演示視頻:https://bushido-sec.com/wp-content/uploads/2023/06/SekiryuV2RElease-SemGrep.mp4

許可證協議

本項目的開發與發布遵循Apache-2.0開源許可證協議。

項目地址

Sekiryu:https://github.com/20urc3/Sekiryu