martes, 21 de febrero de 2017

La nueva pasarela de malware - Parte 1

En estos últimos días/semanas he estado viendo/leyendo nuevos métodos utilizados por el malware para infectar máquinas.

Me gustaría recopilar  estos métodos, que, por supuesto, no son todos los que sufriremos.

DATA URI

El "data URI" es un esquema definido en las normas IETF RFC 2397. Dicho esquema permite la inclusión de pequeños elementos de datos en línea para referenciar una fuente externa de datos. Suelen ser mucho más simples que otros métodos de inclusión alternativos, como MIME con "cid:" o "mid:".

De acuerdo a la denominación en el RFC, los data: URI son, de hecho, URLs.

Se tienen noticias de su uso desde el año pasado, sobre todo porque son utilizados en anuncios publicitarios de multitud de sitios web. Aunque ahora se "han empezado" a utilizar como método de infección.

La estructura data URI utilizada es:

data:[<tipo de medio>][;base64],<data>

de manera más específica:

data:[<tipo/subtipo>][;<atributos=valores>][;base64],<datos>

 
Ejemplos:
               
                ARCHIVOS HTML
        
                       <href a="data:text/html;charset=utf-8,www.google.es">
               
                       <img src="data:image/png,base64,<imagen codificada en base64>" />
        
                JAVASCRIPT
        
                           window.open('data:text/plain;Hola Mundo;-)')

                CSS
 
   ul.checklist > li.complete { margin-left: 20px, background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC) top left no-repeat; }
 
NOTAS:
                1. - Los datos como se puede imaginar pueden ser codificados en base64.

        2.- Si el tipo de datos es obviado, por defecto se entenderá que los datos son de tipo: text/plain;charset=US-ASCII


PoC

1.- Código de nuestra página web que dejaremos en Internet


Código de la web habilitada en Internet

2.- Página web codificada en base 64 a la que re-direccionaremos la comunicación de todo aquel que accede a nuestra web.


Web que realmente se ejecutará

3.- Al ejecutar el archivo ".html" ... parece que no tenemos el efecto demo.


Ejecución del data URI

Más información:
https://www.securityartwork.es/2017/02/07/tendencias-malware-enero-2017/
https://es.wikipedia.org/wiki/Esquema_de_URI_de_datos
https://tools.ietf.org/html/rfc2397

martes, 7 de febrero de 2017

Una nueva clave de registro en Windows para persistir

Se quiere hacer eco de la siguiente entrada en el blog: Securityartwork.es (30/01/2017), así como de la entrada original del blog Enigma0x3.net (15/08/2016)

En dichas entradas se habla sobre la posibilidad de saltarse (bypass) la UAC (User Account Control), implementada por los sistemas Microsoft Windows para evitar la escalada de privilegios dentro del sistema.

El bypass se consigue mediante la creación/modificación de la siguiente clave de registro usada por la aplicación: eventvwr.exe (Microsoft Management Console)

HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command

Y sobre la que el usuario tiene permisos de escritura.

Prueba de concepto

Se ha procedido a crear la estructura de claves de registros en el hive: HKEY_Current_User, y sobre el valor por defecto se ha introducido la ubicación de la aplicación: "powershell".

Tras lo cual se ha procedido a  llamar a: eventvwr.exe. 

El resultado ha sido este:

Claves de registro creadas para la ejecución en este caso de la aplicación: powershell.exe

Tras la modificación del registro de Windows se procede a realizar la prueba con los efectos que se pueden apreciar en la foto.


Resultado final de la prueba de concepto.

Conclusión

Con lo que me quedo de dicho uso no es tanto la escala de privilegios como su posible uso para obtener persistencia de cualquier tipo de malware dentro de nuestro sistema, tal y como se comenta en el blog: Securityatwork.es

Por dicho motivo se debería considerar:

1.- Monitorización de la clave de registro comentada frente a la creación y/o modificación
2.- Configurar el nivel de la UAC a: "Notificar siempre". Para ello en la siguiente clave de registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Las variables:  ConsentPromptBehaviorAdmin y PromptOnSecureDesktop, deben de tener respectivamente los valores 2 y 1.

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

PD: Gracias por contactar DT

miércoles, 4 de enero de 2017

Sniffar la comunicación de un movil con una conexión ad-hoc creada en un portatil

Una manera rápida de poder comprobar las conexiones de comunicación de una App instalada en tu móvil es hacer que se conecte vía wifi a un ordenador .

Necesitaremos también un sniffer. ;-)

Para ello, el ordenador deberá tener configurada y en uso una conexión Ad-hoc, y si se quiere una conexión vía Wifi/cable físico (RJ45) con Internet.

Diagrama del entorno a montar.

Para montar una conexión Ad-hoc en nuestro ordenador con el ESSID: ZapZap tenemos que abrir un línea de comandos y ... :

1.- Antes de nada, comprobar que nuestra tarjeta de red wireless admite la posibilidad de crear un conexión Ad-hoc. Para ello hay que escribir: netsh wlan show, y comprobar la característica "Red hospedada admitida".


Información sobre las características del conector Wifi instalado en el ordenador.

2.- Ahora que sabemos que podemos montar una conexión Ad-hoc, procedemos a crear un nuevo conector de tipo Ad-hoc. Para lo cual se debe escribir: netsh wlan set hostednetwork mode=allow ssid=ZapZap key=ContraseñA.Aqui


Instrucción para crear un conector de tipo Ad-hoc

Conector creado

3.- Ahora necesitamos activarlo, para ello ejecutaremos: netsh wlan start hostednetwork

Conexión Ad-Hoc iniciada

Conector activo

4.- Ahora necesitamos transmitir las comunicaciones desde el conector Ad-Hoc hacía el conector que se encuentra conectado a la red wifi y por tanto a Internet. Para ello, sobre el conector conectado a Internet hacemos botón derecho, propiedades y nos vamos a la pestaña: "Uso compartido". En dicha pestaña, habilitamos la opción: "Permitir que los usuarios de otras redes  se conecten a través de la conexión a Internet de este equipo" y seleccionamos en el combo-box la conexión de nombre: ZapZap

Habilitamos el forwarded.

5. Ya no podemos conectar  a la red ZapZap desde el móvil.

Móvil conectado a la red Ad-hoc creada

6.- A partir de aquí, levantaríamos el sniffer en nuestro ordenador y comprobaríamos las comunicaciones procedentes de nuestra móvil

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

jueves, 22 de diciembre de 2016

¡¡Da igual que te escondas!!

Hace tiempo analizando un archivo con extensión con ".js", se encontró que aunque la forma de actuar del archivo era la típica de un lanzador (lanzamiento de un script en powershell que se intenta conectar con algún recurso en Internet), no se descubría la URL completa  porque la resolución DNS no se producía por la inexistencia del dominio dentro de los servidores DNS.

Añadir que además, el código del propio archivo ".js" daba un grado de codificación impropio de un archivo de esa extensión, por lo que se impedía de un manera rápida obtener la URL completa.

Código del archivo con extensión ".js"

Código ejecutado tras lanzar el archivo con extensión ".js"

Por lo anterior, se procedió a extraer la línea de comando anterior para analizar su contenido.


Contenido de la línea extraída anteriormente

Tras realizar al análisis del código se pudo ver dos secciones distintas:

1.- Definición de variables.
2.- Expresión que es invocada y que está formada por la un conjunto de las variables anteriormente definidas


Secciones anteriormente comentadas

Para saber el código que se esconde tras la expresión, se procedió a desarrollar un código HTML que ejecutase código javascript y que mostrara la expresión buscada, por pantalla.

Primeras líneas de código HTML desarrollado
Últimas líneas de código HTML desarrollado

El resultado de tal código fue.


 ¡¡¡Eureka!!!


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

lunes, 19 de diciembre de 2016

Me sigue faltando espacio de almacenamiento para mi diccionario.

Hace tiempo, realizado una auditoria web se encontraron pistas sobre la política manejada para usuarios y contraseñas.

Más concretamente:

1.- El usuario debía de tener hasta 8 caracteres.

Definición del campo Usuario.

2.- La contraseña debía de tener hasta 8 caracteres.

Definición del campo Password.

Revisando aún más en profundidad, se encontró código para comprobar la validación de los anteriores campos. Más concretamente:

1.- El usuario debe contener entre 3 y 8 caracteres, que además debe manejar un juego de caracteres que admite números, letras mayúsculas y el carácter "_"

Llamada a una función que debe chequear la longitud del usuario introducido

Llamada a una función que debe chequear los caracteres del usuario introducido
.
Diccionario utilizado para los caracteres del usuario introducido

2.- La contraseña debe contener entre 1 y 8 caracteres, que debe manejar un juego de caracteres que admite números, letras mayúsculas y minúsculas.

Llamada a una función que debe chequear los caracteres de la contraseña  introducida

Diccionario utilizado para los caracteres de la contraseña  introducida

En vista de estos datos, lo más seguro es que pensemos en elaborar un diccionario para realizar un ataque con el objetivo de averiguar usuarios/contraseñas. Pero, si hacemos eso, obtendremos un "pequeño problema" ...

El problema es que el diccionario -archivo que contiene todos los posibles patrones en función de la política de usuario/contraseñas encontrados-  es terriblemente grande como para tenerlo almacenarlo en una máquina.

Veamos la generación de los dos diccionarios que necesitaríamos en el anterior caso mediante la herramienta: Crunch.

1.- Para ello comprobamos y/o creamos los juegos de caracteres con los que vamos a crear los diccionarios que necesitamos. Para ello revisamos el archivo que "Crunch" posee para la definición de los susodichos juegos de caracteres y crearemos los juegos de caracteres que necesitamos.

Conjuntos de caracteres almacenados en la ubicación: /usr/share/crunch

Creación del conjunto de caracteres almacenados para generar el diccionario de los posibles usuarios y contraseñas.

Conjunto de caracteres cargados en el archivo de caracteres manejados por Crunch

NOTA: La creación de juegos de caracteres en el archivo que trae por defecto "crunch" implica trabajar con un usuario con permisos de administración. Añadir que los conjuntos de caracteres, si van a ser definidos con un nombre compuesto, NO pueden ir separados por el espacio en blanco.

2.- Creamos los diccionarios en función de los juegos de caracteres creados y en función del conocimiento que tenemos de la política de usuarios y contraseñas encontrados.

Espacio necesario para almacenar el diccionario para el campo "Usuario"

Espacio necesario para almacenar el diccionario para el campo "Contraseña"

¡Qué suerte el que tenga tal tamaño de almacenamiento!

Para el resto, tendremos que concretar la política de generación del diccionario a utilizar mediante el uso de un patrón para asíi obtener un diccionario que necesite menos espacio de disco, o utilizar cualquier otra herramienta que permitan lanzar ataques de diccionario previa definición de la política del diccionario a utilizar (número de caracteres, juego de caracteres, patrón, etc.)


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

jueves, 1 de diciembre de 2016

Script: CazandoSMB.sh

Hace tiempo desarrolle un pequeño script en bash para obtener información vía protocolo SMB, además de parsear la información relativa a recursos compartidos y comprobar si tenemos lo que hay para acceder para acceder a los mismos sin necesidad de credenciales.

El script se basa en:

1.- Nmap
2.- SmbClient

Entre otras cosas el script obtiene información sobre:

1.- Sistema Operativo
2.- Recursos compartidos
3.- Usuarios
4.- Procesos
5.- Dominios
6.- Grupos
7.- Sesiones

De la información obtenida, y mediante el script: "Parsea-SMB.sh", se parsea/trata la información relativa al Sistema Operativo y a los recursos compartidos. Además de intentar acceder remotamente a los recursos compartidos para los que el "nmap" determina que tenemos permiso de R (read) y/o R/W (read/write) , mediante el uso del programa: "smbclient".

Información obtenida:

1.- Información aportada por el Nmap en formato "xml" y que poseen el formato: <IP>-SMB.xml.

2.- Informe parseado con toda la información obtenida respecto al sistema operativo y los recursos compartidos por cada dirección IP encontrada con los puertos vinculados al protocolo SMB abiertos. El archivo posee el nombre: InformacionSMB.info.

3.- Informe parseado con toda la información obtenida respecto al sistema operativo y los recursos compartidos sobre los que se tiene permisos de R y R/W por cada IP encontrada con los puertos vinculados al protocolo SMB. El archivo posee el nombre: InformacionSMB-DeInteres.info.

4.- Informe parseado con toda la información obtenida respecto al sistema operativo y los recursos compartidos sobre los que se tiene permisos de R y R/W, y que además se ha podido acceder remotamente, por cada IP encontrada con los puertos vinculados al protocolo SMB. El archivo posee el nombre: InformacionSMB-Accedidos.info.

Código del script: CazandoSMB.sh
 
   
 
Código del script: Parsea-SMB.sh

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

viernes, 25 de noviembre de 2016

Monta un servidor web en menos de 1 minuto.

Si te descargas un exploit basado en código PHP, la mejor manera de ejecutarlo sin necesidad de configurar un servidor web capaz de interpretar código PHP es utilizar el siguiente comando:

php -S <dirección IP>:<puerto>

NOTA: Por supuesto es necesario tener instalado PHP

Este comando permite montar un servidor web capaz de interpretar código PHP sobre el directorio sobre el que se ejecuta. Si le añades la opción: -t <directorio>, montará el servicio web sobre el directorio especificado.

Ejemplo: php 127.0.0.1:3535 -t .

NOTA: Es necesario ejecutar el comando con permiso de: root, para poder utilizar puertos inferiores al 8081. Para los demás, no es necesario ejecutar el comando  como "root"

Más información:
                http://stackoverflow.com/questions/12235876/python-simplehttpserver-with-php
                http://serverfault.com/questions/338394/how-to-run-php-with-simplehttpserver

Ejecución del exploit basado en PHP con nombre: 38534.php, descargado desde la base de datos de exploits: https://www.exploit-db.com/


Se aprovecha este espacio para comentar la existencia del script de python de nombre: SimpleHTTPserver.

Dicho script te permite, al igual que se ha comentado anteriormente, generar un servidor web del directorio desde donde se ejecute mediante el comando:

python -m SimpleHTTPserver <puerto>

NOTA: Al solicitar la raíz del servidor web montado, obtendremos un listado del contenido del directorio sobre el que hemos montado el servidor web.

IMPORTANTE: NO interpreta  código .php

Más información
                https://creadpag.wordpress.com/2016/01/09/como-utilizar-simplehttpserver-en-kali-linux-2-0/

Ejecución del script de python: SimpleHTTPserver.