什么是恶意代码?
前言:本文旨在分享交流技术,在这里对恶意代码进行全面的介绍和讲解
目录
一.什么是恶意代码
二.恶意代码的发展史
三.恶意代码的相关定义
四.恶意代码攻击机制
PE病毒
PE文件的格式
脚本病毒
脚本文件隐藏方法
宏病毒
浏览器恶意代码
U盘病毒
AutoRun.inf的关键字
网络蠕虫
网络蠕虫的工作流程
一.什么是恶意代码
目前,对于恶意代码始终没有一个统一的概念定义:
在百度百科中它是这样被定义的,恶意代码(Malicious Code)是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件。
定义一:恶意代码又称恶意软件。这些软件也可称为广告软件(adware)、间谍软件(spyware)、恶意共享软件(malicious shareware)。是指在未明确提示用户或未经用户许可的情况下,在用户计算机或其他终端上安装运行,侵犯用户合法权益的软件。与病毒或蠕虫不同,这些软件很多不是小团体或者个人秘密地编写和散播,反而有很多知名企业和团体涉嫌此类软件。有时也称作流氓软件。
定义二:恶意代码是指故意编制或设置的、对网络或系统会产生威胁或潜在威胁的计算机代码。最常见的恶意代码有计算机病毒(简称病毒)、特洛伊木马(简称木马)、计算机蠕虫(简称蠕虫)、后门、逻辑炸弹等。
在网络安全事件中,恶意代码造成的经济损失占有最大的比例,与此同时,恶意代码成为信息战、网络战的重要手段。日益严重的恶意代码问题,不仅使企业及用户蒙受了巨大经济损失,而且使国家的安全面临着严重威胁。恶意代码的机理研究成为解决恶意代码问题的必需途径,只有掌握当前恶意代码的实现机理,加强对未来恶意代码趋势的研究,才能在恶意代码问题上取得先决之机。
二.恶意代码的发展史
恶意代码经过20多年的发展,破坏性、种类和感染性都得到增强。随着计算机的网络化程度逐步提高,网络传播的恶意代码对人们日常生活影响越来越大。
1988 年11 月泛滥的Morris蠕虫,顷刻之间使得6000 多台计算机(占当时Internet 上计算机总数的10%多)瘫痪,造成严重的后果,并因此引起世界范围内关注。
1998 年CIH病毒造成数十万台计算机受到破坏。1999 年Happy 99、Melissa 病毒大爆发,Melissa 病毒通过E-mail 附件快速传播而使E-mail 服务器和网络负载过重,它还将敏感的文档在用户不知情的情况下按地址簿中的地址发出。
2000 年5 月爆发的“爱虫”病毒及其以后出现的50 多个变种病毒,是近年来让计算机信息界付出极大代价的病毒,仅一年时间共感染了4000 多万台计算机,造成大约87 亿美元的经济损失。
2001 年,国信安办与公安部共同主办了我国首次计算机病毒疫情网上调查工作。结果感染过计算机病毒的用户高达73%,其中,感染三次以上的用户又占59%多,网络安全存在大量隐患。
2001 年8月,“红色代码”蠕虫利用微软Web 服务器IIS 4.0 或5.0 中Index服务的安全漏洞,攻破目标机器,并通过自动扫描方式传播蠕虫,在互联网上大规模泛滥。
2003 年,SLammer 蠕虫在10 分钟内导致互联网90%脆弱主机受到感染。同年8月,“冲击波”蠕虫爆发,8天内导致全球电脑用户损失高达20亿美元之多。
2004年到2006年,振荡波蠕虫、爱情后门、波特后门等恶意代码利用电子邮件和系统漏洞对网络主机进行疯狂传播,给国家和社会造成了巨大的经济损失。
2006年的熊猫烧香,短短几个月中感染的个人用户数就达到了几百万。
2010年6月首次被检测出来震网病毒(Stuxnet),是第一个专门定向攻击真实世界中基础(能源)设施的“蠕虫”病毒,比如核电站,水坝,国家电网。“震网”代码非常精密,主要有两个功能,一是使伊朗的离心机运行失控,二是掩盖发生故障的情况,“谎报军情”,以“正常运转”记录回传给管理部门,造成决策的误判。在2011年2月的攻击中,伊朗纳坦兹铀浓缩基地至少有1/5的离心机因感染该病毒而被迫关闭。
2011-12年,勒索软件时代的到来 Reveton 是现代勒索软件的原型,它基本包含现代勒索软件的全部要素,比如锁屏,支付赎金,解密文件等。 Reveton还具备由专业攻击组织运营的所有特征。它不仅在外观上很专业,而且还第一次使用了模板。锁屏将根据地理位置向用户显示不同的内容,并向受害者显示当地执法机构的信息,以及如何付款的说明。
2016年:第一个物联网僵尸网络Mirai,与传统的网络和终端用户设备不同,大多数物联网设备不需要维护。也就是说,它们不像电脑或智能手机那样自动接收更新信息。相反,它们经常被忽视,几乎从未被更新 Mirai 利用了这个漏洞,让它毫无困难地传播。
2017年,美国国家安全局(NSA)的“ShadowBroker”事件。 美国政府正在开发的秘密恶意软件遭到泄露,攻击者有效地重新利用了被发布的工具和漏洞,其中最著名的一个是“永恒之蓝” “永恒之蓝”是美国国家安全局保存的一个零日漏洞,其目标是微软的SMB(服务器消息块)协议(CVE-2017-0444)。
目前,恶意代码问题成为信息安全需要解决的,迫在眉睫的、刻不容缓的安全问题。如图显示了过去20 多年主要恶意代码事件:
恶意代码日趋复杂和完善:从非常简单的,感染游戏的Apple II 病毒发展到复杂的操作系统内核病毒和今天主动式传播和破坏性极强的蠕虫。恶意代码在快速传播机制和生存性技术研究取得了很大的成功。
恶意代码编制方法及发布速度更快:恶意代码刚出现时发展较慢,但是随着网络飞速发展,Internet 成为恶意代码发布并快速蔓延的平台。特别是近年来,不断涌现的恶意代码,证实了这一点。
三.恶意代码的相关定义
四.恶意代码攻击机制
- 感染标志模块:检测目标是否已经被感染过,若已感染过就不再感染,以避免重复感染次数过多而被检测出来。
- 引导模块:首先确定操作系统类型、内存容量、现行区段、磁盘设置等参数,根据参数的情况引导病毒,保护内存中的病毒代码不被覆盖。设置病毒激活和触发条件,使病毒处于可激活状态,以便病毒被激活后,根据满足的条件调用感染模块或破坏表现模块。
- 感染模块:检查目标中是否存在感染标识或感染条件是否满足,如果没有感染标识或条件满足,则进行感染,将病毒代码放入宿主程序。
- 破坏表现模块:实现方式各种各样,根据编写者的特定目标,对系统进行修改。
PE病毒
计算机病毒发展初期因为个人操作系统大多为DOS系统,这一时期大多为DOS病毒。由于Windows的广泛使用,DOS病毒几乎绝迹。但DOS病毒在Win9X环境中仍可以发生感染,因此若执行染毒文件,Windows用户也会被感染。DOS系统病毒主要分成三类:引导型病毒,文件型病毒,以及混合引导型和文件型的病毒。
Win32指的是32位Windows操作系统,Win32的可执行文件,如*.exe、*.dll、*.ocx等,都是PE(Portable Executable)格式文件,意思是可移植的执行体。感染PE格式文件的Win32病毒,简称为PE病毒。它感染Windows下所有PE格式文件,因为它通常采用Win32汇编编写,而且格式为PE,因此得名。
PE病毒数量多,破坏性大,技巧性强 PE病毒在任何Windows环境下都能运行,但是使用Win32汇编语言编写,需要做复杂的文件格式处理,对编程技术要求高。
PE文件的格式
脚本病毒
脚本(Script)病毒是以脚本程序语言编写而成的病毒,主要使用的脚本语言是VBScript和JavaScript。脚本病毒编写比较简单,并且编写的病毒具有传播快、破坏力大等特点。但脚本病毒必须通过Microsoft的WSH(Windows Scripting Host,Windows脚本宿主)才能够启动执行以及感染其他文件。
VBScript是Visual Basic Script的简称,即Visual Basic 脚本语言,有时也被缩写为VBS。因为VBScript 是微软公司出品的脚本语言,因此Windows下大部分脚本病毒都使用VBS编写。例如,爱虫病毒、新欢乐时光病毒等都是用VBScript编写的,称做VBS脚本病毒。
VBS病毒流行的另一个原因是,VBS程序在Windows环境下运行非常方便,在文本文件中输入代码,将文件的保存为“*.VBS”,双击就可以执行。例如在在文本文件中输入:MsgBox "Hello VBS",保存成“a.vbs”,双击就可以执行。
曾经广为流传的“新欢乐时光”病毒,将自己的代码附加在HTML文件的尾部,并在顶部加入一条调用病毒代码的语句。这里实现该病毒的部分感染功能,只感染病毒所在目录下的所有HTML文件,在HTML文件后面加上代码。
脚本文件隐藏方法
脚本文件为了实现自身隐藏,通常有三种方法:
- 方法一:通过将Windows安装的组件“Windows Scripting Host”卸载,来阻止VBS脚本程序执行。
- 方法二:通过改变VBS文件打开方式来阻止VBS脚本程序的执行。默认情况下VBS脚本文件使用wscrip.exe来打开并解释执行的,因此只要将VBS脚本文件改为用“记事本”notepad.exe来打开,那就不会感染这类病毒了。
- 方法三:脚本用户可在运行脚本之前验证其真实性。脚本开发人员对其脚本进行签名,以免发生未经授权的修改。管理员可以强制实施严格的策略,确定哪些用户有权修改本地或远程运行脚本。
宏病毒
宏病毒是单独的一类病毒,因为它与传统的病毒有很大的不同,他不感染.EXE、.COM等可执行文件,而是将病毒代码以“宏”的形式潜伏在Office文档中,当采用Office软件打开这些染毒文件时,这些代码就会被执行并产生破坏作用。
由于“宏”是使用VBA(Visual Basic For Application)这样的高级语言写的,因此其编写过程相对来说也比较简单,而功能又十分强大,如直接使用DOS系统命令调用Windows API、DLL等。这些操作均可能对系统直接构成威胁。
宏病毒的产生标志着制造病毒不再是专业程序员的专利,任何人只要掌握一些基本的“宏”编写技巧即可编写出破坏力极大的宏病毒。随着Office软件在全世界的不断普及,宏病毒成为传播最广泛、危害最大的一类病毒。
宏病毒是能够循环复制自身的,具有破坏作用的一个或多个宏的集合。目前常见的宏病毒根据破坏性主要有以下几种:
- 只进行自身的传播,并不具有破坏性的类型。
- 只对用户进行骚扰,但不破坏系统的类型。
- 使打印中途中断或打印出混乱信息的类型。
- 极具破坏性的类型。
浏览器恶意代码
搜索引擎公司Google曾公布一组调查数据显示,10%的网页含有恶意代码。Google调研人员从全球数以十亿计的网站中抽取的450万个网页的分析测试中发现,至少有45万个页面中含有恶意脚本,即平均每十个搜寻结果里,就有一个含有可能会破坏用户电脑的隐藏性恶意程序。而这还只是一个保守的估计,另外还有70万个网页被视为可疑页面。
国内的反病毒厂商江民科技发布了类似的数据,80%以上的用户是因为浏览网页而感染病毒,有近一半以上的用户是在使用搜索引擎搜索查看信息时感染病毒,同时上正规网站浏览信息未进行其它任何操作而莫名染毒的也占到了近三成的比例。
由于Windows自带的浏览器Internet Explorer使用的非常广泛,因此攻击这个浏览器的恶意代码非常多。因为浏览器大部分配置信息都存储在注册表中,所以针对浏览器的攻击大多是通过修改注册表来实现的。
U盘病毒
U盘病毒也称AutoRun病毒,能通过产生的AutoRun.inf进行传播的病毒,都可以称为U盘病毒。随着U盘、移动硬盘、存储卡等移动存储设备的普及,U盘病毒也开始泛滥,最典型的地方就是各个打字复印社,几乎所有电脑都带有这种病毒。 U盘病毒会在系统中每个磁盘目录下创建AutoRun.inf病毒文件(不是所有的AutoRun.inf都是病毒文件);
借助“Windows自动播放”的特性,使用户双击盘符时就可立即激活指定的病毒。病毒首先向U盘写入病毒程序,然后更改AutoRun.inf文件。 AutoRun.inf文件记录用户选择何种程序来打开U盘。如果AutoRun.inf文件指向了病毒程序,那么Window就会运行这个程序,引发病毒。一般病毒还会检测插入的U盘,并对其实行上述操作,导致一个新的病毒U盘的诞生。
AutoRun.inf的关键字
网络蠕虫
计算机蠕虫是一种可以通过网络连接进行自身复制的程序,与以往病毒方式不同,文件型病毒、宏病毒需要在计算机的硬盘、软盘或文件系统中繁殖,而典型的蠕虫只会在内存中维持一个活动副本,甚至根本不向硬盘写入任何信息。
自从1988年莫里斯从实验室研制出第一个蠕虫以来,蠕虫以其快速、多样化的传播方式不断给网络世界带来灾害。 特别是1999年以来,高危蠕虫不断出现,使世界蒙受了轻则几十亿,重则几百亿美元的巨大经济损失。
从编程角度来看,蠕虫由两部分组成:
- 主程序。一旦在计算机中建立,就开始收集与当前计算机联网的其他计算机的信息,能通过读取公共配置文件并检测当前计算机的联网状态信息,尝试利用系统的缺陷在远程计算机上建立引导程序
- 引导程序。负责把“蠕虫”病毒带到它所感染的每一台计算机中,主程序中最重要的是传播模块,实现了自动入侵的功能,U盘病毒具备蠕虫的一些特性,也可以将其归为蠕虫病毒
网络蠕虫的工作流程
根据蠕虫病毒的程序其工作流程可以分为漏洞扫描、攻击、传染、现场处理四个阶段 首先蠕虫程序随机(或在某种倾向性策略下)选取某一段IP地址,接着对这一地址段的主机扫描,当扫描到有漏洞的计算机系统后,将蠕虫主体迁移到目标主机。 然后,蠕虫程序进入被感染的系统,对目标主机进行现场处理。同时,蠕虫程序生成多个副本,重复上述流程。 各个步骤的繁简程度也不同,有的十分复杂,有的则非常简单。
相关文章:

什么是恶意代码?
前言:本文旨在分享交流技术,在这里对恶意代码进行全面的介绍和讲解 目录 一.什么是恶意代码 二.恶意代码的发展史 三.恶意代码的相关定义 四.恶意代码攻击机制 PE病毒 PE文件的格式 脚本病毒 脚本文件隐藏方法 宏病毒 浏览器恶意代码 U盘病毒 …...

HCL模拟器选路实验案例
此选路题目选自职业院校技能竞赛中的一道题比较考验思路,适合于参加新华三杯大赛以及网络专业的同学,当做练习题目进行解题 题目 1.S1、S2、R1、R2运行ospf进程100,区域0,R1、R2、R3、R4、R5运行ospf进程200&#…...

toluaframework中C#怎么调用Lua的方法以及无GC方法
toluaframework中C#怎么调用Lua的方法 问题Util.CallMethodLuaManager.CallFunctionLuaFunction.LazyCall 解决方案LuaFunction脚本无GC消耗的调用 用法总结 问题 用过luaframework框架的人应该都知道框架提供了Util的工具类,工具类提供了一个方法就是Util.CallMet…...
安装pandas报错
报错信息: C:\Users\Jordan>pip install pandas Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting pandasUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/3a/6e/6c9c197ec2da861ea8c9c6848f0f887b7563f16e607bc6a35506af6…...
总有一天,你一定会很棒
晚上从一个大商场吃完饭出来,看到两个垂头丧气的男孩,他们坐在商场门口的户外台阶上,低着头,不停的搓着手,看不见他们的脸,只能看见他们不说话。在他们的面前,是一个年级大约25岁左右的女孩子&a…...

带你深入了解队列(c/cpp双版本模拟实现)
目录 一.队列的概念及结构 二.队列的实现 2.1队列的结构 2.2初始化队列 2.3队尾入队列 2.4队头出队列 2.5获取队列头部元素 2.6获取队列队尾元素 2.7获取队列中有效元素个数 2.8检测队列是否为空 2.9销毁队列 三.C 版本模拟实现队列 一.队列的概念及结构 队列…...

接口自动化测试实操
实现思路 使用excel管理用例用例信息,requests模块发送http请求,实现了记录日志,邮件发送测试报告的功能 目录结构如下: 下面直接上代码: 统筹脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24…...

Virtual DOM
目录 Virtual DOM 前言 用法 代码 理解 Virtual DOM的工作原理: 为什么使用Virtual DOM? 哪些库/框架使用Virtual DOM? 总结 Virtual DOM(虚拟DOM)是一种编程概念,它是对真实DOM的轻量级抽象表示。在前端开发中&#x…...

数据结构与算法-二叉树的遍历
🌞 “少年没有乌托邦,心向远方自明朗!” 二叉树 🎈1.二叉树的遍历🔭1.1先序遍历🔭1.2中序遍历🔭1.3后序遍历🔭1.4层次遍历🔭1.5二叉树遍历的递归算法📝1.5.1先…...

Qt之普通项目如何生成DLL(含源码+注释)
文章目录 一、示例图二、普通项目需要改造的内容三、源码(创建了一个TestDLL的项目,更改内容主要在pro文件和maindow.h文件)TestDLL.promainwindow.hmainwindow.cppmainwindow.ui 总结 一、示例图 使用不同的编译模式编译,会在对…...

Java注解及自定义注解
注解/元数据(Annotation),是对代码级别的说明;在JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注…...

ps2024滤镜插件Portraiture
Photoshop 是最常用到的综合性的设计工具,虽然PS一直在迭代升级,但是在细节功能上,PS总是无法完全满足全部所有的用户需求,今天coco玛奇朵推荐一个个截至目前最受欢迎的免费的PS插件,有了这些功能扩展的插件后PS如虎添…...

Vue 实战项目(智慧商城项目): 完整的订单购物管理功能 内涵资源代码 基于Vant组件库 Vuex态管理 基于企业级项目开发规范
鹏鹏老师的实战开发项目 文章目录 智慧商城项目01. 项目功能演示1.明确功能模块2.项目收获 02. 项目创建目录初始化vue-cli 建项目 03. 调整初始化目录结构1.删除文件2.修改文件3.新增目录 04. vant组件库及Vue周边的其他组件库05. 全部导入和按需导入的区别06. 全部导入07. 按…...

JVM——一些零散的概念(后续学习深入了再补充)
Native 凡是带了native关键字的,说明Java的作用范围的达不到了,需要调用底层C语言的库 调用native方法,会进入本地方法栈,调用本地接口(JNI) JNI的作用:扩展Java的使用,融合不同的编程语言为Java所用 它在内…...

OpenCV学习(三)——响应鼠标事件(获取点击点坐标和颜色,利用鼠标进行绘图)
响应鼠标事件 3. 响应鼠标事件3.1 获取鼠标点击的坐标3.2 获取鼠标点击像素点的颜色3.3 在鼠标点击的位置生成圆3.4 通过拖动鼠标来绘制填充矩形3.5 通过拖动鼠标绘制未填充矩形3.6 使用鼠标选点绘制多边形3.7 按住鼠标左键进行绘图 3. 响应鼠标事件 使用OpenCV读取图像&#…...

基于安卓android微信小程序的投票系统
项目介绍 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,投票系统小程序被用户普遍使用,为方便用户…...

没有上司的舞会
有了上一篇博客,没有看上一篇博客的可以看看上一篇博客,我们对没有上司的舞会这道题会有更好的理解~ 所以关键的思路就是确定对于每一个节点我们应该维护什么内容才是最合适的,这个题目和上一篇博客的最后一道题目很相似,我们思考…...

RHCE8 资料整理(四)
RHCE8 资料整理 第四篇 存储管理第13章 硬盘管理13.1 对磁盘进行分区13.2 交换分区(swap分区) 第14章 文件系统14.1 了解文件系统14.2 了解硬链接14.3 创建文件系统14.4 挂载文件系统14.5 设置永久挂载14.6 查找文件14.7 find的用法 第15章 逻辑卷管理15…...

目标跟踪ZoomTrack: Target-aware Non-uniform Resizing for Efficient Visual Tracking
论文作者:Yutong Kou,Jin Gao,Bing Li,Gang Wang,Weiming Hu,Yizheng Wang,Liang Li 作者单位:CASIA; University of Chinese Academy of Sciences; ShanghaiTech University; Beijing Institute of Basic Medical Sciences; People AI, Inc 论文链接&…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...