目录 —— 恶意代码分析
1 恶意代码分析说明
1.1 实验任务目标
- 是监控你自己系统的运行状态,看有没有可疑的程序在运行。
- 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
- 假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
1.2 实验内容概述
-
系统运行监控(2分)
- 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
- 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
- 实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。
-
恶意软件分析(1.5分)
- 分析该软件在
(1)启动回连
(2)安装到目标机
(3)其他任意操作时(如进程迁移或抓屏) - 该后门软件
(4)读取、添加、删除了哪些注册表项
(5)读取、添加、删除了哪些文件
(6)连接了哪些外部IP,传输了什么数据(抓包分析) - 该实验重点在“分析”,不是“如何使用某软件”,重点放在分析上
- 分析该软件在
1.3 schtasks命令使用
(1)win10命令行cmd中执行help schtasks查看并了解schtasks命令参数
(2)结合本次实验要求选择合适的参数使用该命令
schtasks /create /TN netstat5223 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:
etstatlog.txt"
- TN:Task Name,创建的计划任务名,本例中是netstat5223
- SC:SChedule type,本例中是MINUTE,以分钟来计时
- MO:MOdifier,改进计划类型以允许更好地控制计划重复周期
- TR:Task Run,指定路径和文件名,要运行的指令是 netstat -bn
- bn:b表示显示可执行文件名,n表示以数字来显示IP和端口
2 实验内容
2.1 系统运行监控
2.1.1 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
(1)创建计划任务
- 使用命令
schtasks /create /TN 5223netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c: etstatlog.txt"
命令创建计划任务5223netstat
- 在C盘中创建一个脚本文件
5223netstat.bat
,输入如下内容(若无法创建可以先在桌面上创建,修改后缀名后拖入C盘下)
date /t >> c:
etstatlog.txt
time /t >> c:
etstatlog.txt
netstat -bn >> c:
etstatlog.txt
- 打开任务计划程序(此电脑→右键→管理(G)),可以看到这个任务已经就绪
(2)配置计划任务
- 打开任务计划程序,找到
5223netstat
,双击进入属性编辑界面 - 选项卡
常规
中,勾选使用最高权限运行
选项,目的是防止文件无法自主更新或记录出现权限问题
- 选项卡
条件
中,取消电源
选项,默认是电脑不插电就停止执行,为了防止意外发生干脆直接关了就行
- 选项卡
操作
中,进入编辑
,将程序或脚本修改为刚刚创建的批处理文件,参数部分置空
(3)运行计划任务
- 回到C盘下,以管理员身份运行
5223netstat.bat
脚本文件,会生成之前设定好的输出文件netstatlog.txt
- 运行启动的同时会闪现之前写入
5223netstat.bat
中的三行代码(代表成功启动,此后每隔1分钟都会闪现一次,监控电脑中正在运行的任务并返回输出至netstatlog.txt
)
(4)系统运行监控
- 等待较长时间后停止监控(在任务计划程序中禁用或删除),我等了将近12小时,这期间需要一直联网
- 打开
netstatlog.txt
会看到已经把每一分钟的状况都记录下来了
(5)分析监控结果
- 但在文本文件中这么看太不方便,我们转入excel中查看分析
- 按照网上教程将监控结果导入WPS表格,其中分隔符号全选
- 生成数据透视图,可以看到其中WPS.exe排第一,chrome.exe排第二,第三是一个叫kxescore.exe的程序,没有发现什么奇怪的程序
- 那就分析一下联网最多的WPS.exe在干什么吧(这个最多是因为我一直开着WPS写实验报告。。)WPS.exe是WPS的运行程序,通过查表可以看到它一直在连接
221.194.146.242:80
这个外部网络,但其实端口状态一直是处于CLOSE_WAIT
的,尝试查找了一下这个IP地址,发现是联通的一个河北网上运营厅,估计就是根据我的地址将WPS接在那里罢辽
-
再看看
kxescore.exe
这个程序,百度了一下了解到kxescore.exe是金山毒霸套装中的查杀子系统及文件实时监控服务进程,如果安装了毒霸则系统中会存在此进程,属于正常进程。一查表果然该程序一直连着127.0.0.1:49678
本机地址,金山毒霸自运行查杀。 -
此外还可以看到虚拟机、QQ等在使用的痕迹
2.1.2 安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具。它以系统服务和设备驱动程序的方法安装在系统上,并保持常驻性。sysmon用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。通过收集使用Windows事件集合或SIEM代理生成的事件,然后分析它们,您可以识别恶意或异常活动,并了解入侵者和恶意软件在您的网络上如何操作。
参考资料:使用轻量级工具Sysmon监视你的系统
(1)选择监控目标
可选择的事件过滤器有: ProcessCreate进程创建,FileCreateTime进程创建时间,NetworkConnect网络链接,ProcessTermina进程结束,DriverLoad驱动加载,ImageLoad镜像加载,CreateRePromoteThread远程线程创建,RawAccessRead驱动器读取,ProcessAccess进程访问,FileCreate文件创建,RegistryEvent注册表事件,FileCreateStre文件流创建
-
选择了其中几个选项:ProcessCreate进程创建,FileCreateTime进程创建时间,NetworkConnect网络链接,CreateRemoteThread远程线程创建
-
过滤器事件的选项:
ProcessCreate
UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine
FileCreateTime
UtcTime, ProcessGuid, ProcessId, Image, TargetFilename, CreationUtcTime, PreviousCreationUtcTime
NetworkConnect
UtcTime, ProcessGuid, ProcessId, Image, User, Protocol, Initiated, SourceIsIpv6, SourceIp, SourceHostname, SourcePort, SourcePortName, DestinationIsIpv6, DestinationIp, DestinationHostname, DestinationPort, DestinationPortName
CreateRemoteThread
UtcTime, SourceProcessGuid, SourceProcessId, SourceImage, TargetProcessGuid, TargetProcessId, TargetImage, NewThreadId, StartAddress, StartModule, StartFunction
(2)编写配置文件
- 参考老师给的资料,在C盘下创建一个配置文件
sysmon20165223.xml
- 这里为了编写方便我先用txt文件编写,最后更改后缀名即可
<Sysmon schemaversion="3.10">
<!-- Capture all hashes -->
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!-- Log all drivers except if the signature -->
<!-- contains Microsoft or Windows -->
<ProcessCreate onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
</ProcessCreate>
<FileCreateTime onmatch="exclude" >
<Image condition="end with">chrome.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">127.0.0.1</SourceIp>
</NetworkConnect>
<NetworkConnect onmatch="include">
<DestinationPort condition="is">80</DestinationPort>
<DestinationPort condition="is">443</DestinationPort>
</NetworkConnect>
<CreateRemoteThread onmatch="include">
<TargetImage condition="end with">explorer.exe</TargetImage>
<TargetImage condition="end with">svchost.exe</TargetImage>
<TargetImage condition="end with">winlogon.exe</TargetImage>
<SourceImage condition="end with">powershell.exe</SourceImage>
</CreateRemoteThread>
</EventFiltering>
</Sysmon>
- exclude相当于白名单,不用记录。include相当于黑名单。
- Image condition红框部分要根据自己使用的浏览器更改,我使用的是谷歌浏览器所以用的是
chrom.exe
- 网络连接为过滤掉浏览器的网络连接、源IP为127.0.0.1的网络连接和目的端口为137的连接服务,且查看目的端口为80(http)和443(https)的网络连接。137端口的主要作用是在局域网中提供计算机的名字或 IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。127.0.0.1表示本机 IP。
- 远程线程创建记录了目标为explorer.exe、svchost.exe、winlogon.exe和powershell.exe 的远程线程。
- explorer.exe是Windows程序管理器或者文件资源管理器
- svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。
- winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出。
- powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。
- 将配置文件
sysmon20165223.xml
放在C盘下
(3)启动Sysmon
- 下载Sysmon并解压:Sysmon v9.0
- 命令行输入
Sysmon.exe -i C:sysmonc20165223.xml
,指定路径为刚刚的配置文件,结果出错了
- 发现没有使用管理员身份运行cmd,所以重来一次,结果还是出现一样的错误emmm
- 尝试使用一键安装:
sysmon -accepteula –i -n
,反倒成功启动了
- 打开“任务管理器”可以查找到已经正在运行的“Sysmon.exe”
(4)Sysmon日志
- 同样“计算机→右键→管理(G)”进入“事件查看器”
- “应用程序和服务日志→Microsoft→Windows→Sysmon→Operational”查看日志
- 可以看到按照配置文件的要求记录的新事件,以及事件ID、任务类别、详细信息等
(5)使用Sysmon分析后门程序
>>>>> 回连主机
- 在kali-linux中使用实验三生成的后门程序,通过meterpreter回连主机
- 在事件查看器中可以看到连接的详细信息
- 详细日志,包括端口号、源IP、目的IP等
>>>>> 控制shell
- kali中输入shell控制主机
- 事件查看器中可以看到运行了“C:WINDOWSsystem32cmd.exe”,说明控制权已被夺取
>>>>> 执行操作
- 在kali里执行“record_mic”、“screenshot”等操作,可以发现sysmon也能监控到音频图像设备的开启
>>>>> 其他日志
- 再翻看其他日志的时候也看到了一些不认识的进程,比如这个“kxescore.exe”
- “kxescore.exe”是金山毒霸的查杀子系统及文件实时监控服务进程,只要安装了毒霸则系统中就会存在此进程
- 那其实金山毒霸一直在工作着(之前也没有关杀软),我前面植入的后门也没有查出来呀x
2.2 恶意软件分析
分析该软件在:启动回连;安装到目标机;其他任意操作时(如进程迁移或抓屏),该后门软件:读取、添加、删除了哪些注册表项;读取、添加、删除了哪些文件;连接了哪些外部IP,传输了什么数据(抓包分析)
法一:静态分析
- 文件扫描(VirusTotal、VirScan工具等)
- 文件格式识别(peid、file、FileAnalyzer工具等)
- 字符串提取(Strings工具等)
- 反汇编(GDB、IDAPro、VC工具等)
- 反编译(REC、DCC、JAD工具等)
- 逻辑结构分析(Ollydbg、IDAPro工具等)
- 加壳脱壳(UPX、VMUnPacker工具等)
(1)virscan分析和VirusTotal分析
-
分析恶意软件后门程序“exp4_backdoor_5223.exe”
-
virscan(11/49)查杀概率0.22
- VirusTotal(26/72)查杀概率0.36
- 查看详情:可以看到这个恶意代码的SHA-1摘要值、MD5摘要值、文件类型、文件大小等等,还有TRiD(读取文件头,根据特征码进行文件类型匹配)文件类型识别的结果,它甚至可以查出这个恶意代码的编码方式,我是用VC++进行编译的233333
(2)PEiD分析
- PEiD是检查加壳的恶意代码,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名
- 因为病毒分析技术课上已经安装过PEiD了,所以我直接使用,来检查一下实验三中生成的一个加壳程序
- 先检查一下啥壳都没加的:“exp4_backdoor_5223.exe”,没查到
- 再看看加了压缩壳的:“5223_tcp_upxed.exe”,查到了
- 最后看看加了压缩壳再加密壳的:“5223_tcp_upxed_Hyperion.exe”,没找到
- 为什么查不到加密壳的呢?
其实可以看到查得出来压缩过了(压缩壳),可能PEiD加密壳就是查不出来(?)
(3)Ollydbg逻辑结构分析
(4)PE Explorer分析
PE Explorer是功能超强的可视化Delphi、C++、VB程序解析器,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等;还可以快速对W32DASM软件反编译,编辑PEditor 软件的PE文件头,可以更容易的分析源代码,修复损坏了的资源,可以处理 PE 格式的文件有:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR 等 32 位可执行程序。
- 我主要使用PE Explorer分析恶意代码所链接到的dll库
依赖扫描仪显示所有选定的PE文件依赖于外部DLL列表,它的依赖和反复扫描这些文件中的每一个。
- 先打开工具导入“5223_tcp_upxed.exe”程序
- 在“view→import”可以查看引入的dll库,分析:
- KERNEL32.dll:是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
- msvcrt.dll:是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft Visual C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。
- 确实可以分析出这个压缩壳恶意代码是通过gcc编译的(VC编码)
- 我又将实验三生成的其他几个恶意代码都放进去查了一下,发现所有后门程序都会引用KERNEL32.dll这个库,估计是后门程序必须有的链接库吧,可以当一个特征来看(?)
法二:动态分析
- 快照比对(SysTracer、Filesnap、Regsnap工具等)
- 抓包分析(WireShark工具等)
- 行为监控(Filemon、Regmon、ProcessExplorer工具等)
- 沙盒(NormanSandbox、CWSandbox工具等)
- 动态跟踪调试(Ollydbg、IDAPro工具等)
(1)Threatbook沙盒检测
- 沙盒检测结果(6/25)查杀概率为0.24
- 行为检测中能看出哪里有异常
- 基本信息中也像静态分析工具一样能看到MD5摘要值、SHA-1摘要值等信息
- 检测出来的结果比静态分析要多很多,拉到最下面看到我源IP(kali)已经进入白名单了
(2)快照比对SysTracer分析
-
下载:Systracer
-
安装:agree→选第二个→端口改为5223→安装完成
- “take snapshot”→“start”
- 等待一段时间后获得快照
-
另外,由于本机文件多,最好使用两台虚拟机来完成抓快照的步骤,不然要等很~~~久
-
快照比对时刻:
- 回连前:记为Snapshot #1
- 回连后:记为Snapshot #2
- 查看文件操作 screenshot 后:记为Snapshot #3
- 录音操作 record_mic 后:记为Snapshot #4
-
按住“Ctrl”点击快照 #1 和 #2 进行比较,点击“compare”将快照之间进行比较,在“Registry”中可以看到注册表的变化(蓝色部分为有变化)
-
另外可以选择“Only Differences”查看两次快照不同之处
- 比较快照 #1 和 #2 ,可以看到回连前后的变化
注册表变化
端口、源IP、目的IP、使用协议
键值、文件、目录激增
dll库变化,有增有减
- 比较快照 #2 和 #3 ,可以看到kali截屏操作修改了注册表,键值也变化了很多
- 比较 #1 和 #3
- 比较快照 #2 和 #4 ,可以看到kali录制音频的操作带来的变化
- 比较 #1 和 #4
(3)WireShark抓包分析
- 回连前打开WireShark,选择本地连接WLAN,开始抓包
- 回连后关闭抓包,分析抓到的包
- 输入过滤条件:
ip.addr == 10.1.1.189
,看到kali与win10连接的过程中产生了大量TCP包
- 找出了三次握手
- 查看详细内容,看到端口、源IP、目的IP、通信协议等等
3 实验遇到的问题及解决方法
netstatlog.txt记录失败问题
- 错误:监控的记录信息没有输出到指定文件里
- 原因:一开始在创建脚本文件时没有回车分成三行,直接写在同一行里了
- 改正后:成功
4 实验知识问答
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
- 使用schtasks指令计划任务,指定每隔一定时间记录主机的联网记录或者是端口开放、注册表信息等,还可以使用excel建成数据图分析监测到的结果
- 使用sysmon工具,在配置文件中设定想要监测的内容,启动后可以在事件查看器里查看相关日志文件
- 通过一些工具,例如抓包工具(WireShark)等抓包,分析抓到的内容
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 通过virscan、virustotal(网页版)等集成杀软工具扫描特定进程,得到扫描结果
- 通过Threatbook沙盒工具(网页版)可以分析特定进程,得到扫描结果(比virscan、virustotal扫描结果详细)
- 通过Systracer在不同时间快照,分析几次快照直接注册表、文件、运行进程等的差异
5 实验收获与感想
- 本次实验其实没有什么难度,主要是学会了使用Sysmon来监控电脑行为、把命令行下的结果记录到文件中、利用.bat文件显示时间、利用excel分析数据、分析日志中的详细信息以及学会利用多种工具对恶意代码进行进一步分析 etc.
- 经过本次实验,让我更了解电脑,能知道它在干什么,除了抓包以外又学会了一些保护电脑的方法~