本文目录导读:

检测Rootkit后门是一个深度安全议题,Shell脚本虽然无法检测所有高级Rootkit(如内核级Hook),但可以作为一个低成本、快速扫描的初始防线。
以下是一个分层的Shell脚本检测框架,包含常见后门文件、隐藏进程、可疑网络连接、LD_PRELOAD劫持等维度的检测逻辑。
核心检测脚本
#!/bin/bash
# rootkit_detector.sh - 简易Rootkit/后门检测脚本
# 用法: sudo bash rootkit_detector.sh
echo "========================================"
echo " Rootkit & Backdoor Scanner "
echo "========================================"
# ------------------------------
# 1. 检测隐藏进程(对比 /proc 与 ps)
# ------------------------------
echo "[*] 检查隐藏进程..."
declare -A proc_dirs
for pid in /proc/[0-9]*; do
pid_num=$(basename "$pid")
proc_dirs[$pid_num]=1
done
for pid in $(ps aux | awk '{print $2}' | tail -n +2); do
if [[ -z "${proc_dirs[$pid]}" ]]; then
echo " [!] 可能的隐藏进程: PID=$pid (存在于ps但不在/proc)"
fi
done
# ------------------------------
# 2. 检查LD_PRELOAD劫持
# ------------------------------
echo "[*] 检查 LD_PRELOAD 劫持..."
ld_preload_val=$(cat /etc/ld.so.preload 2>/dev/null)
if [[ -n "$ld_preload_val" ]]; then
echo " [!!!] LD_PRELOAD 被设置: $ld_preload_val"
echo " 这是高危信号,常见于Zeus、Jynx等Rootkit"
fi
# ------------------------------
# 3. 检测异常网络连接(端口绑定与反向连接)
# ------------------------------
echo "[*] 检测可疑网络连接..."
# 列出所有监听端口
ss -tlnp 2>/dev/null | while read line; do
port=$(echo "$line" | awk '{print $4}' | awk -F: '{print $NF}')
process=$(echo "$line" | awk '{print $NF}')
# 检查非常见端口(非80/443/22/3306等白名单端口)
if [[ "$port" =~ ^[0-9]+$ ]] && [[ "$port" -gt 1024 ]] && [[ "$port" != 3306 ]]; then
if [[ -n "$process" ]]; then
echo " [!] 非标准端口监听: $line"
echo " (可能的后门进程: $process)"
fi
fi
done
# 检查反向连接(ESTABLISHED状态且目标端口为非标准)
echo "[*] 检查异常外部连接..."
ss -tpn state established 2>/dev/null | while read line; do
dst=$(echo "$line" | awk '{print $4}')
dst_port=$(echo "$line" | awk -F: '{print $NF}')
# 如果连接端口是31337、1337、4444等常见后门端口
if [[ "$dst_port" =~ ^(31337|1337|4444|5555|6666|12345|54321)$ ]]; then
echo " [!!!] 检测到常见后门端口连接: $line"
fi
done
# ------------------------------
# 4. 检查异常内核模块
# ------------------------------
echo "[*] 列出加载的内核模块(检查隐藏模块)..."
lsmod | grep -v "^Module" | while read line; do
modname=$(echo "$line" | awk '{print $1}')
# 常见Rootkit模块名关键词
if echo "$modname" | grep -qiE "(hide|rootkit|backdoor|suterusu|adore|knark|phide|reptile|diamorphine)"; then
echo " [!!!] 可能的内核Rootkit模块: $modname"
fi
done
# 检查是否有隐藏模块(通过/proc/modules与lsmod对比)
echo "[*] 检查隐藏模块..."
declare -A lsmod_mods
for mod in $(lsmod | awk '{print $1}'); do
lsmod_mods[$mod]=1
done
for mod in $(cat /proc/modules 2>/dev/null | awk '{print $1}'); do
if [[ -z "${lsmod_mods[$mod]}" ]]; then
echo " [!!!] 隐藏内核模块: $mod (出现在/proc/modules但lsmod不可见)"
fi
done
# ------------------------------
# 5. 检查常见后门文件
# ------------------------------
echo "[*] 检测已知后门文件路径..."
backdoor_paths=(
"/tmp/.X11-unix"
"/usr/bin/slirp"
"/lib/libssl.so.0.9.8e"
"/usr/lib/libkeyutils.so.1.9"
"/lib/tls"
"/etc/rc.d/init.d/netd"
"/var/run/sshd.pid"
"/usr/bin/.sshd"
"/usr/local/bin/netstat"
"/usr/bin/sush"
"/etc/ssh/sshd_config.backdoor"
)
for path in "${backdoor_paths[@]}"; do
if [[ -f "$path" ]] || [[ -d "$path" ]]; then
echo " [!!!] 发现已知后门路径: $path"
fi
done
# ------------------------------
# 6. 检查cron后门
# ------------------------------
echo "[*] 检查crontab中可疑条目..."
for user in "root" "$(whoami)"; do
crontab -u "$user" -l 2>/dev/null | while read line; do
if echo "$line" | grep -qiE "(wget|curl|bash|perl|python|nc|ncat|netcat|chmod \+x|/dev/tcp)"; then
echo " [!!!] 可疑cron任务 (用户: $user): $line"
fi
done
done
# ------------------------------
# 7. 检查suid/sgid异常文件
# ------------------------------
echo "[*] 检查SUID/SGID异常文件..."
find /usr /bin /sbin /tmp /var/tmp -type f -perm -4000 -o -type f -perm -2000 2>/dev/null | while read file; do
md5=$(md5sum "$file" 2>/dev/null | awk '{print $1}')
# 已知安全SUID工具的MD5(示例)
safe_md5=("b5bb9d8014a0f9b1d61e21e796d78dcc" "d41d8cd98f00b204e9800998ecf8427e")
if [[ ! " ${safe_md5[@]} " =~ " ${md5} " ]]; then
echo " [!] 非标准SUID文件: $file"
fi
done
# ------------------------------
# 8. 检查SSH后门(authorized_keys & SSH配置)
# ------------------------------
echo "[*] 检查SSH后门..."
for user_home in /root /home/*; do
auth_key_file="$user_home/.ssh/authorized_keys"
if [[ -f "$auth_key_file" ]]; then
key_count=$(cat "$auth_key_file" | wc -l)
if [[ "$key_count" -gt 1 ]]; then
echo " [!] 用户目录 $user_home 有多个SSH公钥(可能被植入后门)"
fi
# 检查是否有已知后门公钥指纹(示例)
while IFS= read -r key; do
fingerprint=$(echo "$key" | ssh-keygen -lf /dev/stdin 2>/dev/null | awk '{print $2}')
if [[ "$fingerprint" == "SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ]]; then
echo " [!!!] 检测到已知后门公钥: $user_home/.ssh/authorized_keys"
fi
done < "$auth_key_file"
fi
done
# ------------------------------
# 9. 检查系统关键二进制是否被替换
# ------------------------------
echo "[*] 检查关键系统二进制..."
critical_bins=(
"/bin/ls"
"/bin/ps"
"/bin/netstat"
"/usr/bin/ss"
"/usr/bin/lsof"
"/usr/bin/find"
"/usr/bin/top"
"/sbin/ifconfig"
"/usr/sbin/sshd"
)
for bin in "${critical_bins[@]}"; do
if [[ -f "$bin" ]]; then
# 通过rpm/deb检查包完整性(如果系统支持)
if command -v rpm &>/dev/null; then
pkg=$(rpm -qf "$bin" 2>/dev/null)
rpm -V "$pkg" 2>/dev/null | grep "$bin" && echo " [!!!] 二进制被篡改: $bin"
elif command -v dpkg &>/dev/null; then
dpkg --verify 2>/dev/null | grep "$bin" && echo " [!!!] 二进制被篡改: $bin"
fi
fi
done
# ------------------------------
# 10. 最终提醒
# ------------------------------
echo ""
echo "========================================"
echo " 扫描完成 - 请人工确认结果 "
echo "========================================"
echo "注意:此脚本无法检测所有Rootkit(特别是内核级隐藏)"
echo "建议配合使用:chkrootkit, rkhunter, 或重装系统"
脚本关键点解析
| 检测维度 | Shell实现原理 | 检测范围 |
|---|---|---|
| 隐藏进程 | 对比/proc目录与ps输出 |
用户态Rootkit伪造 |
| LD_PRELOAD | 检查/etc/ld.so.preload |
动态链接库劫持(如Jynx) |
| 异常端口 | ss -tlnp扫描>1024端口 |
反向连接后门、持久化监听 |
| 隐藏模块 | 对比/proc/modules与lsmod |
内核模块隐藏(如Diamorphine) |
| SUID文件 | find配合MD5白名单 |
提权后门 |
| SSH公钥 | 计数+指纹匹配 | 持久化后门 |
| 二进制校验 | 调用rpm/dpkg verify | 被替换的常用命令 |
增强建议(无法在纯Shell实现的)
-
检测内核Hook
Shell脚本无法读取/dev/mem或/proc/kallsyms,需用chkrootkit或python-volatility。 -
检测LKM级隐藏进程
需要对比/proc/$pid/status与ps输出,但Rootkit可能Hook了getdents系统调用。 -
检测文件系统隐藏
Rootkit可以通过VFS层隐藏文件,Shell脚本无法发现,需要用strace或直接读取磁盘块设备。 -
检测内存后门
纯脚本无法扫描内存中的Shellcode(如/dev/shm的共享内存后门)。
实际应用流程
# 1. 首先用此脚本快速扫描 $ sudo bash rootkit_detector.sh # 2. 如果发现可疑点,使用专业工具 $ sudo apt install chkrootkit rkhunter $ sudo chkrootkit -x | grep "INFECTED" $ sudo rkhunter --check --skip-keypress # 3. 如果仍不放心 # - 使用Live CD启动检查硬盘 # - 检查系统日志: /var/log/auth.log /var/log/syslog # - 考虑重装系统(最彻底方案)
警告:如果检测到Rootkit,建议立即拔掉网线、备份关键数据、重装系统,Shell脚本只是辅助,不要依赖它做最终判定。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播