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来进行二进制代码分析相对来说速度会比较慢,因此具体的分析所需时间得根据设备性能来定。
“server.py”脚本的功能就是允许工具脚本与Ghidra和主机系统交互,我们可以根据自己的需求自定义扩展和开发脚本代码,并将其加载或保存到脚本文件夹中,以使用已知的函数来与Ghidra进行交互。
首先,用户必须在自己的脚本中导入xmlrpc,并按照下列方式调用函数:
proxy.send_data
send_data():允许用户向服务器发送数据,数据为字典;
recv_data():允许用户从服务器接收数据,数据为字典;
request_GPT():允许用户通过ChatGPT API发送字符串数据;
脚本存储在/modules/scripts目录中,我们可以直接将自己的脚本拷贝到此处。在ghidra_pilot.py文件中,我们可以找到下列负责运行Headless Ghidra脚本的函数代码:
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