两个星期前,我的VPS提供商收到通知,我的服务器(CentOS 5.5,yum是最新的)在DreamHost的某些服务器上再次发起了“空字节/目录遍历”攻击。 我花了几个小时穿过一个很好的齿梳服务器,没有find任何东西。 在login之前,我检索了一个sshd二进制文件,并确认它没有被修改。 我安装了一个rootkit检查器(chkrootkit-0.49),没有发现任何东西。 我检查了我托pipe的网站的networking日志,寻找可能触发了我的服务器上的脚本启动攻击,但什么也没有发现。 检查/ var / log / secure和/ var / log /消息围绕攻击的时间,但什么都没发现。 last检查,但没有发现。 在过去3天find了修改文件的关键目录,但没有发现。
我还能做些什么来find攻击的原因? 我写了一个脚本来检查端口80上的出站TCP连接,但只有合法的连接(SpamAssassin和ClamAV下载更新,Joomla检查其站点的更新等)。 即使我看到一个活动的出站连接,我甚至能够从stream程中(在/proc目录中)转储数据,以显示发起攻击的帐户?
看了几天服务器后,我放弃了。 现在我又收到了DreamHost的一个投诉,所以又发生了。 我已经请求了DreamHost的详细日志,但是什么? 我还能在哪里看? 如果我找不到源,有什么我可以安装监视服务器和日志数据,当它开始出站连接到TCP / 80在DreamHost IP空间? 我会logging什么? 只是在该时间范围内获得所有stream量的tcpdump ,并尝试手动筛选它。
更新
看到我接受的解决scheme,我想出了。
我仍然对logging所有出站端口80stream量来源的选项感兴趣 – 这是一种了解源stream程以及其父stream程(以及父stream程的父stream程)的方法。
那么,你应该做的第一件事就是改变你的root密码(和任何其他启用shell的帐户)。 其次,我可能会安装DenyHosts,而没有将其与实时列表同步,并观看/etc/hosts.deny一段时间。 请确保将您自己的IP地址添加到DenyHosts的allowed_hosts文件中,以防万一您输错密码超过3次时没有控制台访问权限解锁自己…另外,如果sshd_config设置为不允许直接rootlogin(如果尚未完成)并使用sudo。
如果可以的话,还可以将系统日志redirect到外部服务器,以防止黑客手动从日志中删除其痕迹。 你也可以编写一个简单的脚本,可以从每个用户的.bashrc中调用,这样每次有人login时都会向你发送一封电子邮件,并附加有用的信息,比如ip地址(详细的who命令),甚至可以附上最后几行重要的日志。 这样一来,黑客就必须非常迅速地防止这种情况发生。
这一点应该确保“没有人”,但你至less可以用shell来主动login你的系统(好吧,它将阻止99%的攻击者)。
然后,您可以随时查看文件完整性/入侵检测系统(如Samhain),以便真正了解发生了什么事情。
这是监视系统的另一个有用的链接: 每个SysAdmin应该知道的20个Linux系统监视工具
祝你好运,我希望这有助于!
即使VirtualHostslogging到自己的error_log文件,我在/var/log/httpd/error_log发现了wget输出。 最后,我用下面的shell脚本来包装wget :
#!/bin/sh MYPID=$$ MYPWD=`pwd` PARENT=`ps -o ppid -p $$ | tail -1 | bc` GP=`ps -o ppid -p ${PARENT} | tail -1 | bc` WHOAMI=`whoami` TMPFILE=/tmp/dump.$$ function cat_file() { local fn="$1" echo "dump of $fn :" >> ${TMPFILE} cat $fn >> ${TMPFILE} } function proc_dump() { local pdir="/proc/$1" echo "Dumping info on process $1" >> ${TMPFILE} ls -alR ${pdir} >> ${TMPFILE} cat_file "${pdir}/cmdline" echo "environment" >> ${TMPFILE} xargs --null --max-args=1 echo < ${pdir}/environ >> ${TMPFILE} cat_file "${pdir}/loginuid" cat_file "${pdir}/maps" } echo "I am ${WHOAMI}, running from ${MYPWD}, pid ${MYPID}, ppid ${PARENT}" > ${TMPFILE} echo "arguments: $@" >> ${TMPFILE} export >> ${TMPFILE} proc_dump ${MYPID} proc_dump ${PARENT} proc_dump ${GP} mail -s "wget call on foo" [email protected] < ${TMPFILE} exec /usr/bin/wget.real "$@"
从那里,我能够找出哪个VirtualHost是负责任的,仔细查看它的日志,并且发现网站目录树中有一个旧的osCommerce目录,我最终删除了这个目录。
我已经把包裹的wget留在了那里,以防将来的攻击帮助我。