Kate Li (Taiwan)的部落格

首頁

redis未授權訪問致遠程植入挖礦腳本(完結篇)

作者 zindani 時間 2020-03-11
all

1前面兩篇尚未完結續,本篇繼續

在上上篇【應急回應】redis未授權訪問致遠程植入挖礦腳本(防禦篇)中,從防禦的角度詳細描述了常規應急回應以及流程。

在上一篇【應急回應】redis未授權訪問致遠程植入挖礦腳本(攻擊篇)中,從日誌等入侵痕迹中分析,尋求突破,以一個攻擊者的角度還原redis攻擊,從未授權訪問到寫入ssh公開金鑰直至控制整台服務器,進一步確定此次勒索事件的根本原因。

 如果是在乙方安全公司,應急回應的工作已經基本結束,剩下的就是交付給用戶報告並幫助其修復漏洞。但到了甲方,可以說安全相關工作剛開始不久,對於非巨頭或非大型互聯網公司,特別是苦於在安全工作上難以推動的企業而言,那便是非常不錯的契機。

本篇繼續“縱向”和“橫向”對此次應急回應事件進行展開,不僅要完成“救火”,更要想到主動去發現火種苗頭。

經過綜合的分析與評估,就幾臺開發環境中的redis服務器被植入挖礦腳本,再也沒有找到其他被入侵的痕迹。相關人員也及時處理了惡意腳本、按照安全配寘規範對redis進行了加固。

就應急回應工作而言,可能該做的已經做好了,足以應對並向領導交差。但是如果從挖洞的角度來考慮,不難會有以下思考:

1)廠商是否真的修復了呀,會不會有遺漏?

2)廠商是否指哪兒打哪兒,其資產內其他redis服務器應該會存在類似的安全問題?

其中折射出不少常規甲方安全工作問題:

1)一個簡單的漏洞涉及部門較多,很可能需要較長時間修復,有時相關科技人員對安全風險的理解不够到位,原本以為已經完美修復實則存有缺陷,這似乎也跟安全人員的綜合能力以及安全部門的地位息息相關。如果是在甲方工作的同學,肯定深有體會,漏洞明明還存在,但是開發就是斬釘截鐵的說按照修復意見完成修復。

2)又或許是處於安全人員自身素質與安全危機感不够全面的緣故,同一企業中的安全性漏洞往往是相似的。如果在某幾個應用中發現類似的安全缺陷,那麼極有可能就是通病,所以針對redis未授權訪問這一缺陷對相關網段掃描或許會有驚喜。

大家都知道攻易守難,攻擊者隨意找一處企業的漏洞就可能對企業造成巨大傷害。反觀防守就需要面面俱到,涉及到的面非常廣,需要做到的點遠超安全人員手裡的資產也是常見的事情。

針對上面提及的兩個思考,更加說明甲方的安全人員需要將“安全事件進行到底!”。

2.1 資產蒐集

最高效的方法便是從運維童鞋處,獲取公司所有對外網段:如果是要求提供所有系統的地址以及服務,對他們而言難度和工作量可能會比較大,但若想要網段的時候還是比較easy。

2.2服務識別

為了更高效和快速對漏洞(redis未授權訪問)進行全網排查,需要對蒐集的資產進行服務識別,專門驗證redis服務相關的IP地址。自然而然想到的便是埠掃描:nmap、、IP Scanner、Advanced Port Scanner、masscan等利器,若要想有一個不錯的展示平臺還是推薦巡風(內嵌masscan),然而將上面的資產格式似乎不是巡風能接受的樣子:

需要將ip/mask轉化為ip地址段,使用IPy中的IP模塊即可實現。

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:aerfa

# Function:根據IP與遮罩計算輸出網段,比如:192.168.0.1/24 ==》192.168.0.1-192.168.0.255,適用於巡風資產發現時導入

from IPy import IP

f = open(“IPs.txt”,“r”) #運維同學提供的IP與遮罩

lines = f.readlines()

#print lines

f.close()

with open(“NewIps.txt”,“w”)as fp: #轉換生成適合巡風的網段

      for line in lines:

             NewIp = IP(line).strNormal(3)

             fp.write(NewIp + '\n')

print“OK!”

將網段粘貼進資產網絡探測清單中更新,進行篩選後即可獲取開放redis服務的主機,比如使用banner:redis進行篩選:

2.3漏洞掃描

同樣地,可以通過以添加挿件的形式進行快速批量漏洞掃描,現時巡風作者已經寫出相關挿件(參攷

https://github.com/ysrc/xunfeng/blob/master/vulscan/vuldb/crack_redis.py)。

def check(ip,port,timeout):

   try:

        socket.setdefaulttimeout(timeout)

       s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

       s.connect((ip, int(port)))

        s.send(“INFO\r\n”)

       result = s.recv(1024)

       if “redis_version”in result:

           return u“未授權訪問”

       elif “Authentication”in result:

           for pass_ in PASSWORD_DIC:

               s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

               s.connect((ip,int(port)))

                s.send(“AUTH %s\r\n”%(pass_))

               result = s.recv(1024)

               if '+OK' in result:

                   return u“存在弱口令,密碼:%s”%(pass_)

   except Exception,e:

pass

當我們面對安全事件的時候,有時候不僅要將“安全事件進行到底!”,也應該將“安全事件的效果發揮到極致!”。不能老想著吐槽公司領導看似挺重視安全的,實則沒有重點關注過安全部門,沒有資源沒有賦予足够的權利去推行安全工作,或者是安全leader缺乏魄力之類的外在原因。

3.1工作思路

與其不滿,不如改變。對於甲方安全人員而言,個人認為:(僅跟作者所處的公司安全環境相關,每個人的肯定會不太一樣)可以承受且沒有對公司造成重大損失的安全事件,未必是一件壞事兒。能及時、合理、充分的對待-處置安全事件,不僅有科技能力方面的要求,更需要安全智慧。

首先,我們能想到的:

深入分析入侵痕迹,不留殘留;

積極主動防禦,早日跳出“救火”的坑;

其次,我們更應該有意識的往“安全事件推動安全工作開展”方向靠攏。因為在現實工作環境中,安全人員常常遇到:

開發對安全性漏洞不服氣但怕擔責任;

說入侵不懂,說安全事件造成的危害和損失秒懂;

談防禦措施,有可能嫌麻煩不願意或不積極支持。

3.2實踐方向

為了有效利用此次“redis未授權訪問致遠程植入挖礦腳本”安全事件,可以組織相關開發、運維等人員參加事件的全程剖析與分享,讓大家知道安全的重要性以及忽略安全的危害性。

其次將其展開至正在推動的項目、尚未進行的項目以及類似redis配寘不規範導致的安全性漏洞,這裡不由得引出之前的【漏洞賞析】安全運維那些洞,結合自家的應用情况開展批量已知漏洞檢測,稍微更加全面的提升該方面的安全水准。