主题
🔍 入侵检测
安全加固是"防",入侵检测是"发现"。再牢固的防御也有被突破的可能。及早发现入侵迹象,及时响应,才能把损失降到最低。
入侵的典型迹象
当攻击者进入系统后,通常会留下以下痕迹:
| 迹象 | 具体表现 | 排查命令 |
|---|---|---|
| 异常登录 | 陌生 IP、半夜登录、从未知地域 | last, lastlog, who |
| 陌生进程 | CPU/内存异常高、奇怪进程名 | ps aux, top, htop |
| 异常网络连接 | 连接到境外 IP、非业务端口 | ss -tunap, netstat |
| crontab 被改 | 多出陌生定时任务下载/执行脚本 | crontab -l, ls /etc/cron.* |
| 用户异常 | 新增陌生用户、uid=0 的隐藏账户 | cat /etc/passwd, awk -F: '$3==0' /etc/passwd |
| 文件变更 | 关键系统文件被替换、多了 SUID 文件 | rpm -Va 或 AIDE 检查 |
手动排查 Checklist
当你怀疑服务器被入侵时,按以下顺序快速排查:
1. 检查当前登录和登录历史
bash
# 当前谁在登录
who
w
# 最近登录记录
last -n 50
lastlog
# 失败的登录尝试
sudo lastb | tail -30
# 检查当前登录会话
ss -tnp | grep sshd2. 检查用户和权限
bash
# 所有 UID=0 的用户(root 权限)
awk -F: '($3 == 0) {print}' /etc/passwd
# 最近创建的用户
sudo find /etc -name passwd -exec cat {} \; | tail -5
sudo cat /etc/group | grep sudo
# 检查无密码用户
awk -F: '($2 == "" || $2 == "!") {print $1}' /etc/shadow3. 检查异常进程和网络连接
bash
# 查看所有进程(异常:名字里带空格/tmp路径/高CPU但名字奇怪)
ps auxf
# 查看所有监听端口和对应进程
sudo ss -tunap
# 查看对外连接(排查反弹 shell)
sudo ss -tnp state established
# 查找隐藏进程(对比 /proc 和 ps 输出)
ls /proc | grep -E '^[0-9]+$' | while read pid; do
if ! ps -p $pid > /dev/null 2>&1; then
echo "可能的隐藏进程: PID=$pid, cmdline=$(cat /proc/$pid/cmdline 2>/dev/null)"
fi
done反弹 shell 特征
连接目标端口是常见反弹 shell 端口(4444/5555/6666/7777/8888),或者连接的远程 IP 在可疑地区(朝鲜/伊朗/东欧等),进程命令行中含有 /dev/tcp、nc、bash -i 等特征。
4. 检查计划任务和启动项
bash
# 所有用户的 crontab
for user in $(cut -d: -f1 /etc/passwd); do
sudo crontab -u $user -l 2>/dev/null
done
# 系统级 cron
cat /etc/crontab
ls -la /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/ /etc/cron.monthly/
# systemd 定时器
systemctl list-timers --all
# 启动项
ls -la /etc/init.d/
ls -la /etc/systemd/system/
ls -la /etc/rc*.d/
# 用户级启动
cat ~/.bashrc ~/.bash_profile ~/.profile 2>/dev/null5. 检查可疑文件和 SUID
bash
# 查找最近 24 小时内修改的文件
find / -type f -mtime -1 2>/dev/null | grep -v '^/proc\|^/sys\|^/dev'
# 查找 SUID 文件(普通用户能以 root 权限执行的程序)
find / -perm -4000 -type f 2>/dev/null
# 查找隐藏文件(非正常位置)
find / -name ".*" -type f 2>/dev/null | grep -v '^/proc\|^/sys'
# 检查 /tmp 目录
ls -la /tmp /var/tmp /dev/shmrkhunter / chkrootkit 使用
自动化的 rootkit 扫描工具,能检测常见后门和 rootkit:
bash
# === rkhunter ===
sudo apt install rkhunter
# 更新特征库
sudo rkhunter --update
# 更新文件属性数据库
sudo rkhunter --propupd
# 执行扫描
sudo rkhunter --check --skip-keypress
# 查看详细报告
sudo cat /var/log/rkhunter.log
# === chkrootkit ===
sudo apt install chkrootkit
# 执行扫描
sudo chkrootkit
# 每日自动扫描(加入 cron)
echo "0 4 * * * root /usr/sbin/chkrootkit 2>&1 | mail -s 'chkrootkit report' admin@example.com" \
>> /etc/cron.d/chkrootkitrkhunter 常见误报
rkhunter 有时会误报 /usr/bin/ldd、/usr/sbin/unhide 等文件为可疑。这是正常现象,先确认再行动。
AIDE 文件完整性监控
AIDE 不仅能做一次性的文件检查,更适合持续监控:
bash
# 每日检查计划(加入 cron)
cat > /etc/cron.daily/aide-check <<'EOF'
#!/bin/bash
/usr/bin/aide -c /etc/aide/aide.conf --check | \
mail -s "AIDE Report $(date +%Y-%m-%d)" admin@example.com
EOF
chmod +x /etc/cron.daily/aide-check关键配置文件被篡改时,AIDE 会精确地告诉哪些文件的什么属性变了。
实战:发现异常登录后的排查步骤
假设场景:凌晨 3 点,你在日志中发现来自一个境外 IP 的 SSH 成功登录。
Step 1:立即取证,不要关机
bash
# 保留当前状态的一切证据!
# ⚠ 不要关机、不要 reboot、不要轻易修改任何文件
# 记录当前时间
date > /root/incident_$(date +%Y%m%d_%H%M%S).log
# 记录进程快照(防止攻击者清理后丢失)
ps auxf >> /root/incident_$(date +%Y%m%d_%H%M%S).log
ss -tunap >> /root/incident_$(date +%Y%m%d_%H%M%S).log
netstat -s >> /root/incident_$(date +%Y%m%d_%H%M%S).logStep 2:分析入侵
bash
# 查这个 IP 做了什么
sudo journalctl -u ssh --since "2026-07-24" | grep "那个可疑IP"
# 检查该 IP 登录后运行了什么
sudo cat /var/log/auth.log | grep "那个IP" | tail -50
# 检查 history
cat /home/受影响用户/.bash_history
# 查看 root 的操作记录
cat /root/.bash_historyStep 3:确认影响范围
bash
# 检查是否新增了后门账号
grep -v "^#" /etc/passwd | awk -F: '($3 >= 1000 || $3 == 0) {print}'
# 检查 SSH authorized_keys
cat /root/.ssh/authorized_keys
cat /home/*/.ssh/authorized_keys
# 检查是否以 root 运行了恶意进程
ps aux | grep -v grep | grep "^\s*root" | grep -E "tmp|dev/shm|\.hidden"Step 4:隔离与清除
bash
# 先封禁攻击 IP
sudo ufw deny from <攻击IP>
# 或直接用 iptables
sudo iptables -A INPUT -s <攻击IP> -j DROP
# 修改所有用户密码
sudo passwd root
sudo passwd 受影响用户
# 排查并清理后门(参考 Step 3 的结果)🧪 练习题
- 用
last、lastb、ss命令做一次完整的登录和网络连接审计 - 安装 rkhunter,运行一次完整扫描,分析报告中的警告
- 模拟一个入侵场景:创建一个隐藏 SUID 文件和一条奇怪的 crontab,然后做一次完整的入侵排查
入侵检测靠的是"看见"——下一节我们来搭建—套完善的日志审计体系。
🎯 本章要点
- 先取证再处理。who 看当前谁在线,last 看最近登录
- 正常情况只有 root 的 uid=0。
- 半夜陌生 IP 登录、多出下载脚本的 cron 任务
加载练习题中...