El pasado

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 H/P/A/V (Hacking/Phreak/Anarchy o Art/virus o virii) bien delimitado históricamente donde se puede ver como fué evolucionando hasta el día de hoy.

Sobre todo, como los conceptos fundamentales del malware 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.

Pongamos por caso, los abos de gera: 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 una shell. Estos ejercicios eran la puerta de entrada a la explotación binaria 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 Smashing The Stack For Fun And Profit de Phrack.

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.

Lo mismo ha sucedido con otras publicaciones, como la 40hex 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. Tener acceso a esta información también facilita entender como combatirlos.

Sitios como Textfiles.com, Archive.org / Wayback Machine e inclusive El Vault 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 Bitrot 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 VXHeavens.

Ucrania cierra VXHeavens

VXHeavens 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 BBSs especializados, y generalmente, cerrados al público.

El Viernes 23 de Marzo del 2012, el servidor de VXHeavens fue incautado por la policía ucraniana 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.

El autor del sitio, Andrey Baranovich conocido con su handle Herm1t explicó reiteradas veces a diferentes medios que nunca estuvo involucrado en ninguna actividad blackhat 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.

El sitio web VXHeaven volvió al siguiente año 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 malware, y no todo esta perdido, por ahora.

Como en los 90s, EmoCheck

El Centro de Coordinación del Equipo de Respuesta de Emergencia Informática de Japón, JPCERT/CC hace unos días publicó una herramienta llamada EmoCheck para detectar si el malware Emotet infectó máquinas con el sistema operativo Windows.

A los días, el CERT Alemán escribe el siguiente tweet:

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: https://twitter.com/certbund/status/1225705306371563520

[...]

std::string GenerateEmotetProcessName() {
    uint32_t q;
    uint32_t seed;
    int keylen;
    int mod;
    std::string keywords;
    std::string keyword;

    keywords =
        "duck,mfidl,targets,ptr,khmer,purge,metrics,acc,inet,msra,symbol,driver,"
        "sidebar,restore,msg,volume,cards,shext,query,roam,etw,mexico,basic,url,"
        "createa,blb,pal,cors,send,devices,radio,bid,format,thrd,taskmgr,timeout,"
        "vmd,ctl,bta,shlp,avi,exce,dbt,pfx,rtp,edge,mult,clr,wmistr,ellipse,vol,"
        "cyan,ses,guid,wce,wmp,dvb,elem,channel,space,digital,pdeft,violet,thunk";

    keylen = int(keywords.length());

    // first round
    seed = GetVolumeSerialNumber();
    q = seed / keylen;
    mod = seed % keylen;
    keyword += GetWord(keywords, mod, keylen);

    // second round
    seed = 0xFFFFFFFF - q;
    mod = seed % keylen;
    keyword += GetWord(keywords, mod, keylen);

    // std::cout << "[debug] Emotet process name on this host is " << keyword.c_str() << ".exe" << std::endl;
    return keyword;
}

std::vector<EmotetProcess> ScanEmotetProcess(std::string keyword) {
    PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)};
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    BOOL result;
    std::vector<EmotetProcess> emotet_processes;

    for (result = Process32First(snapshot, &pe);
         result == TRUE; result = Process32Next(snapshot, &pe)) {
        std::string process_name = WideCharToString(pe.szExeFile);
        if (process_name.find(keyword) != std::string::npos) {
            EmotetProcess emotet_process;
            emotet_process.pid = pe.th32ProcessID;
            emotet_process.process_name = process_name;
            emotet_process.image_path = GetImageFileName(emotet_process.pid);
            emotet_processes.push_back(emotet_process);
        }
    }
    return emotet_processes;
}



[...]

Commit en github d0708600a88060a311580a4458b103e6acb5b9f1

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.

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 Equipo de Respuesta de Emergencia Informática de Japón reinventa la primerísima versión de un antivirus, una vez más.