在我們調查過的多數案子中都出現了相似的行為模式,我們叫它攻擊生命周期。
安全就像貓捉老鼠,安全團隊加了些新的防御措施,然后攻擊者換了種攻擊方式,繞過你的防御體系。在2014年里還是這樣。我們發現更多攻擊使用了VPN來連接受害方的網絡。同時也出現了許多很聰明的新方法來繞過檢測,新工具和技巧從已攻下的環境中傳出信息。
獲取了目標網絡的VPN登錄權限給了攻擊者兩個非常有利的優勢。首先他們可以在不用部署后門的情況下持續連接到目標網絡內。其次他們可以像正常用戶那樣登錄內部網絡。
在最近幾年中,我們發現一些組織在內網站住腳之后,立刻瞄準了VPN服務器和VPN賬號。在2014年,這種趨勢達到了有史以來最高,越來越多的攻擊通過受害方的VPN服務進行。
我們發現了兩種常見的攻擊VPN的方式:
·單因素認證: 如果對方的VPN只需要用戶名和密碼就可以登錄,攻擊者只要簡單的用之前收集到的賬號或者從AD獲取的賬號密碼就可以了。
·基于賬號的雙因素認證: 如果對VPN需要雙因素認證比如用戶證書,攻擊者會使用常見的工具比如Mimikatz來從用戶終端中獲取證書。我們還發現了一些被竊取的用戶證書是通過不安全的方式分發給用戶的,比如通過email附件發過去(論社工目標郵箱的重要性)或者放在開放的網絡共享中。
在另一些比較少見的場景中,攻擊者使用了一些漏洞來繞過VPN,比如通過Heartbleed,可以從服務器的內存中獲取64kB的數據。安全研究員一開始對這個漏洞的影響有些懷疑,比如是否能在實際攻擊中竊取到敏感信息,例如,加密密鑰,密碼和證書等等。
之后他們的惡夢成真了,在Heartbleed漏洞公開后一周內,我們發現了一起利用這個漏洞獲取了VPN的session的安全事件,不需要用戶名和密碼。在之后的幾周里,攻擊者通過Heartbleed攻擊了其他受害者的VPN系統。
道高一尺魔高一丈。在2014年我們在攻擊生命周期里發現了一些新的技巧,有些比較有特點。
在這些案例中,VPN記錄給了我們一些提示: 被攻擊者利用的VPN賬號的登錄源地址經常變動,比如在不同ISP的IP段中切換,甚至在不同國家中切換等等。(論SIEM的重要性)
惡意軟件檢測是一個永不停歇過程。在2014年我們發現攻擊者使用了很多新技巧來隱藏他們的操作和新的安裝長期后門的方式。
隱藏webshell 我們發現了幾起案例,攻擊者把webshell放到了有SSL的服務器上,因為對方的網絡結構不支持SSL流量檢查,所以攻擊者的webshell繞過了基于流量的識別。
另一個趨勢是在合法網頁里嵌入一句話webshell,比如eval之類的。 最后一種很狡詐的后門隱藏方式是在配置文件比如web.config里加載惡意模塊。例如:
#!html
<!--HTTP Modules -->
<modules>
<add type=”Microsoft.Exchange.Clients.BadModule” name=”BadModule” />
</modules>
攻擊者利用配置文件加載了一個偽裝成真實微軟DLL文件名的惡意模塊,并且把配置文件和dll文件的時間戳也改了。
Windows Management Instrumentation (WMI)是一個Windows的核心組件,它提供了廣泛的系統管理功能和接口。程序和各種腳本語言都可以用WMI來收集數據,和系統底層交互和執行命令。WMI還提供了一個基于事件(Event)的觸發器功能,可以被用來在特定對象的狀態發生改變的時候觸發惡意軟件。
在前幾年,我們沒有發現有多少攻擊者通過WMI來繞過檢測,這很可能是因為和WMI交互比較復雜,另外一些基礎的繞過方式已經足夠了。但是在2014年,我們發現了一些組織通過WMI來實現隱蔽的后門。
這些技巧用了WMI的三個部分,一般通過powershell來執行:
Event filter 事件過濾器: 利用系統定時輪詢的功能來達到長期執行的目的,比如每天x點x分執行一次。
Event consumer事件消費者: 在發生特定事件的時候執行特定的程序或者命令。
Filer to Consumer Binding: 把consumer綁定到filter上,確保在事件發生的時候event consumer得到執行。
Figure7:
一個consumer用來執行一個命令或腳本 一個filter來輪詢系統 一個binding來把filter綁定到consumer
#!sql
SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Hour = 08 AND TargetInstance.Minute = 05 GROUP WITHIN 60
#!bash
CommandLineTemplate="C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
–NonInteractive –enc SQBuAHYAbwBrAGUALQBDAG8AbQBtAGEAbgBkACAALQBDAG8AbQBwAHUAdABl...
下面是通過powershell建立WMI命令執行consumer的例子,利用powershell.exe執行傳入的base64編碼后的參數,base64編碼后的內容也是powershell腳本,比如下載執行一些程序等等。如果綁定的是可以重復執行的filter,那么也可以定時執行命令.
#!bash
Set-WmiInstance -Namespace “root\subscription” -Class ‘CommandLineEventConsumer’
-Arguments @{ name=’EvilWMI’;CommandLineTemplate=”C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
–enc SQBuAHYAbwBrAGUALQBDAG8AG8AbQ...<SNIP>”;RunInteractively=’false’}
基于WMI的持久后門給取證帶來了一些難度。WMI filter和consumer沒有在注冊表里留下痕跡。 WMI對象存在于硬盤上的一個復雜的數據庫中(objects.data),給分析帶來了難度。另外,Windows只會在debug級的日志打開后才會記錄WMI執行的審核日志,此外這也不是長久之計,因為日志量非常大(windows本身也有很多功能用到MWI)。
我們還觀察到幾個案例,攻擊者使用了Windows Local Security Authority (LSA) security packages. 一種少見的基于注冊表的長期后門。用來隱蔽的自動加載惡意軟件。 安全包是一些在系統啟動時由LSA自動加載的一些DLL。這些安全模塊通過注冊表里的 HKLM\ SYSTEM\CurrentControlSet\Control\Lsa 鍵值來加載。 每個鍵值都包括了一個字符串列表,指向%SYSTEMROOT%\system32\下需要加載的文件名(不含擴展名)
因為LSA模塊是通過lsass.exe自動加載的,具有管理員權限的攻擊者可以添加或者修改這些參數,加載惡意DLL。在2014年,我們發現有攻擊者通過安全包的功能在系統上加載了一個多級后門,tspkgEX.dll
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages中加載的模塊:
SECURITY PACKAGES (修改前): kerberos msv1_0 schannel wdigest tspkg pku2u
SECURITY PACKAGES (修改后): kerberos msv1_0 schannel wdigest tspkg pku2u tspkgEx
這導致了系統啟動后自動加載 C:\WINDOWS\system32\tspkgEx.dll
因為LSA的可擴展性,自定義的安全模塊可以在用戶登錄的時候抓到明文密碼。
在幾乎全部的調查中我們都遇到了能繞過殺軟的各種Mimikatz的改版,攻擊者一般都修改和重新編譯了源碼來繞過檢測。 Mimikatz也包括了一個邪惡的LSA模塊 mimilib ssp 用來獲取密碼。
簡單的得到密碼
2014年用的比較多的兩個方法: Pass the hash,通過獲取的hash來認證。
用Mimikatz從內存獲取明文密碼。 微軟在windows server 2012R2和Win8里減少了上面兩個方法的有效性,但是我們遇到的大部分客戶都還在用Server 2008和win7.
hash傳遞還是很好用的,尤其是很多系統都用相同的本地管理員密碼的時候。Mimikatz更加進一步,能直接從內存中得到明文密碼。
在一臺員工的電腦上,能獲取的僅限于員工賬號的密碼。在一個有很多交互式登錄的服務器上,能獲取到的東西多的多。受害者們很快發現,從幾臺系統被攻下到整個域被拿下只需要很短的時間。
在我們的調查中,幾乎從來沒有殺軟檢測到了Mimikatz,甚至還有基于powershell的腳本在內存中執行Mimikatz。
Mimikatz還能夠生成Kerberos golden ticket,在攻擊者拿下域控之后,生成的一種可以無限期生效的金鑰匙,可以用來代表任何賬號登錄,即使那個賬號密碼改過了。有了這個金鑰匙,攻擊者只要到了內網環境,就可以隨時重新獲取整個域的管理權限。
唯一的防御Kerberos金鑰匙的方法是,除了別讓你的域被攻下之外,重置服務Kerberos Key Distribution賬號的krbtgt密碼兩次。這樣即可讓生成的金鑰匙失效。
在過去,在windows內網環境中滲透用的都是一些windows自帶的工具,比如net,at,還有自己寫的小工具,腳本或者vbs,要么就是psexec。這些手段又快又好用,但是會留下一些證據還有記錄。
2013到2014年,我們發現了我們跟蹤的APT組織的行為發生了顯著的變化,他們越來越多的使用了WMI和powershell進行后期滲透,收集密碼和信息等等。 同樣,安全研究和滲透測試工具也廣泛的使用了powershell,這或許開源了許多信息和源碼,讓攻防兩方都學了不少東西。
VPN劫持: 在這一年里我們發現了更多受害方的VPN權限被攻擊者成功獲取。
明文密碼: 攻擊者重新編譯了Mimikatz,打造了各種各樣的工具來從內存中獲取明文密碼,并且可以繞過殺毒軟件。
Webshell隱藏: 攻擊方繼續用著各種新穎的方式來隱藏web shell。我們發現了一些很隱蔽的方式: 把webshell放到可以用SSL訪問的地方來躲避網絡檢測 在正常網頁里的一句話eval后門(老外你們弱爆了,eval一句話我們早玩膩了) 通過服務器配置文件來加載惡意DLL(類似Apache的模塊后門)
惡意安全模塊: 利用Windows security package的可擴展性來加載后門和key logger
使用WMI和powershell: 越來越多的攻擊利用了WMI和Powershel,兩個windows內置的強大工具/功能,用來保持長期后門,收集數據和持續滲透。
Kerberos攻擊: 在拿到了域管理員權限后,攻擊者使用了Kerberos golden ticket attack來登錄任意賬號,即使域管理員重置了密碼。