<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RootKit on</title><link>https://synacklabs.github.io/tags/rootkit/</link><description>Recent content in RootKit on</description><generator>Hugo -- gohugo.io</generator><language>es-es</language><lastBuildDate>Thu, 15 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://synacklabs.github.io/tags/rootkit/index.xml" rel="self" type="application/rss+xml"/><managingEditor>admin@synacklabs.github.io (SynAckLabs)</managingEditor><webMaster>admin@synacklabs.github.io (SynAckLabs)</webMaster><item><title>Cyberpsychosis (Easy)</title><link>https://synacklabs.github.io/posts/cyberpsychosis/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://synacklabs.github.io/posts/cyberpsychosis/</guid><description>&lt;h2 id="contexto-y-objetivo"&gt;Contexto y objetivo&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cyberpsychosis&lt;/strong&gt; es un challenge de reversing y análisis de rootkits que simula un escenario de respuesta a incidentes. Según el briefing, actores maliciosos han comprometido un sistema e implantado un rootkit personalizado. El objetivo es analizar el módulo, desactivarlo y recuperar la información oculta.&lt;/p&gt;
&lt;p&gt;El challenge proporciona un archivo comprimido que contiene un módulo de kernel de Linux (LKM), tipo de malware utilizado para mantener persistencia con máximos privilegios y evasión de detección.&lt;/p&gt;</description><content>&lt;h2 id="contexto-y-objetivo"&gt;Contexto y objetivo&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cyberpsychosis&lt;/strong&gt; es un challenge de reversing y análisis de rootkits que simula un escenario de respuesta a incidentes. Según el briefing, actores maliciosos han comprometido un sistema e implantado un rootkit personalizado. El objetivo es analizar el módulo, desactivarlo y recuperar la información oculta.&lt;/p&gt;
&lt;p&gt;El challenge proporciona un archivo comprimido que contiene un módulo de kernel de Linux (LKM), tipo de malware utilizado para mantener persistencia con máximos privilegios y evasión de detección.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="reconocimiento-inicial"&gt;Reconocimiento inicial&lt;/h2&gt;
&lt;p&gt;Al descomprimir el archivo proporcionado, encontramos un fichero con extensión &lt;code&gt;.ko&lt;/code&gt;: &lt;strong&gt;diamorphine.ko&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Identificamos el tipo de archivo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;file diamorphine.ko
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Se trata de un &lt;strong&gt;Kernel Object&lt;/strong&gt;, es decir, un &lt;strong&gt;módulo de kernel cargable (LKM)&lt;/strong&gt; para sistemas Linux. Estos módulos operan en ring 0 con privilegios absolutos sobre el sistema.&lt;/p&gt;
&lt;p&gt;Una búsqueda inicial revela que &lt;strong&gt;Diamorphine&lt;/strong&gt; es un rootkit LKM público y bien documentado, diseñado para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ocultar procesos del sistema&lt;/li&gt;
&lt;li&gt;Elevar privilegios de usuarios arbitrarios&lt;/li&gt;
&lt;li&gt;Ocultarse a sí mismo de herramientas de monitorización&lt;/li&gt;
&lt;li&gt;Persistir en el kernel&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="análisis-estático"&gt;Análisis estático&lt;/h2&gt;
&lt;h3 id="carga-en-ghidra"&gt;Carga en Ghidra&lt;/h3&gt;
&lt;p&gt;Cargamos el módulo &lt;code&gt;diamorphine.ko&lt;/code&gt; en &lt;strong&gt;Ghidra&lt;/strong&gt; para realizar ingeniería inversa del código. Como primer paso, inspeccionamos las strings presentes en el binario para identificar indicadores de comportamiento.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e7888fa-f353-806a-bd96-e62e5dc1f964.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;Las strings confirman la presencia de &lt;strong&gt;Diamorphine&lt;/strong&gt;, mostrando referencias al proyecto original. Esto valida nuestra hipótesis inicial sobre la naturaleza del rootkit.&lt;/p&gt;
&lt;h3 id="documentación-del-comportamiento-estándar"&gt;Documentación del comportamiento estándar&lt;/h3&gt;
&lt;p&gt;Consultamos el repositorio oficial del proyecto (&lt;a href="https://github.com/m0nad/Diamorphine"&gt;https://github.com/m0nad/Diamorphine&lt;/a&gt;) para comprender el comportamiento esperado:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/8cd31af4-4ab0-4567-b8e1-35f23aff9c7f.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;Según la documentación, el módulo responde a señales de Unix (&lt;code&gt;kill&lt;/code&gt;) para activar funcionalidades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Señal 31&lt;/strong&gt;: Ocultar o mostrar un proceso específico&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Señal 63&lt;/strong&gt;: Alternar visibilidad del módulo en &lt;code&gt;lsmod&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Señal 64&lt;/strong&gt;: Otorgar privilegios de root al proceso que envía la señal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El procedimiento estándar de desinstalación es:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kill -63 &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#75715e"&gt;# Hacer visible el módulo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rmmod diamorphine &lt;span style="color:#75715e"&gt;# Eliminar el módulo (como root)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="análisis-dinámico"&gt;Análisis dinámico&lt;/h2&gt;
&lt;h3 id="primer-intento-de-desactivación"&gt;Primer intento de desactivación&lt;/h3&gt;
&lt;p&gt;Nos conectamos al servicio remoto proporcionado:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nc &amp;lt;IP&amp;gt; &amp;lt;Puerto&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aplicamos el procedimiento documentado para hacer visible el módulo y eliminarlo:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e7888fa-f353-803f-8708-f3c63321d4bc.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;El sistema entra en &lt;strong&gt;kernel panic&lt;/strong&gt; inmediatamente. Esto indica que el rootkit ha sido &lt;strong&gt;modificado intencionalmente&lt;/strong&gt; y no sigue el comportamiento del Diamorphine original. La señal 63 no es la correcta en esta versión.&lt;/p&gt;
&lt;h3 id="identificación-de-la-modificación"&gt;Identificación de la modificación&lt;/h3&gt;
&lt;p&gt;Retornamos al análisis estático. Navegamos a la función &lt;code&gt;hacked_kill()&lt;/code&gt;, responsable de procesar las señales enviadas al módulo.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/ad777010-d72c-4ac1-a263-56202fb84c81.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;Observamos que la condición que controla la visibilidad del módulo compara contra un valor en hexadecimal. Convertimos el valor a decimal mediante clic derecho en Ghidra:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e7888fa-f353-8032-a3d3-ee359b65f260.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;El &lt;strong&gt;número mágico modificado es 46&lt;/strong&gt;, no 63 como en la versión original.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="solución-desactivación-del-rootkit-modificado"&gt;Solución: Desactivación del rootkit modificado&lt;/h2&gt;
&lt;p&gt;Con la señal correcta identificada, procedemos a desactivar el rootkit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hacer visible el módulo&lt;/strong&gt; con la señal modificada:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kill -46 &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obtener privilegios de root&lt;/strong&gt; con la señal documentada:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kill -64 &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e7888fa-f353-80f7-b652-cac6bfa58d3d.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;El rootkit ahora es visible y tenemos privilegios de root sin causar kernel panic.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="recuperación-de-la-flag"&gt;Recuperación de la flag&lt;/h2&gt;
&lt;h3 id="búsqueda-en-el-sistema-de-archivos"&gt;Búsqueda en el sistema de archivos&lt;/h3&gt;
&lt;p&gt;Sabiendo que HackTheBox almacena sus flags típicamente en archivos &lt;code&gt;.txt&lt;/code&gt;, realizamos una búsqueda recursiva en todo el sistema:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;find / -name &lt;span style="color:#e6db74"&gt;&amp;#34;*.txt&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e7888fa-f353-80c4-80f2-e71d70b353b7.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;La búsqueda revela la ubicación del archivo que contiene la información oculta.&lt;/p&gt;
&lt;h3 id="verificación-final"&gt;Verificación final&lt;/h3&gt;
&lt;p&gt;Leemos el contenido de la flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat /ruta/al/archivo.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e7888fa-f353-80e2-9714-d4c1a067b6c7.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;Obtenemos la flag y completamos el challenge.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="conclusión"&gt;Conclusión&lt;/h2&gt;
&lt;p&gt;Este challenge ilustra varios conceptos críticos en análisis de malware y respuesta a incidentes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizajes técnicos:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los rootkits LKM operan en ring 0 y pueden interceptar syscalls arbitrarias&lt;/li&gt;
&lt;li&gt;La función &lt;code&gt;kill()&lt;/code&gt; puede ser hookeada para implementar backdoors mediante señales personalizadas&lt;/li&gt;
&lt;li&gt;El análisis estático es imprescindible cuando la documentación pública no coincide con el comportamiento observado&lt;/li&gt;
&lt;li&gt;Los rootkits modificados requieren ingeniería inversa completa, sin asumir comportamiento estándar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Técnicas aplicadas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Análisis estático con Ghidra para identificar modificaciones en código conocido&lt;/li&gt;
&lt;li&gt;Correlación entre comportamiento documentado y comportamiento real&lt;/li&gt;
&lt;li&gt;Escalado de privilegios mediante funcionalidades maliciosas del rootkit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Implicaciones defensivas:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los LKM son extremadamente difíciles de detectar una vez cargados&lt;/li&gt;
&lt;li&gt;La verificación de integridad de módulos del kernel (&lt;code&gt;module signing&lt;/code&gt;, &lt;code&gt;Secure Boot&lt;/code&gt;) es crítica&lt;/li&gt;
&lt;li&gt;Herramientas como &lt;code&gt;LKRG&lt;/code&gt; (Linux Kernel Runtime Guard) pueden detectar hooks en syscalls&lt;/li&gt;
&lt;li&gt;La respuesta a incidentes con rootkits requiere arranque desde medios externos confiables&lt;/li&gt;
&lt;/ul&gt;</content><author>admin@synacklabs.github.io (SynAckLabs)</author></item></channel></rss>