Acuerdo con profesionales de seguridad informática, las dos razones principales de la utilización de la ofuscación del
código en malware son:
1. Para disuadir la ingeniería
inversa estática de malware. Se hace más difícil a enfocar las secciones de
código más importante.
2. Para que las firmas
estáticas utilizadas por los vendedores de AV no puedan detectar malware, ya que
las firmas se basan en secuencias de bytes específicas en el binario.
Vamos a entender con ayuda de
expertos de formación y servicios de hacking ético de IICS las
metodologías que usan programadores de malware. Abajo hay diferente
metodologías usadas por los programadores de malware para hacer ofuscación de
control de flujo en malware.
Ofuscación por funciones de
callback definida por la aplicación
Hay ciertas APIs proporcionadas
por Microsoft, lo que nos permite registrar una función de callback. Estos
pueden ser utilizados por malware para ocultar la lógica principal de su
código. Pueden pasar un puntero a la subrutina malicioso como el parámetro de
callback para la API. Cuando se crea window usando CreateWindowA (), el
procedimiento de window se invoca con ciertos mensajes por defecto como
WM_CREATE, WM_NCCREATE y así sucesivamente. Sin embargo, se ejecutará el código
del virus principal solamente cuando se recibe un mensaje de window en
particular explico Bill Smith experto de seguridad en la nube que maneja equipo
de análisis de malware de la nube.
Ejecución a través de manejo
de excepciones
Malware también podría
redirigir la ejecución de la subrutina malicioso mediante la activación de una
excepción. Para ello, primero se registran un manejador de excepciones
utilizando RtlAddVectoredExceptionHandler () o mediante el registro de un nuevo
manejador de excepciones estructurado.
Expertos de empresa de seguridad informática explican
que la excepción se puede invocar utilizando cualquiera de los siguientes:
1. Activación de una violación
de acceso a memoria, tratando de escribir en una dirección de memoria a la que no
hay acceso de escritura o intentando llamar a una dirección de memoria no
válida.
2.
Ejecución de una instrucción privilegiada como STI o CLI, que daría lugar a una
excepción privilegiada en modo protegido.
3. Realización de una división
por cero para activar la excepción.
Controlar debugger
Según expertos de hacking
ético, hay ciertas instrucciones especiales o secuencia de instrucciones que
cuando se ejecuta en el debugger cambian el comportamiento predeterminado del
debugger. Eso ayuda en ofuscación de control de flujo del código en debugger y
hace más difícil entender el código.
NT 2D tiene un comportamiento
especial en Olly debugger. Olly se saltará el siguiente byte en la ejecución
como resultado de los cuales se ofusca el flujo de control. Esta técnica se
refiere a menudo como byte scission. También tiene un comportamiento dinámico
en diferentes entornos.
Overwrite RETN: Este es un
comportamiento especial observado en Olly debugger. Si sobre escribimos la
instrucción RETN con el código de operación, 0xC3 (que es el código de
operación de RETN) justo antes de ejecutar RETN, debugger no se detiene en la
dirección RETN sino que se ejecuta el código dentro del debugger.
Instrucciones chatarras
Hay varios motores polimórficos
que son utilizados por los autores de malware para generar versiones
modificadas de su binario que realizan las mismas actividades en la máquina,
sin embargo se modifica su código explica Bill Smith experto de servicios de seguridad en la nube. Esto se utiliza a menudo para evitar firmas
estáticas escritas por detectar malware por proveedores de seguridad. Una de
las características importantes de un motor polimórfico es el generador de
instrucciones chatarras. Instrucciones chatarras son secuencia de instrucciones
que no afectan a la lógica general del código de ninguna manera, pero se
colocan para disuadir la ingeniería inversa. Entre cada instrucción útil, se
colocan varios bytes chatarras. Las principales razones para la inyección de
instrucciones chatarras en la sección de código son:
1. Estos bytes chatarras
podrían corresponder las instrucciones que no alteran la lógica general del
código. Aumentan el tamaño de la sección de código y disuadir la ingeniería
inversa, ya pesar de que estas instrucciones parecen ser legítimas y no tienen
ningún impacto en el comportamiento principal del virus.
2.
Instrucciones chatarras inyectados en el área de instrucciones corresponden a
las instrucciones parciales. Esto se hace para confundir a los desensambladores
que se basan en algoritmos como Linear Sweep y Recursive Traversals.
3. El código puede ser ofuscado
aún más mediante el uso de predicados opacos que se pueden combinar con las API
de Windows que siempre va a devolver un valor fijo.
Hay algunas
tecinas más de ofuscación de código usado por los hackers menciona Bill Smith y
alguien con experiencia en seguridad informática o seguridad en la nube puede
entender fácilmente y vamos a cubrir eso en próximo artículo.
0 comments:
Post a Comment