• Generalidades sobre cocteles

  • Soluciona aquí tus preguntas frecuentes. Temas recomendados antes de preguntar.
Soluciona aquí tus preguntas frecuentes. Temas recomendados antes de preguntar.
 #235759  por $DoC
 25 Sep 2010, 00:25
Generalidades sobre cocteles


Que es un coctel?
Se le llama 'coctel' a la mezcla de protectores/encriptadores a un programa, que de tal forma logre que el mismo cambie su estructura interna y pase a ser desapercibido por los antivirus. Estos métodos estan expuestos claro esta a resultados inesperados, ensayo/error es el mejor método para obtener cocteles. La estabilidad se logra iniciando de un server desempaquetado, para así evitar que la estructura del programa se rompa cuando estemos tratando de encriptarlo. Por lo que un programa sin protección esta abierto a ser modificado hexadecimalmente, o vía recursos.

Como funcion los antivirus?
Método de firmas: El antivirus tiene una o varias muestras (firmas) del código del troyano guarda en una base de datos, luego busca estas muestras en el archivo a analizar, éste método requiere que previamente la compañía antivirus haya ingresado la firma a su base de datos.

Método heuristico: Se trata de buscar características comunes halladas en el código, nombre o ubicación de los troyanos para detectarlos aunque el antivirus no tenga una firma del mismo. Su importancia radica en que es la única defensa posible frente a la aparición de nuevos códigos maliciosos.

Método residente: Cuando el antivirus permanece alerta analizando cada archivos que se lee o escribe en nuestro disco. Tiene la desventaja de consumir recursos del sistema.

A pedido:: Cuando el antivirus realiza el análisis solo cuando se lo pedimos. Defensas pro-activas: Son una especie de Método Heurístico que opera en modo Residente detectando, por ejemplo, cambios en sectores críticos del sistema y que programa lo realiza.

Elementos de un coctel
Qué es un binder?:
Un binder (también llamado Joiner o Juntador) es un programa que une dos o más archivos. Estos archivos pueden ser ejecutables o de cualquier otro tipo dependiendo del binder que usemos. Hay ciertas normas que nunca se pueden violar en este tipo de uniones de archivos. Por ejemplo, podemos unir un archivo *.exe a un archivo *.jpg. el resultado nunca podrá ser un archivo *.jpg.

Qué es un Dropper?:
Es una forma más avanzada de unir varios archivos en un solo programa. Comportamientos comunes en los droppers son su ejecución invisible, más la diferencia radica en que el binder une los archivos, en un dropper los archivos ocultos son parte de los recursos del programa visible. Esto crea el efecto para un usuario común que pensara que solo esta ejecutando una sola aplicación, cuando en verdad pueden haber otras tantas dentro de la misma aplicación. Resultan mucho más difíciles de detectar, pero se necesitan programar manualmente y crear los recursos (.RES) necesarios.

Qué es un crypter?:
Un crypter es una aplicación capaz de proteger a un fichero ejecutable para evitar su descomposición y/o depuración. Lo proteje encriptando el original y dejando una referencia a el en el Stub , así al ser ejecutado se abre primero el Stub, y luego este con la referencia al ejecutable original, lo desencripta y ejecuta. Al elegir el ejecutable que se quiere proteger, el crypter lo analiza (tampoco le hace un análisis profundo, es solo para saber si es un ejecutable y si contiene como mínimo un Byte). Una vez que el crypter sabe que es un ejecutable y que tiene datos para encriptar, lo que hace es leer sus bits, encriptarlos y almacenarlos en una variable segura dentro de el. Luego el crypter se dedica a buscar su Stub,

Qué es un stub?:
Un Stub es un fichero ejecutable que es configurado por el crypter para saber a que fichero debe hacer referencia, y como lo debe desencriptar.
Por lo general el Stub lo hacen pasar por librería o por ficheros .dat para esconderlo un poco, pero a la hora de unirlo a un fichero encriptado, se transformara de nuevo en un .exe. Así que.. una vez que el crypter encontro el Stub, le pasa los datos necesarios (los que ya dijimos) y lo antepone a los bits encriptados del fichero ejecutable original.

Qué es un packer?:
Es un programa empleado para empaquetar un programa dentro de otra estructura más compleja, la cual al momento de ejecutarse extrae los datos del programa original. El cambio de estructura es con el fin de proteger el programa y su contenido hasta el momento en que se ejecute.

Qué es un compresor?:
Un compresor es un programa empleado para reducir el tamaño de un fichero. El objetivo de este tipo de compresores es buscar redundancias en el fichero original y eliminarlas, de forma que la pérdida de información no implique una pérdida de calidad, o al menos ésta no sea demasiado apreciable.

Qué es un scrambler?:
Es un programa empleado para cifrar los strings de una aplicación, esto con el fin de protegerlos en scantime, y retornarlos a su estado original desencriptandolos en runtime. Su funcionalidad es más que todo para proteger los strings de ser visibles fácilmente y evitar detecciones por firmas.

Tipos de protección ante el AV
Qué es protección scan-time:
Scan-time hace referencia al momento en que un archivo es escaneado por el AV antes de ejecutarse, por lo que si hablamos de una protección scan-time, esta nos permitira pasar por alto la detección de un archivo SOLO hasta el momento de ejecutarse.

Qué es protección run-time:
Scan-time hace referencia al momento en que un archivo es ejecutado, si hablamos de una protección run-time, esto quiere decir que el archivo permanece encriptado aun en el momento de su ejecucion y permitirá pasar por alto el AV tanto antes como despues de ejecutarse.

Elementos de un coctel en acción
Úso de los binders/droppers en los cocteles:
La indetectabilidad de un binder solo dura al momento de escanearlo, pues cuando se ejecute este extraera los archivos que tiene en su contenido, por lo que si bindeas un archivo detectado, este sera detectado al momento de ejecutar el bindeado. (A no ser que sea un "superbinder" que extraiga los archivos y los inyecte en memoria, emulando el funcionamiento de un crypter y su stub).



Una buena forma es haciendo mezclas (Encriptar + bindear + proteger + comprimir). Lo ideal seria manejar todo en un solo paquete (exe) y evitar el bind, pues este suele ser detectado o contrarrestado por defensas proactivas a la hora de ejecutarse. Los binders No hacen indetectables los programas, lo que hacen es juntar varias cosas, y sirven para engañar cuando por ejemplo le envías un troyano a alguien si no le aparece nada en la pantalla es sospechoso, si con un binder juntas el troyano con una foto ya no es tan sospechoso

Úso de los killers:
Un Killer es un programa destinado a matar un proceso o el modulo de un proceso especifico, en el caso especifico, se usan para finalizar un Antivirus para que su defensa sea desactivada y se pueda colar cualquier tipo de malware. Este tipo de programas suele ser usado para bindearlo con otro programa que sea detectado y asi, lanzar primero el killer para finalizar el Antivirus y luego cuando la zona sea segura, lanzar el malware detectado. No siempre es necesario recurrir a matar el proceso de un antivirus, en ocasiones se puede deshabilitar el mismo retrasando la fecha del sistema (para que la licencia del antivirus expire y deje de funcionar) o deshabilitandolo desde raiz con tecnicas avanzadas de unhook en el SSDT.

Úso de anti-debug y máquinas virtuales:
La funcion 'Anti-Debug' evita en parte que nuestro programa pueda ser decompilado o analizado a fondo con un debugger (llamese IDA Pro, OllyDebub, etc), esto con el fin de mantener oculta la información interna del mismo.
Las funciones Anti Maquinas virtuales evitan que nuestro programa sea ejecutado en un entorno seguro virtualizado (llamese VMware, sandbox, VirtualPC, etc), esto con el fin de evitar que sea posiblemente analizado por algun experto en malware que emplea maquinas virtuales para evitar infectarse a si mismo mientras desarticula el funcionamiento del programe en su ejecucion. Todas estas son medidas preventivas, pero no definitivas.

Úso de inyecciones en memoria o en proceso:
La inyección nos permite ejecutar el codigo de un programa dentro de otro programa, o directamente a memoria. Esto nos evita que las llamadas en memoria que hace el programa pasen protegidas en cierto modo a la deteccion AV.

Úso de encryptadores:
Estos no hacen mas pequeño el programa, generalmente lo hacen mas grandes, algunos de estos programas solo tienen el fin de hacer indetectable las aplicaciones. Usar los encriptadores da muy buenos resultados, pero al poco tiempo los antivirus los añaden a sus listas y son detectados.
Los ejemplos de encriptadores más comunes son el Themida, el SD Protector ...

Generalidades sobre los cocteles
Qué es un archivo empaquetado?:
Es un programa protegido, cuya estructura básica ha sido alterada para evitar su modificación. Existen varios programas para empaquetar y varios tipos de protección, esto con el fin de resguardar la información interna del programa y mantenerlo dentro de una nueva estructura asegurada.
COMO DETECTAR EL TIPO DE EMPAQUETADO DE UN ARCHIVO?
Existen multiples programas que ayudan a dicho fin como lo son PeiD, RGD Packer Detector, QuickUnpack, entre otros.

Cómo desempaquetar un archivo?:
Una vez detectado el tipo de protección del archivo, se procede a buscar una forma de retornarlo a su estado original, ya sea mediante herramientas automatizadas como PeiD, QuickUnpack, o manualmente usando un debugger como ollydebug, IDA pro, etc y reestableciendo el codigo segun el tipo de proteccion.

Qué es un fake signature?:
Es una firma falsa que se le añade a la aplicación, esto con el fin de complicar la detección del tipo de empaquetado que esta posee y hacerla pasar por otra estructura. La funcionalidad de estos fake signatures se puede ver por ejemplo para evitar que la aplicación sea fácilmente desempacada o que al momento que un AV la escanee, piense que esta protegida por algún programa no-malware que no sea sospechoso.

Leyes básicas sobre los cocteles

Ley del Coctel #1
"Sobre combinaciones y resultados"



Ley del coctel #2
"Sobre modificaciones en los programas"



Ley del coctel #3 "El exceso de alcohol es perjudicial para la salud".
- Esto hace referencia a algo simple, entre menos funciones o movimientos haga el server, más probabilidades tendrá de pasar desapercibido. Por lo que 'excederse en alcohol' siempre complicara el trabajo final. Una configuración básica (sin keyloggers ni nada de esos licores) evita que el server sea detectado en ejecución (o al menos previene).

Cocteles + iexpress:
Iexpress es un empaquetador por defecto incluido en windows, y al ser un 'programa de confianza' se usa para pasar scantime un rato.

Configurar iexpress como binder:
El Iexpress se usa 'normalmente' para generar paquetes de instalación, pero bajo la configuración adecuada podria usarse como un binder (ocultando cualquier rastro del instalador y dejando solo la copia y ejecucion de los archivos).
El caso es que habiendo binders mucho mejores que Iexpress, el hacerlo por ese metodo seria complicarte aun más. Se usa Iexpress como binder solo por la razón que el .exe resultante pasa desapercibido en scantime, pero estando a estas alturas del siglo se podría aprender a hacer un dropper y un binder con cualquier manual de programación por ahí, o usar un binder bien poderoso para ahorrarse un .bat de por medio que programe las ejecuciones.
No es un binder, es un 'empaquetador' por así decirlo.