![查找源自我的服务器的目录遍历攻击源](https://linux22.com/image/575486/%E6%9F%A5%E6%89%BE%E6%BA%90%E8%87%AA%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%9B%AE%E5%BD%95%E9%81%8D%E5%8E%86%E6%94%BB%E5%87%BB%E6%BA%90.png)
两周前,我的 VPS 提供商通知我,我的服务器(CentOS 5.5,yum 是最新的)对 DreamHost 的一些服务器发起了“NULL 字节/目录遍历”攻击。我花了几个小时仔细检查服务器,但一无所获。登录前,我检索了 sshd 二进制文件的副本,并确认它没有被修改过。我安装了一个 rootkit 检查器(chkrootkit-0.49),但一无所获。我检查了我托管的网站的网络日志,寻找可能触发我服务器上的脚本以发起攻击的命中,但一无所获。在攻击发生时检查了 /var/log/secure 和 /var/log/messages,但一无所获。检查了last
,但一无所获。find
在关键目录上查找过去 3 天内修改的文件,但一无所获。
我还能做什么来找出攻击的原因?我编写了一个脚本来检查端口 80 上的出站 TCP 连接,但只找到了合法连接(SpamAssassin 和 ClamAV 下载更新、Joomla 检查其站点是否有更新等)。即使我确实看到了活动的出站连接,我是否能够从该进程(在目录中/proc
)转储数据以向我显示发起攻击的帐户?
观察了几天服务器后,我放弃了。现在我又收到了 DreamHost 的另一份投诉,所以又发生了这种情况。我已向 DreamHost 请求了详细的日志,但之后呢?我还能在哪里查看?如果我找不到来源,是否可以安装某种东西来监控服务器并在服务器开始在 DreamHost IP 空间中与 tcp/80 建立出站连接时记录数据?我要记录什么?只需获取tcpdump
该时间范围内的所有流量并尝试手动筛选即可?
更新
请参阅我接受的答案以了解我提出的解决方案。
我仍然对记录所有出站端口 80 流量来源的选项感兴趣——一种了解源进程以及其父进程(以及父进程的父进程)的方法。
答案1
好吧,如果还没有做,你应该做的第一件事就是更改你的 root 密码(以及任何其他启用 shell 的帐户)。其次,我可能会安装 DenyHosts,而不将其与实时列表同步,并观察 /etc/hosts.deny 一段时间。确保将自己的 IP 地址添加到 DenyHosts 的 allowed_hosts 文件中,以防如果你输错密码超过 3 次,你没有控制台访问权限来解锁自己……此外,如果还没有这样做,请将 sshd_config 设置为禁止直接 root 登录,并使用 sudo。
如果可以的话,您还可以将 syslog 重定向到外部服务器,以防止黑客从日志中手动删除其踪迹。您还可以编写一个简单的脚本,该脚本可以从每个用户的 .bashrc 中调用,这样每次有人登录时它都会向您发送电子邮件,并附加有用的信息,例如 ip 地址(详细的 who 命令),甚至可能附加重要日志的最后几行。这样,黑客就必须非常迅速地阻止它。
仅此一点就应该可以确保“没有人”但你至少可以使用 shell 主动登录到你的系统(好吧...无论如何它都会阻止 99% 的攻击者)。
然后你可以随时检查文件完整性/入侵检测系统,例如萨温节看看到底发生了什么。
这是另一个可用于监控系统的有用链接:每个系统管理员都应该知道的 20 个 Linux 系统监控工具
祝你好运,希望这会有所帮助!
答案2
尽管 VirtualHosts 会将日志记录到自己的 error_log 文件中,但我还是wget
在 中找到了输出/var/log/httpd/error_log
。我最终wget
使用以下 shell 脚本进行包装:
#!/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
,以便它可以帮助我应对未来的任何攻击。