Unix系统后门技术指南 |
简介 |
黑客攻入系统后,面临一项艰巨的任务----保留对系统的访问权限.为了获取服务器固定的访问权限,入侵者必须知道服务器的所有弱点.这不是一件容易的事.后门或 木马,能够让黑客长期享有目标主机的访问权限.不过,这不能一概而论;后门可以做很多不同的事情,但它们的主要目的是保持对受限区域的访问权限.后门(又名,暗门)与木马之间存在着差异:黑客攻入系统后,会在系统中放置后门(入侵者用它进一步访问系统),而木马则为黑客提供独立访问的权限(取决于你是否有权限).入侵者如果不知道如何再次攻入系统,那么他们通常会编写或使用一些程序,用于欺骗管理员或其他用户,获取访问权限,然后做一些事情(例如,文件上传/下载等). |
案例 |
(前事不忘,后事之师).回顾过往,已经出现许多免费或者收费的后门和木马.介绍如何隐藏它们的案例也多不胜数.下面列举一些案例: |
破解工具劫持:木马程序可被置于世界闻名的破解工具内.一旦你使用它破解Unix密码,木马程序会悄悄地将你破解的密码发送给某个人.当然,作者会立即更新代码,发布新版本. |
扫描工具SATAN:早期SATAN(1.0)安装包内的某个二进制文件----fping,内置恶意代码.篡改代码的人,能够获取对目标机器(使用代码的机器)的访问权限(坦普尔大学).编码者篡改了fping的main()函数,让fping程序能够添加一个用户(用户名:'suser')到/etc/passwd.使用这个用户名,他可获取安装有SATAN机器的远程权限. |
quota木马:1996,一个内置木马的quota版本,被发布到互联网(quota,是一款Unix工具,用于检测用户磁盘使用情况).该木马会拷贝密码和NIS地图,然后邮件给代码的作者. |
ircII木马:1994, ircII 2.29 (一款聊天程序客户端)也被放置木马.编码者利用木马,可获取系统的访问权限. |
TCPWrappers:互联网上有一个被放置木马的TCPWrappers版本.木马会放送邮件给编码者,以便能够获取TCPWrappers(恶意编译)系统的root权限. |
infamousSlackware后门:Linux Slackware releases 3.2 及早期版本,有一个安装包sample_users.tgz.这个文件会创建3个无密码账户('satan', 'gonzo' , 'snake' ). 入侵者可以通过帐号获取权限. |
当然,这并非所有的Unix系统后门/木马案例--这只是一部分(还有很多其他,例如wu-ftpd木马).我个人观点,木马是一大威胁,因为它们无处不在,它们几乎无所不能. |
后门技术 |
攻入一个系统后,想要再次获得root账户权限是一件很困难的事情.如果管理员发现你入侵了他的系统,那么你不得不寻找新的漏洞,或使用社会工程学,再次攻入他的系统.在系统内放置后门,可以避免上面的操作,我们同样可以获得root访问权. |
目前已经有很多后门技术,简单的就是添加用户到/etc/passwd文件,复杂点的就是处理服务进程(黑客最喜欢的一种方式), |
rhosts后门 (添加字符'+ +'到用户的rhosts文件,以便用户随时随地通过rlogin/rsh进入系统)
(修改Unix登陆程序--入侵者使用特定的后门密码,用户名随意,很容易获得指定用户的shell),
(修改in.telnetd文件,例如字符串或 密码.黑客使用指定的终端类型(telnet进程初始化时,会自动检测终端类型),很容易获得访问权限),
(使用后门服务替换,新的网络服务或 未使用的旧服务;通常的做法,绑定一个shell到指定端口,黑客使用密码,即可获得访问权限(事实上,inetd.conf被篡改)),
(shells内容输出到指定端口,例如TCP, UDP和ICMP(大部分防火墙,允许ping数量包在网络中穿行,这对message-transfer后门是个不做的选择)),
(后门被放置在库文件中(例如:MS Windows系统内的DLL文件)可为入侵者提供访问权限,例如修改crypt(),以便使用特定密码进行验证),
(使用cron(用于计划任务的程序),攻击者可以让放置于系统的后门,在特定的时间启用),
(一款简单的后门--在Unix的/etc/passwd文件中,添加一个无密码用户,此用户具有与root相同的userID),
(复制一份rootshell,使用它的用户可获取root权限--此方法有限制,你必须有一个系统的非root账户),
等等...如你所见,现有很多的后门技术.根据系统,选择最合适的. 这一节,我将介绍一些Unix系统留后门的方法. |
*SUID后门如果你长期拥有系统的非root权限,那么我推荐你使用此方法(例如.拥有一个非root账户).复制一个绑定SUID标识的rootshell.这意味着,运行rootshell的用户,会获得root权限的shell,下面有一个简单的脚本,可以替你完成这项任务,记得将后门放置在一个安全的地方: -- #include <stdio.h> -- 当然,你需要root权限去执行这个脚本(安装后门).shell会被复制到/tmp目录,名为'.root_shell'.我建议你将它放在其他位置,系统会定期清理临时目录.你可以选择将后门重命名为'...',这样做可以迷惑普通用户.如果想启用后门,只需在命令行窗口输入'./.root_shell',此时你已具备root权限(可使用命令'whoami'和'uid',进行验证). |
*/etc/passwd后门添加用户到/etc/passwd文件,此用户具备rootID (0), 无密码.你可以选择手动完成这项操作.记得添加7个fields,接着你可以登陆,GECOS信息一切正常.当你telnet或ftp目标主机( inetd会调用登陆程序)使用设定的账户密码(密码为空)登录,立即获得rootshell.由于这种方法已经众所周知,我推荐将其用于简单后门.复制原始/etc/passwd到系统的某个位置,将它隐藏,并添加后门账户.备份原始的/etc/passwd文件,使用后门passwd文件替换它,以便获取权限.可以使用一个延时,然后恢复原始passwd文件. -- cp/etc/passwd /etc/.temppass 这项技术由daemon9引入,而且非常有效.使用后门passwd文件替换原始passwd文件,时长为1分钟(当然,你可以选择使用'sleep'命令,自定义时长).然而,有一个很重要的因素-- cron. 文件/var/spool/crontab/root中应该有一条对应的记录: -- 该脚本每天晚上00:15运行.这意味着你在那个时间点,具备权限访问目标机器.另外一种类似cron的后门,可以每天或每周发送/etc/passwd文件给后门安装者.攻击者可以很快知道有哪些新账户,服务,等信息...你还可以了解到后门账户(如果有)的信息.简单例子如下: -- cp/etc/passwd /etc/.temppass |
*联网进程/服务后门这也是一种广泛使用的方法.实际上,有两种方法---一种是针对长时间未使用的服务,另一种是建立新的服务. -- 须知:使用getservicebyname()编程,可以知道服务对应的端口. 现在你已经了解了/etc/services,再介绍一下DigitalUnix 4.0 的/etc/inetd.conf文件,部分内容(网络进程)如下: -- 第一列,为进程名(与/etc/services文件相同).作用就是将查找services文件,对应网络服务端口号. -- (不要使用discard,因为它经常使用,这里的例子仅供参考)现在,我们所做的改变马上就会生效,你需要重启网络进程(使用命令'killall-HUP inetd' -- 当然,你必须是root权限).尝试一下,discard服务端口是9(从/etc/inetd.conf文件中很容易知道),你可以telnet受害者的9号端口,接下来就能够获取一个root(#) shell. -- 接下来,打开/etc/inetd.conf文件,重复方法一中的操作.(如下所示): -- 重启网络服务,让其生效.telnet端口18,你会获得一个rootshell. |
*登录程序后门:这也是Unix系统中常用的一种后门.由于Unix系统开源,系统内的很多程序都有源码.黑客可以修改指定版本的login程序,替换系统原有文件.使用特定密码进行登录,即可获得rootshell.案例(请参考附录部分). 这些都是基础且常用的后门.我推荐同时使用多个----可在系统中放置一对root SUIDs文件,启用2个或3个服务,并在/etc/passwd文件中放置后门账户.这样做可以迷惑系统管理员,当他发现一个后门并删掉它,可能他就会认为自己的系统安全了(然而并非如此,系统中还残留量一些).
|
木马技术 |
与后门不同,木马用于获取系统的初始权限.特洛伊木马的用途要回顾到很久之前,希腊人精心准备了一个大木马,并将木马作为礼物,送进了特洛伊城,这也就是闻名的特洛伊战争. |
*su木马这一类的木马,主要用于获取root'password.例如下面的脚本: -- stty-echo rm$0 将脚本重命名为'su',并将其放置在用户的home目录下.不过,你需要改变用户的PATH变量.为了木马成功执行,你必须这样做.有两种方法可行:(1)改变用户的.profile/ .bash_profile / .login 文件.(2)可以自定义PATH环境变量,完成同样的操作(案例中,木马对应的账户为root): -- 注意/usr/bin前的点号(.).这个点号告诉系统,从用户目录获取命令/程序(注意:有些系统下,你必须赋予木马脚本执行权限). |
*telnet木马如果你想获取更多的主机和密码,可以使用该方法.大部分的Unix用户,会使用他们的shell账户,telnet其他系统,此方法可用于钓取更多的账户.案例脚本如下: -- echo"Trying $1..." rm$0 它就像一个真实的telnet程序,登录过程,循环三次,然后返回到原始的shell窗口.当然,这个取决于用户是否粗心,这个程序针对的是Linux2.0.34 (因此,这个方法,并不适用于那些聪明的管理员). |
*使用现存的程序作为木马这是一种很常见的方法.你需要在程序的C代码中,写入几行内容(前提是你有代码),如果程序是以root账户执行,那么就会执行指定操作: -- 将这段代码放到程序中,然后重新编译.每次root账户载入程序,程序就会执行'chmod 666/etc/passwd' 操作----对所有用户开放/etc/passwd文件的写权限.你也可以按照自己的需求设定代码,例如,你可以调用system()创建一个rootSUID shell, 或者重启系统,等等... |
*恶意木马一些人喜欢用木马破坏系统.其中一些是为了好玩,也有一些是为了利润.众多恶意木马中一款,可用于填充系统空间,这样会迫使Unix服务器重启.例如下面的Perl木马: -- $SIZE=shift(@ARGV); open(FILE, "> megfile"); for ($CNT= 0; $CNT < $SIZE; $CNT++ ) `cat$LIST > ${SIZE}_mBytes`; rm $0 程序运行时,需要一个参数:文件名.因此,你可将木马伪装成,一个需要文件名参数运行的程序(例如:copy, rename, find 等...).此程序会使用星号(*)填充指定文件--大到100M.然后会重命名文件,文件名格式:name_mBytes.我自己并不觉得这一类的木马很有效.不过,有些朋友可能会感兴趣,并在某些场所用到,例如:revenge,等等...针对这种木马的解决方案,就是设定一个周期为两个小时的计划任务,用于监控磁盘空间,一旦磁盘使用量达到某个值,就给root帐号发送邮件.(例如,检测磁盘空间:'df -k | awk '{print $6"\t"$4}'). 案例脚本如下: -- df -kl |grep -iv filesystem | awk '{print $6" "$4}' | while readLINE; do 磁盘空间使用量在100MB以下时,此脚本会生成日志文件/var/log/df.log(加上邮件提醒root用户的功能很容易,请自行完成).这种脚本处理占据磁盘的木马时,相当于是系统管理员的救星. 木马有多种用途,每种用途取决于你想干什么.一些人用它捕获密码和一些有价值的信息,另外一些则用它来捣乱. |
后门/木马探测-------------------* 实际上,用户是最大的问题.能够发现后门和木马的用户,占少数.大部分的用户,在这一块相当于是新手,他们很容易被恶意程序欺骗.如我所言,SUID这类的后门/木马,很常用,也没有很好的防御方法.不过,我们使用`find`命令,可以很快定位到它. find会列出SUID为4000或SGID为2000的文件.find按照给定的规则,对文件进行排除操作.(SUID程序s权限位,对应可执行文件的x位.例如:rws).如果你有一个NFS加载的文件系统,你可以在查询的时候,进行排除,命令如下: -- 这种方案,只针对一种类型的后门.还有很多其他的类型,此处的保护工作显然力不能及.the next example is a simple checklist mechanism: -- cat/usr/adm/file_list | xargs ls -ild > /tmp/now 文件/usr/adm/file_list包含需要监控的文件列表.-i选项,会给列表中的文件加上inode编号.-d选项,会给出文件/目录的属性. -- find `cat/usr/adm/file_list` -ls > /tmp/now 该脚本,会通过对比,显示是否有文件添加/删除.该脚本还会启用文件的md5校验值: -- find `cat/usr/adm/file_list` -ls -type f -exec md5 {}\; > /tmp/now 另外一种常见的后门,在/etc/passwd文件中添加一个UID为0的账户.针对这类的后门,检测措施就是查找UID为0的用户.(UID为0的账户,域值数小于7或没有密码): -- 这个脚本会返回所有满足规则的用户名.这个脚本有些落后,不怎么可靠.完美的系统并不存在.不过,已经出现了一些很实用的程序,可用来帮助我们,例如:Tripwire.记下来的一章,我会介绍一下Tripwire的用途,如何使用它来监控文件系统.Tripwire,于1992年,由普度大学的EugeneSpafford和GeneKim编写.Tripwire,是一款检测工具,主要用来监控Unix系统文件,以便找出非认证性的篡改.Tripwise,在识别攻击者留下的病毒/蠕虫/逻辑炸弹/后门/木马方面,效果明显.Unix镜像发布的时候,已经包含了上千个安装文件.被入侵以后,还没有一个很好的办法用于检查所有文件.重装系统并不是明智的做法,尤其遇到你没有备份的情况.Tripwire会将文件的指纹录入数据库中.被入侵后,可通过对比现文件指纹,进行检测.添加,删除,修改的文件均会报告给管理员.Tripwire不错,主要是因为他速度非常快.Tripwire使用了各种各样的签名算法或单向散列函数.例如: -- tw.config-- generate --> new database *创建数据库:产生基准数据库,用于后期对比. tw.config文件是个不错的资源,它会展示一些扩展信息,哪个文件正在被处理,该文件的所拥有的属性/标识.tw.config文件中每个条目都有对应的掩码.下表显示的就是Tripwire的mask值: Flag:Description: 须知:inode,是Unix系统用于存储文件信息的一种结构(location,type(文件/目录/链接,等....),对象的大小,ctime, ) ctime (inode 最近修改时间),mtime(文件最近内容变更时间,atime (文件最近访问时间(read(), exec(), 等...),reference计数(文件数),UID, GID, 文件模式位(权限位等)). 由于这些标记很复杂,开发者新增加了一个模板,满足管理员的需求: Letter:Template purpose: Template selection masks: 须知:该模板可以与所选masks值混用(例如:R-2,检测只读文件). Tripwire默认使用R模板.例如:/home/bjames在tw.config文件中的记录如下所示: -- then theselection masks for that directory are actually: -- 这样做简化了工作.上面的例子中,Tripwire会报告模式位的变化,inode号,reference计数,UID, GID, 文件大小,修改时间,MD5和Snefru标记(1and 2). 同样可以排除访问/icode时间戳的变化,忽略其他标记的用途.this brings us to another table, Tripwire 标记号(此记号,被Tripwire用于同基准数据库中的记录进行比较): Number: Signature: -------*------------------------* 0 null signature 1 MD5 2 Snefru 3 CRC (32-bit) 4 CRC (16-bit) 5 MD4 6 MD2 7 SHA 8 Haval (128-bit) 9 保留以便后用
-- 第一条命令,更新/home/bjames目下的文件'my.file'. *一次简单的检测案例: -- Thisrelease is for single CPU, single-site, end-use ### Phase1: Reading configuration file 还有一件事----记得加固Tripwire的数据库.这些数据库,是入侵者的目标,对管理员的你来说,其价值也不容忽视.Tripwire是一款强大的工具,使用得当,你可以最大力度的找出后门/木马.Tripwire在网上有些衍生版本,一个是,Perl版的Slipwire.另外的有,ATP, Hobgoblin(由Farmer和Spafford编写),等... |
附录---------* slipwire.pl(slipwireperl脚本,用于文件系统完整性检测)随文打包.trojans_c.zip (打包了一些,C语言编写). slipwire.pl- http://net-security.org/default/08/slipwire.pl |
结论-----------* 如果想要拥有对系统固定的访问权限,后门放置至关重要.如果入侵者想要保住root账户,后门放置是首要任务.另一方面,系统管理员应该谨慎一些,每天用Tripwire进行文件完整性检测. |
声明-----------* weprohibit hacking,phreaking & such criminal activities. allinformation found here does not, in any way,connect to crime. thistext is meant for people to learn and be aware of security. if youtry anything that's considered illegal with the information foundin this text you will be to blame yourself,we cannot be blamed forother people's actions. remember that security is very importantand thus should not be neglected by the people holding thestrings. |