20155326《网络对抗》免考项目—— 深入恶意代码之恶意代码详解

20155326《网络对抗》免考项目——深入恶意代码之恶意代码详解

什么是恶意代码

恶意代码是一种程序,它通过把代码在不被察觉的情况下镶嵌到另一段程序中,从而达到破坏被感染电脑数据、运行具有入侵性或破坏性的程序、破坏被感染电脑数据的安全性和完整性的目的。

恶意代码生命周期

攻击目标:

  • 个人计算机
  • 服务器
  • 移动智能终端

手机、平板等

  • 智能设备

特斯拉汽车、智能家居、智能手表等

  • 通信设备

路由器、交换机等

  • 安全设备等

防火墙、IDS, IPS. VDS

攻击目标范围:

  • 定点攻击

邮件、IP、域名、QQ等

服务器列表、特定人员名单等

  • 群体性杀伤

挂马攻击、钓鱼攻击:

病毒、蠕虫自动扩散:

恶意代码危害

  • 删除敏感信息
  • 作为网络传播的起点
  • 监视键盘
  • 收集你的相关信息:常访问的站点、 search的关键词、上网偏好/时间
  • 获取屏幕
  • 在系统上执行指令/程序
  • 窃取文件,如文档/音视频数据/务/技术/商业机密
  • 开启后门,作为攻击其他计算机的起点/(肉鸡)
  • 隐藏在你主机上的所有活动
  • 诱骗访问恶意网站

恶意代码的特征

恶意代码从80年代发展至今体现出来3个主要特征:

  1. 恶意代码日趋复杂和完善:从非常简单的,感染游戏的Apple II病毒发展到复杂的操作系统内核病毒和今天主动式传播和破坏性极强的蠕虫。恶意代码在快速传播机制和生存性技术研究取得了很大的成功。
  2. 创新性工具和技术的发布速度加快:恶意代码刚出现时发展较慢,但是随着网络飞速发展, Internet成为恶意代码发布并快速蔓延的平台。特别是过去十年,不断涌现,的恶意代码,证实了这一点。
  3. 从病毒到蠕虫,又到内核的开发趋势:对于过去的恶意代码,大多数活动都围绕着病毒和感染可执行程序进行,然而现在,我们看到这些活动主要集中在蠕虫和内核级的系统开发上活动主要集中在蠕虫和内核级的系统开发上。

恶意代码当前发展情况

  • 恶意代码的发展历史

恶意代码分类:

病毒类型所占比例

  • 下面介绍四类流行的恶意代码

陷阱门(后门)

  陷阱门是某个程序的秘密入口,通过该入口启动程序,可以绕过正常的访问控制过程,因此,获悉陷阱门的人员可以绕过访问控制过程,直接对资源进行访问。陷阱门已经存在很长一段时问,原先的作用是程序员开发具有鉴别或登录过程的应用程序时,为避免每一次调试程序时都需输入大量鉴别或登录过程需要的信息,通过陷阱门启动程序的方式来绕过鉴别或登录过程。程序区别正常启动和通过陷阱门启动的方式很多,如携带特定的命令参数、在程序启动后输入特定字符串等。
  程序设计者是最有可能设置陷阱门的人,因此,许多免费下载的实用程序中含有陷阱门或病毒这样的恶意代码,使用免费下载的实用程序时必须注意这一点。

如:Bits、WinEggDrop、Tini。。。

  • 后门特点:

1.后门包括从简单到奇特,有很多的类型。简单的后门可能只是建立一个新的账号,或者接管一个很少使用的账号;复杂的后门(包括木马)可能会绕过系统的安全认证而对系统有安全存取权。例如一个login程序,当你输入特定的密码时,你就能以管理员的权限来存取系统。

2.后门能相互关联,而且这个 技术被许多黑客所使用。例如,黑客可能使用密码破解一个或多个账号密码,黑客可能会建立一个或多个账号。一个黑客可以存取这个系统,黑客可能使用一些 技术或利用系统的某个漏洞来提升权限。黑客可能会对系统的配置文件进行小部分的修改,以降低系统的防卫性能。也可能会安装一个木马程序,使系统打开一个安全漏洞,以利于黑客完全掌握系统。

特洛伊木马

特洛伊木马也是包含在正常应用程序中的一段恶意代码,一旦执行这样的应用程序,将激发恶意代码。顾名思义,这一段恶意代码的功能主要在于削弱系统的安全控制机制,如在系统登录程序中加入陷阱门,以便黑客能够绕过登录过程直接访问系统资源;将共享文件的只读属性修改为可读写属性,以便黑客能够对共享文件进行修改;甚至允许黑客通过远程桌面这样的工具软件控制系统。

如:冰河、网络神偷、灰鸽子。。。
  • 远程控制与特洛伊木马

远程控制技术原理:

远程控制软件实际上是一种客户机/服务器程序,服务器程序安装在被控主机上,客户机程序安装在控制端。作为服务器的主机一般会打开一个默认的端口并进行监听,如果有客户机向服务器的这一端口提出连接请求,服务器上相应程序就会自动运行,来应答客户机的请求,从而实现远程控制。

  • 木马组成

对木马程序而言,它一般包括两个部分:客户端和服务器端。

服务器端:

通过各种手段植入被控制的目标机器。
一般通过电子邮件或其他手段让用户在其计算机中运行,以达到控制该用户计算机的目的。

客户端:

安装在攻击者机器上,由控制者所使用
用于对受控的计算机进行控制。

服务器端程序和客户端程序建立起连接就可以实现对远程计算机的控制了。

  • 特洛伊木马特征:

1.不产生图标   

木马虽然在你系统启动时会自动运行,但它不会在 "任务栏"中产生一个图标,这是容易理解的,不然的话,你看到任务栏中出现一个来历不明的图标,你不起疑心才怪呢! 木马程序自动在任务管理器中隐藏,并以"系统服务"的方式欺骗操作系统。   

2.具有自动运行性。   

木马为了控制服务端。它必须在系统启动时即跟随启动,所以它必须潜人在你的启动配置文件中,如win.ini、system.ini、winstart.bat以及启动组等文件之中。   

3.包含具有未公开并且可能产生危险后果的功能的程序。   

4.具备自动恢复功能。   

现在很多的木马程序中的功能模块巴不再由单一的文件组成,而是具有多重备份,可以相互恢复。当你删除了其中的一个,以为万事大吉又运行了其他程序的时候,谁知它又悄然出现。像幽灵一样,防不胜防。   

5.能自动打开特别的端口。  

6.功能的特殊性。

  

通常的木马功能都是十分特殊的,除了普通的文件操作以外,还有些木马具有搜索cache中的口令、设置口令、扫描目标机器人的IP地址、进行键盘记录、远程注册表的操作以及锁定鼠标等功能。上面所讲的远程控制软件当然不会有这些功能,毕竟远程控制软件是用来控制远程机器,方便自己操作而已,而不是用来黑对方的机器的。

  • 木马技术——植入方式

  • 木马技术——隐藏技术

文件隐藏:

采用欺骗的方式伪装成其它文件
伪装成系统文件

进程隐藏:

动态链接库注入技术,将“木马”程序做成一个DLL文件,并将调用动态链接库函数的语句插入到目标进程,这个函数类似于普通程序中的入口程序。
Hooking API技术。通过修改API函数的入口地址的方法来欺骗试图列举本地所有进程的程序。 

通信隐藏:

端口隐藏
反向连接
隐藏通道

PS:一个复用正常服务端口的例子如下。

  • 木马技术——自动加载

针对Windows系统,木马的自动加载主要有以下方法:

蠕虫

从病毒的广义定义来说,蠕虫也是一种病毒,但它和狭义病毒的最大不同在于自我复制过程,病毒的自我复制过程需要人工干预,无论是运行感染病毒的实用程序,还是打开包含宏病毒的邮件,都不是由病毒程序自我完成的。蠕虫能够自我完成下述步骤。

(1)查找远程系统:能够通过检索已被攻陷的系统的网络邻居列表或其他远程系统地址列表找出下一个攻击对象。

(2)建立连接:能够通过端口扫描等操作过程自动和被攻击对象建立连接,如Telnet连接等。

(3)实施攻击:能够自动将自身通过已经建立的连接复制到被攻击的远程系统,并运行它。

  • 经典的两种蠕虫(此外还有红色代码、SQL蠕虫王、冲击波、震荡波。。。)

  • 蠕虫工作机制

信息收集-->攻击渗透-->现场处理

在信息收集阶段,按照一定的策略搜索网络中存活的主机,收集目标主机的信息,并进行漏洞探测。扫描策略如下:

由于蠕虫向网络中发送大量的探测数据,很容易造成网络堵塞,这也是蠕虫病毒的最大危害之一 。

攻击渗透是通过主机漏洞尝试攻击,一旦攻击成功,则获得控制该主机的权限,将蠕虫代码渗透到被攻击主机。

现场处理是对被攻击的主机进行一些处理,将攻击代码隐藏,为了能使被攻击主机运行蠕虫代码,还要通过注册表将蠕虫程序设为自启动状态;可以完成其它行为,如恶意占用CPU资源等。

PS:攻击示例,就像这样默默在注册表中添加了一项。

或者修改了系统进程,这里lsass.exe是一个系统进程,用于Windows系统的安全机制。它用于本地安全和登陆策略。

  • 蠕虫的行为特征

1.自我繁殖:

 

 蠕虫在本质上已经演变为黑客入侵的自动化工具, 当蠕虫被释放(release)后,从搜索漏洞,到利用搜索结果攻击系统,到复制副本,整个流程全由蠕虫自身主动完成。就自主性而言,这一点有别于通常的病毒。

2.利用软件漏洞:

任何计算机系统都存在漏洞,这些漏洞是各种各样的,有操作系统本身的问题、有的是应用服务程序的问题、有的是网络管理人员的配置问题……

3.造成网络拥塞:

在扫描漏洞主机的过程中,蠕虫需要:判断其它计算机是否存在;判断特定应用服务是否存在;判断漏洞是否存在等等,这不可避免的会产生附加的网络数据流量。

同时蠕虫副本在不同机器之间传递,或者向随机目标的发出的攻击数据都不可避免的会产生大量的网络数据流量。即使是不包含破坏系统正常工作的恶意代码的蠕虫,也会因为它产生了巨量的网络流量,导致整个网络瘫痪,造成经济损失。

4.消耗系统资源:

蠕虫入侵到计算机系统之后,会在被感染的计算机上产生自己的多个副本,每个副本启动搜索程序寻找新的攻击目标。大量的进程会耗费系统的资源,导致系统的性能下降。这对网络服务器的影响尤其明显。

5.留下安全隐患:

大部分蠕虫会搜集、扩散、暴露系统敏感信息(如用户信息等),并在系统中留下后门。这些都会导致未来的安全隐患。

病毒

计算机病毒是一个程序,一段可执行代码。就像生物病毒一样,计算机病毒有独特的,复制能力。计算机病毒可以很快地蔓延,又常常难以根除。它们能把自身附着在各种类型的文件上。当染毒文件被复制或从一个用户传送到另一个用户时,它们就随同该文件一起,蔓延开来。除复制能力外,某些计算机病毒还有其他一些共同特性:一个被感染的程序是能够传播病毒的载体。当你看到病毒似乎仅表现在文字和图像上时,它们可能也已毁坏了文件、格式化了你的硬盘或引发了其他类型的灾害。若病毒并不寄生于一个感染程序,它仍然能通过占据存储空间给你带来麻烦,并降低计算机的性能。

  • 经典的两种病毒(此外还有CIH、新欢乐时光等等):

  • 计算机病毒具有以下几个密明显的特征:

1.传染性

这是病毒的基本特征,是判断一个程序是否为计算机病毒的最重要的特征,一旦病毒被复制或产生变种,其传染速度之快令人难以想象。

2.破坏性

任何计算机病毒感染了系统后,都会对系统产生不同程度的影响,发作时轻则占用系统资源,影响计算机运行速度,降低计算机工作效率,使用户不能正常使用计算机;重则破坏用户计算机的数据,甚至破坏计算机硬件,给用户带来巨大的损失。

3.寄生性

一般情况下,计算机病毒都不是独立存在的,而是寄生于其他的程序中,当执行这个程序时,病毒代码就会被执行,在正常程序未启动之前,用户是不易发觉病毒的存在的。

4.隐蔽性

计算机病毒具有很强的隐蔽性,它通常附在正常的程序之中或藏在磁盘隐秘的地方,有些病毒采用了极其高明的手段来隐藏自己,如使用透明图标、注册表内的相似字符等,而且有的病毒在感染了系统之后,计算机系统仍能正常工作,用户不会感到任何异常,在这种情况下,普通用户无法在正常情况下发现病毒。

5.潜伏性(触发性)

大部分的病毒感染系统之后一般不会马上发作,而是隐藏在系统中,就像定时炸弹一样,只有在满足特定条件时才被触发,例如,黑色星期五病毒,不到预定时间,用户就不会觉察出异常。一旦遇到13日并且是星期五,病毒就会被激活并且对系统进行破坏。当然,有计算机的地方就有计算机病毒,也可以说,计算机病毒无处不在,尽管病毒带来的,损失或大或小,甚至有些没有任何损失,但是大部分计算机用户都有被病毒侵扰的经历.据中国计算机病毒应急处理中心统计,中国计算机用户受病毒感染的比例(感染率)一直处于高位,美国权威调查机构证实,进入新世纪以来,每年因计算机病毒造成的损失都在100亿美元以上。

  • 计算机病毒的基本机制

三大模块:传染机制、破坏机制、触发机制

传染机制 :

指计算机病毒由一个宿主传播到另一个宿主程序,由一个系统进入另一个系统的过程。

触发机制:

计算机病毒在传染和发作之前,要判断某些特定条件是否满足,这个条件就是计算机病毒的触发条件。

破坏机制 :

良性病毒表现为占用内存或硬盘资源。

恶性病毒则会对目标主机系统或信息产生严重破坏。

总结

随着互联网的发展,信息化时代来到了。网络越来越深入到我们日常的生活、学习和工作当中个,网路安全事件频发,已经严重影响到我们的日常生活、学习、工作各方面,除了安装杀毒软件、防火墙等工具来检测我们的电脑逃离恶意代码的魔爪,我们还必须学会一些主动防范的手段来保护自己,在接下来的学习过程中会从列举几种恶意代码的生成方法、从静态和动态方式对恶意代码进行深入分析、同时与之相对的介绍一些恶意代码的检测查杀和恶意代码的隐藏。

参考:

计算机病毒及其防范技术

蠕虫病毒

https://wenku.baidu.com/view/8a3ddfd2f61fb7360a4c6524.html

恶意代码分析笔记

特洛伊木马特征

后门

网页木马 示例

原文地址:https://www.cnblogs.com/lmc1998/p/9092555.html

时间: 2024-10-13 10:26:02

20155326《网络对抗》免考项目—— 深入恶意代码之恶意代码详解的相关文章

用maven来创建scala和java项目代码环境(图文详解)(Intellij IDEA(Ultimate版本)、Intellij IDEA(Community版本)和Scala IDEA for Eclipse皆适用)(博主推荐)

为什么要写这篇博客? 首先,对于spark项目,强烈建议搭建,用Intellij IDEA(Ultimate版本),如果你还有另所爱好尝试Scala IDEA for Eclipse,有时间自己去玩玩.但最好追随大流. 对于hadoop项目,强烈建议用eclipse.   其次,出于有博友给我留言的索求需要,为了更高效率和高质量帮助大家,梳理写下这篇博客. 这篇博客 是在Scala IDEA for Eclipse里手动创建scala代码编写环境. 这篇博客 是在Scala IDEA for E

Android的学习之路(三)项目的启动过程和安装过程详解

应用的安装和启动过程: 安装:第一步:java的编译器会把这个.java文件编译成.class文件 第二部:Android的SDK提供了一个dx工具,这个工具把.class文件转义成.dex文件 第三部:打包操作,把.dex文件和资源文件进行打包,打包成一个压缩文件,然后进行签名.最后就打包成为了.apk文件 第四部:调用adb指令:adb install c:/x.apk安装到模拟器 具体过程:.JAVA---->.class--.dx-->.dex--->打包签名--->.ap

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:卸载windows\system32目录中的cd.dll,即把上面复制的文件删除: del %windir%\system32\cd.dll 例3:删除download文件夹中的文件,例子如下: del C:\DOWNLOAD\*.* 注意,以处的del命令只

Git学习系列之如何正确且高效地将本地项目上传到Github(图文详解)

不多说,直接上干货! 首先你需要一个Github账号,所以还没有的话先去注册吧! https://github.com/ 见 Git的安装 见 Git学习系列之Windows上安装Git详细步骤(图文详解) 1.进入Github首页,点击New repository新建一个项目 点击Clone or dowload会出现一个地址,copy这个地址备用. 创建 ssh-keygen -t rsa -C "***@***.com" 欢迎大家,加入我的微信公众号:大数据躺过的坑       

JNI_Android项目中调用.so动态库实现详解

转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码声明三个本地方法. 3. 编译JNI

【项目Windows部分】Windows 注册表详解

一.注册表的由来 PC机及其操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置.早期的图形操作系统,如Win3.x中,对软硬件工作环境的配置是通过对扩展名为.ini的文件进行修改来完成的,但INI文件管理起来很不方便,因为每种设备或应用程序都得有自己的INI文件,并且在网络上难以实现远程访问. 为了克服上述这些问题,在Windows 95及其后继版本中,采用了一种叫做"注册表"的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息.按照这一

JNI_Android 项目中调用.so动态库实现详解

转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码声明三个本地方法. 3. 编译JNI

JNI_Android项目中调用.so动态库实现详解【转】

转自 http://www.cnblogs.com/sevenyuan/p/4202759.html 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码

[转]Android调用so文件(C代码库)方法详解

一.为什么调用c的dll要用源码编译成so库 Android系统是基于linux内核的移动终端系统,而dll是在windows环境下生成和调用的c库,所以不可以直接为android系统调用. 二.安装 (I)安装cygwin 1.下载cygwincygwin可以在windows上虚拟unix编译环境,还内置了许多linux的编辑器等工具,可供选择安装.在本项目中cygwin主要用来编译生成so库.所以重在安装gcc.make包.到http://cygwin.com/setup.exe下载安装程序

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

简介 前边一直在分享testng的相关文章,看了点赞量和阅读数不是很高,宏哥猜测估计是大家确实是用不到或者不喜欢吧!不过宏哥经过一段时间的准备,appium的自动化测试框架完善的差不多了,那么接下来宏哥继续给小伙伴和童鞋们分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 主要是一些配置信息的封装. 参考代码 platformName: Android #模拟器 platformVersion: 5.1.1 devi