Your Title - bitrot 2026-08-04T15:08:17+00:00 http://example.com/tag/bitrot.html Author Here VXHeavens - Criminalización de la documentación histórica 2020-02-07T11:32:41+00:00 http://example.com/vxheavens-virus-crimen-e-historia <h1 id="el-pasado">El pasado</h1> <p>Ya estamos en el futuro, y en cierta manera, para entender como es que llegamos hasta acá en materia tecnológica desde el punto de vista de la seguridad informática, debemos comprender que hubo una especie de camino en la escena <code class="language-plaintext highlighter-rouge">H/P/A/V</code> (Hacking/Phreak/Anarchy o Art/virus o <code class="language-plaintext highlighter-rouge">virii</code>) bien delimitado históricamente donde se puede ver como fué evolucionando hasta el día de hoy.</p> <p>Sobre todo, como los conceptos fundamentales del <code class="language-plaintext highlighter-rouge">malware</code> de los 80s y los 90s siguen sorprendentemente vigentes. Las ideas, la desinformación, y la penalización de la distribución de la información al público sigue igual, solo cambiaron las tecnologías y los sistemas operativos.</p> <p>Pongamos por caso, los <a href="https://github.com/gerasdf/InsecureProgramming">abos de gera</a>: programas con diversas vulnerabilidades escritas de manera tal que necesiten diferentes estrategias - cada vez más avanzadas conforme uno avanza en los ejercicios - para ejecutar código arbitrario y modificar el flujo del programa para finalmente ejecutar <code class="language-plaintext highlighter-rouge">una shell</code>. Estos ejercicios eran la puerta de entrada a la <code class="language-plaintext highlighter-rouge">explotación binaria</code> y la llave que la abría: un importantísimo artículo, casi fundacional de la ejecución de código arbitrario datado en 1996 llamado <a href="http://phrack.org/issues/49/14.html">Smashing The Stack For Fun And Profit</a> de Phrack.</p> <p>Digo fundacional porque aunque romper el stack ya se hacía de antes, el hecho de publicarlo y documentar la lógica detrás de la ejecución de código arbitrario explotando vulnerabilidades abrió la puerta a bocha gente para explorar también esta parte de la computación, y eventualmente - a lo largo de los últimos 24 años - fundar equipos de investigación y/o empresas que se dedican a hacer que la Internet, programas y dispositivos sean un poco más seguros.</p> <p>Lo mismo ha sucedido con otras publicaciones, como la <a href="https://vault.0x705h.com/en/ezine/40hex">40hex</a> donde unos pibes fascinados con los virus empezaron a escribir y publicar código fuente detallando y enseñando la lógica detrás del funcionamiento de los virii. <em>Tener acceso a esta información también facilita entender como combatirlos</em>.</p> <p>Sitios como <a href="http://textfiles.com/">Textfiles.com</a>, <a href="https://archive.org/web/">Archive.org / Wayback Machine</a> e inclusive <a href="https://vault.0x705h.com/es">El Vault</a> son ejemplos del esfuerzo de muchas personas para mantener la historia de sucesos, archivos y programas que existieron décadas atrás y que lentamente están sufriendo la erosión del tiempo, una suerte de <a href="https://en.wikipedia.org/wiki/Data_degradation">Bitrot</a> donde la información no se degrada por cuestiones físicas, sino por el olvido, la falta de interés en hacer permanecer online información considerada obsoleta, o las acciones de gobiernos sobre sitios que documentan información mal considerada ilegal, como lo que sucedió con el ahora desaparecido <code class="language-plaintext highlighter-rouge">VXHeavens</code>.</p> <h1 id="ucrania-cierra-vxheavens">Ucrania cierra VXHeavens</h1> <p><code class="language-plaintext highlighter-rouge">VXHeavens</code> fué un sitio donde se archivaba todo documento o código fuente relacionado con Virus una suerte de biblioteca digital que contenía el código original de infinidad de virus de la mano de sus autores reales, que en su momento distribuían estos archivos en <a href="https://es.wikipedia.org/wiki/Bulletin_Board_System">BBSs</a> especializados, y generalmente, cerrados al público.</p> <p>El Viernes 23 de Marzo del 2012, el servidor de <code class="language-plaintext highlighter-rouge">VXHeavens</code> fue <a href="https://nakedsecurity.sophos.com/2012/03/28/vx-heavens-virus-writing-website-raided/">incautado por la policía ucraniana</a> bajo el delito de “creación de programas maliciosos con la intención de distribuirlos o venderlos”. Curiosamente, aunque fueran programas maliciosos, siendo que el sitio se dedicaba ciertamente a publicar código fuente y comentarlo, todo lo que se encontraba en ese sitio no presentaba peligro alguno. No solo porque la información la llevaba más de 10 años obsoleta, sino también que toda la información hosteada en esos servidores no servía para verdaderos criminales. Eran virus mayormente de los 90s, para MS-DOS, de la era pre-internet, totalmente inofensivos para los estándares de la computación del nuevo milenio.</p> <p>El autor del sitio, <code class="language-plaintext highlighter-rouge">Andrey Baranovich</code> conocido con su handle <code class="language-plaintext highlighter-rouge">Herm1t</code> explicó reiteradas veces a diferentes medios que <a href="https://www.pcworld.com/article/253567/security_experts_push_ukraine_to_drop_vx_heavens_prosecution.html">nunca estuvo involucrado en ninguna actividad blackhat</a> y que era practicamente imposible infectarse al visitar el sitio. Todo código disponible en el sitio necesitaba conocimiento especial y la persona interesada en “activar el malware” tenía que hacerlo deliberadamente.</p> <p>El sitio web <a href="https://www.grahamcluley.com/vx-heaven/">VXHeaven volvió al siguiente año</a> para terminar desapareciendo para siempre por razones hoy desconocidas. De alguna manera se perdió una fuente invaluable de información. Por suerte todavía existen mirrors de esta piedra basal del <code class="language-plaintext highlighter-rouge">malware</code>, y no todo esta perdido, por ahora.</p> <h1 id="como-en-los-90s-emocheck">Como en los 90s, EmoCheck</h1> <p>El Centro de Coordinación del Equipo de Respuesta de Emergencia Informática de Japón, <code class="language-plaintext highlighter-rouge">JPCERT/CC</code> hace unos días publicó una herramienta llamada <a href="https://github.com/JPCERTCC/EmoCheck">EmoCheck</a> para detectar si el malware <a href="https://es.wikipedia.org/wiki/Emotet">Emotet</a> infectó máquinas con el sistema operativo Windows.</p> <p>A los días, el CERT Alemán escribe el siguiente tweet:</p> <blockquote> <p>Los autores del malware respondieron a la publicación de la herramienta EmoCheck cambiando los nombres de la generación de archivos y procesos. Por lo tanto la herramienta no puede detectar infecciones de binarios mas nuevos. JPCERT/CC está trabajando en una actualización de la herramienta. // Fuente: <a href="https://twitter.com/certbund/status/1225705306371563520">https://twitter.com/certbund/status/1225705306371563520</a></p> </blockquote> <figure class="highlight"><pre><code class="language-c--" data-lang="c++"><span class="p">[...]</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="nf">GenerateEmotetProcessName</span><span class="p">()</span> <span class="p">{</span> <span class="kt">uint32_t</span> <span class="n">q</span><span class="p">;</span> <span class="kt">uint32_t</span> <span class="n">seed</span><span class="p">;</span> <span class="kt">int</span> <span class="n">keylen</span><span class="p">;</span> <span class="kt">int</span> <span class="n">mod</span><span class="p">;</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">keywords</span><span class="p">;</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">keyword</span><span class="p">;</span> <span class="n">keywords</span> <span class="o">=</span> <span class="s">"duck,mfidl,targets,ptr,khmer,purge,metrics,acc,inet,msra,symbol,driver,"</span> <span class="s">"sidebar,restore,msg,volume,cards,shext,query,roam,etw,mexico,basic,url,"</span> <span class="s">"createa,blb,pal,cors,send,devices,radio,bid,format,thrd,taskmgr,timeout,"</span> <span class="s">"vmd,ctl,bta,shlp,avi,exce,dbt,pfx,rtp,edge,mult,clr,wmistr,ellipse,vol,"</span> <span class="s">"cyan,ses,guid,wce,wmp,dvb,elem,channel,space,digital,pdeft,violet,thunk"</span><span class="p">;</span> <span class="n">keylen</span> <span class="o">=</span> <span class="kt">int</span><span class="p">(</span><span class="n">keywords</span><span class="p">.</span><span class="n">length</span><span class="p">());</span> <span class="c1">// first round</span> <span class="n">seed</span> <span class="o">=</span> <span class="n">GetVolumeSerialNumber</span><span class="p">();</span> <span class="n">q</span> <span class="o">=</span> <span class="n">seed</span> <span class="o">/</span> <span class="n">keylen</span><span class="p">;</span> <span class="n">mod</span> <span class="o">=</span> <span class="n">seed</span> <span class="o">%</span> <span class="n">keylen</span><span class="p">;</span> <span class="n">keyword</span> <span class="o">+=</span> <span class="n">GetWord</span><span class="p">(</span><span class="n">keywords</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="n">keylen</span><span class="p">);</span> <span class="c1">// second round</span> <span class="n">seed</span> <span class="o">=</span> <span class="mh">0xFFFFFFFF</span> <span class="o">-</span> <span class="n">q</span><span class="p">;</span> <span class="n">mod</span> <span class="o">=</span> <span class="n">seed</span> <span class="o">%</span> <span class="n">keylen</span><span class="p">;</span> <span class="n">keyword</span> <span class="o">+=</span> <span class="n">GetWord</span><span class="p">(</span><span class="n">keywords</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="n">keylen</span><span class="p">);</span> <span class="c1">// std::cout &lt;&lt; "[debug] Emotet process name on this host is " &lt;&lt; keyword.c_str() &lt;&lt; ".exe" &lt;&lt; std::endl;</span> <span class="k">return</span> <span class="n">keyword</span><span class="p">;</span> <span class="p">}</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">EmotetProcess</span><span class="o">&gt;</span> <span class="n">ScanEmotetProcess</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">keyword</span><span class="p">)</span> <span class="p">{</span> <span class="n">PROCESSENTRY32</span> <span class="n">pe</span> <span class="o">=</span> <span class="p">{</span><span class="k">sizeof</span><span class="p">(</span><span class="n">PROCESSENTRY32</span><span class="p">)};</span> <span class="n">HANDLE</span> <span class="n">snapshot</span> <span class="o">=</span> <span class="n">CreateToolhelp32Snapshot</span><span class="p">(</span><span class="n">TH32CS_SNAPPROCESS</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="n">BOOL</span> <span class="n">result</span><span class="p">;</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">EmotetProcess</span><span class="o">&gt;</span> <span class="n">emotet_processes</span><span class="p">;</span> <span class="k">for</span> <span class="p">(</span><span class="n">result</span> <span class="o">=</span> <span class="n">Process32First</span><span class="p">(</span><span class="n">snapshot</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">pe</span><span class="p">);</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TRUE</span><span class="p">;</span> <span class="n">result</span> <span class="o">=</span> <span class="n">Process32Next</span><span class="p">(</span><span class="n">snapshot</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">pe</span><span class="p">))</span> <span class="p">{</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">process_name</span> <span class="o">=</span> <span class="n">WideCharToString</span><span class="p">(</span><span class="n">pe</span><span class="p">.</span><span class="n">szExeFile</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="n">process_name</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">keyword</span><span class="p">)</span> <span class="o">!=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span> <span class="p">{</span> <span class="n">EmotetProcess</span> <span class="n">emotet_process</span><span class="p">;</span> <span class="n">emotet_process</span><span class="p">.</span><span class="n">pid</span> <span class="o">=</span> <span class="n">pe</span><span class="p">.</span><span class="n">th32ProcessID</span><span class="p">;</span> <span class="n">emotet_process</span><span class="p">.</span><span class="n">process_name</span> <span class="o">=</span> <span class="n">process_name</span><span class="p">;</span> <span class="n">emotet_process</span><span class="p">.</span><span class="n">image_path</span> <span class="o">=</span> <span class="n">GetImageFileName</span><span class="p">(</span><span class="n">emotet_process</span><span class="p">.</span><span class="n">pid</span><span class="p">);</span> <span class="n">emotet_processes</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">emotet_process</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> <span class="k">return</span> <span class="n">emotet_processes</span><span class="p">;</span> <span class="p">}</span> <span class="p">[...]</span></code></pre></figure> <p>Commit en github <a href="https://github.com/JPCERTCC/EmoCheck/blob/d0708600a88060a311580a4458b103e6acb5b9f1/emocheck/emocheck.cpp">d0708600a88060a311580a4458b103e6acb5b9f1</a></p> <p>En los 90s, exactamente así arrancó el mundo de los Antivirus y la pelea constante entre los coders de virii y las actualizaciones de Antivirus.</p> <p>Estos problemas ya se han resuelto incontables veces a lo largo de las décadas. Lo preocupante es cuando una entidad que lleva el nombre <code class="language-plaintext highlighter-rouge">Equipo de Respuesta de Emergencia Informática de Japón</code> reinventa la primerísima versión de un antivirus, una vez más.</p>