20145326蔡馨熠《网络对抗》——恶意代码分析

20145326蔡馨熠《网络对抗》——恶意代码分析

1.实验后回答问题

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

  • 需要监控什么?

    • 系统中各种程序、文件的行为。
    • 还需要注意是否会出现权限更改的行为。
    • 注册表。
    • 是否有可疑进程。
    • 如果有网络连接的情况,需要注意这个过程中的IP地址与端口。
  • 用什么来监控?
    • 最先想到的肯定是使用wireshark抓包了,再进行进一步分析。
    • Sysinternals是一个工具集,其中有许多实用的工具,功能非常丰富强大,比如我们可以用TCPview来查看系统中的TCP连接的进程,还能用sysmon来监视和记录系统活动,并记录到windows的事件日志里。
    • 可以用PE explorer查看PE文件编译的一些基本信息,导入导出表等,还可以看到该文件的编译时间、链接器等基本信息。
    • Dependency Walker是一款专门分析函数依赖的工具软件,我们可以借助它来分析是否有关于注册表的异常行为等。

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

  • 先用像“VirScan”这样的扫描工具来扫描一个大概情况,然后再借助相关工具分析可疑的程序。
  • 使用TCPview查看系统中的使用TCP连接的进程,看是否有异常,结合wireshark抓包分析。
  • 使用Dependency Walker来分析是否有关于注册表的异常行为等。
  • 使用systracer进行快照对比。
  • 使用PEiD查看可疑软件是否加壳。
  • 使用PE explorer或PE Browser professional来反汇编可疑的软件,进行分析。也可以使用WinHex来进行字段分析,看是否有可疑行为。

2.实验总结与体会

  • 这段时间真的是学到不少东西,从最开始做一个基本的后门程序,到逐步实现免杀,再到现在的恶意代码分析。真的感觉很爽!很有成就感!老师最开始主要讲的是如何攻击靶机,男孩子当然比较感兴趣,哈哈哈,现在又教我们如何进行恶意代码的分析,我最开始觉得没意思,觉得很无聊,但是仔细一想,还是很有必要掌握这块知识的。你们想想,我们不能保证不受到来自外界的攻击吧,而且在日常生活中,我们都是以“防”为主,不会说是主动去“攻击”别人吧,几乎不会,概率太小了。所以要学会基本的恶意代码分析,保护自己主机的安全。而且,我们换个角度看,你都知道一般的防范措施了,那某一天你如果要攻击别人,是不是更得心应手,成功率更高啊。哈哈哈!!恶意代码的免杀和恶意代码的分析可以说是相辅相成的。
  • 在大多数情况下进行恶意代码分析的时候,我们只有恶意代码的可执行文件本身,而这些文件本身不具有可读性。为了理解这些文件背后的含义,我们需要使用各种工具和分析的技巧。
  • 恶意代码分析有两类基本方法:
    • 静态分析:是一种在没有运行恶意代码时对其进行分析的技术,可以结合相关工具直接的观察。
    • 动态分析:相比较静态分析而言,需要运行恶意代码,通过其产生的动态行为与数据进行分析,从而确定其具体行为,也需要结合相关工具。

3.实践过程记录

恶意代码的静态分析

VirScan

  • 我先用VirScan扫描一下我上次实验用到的后门程序。

  • 点一下“文件行为分析”,我们可以详细地察看这个程序是否有敏感行为,根据扫描结果得知,该文件有网络连接的行为,自行删除注册表键值的行为。

  • 利用相关软件,协助分析。《计算机病毒》课程的庞岩梅老师之前给我们讲过相关知识,也介绍过一些软件,这里可以活学活用。毕竟学科之间是有联系的啊~

PE explorer

  • 首先是PE explorer这款软件。我们可以用它查看PE文件编译的一些基本信息,导入导出表等,还可以看到该文件的编译时间、链接器等基本信息。在“导入表”中,可以查看该文件调用的dll文件库。

  • WSOCK32.dll和WS2_32.dll,这两个dll文件,是用来创建套接字的,如果这个程序没有网络连接的功能,那么在其动态链接库中就不可能有这两个dll文件。ADVAPI32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与注册表的操控以及事件日志都有关。另外2个dll文件不做过多介绍,属于一般程序在win下都会调用的dll库。

PEiD

  • PEiD是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳。 一般正常的软件是不会加壳的吧,而恶意代码为了伪装自己,其中一种常用方式就是加壳,通过加壳来达到不被杀软察觉的目的。

  • 显示的是“什么都没找到 [调试] ”,我晕,什么情况。点“Set Info”看看。后来发现其实不是这样的,正常的编译肯定会显示编译器的,既然没找到,说明不能识别该编译器,一点进去发现,这个恶意代码加了UPX压缩壳!

Dependency Walker

  • Dependency Walker是一款专门分析函数依赖的工具软件,可以查看PE模块的导入模块,还可以查看PE模块的导入和导出函数。我们从中可以发现,该可执行文件可以对注册表的确进行了删除操作!! 并且确实有网络连接的功能!!!

PE Browser Professional

  • PE Browser Professional可以对恶意代码进行反汇编。使我们更直观的观察恶意代码,我们可以结合Debug日志、各个寄存器的值、进程信息来深入研究。

恶意代码的动态分析

  • 相比较静态分析而言,需要运行恶意代码,通过其产生的动态行为与数据进行分析,从而确定其具体行为,也需要结合相关工具。

SysTracer

  • Sysinternals是一个工具集,其中有许多实用的工具,功能非常丰富强大。
  • 操作步骤:
    • 准备一台kali攻击机,一台Win7靶机,SysTracer2.10分析软件;
    • 打开攻击机进入msfconsle,开始监听;win7下对注册表、文件、应用情况进行快照,保存为Snapshot #1;
    • win7下打开木马程序,回连kali,win7下再次快照,保存为Snapshot #2;
    • kali通过msf发送文件给win7靶机,win7下再次快照,保存为Snapshot #3;
    • kali中对win7靶机进行屏幕截图(也可以是其他操作),win7下再次快照,保存为Snapshot #4。
    • 我们可以通过“compare”操作来比较每次快照文件的区别。

  • 我们先对比一下Snapshot #1和Snapshot #2.可以看到注册表里面出现了新的表项,开放了新的端口。

  • 再对比一下Snapshot #2和Snapshot #3.可以发现注册表有了增减,开放端口也有了变动,恶意代码的踪迹越来越明显了。

  • 最后对比一下Snapshot #3和Snapshot #4.可以发现启动回连时注册表发生变化了,截屏时注册表也发生了一些变化。

使用WireShark抓包分析

  • 我对回连过程进行了WireShark抓包,可以看到靶机与攻击机三次握手建立连接,含有大量的TCP连接数据包。

  • 抓包结果中绝大部分数据包是主机与靶机之间的TCP通信包,还有一些是DNS包和ARP包。

  • 还可以看到传输截屏数据的数据包,就是这些长度较大的PUSH ACK包。厉害吧~~~!

TCPview

  • 使用TCPview可以查看系统中的TCP连接的进程。

安装并使用Sysmon

  • 首先有个问题,那就是安装sysmon工具的时候需要管理员权限,所以在安装前,我们需要使用管理员权限来打开cmd.exe,打开方法就是右键cmd程序在菜单中选择管理员权限。安装的时候不能盲目参考老师给的教程,比如版本号应该改为3.10!而不是3.20!!!
  • 快速安装

  • 配置xml文件,并使用sysmon -c查看配置;

  • 然后我们可以在“Applications and Services Logs/Microsoft/Windows/Sysmon/Operational”下找到事件日志,从而进行分析。

设置任务计划

  • 首先我们进入计算机-管理-任务计划,创建一个任务计划,命名为netstat5326。触发器我们选择每天每隔5分钟执行一次。

  • 我在F盘下创建了一个文件夹:5326cxy,在这个文件夹下写一个脚本。也就是说在5326cxy文件夹下创建一个netstat5326.txt。随后将后缀改为“.bat”。

  • 看任务计划中的操作选项栏,启动程序设为我们的netstat5326.bat,参数为>>f:\5326cxy\netstat5326.txt,这样我们的网络记录信息netstat5326.txt就会保存在C盘5326cxy文件夹下。

  • 这个时候就创建完成了,设置管理员权限并运行这个任务。

时间: 2024-08-02 02:49:12

20145326蔡馨熠《网络对抗》——恶意代码分析的相关文章

20145326蔡馨熠《信息安全系统设计》第2周学习总结

20145326蔡馨熠<信息安全系统设计>第2周学习总结 教材学习内容总结 一.计算机系统与链接 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件. 文件是字节序列 Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”. 源文件到目

20145221高其&amp;20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计

20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux 环境下串行程序设计的基本方法. 掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用.学习使用多线程来完成串口的收发处理. 熟悉linux开发环境,学会基于S3C2410的linux开发环境的配置和使用.使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的

20145326蔡馨熠 实验三 &quot;敏捷开发与XP实践&quot;

20145326蔡馨熠 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 一.git上传代码 首先我通过git上传一个名为“shiyansan”的代码. 设置权限: 然后我的partner从网上把这个文档下载到他的电脑中. 然后再修改,再上传: 我的partner:-  [20145211黄志远开源托管代码](https://git.oschina.net/nostalgia_) 二.敏捷开发与XP 软件工程是把

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20145326蔡馨熠《信息安全系统设计基础》第11周学习总结

20145326蔡馨熠<信息安全系统设计基础>第11周学习总结 教材内容总结 异常控制流(ECF)发生在计算机系统的各个层次,是计算机系统中提供并发的基本机制.在硬件层,异常是由处理器中的事件触发的控制流中的突变.控制流传递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流. 有四种不同类型的异常:中断.故障.终止和陷阱.当一个外部旧设备,例如定时器芯片或者一个磁盘控制器,设置了处理器芯片上的中断引脚时(对于任意指令)中断会异步地发生控制返回到故障指令后面的那条指令. 一

20145326蔡馨熠《信息安全系统设计基础》第12周学习总结

20145326蔡馨熠<信息安全系统设计基础>第12周学习总结 教材学习内容总结 第九周学习内容总结 第十周学习内容总结 第十一周学习内容总结 视频学习与实践 指针与声明 C语言中变量的声明包括两个部分: 类型 声明符 对于简单类型,声明并不会对代码产生多大的阅读障碍,而对于复杂类型的识别,可以采用右左右左法进行判断. 指针数组.数组指针.指针函数.函数指针的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的

20145326蔡馨熤《计算机病毒》——代码的动静态分析结合

20145326蔡馨熤<计算机病毒>--代码的动静态分析结合 尝试使用各种动静态工具,对代码9-3.exe进行分析,回答如下问题: 该程序导入了哪些DLL? 先打开PEiD工具查看样例代码.这里发现了4个dll被调用. 另外还有一些dll文件呢,它是在程序运行的时候加载的.我们打开IDA Pro来载入程序进行分析.一般来说,在程序的运行中静态加载的话,会用到LoadLibrary这个函数.我们找找看. 在imports中找到后,双击,然后选中地址交叉引用.type对应的是p的话,说明是函数调用

Buffer lab——20145326蔡馨熠

Buffer lab 缓冲区溢出攻击的原理 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写.从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于

20145326蔡馨熠《信息安全系统设计》第五周学习总结

教材学习内容总结 书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 1.使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令) 在栈帧之间切换 frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息. up n 向上回退n个栈帧(更外层),n默认为1. down n 向下前进n个栈帧(更内层),n默认为1. 打印栈帧信息(不移动栈帧) frame 打印当前栈帧的简要信息. i