• 20155312 张竞予 Exp4 恶意代码分析


    Exp4 恶意代码分析

    目录


    基础问题回答

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

    我想了解的大概有

    • 修改了哪些注册表
    • 创建了哪些进程
    • 占用了哪些端口
    • 修改、查看了哪些文件
    • 连接了哪些网络

    监控方法:

    • 可以定时让主机执行netstat然后分析,发现网络连接异常
    • 可以利用Sysmon,编写配置文件,记录与自己关心的事件有关的系统日志

    (2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。

    • 可以利用Wireshark等网络工具查看是否存在可疑连接
    • 可以利用工具Systracer拍摄快照,比对前后区别,分析改变的注册表及文件等信息。

    返回目录


    实践过程记录

    一、系统运行监控

    (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里。运行一段时间并分析该文件,综述一下分析结果。目标就是找出所有连网的程序,连了哪里,大约干了什么(不抓包的情况下只能猜),你觉得它这么干合适不。如果想进一步分析的,可以有针对性的抓包。

    第一步:在windows命令行下输入命令:schtasks /create /TN 20155312netstat /sc MINUTE /MO 1 /TR "cmd /c netstat -bn > c: etstatlog.txt"

    【注】:通过阅读卢肖明学长的博客,我发现其实不用像后续操作这样复杂,其实只需要「编辑netstatlog.bat」->执行指令schtasks /create /TN 20155312netstat /sc MINUTE /MO 1 /TR "c: etstatlog.bat"两步即可创建一个每隔两分钟记录计算机联网情况的任务。但这里还是详细的记录了我使用学姐的方法探索的过程,如果大家想省事,不用像我这么麻烦~

    • TN是TaskName的缩写,我们创建的计划任务名是20155312netstat;
    • sc表示计时方式,我们以分钟计时填MINUTE;
    • TR=Task Run,要运行的指令是 netstat
      -bn,b表示显示可执行文件名,n表示以数字来显示IP和端口;
    • c: etstatlog.txt类似于Linux中的重定向,输出将存放在C盘下的netstatlog.txt文件中(自动生成)。

    创建成功结果如下:

    此命令完成后,每1分钟就会监测哪些程序在使用网络,并把结果记录在netstatlog.txt文档里,为了显示日期和时间,我们通过bat批处理文件来实现。

    第二步:在C盘要目录下建一个文件c: etstatlog.bat

    • 直接在C盘下是没法创建文件的,所以为了解决这个问题我试了几种方法:
      • 在命令行下输入指令type nul>netstatlog.bat,结果提示拒绝访问。
      • 在前面加个sudo结果还是提示拒绝访问。
    • 最终解决的方法是在桌面上创建一个netstatlog.txt文件,编辑文件内容如下:
    date /t >> c:
    etstatlog.txt
    time /t >> c:
    etstatlog.txt
    netstat -bn >> c:
    etstatlog.txt
    
    • 保存后修改文件名为“netstatlog.bat”;
    • 粘贴到C盘中,这是需要用管理员权限;

    • 可以右键点击“编辑”用记事本查看bat文件内容。

    第三步:编辑任务操作:

    1.进入任务计划程序:“win+c”选择“设置”->进入“控制面板”->选择“管理工具”->进入“任务计划程序”

    2.找到我们的任务20155312netstat,双击点开

    3.点击下方“操作”->右侧所选项栏中“属性”->属性页面上方的“操作”

    4.双击任务进入“编辑操作”界面

    5.在程序脚本处点击“浏览”->选择刚才创建的“netstat.bat”,“参数可选项”为空,

    6.点击“确定”完成修改,详细信息处如下图:

    7.查看netstat.txt文件,已经有了时间的记录,至此完成了任务的创建:

    第四步:等待一直两天;

    【注】:这里需要一直保持开机联网状态,才能持续监控哦~天真的我甚至还关了机在那傻等……

    此外,如果发现netstatlog.txt没有每分钟更新一次,可能是因为设置时默认选择了“只有计算机使用交流电源时才启用此任务”,所以一旦我们不给电脑充电,任务就没法运行。解决方法就是在netstat任务属性的设置中取消选中该选项,如下图所示,然后就可以发现每隔一分钟命令行会闪现一下,其中包含netstatlog.bat中的三行指令,netstatlog.txt自己就随之更新了。

    第五步:用excel分析数据。

    1.导入文本数据:新建excel文件->选择上方“数据”->选择“获取外部数据”->选择“自文本”

    2.选择记录连接情况的文本netstatlog.txt,点击“导入”

    3.进入文件导入向导第一步,选中“分隔符号”,点击“下一步”

    4.进入文件导入向导第二步,选中全部分隔符号,点击“下一步”

    5.进入文件导入向导第三步,列数据格式选择常规,点击“完成”。

    6.鼠标选中左上角第一个单元格,然后点击“确定”

    待分析数据如下:

    第六步:对数据进行统计学分析:

    1.首先查看所有联网程序的联网次数,具体excel操作如下:

    ①首先选中我们要分析的列:

    ②其次点击上方“插入”->“数据透视表”->“数据透视图”

    ③默认选择在一个新工作表中生成

    ④在右侧“选择要添加到报表的字段”中点击对应字段右侧的小箭头->取消选择那些没有意义的字段,然后点击“确定”

    ②将该字段拖动到下方的“轴字段”和“数值”两个区域中

    ⑥然后就可以看到我们的统计图进行分析了:

    2.由上图所示,联网最多的是360浏览器对应的程序“360chrome.exe”,排名第二的是“wpscloud.exe”,它是wps软件云端的一个服务的进程。这里我们还可以找到微信、虚拟机、后门程序zjy_backdoor.exe这些连网的进程。

    没发现什么其他可疑的程序,既然这样我们就分析一下wpscloud.exe连了哪里,大约干了什么吧。

    通过查看表格,我们发现它连接了外部网络119.75.216.20:443,猜测他就是不断的检测系统文件有没有更新,然后往云端传送吧。

    (2)安装配置sysinternals里的sysmon工具,设置合理的配置文件,监控自己主机的重点事可疑行为。

    返回目录

    第一步:确定监控木匾。我感兴趣的是进程创建ProcessCreate、进程创建时间FileCreatTime、网络连接NetworkConnect、远程线程创建CreateRemoteThread。

    第二步:写配置文件。

    1.了解一下配置文件应该怎么写:

    ①进程创建ProcessCreate的过滤事件选项有:

    UtcTime, ProcessGuid, ProcessId, Image, CommandLine, CurrentDirectory, User, LogonGuid, LogonId, TerminalSessionId, IntegrityLevel, Hashes, ParentProcessGuid, ParentProcessId, ParentImage, ParentCommandLine

    ↑ 这里我用到了Image、SourceIp、SourcePort。

    ②进程创建时间FileCreatTime的过滤事件选项有:

    UtcTime, ProcessGuid, ProcessId, Image, TargetFilename, CreationUtcTime, PreviousCreationUtcTime

    ↑ 这里我用到了Image。

    ③网络连接NetworkConnect的过滤事件选项有:

    UtcTime, ProcessGuid, ProcessId, Image, User, Protocol, Initiated, SourceIsIpv6, SourceIp, SourceHostname, SourcePort, SourcePortName, DestinationIsIpv6, DestinationIp, DestinationHostname, DestinationPort, DestinationPortName

    ↑ 这里我用到了Image、SourceIp、SourcePort。

    ④远程线程创建CreateRemoteThread的过滤事件选项有:

    UtcTime, SourceProcessGuid, SourceProcessId, SourceImage, TargetProcessGuid, TargetProcessId, TargetImage, NewThreadId, StartAddress, StartModule, StartFunction

    ↑ 这里我用到了TargetImage、SourceImage。

    其他时间过滤器、过滤事件的选项、onmatch选项可取值、condition可设置的值、配置文件样例,可以参考使用轻量级工具Sysmon监视你的系统

    2.写与自己想要监控的事件想对应的配置文件。我的创建配置文件20155312Sysmoncfig.txt内容如下:(配置文件是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这里要根据自己使用的浏览器更改,例如谷歌浏览器是“chrome.exe”,IE浏览器是“iexplore.exe”,我用的是360浏览器,(不用IE浏览器),进程名是“360chrome.exe”,也是以“chrome.exe”结尾的,所以这里只写“chrome.exe”即可。写在exclude中就是不记录由360浏览器创建的进程。
      • 想知道自己浏览器进程名,可以查看我们上一阶段的“netstatlog.txt”中的记录。
    • 进程创建时间类似,也是不创建浏览器创建进程的时间。
    • 网略连接过滤掉了浏览器的网络连接、源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 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。

    3.把配置文件放在C盘下。

    第三步: 启动sysmon。

    1.下载老师提供的SysinternalsSuite201608压缩包,解压。

    2.在命令提示符(管理员)中进入到该目录下。win8中用管理员身份运行cmd方法:使用“win+x”调出win8开始菜单->选择“命令提示符(管理员)”

    2.安装sysmon:执行命令sysmon.exe -i C:20155312Sysmoncfig.txt,这里注意要把配置文件名换成自己的。

    3.这里弹出的窗口点击agree:

    4.成功安装的结果如下:

    【注】:如果没有以管理员身份运行安装指令,安装后会提示:“You need to launch Sysmon as an Administrator.”如下图。且在第四步中将无法找到Windows下的Sysmon。

    5.如果修改了配置文件,要运行指令:sysmon.exe -c C:20155312Sysmoncfig.txt

    第四步:在事件查看器里查看日志

    1.桌面“这台电脑”图标,右键菜单中,点击打开“管理”。

    2.点击左侧“系统工具”->“事件查看器”

    3.点击“事件查看器”右侧小箭头,选择日志的位置:应用程序和服务日志/Microsoft/Windows/Sysmon/Operational。

    4.利用Sysmon具体分析日志的例子我选择了自己实验二中生成的后门zjy_backdoor.exe进行分析。

    第一步:启动回连、安装到目标主机。

    14:21:28时可找到运行后门文件zjy_backdoor.exe相对应的日志如下:

    与此同时,我还发现了一个名为360toasts.exe的程序,因为我运行后门时有被360拦截,所以它就是360检测到危险时运行的程序。

    后来我添加后门到了信任文件,所以360卫士后续还运行了其他一些可执行文件,例如:360RealPro.exe、360sctblist.exe、360sclog.exe、360tray.exe、。

    第二步:Linux执行了record_mic截获音频、webcam_snap截获照片、keyscan_start记录击键记录、getuid获取当前用户等操作。

    15:16前我完成了record_mic截获音频、webcam_snap截获照片、keyscan_start记录击键记录、getuid获取当前用户等操作,相对应的观察日志文件发现有这样几条记录:

    15:15:16时启动了conhost.exe的事件:

    • conhost.exe是命令行程序的宿主进程。简单的说他是微软出于安全考虑,在windows 7和Windows server 2008中引进的新的控制台应用程序处理机制。这个好像和后门没什么关系。

    15:16:15时有一个启动了SearchFilterHost.exe的事件:

    • SearchFilterHost.exe是桌面搜索引擎的索引程序,其主要作用是建立快速索引文件,让用户能够更好的搜索出电脑中的任意资料。它会在计算机空闲时自动扫描索引位置的文件名、属性信息和给定类别的文件内容,这些索引位置默认包括桌面、收藏夹、开始菜单、系统目录。

    所以没分析出个所以然,这个日志看不出来是否获取了摄像头什么的。

    第三步:既然上述行为暂时分析不出什么,我们试试下面这些操作:dir、shell、getuid、getpid、ps等

    ①运行dir后,首先我们发现了一个非常重要的进程svchost.exe:

    • Svchost.exe是微软视窗操作系统里的一个系统进程,管理通过Dll文件启动服务的其它进程,一些病毒木马伪装成系统dll文件通过Svchost调用它,试图隐藏自己。每个svchost可以同时调用多个dll文件,启动多个服务。

    ②运行shell后,我们可以观察到一个和我们后门所在文件夹有关的C:WindowsSysWOW64cmd.exe程序如下图所示。

    • SysWOW64可以在64bit的Windows中运行32bit的程序,而Windows下的cmd.exe是64bit的,kali回连获取的windows的cmd程序是32位的!

    其他几个命令分析方法类似,一般Kali中执行个指令,Windows日志中就会记录这个C:WindowsSysWOW64cmd.exe。

    返回目录


    二、恶意软件分析

    分析该软件在(1)启动回连,(2)安装到目标机(3)及其他任意操作时(如进程迁移或抓屏,重要是你感兴趣)。该后门软件

    (1)读取、添加、删除了哪些注册表项

    (2)读取、添加、删除了哪些文件

    (3)连接了哪些外部IP,传输了什么数据(抓包分析)

    第一步:下载安装Systracer

    1.首先下载完成后进行安装,步骤为:agree->选第二个(全面点总不会有错吧)

    ->设置监听端口号(我设成了后门生成时利用的端口)

    ->安装完成

    2.在打开后门前先快照一下,点击“take snapshot”,如图,按照以下步骤进行:

    完成后显示Snapshop #1

    3.Kali打开msfconsole,完成相关设置后开始监听,Windows运行后门后,拍摄快照:

    完成后显示Snapshop #2

    4.进行分析:

    ①点击上方“Applications”->左侧“Running Processes”->找到后门进程“zjy_backdoor.exe”->点击“Opened Ports”查看回连地址、远程地址和端口号:

    ②在快照界面“Snapshots”右下角点击“Compare”,比对一下回连前后计算机发生的变化:

    所有蓝色标注的地方,就是前后发生变化的地方。例如,我发现后门启动后,对我的"Local Settings"->"Software"中的文件进行了修改:

    此外还对注册表中hkey_local_machine根键的System子键进行了修改,修改内容如下:

    • 关于HKEY_LOCAL_MACHINE的介绍:
      • 它保存了注册表里的所有与这台计算机有关的配置信息
      • 被修改的部分是Fastcache,即高速缓冲存储器。HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl这个子键包括了win95控制面板中的信息。不要编辑这些信息,因为一些小程序的改变在很多地方,一个丢失的项会使这个系统变的不稳定。

    此外,一些Systracer未授权的地方我们是没法查看的。

    5.接下来我们访问让攻击机获取目标主机音频、摄像头、击键记录,然后生成快照,看看它又做了什么:

    它改了HKEY_CURRENT_USER->software->SogouInput中用户搜狗输入的一部分内容,我觉得好像和击键记录有关系,因为他肯定是获取了我输入的权限。而HKEY_CURRENT_USER的作用如下:

    • HKEY_CURRENT_USER管理系统当前的用户信息。在这个根键中保存了本地计算机中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码。

    对比结果如下:

    此外,还有这些修改我们是没有办法查看的,虽然不知道具体改了什么,但我们还是可以了解攻击机获取主机权限后修改了什么:

    6.此外我们可以通过查看后门软件的“opened handles”(打开的句柄)来对比他们都做了什么:

    回连成功时:

    获取权限进行相关操作后,跟只是回连相比,多了很多内容:

    第二步:用wireshark抓包分析连接了哪些外部IP,传输了什么数据

    1.在回连之前,开始捕获;

    2.回连完成后结束捕获,并把过滤规则设置为 ip.addr == 192.168.217.132,这里我只想查看和虚拟机IP有关的数据包,所以把没用的包过滤掉:

    3.接下来可以看看它连接了哪些外部IP:

    • 219.126.28.25

    4.再往下看看,发现自己的Windows主机IP:

    5.看看都传了啥数据:

    ①第一条是Windows向Kali发出TCP同步请求包SYN:

    ②第二条是Kali给Windows的复位包RST和确认包ACK:

    但是RST标示复位、用来异常的关闭连接。这样看来是Kali现在还不是和主机连接的时机哈哈哈哈,再往下看看。

    ③果然!找到了后面他们两个握手的包:

    这是SYN同步请求包:

    这是SYN+ACK:

    后面Kali还给Windows传了一大堆ACK包,这里省略,有时还伴有PSH+ACK包。(PSH就表示有 DATA数据传输)

    6.Kali获取下摄像头、录个音、获取击键记录并查看,再看看wireshark:

    这回PSH+ACK的包好像多了些,具体的数值看不出个所以然,但一猜肯定就是那些击键记录啥的呗。

    返回目录


    实验总结与体会

    通过本次实验,我学会了如何让计算机周期性执行一个任务,如果把命令行下的结果记录到文件中、如何利用.bat文件显示时间、如何利用excel分析数据、如何利用Sysmon监控自己感兴趣的事件、如何写配置文件、如何分析日志中的大量信息、如何对恶意代码进行进一步分析。

    通过自己动手实践,实现了从攻击者身份到检测、分析者身份的转变,更全面的理解了前两次实验中生成的后门程序到底在做什么,对恶意代码有了更深入的理解。

    返回目录

  • 相关阅读:
    【MySQL】根据JSON字段的内容检索查询数据
    【PHP】跑大批量数据脚本
    【Thinkphp】 CLI模式下接收参数的几种方式
    元素类型 “item” 相关联的 “name” 属性值不能包含 ‘<’ 字符
    python unicode、utf-8、gbk编码与解码展示
    python使用requests通过代理地址发送multipart/form-data报文数据
    python使用requests通过代理地址发送application/x-www-form-urlencoded报文数据
    python使用requests通过代理地址发送application/json报文数据
    python使用requests通过代理地址发送text/xml报文数据
    python使用requests通过代理地址发送text/plain报文数据
  • 原文地址:https://www.cnblogs.com/zjy1997/p/8824717.html
Copyright © 2020-2023  润新知