Category Archives: Seguridad - Page 3

Persistent BIOS Infection – CanSecWest

Acabo de leer en el blog de Anibal Sacco (Exploiting Stuff) un proyecto (Persistent BIOS Infection) que será presentado en el CanSecWest que tendrá lugar del 16 al 22 de Marzo en Vancouver en el que han participado Anibal Sacco y Alfredo Ortega, sobre la inyección y ejecución de código en el chip del BIOS.

De momento no hay demasiada información publicada, pero podéis seguir los avances tanto en mi blog, como en el de Anibal Sacco.

Noticia Original:

After some time without news -as is usual around here- im back again, ready to say that i was confirmed as speaker at the CanSecWest conference that will be held March 16-20, at Vancouver, BC.

We will give a talk about a project what we’ve been working on with Alfredo Ortega (you know, the OpenBSD guy :) ) about a new generic binary method to get malicious code injected and executed into the computer BIOS. Yeah, that cute little chip…

I will post more details about the conference in some time. In the meanwhile, you can get more info from

For those who are planning to attend the conference, we (Alfred & I) will be arriving 16/3, and of course, we are up for some beers.

Continue reading ‘Persistent BIOS Infection - CanSecWest’

MD5 Signed SSL Certificates Flaw

Como ya sabemos, muchas veces lo barato termina saliendo caro, y qué mejor ejemplo que este, y es que, no cuesta lo mismo comprar un certificado con una sola firma MD5, que MD5+SHA1.

El 30 de diciembre del 2008 tuvo lugar el “Chaos Comunication Congress” en Berlín, donde un grupo de investigadores hicieron público una aplicación de las vulnerabilidades del algoritmo de cifrado MD5 sobre los certificados usados en SSL (Secure Socket Layer).

Personalmente no lo considero un fallo del SSL sino un error de diseño, ya que en lo que se basa, no es más que buscar una colisión de la firma MD5 de los certificados de aquellos sitios que solo usan la firma MD5 para verificar el certificado, con lo que si el cliente acepta dicho certificado (las firmas, en este caso MD5), el navegador aceptará automáticamente cualquier certificado con la misma firma, pensando que es el mismo certificado.

Por tanto, a raíz de este error podemos suplantar el certificado del sitio y ver toda la comunicación que se lleva a cabo por SSL sin necesidad de que el usuario acepte un certificado “inválido”. Ni que decir tiene, el efecto que tendría este ataque combinado con DNS Spoofing…

Para saber si una entidad está afectada por este fallo, símplemente examinamos el campo “Signature Algorithm” del certificado.

Como era de esperar, se ha añadido un plugin para MetaSploit desarrollado por Efrain Torres, que detecta los certificados de los sitios afectados por este fallo.

En las siguientes imágenes se puede apreciar el diagrama que se sigue normalmente cuando un cliente realiza una conexión por SSL usando el certificado original, y el que seguiría realizando este ataque:

Certificado Original:

Suplantación del certificado:

Más información:

WifiWay 1.0 Final

Después de mucho trabajo por parte del staff de seguridadwireless.net, han publicado la versión 1.0 Final de WifiWay, sin duda, una live para tener siempre a mano.

Cito las características y mejoras:

wifiway-1.0-final

Descarga directa iso: http://download.wifislax.com:8080/wifiway-1-final.iso

Tamaño: 664.6 Megas
Es inferior a la beta con mucho mas contenido gracias a las ultimas linux-live,
lo cual la hacen mas rapida y menos necesidad de memoria RAM.
MD5: 2fac135cad7b185706bbcb9c51f45932 wifiway-1-final.iso
Descarga fichero MD5: http://download.wifislax.com:8080/wifiway-1-final.iso.md5

Nota: No aconsejamos usar firefox 3 para la descarga del fichero ISO

Kernel

Kernel: 2.6.27.7

Adaptado para modo liveusb 2.6.27.7 SMP mod_unload 486
Mantenemos las fuentes al completo y limpias, para la posiblidad de actualizar drivers.
Kernel tipo SMP permite aprovechar el 100% de los equipos con 2 nucleos, DUAL CORE

Entorno grafico
Kde: 3.5.9 estable
Con diferentes idiomas; castellano, ingles, aleman, portugues, catalan, vasco y frances.
Por supuesto las aplicaciones tipicas del etorno grafico KDE

Entorno alternativo x-win Fluxbox 0.9.15.1, podemos determinar el entorno a iniciar, por defecto es el KDE

startx		...  to start Xwindow
kde		...  to start Xwindow with KDE
flux		...  to start Xwindow with fluxbox

Ademas referente al entorno grafico:

autox    	...  to configure automatic the environment XWindow
autoxdefault    ...  to restore default the environment XWindow (Vesa)

por defecto se inicia con Vesa, asi el entorno grafico puede entrar en muchos mas equipos.

Drivers mas importantes y mas utilizados a nivel universal

Modo monitor:

airmon-ng start  <interface>

Permiten inyección:

aireplay-ng -9 <interface>


Familia ieee80211

Ralink USB rt2570
Ralink PCI rt2500
Ralink rt61, debido a su incompatiblidad con los madwifi, se deben cargar a traves de lanzador
Ralink USB rt73, mantenemos el viejo lanzador por si carga los rt2570
Atheros madwifi-hal, la primera y unica live que soporta nativamente los nuevos chipset de atheros
Intel pro wireless ipw2200
Realtek r8187, los de la famosa alfa blanca, la unica live que lleva estos drivers con kernel 2.6.27
Intel pro wireless 3945, ipwraw old, los primeros drivers paar estos equipos que hemos mantenido, por defecto no se cargan, se debe usar lanzador.


Familia mac80211

La nueva generacion de drivers, suite aircrack-ng adaptada a ellos, se trabajan con interfaces diferentes, siempre del tipo

monX

Zydas zd1211rw-mac80211
Intel pro wireless iwlagn con firmware para las nuevas iwl4965 y iwl5×00, siendo la unica live que incopora nativamente estos drivers.
Intel pro wireless iwl3945, son cargados por defecto, tambien la unica live que los incluye.
Broadcom b43 y b43legacy, me repito pero la unica live que los incluye

Ademas hemos mantenido los drivers siguientes en la ruta /opt/drivers, los cuales se deberam cargar a mano, suponemos que son mejores los nativos, si bien hemos mantenido los siguientes por si los nativos dieran problemas

Ralink rtx200
Intel pro wireless ipw2×00

Atheros ath5k
Atheros ath9k

Navegacion
Firefox 2.0.0.18
Plugin noscript (notad que cada 2 por 3 sacan nuevos update y no podemos
sacar una live cada 4 dias)
Plugin ShowIP
Plugin DOM Inspector
Idiomas Español y Ingles

amsn
kopete

Aplicaciones auditoria wireless

Suite Aircrack-ng 1.0 rc1 r1223, perfecta para trabajar con la nueva serie de drivers mac802111

Matizamos que el aircrack-ng ejecutable es Aircrack-ng 0.9.3, esto es debido a que la serie rc1 no trabajan bien para WEP cpn diccionario (-w), indispensable para el territorio español, y que aun no han corregido a pesar de las innumerables capturas que les hemos mandado.

Ademas incorporamos las aplicaciones airdecloak-ng y Tkiptun-ng, aunque son sus versiones en fase de pruebas, no inician el tratamiento WPA de forma diferente al habitual.

Dentro de Aplicaciones auditoria wireless incorporamos la sección estudio de cifrados con los siguiente programas:

jazzteldecrypter
stkeys
wlandecrypter con toda la nueva serie de MAC que ha aparecido hasta el momento.
dlinkdecrypter
rfidtool version 0.2
decsagem
wepattack
weplab
cowpatty

La mayoria de esta aplicaciones llevan lanzador grafico, y tambien estan incorporadas en el nuevo airoscript

airoscript

Ideal para iniciados en el analisis seguridad wireless. Mantenemos 3 versiones, la oficial en ingles, la de siempre en español, y una nueva en español con la incorporacion de jazzteldecrypter, stkeys, wlandecrypter y dlinkdecrypter

wlaninject

wifizoo 1.3

wireshark

airpwn

hamster & ferret

Aplicaciones wireless estandar

wifi-radar
Kwifimanager
Wireless assisntat
wifiscanner
WPA-GUI
: Soporte conexion grafica wpa-psk
rutilt para los drivers de ralink

Apliaciones extra-ocio

Un pequeño guiño al profesional o ameteur que se decica a la adutoria wireless

Juego de ajadrez Xboard, para que no se diga que los que no dedicamos a este mundo somos unos frikis sin dos dedos de frente, y porque no, mientras esperamos a capturas petciones de ARP validas.

Juego Papa-Patata, indispensable, para que mi hijo no se aburra mientras decido cientos de horas a realizar auditorias

wink personalmente no lo he usado y no se para que sirve, pero muchos compañeros se empeñaron en que se pusiera, lo siento pero tenia que decirlo.

gparted no recuerdo bien si estaba en la version beta, pero personalmente me encanta esta apliacion, que es muy util para la creacion de livecd sobre todo cuando la cagas y tienes que volver para atras, hay un liveCD con el nombre de dicha aplicacion, quizas no funcione al 100% pero es de mucha utilidad.

netcat definido en Wikipedia como najava multiusos

Nota: Hay muchas mas aplicaciones pero creemos oportuno mencionar las que hemos añadido o mejorado, esta version mantiene muchas de las aplicaciones incorporadas en versiones anteriores, por citar algun ejemplo: nmap, gFTP, KSnapshot, kedit, etc.

Como mencion especial y con todos los derechos del mundo:

wifipacket

Wifipacket 0.1 para seguridadwireless.net por Pianista
wifipacket [opcion] (name)
Opciones:
update --- Actualiza la lista de paquetes
list --- Lista los paquetes disponibles
install --- Instala el paquete seleccionado (-v) especifica la version a instalar
-v --- Muestra creditos de wifipacket

Es una actualizador personalizado para wifiway, aplicable a wifislax en futuras versiones, que permitira en un futuro muy proximo a los seguidores de wifiway, poder actulizar su distribuccion sin tener que descargarse nuevas lives, cabe decir que es para aquellos usuarios que tienen instalado wifiway en sus equipos, usarlo para modo live, podra ser pero no con toda su pontencia, una actualizacion de la suite ng o un driver bien, pero imaginemos la actualizacion de todo un kernel entero, o de todo un kde.

Por lo tanto se usara en el futuro para actualizaciones

Mencion especial tambien, para el instalador exclusivo de wifiway, es una serie de programa graficos que se ejecutan desde el menu

Menu – Sistema – Wifiway Install, encontramos varias opciones, la que lo engloba todo es
>> Install Wifiway , en idioma ingles y castellano, aunque tambien podemos encontar 3 posiblidades mostradas en versiones anterirores, copia del contenido, edicion y creacion del GRUB, modifcacion MBR, etc

Posiblemente algunos de vosotros ya haya vosto dicho manual y habreis pensado, pero si eso no estaba en la version beta, digamos que el manual ha salido antes que la propia live

Logo exclusivo wifiway carga kernel, asi los copiones de siempre, por lo menos esta vez se tendran que molestar en compilar el kernel, cosa que tambien esta facilitada en la nueva wifiway, pero que son tan simples que solo la palabra compilar kernel posiblemente los heche para atras, aunque tampoco me extrañaria que dejaran el propio logo y saquen una version propia , ¿se aceptan apuestas?

Carga de livecd tuneda, adaptada y exclusiva para wifiway……….venga que esta tambien es facil de modificar.

Avances en sniffing de dispositivos BlueTooth

Leo en el blog de Alberto Moreno Dos artículos muy interesantes sobre sniffing con dispositivos bluetooth. Uno de ellos, abarca toda la información necesaria así como los requisitos, para construir un sniffer bluetooth a partir de un adaptador bluetooth convencional. Los requisitos son:

  • Chipset Cambridge Silicon Radio (CSR)
  • Chipset bluetooth BC4 con memoria flash (Los adaptadores basados en memorias ROM no sirven)

http://seguridadmobile.blogspot.com/2008/11/construyendo-tu-propio-sniffer.html

El otro artículo, describe cómo haciendo uso del sniffer bluetooth, podemos sacar la clave utilizada en el emparejamiento de dos dispositivos:

http://seguridadmobile.blogspot.com/2008/11/sniffando-el-emparejamiento-bluetooth.html

Hooks.h

Hooks.h” es una cabecera escrita en lenguaje C, que recopila las funciones más importantes a la hora de realizar ganchos en modo kernel (en sistemas MS Windows), y que nos permite llevar cierto orden a la hora de saber cuántas y qué funciones, están enganchadas en la SSDT del kernel de Windows.

Básicamente, su comodidad reside en la relación existente entre las funciones, y tres variables declaradas que nos ayudan a llevar un control de los ganchos:

#define         NHOOKS  1//Numero de ganchos
unsigned short  SSDT_HOOKED=0;//Booleano
unsigned short  HOOKS_SSDT[NHOOKS]={0};//El estado de cada gancho

Cada función está definida con un valor entero, el cual usaremos en nuestras funciones y con el que movernos en el array “HOOKS_SSDT” para saber el estado del gancho. Ejemplo:

#define ZwCPEx 1

Para usar más funciones, basta con modificar el código de “Hooks.h” para que trabaje con ellas de la misma manera que lo hace con “ZwCreateProcessEx”, y definirlas con un ID único para cada funcion. Aprovechando la declaración anterior de “ZwCPEx”, la siguiente funcion podria ser:

#define ZwQSI 2 //ZwQuerySystemInformation

A continuación, el código de “Hooks.h” usando como ejemplo la API “ZwCreateProcessEx”:

/** ESTRUCTURAS Y VARIABLES PARA REALIZAR LOS GANCHOS **/
#pragma pack(1)
typedef struct ServiceDescriptorEntry {
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase;
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
#pragma pack()

__declspec(dllimport)  ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
PMDL            g_pmdlSystemCall;
PVOID           *MappedSystemCallTable;
#define         SYSTEMSERVICE(_function)  \
KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)_function+1)]
#define         SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)
#define         HOOK_SYSCALL(_Function, _Hook, _Orig ) _Orig = \
(PVOID) InterlockedExchange((PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)
#define         UNHOOK_SYSCALL(_Function, _Hook, _Orig ) InterlockedExchange( \
(PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)

/** Para llevar un control de los ganchos **/
#define         NHOOKS  1//Numero de ganchos
unsigned short  SSDT_HOOKED=0;//Booleano
unsigned short  HOOKS_SSDT[NHOOKS]={0};//El estado de cada gancho

/*
 * FUNCION PARA ENGANCHAR LA SSDT Y SOBRE ESTA, ENGANCHAR
 * NUESTRAS FUNCIONES
 */
NTSTATUS HookSSDT()
{
	NTSTATUS    ret=STATUS_UNSUCCESSFUL;

	g_pmdlSystemCall=MmCreateMdl(NULL,KeServiceDescriptorTable.ServiceTableBase,
				     KeServiceDescriptorTable.NumberOfServices*4);
	if(g_pmdlSystemCall)
	{
		MmBuildMdlForNonPagedPool(g_pmdlSystemCall);
		g_pmdlSystemCall->MdlFlags = g_pmdlSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;
		MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode);
		SSDT_HOOKED=1;
		ret=STATUS_SUCCESS;
		#ifdef DEBUG
		DbgPrint("SSDT Enganchada");
		#endif
	}
	#ifdef DEBUG
	else
	DbgPrint("Error al enganchar SSDT");
	#endif

	return ret;
}

/*
 * ENGANCHA UNA FUNCION DETERMINADA POR EL PARAMETRO "ID"
 * EN LA SSDT
 * (Ver cabeceras)
 */
void Hook(unsigned int ID)
{
    NTSTATUS ret;

    if(ID>=NHOOKS)
    {
        #ifdef DEBUG
        DbgPrint("ID de la funcion fuera de rango");
        #endif
        return;
    }

    if(!(SSDT_HOOKED || (!SSDT_HOOKED && (ret=HookSSDT())==STATUS_SUCCESS)))
    {
        #ifdef DEBUG
        DbgPrint("SSDT NO enganchada, y no se pudo enganchar");
        #endif
        return;
    }

    /* Deshabilitamos las interrupciones y
     * desactivamos la proteccion contra escritura
     * mediante el registro CR0 del micro
     */
    _asm
    {
        cli
        mov eax,cr0
        and eax,not 10000h
        mov cr0,eax
    }

    switch(ID)
    {
        #ifdef ZwCPEx
        case ZwCPEx:
            HOOK_SYSCALL(ZwCreateProcessEx,ZwCreateProcessExHACK,ZwCreateProcessExORIG);
            HOOKS_SSDT[ID]=1;
            #ifdef DEBUG
            DbgPrint("%d Enganchada",ID);
            #endif

            break;
        #endif
    }

    /* Habilitamos las interrupciones y
     * activamos la proteccion contra escritura
     * mediante el registro CR0 del micro
     */
    _asm
    {
        mov eax,cr0
        or eax,10000h
        mov cr0,eax
        sti
    }

	return;
}

/*
 * FUNCION PARA ENGANCHAR TODAS LAS FUNCIONES DEFINIDAS, EN LA SSDT
 */
void HookAll()
{
    unsigned int i;

    for(i=0;i<NHOOKS;i++)
    Hook(i);

    return;
}

/*
 * FUNCION PARA DESENGANCHAR UNA FUNCION DETERMINADA POR EL
 * PARAMETRO "ID" DE LA SSDT.
 * (Ver cabeceras)
 */
void UnHook(unsigned int ID)
{
    if(!SSDT_HOOKED)
    return;

    /* Deshabilitamos las interrupciones y
     * desactivamos la proteccion contra escritura
     * mediante el registro CR0 del micro
     */
    _asm
    {
        cli
        mov eax,cr0
        and eax,not 10000h
        mov cr0,eax
    }

    switch(ID)
    {
        #ifdef ZwCPEx
        case ZwCPEx:
            if(HOOKS_SSDT[ID]==1)
            {
                UNHOOK_SYSCALL(ZwCreateProcessEx,ZwCreateProcessExORIG,ZwCreateProcessExHACK);
                HOOKS_SSDT[ID]=0;
                #ifdef DEBUG
                DbgPrint("Desenganchada");
                #endif
            }
            break;
        #endif
    }

    /* Habilitamos las interrupciones y
     * activamos la proteccion contra escritura
     * mediante el registro CR0 del micro
     */
    _asm
    {
        mov eax,cr0
        or eax,10000h
        mov cr0,eax
        sti
    }

    return;
}

/*
 * FUNCION PARA DESENGANCHAR LA SSDT, ASEGURANDONOS PREVIAMENTE
 * DE QUE NO HAY FUNCIONES ENGANCHADAS. EN CASO DE HABERLAS, LAS
 * DESENGANCHA.
 */
void UnHookSSDT()
{
    unsigned int i;

    //Nos aseguramos de deshacer los ganchos
    for(i=0;i<NHOOKS;i++)
    if(HOOKS_SSDT[i])
    UnHook(i);

    if(g_pmdlSystemCall)
    {
        MmUnmapLockedPages(MappedSystemCallTable, g_pmdlSystemCall);
        IoFreeMdl(g_pmdlSystemCall);
        SSDT_HOOKED=0;
        #ifdef DEBUG
        DbgPrint("SSDT liberada");
        #endif
    }

    return;
}