动态数据解析器(DDR)——IDA插件

动态数据解析器(DDR)——IDA插件

执行摘要

IDA中的静态逆向工程通常出问题。某些数值是运行时计算的,这就很难理解某个基本组块正在做什么。但如果你试着通过调试一个恶意软件来执行动态分析,通常会被恶意软件检测到,其表现也会出现偏差。思科Talos采用动态数据解析器(DDR)作为IDA的新插件,旨在让对恶意软件逆向工程更为简单。

特征

代码流跟踪

(用20种不同颜色显示基本组块的执行次数):

动态数据解析器(DDR)——IDA插件

可搜索到的API调用日志记录:

(包括出现的所有特定指令,如:调用、jxx等,触摸API地址)

动态数据解析器(DDR)——IDA插件

可搜索到的字符串记录:

动态数据解析器(DDR)——IDA插件

解析动态值和自动评论:

动态数据解析器(DDR)——IDA插件

技术细节

架构和使用

DDR具有图5所示的客户端/服务器架构.DDR IDA插件和DDR服务器为Python脚本。DynamoRIO客户端是用C语言编写的DLL文件,由DynamoRIO工具drrun.exe来执行。该DLL文件在运行时使用检测技术分析和监测恶意软件样本,前端是IDA插件。通常情况下,所有进程都通过插件进行控制。完成DynamoRIO客户端后端分析后,结果将发送回插件。我们选取JSON作为此数据的格式,以便用户可以轻松地读取和解析第三方Python脚本。

动态数据解析器(DDR)——IDA插件

从理论上讲,您可以在同一台PC上运行插件和服务器;但就恶意软件样本执行而言,强烈建议在单独的计算机上进行此操作。

多数情况下,你可从IDA中的DDR / Trace菜单开始分析,按照下面描述的内容安装插件;但是如果您想在气隙、无Python的系统上执行恶意软件,或在不支持地址空间的插件菜单上分析地址空间,也可手动进行分析。DLL可以在命令行上执行。根据样本的架构,语法为:

<DYNRIO_DIR> \ bin <ARCH> \ drrun.exe -c“<PATH_TO_DLL> \ ddr <ARCH> .dll”-s <START_ADDR> -e <END_ADDR> -c <NUM_INSTR_TO_EXECUTE> -f“<JSON_FILE_TO_LOG_TO>” – <MALWARE-SAMPLE>

示例:

C:\ DYNRIO_DIR \ bin64 \ drrun.exe -c“C:\ ddr \ ddr64.dll”-s 0x140001000 -e 0x140002200 -c 10000 -f“C:\ ddrlog \ sample_log64.json” – – sample64.exe
C:\ DYNRIO_DIR \ bin32 \ drrun.exe -c“C:\ ddr \ ddr32.dll”-s 0x00401000 -e 0x00402000 -c 10000 -f“C:\ ddrlog \ sample_log32.json” – sample32 。

可执行程序分析完成后,需要加载<JSON_FILE_TO_LOG_TO>,如sample_log32.json,通过IDA文件菜单中的File / Load文件/ Load DynRio File进行。

但通常情况下没这个必要。DDR中的所有功能都可通过IDAs反汇编视图中的右键单击上下文菜单进行访问。运行任何DDR功能之前,需要先分析样本或手动加载JSON文件,如上所述。如不想手动操作,DDR提供了多种不同的选项来运行分析,可通过图6中所示的Trace菜单访问。

动态数据解析器(DDR)——IDA插件

完整追踪选项收集的更多是运行时的信息,这些执行需要更多的时间、比光迹(light trace)更耗费更多的内存。light trace仅执行代码覆盖跟踪,换句话说,其记录的是运行时执行的指令及控制流相关指令的一些基本信息,如call,jmp,ret等。这意味着如果想记录尽可能多的指令,通常需要选择light trace,以便对样本正在执行的操作进行概览。例如:为突出尽可能多的基础组块,基于执行次数或基于样本触及的API调用取得概览。可通过“配置/设置记录指令数”菜单将要记录的指令数设置为较高值。

对于普通PC上的轻轨,您可以将数量设置为默认值200.000,适用于完整跟踪。如对样本开始序列感兴趣(例如“为段运行完整跟踪”)或正在分析某个基本组块(例如加密例程),则通常会运行完整跟踪,则需要有关指令及其操作的所有详细信息(例如“运行基本组块完整跟踪”)。分析时间不应超过30秒,否则需要将DDR_plugin.py脚本中的MAX_API_TIMEOUT设置为更高的值。对于较大的迹线,还按上文描述手动进行分析。

记住:所有DDR功能都使用最后一个分析/跟踪运行的JSON文件。例如,如果你刚刚运行了一个tight trace,然后您尝试通过“获取源操作数的值”来解析寄存器值,可能会找不到任何数据(除非它是所提到的控制流指令之一,如调用,jmp等)。使用DDR查看不同跟踪轨迹记录数据所生成的JSON文件可能是个好主意。

跟踪缓存/保存在样本所在的目录中。完整路径也可以在IDA日志窗口中找到。这意味着如果你需要记录在当前未加载的JSON文件中的信息,你可以再次选择正确的跟踪菜单选项,并加载缓存/保存的文件。加载和解析文件通常花费的时间不多,因此你可以快速跳转到不同的分析,而无需重新运行。这也意味着如果您确实要重新运行某个分析,则必须通过“跟踪”菜单删除所有缓存/保存的文件,或者从样本目录中手动删除相应的文件。

安装

该插件是针对Windows x64上的IDA版本7.2构建,也可能适用于7.1。

首先克隆或下载DDR存储库。

安装Python模块要求和DynamoRIO框架。详细信息可在下面的附录中找到。

接下来要根据本地设置在“DDR_server.py”脚本中配置变量。确保本地防火墙不会阻止插件和服务器之间的通信。如果启动DDR_server.py脚本、找不到现有证书文件,它将生成自签名证书/密钥对以及API密钥文件,并将它们写入存储在<CONFDIR>变量中的目录中。 DDR_server.py脚本。您可以使用此证书,也可以将自己的证书/密钥文件放在此目录中。然后你需要复制证书文件(如:“ddr_server.crt”)到分析器机器(IDA / DDR_plugin.py)并将DDR_plugin.py中的CA_CERT变量指向它,还应该根据您的设置设置API密钥和其他变量。

DDR_plugin.py

#主机IP地址ddr_server.py在
WEBSERVER 上运行=“192.168.100.122”

#TCP端口DDRserver.py正在使用
WEBSERVER_PORT =“5000”

#API密钥,请检查ddr_server.py启动消息
#dys由ddr_server生成.py脚本。
DDR_WEBAPI_KEY =“KT5LUFCHHSO12986OPZTWEFS”

#本地目录,用于查找由DDR_server.py脚本生成的证书或手动创建的证书(用于SSL连接)。不要忘记将证书文件复制到此位置。
CA_CERT = r“C:\ Users \ User Name \ Documents \ idaplugin \ ddr_server.crt”

#验证证书与否。将此设置为False是不安全的,您应该只对测试执行此操作。
VERIFY_CERT =

ddr_server.py机器上的True #目录。服务器脚本可以找到要分析的样本的服务器上的本地目录。确保它存在并且您已将样本复制到其中。该插件的未来版本将自动复制该文件。
SERVER_LOCAL_SAMPLE_DIR = r“C:\ Users \ User Name \ Documents \ DDR_samples”

DDR_server.py

#首次启动时用于生成自签名证书的变量
#和本地网络设置
CERT_FILE =“ddr_server.crt”
KEY_FILE =“ddr_server.key”
APIKEY_FILE =“ddr_apikey.txt”
MY_IPADDR =“192.168.100.122”#恶意软件主机IP地址
MY_PORT =“5000”
MY_FQDN =“

#目录,用于保存/加载配置文件到/从例如API密钥文件,证书文件等
.CONFDIR = r“C:\ malware \ tools \ DDR_Talos \ IDAplugin”

#在哪里可以找到x32 / x64 ddrun.exe和相应的DynRIO客户端DDR.dll
CFG_DYNRIO_DRRUN_X32 = r“C:\ tools \ DynamoRIO-Windows-7.0.0-RC1 \ bin32 \ drrun.exe
CFG_DYNRIO_CLIENTDLL_X32 = r”C:\ malware \ tools \ DDR_Talos \ IDAplugin \ ddr32.dll“
CFG_DYNRIO_DRRUN_X64 = r “C:\ tools \ DynamoRIO-Windows-7.0.0-RC1 \ bin64 \ drrun.exe”
CFG_DYNRIO_CLIENTDLL_X64 = r“C:\ malware \ tools \ DDR_Talos \ IDAplugin \ ddr64.dll

注意事项

确保您正在配置的目录存在。如果它们不存在,则alpha版本将不会创建目录。该程序将只显示一条错误消息。此外,您必须首先将计划在IDA中分析的恶意软件样本复制到DDR_plugin.py脚本中SERVER_LOCAL_SAMPLE_DIR变量中配置的目录。这将在下一版本中自动完成。

附录

Python要求

Python27-64

ddr_plugin.py/IDA machine(分析师PC):

请求

(http://docs.python-requests.org)

例如:
C:\ python27-x64 \ Scripts> pip install -U requests

如果你使用了多个Python版本,确保安装的是相同版本的IDA软件包。

ddr_server.py machine(恶意软件主机):

Flask
(http://flask.pocoo.org/)

PyOpenSSL
(https://pyopenssl.org/en/stable/)

例如
pip install -U Flask
pip install -U pyOpenSSL

其他需求

ddr_server.py machine(恶意软件主机):

– DynamoRIO Framework(https://www.dynamorio.org/)

只需使用DynamoRIO主页上的二进制安装程序即可。

经测试的环境:

ddr_plugin.py/IDA(Analyst PC – Windows 10 64bit):

IDA版本7.2.181105 Windows x64

C:\ Python27-x64 \ Scripts \ pip.exe冻结

证书== 2017.7.27.1

chardet == 3.0.4

first -plugin-ida == 0.1.1

idna == 2.6

requests == 2.18.4

requests-kerberos == 0.11.0

urllib3 == 1.22

winkerberos == 0.7.0 yara

== 1.7.7

ddr_server.py machine(恶意软件主机) – Windows 7 64位):

C:\ Python27-x64 \ Scripts \ pip.exe冻结

asn1crypto == 0.24.0
certifi == 2018.11.29
cffi == 1.11.5
chardet == 3.0.4
Click == 7.0
cryptography == 2.4.2
enum34 == 1.1.6

Flask == 1.0.2
idna == 2.7
ipaddress == 1.0.22
itsdangerous == 1.1.0
Jinja2 == 2.10
MarkupSafe == 1.1.0
pycparser == 2.19

pyOpenSSL == 18.0.0
requests == 2.20.1
six == 1.11.0
urllib3 == 1.24.1
Werkzeug == 0.14.1
yara-python == 3.6.3
DynamoRIO安装:

DynamoRIO版本:7.0.0-RC1 

安装目录:C:\ tools \ DynamoRIO-Windows-7.0.0-RC1

原创文章,作者:Gump,如若转载,请注明出处:http://www.mottoin.com/tech/134206.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code