Español | English
rss facebook linkedin Twitter

Protección del software (Parte V)

El día de hoy vamos a hablar sobre los packers/protectors.

Definimos packer/protector como un programa que toma como entrada un fichero ejecutable y devuelve otro fichero ejecutable con la misma funcionalidad pero con ciertas protecciones añadidas que dificultan su análisis. Existe también la posibilidad de proteger el programa partiendo desde el código fuente e indicando las zonas calientes.

Se puede decir que los primeros programas de este estilo únicamente pretendían reducir el tamaño del ejecutable, de ahí el nombre de packers, pero se fueron introduciendo técnicas de protección, dando el paso a los protectors. Nosotros utilizaremos el término packer indistintamente para ambos ejemplos.

¿Cómo funciona?

El packer debe cifrar al menos la sección ejecutable del fichero a proteger, y en el momento de ejecutarlo debe ser capaz de descifrarlo y ponerlo en memoria. Existen packers que cifran el fichero completo, pero la mayoría optan por introducir una nueva sección, escribir en ella su rutina de descifrado y redirigir el punto de entrada a la misma.

Por supuesto, existen diferente maneras de implementarlo, ya que nos podemos encontrar con cifrados manuales que cifran una sección con un XOR, introducen la rutina de descifrado en alguna parte del ejecutable no utilizada y modifican la cabecera PE para que apunte a dicha rutina.

Si vemos las secciones de un mismo programa con y sin upx, podemos ver como mientras uno tiene el punto de entrada en la sección de código el otro tiene las secciones renombradas y el punto de entrada no apunta a la primera sección. El código que se ejecute en este segundo caso es el encargado de poner en memoria el programa desempacado antes de ejecutarlo.


EP y secciones de un programa escrito en c.

EP y secciones de un programa con UPX


Una protección de este tipo tiene la ventaja de que el desarrollador se despreocupa de la protección del software, y alguien ducho en el tema es el encargado de protegerla.

Visto el funcionamiento del mismo, se nos ocurren dos formas diferentes de atacar esta protección:
  1. Revertir el cifrado del packer.
  2. Atacar el momento en que el programa queda limpio en memoria antes de ejecutarse, volcar el proceso al disco y reconstruir lo necesario para obtener una copia funcional del original.

Cabe destacar que hoy día también se utiliza la virtualización como protección, ya que añade un grado de complejidad al análisis del programa.

En vista de los dos ataques mencionados, el segundo resulta mucho más asequible, pero para cada fase tenemos algunas contramedidas.
  • Para intentar evitar que se pueda llegar a detener la ejecución en el punto de entrada original del programa (OEP), se emplean "trucos" anti-debug
  • Para evitar que del volcado se obtenga un fichero funcional, se emplean técnicas anti-dump.
En próximos post hablaremos de algunas de estas protecciones.

Mikel Gastesi
S21sec e-crime

3 comentarios:

Rafa Sánchez dijo...

En la siguiente entrada en mi blog, explico cómo este mismo procedimiento de codificación XOR que comentas, se puede utilizar para ocultar archivos maliciosos a los antivirus.
http://rafasec.blogspot.com/2008/08/ocultar-troyanos-virus-etc-los.html
Se consigue ocultar un troyano a un 78% de los motores antivirus.
Sería interesante analizar los métodos de alteración de ejecutables de los packers para analizar cómo podrían viarjar ocultos archivos mailiciosos.
Un saludo.

S21sec e-crime dijo...

Hola rafa,

Se puede decir que el uso de un packer tiene efectos colaterales como el dificultar el trabajo de los antivirus, ya que la búsqueda por patrones o firmas deja de ser funcional.

La demostración de tu post es un muy buen ejemplo de ello ;)

Saludos,

number_binario@hispavista.com dijo...

Claro y luego los incompetentes de los antivirus son incapaces de detectar aplicaciones legítimas del malware ya que sus "super" heurísticas paranoicas detectan todo programa protegido con un packer como virus.

Un ejemplo sencillo es lo que está haciendo nod32 con la protección themida.

Muchos son los programadores de aplicaciones legítimas que se quejan por estas "chapuzas" de las compañias AVs que lo que hacen es meter mala fama a estas aplicaciones legítimas y luego a su vez estos programadores dejan de comprar licencias a los programadores de protecciones.

No entiendo donde radica la dificultad en desempacar una protección basada en VM como Themida.

Si hay un montón de reversers como es mi caso que tienen sus unpackers o scripts privados como es posible que todos los técnicos que trabajan en una empresa AVs no sean capaces de hacerlo con todo lo que ganan?

Y que no me vengan con el cuento chino de que tienen mucho malware que analizar por favor.

Que todos conocemos como se pueden automatizar los procesos.

Seamos serios!!!

PD: Tanto título de ingeniero o técnico de laboratorio ya me dirán a mí que sirve ya que en estos temas lo que sirve realmente es la experiencia que te dá el número de software/malware que analices en un determinado espacio de tiempo.

Y de eso los crackers sabemos mucho!!!


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login