网络安全之反恶意代码技术
一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:16004488
微信公众号:计算机与网络安全
ID:Computer-network
恶意代码是网络环境面临的最为常见的安全威胁,如何反恶意代码便成为保护信息系统安全的重要手段之一。
一、恶意代码查杀
计算机恶意代码的定义有狭义和广义之分,狭义定义是指具有超出用户意愿的、具有自我复制能力的代码;广义定义则是一切具有主观恶意破坏能力、主观破坏意图的可执行代码,以及被构造出的不具备执行能力但可以对信息系统实现干扰破坏能力的恶意代码的统称。
恶意代码是指在未经授权的情况下,在信息系统中安装、执行并达到不正当目的的程序。恶意代码的含义可从3个方面理解:一是“代码”,即恶意代码是在一定环境下可以执行的计算机程序;二是“恶意的行为”,在不为用户所知的情况下破坏侵入用户的计算机系统,破坏计算机系统、网络或信息的保密性、完整性、可用性;三是“恶意移动性”,未经授权在计算机之间传播。
(一)分类与特征
1、恶意代码分类
恶意代码有多重不同分类方式。这里采用软件公司常用的一种方法,即将恶意代码概括为八大类:病毒(Virus)、蠕虫(Worm)、木马(Trojan)、黑客工具(Hacktool)、风险软件(Risk Ware)、灰色软件(Gray Ware)、垃圾软件(Junk File)、测试文件(Test File)等。
(1)病毒是一类将自身代码或数据注入某个宿主载体(程序、数据、硬盘引导区等),并能随宿主执行运行并传播的恶意代码。一些感染型恶意代码为躲避反病毒软件的查杀会将自身分割、变形或加密后再将自身的一部分或者全部附加到宿主程序上。由于恶意代码命名中的某些历史原因,一些实际上并不具备感染能力的恶意代码,如具有定时发作、破坏操作系统、删除磁盘文件、制造恶作剧等的恶意代码,也会被安全厂商划分为Virus类别。
(2)蠕虫是一类具有自我传播能力的恶意代码,可以通过网络、可移动存储设备等介质进行传播。蠕虫与感染式恶意代码不同之处在于,蠕虫不需要附着在其他程序内,也不需要用户操作就能进行自我复制和传播。某些恶意代码兼具蠕虫和感染式恶意代码的特性,在这种情况下多数安全厂商倾向于将其划分到蠕虫类别中,即具有通过网络进行自我复制能力和本地感染能力的恶意代码,一般会将其划入蠕虫范畴。
(3)木马是一类危害主机安全,具有隐蔽性、非授权性、破坏性等特征,且包含多种恶意行为的恶意代码,如Rootkit、Backdoor、Bot、Downloader、Clicker、Banker、Dropper、Stealer、DDoS、SMS、SPY、Proxy、Notifier、IM、Arc Bomb、Ransom 等。安全厂商通过木马的行为对其进行细分。一般而言,这类恶意代码不会自我繁殖也不会刻意感染其他文件,具有较明确的目的,如远程监控主机、组建僵尸网络、下载其他恶意代码并运行、窃取主机的各类账号密码信息、刷流量、敲诈用户财产等。
(4)黑客工具是一类攻击者或恶意代码作者所使用的工具。黑客工具一般没有主动传播自身、感染其他文件和直接损害当前主机安全的行为,一般仅作为攻击者收集目标信息进行探测或反制安全软件的工具。其设计的目的是用于配合网络攻击和恶意代码的生产与传播。部分黑客工具可以与恶意代码组合使用充当其功能模块,也可以用于构造和修改恶意代码。
(5)风险软件是一种可以被攻击者利用的工具,一般是一些商用、免费或开源的工具,这类工具设计的初衷不是为了妨碍系统的安全,但可以被攻击者作为恶意软件的功能模块使用或者作为后门遗留。
(6)灰色软件是一类通过收集用户特定信息,以达到恶意代码作者或攻击者的政治、金融、商业等目的的恶意代码。灰色软件不同于常规恶意代码,它不会直接危害主机的安全,只会在后台窃取特定信息并回传给远端服务器。在用户不知情或没有授权的情况下,以强制捆绑、隐藏等方式安装在用户系统中,并有下载、安装工具条或收集用户信息等功能软件。灰色软件通常会针对特定文档、窗口进行监控,伺机窃取它意图获得的信息,并在适当的时机通过网络回传给攻击者。
(7)垃圾软件是一类没有恶意行为同时也不具有实际作用的文件,但是有可能被用户当作恶意软件而频繁向安全厂商上报。一些安全软件厂商迫于用户压力或为了提高民间评测的检出率而被迫将一些软件加入到检测列表中。一些安全厂商为了避免误导用户,将此类文件划称为垃圾文件。垃圾文件没有明显的特性,一般而言,它们只是一些无用的文件,并不会对计算机安全造成威胁。
(8)测试文件是一类通过测试等手段达到某种目的的软件。如一些计算机安全研究机构、公众或者安全厂商用于测试安全软件有效性的没有任何危害的样本,能够造成安全软件误警的正常软件/文件。
2、恶意代码特征
以计算机病毒为例,说明恶意代码的特征,病毒具有的特征如下。
(1)传染性。传染性是病毒的基本特征,病毒通过各种渠道从已经被感染的计算机扩散到未被感染的计算机,在某些情况下造成被感染的计算机工作失常甚至瘫痪。
(2)隐蔽性。病毒通常附在正常程序中或磁盘较隐蔽的地方,也有以隐含文件的形式出现。病毒在取得系统控制权后,可以在很短的时间内感染大量程序,而且受感染计算机系统通常能正常运行,使用户不会感到任何异常。
(3)潜伏性。计算机病毒侵入系统后一般不会立刻发作,通常可以在几周或几个月甚至更长时间内隐藏在合法文件中,对其他系统进行传染而不被发现。潜伏性越好,病毒在系统中的存活时间就会越长,传染范围就会越大。
(4)破坏性。对系统而言,所有的计算机病毒都存在一个共同的危害,即降低计算机系统的工作效率,占用系统资源,具体情况取决于侵入系统的病毒程序。
(5)针对性。计算机病毒是针对特定的计算机和特定的操作系统的。如有针对 Windows系统的病毒,也有针对Unix/Linux系统的病毒。
(6)衍生性。通过分析计算机病毒的结构可知,传染的破坏部分反映了设计者的设计思想和设计目的。但是,为了规避反病毒软件的检测,提高自身的攻击能力,可以衍生出不同于原版本的新的计算机病毒,其造成的后果可能会更加严重。
(7)寄生性。病毒程序嵌入到宿主程序中,依赖于宿主程序的执行而生存,这就是计算机病毒的寄生性。病毒程序在侵入宿主程序后,一般对宿主程序进行一定的修改,宿主程序一旦执行,病毒程序就被激活,从而可进行自我复制和繁殖。
(8)不可预见性。从对病毒的检测方面来说,病毒还有不可预见性。不同种类的病毒,它们的代码千差万别,但是有些操作是有共性的。而很多新病毒多采用变形来规避检查,为检查病毒提出了新的挑战。
(9)繁殖性。病毒可以像生物病毒一样进行繁殖,当正常程序运行时,它也进行运行自身复制,是否具有繁殖、感染的特征是判断某段程序为病毒的首要条件。
计算机病毒在感染计算机过程中,表现出很多的异常行为。所谓的异常行为是指为了实现恶意程序目的而实施的行为。一些正常文件在被病毒感染时也会发生变化,从这些变化中可以找出某些特殊变化,并将其作为诊断病毒的判定依据。除此之外,病毒由于其对抗分析、实施感染等功能,在文件结构等方面也会表现出一些与正常程序不同的设置或属性。计算机病毒的行为特征如下。
(1)变形特征。从行为上,一般计算机病毒采用花指令(伪指令、垃圾指令)、混淆等技术进行变形或伪装,提高其自身的抗查杀生存能力。
(2)传染特征。计算机病毒通过各种渠道从已经感染的计算机快速扩散到未被感染的计算机。
(3)隐蔽特征。计算机病毒通常附着在正常程序中或磁盘比较隐蔽的地方,如 MBR,也有以隐藏文件的形式出现,提高其生存能力。
(4)潜伏特征。绝大多数的计算机病毒在传染后不会立即发作,需要潜伏一段时间后,等待时机成熟便会爆发,四处繁殖扩散,危害系统。
(5)破坏特征。多数计算机病毒都具有破坏性,轻则盗取或破坏敏感数据,抢占系统资源,使计算机系统运行缓慢;重则破坏计算机系统,甚至危害国家安全。
(二)结构与原理
1、计算机病毒结构
根据计算机病毒的工作流程,病毒一般包括3个模块,即引导模块、感染模块、表现模块。
(1)引导模块。实现将计算机病毒程序引入计算机内存,并使传染和表现模块处于活动状态。引导模块需要提供自我保护功能,使在内存中的自身代码不被覆盖或清除。计算机病毒程序在引入内存后为传染模块和表现模块设置相应的启动条件,以便在适当的时候或者合适的条件下激活传染模块或者触发表现模块。
(2)感染模块。包括2个子模块:感染条件判断子模块,依据引导模块设置的传染条件,判断当前系统环境是否满足传染条件;传染功能实现子模块,如果传染条件满足,则启动传染功能,将计算机病毒程序附加在其他宿主程序上。
(3)表现模块。包括2个子模块:表现条件判断子模块,依据引导模块设置的触发条件,判断当前系统环境是否满足触发条件;表现功能实现子模块,如果触发条件满足,则启动计算机病毒程序,按照预定的计划执行。
2、计算机病毒传染过程
计算机病毒传染过程可以划分为4个阶段:潜伏阶段、传染阶段、触发阶段、发作阶段。病毒传染过程如图1所示。
图1 病毒传染过程
在潜伏阶段,病毒程序处于休眠状态,用户根本感觉不到病毒的存在,但并非所有病毒均会经历潜伏阶段。如果某些事件发生(如特定的日期、某个特定的程序被执行等),病毒就会被激活,从而进入传染阶段。处于传染阶段的病毒,将感染其他程序——将自身程序复制到其他程序或者磁盘的某个区域上。经过传染阶段,病毒程序已经具备运行的条件,一旦病毒被激活,则进入发作阶段,对计算机系统、可执行文件等进行传播感染。
3、工作原理
分别介绍感染用户程序病毒、感染操作系统病毒、感染磁盘引导扇区病毒的工作原理。
(1)感染用户程序的病毒工作原理
感染用户应用程序的计算机病毒是以链接的方式对应用程序进行传染。这种病毒在一个受传染的应用程序执行时获得控制权,同时扫描计算机系统的其他应用程序。若发现这些程序,就链接在应用程序中,从而完成传染,之后返回正常的应用程序并继续执行。
(2)感染操作系统文件的病毒工作原理
感染操作系统文件的计算机病毒,是通过与操作系统中所有的模块或程序链接来进行传染。由于操作系统的某些程序是在系统启动过程中调入内存的,所以,传染操作系统的病毒是通过链接某个操作系统中的程序或模块并随着它们的运行进入内存的。病毒进入内存后在判断是否满足条件时进行传染。
(3)感染磁盘引导扇区的病毒工作原理
感染磁盘引导扇区的计算机病毒,从实质上讲,Boot区传染的病毒是将其自身附加到磁盘Boot扇区的引导程序中,并将病毒的全部或部分存入引导扇区512 byte中。
这种病毒是在系统启动的时候进入内存中,并取得控制权,在系统运行的任何时刻都会保持对系统的控制,时刻监视着系统中使用的新软盘。当一片新的软盘插入系统进行第一次读写时,病毒就将其传输到该软盘的0扇区中,而后将传染下一个使用该软盘的系统。通过感染病毒的软盘对系统进行引导是这种病毒传染的主要途径。
(三)反病毒引擎
反病毒引擎是杀毒软件的主要部分,是检测和发现病毒的程序。它是一套判断特定程序行为是否为病毒程序(包括可疑的)的技术机制。反病毒引擎是网络安全产品的重要核心模块,其在后台工作的性质,使工作机理并不为更多人了解。随着安全对抗的形势不断变化,反病毒引擎的价值和作用为更多人和厂商所认识。
反病毒引擎要将非自身程序行为过程转化为杀毒软件自身可识别的行为标识符,然后与病毒库中所存贮的行为信息进行对应,并做出相应处理。一个足够庞大的病毒库往往能够弥补杀毒软件引擎的不足。传统的反病毒软件引擎使用的是基于特征码的静态扫描技术,即在文件中寻找特定十六进制串,如果找到,就可判定文件感染了某种病毒。但这种方法在当今病毒技术迅猛发展的形势下已经起不到很好的作用。为了更好地发现病毒,相继开发了启发式、主动防御等相关技术。
反病毒引擎的发展进化,是持续对恶意代码对抗经验的形式化与总结,是各个反病毒和安全企业、团队与反病毒工作者多年努力、积累、传承的结果。
(四)清除防范技术
步入云计算、大数据时代后,恶意代码的传统清除与防范技术已经不能胜任,具有时代意义的新的清除与防范技术如云查杀、主动防御技术、软件黑白名单、大数据安全分析等逐渐得到应用和普及。
1、云查杀技术
在传统的杀毒模式中,可疑程序的收集、分析、判定都是在用户计算机(客户端)上进行的,病毒特征库也只能靠定期升级的办法来更新。这就造成查杀软件占用系统资源过高、病毒查杀率不理想的情况,而云查杀则可以大大缓解这些问题。
基于云计算服务模式,云查杀能让用户快速共享来自整个互联网的病毒特征库。在云查杀的情况下,杀毒软件的客户端在日常的监控、扫描过程中对随时发现的可疑程序,在用户选择的情况下将其发送至云端服务器进行初步分析,一旦被判定为病毒,将进一步上报并进行特征分析,最终进入病毒特征库。这样,对可疑程序的分析、判定等工作就交给云端服务器执行,大大降低了客户端系统资源的占有率,提高了病毒的查杀效率。
2、主动防御技术
主动防御技术的出现弥补了传统的病毒查杀技术和防火墙技术的不足,在病毒查杀方面,使杀毒引擎摆脱了仅仅依靠病毒特征码进行扫描的尴尬局面。主动防御是基于程序行为自主分析判断的实时保护技术,不以病毒的特征码作为判断病毒的根据,而是从最原始的病毒定义出发,直接将程序的行为作为判断病毒的依据。主动防御是用软件自动实现反病毒专家分析判断病毒的过程,解决了杀毒软件无法防杀未知恶意软件和新病毒的弊端。在反病毒与病毒的对抗中,从技术上实现了对木马和病毒的主动防御。主动防御技术具有的特点包括创立动态仿真反病毒专家系统,对病毒行为规律分析、归纳、总结,并结合反病毒专家判定病毒的经验,提炼成病毒识别规则知识库;自动准确判定新病毒;程序行为监控并举;自动提取特征值实现多重防护。
3、软件黑白名单
软件黑名单是一种防止已知恶意代码运行的简单有效的方法,其思路是,将禁止运行的软件列入到黑名单中,在软件运行前通过检查软件黑名单,禁止黑名单中所列软件的运行。目前,大多数防病毒软件的病毒特征库使用的就是黑名单技术来查杀已知病毒。但是,这种方式存在较大的滞后性,并不能发现未知的、新的恶意代码。只有在发现恶意代码并加入到黑名单之后,才能阻断该恶意代码的运行。
软件白名单的思路是,将允许运行的软件列入白名单中,只允许白名单中软件运行,任何不在白名单中的软件将被阻止运行。这种方法在防止未知恶意代码和攻击时(特别是零日攻击)非常有效,被认为是一种主动的防御方法。但是,其管理控制比较严格,而且软件白名单本身也会遭到攻击。
目前,白名单主动防御系统的同类产品主要有国际上的 Bit9、Core Trace、Faronics,国内的软件E盾、中网S3等。
4、大数据安全分析
大数据安全分析已经被人们视为网络安全领域的得力工具,给安全分析、安全预警、安全管理和安全防护提出了新思路、新机遇,并改变着未来网络安全的技术格局。
利用大数据安全分析检测APT攻击,并不只重点检测APT攻击中的某个步骤,它覆盖整个APT攻击过程。通过全面采集各网络设备的原始流量以及各终端和服务器上的日志,然后进行集中的海量数据存储和深入分析,它可在发现APT攻击的一点蛛丝马迹后,通过全面分析这些海量数据来还原整个APT攻击场景。大数据安全分析检测APT攻击,需要构建大数据存储和分析平台,可采用典型的大数据平台如Hadoop、Spark等。
目前,国内外多家公司推出防御APT的产品和解决方案,如安天、金山、Fire Eye、Bit9、趋势、RSA等。
此外,针对恶意代码的防范,可以采取如下措施。
(1)建立和规范计算机安全管理制度,制定相关的管理流程、应急处置预案等。
(2)采用操作系统加固技术,定期更新系统和应用补丁,删除不必要的软件或应用,关闭不必要的服务和网络端口;禁用缺省用户账号,更改管理员的密码;优化系统启动项,用Autorun删除除了系统进程和杀毒软件的所有启动项,给一些注册表的启动项设置只读权限。
(3)对于数据库系统,更改缺省数据管理员密码;为数据库设置访问控制策略;升级数据库系统补丁等。
(4)安装必要的恶意代码防御软件,如防病毒、防火墙、入侵检测/入侵防护等,并维护相关的安全策略和升级;建立多种告警机制。
(5)定期对主机系统进行安全扫描,检查存在的漏洞及其他安全风险,并形成风险评估报告,以指导对主机系统的安全整改。
(6)安全审计,针对主机系统的安全事件/日志,进行安全审计,发现系统和用户行为异常。
(五)不同平台下的恶意代码查杀
1、Windows平台下的恶意代码查杀
Windows系统用户占的比例较多,相对的恶意代码也很多,下面是针对Windows平台恶意代码检测给出的一些步骤和经验。
(1)手工检测基本步骤
1)查看“服务”,是否有描述信息或者名字异常的服务存在并处于启动状态。
2)检查主机开放端口,是否有非常见端口被监听。
3)检查主机当前正在运行的程序,是否有可疑程序处于活动状态。
4)检查启动项是否被添加可疑启动程序。
5)检查注册表中的自启动运行项如RUN、WINLOGON项、登录项、任务计划项和映像劫持项等,是否有恶意代码、可疑程序修改注册表启动键值。
6)检查注册表中的以下位置,是否被修改了关联文件
HKEY_CLASSES_ROOT\txtfile\shell\open\command
正常情况下为notepad.exe“%1”
HKEY_CLASSES_ROOT\hlpfile\shell\open\command
正常情况下为%Systemroot%\System32\winhlp32.exe %1
HKEY_CLASSES_ROOT\exefile\shell\open\command
正常情况下为“%1”%*
7)检查以下几个文件Win.ini、system.ini、Autoexec.bat和Config.sys,在shell、driver、run、load这些字段下,是否有可疑进程添加自启动。
8)查看文件属性,包括创建修改时间、文件大小、名字,是否与其他正常文件有异。
(2)特殊处理补充
掌握恶意代码运行启动的常见方法后,就能对症下药,提出恶意代码清除的基本步骤,主要是对上面提到的地方进行修改和恢复,但对于不同恶意代码,可能会有一些特殊的处理,具体如下。
1)许多恶意代码都会添加启动项或者注册表,或者服务项,在删除恶意代码程序之前,必须先找到这些被修改的地方进行恢复,否则是不能完全清除的,在下次启动后,恶意代码依然可以运行。
2)对于修改文件关联型的恶意代码,尤其要注意其关联方式,如果为非exe文件关联,一般较容易解决,只需注意在清除过程中,不再次打开与之相关格式的文件即可;而对于exe文件关联,则需要特别注意清除顺序,特别是注册表编辑器的打开时机,此外,还应该把注册表编辑器的后缀名从exe改为com,以避免进行文件关联修复时,运行exe文件而导致恶意代码再次自动运行。
3)有些恶意代码不仅只有一个进程在运行,为了能够长久运行不被轻易杀掉,这些代码通常采取进程互锁的方法,只有同时或在相当短的时间内将所有恶意代码进程一起结束,才能彻底结束进程,从而进行下一步的清除。
4)恶意代码为了存活,会进行一定的隐藏,来躲避系统方式的查看,这时就需要借助一些辅助工具来完成检测和查杀。
5)作为一个专业的安全工作者,很可能需要关心恶意代码实际进行的底层操作,包括API的调用、文件句柄的使用,这样能够更加直接准确地发现恶意代码程序所做的破坏行为,而这同样需要一款合适的工具,能够快速准确地监控到恶意代码运行时的情况。
6)恶意代码程序繁多,在检测和判断时,往往需要有一款工具能够对一些常见、已知的恶意代码进行总结整理以及提供查询,以加快恶意代码确定的速度。
(3)恶意代码检测经验性策略
1)文件名有数字前缀
恶意代码程序为了迷惑用户以及躲避杀毒软件,通常采用变换文件名、添加数字前缀的方法,而正常文件,名字往往简单明了,不会在前面加上一堆没有意义的数字,所以,见到文件名有数字前缀的文件,应当考虑是否为正常文件。
2)文件使用系统图标
病毒和恶意代码会盗用系统图标来保护自身,让用户认为这是系统的关键文件,因而不能轻易对其进行删除,尤其当系统没有设置“显示已知扩展名”时,盗用系统图标能起到很好的隐藏效果,如一个可执行程序盗用.sys文件的图标,让用户认为这不是一个可执行程序,不会有危害,而不会对其进行删除。因此,当一个可疑文件使用系统图标时,应当谨慎考核。
3)API数量异常
程序的存在是为了实现某些特定功能,而实际上这些功能由特定的API函数来完成,即使是一个还没有任何功能的新程序在被创建时,都会包含许多API函数,用来管理资源等。当对一个文件进行反汇编调试时,发现其只有极少的API函数,甚至没有API调用,这时应该考虑该文件是否经过加壳处理,存在可疑成分。
4)文件在系统路径下
系统路径是用来存放系统文件的地方,在系统文件夹下,文件比较固定,但种类和数量繁多,特别适合隐藏病毒和恶意代码程序,当发现可疑程序存在系统路径下,需要进行仔细检查。
5)文件无版权信息
正常文件包括系统文件、常用软件的文件等,通常会在文件资源中写上自己的版权信息,用来表明自己的合法性,而一般的病毒恶意代码很少会有版权信息。
6)文件长度过大
病毒恶意代码程序为了在网络中快速传播和在被感染主机中隐藏,通常文件长度会很小,若一个可疑程序文件长度过大,则可以判断该文件不是病毒文件。
7)文件有多扩展名
文件扩展名用来唯一表示文件的类型和打开该文件的方式,病毒、恶意代码程序为了隐藏自己或者欺骗用户运行自身,会采用多扩展名,在系统没有设置“显示已知扩展名”时,这些具有破坏性的文件只会显示部分扩展名,使用户上当受骗。
8)有非正常节名
正常的可执行程序通常都为PE文件,具有标准PE格式,其中,带有固定的节名,而病毒、恶意代码程序为了缩小文件体积或者为了改变文件特征,通常会采用加壳处理方式进行处理,造成固定的节名发生改变,从而出现一些非正常节名。
9)处于启动项中
系统在开机时会检测启动项中是否有需要加载的程序,这对病毒和恶意代码是一个很好的启动方式,如果在这里发现有可疑程序,应当特别小心。
10)文件最近创建
文件在系统中创建时会被系统记录下其创建时间,并写在文件的属性中,如果发现文件的创建时间比较近,或者当文件伪装成系统文件,放在系统路径下时,其文件创建时间与其他正常系统文件创建时间不一致,可以判定该文件具有可疑成分。
11)仿造系统文件名
病毒、恶意代码为了伪装自身,会采取伪造系统文件名的手段,通过改变字母顺序或进行很小的变换修改来迷惑用户。
12)文件使用加壳
网络是恶意代码、病毒程序的重要传播途径,而很大的病毒体在网络中传输势必造成网络速度缓慢,容易被察觉,而经过压缩壳处理后的文件,体积大大减小,同时改变了文件原本的特征,并配合某些加密壳的使用,使其能够躲避杀毒软件快速地传播,而当病毒体被捕获后,壳的存在给分析工作带来巨大的麻烦,从而可以保护文件内部的资源信息。
13)文件监听端口
具有网络行为的程序需要监听端口,恶意代码程序要进行远程控制等功能,就必须监听某个特定端口,等待攻击者的命令。当发现某个不常见的端口被占用时,应该检查是什么程序正在使用。
14)文件包含恶意API
特定的文件使用特定的API来实现某些指定功能,而恶意代码病毒程序往往使用一些恶意的API函数来达到提升权限、修改注册表、读取文件、进行网络连接、窃取信息、发起攻击等目的。
15)文件中包含邮件信息
文件中包含邮件信息,如E-mail地址,E-mail的标题、正文等信息,很有可能就是该文件在运行后,将获取到的信息发送到攻击者的邮箱中或者将病毒自身作为附件,附在文件体内包含的E-mail的标题、正文等信息后,组成一封邮件发送出去,达到传播的目的。
16)嵌入PE程序
当文件中嵌入PE程序时,很有可能这是一个能够自解压或者自身能够释放出体内可执行程序的程序。将真正的病毒体隐藏在外部文件中,通过加密、压缩等手段能躲避杀毒软件的监控扫描。当该外部程序传播到目的地后,自行释放并运行体内的PE程序,达到病毒传播运行的目的。
2、Unix/Linux平台下的恶意代码查杀
同Windows系统相比较,Unix/Linux系统的恶意代码危害会少一些,但仍然存在,其他针对Unix系统的网络蠕虫、木马、后门和rootkit也时有报道。最早的网络蠕虫就是在Unix系统中爆发的。所以,Unix/Linux系统的恶意代码查杀也是至关重要的。
手工检测基本步骤如下。
(1)检查系统密码文件,查看文件修改日期。
ls -l /etc/passwd
(2)查看passwd文件中有哪些特权用户。
awk -F: '$3==0 {print $1}' /etc/passwd
(3)查看系统里有没有空口令账户。
awk -F: 'length($2)==0 {print $1}' /etc/shadow
(4)检查系统守护进程。
cat /etc/inetd.conf | grep -v“^#”
(5)检查网络连接和监听端口。
netstat –an
netstat –rn
ifconfig –a
(6)查看正常情况下登录到本机的所有用户的历史记录。
last
(7)查看系统环境变量,是否发现异常。
cat /etc/profile
(8)查看驱动和内核模块,是否发现异常。
lsmod
(9)检查系统中的core文件。
find /-name core -exec ls -l {}\;
(10)检查系统文件完整性。
rpm –qf /bin/ls
rpm -qf /bin/login
md5sum –b 文件名
md5sum –t 文件名
(11)查看当前级别下开机启动程序,是否有异常。
ls -al /etc/rc.d/rc3.d
(12)检查计划任务,root用户和Web运行用户各检查一遍,是否有任何异常。
crontab -l
(13)查看各用户变量,是否有异常。
cat /root/.bashrc 和 cat /home/用户/.bashrc
(14)查找是否有后门。
cat /etc/crontab
ls /var/spool/cron/
cat /etc/rc.d/rc.local
ls /etc/rc.d
ls /etc/rc3.d
find /-type f -perm 4000
(15)查看系统日志,是否发现异常(考虑到可能的日志擦除,重点查看日志的连续性,是否有明显的空白时间段)。
/var/log/messages(进程日志)
/var/log/wtmp(系统登录成功日志 who /var/log/wtmp)
/var/log//bmtp(系统登录失败日志)
/var/log/pureftpd.log(pureftpd的连接日志)
(16)history 查看命令历史,cat /home/用户/.bash_history 查看各用户命令记录,是否有异常。
(17)日志分析完毕,查找可能存在的webshell。方法有2种:一是在服务器上手动查找;二是将Web程序下载到本地,使用webshellscanner或者Web杀毒等软件进行查杀。考虑到站点较多、数据量大,按第一种方法来进行。
1)在Linux上查找webshell,基本2个思路,即修改时间和特征码查找。
2)特征码例子。find 目录-name “*.php”(asp、aspx或jsp) |xargs grep “POST[(特征码部分自己添加)”| more 。
3)修改时间。查看最新3天内修改的文件,find 目录 -mtime 0 -o -mtime 1 -o -mtime 2,当然也可以将两者结合在一起,find 目录 -mtime 0 -o -mtime 1 -o -mtime 2 -name “*.php”的确查找到了一些停用的站点下有webshell。
(18)一个被怀疑感染了 rootkit 的计算机上检测 rootkit 是不可靠的或不可信的。rootkit可以篡改多种工具和其他所有程序赖以运行的库文件,因此,rootkit检测的基本问题是,如果当前系统已经被rootkit破坏,那么它就不再值得信任。具体而言,管理员的一些操作,如列示正在运行的程序列表、列示一个文件夹内的所有文件等都未必是最初的设计者所期望的。总之,在一个活动的计算机上运行rootkit检测程序,要想其发挥作用,只能建立在一个假设基础上,即假设所检测到的rootkit并没有采取隐藏自己的机制。检测rootkit的最好方法是关闭被怀疑感染rootkit的计算机,然后用另外一个干净的硬盘或其他媒体启动计算机,这样即便该计算机已经被感染,rootkit也不会运行,再用相关的检测软件实施检查。因为一个没有运行的rootkit是无法隐藏自己的,所以,可以使用一些专门的反rootkit工具来检查和清除rootkit。如Linux平台的chkrootkit、rkhunter、OSSEC、zeppoo等。
恶意代码的检测策略如下。
(1)出现不明用户账号
用户账号是用户的身份标志,由用户名和口令组成。用户名存放在/etc/passwd文件中,口令以加密的形式存放在/etc/shadow文件中。在正常情况下,这些口令和其他信息由操作系统保护,能够对其进行访问的只能是超级用户(root)和操作系统的一些应用程序。但是,如果配置不当或在一些系统运行出错的情况下,这些信息很可能被非法用户得到,带来安全隐患。对此,应该设置口令过期时间,提高口令复杂度并设定口令验证次数,尽量少地分配root用户权限,当发现一些陌生的用户登录并执行某些操作时,则认为系统可能被入侵,应定时清理一些没有必要的用户和组。
(2)文件权限异常篡改
如同其他系统一样,Linux 文件系统的安全主要是通过设置文件的权限来实现的。每一个Linux的文件或目录,都有3组属性,分别定义文件或目录的所有者、用户组和其他人的使用权限,主要有只读、可写、可执行、允许SUID、允许SGID等。在这里需要注意,权限为SUl D和SGID的可执行文件,在程序运行过程中,会给进程赋予所有者的权限,非法用户很容易发现这种情况,如果加以利用,就会给系统造成极大危害。查找文件权限和最近修改的文件,如果出现异常,则可能是攻击者对文件进行了修改。
(3)文件名和大小异常
Linux 系统下一切皆文件,有一些攻击者模仿系统文件名,以迷惑用户,当发现一些文件名类似系统文件名字时,应该格外关注这些文件,检测其是否有异常。一些恶意程序文件经过压缩壳处理,体积大大减小,配合某些加密壳的使用,使其能够躲避杀毒软件快速地传播,而当病毒体被捕获后,壳的存在给分析工作带来巨大麻烦,从而可以保护文件内部的资源信息。因此,对于一些过大文件应不是病毒程序。
(4)Linux的系统日志文件被篡改、替换、删除
Linux的日志文件用来记录整个操作系统使用状况。下面介绍几个重要的系统日志文件。/var/log/1astlog 文件,此文件中记录最后登录系统的用户登录时间、是否登录成功等信息。管理员登录后可以用lastlog命令查看文件中记录的所用账号的最后登录时间,再与自己的使用记录对比一下,就可以发现该账号是否被非法用户盗用。/var/log/secure文件,此文件记录系统自开通以来所有用户的登录时间和地点,可以给系统管理员提供更多的参考。/var/log/wtmp文件,此文件可以用last命令查看历史上登录到系统的用户的登录时间和注销时间等信息,删除这个文件可以清除系统登录信息,然后,系统会生成新的登录信息。当日志被改写、替换、清除时,则肯定是有人刻意为之,应当注意。
(5)系统频繁出现卡顿现象
当系统出现卡顿的情况时,首先要查看CPU和内存的使用情况,看看CPU和内存是否异常升高,如果CPU和内存被某进程大量占用,并且此进程为未知进程,那么可以判定,当前系统正在被入侵并执行恶意程序,应终止恶意程序的执行,一些恶意进程设置了守护,此时应该查看守护进程,去除守护进而终止恶意进程。
(6)系统带宽被大量占用
系统在感染病毒之后会被他人利用,常见的就是作为主机攻击。另外,如获取用户数据之类的行为,都需要通过网络,占用带宽发送数据。所以,需要注意,如果系统被占用的带宽很高,那肯定存在异常,需要及时检查一下,查看当前网络状况,判断是什么大量占用带宽,以做出处理。
(7)开机启动一些不明服务和crond任务里有一些来历不明的任务
一些病毒会随系统的启动而启动,伪装系统服务来迷惑用户,因此,发现此类不明服务时要检查一下启动的服务或者文件是否有异常,一般会在/etc/rc.local显现出来。还有一些不明来历的定时任务,这些任务可能会在无人看守时段,执行一些恶意程序,使用户察觉不到,可以使用crondtab-l查看定时任务,如果有一些不明的任务,那么说明可能已被入侵。
(8)端口被不明占用
攻击者可以根据端口扫描,然后再进行密码扫描,默认的端口往往就是扫描器的对象,他们扫描一个大的IP 段,例如,那些开放22端口的认为是ssh服务的Linux系统,所以,才会猜这机器的密码。当一些端口被不明占用时,可能是攻击者正通过该端口对系统进行攻击。
(9)加载一些不明的内核模块
Linux中已经存在各种rootkits,很多都是通过可加载内核模块来实现的,包括利用IDT实现系统调用的劫持技术来实现文件隐藏、进程隐藏、网络连接的隐藏以及模块本身的隐藏等,通过加载内核模块的方式,从底层对Linux系统产生威胁,这种方式相对于普通威胁更为严重、更难以发现。因此,当查看已经加载的内核模块时,发现一些不明的内核模块,很有可能这是攻击者所加载的恶意模块。
(10)异常收发大量垃圾邮件
许多垃圾邮件制造者利用一些工具使发件人的邮件地址变成随机地址,一般的查杀方法很难起到作用。针对这种情况,可以通过查看邮件日志和网络的SMTP(25)端口的连接情况,找出数目比较高的IP和连接数比较高的IP,用防火墙来对这些IP进行拒收,从网络层就拒收这些垃圾邮件,同时也有相当高的效率。因此,当有邮件异常收发时,很有可能邮件系统被攻击,可以设置垃圾邮件控制规则,使用实时黑名单等方法。
3、移动平台下的恶意代码查杀
移动平台是当前发展较快的平台,比较主流的平台有i OS、Android等。下面以目前比较流行且恶意代码威胁形势严峻的Android平台进行重点说明。
手工检查基本步骤如下。
(1)查看设备管理器,是否有非常见或异常的管理器被激活。
(2)检查手机的常驻服务,是否有可疑服务,特别是以Android、Google等为名称的伪装服务。
(3)检查手机应用程序列表,是否有不熟悉或可疑应用,特别是没有启动图标的应用。
(4)检查是否有拦截短信能力的应用。
(5)检查是否有开机自启动能力的应用。
(6)检查通知栏是否有异常广告或信息弹出,特别是单击下载应用后的情况。
(7)检查界面突然弹出广告,或在主流应用如微信、淘宝等界面突然弹出广告。
(8)检查申请root权限的应用。
(9)查看sdcard的download目录是否有可疑的APK文件。
由于移动平台一般有成熟的权限控制体系,恶意代码的清理相对而言比较简单。
对于大部分恶意代码应用,直接通过手机应用管理界面卸载,或通过PC连接手机通过命令行,如adb uninstall 卸载等。
对于刷过机或者提权的手机,可能存在系统应用恶意代码或者是具有root权限的恶意代码,可以采用如下方式清理:
(1)对于系统应用APK形态的恶意代码,删除其apk文件和odex文件;
(2)删除释放的so或其他数据文件;
(3)对于感染或替换的系统文件或数据文件,如init.rc等,需要使用原有系统文件和数据文件还原。
由于这类恶意代码具有较高权限,可能对系统有大量修改或破坏,建议在专业人员帮助下清理,或使用专杀工具清理。
由于移动平台恶意代码从PC平台恶意代码发展而来,很多宝贵经验和技术可以使用和借鉴。恶意代码检测策略如下。
(1)程序名、包名与系统应用或知名应用相似
恶意代码程序为了迷惑用户以及躲避杀毒软件,通常会用与系统应用、系统功能或者知名应用的插件、辅助功能名称的变换名为掩护。如果程序名、包名中,包含Google、Android或者其他知名厂商应用名称变换的较为可疑。如amazon、baldu等。
(2)文件使用系统图标或者没有启动图标
病毒和恶意代码盗用系统图标来保护自身,让用户认为这是系统的关键文件,不能轻易对其进行删除,因而,盗用系统图标能起到很好的隐藏效果。如伪装成系统设置的恶意应用。
(3)文件签名信息异常
主流应用发布的应用一般都会用能够标识自身的签名信息,如果应用的签名信息特别普通或者具有明显恶意性含义,则可能存在问题。如有恶意代码使用“cn=cao”这样的签名字串。
(4)具有开机自启动能力
系统在开机时会检测启动项中是否有需要加载的程序,这对病毒和恶意代码是一个很好的启动方式,如果在这里发现有可疑的程序,应当特别小心。
除上述检测方式外,还有一些检测方式是移动平台所独有的。
(5)具有拦截短信能力
目前,很多恶意代码具有拦截短信能力,其通常有2种:拦截扣费服务的回执短信;拦截并转发支付验证码短信。短信可能与购买、支付等活动密切关联,因此,具有短信拦截能力的应用需要重点检测。
(6)非官方签名的知名应用
由于移动平台重打包技术的存在,恶意代码作者可以在知名应用中插入具有恶意功能的代码。重打包后的应用具有原有应用所有功能,因此极难发现。但由于恶意代码作者无法获得官方签名,因此重打包应用的签名与原有应用肯定不同。
(7)Logcat日志检测
Logcat是应用开发调试的输出渠道,恶意代码常常遗留一些日志信息在代码中。因此Logcat日志中可以看到一些与恶意代码相关的调试信息,例如“收到指令”“拦截XX短信”等。
(六)案例
对于普通用户而言,可以使用自动化、智能化的商业或免费杀毒软件对恶意代码进行查杀。对于未知恶意代码的查杀,需要借助专业反病毒厂商的专杀工具或者专业人士手工进行查杀。当前的主流反病毒产品不仅具备对病毒的广谱查杀功能,也提供对木马、蠕虫、后门等其他恶意代码的综合查杀功能。下面以手工查杀案例为例进行简要介绍。
1、案例1:威金病毒
该病毒集文件型病毒、蠕虫病毒、病毒下载器于一身,传播能力非常强。该病毒会破坏用户的一些软件,使其无法使用。“威金蠕虫”是一个能在Windows系统上运行的蠕虫病毒,通过感染文件、局域网以及其他病毒下载传播。该病毒还会自动在后台下载并运行“QQ通行证”等其他病毒,窃取用户QQ及网络游戏的账号和密码并发送给黑客。由于该病毒在编写上存在一些问题,可造成一些用户的软件被破坏,无法使用。
威金病毒手动清除方案为:启动系统时,建议选择安全模式启动;把当前的杀毒软件升级到最新病毒库后进行查杀;viking(威金)病毒会建立_desktop.ini文件,查杀病毒过后,要手工删除_desktop.ini文件。方法如下。
打开开始菜单,单击运行,输入“CMD”打开DOS窗口,然后输入del c:\_desktop.ini /f/s /q /a,强制删除c盘所有目录内(包括c盘本身,完成后,将c盘依次替换成 d、e等盘再进行查杀)的_desktop.ini文件。
在这条命令语句中,各命令参数的释义如下:/f 强制删除只读文件;/q 设置安静模式,不显示删除提示框;/s 从当前目录及其所有子目录中删除指定文件,显示正在被删除的文件名;/a 按照属性进行删除,这个命令的作用是在杀掉 viking 病毒之后清理系统内残留的_desktop.ini文件。
(1)如果用户机器在局域网中,则需要利用批处理文件批量删除共享文件。
net share c$/del
net share d$/del
net share e$/del
net share f$/del
net share admin$ /del
net share ipc$ /del
(2)创建一个批处理文件,并在写入如下内容后执行(安全起见,每个盘都要查杀)。
del c:\_desktop.ini /a/f/s/q
del d:\_desktop.ini /a/f/s/q
del e:\_desktop.ini /a/f/s/q
del f:\_desktop.ini /a/f/s/q
在这条命令语句中,各命令参数的释义如下:/f 强制删除只读文件;/q 设置安静模式,不显示删除提示框;/s 从当前目录及其所有子目录中删除指定文件,显示正在被删除的文件名;/a按照属性进行删除。
(3)创建以下几个文件后复制到c:\windows下(都是零字节,用来覆盖替换病毒文件)。
Logo1_.exe
rundl132.exe
0Sy.exe
v Dll.dll
1Sy.exe
2Sy.exe
rundll32.exe
3Sy.exe
5Sy.exe
1.com
exerouter.exe
EXP10RER.com
finders.com
Shell.sys
smss.exe
(4)创建一个批处理文件,并在写入如下内容后执行,执行完毕后重启系统(给上面创建的文件加属性)
attrib c:\windows\Logo1_.exe +s
attrib c:\windows\rundl132.exe +s
attrib c:\windows\0Sy.exe +s
attrib c:\windows\v Dll.dll +s
attrib c:\windows\1Sy.exe +s
attrib c:\windows\2Sy.exe +s
attrib c:\windows\rundll32.exe +s
attrib c:\windows\3Sy.exe +s
attrib c:\windows\5Sy.exe +s
attrib c:\windows\1.com +s
attrib c:\windows\exerouter.exe +s
attrib c:\windows\EXP10RER.com +s
attrib c:\windows\finders.com +s
attrib c:\windows\Shell.sys +s
attrib c:\windows\smss.exe +s
2、案例2:Gh0st Rat
Gh0st Rat 是一款经典的远程控制软件,常被黑客用来控制主机,一旦用户主机上中了Gh0st的服务端软件(Gh0st木马),攻击者就能通过Gh0st控制端控制主机,完成各种操作。同时,Gh0st 木马在运行时也会删除自身,并通过创建注册表和添加服务等行为达到在主机上持久驻留的目的。
Gh0st木马行为分析如下。
注册表创建如下键值:
HKEY_LOCAL_MACHINE\SYSTEM\Control Set001\Services\6to4
HKEY_LOCAL_MACHINE\SYSTEM\Control Set001\Enum\Root\LEGACY_6TO4
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Enum\Root\LEGACY_6TO4
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\6to4
创建服务:
%System Root%\System32\svchost.exe -k netsvcs
根据木马的行为分析结果,能够提出相对应的处置方案。常规的处置方案是打开开始菜单、单击运行、在对话框中输入regedit并敲击回车键、进入注册表编辑器、依次找出相应表项、删除键值,而后再关闭服务进程,达到清除木马的目的。但是在上述操作中,会有如下2个问题。
(1)注册表LEGACY_6TO4键值无法删除。
(2)利用资源管理器查找服务的进程 svchost.exe,会发现进程列表中,有多个svchost.exe。如果全部删除,则会终止正常的系统进程和服务,造成系统异常甚至死机的后果。
为了避免上述问题,彻底清除Gh0st木马,本案例利用ATOOL这一分析工具作为辅助工具讲解清除木马的过程。
(1)打开ATOOL工具,并在左侧的工具列表中单机基本工具,并在下拉菜单中选择端口管理。选中后,选择连接状态为ESTAB(establish)的svchost.exe进程选项,获取PID。图2中“箭头”标注部分即为确定由Gh0st木马创建的服务进程。
图2 由Gh0st木马创建服务进程
(2)在左侧的基本工具下拉菜单中选择进程管理,并在右侧刷新的进程列表中选中PID为1748的进程,选中后,下方的dll调用窗口会同步刷新,在该窗口中可以发现Gh0st 的默认服务名称6to4.dll,如图3所示。这说明选中的进程即为Gh0st木马创建的服务进程。在该进程上右击,选择终止进程。Gh0st木马的服务进程即被终止,主机摆脱控制端的控制。
图3 Gh0st木马的默认服务名称6to4.dll
(3)在基本工具下拉菜单中选择服务管理,单击后右侧会刷新当前系统的服务列表,输入“6”(搜索6to4服务),即可找到Gh0st的默认服务名称6to4ex.dll。右键单击,选择删除,即可删除6to4服务。打开注册表编辑器,会发现木马分析提到的注册表的键值已被ATOOl工具清理完毕。
(4)重启系统,至此,Gh0st 木马清除工作顺利完成。
二、流氓软件清理
(一)流氓软件清理概述
流氓软件没有确切的定义。从技术上讲,恶意广告软件、间谍软件、恶意共享软件等都处在合法商业软件和电脑病毒之间的灰色地带。它们既不属于正规商业软件,也不属于真正的病毒;既有一定的实用价值,也会给用户带来种种干扰,人们称这种软件为流氓软件。
1、流氓软件的定义
业界各方根据自己的理解给出了相关描述,常见的有以下4种。
(1)中国反流氓软件联盟对流氓软件的定义
流氓软件从技术上讲,恶意广告软件、间谍软件、恶意共享软件等都处在合法商业软件和电脑病毒之间的灰色地带。它们既不属于正规商业软件,也不属于真正的病毒;既有一定的实用价值,也会给用户带来种种干扰,称这种软件为流氓软件。
(2)中国互联网协会对恶意软件的定义
恶意软件是指在未明确提示用户或未经用户许可的情况下,在用户计算机或其他终端上安装运行,侵害用户合法权益的软件,但不包含我国法律法规规定的计算机病毒。
(3)互联网实验室对流氓软件的定义
流氓软件也称恶意软件或不良软件,是指在利益驱动下,降低甚至剥夺用户对软件操作的自主权、控制权,包括但不限于未明确提示用户或者未经用户许可情况下,通过隐蔽手段在用户计算机或其他终端上强行安装运行,且不容易卸载的软件。
(4)维基百科对流氓软件的定义
符合如下条件(主要是第一条)的软件的一种称呼。
1)采用多种社会和技术手段,强行或者秘密安装,并抵制卸载。
2)强行修改用户软件设置,如浏览器的主页、软件自动启动选项、安全选项。
3)强行弹出广告,或者其他干扰用户、占用系统资源行为。
4)有侵害用户信息和财产安全的潜在因素或者隐患。
5)与计算机病毒联合侵入用户计算机。
6)停用杀毒软件或其他电脑管理程序来做进一步的破坏。
7)未经用户许可,或者利用用户疏忽、缺乏相关知识,秘密收集用户个人信息、秘密和隐私。
8)恶意篡改注册表信息。
9)威胁恐吓或误导用户安装其他的产品。
2、流氓软件的分类
(1)广告软件
广告软件是指未经用户允许,下载并安装在用户电脑上;或与其他软件捆绑,通过弹出式广告等形式牟取商业利益的程序。部分广告软件以广告为目的,如会不断弹出“电脑网络”或“系统性能低落”等广告。许多用户未经详查,便会不慎地同意免费软件的最终用户许可协议(EULA),进而安装以广告为目的的广告软件。广告软件也可以由其他人安装在别人的电脑上,有时甚至并未经其许可。有的会自动运行,虽然大部分对电脑无害,但通常这类程序经常在系统中造成恼人效果,并多少会影响用户使用电脑。这类软件通常通过与特定免费软件搭配分别安装。广告软件也经常与间谍软件串连起来安装。
(2)间谍软件
间谍软件(Spyware)是在未经用户许可的情况下搜集用户个人信息的计算机程序。这个词在1994年创建,但是到2000年才开始广泛使用,并且和广告软件以及恶意软件经常互换使用。间谍软件本身就是一种恶意软件,用来侵入用户计算机,在未经用户许可的情况下有意或者无意地对用户的计算机系统和隐私权进行破坏。
间谍软件采用一系列技术来记录用户的个人信息,如键盘录制、录制用户访问 Internet的行为,以及扫描用户计算机上的文件。间谍软件的用途也多种多样,从盗窃用户的网上账户(主要是银行信用卡账户)、密码到统计用户的网络行为意作为广告用途。一些间谍软件统计用户访问的网站并且不断在用户计算机上弹出广告窗口,但是,更多间谍软件搜集用户的密码信息以侵占用户的财产。
(3)浏览器劫持软件
“浏览器劫持”就是故意误导浏览器的行进路线的一种现象,常见的浏览器劫持现象有访问正常网站时被转向到恶意网页、当输入错误的网址时被转到劫持软件指定的网站、输入字符时浏览器速度严重减慢、IE 浏览器主页/搜索页等被修改为劫持软件指定的网站地址、自动添加网站到“受信任站点”、不经意的插件提示安装、收藏夹里自动反复添加恶意网站链接等,不少用户都深受其害。从软件方面来说,浏览器劫持软件是一种恶意程序,通过DLL插件、BHO、Winsock LSP等形式对用户的浏览器进行篡改,使用户浏览器在访问正常网站时被转向到恶意网页、IE浏览器主页/搜索页等被修改为劫持软件指定的网站地址等。
浏览器一旦被劫持,就意味这用户无法决定自己的电脑里将被存放进什么资料,这无疑存在巨大安全隐患。如今的互联网络环境可谓处处是“浏览器劫持”式的陷阱,单凭普通用户被动的事后修正无异于亡羊补牢;而是需要全世界互联网使用者把好公众舆论和道德走向这关。
(4)行为记录软件
行为记录软件是指未经用户许可,窃取并分析用户隐私数据,记录用户电脑使用习惯、网络浏览习惯等个人行为的软件。
(5)恶意共享软件
恶意共享软件是指某些共享软件为了获取利益,采用诱骗手段、试用陷阱等方式强迫用户注册,或在软件体内捆绑各类恶意插件,未经允许即将其安装到用户机器里。
(6)其他
随着网络的发展,“流氓软件”的分类也越来越细,一些新种类的流氓软件不断出现,分类标准必然会随之调整。
3、流氓软件行为特征
(1)强制安装:指未明确提示用户或未经用户许可,在用户计算机或其他终端上安装软件的行为。
(2)难以卸载:指未提供通用的卸载方式,或在不受其他软件影响、人为破坏的情况下,卸载后仍然有活动程序的行为。
(3)浏览器劫持:指未经用户许可,修改用户浏览器或其他相关设置,迫使用户访问特定网站或导致用户无法正常上网的行为。
(4)广告弹出:指未明确提示用户或未经用户许可,利用安装在用户计算机或其他终端上的软件弹出广告的行为。
(5)恶意收集用户信息:指未明确提示用户或未经用户许可,恶意收集用户信息的行为。
(6)恶意卸载:指未明确提示用户、未经用户许可,或误导、欺骗用户卸载其他软件的行为。
(7)恶意捆绑:指在软件中捆绑已被认定为恶意软件的行为。
(8)其他侵害用户软件安装、使用和卸载知情权、选择权的恶意行为。
(二)技术原理
1、流氓软件工作原理
流程软件工作原理如图4所示。
图4 流氓软件工作原理
(1)浏览器劫持与BHO
浏览器劫持是一种不同于普通病毒木马感染途径的网络攻击手段,是通过浏览器辅助对象(BHO,Browser Helper Object)的技术手段进入用户系统的。BHO 是微软推出的作为浏览器对第三方程序员开放交互接口的业界标准,通过简单的代码就可以进入浏览器领域的“交互接口”。通过这个接口,程序员可以编写代码获取浏览器的行为,如“后退”“前进”“当前页面”等,利用BHO的交互特性,程序员还可以用代码控制浏览器行业,如修改替换浏览器工具栏、添加自己的程序按钮等,这些在系统看来都是没有问题的。BHO原来的目的是为了更好地帮助程序员打造个性化浏览器,以及为程序提供更简洁的交互功能,现在很多IE个性化工具就是利用BHO来实现的。
但是,BHO同样也具备实现流氓软件所需要的一切功能,于是就有了“浏览器劫持”,且各种技术(如 DLL插件等)插件通过BHO接口对用户浏览器进行篡改。安装后,它们会成为浏览器的一部分,可以直接控制浏览器进行指定的操作,根据需要,可以让用户打开指定的网站,甚至收集系统中的各种私密信息。如IE主页被篡改、开机就会弹出广告等。目前,浏览器劫持已经成为用户最常见的威胁之一。
(2)修改注册表
注册表是 Windows 的“根”,可以说,是流氓软件就会修改注册表。如在辛辛苦苦清理了恶意劫持后,重新一启动,会发现一切又都恢复了,这就是由于流氓软件不仅仅修改了与IE有关的注册表项,同时注册表中用于程序启动的项也被它们篡改了。
作为一个流氓软件,首先要做到的是实时运行。流氓软件修改注册表的自启动项,添加流氓软件到自启动项,在系统启动时自动加载,早先的很多流氓软件经常采用这种方法,如3721。事实上,注册表作为Windows的根,与绝大多数的系统行为都有关系,流氓软件要达到其恶意行为必须在注册表中多建立或修改相关键和键值。
(3)使用驱动层的保护技术
当注册表被越来越多地研究透彻后,流氓软件就把目标转向了如何实现无启动项运行,于是就有了驱动级的劫持技术。这种技术可以实现没有启动项也能自启动。系统启动时,最先启动的就是系统驱动,如果程序伪装成一般的驱动,系统就不会管它是否有害,一律按驱动载入。由于是驱动技术,程序可以非常轻松地隐藏自己,不管是进程信息还是文件实体,甚至通信端口和流量都可以。在这样强大的隐藏技术面前,任务管理器或是一般的进程查看软件,甚至注册表工具都失去了作用,这种形式的后门被称为Rootkit。
(4)使用Hook技术
Hook(钩子)是Windows中经常使用的技术之一,它利用Windows中消息机制的处理特点,监视Windows系统中消息的传递,并在消息到达目的地之前, 将其截获并根据用户要求做出相应处理。另外,由于Hook可以使程序方便地进入其他进程地址空间,因此也是许多流氓软件使用的一项基本技术。
(5)使用Winsock LSP
有时候,在彻底清除了流氓软件的所有文件,重启电脑后,系统终于正常了,却无法上网了。这是因为“LSP”被破坏。LSP全称为分层服务提供商(Windows Socket Layered Service Provider),简单地说,它是Windows底层网络 Socket 通信需要经过的大门,而流氓软件把自己加进去后,就可以截取、访问、修改网络的数据分组,自然可以随意地添加广告,还能获取访问习惯。流氓软件使用LSP的另一个好处就是可以不分浏览器类型进行劫持,不管是IE、Maxthon,还是Opera、Firefox都难逃一劫。由于LSP工作在底层,在不知情的情况下把 LSP的DLL文件删除,就出现无法上网的现象。
2、流氓软件检测原理
对于恶意软件检测技术来说,应用程序的特征是非常重要的。恶意软件检测存在2种通用技术:静态检测和动态检测。2种技术各有优缺点,在现实中,大量的方法都是同时包含动态技术和静态检测技术。
静态分析涉及到二进制相关的技术,包括反编译、逆向分析、模式匹配和静态系统调用分析等。静态分析技术有一个共同的特点:应用程序不被执行。基于Android平台手机端应用的扫描技术一般都采用签名静态比对。静态分析的优点是简单并且快速,但是它最大的缺点是扫描恶意软件前需要知道已知恶意软件的信息,如签名、行为模式、权限申请等,使其不能实现自动扫描并适应未知恶意程序的功能。
动态检测技术的核心过程将应用程序运行在一个封闭的环境并进行监视,从而分析应用程序的行为特征。很多参数都可以被动态分析采集,如文件权限改变、进程和线程运行情况、系统调用情况、网络访问情况等。因为动态检测需要应用程序实时运行,并且采集应用程序的动态数据需要较长的时间,所以它比静态分析更复杂。
(三)流氓软件主要危害
流氓软件的主要危害如下。
1、广告软件危害
此类软件往往会强制安装并无法卸载;在后台收集用户信息牟利,危及用户隐私;频繁弹出广告,消耗系统资源,使其运行变慢等。
如用户安装某下载软件后,会一直弹出带有广告内容的窗口,干扰正常使用。还有一些软件安装后,会在IE浏览器的工具栏位置添加与其功能不相干的广告图标,普通用户很难清除。
2、间谍软件危害
用户的隐私数据和重要信息会被“后门程序”捕获,并被发送给黑客、商业公司等。这些“后门程序”甚至能使用户的电脑被远程操纵,组成庞大的“僵尸网络”,这是网络安全的重要隐患之一。
如某些软件会获取用户的软硬件配置,并发送出去用于商业目的。
3、浏览器劫持危害
用户在浏览网站时会被强行安装此类插件,普通用户根本无法将其卸载,被劫持后,用户只要上网就会被强行引导到其指定的网站,严重影响正常上网浏览。
如一些不良站点会频繁弹出安装窗口,迫使用户安装某浏览器插件,甚至根本不征求用户意见,利用系统漏洞在后台强制安装到用户电脑中。这种插件还采用不规范的软件编写技术(此技术通常被病毒使用)来逃避用户卸载,往往会造成浏览器错误、系统异常重启等。
4、行为记录软件危害
危及用户隐私,可能被黑客利用来进行网络诈骗。
如一些软件会在后台记录用户访问过的网站并加以分析,有的甚至会发送给专门的商业公司或机构,此类机构会据此窥测用户的爱好,并进行相应的广告推广或商业活动。
5、恶意共享软件危害
使用“试用陷阱”强迫用户进行注册,否则可能会丢失个人资料等数据。软件集成的插件可能会造成用户浏览器被劫持、隐私被窃取等。
如用户安装某款媒体播放软件后,会被强迫安装与播放功能毫不相干的软件(搜索插件、下载软件)而不给出明确提示;并且用户卸载播放器软件时不会自动卸载这些附加安装的软件。
(四)清除与防范
1、智能手机等移动端清除与防范
(1)安卓系统,只通过官方进行升级,不要选择第三方提供的刷机软件包;i OS系统,只通过官方进行升级,不要越狱。
(2)从可靠的应用商店下载APP,不要安装未知来源的APP,选择信誉良好的APP下载使用。
(3)安装APP时不要勾选其他无关的功能组件。
(4)可通过手机系统提供或第三方安全软件提供的功能,拒绝APP访问通信录、通话记录、短信、微信、QQ、个人银行客户端、照片和视频、地理位置等个人隐私信息;如果确实为软件所需,如地图、导航APP获取地理位置,应慎重开启,无关功能一律禁止。
(5)适度安装信誉良好的安全软件,定期扫描手机;同时禁止打开安全软件无关的功能,禁止访问无关信息,防范监守自盗。
(6)不要点击免费软件弹出的广告。
(7)尽量访问知名、熟悉、信誉良好的网站,慎重访问陌生网站,访问时不单击无关的链接。
(8)有些软件安全包不是用户知情、主动下载的,应立即删除不要安装。
(9)注意上网流量的变化,如果在手机用户不知情的情况下大量增加,应该通过手机提供或安全软件提供的功能,查看流量记录,可疑软件立即卸载。
(10)应适时查看手机后台运行的软件,当下不需要功能要终止运行。
2、PC等固定终端清除与防范
(1)及时给操作系统打补丁,启用操作系统自动更新功能。
(2)从可靠的网站下载软件,不要安装未知来源的软件,选择信誉良好的软件下载使用。
(3)在安装软件时注意仔细阅读用户许可协议,在安装步骤中,出现附件的软件或功能时,不要勾选。
(4)平时使用时尽量使用普通账户,需要时再开启管理员账户。
(5)尽量访问知名、熟悉、信誉良好的网站,慎重访问陌生网站,访问时不单击无关的链接;打开电子邮件附件或图片时要加倍小心。
(6)应安装装信誉度良好的安全软件。
(7)随时关注系统变化,如突然系统运行速度和上网速度发生变化,应使用安全软件扫描操作系统,发现流氓软件立刻查杀。
(五)流氓软件清除实例
手动查杀流氓软件对专业背景要求比较高,对普通用户而言,需要借助专业化的安全工具来查杀。下面通过一个实例来说明如何查杀名为TD4L的Bootkit,这款流氓软件感染的是物理硬盘的主引导记录(MBR)。
主引导记录又叫作主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,主引导记录最开头是第一阶段引导代码,是先于操作系统引导代码执行,它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。
Bootkit是Rootkit的一类,这类流氓软件主要感染硬盘的主引导扇区,或者一个分区的卷引导记录(VBR)。可以认为,所有在开机时比操作系统内核更早加载,实现内核劫持的技术,都可以称为Bootkit。Bootkit通过感染MBR的方式,实现绕过内核检查和启动隐身。Bootkit的实现原理就是将(MBR/VBR)的代码置换掉,一旦成功,恶意驱动程序会注入用户进程执行恶意操作,如从定向网页查询到恶意网站或打开广告。
在这个实例中,以一台感染了TD4L的计算机作为场景,共分3个主要步骤来展示如何通过名为Rogue Killer的安全软件来查杀TD4L。
1、自动检测
首先,在感染了名为TD4L的机器上,安装一款名为Rogue Killer的安全软件,运行Rogue Killer检测本机,发现被感染的进程及相关信息,如图5所示。
图5 Rogue Killer对检测到被TD4L感染的进程
2、人工确认
进一步,可人工查看Rogue Killer软件的检测日志,验证检测结果,示例详情如下。
Vérification MBR :
\\.\PHYSICALDRIVE0 TDL4 -> Trouvé(e)
+++++ Physical Drive0: VBOX HARDDISK +++++
— User —
[MBR] c708b764ca9daa4f8f33e4e8b3b517da
[BSP] f4eb87199eee8a432bb482bb55118447 : Windows XP MBR Code
Partition table:
0 – [ACTIVE] NTFS (0x7) [VISIBLE] Offset (sectors): 63 | Size: 4086 MB
[Windows XP Bootstrap | Windows XP Bootloader]
User = LL1 … OK
User != LL2 … KO!
— LL2 —
[MBR] 8f672004e1c170714fc27562bd4f6693
[BSP] e0a06c8bf46b8d9ebc34f76f5defa5bf : TDL4 MBR Code [Malware!]
Partition table:
0 – [ACTIVE] NTFS (0x7) [VISIBLE] Offset (sectors): 63 | Size: 4086 MB
[Windows XP Bootstrap | Windows XP Bootloader]
3、清理
最后,利用Rogue Killer将驻留在MBR的TD4L代码清除掉,至此,完成对这款流氓软件的清理,结果如图6所示。
图6 Rogue Killer对TD4L的查杀结果
三、蜜罐
从实践角度看,无论在网络边界上采用什么样的安全措施,都不可能实现绝对安全的防御。对于防御一方来说,最大的困难在于往往并不知道是什么人,在何时何地,以何种方式发起攻击。如何才能在防御战中争取主动权,实现主动的防御,一直是边界安全技术研究的重要组成部分。
(一)蜜罐简介
蜜罐一种由网络管理员故意设置的,存在一个或多个安全漏洞的网络设备,专门用于吸引潜在的攻击者对网络系统发动攻击,从而达到隐藏真实系统、发现潜在威胁,甚至诱捕攻击者的目的。
与一台没有任何防范措施的裸机不同,蜜罐是一个网络管理员经过周密布置而设下的“黑匣子”,系统看起来漏洞百出,但攻击者一旦进入了蜜罐,其攻击轨迹和行为特征就会被管理员监控。有时,为了进一步增加对攻击者的诱惑,管理员还会在蜜罐中放置虚假的信息或情报资源让攻击者窃取。某种程度上,蜜罐就是一个设置在网络上的“捕鼠夹”,是专门为攻击者设置的一个钓鱼陷阱。
蜜罐通常设置在受保护的网络内,并对外开放必要的端口。蜜罐会将自己伪装成一个带有漏洞的合法设备,并在其上运行与真实环境相同或相似的程序,从而形成一个诱饵,使攻击者相信它是一个合法的系统并对其发起攻击。但实际上,当攻击者试图攻击蜜罐时,不仅不会得到自己真正想要获取的资源,而且蜜罐系统还会自动记录攻击者相关的信息,如攻击者的IP地址、发起攻击的流量、攻击者的通信信息等。基于这些记录下来的信息,系统管理员和安全研究人员可以从中筛选出有价值的信息用以分析攻击技术,必要的话,甚至可以追溯到攻击的来源。
一般来说,构造一个蜜罐需要有3个基本要素,除了前面所说的“有漏洞的设备”和“受监控的数据”之外,还需要被隔离的环境。因为如果不将有漏洞的设备与受保护的网络环境,或者合法的网络设备之间进行有效的隔离,就会导致攻击者利用蜜罐对受保护的网络或合法设备发动攻击,从而使蜜罐成为攻击者实施入侵的跳板。
(二)蜜罐技术
一个合格的蜜罐一般可以实现以下基本功能:发现攻击、产生警告、行为记录、调查取证等。要实现这些功能,最核心的一点就是要有良好的数据管控能力,具体包括以下4个方面:数据控制、数据采集、数据分析和数据归并。
简单地说,数据控制是通过合理的系统配置限定攻击者可以在蜜罐中做哪些事情,其目的是最大限度地降低风险;数据采集是将攻击者的所有活动捕获并记录下来,同时保证攻击者不会知道这一过程;数据分析是指对记录下来的数据进行分析的能力;数据归并则是指能够收集来自多个蜜罐的数据并进行集中分析的能力。在所有这些技术要求中,数据控制是最重要的。
下面逐一进行介绍。
1、数据控制
数据控制是指设置蜜罐的网络管理员必须有能力完全控制攻击者可以访问哪些资源,不可以访问哪些资源,并确保攻击者入侵危害的影响范围是可控的,这是降低风险、保证蜜罐安全性的基础。
由于攻击者的不可预知性,攻击者使用的恶意代码有可能会通过蜜罐攻击伤害非蜜罐系统,或滥用蜜罐的能力进行非法行为(如发送垃圾邮件)。蜜罐要尽力确保即使攻击者攻陷了蜜罐系统,也不能无意或故意伤害非蜜罐系统。这其中的矛盾在于:我们必须允许攻击者一定程度的行动自由,因为允许攻击者执行的动作越多,我们就越有可能深入了解攻击者和攻击手法;然而,更多的自由也意味着更多的风险,攻击者能做的事情越多,我们对攻击者的控制也就越难。自由与可控的平衡需要蜜罐的管理员根据自己组织所能承受的风险阈值来决定。
2、数据采集
数据采集是对所有蜜罐内威胁活动的监测和记录。这些数据可以用来进行分析和学习攻击者的攻击手段和动机,是后续所有分析、预警、防御工作的基础。数据采集的核心原则是:在捕获尽可能多的数据的同时,尽可能不干扰攻击者操作和代码的执行(即使它真的是恶意代码),以免被攻击者发现或检测出来。
数据采集过程的隐蔽性非常重要。因为一旦攻击者发现被攻击的系统是蜜罐,攻击者就会设法绕开蜜罐,不触发真实的行为;或者是利用蜜罐进行反向欺骗,迷惑管理员。
此外,数据采集过程还应该保证捕获的数据是记录在一个单独的、安全的系统上,而不是保存在蜜罐本身当中,否则攻击者可能会破坏这些记录,甚至伪造记录。
一般来说,数据采集的内容包括攻击者的IP地址、发起攻击的流量、攻击者的操作记录、攻击者使用的木马样本、木马样本的运行记录以及攻击者的通信信息等。
3、数据分析
采集数据是为了分析。如果没有能力对采集的信息进行分析,并将其转换为有用的信息,蜜罐的作用就会大打折扣。不同的组织有不同的需求,因此,数据分析的要求和方法也会根据需求的不同而有所不同。
4、数据归并
在某些分布式环境中,网络管理员可能需要部署2个甚至更多的蜜罐系统并形成联动,从而形成一张诱捕攻击者的网络,称为蜜网。在蜜网系统中,将不同蜜罐收集到的信息进行综合存储、分析和处理的过程,称为数据归并。
在大部分情况下,网络管理员部署一个单一的蜜罐就够了,这时,管理员不需要担心数据归并的问题。但对于大型组织和网络系统,则有必要分布式部署多个蜜罐,甚至将蜜罐在物理上分布在世界各地。对于这些蜜罐的数据,应该将其归并到在一个中心位置进行存储和分析。
(三)蜜罐类型
蜜罐是一种针对性很强的网络安全设备,而不是网络管理员的盲目设置。根据部署目的的不同、环境的不同、位置的不同、操作系统的不同、漏洞设置的不同等因素,蜜罐的形式和类型也会有所不同。下面介绍几种在生产实践中比较常见的蜜罐分类形式。
1、生产蜜罐和研究蜜罐
基于部署的环境不同,蜜罐可以分为部署在生产环境中的生产蜜罐,以及部署在实验网络中的研究蜜罐。
生产蜜罐一般是由实际使用网络的企业所部署。之所以要在生产环境中部署生产蜜罐,其主要目的是利用蜜罐来吸引攻击者的攻击,从而减缓或减少真实生产系统遭到的攻击,降低被保护网络的安全风险。形象地说,生产蜜罐就像是战争中使用的伪造的军事设施,主要目的是吸引敌人的火力和分散敌人的注意力。
绝大多数生产蜜罐使用的并不是真实的系统环境,而是通过模拟或仿真的方法搭建一套非常接近于真实生产环境的、带有漏洞的操作系统或网络服务。当网络中存在随机寻找和触发漏洞的自动化攻击时,这些蜜罐就会吸引这些攻击工具的扫描,从而浪费它们的时间。在这个时间窗口内,管理员可以争取时间发现和阻断攻击。有时,生产蜜罐也会被用作侦察或威慑的工具。
实验蜜罐则是完全以研究和发现为目的部署的一种蜜罐,因此,往往要求蜜罐的部署尽可能地真实,以便获得更多的情报数据。一般来说,大学、研究所和安全公司会部署这样的蜜罐来收集网络情报、捕获新的攻击方法和攻击手段,并形成研究结果发表或形成安全防御产品。
不同于生产蜜罐经常使用的仿真系统,实验蜜罐一般会安装真实的操作系统和服务,并通过网络侧的管理,使之与其他系统相隔离。通过安装真实的、有漏洞的操作系统或服务,研究者可以收集到大量信息和情报,并根据这些信息发现新的攻击技术和方法,并分析针对性的防御手段。
不过,安装真实的操作系统或服务使攻击者可以和蜜罐中的环境进行交互,因此,风险也相对较高。攻击者一旦突破蜜罐,就可能会以蜜罐环境作为跳板攻击其他系统。
2、低交互蜜罐与高交互蜜罐
基于蜜罐提供的交互能力的差异,还可以将蜜罐分为用于生产目的的低交互蜜罐和用于研究目的的高交互蜜罐。
低交互蜜罐会模仿某些服务和操作系统,并提供有限的交互能力。攻击者的活动仅限于仿真的蜜罐所提供的水平。例如,一个模拟的 FTP 服务侦听特定的端口只能模仿一个 FTP登录,而不支持多种附加FTP命令。低交互蜜罐的优点是简单、易于部署和易于维护,且仿真的低交互蜜罐所能做的事情非常有限,即使被攻陷,其带来的风险也比较低。但另一方面,低交互蜜罐也只能获取到有限的信息,并且有经验的攻击者可能会很容易识别出来这是一个蜜罐。
高交互蜜罐一般都比较复杂,因为它们涉及真正的操作系统和应用程序。例如,如果要收集一个真正的针对FTP服务器的攻击,蜜罐中就需要建立真实的FTP服务器,并使用特定的、带有漏洞的版本的软件。这样,蜜罐暴露给攻击者的是真正的系统,攻击者可以做任何攻击,因此,蜜罐也就可以搜集到关于攻击方法的全部详细信息,有助于对攻击手段进行细致分析。
然而,风险在于攻击者可能会攻破一个高交互蜜罐系统,并以此为跳板攻击其他系统,进而造成重大损害。因此,必须对高交互蜜罐系统有足够的保护措施,并对其进行持续监控。在最坏的情况下,连接蜜罐的网络要能够及时断开,以防止攻击者破坏真实的业务系统。
当然,理论上说,也可以构造一个基于仿真环境的高交互系统,但这需要具备较高的开发能力和对真实系统机制和底层驱动的深入了解。一般而言,这是非常困难的。
3、实系统蜜罐与伪系统蜜罐
系统的漏洞可以是真实的,也可以是伪造的。因此,又可以根据漏洞的真实性,将蜜罐分为实系统蜜罐与伪系统蜜罐。
实系统蜜罐是最真实的蜜罐,它运行真实的系统,且带有真实可入侵的漏洞,属于最危险的漏洞,但是,它记录下的入侵信息往往是最真实的。这种蜜罐安装的系统一般都是最初的,没有打任何补丁或者只是打了少数补丁的。至于打什么补丁、打多少补丁,主要取决于网络管理员的需要,只要值得研究的漏洞还存在即可。根据目前的攻击者进行网络扫描频繁度来看,这样的蜜罐很快就能吸引到目标并接受攻击,系统运行着的记录程序会记下入侵者的一举一动。但同时实系统蜜罐也是最危险的,因为入侵者的每一个入侵都会引起系统真实的反应,如被溢出、渗透、夺取权限等。
那么,什么是伪系统?这里的伪系统并不是“假的系统”,它也是建立在真实系统基础上的,但它最大的特点是“平台与漏洞的非对称性”。
世界上的操作系统不是只有Windows而已,还有Linux、Unix、OS2、Be OS、i OS等。不同操作系统的内核与上层结构都会有所不同,因此,不同的操作系统存在的漏洞缺陷也就不尽相同。一般情况下,极少有能同时攻击几种系统的漏洞代码。利用某段漏洞攻击代码能够拿到Windows的权限,但是用同样的代码去攻击Linux就只能徒劳。
正是根据漏洞通常不能跨平台的这种特性,研究者们设计出了“伪系统蜜罐”。这种蜜罐利用一些工具程序强大的模仿能力,在系统中伪造出不属于自己平台的“漏洞”。攻击者入侵这样的“漏洞”,只是在一个程序框架里打转,即使成功“渗透”,也仍然是在程序制造的“梦境”之中,因为系统本来就没有让这种漏洞成立的条件,因此也就无法真正地入侵和渗透。
实现一个“伪系统”并不十分困难。比如Windows平台下的一些虚拟机程序、Linux自身的脚本功能加上第三方工具就能实现,甚至在Linux/Unix下还能实时由管理员“定制”一些根本不存在的“漏洞”,让入侵者自以为得逞而在里面瞎忙。且在伪系统蜜罐中,实现跟踪记录也很容易,只需在后台开着相应的记录程序即可。
伪系统蜜罐好处在于:可以最大程度防止被入侵者破坏,也能模拟不存在的漏洞,甚至可以让一些Windows蠕虫攻击Linux(只要能模拟出符合条件的Windows特征)。但这种蜜罐也存在一些不足,因为一个高水平的攻击者只要经过几个回合就会识破伪装。另外,编写此类脚本也需要一定的技术水平。
(四)蜜罐风险
使用蜜罐存在一定的风险,主要表现在2个方面:一是蜜罐存在被黑客攻破的风险;二是蜜罐存在一定的法律风险。
先来看蜜罐被攻破的风险。蜜罐是用来给黑客入侵的,它必须提供一定的漏洞。但是,很多漏洞都属于“高危”级别,稍有不慎就会导致系统被渗透。一旦蜜罐被破坏,入侵者要做的事情往往是管理员无法预料的。如一个入侵者成功进入一台蜜罐后,可以利用蜜罐作“跳板”(指入侵者远程控制一台或多台被入侵的计算机对别的计算机进行入侵行为)去攻击其他设备。所以,一台设置不周全或者隐蔽性不够的蜜罐会很容易被入侵者识破或者破坏,由此导致的后果将十分严重,这一点在前面的内容中也多次提到。
再来看蜜罐存在的法律风险。蜜罐的法律风险又主要表现在2个方面,一是信息记录的合法性;二是蜜罐可能被恶意利用实施对第三方的侵害。
首先,蜜罐本身是一个记录设备,但是,访问蜜罐的未必都是攻击者,也可能只是普通的用户。但在攻击被确认之前,蜜罐系统或管理员一般也很难准确地分辨出哪些是攻击行为、哪些普通的访问。因此,蜜罐也会记录下很多普通用户的访问行为,这就有可能在一定程度上侵犯普通用户的上网隐私。只不过,一般情况下,普通用户并不知道蜜罐的存在以及蜜罐的记录行为。可一旦蜜罐因管理不善造成用户信息泄露,网络管理员,甚至是企业就有可能被追究法律责任。另外,如果企业的管理者恶意设计一个蜜罐用于收集公司员工的活动数据,或者偷偷拦截记录公司网络通信信息,这样的蜜罐就涉及严重的法律问题了。
另一方面,虽说设计蜜罐本身就是为了让攻击者入侵和破坏的,但不管怎么说,蜜罐也是一台连接在互联网上的电脑设备,它也有可能被恶意利用并造成对第三方的损害。如果一台蜜罐被入侵者攻破并“借”来对某大学网站服务器进行攻击,由此引发的损失恐怕至少有一部分责任需要由蜜罐的部署者来承担或者一台蜜罐虽然没有被攻破,但蜜罐上的漏洞被攻击者恶意利用传播木马病毒、违禁信息或色情信息等,一旦被检测发现,蜜罐的部署者也需要为此承担相应的法律责任。
想要降低蜜罐存在的各种风险,可以考虑以下2种措施:一是建立一个专业团队对蜜罐进行人工监控,由具有专业知识的人分析蜜网活动,而不是仅仅依赖于自动化技术,从而可以避免很多检测和绕过的情况;二是针对标准的蜜罐产品进行定制,让外部流传的标准检测机制无法在定制过的蜜罐上工作。但这些机制都只能降低风险,并无法完全消除风险的存在。
(五)虚拟机与沙箱
虚拟机是构造蜜罐时经常使用到的一种技术方法。在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现。具体来说,虚拟机本身也是运行在电脑原有操作系统上的一个应用程序,但这个应用程序却可以虚拟一套软硬件运行环境,并在这个环境上再安装和运行其他的软件程序,甚至是操作系统。在虚拟机上运行的各种程序,完全依赖于虚拟机所模拟的软硬件环境,而不依赖于虚拟机之下原有操作系统的环境特性。
如很多Linux程序的开发者会在Windows系统上安装一个虚拟机软件,之后再在虚拟机之上安装一个Linux操作系统,这样一来,开发者在开发Linux程序的过程中,就可以随时通过简单的操作,在Linux和Windows之间进行切换,而不用每次都重启计算机。图7是在一个操作系统上虚拟另外一个操作系统并安装应用程序的原理示意。
图7 虚拟机原理
使用虚拟机的一个重要的好处在于:虚拟机对其上运行的各种应用程序屏蔽了底层真实的操作系统和物理硬件,这一方面可以提高程序安装的兼容性,另一方面又可以隔离真实的系统进而提高系统的安全性。如很多病毒检测工程师会选择在虚拟机环境下测试木马病毒,因为即使木马病毒破坏了虚拟机上的操作系统,只要重启虚拟机程序,一切又会恢复正常,底层真实的操作系统不会遭到破坏。这就是为什么很多蜜罐系统也是搭建在虚拟机上的主要原因。
不过,虚拟机毕竟不是完全真实的操作系统,对于高水平的攻击者来说,有可能通过技术方法识别出蜜罐系统是否是搭建在虚拟机之上的。而且从技术角度来看,虚拟机也是可以被穿透的,攻击者有可能穿透虚拟机来攻击真实的操作系统。所以,使用虚拟机来搭建蜜罐系统也不是万无一失的。
另外一个与蜜罐相近的概念是沙箱。沙箱是一种按照安全策略限制程序行为的执行环境。沙箱早期主要用于测试可疑软件等,现如今,沙箱已经成为浏览器、安全软件,甚至是大型网络系统的重要安全组件,应用非常广泛。
沙箱也是一个相对隔离的运行和测试环境。与蜜罐相比,沙箱主要有以下几方面的不同:
(1)沙箱的目的在于检测发现和防止安全威胁的入侵,而不是诱捕和发现攻击者的诱饵;
(2)沙箱环境会尽可能地仿真实际系统环境,而不会特意在系统中留下安全漏洞以吸引攻击者;
(3)沙箱只是模拟程序的运行环境,通常情况下没有什么交互性。
可以用虚拟机来构造一个沙箱,但从效率和资源的角度出发,沙箱通常不会像虚拟机那样具有完整的交互系统和交互界面。此外,沙箱还有很多其他的构造方法,这里就不再介绍。
微信公众号:计算机与网络安全
ID:Computer-network