• 20145314郑凯杰《网络对抗技术》实验4 恶意代码分析


    20145314郑凯杰《网络对抗技术》实验4 恶意代码分析

    1.0 恶意代码

    • 恶意代码

    Unwanted Code是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件。

    • 恶意代码分析

    对恶意代码进行分析,若我们有其源代码,那进行分析便比较容易。但是在大部分的情况下,我们只有可执行程序。于是就需要从多个不同的角度,使用不同的方法进行判断。

    • 静态分析基础技术

      1. 计算恶意程序MD5值,然后检索该MD5值来获取信息并作为其特征码使用(可使用md5deep winmd5)
      2. 通过检索恶意代码字符串获得相应的功能调用解释等,查看是否有被加壳处理(字符串检索:Strings 外壳检测:PEiD)
      3. PE文件头中包含代码信息,恶意代应用程序类型等重要信息。可通过工具检索其动态链接库(dll),然后再MSDN文档库中查找其功能。(Dependency Walker、 PEview、 PEBrowse Professional、PE Explorer)
      4. 查看可疑代码的的资源节来获得一部分可见的特征(Resource Hacker)
    • 动态分析基础技术

      1. 配置“沙箱”环境,模拟真实执行结果(各种沙箱)
      2. Dll类型文件的启动运行(PEview、PE Exporer)
      3. 用一些系统监视类软件捕获运行中恶意程序的系统调用(process monitor、process explorer)

    2.0 恶意代码分析

    分析对象是实验二中出现的zkj5314.exe,其功能是创建一个目标为我们kali虚拟机的连接。我们从静态分析,动态分析两方面对该后门进行分析:

    2.1 静态分析

    从四个方面:

    1. 特征库对比:Virscan
    2. 外壳检测:PEiD
    3. 查看PE文件头中包含代码信息:PE explorer
    4. 查看其依赖性,导入与导出模块:Dependency Walker
    • ①特征库的比对(Virscan)

    将zkj5314文件提交至virscan的官网(如前两个实验)。结果毋庸置疑的就是一堆杀软报毒,点击查看详细分析。

    病毒文件原形毕露:

    恶意代码分析:

    1. 加壳
    1. 创建连接
    1. 修改注册表
    1. 检测自身的调试情况(调用函数自复制,蠕虫的话就会)
    

    用特征码分析这个效果还是很显著的。但是网站给出的说法毕竟比较含糊,要真正地去确认它,就还得再加分析考虑。

    • ②外壳检测(PEiD)

    查壳,就是查这个可执行文件PE的外壳。用到的软件PEiD已经是一款具有强大查壳功能的软件,百度百科上的描述是:几乎可以查出所有类型的壳。

    我们运行软件,来查看zkj5314是否加壳过。

    结果为:没找到,为什么明明在virscan上出现过的查到了壳,在PEiD中又找不出来呢?

    接着,我们可以查看额外信息:

    恶意代码分析:

    在其中,可以发现,在查看其有无被压缩过的痕迹时,提示是——可能有加壳。而在快速检查中,直接判定我们的程序为已加壳。
    

    PEiD这个软件可能是由于版本问题(操作界面就十分古老),所以没查出壳来。但是仔细查看记录后可以看出其还是有加壳痕迹的,很可疑。

    • ③查看PE文件头中包含代码信息(PE explorer)

    运行PE explorer软件,查看其基本信息(编译时间,文件头入点啥的)

    从上图中可以看到该可执行文件的一些基本信息,都是一些没什么用的。其中的一项"magic",刚开始我以为是加壳的手段,结果百度了"PE32"才发现,只是PE文件的一种开头格式而已。

    恶意代码分析:查看其引用的dll库

    • msvcrt.dll:此为微软编译软件的函数库。正常

    • kernel.dll:它控制着系统的内存管理、数据的输入输出操作和中断处理。虽然涉及内核,但是运行程序所必须的,也算正常。

    • advapi32.dll:注册表的操控以及事件日志有关。捕获元凶,对注册表进行操作的就是它

    • WSOCK32.dll和WS2_32.dll:用来创建套接字的dll库。捕获元凶,非法进行后门操作的元凶。

    • ④查看其依赖性,导入与导出模块(Dependency Walker)

    Dependency Walker用以查看PE模块的导入模块,查看PE模块的导入和导出函数,动态剖析PE模块的模块依赖性。

    打开文件后就可以看到这个软件是用来对dll进行分析的。(比上面全)

    按照上面的知识,对其进行分析:

    ·补充一点,病毒常调用的五大系统函数:

    - RegSetvalue(修改注册表键值)
    - FindFirstFileFindNextFile(遍历文件夹)
    - mciSendString(应该是发送数据段,实现一定攻击)
    - TerminateProcess(杀死进程)
    - GetModuleFileName/CopyFile(实现自复制)
    

    如果函数有在其正常功能之外地调用这些函数,说明就很可能有问题了。

    • advapi32.dll:

    进行注册表删除。

    • Wsock32.dll:

    获取当前进程已进行的完整路径(虽然该功能对这个dll函数来说并不是主要功能,但还是存在可以行为)可以通过调用这个来实现自复制。

    通过函数引用可疑的模块(函数功能与其引用这个函数不符),就可以判断这个文件,是否为可疑代码,恶意代码。

    2.2 动态分析

    • ①对后门软件的运行过程分析(SysTracer v2.6)

    模拟仿真,这个实验将在虚拟机XP下进行。

    在XP虚拟机下运行SysTracer 版本2.6

    由于要进行网络攻击,需要攻击机的配合,所以也打开了Kali虚拟机。

    接下来只需要截获XP系统上各种资源和连接的方向,就可以得出该文件进行的动态行为。

    在Kali上打开监听,此时第一次记录下状态
    用XP回连,记录下第二次状态
    使用截屏功能,记录第三次状态
    使用提权功能,记录第四次状态

    将第一次与第四次的状态直接进行对比(收尾对比包含了中间的所有)

    恶意代码分析:

    如上图所示,我们可以看到注册表很明显的发生了改变。
    这说明了在虚拟环境下,恶意程序已经开始动手了!
    

    接着查看其他方面的不法行为:

    在加密(Criptograthy)的注册表项被注入了新的“种子”(应该是密钥啥的)。这一步是提权所造成的,创建了新的密钥。

    这就不是啥复杂的了,就是提示本软件未注册,一个警告。

    • ②对流量进行抓包(Wireshark)

    Kali方打开监控,此时wireshark已经出现了巨大的流量提醒

    接着进行回连,对连接进行捕捉,发现存在许多三次握手协议

    对其进行一系列操作,包括提权时,

    提取时,出现了非法提示:

    恶意代码分析:

    wireshark也知道了这个非法连接对我们电脑上有危害,也进行了报警。
    
    • ③对程序进行断点动态调试(PEbrowse Pro)

    PEbrowse Pro是一款专业的动态调试器,比起其它的断点调试软件或者功能(GDB等),这款软件可以直接对可执行文件进行断点调试(动态)。

    如图,PEbrowse开始进行断点调试,运行到第一步,我们点击图中红框中的按钮(运行至下一个断点),一步步对其进行断点调试。

    恶意代码分析:

    调试的根本是对各项寄存器进行状态分析,本质还是采用反汇编的方式进行分析,需要很深的汇编语言功底。对于功底差的,还是可以通过查看它调用的系统函数来判断其是否为恶意代码:
    

    • ④对程序实施监控(sysmon)

    sysmon是一款精巧的软件,可以执行许多牛逼哄哄的功能,例如其中的监控功能,更是可以直接代替wireshark这样的大软件,就是操作上可能有一些不便。

    在win7环境下进行安装,接着用test.xml文件直接进行环境的配置,配置完服务出错,最终也不知道是什么原因。

    在重新修改配置文件之后,我完成了配置:

    接下来让其发挥作用去捕获所有操作,在win7系统中,打开控制面板——系统和安全——事件查看器。

    出现许多系统进程,连接等等大量的信息。

    一条一条查找,发现了很多问题:

    如上图这样的信息算是常态了,用到酷狗,QQ,微信等软件时都会产生这样的信息(包括进程和连接),算比较正常。

    如果像破案一般地去排查系统中的安全问题的话,我开始了接下来两种演绎:

    一、使用免杀后门,查看sysmon记录

    可以看到,由于这个操作已经免杀了,所以sysmon也没有报警告。

    我就换了一次,用实验2中的没免杀的后门再试一次,结果sysmon还是没报警告,连提示都没,估计是这个太低级了。

    二、对360进行排查,看看这货到底有没有欺骗我

    我怀疑360有欺骗我的嫌疑,所以直接关了他

    然后360给我说,是否真的要关闭所有防护,

    选是,然后在sysmon里蹲它

    果然给我抓到了,关了360的情况下,360tray的进程仍然在运行。百度一下,说这个进程是用来帮助维护我电脑安全的。但是我已经都确定关闭所有防护了,360不听我的话,还背着我搞这些干嘛呢,这个进程是不是真的防护进程,我又怎么知道???细思恐极

    就像出轨只有0次和100次一样,360能欺骗我做一件事,就能瞒着我做100件事,就可以360果然是一家X爹的公司。

    3.0 实验感想

    对于这个实验,进行分析其实上是一件挺枯燥的事情,比起前面两个实现攻击(实现后门和实现免杀)来说,这次的实验是挺无聊的。

    在Dependency Walker中寻找程序调用了哪些重要的函数,再结合其行为进行判断,这样的分析方法实在太蠢太慢。与其将这种软件(只有调用重要函数时可疑)扼杀在摇篮里,还不如在其进行破坏时再制止。

    虽然实验成功了,但是还是觉得这样的分析效果差,效率低,误判率高。

  • 相关阅读:
    关于总线的总结
    我已经理解了并发和并行的区别
    关于CPU的一些基本知识总结
    shell生成指定长度的随机数
    进程、线程、协程、例程、过程的区别是什么?
    Perl输出带颜色行号或普通输出行
    Ruby数组(2):数组方法详细整理
    Linux find常用用法示例
    MariaDB官方手册翻译
    Ruby中to_s和to_str、to_i和to_int、to_a和to_ary、to_h和to_hash的解释说明
  • 原文地址:https://www.cnblogs.com/5314zkj/p/6636468.html
Copyright © 2020-2023  润新知