lunes, 21 de agosto de 2017

Categorización de la ofuscación utilizada en ciertos códigos JavaScript

Quiero desde aquí hacer eco, como recordatorio para todo el mundo entre los que me incluyo, del artículo: Reverse Engineering a JavaScript Obfuscated Dropper , del día 31/07/2017, que referencia al estudio: The Power of Obfuscation Techniques in Malicious JavaScript Code: A Measurement Study (no muy actual que digamos), en donde se puede obtener información sobre la categorización de los distintos tipos de ofuscación utilizada en archivos JavaScript.

NOTA: Recomiendo encarecidamente la lectura del artículo en toda su totalidad, el ejemplo puesto en el artículo es clarificador. Además ofrece un par de herramientas muy útiles al realizar ingeniería inversa de archivos JavaScript.

El estudio define cuatro tipos de técnicas de ofuscación:

Randomization Obfuscation

En este tipo de ofuscación, ciertos elementos del código JavaScript son modificados sin por ello modificar la semántica del código. Los "elementos" más tu utilizados son: espacios en blanco, comentarios, variables que no aportan nada al código y nombres de variables incomprensibles.

Data Obfuscation

El principal objetivo de estas técnicas es convertir los valores de variables y constantes en formatos que no afecten a la ejecución del código pero dificulten la lectura del mismo.

Las dos principales técnicas son:

    1. String splitting (división de cadenas de texto). Consiste en convertir un cadena de texto e un concatenación de subcadenas de texto.
                  
             2. Keyword substitution (sustitución de palabras clave). Consiste en colocar un comando JavaScript dentro de una variable y utilizar dicha variable en el resto del código.

      3. Encoding Obfuscation

Normalmente, hay tres maneras de codificar un código:

1.  Convertir el código en caracteres ASCII, Unicode o hexadecimales.

2.  Personalizar la codificación mediante funciones que se encarguen de codificar el código, este método implica que el propio código adjuntará un función de descodificación que deberá ser ejecutada antes de nada.

3.  Emplear métodos de cifrado/descifrado estándar. Por ejemplo: JScript.Encode, es un método creado por Microsoft para codificar código JavaScript.

 Logic Obfuscation

Está técnica consiste en manipular el flujo de ejecución del código javaScript sin afectar la semántica original del código mediante la modificación de estructuras lógicas. Existen dos maneras de hacerlo:

1.  Insertando instrucciones que nada tiene que ver con el flujo original del código.

2.  Añadiendo o cambiando estructuras condicionales.



NOTA FINAL

Cada técnica por sí sola no complica demasiado el análisis del código, el problema viene cuando se combinan.

Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.

martes, 1 de agosto de 2017

¡Te estoy viendo!, no puedes ocultarte.

Se leyó el día 27/07/2017 la noticia en RedesZone: "Cómo ocultar tu equipo en la red local para no ser detectado" (https://www.redeszone.net/2017/07/26/ocultar-equipo-red-local/), en la cual se comenta como hacer indetectable tú equipo en la red interna en donde se encuentre conectado.

Se consigue configurando el firewall de Windows para bloquear las comunicaciones a través del protocolo ICMP, ya que es el protocolo más utilizado para detectar las presencia de equipos conectados en una red.  Las herramientas que se suelen utilizar son:"Ping" y "Trace", que son, en definitiva, tipos especiales de paquetes del protocolo ICMP.

También indican que habría que revisar todo protocolo susceptible de indicar que nuestro equipo se encuentra conectado a la red para poder así estar 100% seguros de que nadie es capaz de detectarnos.

Pues, se puede afirmar que dicho planteamiento no es del todo correcto. Aunque se bloquee las peticiones entrantes del protocolo ICMP en un equipo o cualquier otro protocolo, es posible detectar dicho equipo.

Párrafo de la noticia leída

Nunca se puede estar al 100 % seguro de que nadie es capaz de detectar nuestra máquina.

¿Por qué?

Porque, en redes IPv4, siempre se puede utilizar  el protocolo de capa 2 (Nivel o Capa de Enlace del modelo OSI): ARP, para determinar la presencia de una máquina en la red.

En cualquier comunicación, se marca una dirección IP (Nivel o Capa de Red del modelo OSI) y un puerto de destino (Nivel o Capa de Transporte del modelo OSI). Pero, por debajo de todo esto y de manera transparente al usuario se trabaja con el Nivel o Capa de Enlace del modelo OSI, ya que toda red es a su vez una red local, es decir, Internet es una red local dentro de una red local y dentro de una red local, y así en bucle.

Esta Capa de Enlace se utiliza, básicamente, para buscar la dirección MAC del dispositivo que tiene asignada la IP buscada o la IP de aquel dispositivo que conoce cómo llegar a ese dispositivo (comúnmente conocido como: Puerta de Enlace).

Esa información, la relación de IP y MAC,  que se almacena en la tabla ARP, permanece en el equipo durante un cierto tiempo.

En definitiva, el protocolo ARP determina la MAC de la IP a la que va dirigida la comunicación saliente y genera un tabla con esa información.

De todo esto, se obtiene el famoso ataque ARP Spoofing para poder realizar el también afamado ataque: MiTM (Man in the Middle - Hombre en el medio).

Más información:
https://es.wikipedia.org/wiki/Internet_Control_Message_Protocol
https://es.wikipedia.org/wiki/Protocolo_de_resoluci%C3%B3n_de_direcciones
https://es.wikipedia.org/wiki/Ataque_de_intermediario
https://es.wikipedia.org/wiki/ARP_Spoofing

Un ejemplo

Sobre una máquina virtual  de uso propio, con el direccionamiento que se muestra en pantalla, se aplica la instrucción indicada en el artículo precursor de este artículo, y que permite la inclusión en el firewall de Windows de una regla para bloquear comunicaciones a través del protocolo ICMP.


Se comprueba desde otra máquina virtual que se encuentra en el mismo rango de direccionamiento que un "ping" a la máquina anteriormente comentada, no responde y no podemos afirmar que se encuentre activa.


Pero que ocurre cuando tras lanzar un "ping", se consulta la tabla ARP


Se obtiene la dirección MAC, y por lo tanto podemos afirmar que la máquina se encuentra activa.

Por lo tanto, no se puede afirmar que una máquina puede encontrarse 100% oculta frente al resto de equipos de su red.

RECORDEMOS: NUNCA SE ESTA 100% SEGURO

Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.