笔记
动态分析基础,这部分还没涉及到看反汇编进行分析,主要是运行程序,然后通过监控软件检测程序运行的内容
使用沙箱查看运行报告,可以获取一部分信息
首先要在虚拟机上运行恶意代码:
- 如果是DLL,可以通过
rundll32.exe DLLName, ExportFun
来进行执行 - 如果是服务DLL,则需要运行其中导出的安装服务函数,如果没有则需要手动使用
sc
或修改注册表安装服务
然后监控程序运行的各种信息:
- 进程监控工具:Process Monitor,可以监控注册表,文件系统,网络,进程,线程行为,通过设置过滤可以更快找到我们想找的行为信息
- 进程浏览工具:Process Explorer,更厉害的任务管理器,会列出活动的进程,被进程载入的DLL,各种进程属性和整体系统信息
- 该工具提供了验证功能,检测映像文件是不是具有微软签名
- 可以查看文件和进程的字符串,来对比判断进程是否被替换
- 可以启动depends.exe,可以对比进程中的dll和文件中的导入dll的区别来判断是否有被注入dll
- 还可以分析恶意文档,如果文档启动了其他进程,可以通过这个工具监控到
- 注册表快照对比:Regshot,可以通过建立快照,执行程序,再次建立快照进行两次快照的对比,检测注册表修改项
- 流量分析,检测网络行为
- DNS请求查看工具:ApateDNS,查看DNS请求,对指定的ID给出虚假的响应(工具比较老,不知道有没有新的)
- Netcat:不解释
- Wireshark:神器
- 网络服务模拟:INetSim,Linux工具,可在Linux虚拟机里模拟一些网络服务,是专用于恶意代码分析的软件,会伪装的很像正常服务,给出正常返回,现在比较新的工具是fakenet
作业
工具准备:
- 配好INETSIM的Linux虚拟机
- 监控:火绒剑+procexp
- PE:exeinfope + CFF + ResourceHacker + Strings
- 网络:Network Monitor + ncat
Lab 3-1
目标文件:Lab3-1.exe
-
找出带入函数和字符串列表
导入表就一个函数:ExitProcess,很奇怪,可能加壳了,字符串里除了乱码之外,发现了注册表键值,网址,dll名称等内容:
-
这个恶意代码在主机上的感染迹象特征是什么?
打开火绒剑行为监控,打开运行INETSIM程序的Linux虚拟机,配置好DNS,准备好之后,运行这个程序:
从火绒剑里观察程序行为,可以看到,这里恶意代码读取了自身的二进制文件,创建并修改写入了
c:\windows\system32\vmx32to64.exe
这个文件,就是把自己复制过来了然后修改注册表Run键值来设置开机自启:
在procexp里看到,这个程序有互斥量winvmx32,用来防止多次启动
感染迹象就是注册表这个位置会出现VideoDriver,并且c盘那个位置会出现vmx32to64.exe程序
-
这个恶意代码是否存在有用的网络特征吗?如果存在,是什么?
查看inetsim日志,发现该主机向字符串里写的域名发起了DNS查询
-
补充:(看了答案之后发现自己没做到的点)
这里不仅仅是对这个域名发起了DNS请求,在查询DNS之后,会给该地址发送数据,这里我们把inetsim收到的请求都转发给分析虚拟机,然后监听443端口,会发现网络连接行为,网络特征除了DNS解析还有就是这个网络连接。
Lab 3-2
目标文件:Lab3-2.dll
-
你怎样才能让这个恶意代码自行安装?
查壳:无壳
这是个dll文件,没法直接运行,查看导入表:
kernel32里导入了获取目录,动态获取函数地址,创建管道,创建进程,创建线程相关的函数,ADVAPI32.dll里导入了注册表操作和服务操作相关的函数,还加载了windows的网络库,可以推测这个文件有网络行为,并且是个服务程序
查看导出表:
这个dll自带了安装卸载函数,可以通过rundll32.exe来进行安装了
接下来查看下字符串(摘出有用部分):
Y29ubmVjdA== // connect的base64编码 practicalmalwareanalysis.com // 网址信息 serve.html //uri dW5zdXBwb3J0 //unsupport c2xlZXA= //sleep Y21k //cmd cXVpdA== //quit Windows XP 6.11 .exe HTTP/1.1 %s %s 1234567890123456 quit exit getfile cmd.exe /c %SystemRoot%\System32\svchost.exe -k SYSTEM\CurrentControlSet\Services\ //注册表相关内容 CreateService(%s) error %d Intranet Network Awareness (INA+) %SystemRoot%\System32\svchost.exe -k netsvcs OpenSCManager() You specify service name not in Svchost//netsvcs, must be one of following: RegQueryValueEx(Svchost\netsvcs) netsvcs RegOpenKeyEx(%s) KEY_QUERY_VALUE success. RegOpenKeyEx(%s) KEY_QUERY_VALUE error . SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost IPRIP // 服务名称 uninstall success OpenService(%s) error 2 OpenService(%s) error 1 uninstall is starting .?AVtype_info@@
字符串信息表明,这里会有注册表操作,会调用cmd.exe来创建进程
接下来安装dll:
>rundll32.exe Lab03-02.dll,installA
火绒剑监控到的信息:
这里写入注册表:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\IPRIP
了一套键值对,并将这个dll注册成为了服务,在火绒剑里可以看到: -
在安装之后,你如何让这个恶意代码运行起来?
在火绒剑里启动服务即可
-
你怎么能找到这个恶意代码是在哪个进程下运行的?
dll以服务的形式运行,进程里一定会加载这个dll,在procexp里搜索dll即可找到是哪个进程:
-
你可以在procmon工具章设置什么样的过滤器,才能收集这个恶意代码的信息?
设置进程ID来过滤即可:(火绒剑)
-
这个恶意代码在主机上的感染迹象特征是什么?
服务里出现了IPRIP服务,注册表里出现了这一堆东西:
-
这个恶意代码是否存在有用的网络特征码?
恶意代码启动之后会对这个网址发起DNS请求,以及HTTP请求:
Lab 3-3
目标文件:lab03-03.exe
查看导入表发现了资源释放的API,Read/WriteProcessMemory、GetCommandLineA、WriteFile等
-
当你使用Process Explorer监控时,你注意到了什么?
太快了,来不及截图,lab03-03启动后,创建了子进程svchost,然后就退出了,子进程留了下来(svchost.exe作为孤儿进程,必有蹊跷!)
-
你可以找出任何内存修改行为吗?
通过火绒剑监控进程行为,对于lab03-03发现如下内容:它执行了
c:\windows\system32\svchost.exe
,创建了子进程,然后监测到读取子进程的内存,修改内存读写属性,然后跨进程写内存的行为,相当于给把自己换了个壳来运行,svchost变成了傀儡进程(进程伪装): -
这个恶意代码在主机上的感染迹象是什么?
当按下按键的时候,在火绒剑那里会发现新的动作:在同目录下记录日志文件,用于记录按键情况
打开之后可以看到:
在哪个窗口里按了哪些键
-
这个恶意代码的目的时什么?
进程伪装+按键记录器
Lab 3-4
目标文件:lab03-04.exe
-
当你运行这个文件时,会发生什么?
这个程序闪了一下就消失了,连PE文件也消失了!!!
-
是什么原因造成动态分析无法实施?
搜索字符串:
看到了删除命令,和HTTP的字符和网址,这里可能是会有http连接发起,但这里不满足运行条件就会触发自毁,火绒剑检测发现:
-
是否有其他方式来运行这个程序?
通过动态调试可能可以,但目前还没学到,后面学到了再来进一步尝试