CentOS服务器在遭遇入侵时,攻击者几乎必然会尝试提升权限。从普通服务账户跃升为root,是攻击链中最关键的一环。而这一切动作,都会在系统日志中留下痕迹。直接调取/var/log/secure日志,使用grep过滤"authentication failure"或"session opened"等关键字段,往往能第一时间发现异常。比如短时间内出现大量root登录失败记录,紧接着突然出现一条成功的session opened,这就是典型的爆破后提权特征。
定位暴力破解与异常认证暴力破解是获取初始访问权限和尝试提权的最常见手段。在CentOS系统中,/var/log/secure文件记录了所有与认证相关的sshd、sudo、su等活动。直接执行 grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr 这条命令,可以统计出尝试暴力破解的IP地址排名。如果某个IP地址针对root账户出现了数百次失败尝试,随后又出现了针对普通用户的成功登录,这就构成了高危信号。更隐蔽的提权行为会利用已泄露的普通用户凭证,通过sudo或su命令切换身份。重点关注/var/log/secure中"incorrect password attempts"或"su: FAILED SU"的记录,这些字段能直接暴露攻击者正在尝试从普通用户向root跃迁。
追踪sudo与su的滥用痕迹攻击者一旦获得普通shell,下一步必然是利用sudo配置错误或尝试su切换到root。检查sudo日志不能仅靠/var/log/secure,还需要查看/var/log/sudo.log(如果启用了sudo日志记录)或直接分析/var/log/messages。执行 grep "sudo:" /var/log/secure | grep "COMMAND" 可以列出所有通过sudo执行的命令。重点关注那些非运维时段的sudo操作,以及诸如sudo su、sudo /bin/bash这类直接获取交互式shell的命令。如果日志中出现类似 "user NOT in sudoers" 的拒绝记录,说明攻击者正在探测sudo权限。更危险的是,如果发现某个原本没有sudo权限的账户突然成功执行了sudo命令,必须立即检查/etc/sudoers文件是否被篡改,以及是否有新增的隐藏账户被加入了wheel组。
分析进程执行日志与系统调用审计单纯的认证日志有时无法捕捉到利用内核漏洞进行的提权,比如脏牛(Dirty Cow)或overlayfs漏洞利用。这类提权行为不会产生sudo或su的日志记录,因为它们直接修改内核内存来提升进程权限。此时必须依靠auditd审计系统。如果系统默认安装了auditd,可以直接通过ausearch命令回溯关键系统调用。执行 ausearch -m SYSCALL -sv no -i 可以列出所有失败的系统调用记录,攻击者在尝试漏洞利用时往往会触发大量的失败调用。重点关注execve类型的记录,它能显示攻击者执行了哪些二进制文件。例如,发现/tmp目录下有一个随机命名的可执行文件被执行,且后续进程的UID突然变为0,这就是典型的内核提权特征。通过ausearch -p 进程ID 可以完整还原该进程的整个生命周期。
检查计划任务与启动项的异常注入提权不一定是实时的,攻击者为了维持root权限,往往会在计划任务或启动脚本中植入后门。检查/var/log/cron日志是发现此类持久化提权的关键。执行 grep "CMD" /var/log/cron | awk -F'CMD' '{print $2}' 可以列出所有通过crontab执行的命令。重点关注那些执行了/tmp或/var/tmp目录下脚本的记录,以及下载远程载荷的curl或wget命令。同时,检查/etc/crontab、/etc/cron.d/目录以及/var/spool/cron/目录下的文件修改时间,结合cron日志中的执行记录,可以锁定恶意任务。如果日志显示某个普通用户通过crontab执行了反弹shell或添加了SSH公钥,那么该用户的凭证已经泄露且被用于提权。
分析Web日志中的命令注入与反弹Shell如果服务器运行了Web服务,攻击者很可能通过Web应用漏洞注入命令,进而反弹shell并尝试提权。在/var/log/httpd/access_log或/var/log/nginx/access.log中,搜索包含";"、"|"、"&&"以及编码后的命令执行payload。例如,grep -E "(\;|\||\"|\$\(|%20)" /var/log/httpd/access_log 可以过滤出可疑的HTTP请求。一旦发现类似 "?cmd=id" 或 "?page=/etc/passwd" 的请求参数,且响应状态码为200,说明命令执行成功。随后在secure日志中查找与Web服务运行用户(如apache或nginx)相关的session记录,如果该用户突然出现了su或sudo行为,或者有sshd进程由该用户拉起,就构成了完整的Web入侵到提权的证据链。
利用auditd构建主动防御规则被动分析日志只能用于事后溯源,要实时发现提权行为,必须部署auditd规则进行主动监控。在/etc/audit/rules.d/目录下创建自定义规则文件,例如monitor.rules。添加以下关键规则:
# 监控sudoers文件的修改 -w /etc/sudoers -p wa -k sudoers_change -w /etc/sudoers.d/ -p wa -k sudoers_change # 监控用户ID变更的系统调用 -a always,exit -F arch=b64 -S setuid -S setgid -S setreuid -S setregid -F a0=0 -k privilege_escalation -a always,exit -F arch=b32 -S setuid -S setgid -S setreuid -S setregid -F a0=0 -k privilege_escalation # 监控关键文件访问 -w /etc/shadow -p r -k shadow_read -w /etc/passwd -p wa -k passwd_modify
重启auditd服务后,任何尝试读取shadow文件或修改passwd文件的行为都会被记录。通过ausearch -k privilege_escalation命令,可以专门提取与权限提升相关的系统调用日志。如果发现非root父进程发起了setuid(0)调用,auditd会立刻记录详细的PID、PPID、UID和命令行参数,为溯源提供精确到毫秒级的时间戳。
结合系统文件完整性校验发现Rootkit高级提权攻击会替换系统二进制文件,例如篡改/bin/su、/usr/bin/sudo或/lib64/libc.so.6,植入密码记录器或隐藏后门。这类攻击在日志中可能没有明显异常,但会导致文件校验值改变。使用rpm -Va命令可以校验所有已安装软件包的文件完整性。输出中,如果/bin/su或/usr/bin/passwd这类关键文件出现了"5"(MD5校验和改变)或"M"(权限改变)标记,说明文件已被篡改。重点关注那些同时出现"5"和"U"(属主改变)标记的文件,这通常意味着攻击者替换了文件并修改了属主为root以实现持久化。结合/var/log/yum.log查看近期的软件包更新记录,如果某个被篡改的文件在yum.log中没有对应的更新记录,就能确认是恶意替换。
关联分析建立时间线与攻击链单一日志片段无法还原攻击全貌,必须将secure、audit、cron、Web访问日志以及命令历史进行时间线关联。首先提取所有日志中的时间戳和关键事件,以攻击者IP或可疑用户为锚点进行排序。例如,从access.log中发现某个IP在14:30:00发起命令注入,14:30:05在secure日志中出现该IP的SSH登录失败,14:30:20出现了apache用户的sudo尝试失败,14:32:00突然出现了root的session opened。这条时间线清晰地展示了攻击者从Web注入到获取普通shell,再通过某种方式直接获取root权限的过程。如果中间缺少sudo成功的记录,那么攻击者极有可能利用了本地内核漏洞。此时再结合audit日志中14:31:50左右的setuid调用记录,就能锁定漏洞利用的二进制文件及其源码来源。
日志备份与防篡改策略攻击者提权成功后,第一件事往往是清理日志。如果发现secure日志或messages日志出现大段时间空白,或者文件大小异常缩小,这本身就是最强烈的入侵信号。为防止日志被篡改,应将关键日志实时转发到远程syslog服务器。在/etc/rsyslog.conf中添加*.* @remote_log_server:514配置,并重启rsyslog服务。同时,使用chattr +a命令为/var/log/secure和/var/log/messages添加只追加属性,这样即使root用户也无法直接删除或清空日志内容,除非先移除属性。攻击者如果尝试使用chattr -a移除属性,该命令本身又会被auditd记录,形成闭环监控。
通过上述多维度的日志分析,CentOS服务器上的提权行为几乎无所遁形。关键在于将认证日志、审计日志、Web日志和文件完整性校验结果进行交叉验证,任何单一数据源都可能被绕过,但多源数据的矛盾之处必然暴露攻击痕迹。持续监控这些日志字段,并建立自动化告警机制,就能在提权发生的几分钟内阻断攻击链,将损失控制在最小范围。
