Antivirus Bypass

Post

Un antivirus es un software de seguridad que protege ordenadores y otros dispositivos de amenazas como virus, ransomware y spyware, detectando, previniendo y eliminando software malicioso. Estas herramientas analizan archivos y programas en tiempo real y mantienen actualizadas sus bases de datos para identificar nuevas amenazas. Por otro lado, El antivirus bypass es el conjunto de técnicas que los atacantes utilizan para evadir, engañar o desactivar el software antivirus y otras herramientas de seguridad, permitiendo que el malware se ejecute en un sistema sin ser detectado. El objetivo es hacer que un código malicioso parezca inofensivo para los programas de seguridad.

Como funcionan los antivirus

Bases de datos de firmas

los programas pueden tener una firma única (definida por el antimalware) la cual es como su huella digital única que los identifica, como un ID. Esto se hace mediante un valor de hash generado a partir del contenido dentro del archivo o en algunos casos de secciones especificas dentro del archivo.

Aunque esta medida sea fácil de burlar, sigue siendo muy útil a la hora de verificar la integridad de los archivos o detectar programas maliciosos comunes.

Un cambio mínimo en los datos de entrada resulta en un hash totalmente diferente.

También Permite identificar copias exactas de archivos, lo cual es útil para el almacenamiento.

Los sistemas Antimalware modernos utilizan técnicas mas avanzadas para verificar firmas, como se menciono anteriormente, es muy fácil burlar esta medida ya que solo es necesario cambiar alguna parte dentro del contenido del archivo para que el hash sea totalmente diferente. Las técnicas mas utilizadas hoy en día son:

  • Firmas basadas en patrones de bytes: cuando se definen las firmas mediante secuelas especificas del código tomando en cuenta secuencias características en malware conocido.

  • Firmas YARA: reglas escritas con el lenguaje YARA para identificar y clasificar malware y otras amenazas de seguridad mediante la coincidencia de patrones.

Análisis estático

El análisis estático es el proceso de examinar el código fuente de un programa sin ejecutarlo para encontrar errores, vulnerabilidades, violaciones de las mejores prácticas o problemas de calidad. Se realiza utilizando herramientas automatizadas que analizan el código comparándolo con un conjunto de reglas predefinidas, como variables no utilizadas o funciones inseguras.

Un Antimalware que emplea Análisis estático primero inspecciona el archivo sin permitir que se ejecute para finalmente determinar si es malicioso después del análisis, por lo que no presenta ningún riesgo para el sistema mientras ocurre esta fase.

Este proceso funciona al analizar los strings de caracteres o código del programa para saber si coinciden con los de un programa malicioso, se buscan patrones conocidos.

Por ejemplo, si usamos YARA podemos definir una regla como la siguiente:

si al hacer el análisis estático con YARA se detecta ese string, se considerara como una detección.

Análisis Heurístico y de comportamiento

el análisis heurístico es una técnica que consiste en buscar y analizar comportamientos, patrones y características sospechosas comunes en malware incluso si no es conocido todavía, ya que no depende de firmas o bases de datos conocidas si no de comportamientos.

Esto se hace mediante un conjunto de reglas y perfiles de comportamiento predefinidos que representan o describen el comportamiento que suele estar en malware, por ejemplo:

  • Un archivo intenta modificar el Registro de Windows en zonas sensibles

  • El código esta ofuscado o empaquetado de manera inusual

  • Archivos que ejecutan PowerShell oculto

  • etc.

cada coincidencia suma puntos y si supera la expectativa se considera como malicioso.

Este proceso se puede realizar tanto de manera estática como dinámica:

  • Heurística Estática: se hace un análisis estático pero tomando en cuenta las reglas y perfiles de comportamientos anómalos/sospechosos.

  • Heurística Dinámica (Análisis dinámico): el programa se ejecuta en un sandbox controlado del antivirus para detectar e investigar el comportamiento del programa como las conexiones de red, modificación de claves en el registro, inyección de código, comportamiento persistente, etc.

Aunque suene como uno medida muy efectiva, esta es propensa a falsos positivos, requiere mas recursos, y aun es evadible.

AntiMalware Scan Interface (AMSI)

El AMSI o Interfaz de Análisis de antimalware es un componente de seguridad en Windows que permite a las aplicaciones y servicios enviar solicitudes de análisis a un producto de antimalware instalado en el sistema. Su propósito principal es mejorar la protección contra malware avanzado que utiliza scripts o código que se carga directamente en la memoria y no deja rastro en el disco, como los que se usan en ataques de fileless.

Si intentas ejecutar código malicioso en PowerShell, WSH, VBA, etc. es probable que el AMSI lo bloque al estar en su radar de procesos que implementan la interfaz AMSI.

API hooking

El API hooking es una técnica utilizada para interceptar y modificar el comportamiento de las llamadas a la API de Windows. Permite que un programa o proceso intercepte una llamada a una función API antes de que llegue a su destino original y la desvíe a una función personalizada (hook).

Si lo vemos de una manera un poco mas simple, consiste en interceptar funciones y llamadas del sistema antes de que el proceso destino las ejecute.

Los antivirus instalan estos hooks en funciones clave de Windows, haciendo que cuando el malware intente llamar a una de estas funciones, la llamada primero pasara por el hook del antivirus el cual analiza que esta pasando.

El API hooking es principalmente útil al interceptar llamadas al sistema, analizar comportamientos antes de que ocurra algo, bloquear técnicas sofisticadas, inyecciones en memoria, fileless, evasión, persistencia, etc.

Para que funcione al antivirus inyecta su propio DLL dentro de procesos críticos como PowerShell o explorer.exe con el código encargado de colocar hooks.

Detección y análisis de red

El análisis de red es una técnica utilizada para monitorear las conexiones hechas por la maquina y bloquear amenazas acorde a ciertos criterios. Esto incluye el análisis de una red nueva o de una red pública a la que te hayas conectado.

Para determinar si la actividad en la red es maliciosa, un antimalware suele basarse en los siguientes criterios:

  • Direcciones IP y dominios conocidos como maliciosos

  • Red flags de redes públicas (Falta de cifrado, portales cautivos sospechosos)

  • MITM

  • Proxies sospechosos

  • Uso de protocolos inseguros

  • intentos de fuerza bruta (conexiones que se abren y cierran repetidamente)

  • Patrones sospechosos en paquetes

  • etc.

El antivirus decide que conexiones pasan o son bloqueadas.

Detectores basados en ML

El Machine Learning es una herramienta bastante útil para de detectar amenazas de una forma bastante moderna. se basa en entrenar modelos capaces de analizar información como logs y actividad del sistema para detectar patrones sospechosos y poder actuar rápidamente ante cualquier amenaza o responder a incidentes. Esto lo hace una solución efectiva y precisa a la hora de escanear nuevas amenazas, ataques sofisticados o amenazas ya conocidas.

El modelo es entrenado con grandes cantidades de datos y millones de muestras para que aprendan a reconocer y tratar comportamientos sospechosos, maliciosos o anómalos.

Cuando se establecen en un equipo empieza a realizar análisis sobre el sistema, también análisis estáticos, heurísticos. Cuando encuentra algo de interés procede a tomar una decisión contra la amenaza y posteriormente toma retroalimentación.

Proceso de tratamiento de objetos maliciosos

Los antivirus siguen un algoritmo general a la hora de escanear y tratar con amenazas u objetos maliciosos, aunque en algunos servicios puede variar las acciones ejecutadas, casi siempre se sigue el mismo proceso general:

  • Análisis Inicial: cuando el antivirus esta escaneando de forma general el sistema y los archivos.

  • Detección: se identifica un elemento como potencialmente malicioso e inician con los escaneos mas profundos. Hace un análisis en el objeto sospechoso para determinar la accion posterior

  • Clasificación de la amenaza: el antimalware determina el nivel de riesgo objeto despues de los escaneos para decidir que accion es apropiada tomar en contra

  • Remediación: según como se clasificó el antimalware puede bloquear la ejecución, poner el archivo en cuarentena, eliminar el archivo, detener un proceso, terminar conexiones de red, revertir cambios o en algunos casos consultar al usuario que accion tomar.

Después del tratamiento, el producto genera logs y dependiendo de la configuración, envía telemetría al servidor central para análisis, correlación y mejora del motor.


Burlando medidas de detección

Evitar detección basada en firmas

como explicamos anteriormente, la detección basada en firmas es un método de seguridad que identifica las amenazas al comparar la actividad con una base de datos de patrones de ataque conocidos en malwares o técnicas específicas.

esto significa que es efectiva al detectar amenazas ya conocidas pero no para identificar técnicas nuevas, zero days, ataques desconocidos, etc. si no tienen una firma predefinida en alguna de estas bases de datos.

aun hay mas medidas basadas en firmas para detectar malware, por eso también debes en tomar en cuenta lo siguiente:

  • eliminar cadenas sospechosas, modificarlas y ofuscarlas.

  • utilizar polimorfismo.

  • cifrado de shellcode.

  • packers.

  • encoding personalizado.

también existen las firmas por comportamiento, que detectan comportamientos inusuales mediante firmas conocidas de acciones maliciosas (por ejemplo: inyección en procesos, ejecución de scripts ofuscados). Cuando un programa hace X cosa como de forma típica en el malware es bloqueada.

Debemos cambiar de que forma se ejecuta el payload para romper ese patrón, utilizando métodos alternativos y poco comunes para que alteren el flujo normal de ejecución, evitando así coincidir con las firmas de comportamiento conocidas.

Burlar Análisis estático

para evitar ser detectados por en análisis estático, el truco es hacer el código lo mas confuso posible, entre mas difícil de entender será mejor.

para esto se aplica una ofuscación, consiste en transformar el código fuente de un programa para que sea ilegible y difícil de entender pero que siga funcionando de la misma manera. Esto se hace para proteger la propiedad intelectual, evitar la ingeniería inversa y dificultar que los hackers analicen el código para encontrar vulnerabilidades.

En nuestro caso, lo usaremos para hacerlo ilegible ante el software antivirus si se aplica análisis estático.

la mayoría de los lenguajes caen en métodos similares (métodos universales de ofuscación):

  • Ofuscar Renombrando: Renombrar variables, funciones y clases a nombres inútiles o basura para hacer el código poco entendible:

    este código sigue siendo fácilmente entendible, pero al ofuscarlo queda así:

    aunque el código al ser simple siga siendo algo fácil de entender, necesita un análisis mas riguroso. ahora imagina eso en un payload complejo. El funcionamiento del código no cambia, solo se hace menos entendible.

  • Estructura de código basura: Quitar saltos de línea, indentacion y espacios para hacer el código poco legible, pero funcional. prácticamente arruinando o haciendo mas fea la estructura del código:

    Despues de arruinar la estructura quedaría algo así:

    debemos tener bastante cuidado pues al arruinar la indentacion de forma incorrecta pueden surgir varios errores.

  • Codificación y ejecución dinámica: Utilizar codificación como base64 o hexadecimal aplicado una o varias veces para decodificarlo en ejecución:

    al ejecutar el script, se decodifica un print con la palabra "Hola"

  • Cargas staged: partir instrucciones en varias partes para que el análisis estático por firmas de instrucciones peligrosas no detecte posibles instrucciones maliciosas:

    al partirlo quedaría algo así:

Evitando detección por comportamiento (heurística)

como se explico anteriormente, los análisis en heurística suelen utilizar sandboxes para analizar los programas, por eso podemos utilizar una técnica llamada "sandbox environment detection" la cual consiste en diversas técnicas de evasión utilizadas para determinar si el programa se esta ejecutando dentro de un entorno aislado (sandbox) y cambiar su comportamiento para poder evitar su detección.

Las técnicas mas comunes usadas suelen ser:

  • Análisis de hardware: capacidades muy pequeñas e irreales.

  • Detección de procesos: busca por nombres de procesos comunes en sandboxes

  • Usuarios y Actividad: analiza los usuarios, la actividad del mouse y el teclado.

  • Análisis de red: busca por direcciones MAC de virtualización o conexiones evidentes.

  • Análisis de aplicaciones: busca y detecta aplicaciones comunes en este tipo de sandboxes, por ejemplo wireshark, procmon o debuggers.

VMAware es una librería con cruce entre plataformas (cross-platform) de C++ para detección de maquinas virtuales, contando con mas de 100 técnicas que van sumando puntos de confianza que deciden si el equipo es una vm:

proporcionare algunos ejemplos de código simples en python para entender mejor algunas técnica:

AMSI bypass básico

Para burlar el AMSI, podemos intentar la ofuscación por string splitting, es una técnica donde un programa divide un texto significativo (como un payload) en fragmentos pequeños y que parecen inofensivos, y luego se reconstruyen dinámicamente cuando el programa esta en ejecución.

tienes esta instrucción:

para hacerle string splitting podemos seguir el siguiente procedimiento:

hemos modificado la instrucción partiéndola en varios pedazos dentro de una variable, para despues llamar a la misma que será interpretada como el comando correspondiente por PowerShell.

Otras formas parecidas de hacerlo:

el siguiente es por codificación ASCII

Last updated