查找源自我的服务器的目录遍历攻击源

查找源自我的服务器的目录遍历攻击源

两周前,我的 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,以便它可以帮助我应对未来的任何攻击。

相关内容