热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《网络攻防》实验四:恶意代码分析

《网络攻防》实验四:恶意代码分析小生有感安装360,到底是“伺虎在侧”还是“御虎在侧”?从目前网络主流舆论和周围同学的看法看,

 《网络攻防》实验四:恶意代码分析

小生有感

安装360,到底是“伺虎在侧”还是“御虎在侧”?从目前网络主流舆论和周围同学的看法看,还是前者居多。虽然我没经历过3721支配的恐惧,但这个360的前生,确实被很多人痛骂唾弃过。有人说,现在360就是走3721的老路,从一个方便的好工具,野蛮生长,疯狂无底线,誓要完成像木马的“华丽蜕变”。以上的话,是危言耸听、杞人忧天还是警示恒言,抱歉,我看不清。但不可否认的是,二者同父,长兄既然是流氓,次子的行为举止有一丝流氓的气息似乎也是意料之中。这时候我又冒出一个问题,企业道德和产品能力到底孰重孰轻?我深知,这不是鱼和熊掌之问,毕竟企业道德和产品文化从来都不是站在对立面的,一个优秀的企业,二者应该兼得。但把问题放在360公司上,你该如何评价分析呢?催生我这个问题的导火索源于今晚刘老师在班群里发的一则分享,大意为以色列一家安全公司发现一个叫“双面间谍”的病毒,之所以取这名,是因为它可以把杀毒软件变成地地道道的病毒,在肆虐欧洲各大杀软后,在天朝这片神奇的土地上,遇到一生之敌——360.我第一次看到这个新闻的心情是为国产产品感到自豪,兴奋的我在群里分享时,却遭到同学的不屑“一个本来就是恶意软件的杀软”,不得不说该同学的“冷水”确实浇灭了我的自豪感。我突然意识到,原来360的口碑已经沦落如此不堪了么。奇虎360作为一家研发杀毒软件的公司,在欧洲战场节节败退之际,能抵御“双面间谍”,其产品能力还是有目共睹,然其企业道德文化流氓化,让同学否定它,于情于理,我稍感遗憾。进而有了一个问题“当一个人倚马可待,能力出众,却品行不好”,你该如何评价?且让你思考一会吧,让我们看看古代人的智慧。《除三害》这篇中学文言文,想必大家定不会陌生,毕竟大家都是上过9年义务教育的社会主义接班人啊!村霸周处,在老实淳朴的村民忽悠下,先拳打深林恶虎,后手刃深海蛟龙。改邪归正,一段美谈自不必多说。古人言“勿因人废言”也是告诫当权者不要因为一个人的品行去否定一个人的能力。再回到现实,“因为流氓,所以更懂流氓”放在360智斗双面间谍一事上很适用啊有木有。360可以是一把双刃剑,在面朝胸前,抵御外来的恶意代码(做过免杀的应该知道,360的云主防是最难过的),同时也面朝胸口,我们心里的隐私很有可能窥探,打包带走。因此我们要灵活运用?哦不,再这么写就是高中的辩证议论文的模样了。很可惜,在你选择这把刀之后,使刀的手就不是你了。那通篇下来,我的态度是什么,我只能说,姑且看之,姑且用之。毕竟国人的盲从心理严重,往往“破鼓万人捶,墙倒万人推”,360的黑粉中不少是为了黑而黑,或围观黑凑个热闹。我深信这事是有的,我非洗白,你若不服,我不舌辩,你别纠缠,求同存异,各自欢喜。那写这么多文字有什么现实意义呢?没意义,我手写我心罢了。以前不经意间,看过杜文超同学的一个个签——“你可以不优秀,但一定要善良。”不料,滚瓜烂熟于心。这句话一定程度上也成了我三观的基石,来!在品行与能力的天平上,给品行加一磅。后来在今日头条上受到冲击,在一则新闻报道的评论区,有句评论被最多点赞——“一个有能力的贪官胜过十个没能力的清官”,且慢,乍看有点恍惚,容我消化一下。原来,这才是民声么?百姓办事,比起官员收钱办事,更抵触官员不收钱却乱踢皮球么?写得有点多了,一言以蔽之。品行与能力不是对立的,“你可以不优秀,但一定要善良。”不能成为你不思进取的借口,“一个有能力的贪官胜过十个没能力的清官”不能成为你道德堕落的措词。人生路漫漫,能力在左,道德在右,且行且珍惜!

恶意代码综述

代码,指计算机程序代码,可以被执行完成特定功能。Each coin has two sides!人类发明的所有工具既可造福也可作孽,这完全取决于使用工具的人。
恶意代码,指没有作用却会带来危险的代码。

恶意代码的特征

恶意代码,或恶意软件具有如下共同特征:
(1)恶意的目的
(2)本身是程序
(3)通过执行发生作用

恶意代码的传播手法

恶意代码编写者一般利用三类手段传播恶意代码:软件漏洞、用户本身或这两者的混合。有些恶意代码是自启动的蠕虫和嵌入脚本,本身就是软件,这类恶意代码对人的活动没有要求。一些像特洛伊木马、电子邮件蠕虫等恶意代码,利用受害者的心理操纵他们只想能够不安全的嗲吗;还有一些是哄骗用户关闭保护措施来安装恶意代码。

恶意代码的分类

恶意代码按传播方式可以分成几类:病毒,木马,蠕虫,移动代码。

  1. 病毒一般都具有自我复制的功能,同时,它们还可以把自己的副本分发到其他文件、程序或电脑中去。病毒一般镶嵌在主机的程序中,当被感染文件执行操作的时候(例如:打开一个文件,运行一个程序,点击邮件的附件等),病毒就会自我繁殖。

  2. 特洛伊木马这类恶意代码是根据古希腊神话中的木马来命名的,它从表面上看是正常的程序,但是实际上却隐含着恶意 意图。一些木马程序会通过覆盖系统中已经存在的文件的方式存在于系统之中,同时它能以加载恶意代码动态库的方式携带恶意代码程序,还有一些木马会以一个软 件的身份出现(例如:一个可供下载的游戏,将木马捆绑在软件安装程序上),但它实际上是一个窃取密码的工具。这类应用通常在网络游戏盗号木马上。大多数木 马都可以使木马的控制者登录到被感染电脑上,并拥有绝大部分的管理员级别的控制权限。为了达到这个目的,木马一般都包括一个客户端和一个服务器端。客户端 放在木马控制者的电脑中,服务器端放置在被入侵电脑中,木马控制者通过客户端与被入侵电脑的服务器端建立远程连接。一旦连接建立,木马控制者就可以通过对 被入侵电脑发送指令来传输和修改文件。通常木马具有很强的隐敝性,会采用多种手段隐藏木马。隐藏恶意进程的痕迹,例如使恶意进程不在进程列表中显示出来 等。常见的木马有灰鸽子、彩虹桥、Poison_Ivy、守望者、上兴远控、turkojan等一些木马。

  3. 蠕虫是一种能在没有任何用户动作的情况下自动传染计算机的病毒变形。蠕虫不修改文件,而是常驻在内存里并复制自 己。蠕虫使用操作系统的一部分,这部分对于用户来说是自动且无形的。通常只有在它的无法控制的疯狂复制占用了系统资源使得其他的 任务缓慢甚至停滞的情况下才会发现它们。蠕虫的自我复制不像其他的病毒,它可以自动创建与它的功能完全相同的副本,并在没人干涉的情况下自动运行。蠕虫是 通过系统存在的漏洞和设置的不安全性(例如:设置共享)来进行入侵的。它的自身特性可以使它以极快的速度传输(在几秒中内从地球的一端传送到另一端)。其 中比较典型的有Blaster和SQL Slammer。

  4. 移动代码是能够从主机传输到客户端计算机上并执行的代码,它通常是作为病毒,蠕虫,或是特洛伊木马的一部分被传 送到客户计算机上的。另外,移动代码可以利用系统的漏洞进行入侵,例如非法的数据访问和盗取root账号。通常用于编写移动代码的工具包括Java applets,ActiveX,Javascript,和Vbscript。

 恶意代码分析(我觉得高其同学总结很好,以下均为引用))

  在大多数情况下,进行恶意代码分析时,我们将只有恶意代码的可执行文件本身,而这些文件并不是我们人类可读的。为了了解这些文件的意义,你需要使用各种工具和技巧,而每种只能揭露出少量的信息。所以在实战中,我们要综合使用各种工具,才能看到一个全貌。
恶意代码分析有两类基本方法:
静态分析:在没有运行恶意代码时对其进行分析的技术
动态分析:相比较静态分析而言,则需要运行恶意代码,通过其产生的行为,如对计算机中注册表、文件的更改,网络的连接等动态数据进行分析,从而确定其具体行为
本次实验使用的样本是第二次实验生成的后门20145213.exe

 静态分析之特征库比对

杀毒软件一般是通过对代码与特征库中的特征码进行比对,判断这个文件是否是为恶意代码,如果是则进一步联系到病毒库中对该病毒的描述,从而确认其行为,达到分析的目的。我们可以利用上次实验中VirSCAN.org平台进行分析,结果如下:
898082-20170329205843592-968389779.png
898082-20170329210752967-2053571660.png
898082-20170329210800998-2003208555.png
898082-20170329210808326-1171100120.png

使用PE explorer分析

898082-20170401104932836-134881783.png
898082-20170329205637670-1330325836.png
在点击import功能图标后出现了5个文件,分别是MSVCRT.dllKERNEL32.dllADVARI32.dllWSOCK32.dllWS2_32.dll。博主不知扩展名为.dll的文件是什么含义,先问度娘吧

DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。

通过度娘的介绍,我目前的理解是,一个可执行文件好比一个主函数,导入的动态链接库好比调用的函数。那么我们可以知道,这个black.exe后门程序导入了5个动态链接库。那么这些动态链接具体可以实现哪些功能呢?

1. msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能。
2. kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
3. advapi32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关。
4. wsock32.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。
5. ws2_32.dll是Windows Sockets应用程序接口, 用于支持Internet和网络应用程序。

查询文件头信息,贴上食用图
898082-20170401124716024-1440542430.png
898082-20170329205649264-1972766249.png
通过反汇编指令去反汇编程序,得到一个大致的程序汇编语言
898082-20170329205708920-1375172898.png

使用PEiD分析

运行PEID
把要查壳的文件,拉到peid 里,
如果出现:tElock 0.98b1 -> tE! 证明就是tElock 0.98b1 -> tE! 的壳
如果出现:Microsoft Visual C++ 7.0 [Debug] 证明就是无壳 vc7.0 写的软件,当然不排除伪装壳的可能.
898082-20170329200859967-322542930.png
如果出现途中所示Nothing found *证明就是壳特征码里没有,不知道是什么壳
至于不知道是什么壳的,则需要一定的经验判断。

使用Wireshark分析

首先是Kali监听,肉鸡点击black.exe,产生连接.具体表现为三次握手
898082-20170329213340904-1502255353.png
我们在控制机输入ls指令,查看当前文件夹
898082-20170329213457545-1951710293.png
依图可知,该文件夹共有8个文件,正好对应8个数据包
898082-20170329213619858-2055308755.png

使用Dependency Walker分析

898082-20170402104651961-644452684.png
Dependency Walker可以更细致具体的分析dll文件,我们可以点开看看其模块依赖关系。
898082-20170402104314211-80455383.png
PI(Parent Import Function List View):从哪些其他文件中调用了函数。
E(Export Function List View):提供了哪些接口,让其他的程序调用。

使用Process Monito分析

打开Process Monito,开始捕获
898082-20170329221021248-1711726420.png
898082-20170402120315977-1973439685.png
回连成功,暂停捕获,查看分析。但数量汗牛充栋,我们需要通过添加相关信息用于过滤。
898082-20170402120143727-1388368490.png
控制机输入截屏指令,再次暂停捕获,过滤,查看进程
898082-20170402120514274-1485199068.png

898082-20170402120454758-718624918.png
控制机输入提权指令,再次暂停捕获,过滤,查看进程
898082-20170402120521461-569039575.png
898082-20170402120526711-992101906.png
把左上角的“Architecture”选择改为“Process Name”,“is”不变, 输入栏里填“black.exe”“add” ,然后“ok” 并启动监视即可。最后结果如下:
898082-20170402121742211-1743276725.png

ProcessName进程名过滤
- PID进程号过滤

使用计划任务schtasks

根据老师的指导书,使用指令C:\schtasks /create /TN netstat /sc MINUTE /MO 5 /TR "cmd /c netstat -bn > c:\netstatlog.txt创建计划任务netstat
指令解释:

> TN:Task Name,本例中是netstat
> SC: SChedule type,本例中是MINUTE,以分钟来计时
> MO: MOdifier
> TR: Task Run,要运行的指令是 netstat -bn,b表示显示可执行文件名,n表示以数字来显示IP和端口

898082-20170402213211430-1896254565.png
(如果出现拒绝访问,请用管理员身份打开)
在C盘中创建一个netstat.bat文件,内容为

date /t >> c:\netstatlog.txt
time /t >> c:\netstatlog.txt
netstat -bn >> c:\netstatlog.txt

具体步骤就是先新建一个记事本,写入如上内容,再重名,连同扩展名一起改。出现可能不可用的提示,请放心选Yes!
898082-20170402213549789-165295268.png
打开计划任务,找到netstat
898082-20170402213121539-141523175.png
选择属性,接着选择操作,将cmd /c netstat -bn > c:\netstatlog.txt替换为c:\netstatlog.bat
C盘会执行指令,生成netstatlog.txt,点击打开
898082-20170402213959149-1625974820.png

1.实验后回答问题

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

(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
首先使用PEiD对程序进行查壳脱壳处理,再使用Dependency Walker对其进行PE模块依赖性分析,脱壳后,我们可以更真实地查看PE模块的导入模块,查看PE模块的导入和导出函数,更加具体直观地分析PE模块的模块依赖性。再使用wireshark抓包或Process Monito捕获分析相关进程

转:https://www.cnblogs.com/qiwei/p/6646886.html



推荐阅读
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • python3+tkinter实践历程(四)——模仿CRT完成基于socket通信与tkinter的TCP串口客户端
    python3tkinter实践历程(四)——基于socket通信与tkinter的TCP串口客户端(仿CRT)文章目录系列文章目录分享背景制作背景最终功能工具截图展示代码详解系列 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
author-avatar
独孤依人x_762
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有