博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

h0ng123 linux,oracle.unix

---在蓝天白云下自由飞翔 爱生活,爱CU---
Google


学习shell脚本编程的好地方
   h0ng123.cublog.cn
关于作者  
姓名:h0ng
职业:计算机
年龄:24
位置:广东
个性介绍:学习网络技术,UNIX/linux 系统管理.娱乐


我的分类  




研究下杀毒软体如何对抗Rootkit
 
作者:卡巴斯基实验室(Kaspersky lab)
 
病毒写作者所面对的最大难题之一,便是如何将恶意程式码藏匿在受感染的机器中,而不被使用者发现。 在病毒写作者的理想世界中,防毒解决方桉也将无法侦测到恶意程式码。 如今写作恶意程式码已不再是个人娱乐,而是可以获利 (当其牵涉到犯罪行为时) 的行业,对那些为钱卖命的骇客而言,消匿自身的踪迹也就益形重要。 那麽,可以偷取银行帐户详细资料,或安装 Proxy 伺服器、瞒着机器所有人寄送垃圾邮件的程式,要如何隐藏呢?
 
现在的网路罪犯,使用的是 10 或 15 年前网路破坏者便使用过的手法。 就个人电脑而言,Virus.Boot.Brain.a 是最早为人所知的病毒之一。 此种开机磁区病毒会拦截磁碟的系统功能存取。 当开机磁区读取时 (例如,由防毒解决方桉读取),病毒会将受感染的资料替换为乾淨的原始资料。 此类隐形机制 (拦截系统功能并替换传回的资料) 自当时起便运用于 Windows 病毒中。
 
(Virus.Win32.Cabanas.a)。
 
如今,针对 UNIX 的恶意程式并不如针对 DOS 与 Windows 环境的恶意程式那样氾滥。 「Rootkit」一字来自 UNIX 界;但目前通常用于描述 Windows 木马程式作者所运用的隐形技术。 起初,「Rootkit」指的是一组程式,可让骇客躲过侦测。 为达成此目的,可执行的系统档桉 (如 login、ps、ls、netstat 等) 或系统程式库 (libproc.a) 会遭到更换,或安装核心模组。 这两种动作只有一个相同目的;防止使用者收到正确资讯,知道电脑上发生了什么事。
 
Rootkit 的普及,部份须归因于目前在网际网路上公开流传着许多 Rootkit 的原始程式码。 对于病毒写作者而言,将这类程式码作出小小的变化,相对上来说是较容易的。 影响 Rootkit 使用量增加的另外一项因素,则是因为多数 Windows 使用者习惯使用系统管理员帐号,而非建立个别的使用者帐号。 如此使得在受害机器上安装 Rootkit 更加容易许多。
 
Rootkit 可用于伪装恶意程式码的存在,使其不被使用者及防毒解决方桉发现。病毒写作者与游走于法律边缘的间谍软体类开发者视此点为独特的卖点 (USP)。
 
接下来,让我们更详尽地探讨 Windows 与 UNIX 系统的 Rootkit。
 
伪装方法
 
目前 Rootkit 使用两种方法在系统中伪装其存在:
 
更改路径
更改系统架构

这些方法用于伪装网路活动、注册机码、处理程序等所有可能警示使用者系统中潜伏着恶意程式的项目。
使用者与核心模式的 Rootkit 皆可能使用第一种方法。 在使用者模式中实作 Rootkit 相对来说较为简单。 通常,以拦截 API 功能为主的方法会用于修改执行档的路径。

图 2. 拦截 API 功能。

应用程式使用特殊的资料栏位呼叫 API 功能 (汇入/汇出表格),或使用 API GetProcAddress 收取位址并接触之,此方法利用的即是前述之原理。 程式码会先写入 DLL 模组中,模组再併入现存系统处理程序的位址空间,远端的恶意使用者因而得以控制使用者所有的应用程式。 修改路径是广为人知,且易于实行的方法,因而得以简易地运用于 Rootkit 之中。
 
虽然这类的方法以及其他使用者模式 Rootkit 所利用的手段提供许多益处,然而它们仍有明显的缺点:Rootkit 儘管会伪装其活动,但效率不彰。 这代表只要使用专用的公用程式,例如 RootKit Revealer、SoftIce 等,就能轻易侦测到在系统中执行的使用者模式 Rootkit 。核心模式 Rootkit 也因而越来越具备取代前者而普及的趋势,儘管它们开发起来较为困难。
 
核心模式 Rootkit 在资讯伪装上有确实的优势。 绝大部份的核心模式 Rootkit 利用较不为人知的作业系统架构遂行其目的。 举例说明,这类 Rootkit 常拦截 KeServiceDescriptorTable 服务。 此表格中的服务数量可根据作业系统版本变更。 这也代表 Rootkit 开发者必须针对作业系统进行额外的分析,才能找出表格中的控制码索引。 此方法与拦截 API 功能相当类似。
 
修改 PsActiveProcessList 是第二种方法的例子之一,亦即变更系统架构的方法。 此方法用于 FU Rootkit 之中,可伪装任何处理程序,使其不受多数系统公用程式所侦测或检视。
 

图 3. Rootkit 启动前的处理程序清单。
图 4. Rootkit 启动后的处理程序清单。

在图 3 中,代表 Notepad 程式的 notepad.exe 可见于目前的处理程序清单中 (以红色粗线标示)。 图 4 的萤幕撷取画面,是在输入命令使 FU Rootkit 启动并隐藏处理程序后所撷取。 如萤幕撷取画面所显示,虽然编辑程式仍保持开启,其名称却已由目前的处理程序清单中消失。
 
侦测 Rootkit
 
对抗 Rootkit 的第一步就是侦测出它们。 Rootkit 的作者总是有办法抢先 Rootkit 侦测工具一步,因为新技术不断开发,防毒软体的开法者需要时间分析这些技术,并开发侦测工具。 然而,儘管 Rootkit 有着看似如此複杂的特性,卡巴斯基实验室产品的第 6 版仍可有效侦测 Rootkit。 那麽,我们的产品究竟要如何应付上述的 FU Rootkit 呢?
 
如前所述:Rootkit 的安装会导致系统处理程序遭隐藏。 防 Rootkit 子系统将侦测此种现象并对使用者发出警讯 (图 5)。
 

图 5. 侦测未知的隐藏处理程序

此套子系统不仅可以侦测已加入防毒资料库更新中的 Rootkit,还能侦测未知的 Rootkit,如图 6 所示。
此外,针对将 DLL 注入其他处理程序的使用者模式 Rootkit (于本文件第一部份所讨论),亦有专门侦测之类似子系统。
 
在此类桉例中,子系统的反应方式是通知使用者特定的处理程序正试图注入程式码至其他处理程序中 (图 6)。
 

图 6. 侦测针对其他处理程序的程式码注入

UNIX Rootkit
在系统中伪装其存在
 
Rootkit 在 UNIX 系统中与 Windows 系统中的使用方式是差不多的。 当攻击者取得根目录权限后,便会在受害机器上安装 Rootkit。 根目录权限对大部份的 Rootkit 安装而言是不可或缺的要素,而远端的恶意使用者只要在受害系统上拥有标准使用者权限,便可透过攻击某些已知弱点而取得根目录权限。 如此一来,远端使用者将可使用本机攻击手段或公用程式,破解密码资料库。 若攻击者无适当权限,则须运用远端攻击手段,或利用 Sniffer 之类的程式拦截密码。 密码拦截可用于各种服务中 (FTP、Telnet 等),因为这些服务在网路上以明确的文字传输密码。
 
Rootkit 可能整合多种恶意程式 (Trojan-DDos、后门程式等),安装在受害机器上,并等候远端恶意使用者的命令。 此外,Rootkit 也可能纳入修补档,用以修正系统上的弱点,以防止其他攻击者重複渗透该机器。
 
如同 Windows,UNIX 系统中亦存在使用者模式与核心模式 Rootkit。
 
使用者模式 Rootkit 通常会整合植入木马的标准程式,在系统中伪装其元件之存在,以及后门程式,提供隐藏的系统存取权限。 使用者模式 Rootkit 的部份范例为 lkr、trOn、ark 等。 在此以 trOn 为例,说明使用者模式的 Rootkit。 为在系统中伪装其存在,Rootkit 将执行数种动作。 当安装时,Rootkit 会终止 syslogd 背景程式,并将下列系统公用程式替换为植入木马的版本:du、find、ifconfig、login、ls、netstat、ps、top、sz。 此外,亦新增 sshd 背景程式的木马版本至系统中。 最后,Rootkit 会于背景模式启动 Sniffer 程式;在 inetd.conf 中新增 telnetd、rsh,与 finger 背景程式之启动,然后重新启动 inetd 与 syslogd。
 
TrOn 通常位于 /usr/src/.puta,但此目录会因为已安装的 ls 元件而隐形。
 
现在我们来看看核心模式 Rootkit。 此类的 Rootkit 与使用者模式 Rootkit 所提供之功能相同,但层级较低。 使用者模式 Rootkit 用于修改个别的二进位档桉,核心模式 Rootkit 则仅用于修改核心。 此类 Rootkit 可更有效地伪装其活动。
 
共有数种方法,将 Rootkit 注入系统核心中:
 
使用 LKM:Linux 核心 (以及许多其他作业系统) 可于作业中上传模组 (或装置驱动程式),远端恶意使用者因而得以修改核心之系统呼叫,并导致传回的资讯不正确 (例如遭到修改的档桉清单)。 此类攻击可藉由编译不支援 LKM 的整合核心加以预防,但此种解决方法也有缺点,所有的驱动程式都必须包括在核心中。

写入 /dev/kmem,可存取由核心所佔据的记忆体区域。 此项目将在不通知使用者的状况下重写核心。 要修改核心,只须找到正确的记忆体区域。 然而,此问题有一种解决方法 - 藉由作出变更,使 /dev/kmem 无法直接写入。 亦可使用 mmap 呼叫,写入 /dev/kmem。

感染现存的模组;此方法与第一个方法的不同之处,在于 Rootkit 本身不包含独立模组,而是将本身注入现存的模组。 此方法也代表 Rootkit 不怕重新启动,因其所感染的模组会不断上传之故 (例如档桉系统驱动程式)。

侦测 Rootkit

很遗憾地,关于侦测 Rootkit 的方式,并不存在通则。 然而下列方法可通用于大部份的 Rootkit:
调查不正常的档桉行为、网路资源使用、排程及重新开机时的工作启动,以及使用者帐号受监控的情形
使用下列公用程式,协助侦测系统中是否存在 Rootkit:Saint Jude、Chrootkit、RkScan、Carbonite、Kstat、Rootkithunter、Tripware、Samhain 等。

总结

Rootkit 会以某种形式干扰系统功能,所有侦测 Rootkit 的方法皆依靠此点而进行。 卡巴斯基实验室产品利用此一特性,使其得以侦测未知的 Rootkit。在未来版本的 Windows 中,写作 Rootkit 会变得更为困难,因为系统程式码与系统架构将无法修改。 由作业系统开发者所採取的此一步骤将降低 (或至少能暂时降低) 新版本 Windows 中的新 Rootkit 数量。
 
目前,针对 Windows 的恶意程式码比针对 UNIX 者还要普遍,因为 Windows 是最广受使用的作业系统。 一旦 UNIX 开始普及,情势自然会改变;针对 UNIX 的新 Rootkit 将会问世,用于对抗它们的新方法也将随之研发。
 
最后应附带一提的是,对抗 Rootkit 的最佳防护是採取预防性的行动,确保所有系统都在适当的防护下。
 
参考文献
 
[VirusList] 卡巴斯基实验室,Viruslist.com,2005
[iDEF2003] Anton Chuvakin,An Overview of Unix Rootkits (UNIX Rootkit 概观),2003
Linux Kernel Rootkit (Linux 核心 Rootkit)。Rainer Wichmann
Rootkit: Attacker undecover tools. (Rootkit:攻击者的秘密工具)。Saliman Manap
www.phrack.org
www.securityfocus.org

 发表于: 2007-12-27,修改于: 2007-12-27 15:21 已浏览500次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:1.4373

京ICP证041476号