如何在防火墙后面设置后门(V1.5)

来源:百度文库 编辑:神马文学网 时间:2024/04/20 18:26:16
者:Van Hauser/THC 
翻译:bkbll(bkbll@263.net)/cnhonker(www.cnhonker.com) 
译者的话: 
这是我第一次尝试翻译此类文章,由于本人经验不足,可能有些专业词汇等翻译的很不恰当,还请各位大侠多多包涵原谅,并请指出.另外,原文提供的下载www-shell.pl地址不可用了.不知道哪里还有下载的?还请指点一二.原文里面有几句我不知道该怎么翻译。所以也把原文给贴了上来。 
介绍: 
这篇文章是用来描述如何在不同的防火墙结构后面设置可行的后门.在其他的的环境下还可以理解成是一篇介绍黑客们(你?)如何掩饰他们侵入某个系统途径的文章. 
黑客们通常都想再一次进入他们曾经入侵的机器.即使将面对这些机器可能会安装新的防火墙或者打上了补丁等的困难.要完成再一次入侵,他们必须安装后门(backdoor).他们的目的是:a)为了他们的工作 b)不易被发现. 而后门的种类则取决于该服务器所用到的防火墙结构.一个好的后门应该能适用各种防火墙,并且具有很强的隐蔽性,这样你才能分享再一次侵入的感觉. 
防火墙的结构: 
现在有两种基本的防火墙结构,每一种都有其增强版本. 
包过滤器: 
在数据包通过交换介质传递时,有一台服务器或者路由器来检查每一个包是否背离了路由规则表中的允许/拒绝规则. 还有一种简单的防火墙仅仅只能依靠来源机器地址,目标机器地址和目标机器端口来进行过滤.比较好的一种还能依靠数据来源层,源端口,日期/时间和一些tcp,ip数据包标志来进行包过滤. 
这些只能称为单一的路由器比如一些Cisco,用ipfwadm设置防火墙的linux系统. 
状态过滤器: 
这是一种比较高级的数据包过滤器.它同样依据路由表总的规则检查每一个数据包看是否背离了该规则,只有允许的才能通过.但同时它还跟踪TCP顺序数的状态信息.同时需要注意有些需要欺骗的应用协议,比如在一个允许的ftp会话中指定的ftp数据通道.(这句话翻译有点困难,现把原文摘录如下: Some pay attention to application protocols which allows tricks such as only opening ports to the interiour network for ftp-data channels which were specified in a permitted ftp session.).这些过滤器还能通过防火墙安全的抓获UDP数据包,如NS和RPC等,这是因为UDP 是一种无状态的协议,在RPC服务中表现的尤其突出. 
这种防火墙一般是存在某些大型的开启了ip过滤软件的OpenBSD机器,一台Cisco Pix,Watchguard或者是著名的checkpoint FW-1中. 
网关循环代理: 
一台起代理作用的防火墙只是一台没有活动路由并且仅仅只是装了代理软件.举例来说,有些代理服务器可能是用来作www的squid代理,sendmail转信或者仅仅是sockd代理.(译者:sockd代理即是sock4或者sock5代理,只是不知道这个sendmail转信是什么东东,原文是: a sendmail relay configuration). 
网关应用软件: 
这是一种比较高级的代理.当安装了一种能作代理的软件后,每一个应用请求都应该通过该防火墙.这种网关能严格检查每一个应答和请求,比如:一个只允许连出去的ftp请求就应该只能下载而不能上传,并且在应答信号里面不应该包括病毒,缓冲区溢出等数据.有人会争论说squid代理也是一种应用网关,因为它有很多健全的数据检查,并且允许你过滤数据.但是它不是说如果在一种安全的环境里安装就没有任何安全漏洞. 
大部分在市场上销售的防火墙都是以上所介绍的防火墙的混和品.他们不仅仅只有一种软件来提供代理.举例来说,IBM的防火墙是一种简单的、能对socks以及其他各种代理进行数据包过滤的防火墙.我不想讨论哪一种防火墙产品是最好的,因为这篇文章不是用来教你怎么购买防火墙.但是我想说:网关的配置是要远远超出防火墙本身所提供的安全性.即使你的防火墙花了很多钱,速度也很快,能提供多种协议,具有开放的网络体系,傻瓜似的操作,并且是市场上大量宣传,但是如果配置不当同样会容易被攻击. 
进入: 
在我们第一次突破防火墙时,讨论对于某种防火墙结构要撕开一道口子,什么后门是最好的之前,我们必须认识到突破一道防火墙并不是一个小孩子过家家的事情,我们必须谨慎的计划行事。 
有四种主要的可能性: 
1. 内部 
在你的公司里面有人(你的男/女朋友,雇员)安装了一个后门,这是最容易的途径。 
2. 容易受攻击的服务。 
几乎所有的网络都提供一些服务,比如e-mail,WWW或者DNS等。这些都是本身就安装在防火墙上面或者安装在防火墙前面的一台机器上面(该机器未受防火墙保护),还可以是安装在内部的一台机器上面.如果一个攻击者能找到这些服务的漏洞,他就可以比较幸运的入侵了..如果你看见存在这么多的防火墙提供转发邮件服务,你肯定会开怀大笑的. 
易受攻击的外部机器 
防火墙后面的人们通常都在外部的机器上面工作.如果攻击者能攻击这些机器,而该机器倒霉的用户又设置了x-windows数据回应(译者:感谢大鹰解释x-relay)以及sshd服务,那么该攻击者就可以利用这些来进行恶意攻击,比如进行X-windows的攻击.攻击者还可以在客户端软件种发送一个伪装的ftp应答信号给服务器以使其缓冲区溢出,侵入netscape的服务器并且运行一条命令以替换掉WEB服务器上面的gif图片.(我从来没有检查这是不是真的,我没有仔细检查过是否真的存在这个可用的缓冲区溢出程序.).事实上是存在这个漏洞,但是攻击它需要很高的计算机知识.然而,攻击一台公司防火墙之外的WEB服务器通常是一个好的开始.有些防火墙的配置是允许某些机器能够登陆进来,于是别人可以监听并且得到这些机器IP.这在美国某些学校以及工业/军事的机器中尤为突出. 
连接劫持: 
某些公司认为如果他们只允许经过安全的身份验证的机器才能登陆就安全了.其实任何人都可以在身份验证后劫持连接并侵入系统.另外一种方法是使用连接劫持来修改所执行的协议的回应数据,并使对方的缓冲区溢出(比如利用X-window的). 
特洛伊木马: 
使用特洛伊木马可以干任何事情.这可能是一个gzip压缩文件,运行它能使缓冲区溢出(同时需要安装gzip软件)或者是一个tar文件,它能修改logout来执行任何命令;它还可以是一个可执行文件或者一段源代码,它被修改成允许黑客使用特定方法侵入.要使别人来执行木马,通常使用邮件欺骗手段以及替换掉某些站点维护人员需要规律性的升级他们的软件的原来软件.(我们可以通过查询ftp传输记录文件以及WWW记录来知道哪些文件被替换) 
放置后门: 
一个聪明的黑客是不会把后门安装在防火墙管辖内的机器上面的,因为这些机器经常受到监视并且周期性的检测.一般是安装在互联网上的机器上面.因为这些机器不会长期保护,并且没有很多的管理员进行安全性的检测. 
我将和大家讨论关于如何安装后门的一些方法.请注意运行在一台状态过滤器防火墙上面的程序同样可以工作在一台普通的包过滤器防火墙上面,还有代理服务器.应用网关的后门使指能工作在任何结构的防火墙上面.有些已经是激活的,有些则是的非活动的.已经激活的后门允许黑客任何时候使用它.而非活动的后门则需要时间或者某些事件来激活它,黑客需要等待它被激活. 
包过滤器: 
这种情况很难找到一种能侵入这种防火墙的后门,在我看来有以下几种办法: 
a)ack-telnet 它的工作状况和普通的telnet/telnted一样,只是和普通的tcp的三次握手协议不同的是它仅仅使用TCP ACK的数据包,因为他们看起来是属于已经建立(允许)的连接,它们被允许通过.使用Coder's Spoofit project (http://reptile.rug.ac.be/~coder)的spoofit.h很容易写出这个代码. 
b)(译者:这句话我不知道怎么翻译) Loki from Phrack 49/51可以被再一次用来建立一个icmp显示以及响应的数据包通道.但是有些代码需要重新编译(译者:原文是: But some coding would be needed to to be done,但使我觉得应该这样翻译比较合适一点). 
c) daemonshell-udp是一种采用UDP协议的后门(在http://r3wt.base.org/种搜索thc-uht1.tgz文件) 
d)最后一个但不是最不起眼的.大部分的防火墙系统仅仅只有一个路由或者防火墙允许任何从端口20一直到高端口(>!023)的TCP连接,所以使用允许的非被动的ftp协议来运行”netcat –p 20 target port-of-bindshell”是一个最快的办法. 
状态过滤器: 
在这里黑客要使用程序来开始启动从安全网络到他外部机器的连接.下面有一些使用的方法: 
活动的(已经激活的) 
(译者:不明白这句话) tunnel from Phrack 52. 
使用带-R选项的ssh命令.(它比通道好,这是计算机上面比较正式的程序并且能够加密数据流) 
被动式(需要激活)netcat用带可执行的选项编译后,用带时间选项的参数运行连接上一个黑客站点。(ftp://ftp.avian.org/).在thc-hut1.tgz文件包里面的reverse_shell同样具有这种功能。 
网关循环代理: 
(译者:不明白) If socks is used on the firewall, someone can use all those stuff for the stateful filter and "socksify" them.( http://www.thehackerschoice.com/papers/www.socks.net.com).你可以在有关应用网关的篇章上面找到更高级的工具软件。 
应用网关: 
现在我们开始认真考虑我们最感兴趣的部分.这些配置一般都是比较智能的,所以我们得多花点脑子才行. 
活动的(已经激活的). 
在公司的web服务器上放置或者修改一个CGI脚本,它能被远端执行.但是这种做法不太可靠,因为当一台web服务器放到网上的时候,没有监视/检查/审核就允许互联网直接访问的实在是太少了.我希望没有人在这方面需要一个例子.;-) 
在防火墙上面放置或者修改一个服务/可执行文件.这样做是比较危险的,因为防火墙经常被检测并且不时有人在持久的监听数据. 
在防火墙的核心上加载一个可以被加载的模块,它能隐藏自己的进程并且可以被自己的主人访问.这是一种最好的活动后门但是依然很危险. 
隐藏的(需要激活): 
E@email-一个email帐号/邮件发送服务程序/邮件阅读程序都可以被配置成能直接解释和执行隐藏在邮件中的命令.如果需要的话还返回输出结果 
WWW-这是一种比较牢固的服务;-) 它是一种在互联网上提供http请求的一种进程.但是在一台欺诈性的www服务器上提供的http回应中,该请求却是一个真正的应答命令.下面介绍的这种方法是最好以及最容易的一种.(后门举例: The Reverse www shell) 
DNS-和以上所介绍的概念是一样的,不同的是这个是论述DNS的请求和回应.不方便的 是它不能加载太多的数据(http://www.icon.co.za/~wosp/wosp.dns-tunnel.tar.gz,这个例子依然需要很多的编码才能影响系统.) 
后门举例:The Reverse WWW Shell 
这个后门必须要绕过防火墙.而该防火墙出于公司利益考虑,采取一种比较安全的方针,允许用户在www上畅游.看看下面这张图片你就会有比较好的认识了.在我们开始文本方式讲述之前请记住这副图. 
+--------+ +------------+ +------------+ 
网 络 -------------------- 防火墙 -------------- 黑客所拥 
主 机  网络连接 +------------+ 互联网  有的主机 
+--------+ +------------+ 
被设置后门的机器(SLAVE) 黑客的跳板机(MASTER) 
现在,在网络主机(SLAVE)上面运行了一个程序,该程序每天在一个特定的时候产生一个子进程.对于防火墙来说,该子进程就象一个普通用户一样,使用它的网景(netscape)浏览器在网上冲浪.事实上,这个子进程在本地创建了一个shell,通过看上去象一个合法的httpd请求并且发送一个已经准备好了的信号连接到黑客所控制的www服务器(MASTER)上面.而该www服务器(MASTER)返回的合法应答信号实际上是一个让子进程在它本地机的shell上面执行的命令.所有的通信数据都被转换成(我不想把它称之为”加密”,我不是微软)Base64结构,并且为了防止服务器有缓存还要给CGI字符串提供一个特殊值. 
下面是一个连接的例子: 
被侵入的机器(SLAVE)上面: 
GET /cgi-bin/order?M5mAejTgZdgYOdgIO0BqFfVYTgjFLdgxEdb1He7krj HTTP/1.0 
在黑客控制的服务器(MASTER)上面回应: 
g5mAlfbknz 
被入侵的机器提交的GET请求是一个shell的命令提示符,而www服务器的应答信号.一个经过转换的”ls”命令.这是里面的一些机关: 
如果服务器(MASTER)需要,被设置后门的机器(SLAVE)会在每天的一个特定的时间里尝试连接过去.派生子进程的原因是如果由于某种原因导致shell被挂起,那么可以在第二天发现并且可以修复它.如果某位管理员看见有一个连向黑客的服务器(MASTER)的连接并且自己本身还连接到自己,他仅仅只去查看已经中断的web 服务器连接;在被转化的CGI的GET请求代码里面有密码标记的记录;支持www的代理(比如squid代理),在进程列表里面隐藏自己名字的程序等等. 
这中间最关键的一点是:实现以上这种程序功能的是一个仅仅只有260行代码的perl文件.它使用起来很简单:编辑rwwwshell.pl文件为正确的格式,在被控制的机器上面执行:”rwwwshell.pl slave”,在web服务器仅仅只需要在对方连接过来的时间执行rwwwshell.pl. 
可是为什么要用perl语言来书写代码呢?a)用perl可以很快写出该代码.b)它用起来特别方便.c)我喜欢它.如果你想在没有安装perl的系统上面使用,那么请在一个安装了perl的机器上面,从perl CPAN资料中心下载a3编译器并将起编译为二进制文件.然后切换到你的目标机器上面运行它. 
这种既实用又简单的软件代码的code我附在了这篇文档的后面.如果对它有什么建议和意见或者批评请不要使用email来和我讨论.如果你觉得这篇文章或者程序有什么缺陷,请给root@localhost(译者:?这个mail地址?????)来信.请到http://r3wt.base.org找到升级的版本. 
请到这里抓取: 
http://www.thehackerschoice.com/papers/rwwwshell-1.6.perl 
安全性: 
如何让程序捕被防火墙发现和拒绝服务在现在是一件很有趣的问题.你必须清楚的是你要使用一种严格的应用网关防火墙,它具有严格的控制规则.email必须放在中央邮件服务器上面处理,DNS解析只能对www/ftp代理开放,并且是先在www代理验证通过的情况下才能解析.可是这些是远远不够的.一个攻击可以修改邮件头的内容,并且从加密的X-header中释放出来运行.他还可以利用reverse www-shell来轻易的实现身份认证.同时还可以使用比较好的工具定期检查DNS和WWW的记录/缓存,经常切换工作的外部主机或者使用别的方法,这样也许能战胜黑客. 
有一种比较安全的方法就是在连接上internet的时候建立起第二道网络,真实的网络可以通外界分离-但是如果告诉你们的雇员这些……..一个好的防火墙是比较进步的,并且可以得到一个入侵检测的帮助.但是这些是阻止不了一个执意要闯入的攻击者. 
最后的话: 
请享受hacking/securing系统的乐趣吧. 
欢迎大家都能认识我;-)尤其是那些我得到启发的朋友.你们知道我指的谁.. 
再见: 
van Hauser / [THC] - The Hacker's Choice 
如果想进一步和我讨论这些感兴趣的话题,可以使用下面的PGP keys给我e-mail::vh@reptile.rug.be 
Type Bits/KeyID Date User ID 
pub 2048/CDD6A571 1998/04/27 van Hauser / THC 

-----公众PGP密钥开始----- 
Version: 2.6.3i 

mQENAzVE0A4AAAEIAOzKPhKBDFDyeTvMKQ1xx6781tEdIYgrkrsUEL6VoJ8H8CIU 
SeXDuCVu3JlMKITD6nPMFJ/DT0iKHgnHUZGdCQEk/b1YHUYOcig1DPGsg3WeTX7L 
XL1M4DwqDvPz5QUQ+U+VHuNOUzgxfcjhHsjJj2qorVZ/T5x4k3U960CMJ11eOVNC 
meD/+c6a2FfLZJG0sJ/kIZ9HUkY/dvXDInOJaalQc1mYjkvfcPsSzas4ddiXiDyc 
QcKX+HAXIdmT7bjq5+JS6yspnBvIZC55tB7ci2axTjwpkdzJBZIkCoBlWsDXNwyq 
s70Lo3H9dcaNt4ubz5OMVIvJHFMCEtIGS83WpXEABRG0J3ZhbiBIYXVzZXIgLyBU 
SEMgPHZoQHJlcHRpbGUucnVnLmFjLmJlPokAlQMFEDVE0D7Kb9wCOxiMfQEBvpAD 
/3UCDgJs1CNg/zpLhRuUBlYsZ1kimb9cbB/ufL1I4lYM5WMyw+YfGN0p02oY4pVn 
CQN6ca5OsqeXHWfn7LxBT3lXEPCckd+vb9LPPCzuDPS/zYNOkUXgUQdPo69B04dl 
C9C1YXcZjplYso2q3NYnuc0lu7WVD0qT52snNUDkd19ciQEVAwUQNUTQDhLSBkvN 
1qVxAQGRTwgA05OmurXHVByFcvDaBRMhX6pKbTiVKh8HdJa8IdvuqHOcYFZ2L+xZ 
PAQy2WCqeakvss9Xn9I28/PQZ+6TmqWUmG0qgxe5MwkaXWxszKwRsQ8hH+bcppsZ 
2/Q3BxSfPege4PPwFWsajnymsnmhdVvvrt69grzJDm+iMK0WR33+RvtgjUj+i22X 
lpt5hLHufDatQzukMu4R84M1tbGnUCNF0wICrU4U503yCA4DT/1eMoDXI0BQXmM/ 
Ygk9bO2Icy+lw1WPodrWmg4TJhdIgxuYlNLIu6TyqDYxjA/c525cBbdqwoE+YvUI 
o7CN/bJN0bKg1Y/BMTHEK3mpRLLWxVMRYw== 
=MdzX 
-----密钥结束-----