2. Tal y como avanzamos en el anterior post de esta serie sobre 'crypters', los Antivirus,
en adelante AVs, escanean los archivos en el disco de la computadora u ordenador y
no en la memoria RAM y este comportamiento es el que aprovechan los 'crypters'
para evadir la detección de los AVs. Veamos como lo hacen.
3. Los 'crypters' utilizan técnicas de 'cifrado' para ocultar los archivos maliciosos.
Repasemos rápidamente en qué consiste un cifrado. Un cifrado es un procedimiento
que utiliza un algoritmo y una clave para transformar un mensaje legible en otro
indescifrable.
Veámoslo con un ejemplo: vamos a 'cifrar' el mensaje "HOLA" con el algoritmo de
cifrado ROT (también conocido como cifrado César) y la clave de cifrado será "1".
Este algoritmo lo que hace es, para cada carácter del alfabeto, avanza tantas
posiciones como el valor de la clave de cifrado establecida, en este caso "1". Así
pues, tras aplicar el algoritmo, la letra "A" se transforma en la "B", la "B" en la "C" y
así sucesivamente. Por tanto el mensaje "HOLA" se transforma en "IPMB".
4. De este modo hemos ocultado nuestro mensaje y para que alguien pueda descifrarlo,
necesitará conocer tanto el algoritmo empleado (ROT) como la clave de cifrado (1).
Obviamente este es un algoritmo muy sencillo y una clave igualmente sencilla, lo cual
permitiría llevar a cabo ataques con el propósito de deducir el algoritmo y la clave, sin
embargo, existen infinidad de algoritmos de cifrado enormemente complejos que
pueden utilizarse y son utilizados para cifrar 'malware'.
5. La idea básica que subyace en el concepto de 'crypter' es la siguiente: si se cifra un
archivo malicioso, éste será transformado en un archivo 'ininteligible' para el AV y por
tanto no será detectado.
Lo cual es cierto, pero claro, existe un pequeño problema, y es que el archivo
malicioso cifrado no funciona, no puede ejecutarse, así que es necesario encontrar
una solución, una técnica que se encargue de descifrar y ejecutar el archivo
malicioso. Esta pieza de software se denomina 'stub'.
6. Por regla general un 'crypter' consiste en dos elementos: el 'crypter' y el 'stub'. Esta
última es la pieza más importante del conjunto.
7. El 'crypter' consiste generalmente en un programa que permite buscar y seleccionar
en el sistema de archivos del ordenador el ejecutable a cifrar (generalmente un
archivo malicioso, pero es posible cifrar cualquier archivo que se desee). Algunos,
permiten adicionalmente introducir la contraseña de cifrado de forma manual o
generarla aleatoriamente. Y en ocasiones, algunos permite activar cierta medidas
anti-forenses.
Una vez seleccionado el archivo a cifrar y pulsado el botón de 'cifrar' (Build en el
ejemplo de la imagen) nos generará un 'nuevo ejecutable', el cual en realidad
consiste en una composición del 'stub' y un 'payload', que no es más que el malware
cifrado.
8.
9. Como puede observarse, 'crypter' y 'stub' están relacionados, ya que el 'crypter' se
encarga de ejecutar el algoritmo de 'cifrado' y el 'stub' se encarga de ejecutar el
algoritmo de 'descifrado'. Para que el 'stub' pueda descifrar el malware necesita
conocer la clave utilizada en el proceso de cifrado.
En algunos casos, el programador del 'crypter' no da opción al usuario a elegir una
clave, sino que la ha definido de antemano en su código, y en otras sí permite elegirla
o generarla aleatoriamente, en cualquier caso, al generar el 'nuevo ejecutable' el
'crypter' ha de almacenar la clave en el algún lugar para que el 'stub' pueda
encontrarla y descifrar el malware.
10. Si se observa en detalle este 'nuevo ejecutable', lo que vemos es una configuración
bastante habitual, en la que tras el archivo ejecutable que constituye el 'stub', se
añaden unos separadores de delimitan el lugar en el que se encuentra la almacenada
la clave y a continuación se añade el malware cifrado. Obviamente cada programador
puede organizar esta distribución como más le guste y en ocasiones, en lugar de
añadir directamente el malware cifrado tras el stub, lo introducen en un recurso del
ejecutable PE.
11.
12. Cuando este 'nuevo ejecutable', valga la redundancia, es ejecutado, el 'stub' se
encarga de copiar a la 'memoria RAM' el malware cifrado, descifrarlo allí mismo, y a
continuación ejecutar dicho 'malware' ya descifrado.