29 mayo 2016

Enlaces de la SECmana - 320

Leer más...

23 mayo 2016

Hangout: Análisis Forense en Dispositivos Android





A raíz de participar en Palabra de Hacker con Yolanda Corral, desde un grupo privado de facebook llamado "Seguridad Informática Chile", me comentaron sobre la posibilidad de estar en un Hangout para hablar de seguridad. Se fueron dando las cosas y debido a que estaba llenando de vida las aplicaciones de un Android para las demos del último módulo del Curso de Forense 2.0, les propuse que podría preparar unas slides de Análisis Forense en Android.

El resultado del Hangout que tuvimos anoche lo podéis ver en el video Youtube que os dejo bajo estas líneas.  



Tras dos horas entretenidas, fue un placer participar con la comunidad chilena, país en el que siempre me han tratado genial, y al que espero volver este año. 

Las slides que utilicé en la charla las he colgado en slideshare.





Leer más...

22 mayo 2016

Enlaces de la SECmana - 319

Leer más...

17 mayo 2016



Me habéis oído y leído defender a Perl como lenguaje de scripting en múltiples ocasiones a lo largo de los años que llevo escribiendo en este blog. Siempre he dicho que el lenguaje en el que hagamos nuestros scripts da igual, siempre y cuando nos sintamos cómodos con él, éste disponga de los medios y módulos que nos permitan cumplir nuestras necesidades de manera rápida y efectiva. 

Sin embargo, es cierto que si tiramos de estadísticas, o mejor dicho de realidad, la mayoría de los proyectos de herramientas albergadas en github que han surgido en los últimos años están hechas en Python. Es cierto que otros lenguajes como Ruby o NodeJS también tienen su nicho, pero a día de hoy, es difícil encontrar un lenguaje que "valga para todo",  y esté tan universalmente aceptado com Python.


Junio.py: el mes de Python con Securízame


En este caso, y para aquellos que no tengan ni idea de Python, habrá un primer módulo que es 100% online, para el que la profesora, María José Montes Díaz, responsable de formación de Securízame, ha preparado 45 horas de sesiones en video, así como ejercicios para que hagan los alumnos, y a los que ella enviará posteriormente una solución propuesta. Se trata de un módulo básico, donde se explique lo más normal con Python, declaración de variables, estructuras de control, funcionamiento con módulos, orientación a objetos, interacción y manejo de ficheros, tratamiento de sockets, etc,...  Este módulo estará disponible a primeros de Junio. Te puedes registrar a él aquí: Python 101

Los siguientes módulos, son presenciales, y serán impartidos en las oficinas de Securízame en Madrid. De 10 horas de duración cada uno, se darán en fines de semana (en formato viernes por la tarde - sábado por la mañana). 




El viernes 10 y sábado 11 de Junio, se impartirá "Python para Sysadmins". El profesor, Julio Semper, del equipo de Securízame, mostrará módulos que pueden ser interesantes para administradores de sistemas. Módulos que permitan automatizar tareas cotidianas, o desarrollo de scripts puntuales que permitan interactuar con ficheros más grandes, logs, pcaps, bases de datos, etc,... La idea no es mostrar en modo masterclass qué hace cada módulo y qué opciones tienen, sino también que los alumnos hagan ejercicios y que el profesor solucione en el momento aquello que no funcione.

El viernes 17 y sábado 18 de Junio, el profesor será Daniel García "Chron", al que algunos ya conocéis como profesor del módulo de Hacking con Python en el curso de hacking online que hicimos a finales de 2015, o como uno de los creadores de la herramienta de pentesting escrita en Python GoLismero. En esta ocasión dará en modo presencial "Python avanzado". El temario está relacionado con concurrencia, hilos, optimización, etc,... el temario completo y registro aquí: https://cursos.securizame.com/python-avanzado/

El viernes 24 y sábado 25 de Junio, le toca el turno a Daniel Echeverri (AKA "Adastra") nos contará cómo utilizar Python en las diferentes fases de un pentest. Se trata de un curso también práctico, del que todo el mundo hablaba maravillas cuando coincidimos en el DragonjarCON en Manizales. El título del curso es "Python para Pentesting" y tenéis el temario y formulario de registro aquí: https://cursos.securizame.com/python_pentesting/


Cada módulo suelto presencial tiene un precio de 165 euros + 21% IVA, y el online 165 euros (estando exento de IVA según el artículo 20, apartado uno, número 9, de la Ley 37/1992, al encontrarse el contenido en el sistema educativo español, según Real Decreto 1393/2007) e incorpora, además de la formación y el material que cada profesor proporcione, un certificado nominal de asistencia con aprovechamiento. 

Además, se incluye café, infusiones, refrescos y algo de picar en dos descansos que se hacen en cada jornada.




Puedes pre-registrarte en alguno de los cursos que te he contado, por separado, o matricularte en la oferta de pack conjunto por 495 euros + 21% IVA, según prefieras ,aquí: https://cursos.securizame.com/python/.

Como se puede ver en las fotos, la sala tiene una capacidad limitada por lo que aconsejamos no dejar el registro para el último día. 


Leer más...

14 mayo 2016

Canales y grupos Telegram de seguridad



Aunque el líder indiscutible y universal de mensajería, es whatsapp, tiempo atrás llegó un competidor, que a mi juicio resulta incluso más práctico. Una de las ventajas que tiene, es la creación de grupos de difusión con capacidades enormes, así como de canales a los que simplemente te suscribes o unes. 

Los hay de todas las temáticas, desde cocina y Fórmula 1 hasta distribución de material protegido con derechos de propiedad intelectual. 

Al igual que hace unos días publiqué diferentes recomendaciones de cuentas Twitter relacionadas con seguridad en inglés, que podían ser del interés de los lectores, hoy quiero hacerlo con grupos y canales relacionados con seguridad en diferentes ramas. Se trata de canales en los que recibes de forma pasiva los contenidos, o grupos creados por alguien en los que "se discute" de temas relacionados. Es decir, lo más parecido a un canal de IRC de toda la vida, pero aprovechando esta aplicación de mensajería.

Yo lo veo como un complemento a las listas de correo, aunque las listas tienen la ventaja de archivado de mensajes, permitiendo así la búsqueda de información en local, que te puede venir bien. Claro ejemplo de ello, y hablo en mi propia experiencia, es la lista de correo de RootedCON, en la que alguna vez he tenido necesidad de alguna herramienta o técnica vista en esa lista y, con una búsqueda en el correo, das con información muy interesante.

En este caso, seguro que hay más, pero los que detallo aquí son algunos en los que estoy suscritos y que me parecen interesantes:
  • https://telegram.me/SeguridadInformatica: Canal de noticias de seguridad. Los administradores siguen diferentes fuentes y van publicando aquello que consideran interesante. Desde herramientas, eventos, etc....
  • https://telegram.me/Infoseces: De título "Infosec - es", el objetivo es precisamente ese. Un grupo reducido de profesionales de seguridad que comparten inquietudes, se comentan dudas, cada uno aporta alguna solución, herramienta o el "cómo se haría". Algo muy importante en este canal son las normas, y es que está completamente prohibido salirse del tema, con riesgo de ser baneado. Algo que los que estamos en dicho grupo agradecemos. El objetivo es calidad, más que cantidad. 
  • https://telegram.me/joinchat/Bz3s0j5emyHj1Adl3iHYSQ: Canal especializado en Exploiting en el que el gran Ricardo Narvaja colabora compartiendo diversos retos que los integrantes del grupo se rompen la cabeza para intentar explotar.
  • https://telegram.me/redsegura: Este canal aún no tiene contenido, pero los administradores tienen pensado que sea a un nivel "para toda la familia", muy al estilo de concienciación de X1redmassegura, un colectivo mucho más vulnerable, al que no debemos dejar de proteger.
  • https://telegram.me/secbydefault: Como podéis imaginar, en este canal iremos publicando los diferentes posts del blog 
Si conoces alguno más que creas que pueda resultar interesante que esté en esta lista, indícamelo por twitter y lo evalúo para añadirlo.
Leer más...

13 mayo 2016

Detección proactiva de phishing con Javascript



Sin duda alguna el phishing es uno de los métodos mas utilizados por ciber-delincuentes, esto para estafar y obtener información confidencial de usuarios legítimos. Actualmente existen diversas soluciones de pago, basadas en controles preventivos, detectivos y reactivos.

En esta ocasión deseo compartir un control detectivo para ataques de phishing, el control detectivo está codificado en Javascript, el cual funciona como un agente de verificación incrustado en el mismo sitio web que se desea proteger, y tiene por objetivo detectar cuando un sitio web es copiado y levantado desde un dominio distinto al original, tal y como sucede en los casos de phishing. 

Consideremos que en la mayoría de los casos de phishing, el atacante descarga la web original que quiere clonar (ya que así se asegura de mantener el mismo aspecto visual) y posteriormente adecua el código fuente para almacenar o enviar por correo la información robada.  Ahora bien, volviendo al punto de mantener un aspecto visual idéntico, es que el atacante se ve forzado a usar las mismas referencias u objetos, por ejemplo: CSS, JavasSript, JQuery, entre otros.  Por tanto, ¿podriamos "camuflar" un script de detección el cual nos alerte de manera temprana cuando estamos siendo victimas de phishing?.  La respuesta es SI.

1. Verificación en el lado del servidor.
En este caso, haremos uso de PHP para la verificación y envio de notificación por correo electrónico (Sin embargo es posible realizarlo con otros lenguajes). 

En este ejemplo el fichero PHP será capaz de recibir información desde el script (Javascript) alojado en cualquier otro dominio.  Por motivos de seguridad, este intercambio de información entre dominios no es permitido por los navegadores, sin embargo esto puede resolverse haciendo uso de CORS (Cross-Origin Resource Sharing)
  
El fichero PHP se encuentra alojado en el mismo servidor del sitio web a proteger, en este ejemplo el sitio a proteger es http://www.prosec-it.com/mi_sitio, y el fichero PHP se encuentra en http://www.prosec-it.com/phish/verif.php. Gracias a CORS (Cross-Origin Resource Sharing), es posible implementar el fichero verif.php en otro servidor web, si se se desea.

El código fuente del fichero verif.php es:
<?php
header("access-control-allow-origin: *");   // Con esta linea habilitamos CORS.
$domain = $_POST['domain'];                 // Variable que recibira el dominio origen.

if ($domain=="www.prosec-it.com"){       // Aca se debe escribir el dominio de la web a proteger
    exit(0);
}else{                                                       // El dominio recibido se compara
    $subject='Alerta Phishing!';                   // y si son diferentes se envia una alerta
    $msg="La pagina web ha sido cargada desde un origen desconocido.";
    $msg.='<br><br>';
    $msg.='<table><tr><td>Origen:</td><td>'.$domain.'</td></tr></table>';
    send_notif($subject,$msg);
}
?>
En este ejemplo, la función para enviar correo "send_notif" hace uso de "phpmailer", el cual es un conjunto de lilbrerias PHP para el envío de correos, el código fuente de la función es:

function send_notif($subject, $msg){
    require ('class.phpmailer.php');
    $mail             = new PHPMailer();   
    $mail->SetFrom('phishing@alerta.com', 'Alerta');   
    $mail->Subject    = $subject;       
    $mail->MsgHTML($msg);   
    $mail->AddAddress('cesarcuencad@gmail.com', "CesarR CuencaD");
    $mail->AddAddress('cesar.cuenca@owasp.org', "CesarR OWASP");
    if(!$mail->Send()) {return -1;}
    else {return 1;}
}
Con esto, el fichero verif.php se encuentra listo para recibir información del javascript que enviará información desde cualquier otro dominio donde sea ejecutado.

2. Envio de información de dominio desde Javascript 
El objetivo en este paso es diseñar una porción de código en Javascript, el cual será incrustado en la pagina web que deseamos proteger, en este ejemplo el sitio que se desea proteger es http://www.prosec-it.com/mi_sitio/index.html,  por tanto se debe incluir la siguiente porción de código en "index.html".
<script>
     // Esta linea permite que el control se ejecute cada vez que el fichero "index.html" se carga en un navegador.
    window.addEventListener('load', test, false);

    // Esta función envia el dominio desde el cual se esta accediendo al fichero "index.html"
    function check(){
          var ajax_url = "http://www.*******.com/phish/verif.php"; // Reemplazar con tu dominio
          var d=document.domain;
          var params = "domain="+d;
          var ajax_request = new XMLHttpRequest();
          ajax_request.open("POST",ajax_url,true);
          ajax_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          ajax_request.send(params);
    }
</script> 
El script anterior, obtiene el dominio de donde se esta ejecutando el "index.html" del sitio www.prosec-it.com/mi_sitio, por ejemplo, si el sitio se clonará, se subierá a otro dominio www.phishing.com, y se accediera a este sitio, el dato www.phishing.com será enviado a nuestro fichero PHP del paso 1.

3. Camuflaje del script
En este paso ofuscaremos el script para que no sea facilmente visible ni comprensible por simple inspección de código, para ello se debe copiar el código javascript del paso 2 en alguna herramienta de ofuscación, en este caso hice uso de la siguiente: http://www.javascriptobfuscator.com/Javascript-Obfuscator.aspx

Como resultado se obtiene el siguiente código javascript ofuscado.

<script>
var _0xbc3a=["\x6C\x6F\x61\x64","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x6D\x6F\x65\x62\x69\x75\x73\x65\x63\x2E\x63\x6F\x6D\x2F\x70\x68\x69\x73\x68\x2F\x76\x65\x72\x69\x66\x2E\x70\x68\x70","\x64\x6F\x6D\x61\x69\x6E","\x64\x6F\x6D\x61\x69\x6E\x3D","\x50\x4F\x53\x54","\x6F\x70\x65\x6E","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64"];window[_0xbc3a[1]](_0xbc3a[0],test,false);function test(){var _0x56c1x2=_0xbc3a[2];var _0x56c1x3=document[_0xbc3a[3]];var _0x56c1x4=_0xbc3a[4]+_0x56c1x3;var _0x56c1x5= new XMLHttpRequest();_0x56c1x5[_0xbc3a[6]](_0xbc3a[5],_0x56c1x2,true);_0x56c1x5[_0xbc3a[9]](_0xbc3a[7],_0xbc3a[8]);_0x56c1x5[_0xbc3a[10]](_0x56c1x4)}
</script>
Ahora solo resta copiar el código ofuscado en el fichero "index.html" del sitio web a proteger.

4. Pruebas
 Ahora solo resta probar!. El sitio web de prueba (el que contiene el script) es http://www.prosec-it.com/mi_sitio/.

 

Descargué el anterior sitio y lo subi en un servidor local, http://172.29.21.16/mi_sitio/



Como resultado, a los pocos segundos me llegó el siguiente correo:



También probé subiendo la página clonada a un hosting:



 5. Conclusiones
Como se ha visto, la implementación de un control de detección temprana para ataques de phishing, empleando Javascript, es de mínima complejidad.  Si bien este control "reduce" la probabilidad de no detectar de manera oportuna un ataque de phishing, resta la posibilidad de que el atacante realice una inspección de código minuciosa antes de levantar un sitio clonado, y asi detectar y borrar nuestro script, por lo que se podría pensar en mejorar la tecnica de ofuscación y de camuflaje mostradas en este artículo. Por ejemplo se podría pensar en incrustar esta porción de código en librerias JS necesarias para replicar exactamente estilos y comportamientos visuales del sitio web (por ejemplo liberias jquery, grids, charts, sliders,etc.), y asi forzar al atacante a que incluya nuestro script sin percatarse de ello.

Espero que esta lectura haya sido de su agrado y mas importante aún, sea útil para ustedes.  Si desean mas información sobre este tema, no duden en escribirme. Muchas gracias a SBD por brindarme su espacio. Hasta la próxima.

Cesar Cuenca

Correo: cesar.cuenca@owasp.org
Twitter: @ccuencad
Leer más...