Linux 入侵常见迹象与快速核查要点
当一台Linux服务器出现异常,往往不是悄无声息的。攻击者留下的痕迹,就像闯入者踩在雪地上的脚印,只要你知道往哪里看,就能发现端倪。下面这些常见的入侵迹象和核查要点,能帮你快速定位问题。
一 资源与网络异常
系统资源突然“告急”,通常是第一个警报。这背后,可能藏着挖矿程序在疯狂消耗算力,或是你的服务器被当成了DDoS攻击的“肉鸡”。
- CPU、内存、磁盘 I/O 异常飙高:系统响应变得迟缓甚至卡顿,别急着抱怨硬件,先用
top或htop看看,是哪个“贪吃”的进程在持续霸占资源。sar命令则能帮你回顾历史性能数据。 - 出网带宽异常:服务器在你不注意的时候,持续或周期性地向外发送大量数据?这可不是好事,可能意味着数据正在外泄,或者服务器在对外发动攻击。用
iftop或nload工具,可以直观地定位到是哪个进程和连接在“偷跑”流量。 - 未知端口监听或异常网络连接:多了一些你不认识的端口在监听,或者出现了连接到陌生IP和端口的长连接?立即使用
ss -tulnp或netstat -tulnp命令查看详情。 - 系统或安全组件异常:防火墙规则被清空、杀毒软件进程消失、入侵检测系统不断报错——这些安全防线本身的异常,本身就是最高级别的入侵信号。
二 身份与会话异常
谁在登录你的系统?这个问题至关重要。攻击者往往从这里打开缺口。
- SSH 暴力登录痕迹:检查/var/log/auth.log或/var/log/secure文件,如果看到海量的“Failed password”记录,说明有人正在尝试“撞库”。更危险的是,如果其中夹杂着来自异常IP的“Accepted password”(成功登录),那很可能密码已经失守。快速筛查命令:
grep “Failed password” /var/log/auth.loggrep “Accepted password” /var/log/auth.log
- 异常登录历史:
last和lastb命令分别显示成功和失败的登录记录,留意其中的未知用户、异常登录时间或来源IP。w或who命令则能告诉你当前谁正在线上。 - 命令历史缺失或被清空:用户目录下的
~/.bash_history文件如果突然变得空空如也,这几乎可以断定是攻击者在试图抹除自己的操作痕迹。 - 特权账户异常:仔细检查
/etc/passwd文件,看是否有新增的或可疑的用户。特别要警惕UID为0的非授权账户(即拥有root权限的账户)。同时,检查/etc/shadow文件,看是否存在空口令账户,这可是一个巨大的后门。核查命令:awk -F: ‘$3==0 {print $1}’ /etc/passwd(列出所有UID为0的用户)awk -F: ‘length($2)==0 {print $1}’ /etc/shadow(列出所有密码字段为空的用户)
三 进程、文件与持久化痕迹
攻击者一旦进入系统,就会想方设法隐藏自己并长期驻留。他们的“小动作”会留下诸多马脚。
- 未知进程/守护进程:运行
ps aux或top,仔细辨认每一个进程。对于可疑进程,使用lsof -p查看它打开了哪些文件、建立了什么网络连接,其可执行文件路径往往藏在/tmp、/var/tmp、/dev/shm这类临时目录中。 - 系统命令被替换或隐藏:
/bin/ps、/bin/ls这些你赖以诊断问题的工具,本身就可能被攻击者替换成做了手脚的版本。留意它们文件大小、修改时间的异常变化,或者使用哈希值进行比对。同时,注意目录中是否存在以点号开头的隐藏文件来规避常规检查。 - 定时任务与开机自启被滥用:这是攻击者实现持久化的经典手段。务必检查
crontab -l、/etc/crontab、/etc/cron.d/目录下的计划任务。同时,/etc/rc.local、/etc/rc*.d目录下的启动脚本,以及systemd服务单元(systemctl list-units --type=service)都可能被植入恶意服务。 - Web 应用异常行为:对于Web服务器,检查Nginx/Apache的访问日志(如
/var/log/nginx/access.log)。高频的POST请求、对管理后台路径的扫描、异常的User-Agent字符串或来源IP集群,都可能是攻击者在进行漏洞探测或利用。 - 文件完整性异常:
/etc/passwd、/etc/shadow、/etc/hosts等关键系统文件被篡改,是严重的入侵迹象。部署像AIDE或Tripwire这样的文件完整性检查工具,能有效发现这类未授权的变更。
四 恶意软件与横向移动迹象
入侵的最终目的往往是执行恶意操作,并试图扩大战果。
- 挖矿特征:进程名或命令行参数中间出现
xmrig、kdevtmpfsi等字样是典型标志。留意是否有curl或wget命令从GitHub、Netlify等外部地址拉取可疑二进制文件的日志。有时甚至能看到恶意进程用pkill命令杀死其他挖矿进程,以独占系统资源。 - 蠕虫式传播:攻击者可能利用窃取的SSH密钥,尝试从你的服务器向网络内的其他主机发起连接,进行横向移动和感染。
- 利用漏洞投放载荷:例如,通过著名的Log4j漏洞(CVE-2021-44228)下发Mirai等僵尸网络样本,将服务器纳入僵尸网络。
- Rootkit 迹象:这是最高级的隐藏手段。Rootkit会篡改系统内核或库文件,使得
ps、ls等工具的输出结果被过滤,从而隐藏恶意进程和文件。使用rkhunter、chkrootkit等专用工具进行扫描,或者察觉系统工具行为与底层状态不一致时,都需要高度警惕。
五 快速核查命令清单
时间紧迫时,可以按以下清单快速过一遍关键项目:
- 资源与网络:
top/htop;iftop/nload;ss -tulnp或netstat -tulnp - 身份与会话:
last/lastb;w/who;grep “Failed|Accepted password” /var/log/auth.log(或/var/log/secure) - 进程与文件:
ps auxf;lsof -p;ls -la /tmp /var/tmp /dev/shm;stat /bin/ps /bin/ls - 持久化与配置:
crontab -l;cat /etc/crontab;ls /etc/cron.d/;cat /etc/rc.local;systemctl list-units --type=service - 账户与完整性:
awk -F: ‘$3==0 {print $1}’ /etc/passwd;awk -F: ‘length($2)==0 {print $1}’ /etc/shadow;aide --check或tripwire --check - Web 日志:
tail/less /var/log/nginx/access.log | egrep “POST|admin|wp-login”
记住,安全是一个持续的过程。定期检查这些项目,建立基线,才能在异常出现时第一时间感知。毕竟,在安全领域,最好的防御永远是敏锐的洞察和快速的响应。
