Mostrando las entradas para la consulta nikto ordenadas por fecha. Ordenar por relevancia Mostrar todas las entradas
Mostrando las entradas para la consulta nikto ordenadas por fecha. Ordenar por relevancia Mostrar todas las entradas

02 febrero 2015

Faraday: una herramienta imprescindible en auditorías de seguridad



Fue en Ekoparty 2012, cuando tuve por primera vez el honor de ir a tierras gauchas, a estrenarme en el escenario del mayor Congreso de Seguridad de Latinoamérica, cuando conocí a Francisco Amato, uno de los organizadores de dicho evento. 

Fue el propio Francisco quien me contó, cuando asistí a la edición de Ekoparty 2014, que en Infobyte, la empresa de la que es CEO, estaban desarrollando una herramienta de seguridad, que me pareció muy interesante a la hora de llevar a cabo cualquier auditoría. Se llama Faraday, tiene una versión community, y dos versiones comerciales, la Professional y la Corporate. 

Desarrolada en Python, ya se encuentra en su versión 1.0.7, aunque las versiones publicadas “vuelan”, debido al esfuerzo por dejarla lo más fina y con mayor funcionalidad posible, cuanto antes.

A grandes rasgos, cuando ejecutas Faraday en un sistema operativo Linux, se te abre un IDE con una shell, desde la que puedes ejecutar herramientas típicas de cualquier proceso de auditoría como nmap, nikto o theharvester por ejemplo, que automáticamente son interceptados por Faraday y añaden los flags necesarios para que el resultado del análisis de la herramienta se deje en formato XML, en una ruta dentro del home del usuario que la lanza. 

Según se van lanzando diferentes herramientas, se va viendo el resultado de los hosts identificados, puertos abiertos, etc,… en un frame a la derecha.


Incluso han publicado en las últimas versiones, una opción en la que permite la ejecución en un entorno Linux sin ventanas, es decir, en modo consola:





Además de herramientas interceptables, se puede importar el resultado de otras como Nessus y OpenVAS, copiando el report en XML que se genera por éstas en el Workspace de Faraday, dentro del home de ese usuario y Faraday lo interpretará y añadirá al frame de resultados.

Y luego hay conectores para otras herramientas como Burp, Metasploit o BeEF, que permiten incluir los resultados de estas en el proyecto de auditoría que se esté llevando a cabo.  

La lista de plugins o herramientas que se pueden integrar en Faraday, cada vez es más extensa, como podéis ver aquí: https://github.com/infobyte/faraday/wiki/Plugin-List.

Toda esta información queda almacenada en una base de datos apoyada en CouchDB, por lo que a partir de aquí, permite generarse un informe que aglutina los resultados de todas las herramientas, sirviéndote de muy buena ayuda a la hora de llevar a cabo el informe. 
Igualmente, la herramienta se define como IDE colaborativa, por lo que diferentes auditores pueden ir haciendo diferentes tareas dentro de la auditoría y aunar los resultados en Faraday, de manera que mediante el interfaz web que renderiza la base de datos en CouchDB, se puede ir siguiendo la evolución del proyecto.



Evidentemente, quien piense que, únicamente gracias a Faraday, lanzará todas estas herramientas, importará los resultados en Faraday, le dará al botón imprimir y ya hecha la auditoría de seguridad, está claro que estará profundamente equivocado. Pero sí que es cierto que a la hora de categorizar vulnerabilidades existentes, prioridad e impacto de las mismas, en una auditoría de varios hosts de un mismo proyecto, resulta de gran utilidad. 

A la hora de generar el documento ejecutivo, en el que se suele hacer un resumen con gráficos y estadísticas sobre el estado de los hosts auditados, Faraday nos entregará parte de ese trabajo ya hecho.  
Leer más...

22 agosto 2013

GoLismero: Nueva herramienta de hacking debutando en OWASP

Le prometí hace unas semanas a Yago que el primer post técnico sobre GoLismero lo tendrían en SBD. Y lo prometido es deuda.

GoLismero 2.0 ha sido presentado hoy de forma oficial en el AppSec EU de OWAP  en Hamburgo, Alemania (y desde allí os escribo este post :D).

Vayamos por partes....

Qué es GoLismero?

GoLismero 2.0 es un framework opensource para realizar auditorías de seguridad y pentesting. 

De momento se encuentra orientado principalmente a auditoría web, pero puede ser fácilmente extendido para otro tipo de escaneos.

Información del proyecto:

Qué tiene de especial GoLismero?

Las principales características se pueden resumir en:
  • Multiplataforma real. Ha sito probado en Windows, Linux, *BSD y OS X.
  • No tiene dependencias de librerías nativas. Todo el framework está escrito completamente en python.
  • Rendimiento óptimo, en comparación con otros frameworks escritos en python.
  • Realmente fácil de usar.
  • Crear nuevos plugins es extremadamente sencillo.
  • El frameworks puede recopilar y unificar resultados de otras herramientas de seguridad populares, como: sqlmap, xsser, openvas, dnsrecon, theharvester...
  • Integración con estándars: CWE, CVE y OWASP.
  • Diseñado para funcionar en modo cluster, aunque todavía no está disponibles.
El punto marcado negrita creemos que es la mayor novedad y principal atractivo para usar GoLismero. 

Además de sus propias pruebas, GoLismero ejecutará automáticamente por nosotros herramientas conocidas y populares (todavía no están todas integradas, estamos trabajando en ello) cogerá sus resultados, los unificará y realimentará las herramientas con los resultados obtenidos. Es decir: cogerá los resultados de un análisis con OpenVas y los enviará al SQLMap, XSSser, DNSrecon, etc. Y todo de forma automática, chulo, no?


Es una actualización de GoLismero 0.6.3?

GoLismero 0.6.3 (incluido en Backtrack y Kali Linux, por ejemplo) era un simple mapper con algunas funciones muy básicas de análisis.  GoLismero 2.0 ha sido reescrito desde cero y de la versión inicial solo conserva en nombre :)


Cómo usar GoLismero?

Usar GoLismero 2.0 es muy fácil: A continuación se explican uno cuantos comandos básicos para poder empezar a usar GoLismero:

Instalación

Aunque próximamente liberaremos una modificación de la Kali Linux con todo lo necesario para ejecutar GoLismero, de comento lo podéis descargar así:

Descargamos https://github.com/golismero/golismero/archive/master.zip y extraemos el contenido donde queramos. GoLismero lleva todas las dependencias necesarias integradas (a excepción del intérprete de Python) con lo que no tendremos que hacer nada más.

También puede descargar la versión más reciente usando GIT:
git clone https://github.com/golismero/golismero.git

Uso básico

Este comando lanzará GoLismero con todas las opciones por defecto y mostrará el informe por la salida estándar (habitualmente la consola):
python golismero.py <target>
También puede configurar el nombre de la auditoría:
python golismero.py <target> --audit-name <name>
GoLismero permite generar informes de diferentes formatos. El formato será reconocido automáticamente por la extensión del fichero de salida. Además, puede indicar varios archivos de salida en varios formatos diferentes a la vez:
python golismero.py <target> -o <output file name>
python golismero.py <target> -o <output file name>.html -o <output file name>.txt

Además, puede importar resultados de otras herramientas con la opción "-i". Puede usar "-i" tantas veces como resultados quiera importar. El siguiente ejemplo muestra como parsear los resultados de un escaneo de Nikto y generar un informe. Para evitar que GoLismero se realimente con los resultados de Nikto desabilitaremos todos los plugins:
python golismero.py www.example.com -i nikto_output.csv -o report.html -d all


Todos los resultados son automáticamente guardados en el fichero de base de datos. Puede evitar esto con la opción "-nd":
python golismero.py <target> -nd


Esto permite escanear el target en un momento dado y generar el informe después. Por ejemplo, para lanzar un scan sin generar el informe:
python golismero.py <target> -db database.db -no
En otro momento generamos el informe a partir de la base de datos (¡o en una máquina diferente!).
python golismero.py -db database.db -d all -o report.html 


Plugins disponibles

Para mostrar la lista de plugins disponibles:
python golismero.py --plugin-list

 También puede mostrar los detalles de un plugin específico:
python golismero.py --plugin-info <plugin name>


La lista completa de plugins está disponible online: http://golismero-project.com/doc/plugin_list/index.html.


Generación de informes

Hemos tratado de que los informe no sean los típicos reportes "juacker", sino que sean visualmente agradables y útiles. Los informes generados en HTML siguen diseño responable, gráficas y buscador javascript integrado. Además, no tienen ninguna dependencia de css o javascript, todas las librerías van incrustadas en un solo fichero para que sea fácil de enviar/mover.

Así es cómo se generan los informes en HTML para una auditoría:
python golismero.py <target> -o report.html
Resumen:



Detalles:


Cuáles son los siguiente pasos?

Las siguientes funcionalidades serán:
  • Integración con Nmap, SQLMap, Metasploit y otras herramientas.
  • Interfaz web. Sabemos que los h4xx0rs solo utilizan la consola, pero a veces el copy&paste está bien ;)
  • Exportar los resutlados a PDF.
  • Y muchas cosas más, por supuesto!


Quiénes somos?

Y ya por último, presentarnos:

GoLismero 2.0 ha podido ver la luz gracias al apoyo incondicional de Buguroo, que ha sido quien ha subvencionado el desarrollo y ha permitido que sea publicada como software open source.

Los creadores:
Leer más...

21 agosto 2013

Crónica del CSI 2013 en Pereira - Colombia - Día 2 #CSI2013




Seguimos con la crónica del segundo día del evento CSI 2013 en Pereira - Colombia. Podéis ver la crónica del primer día en este enlace

TUMI: Desde el Fingerprint hasta el informe por Walter Cuestas 




Desde muy temprano, abrió el evento el peruano Walter Cuestas, hablándonos de una herramienta, basada en una interfaz web, que permite hacer pruebas unitarias en todo el proceso de una auditoría. La herramienta se llama Tumi. Está escrita en Python, utiliza Javascript para la interfaz de menús, llama por debajo a herramientas genéricas como nmap o sqlmap. Como ventaja principal es que es totalmente opensource y permite integrar scripts hechos por uno mismo. Se puede descargar la beta desde aquí


') UNION SELECT 'Esta_Platica' AS (Nuevas Técnicas de Optimización y Ofuscación') por Roberto Salgado




Esta era una de las charlas que esperaba con mayor expectación. Me habían hablado maravillas de este mexicano afincado en Canadá, socio de la empresa Websec, junto a Pedro Joaquín y Paulino Calderón, y pude comprobar que todo era cierto al 100%.

Fue una charla eminentemente técnica en la que comparó diferentes algoritmos utilizados para hacer Blind SQL Injections, fundamentalmente Bitwise y Bisection.

Además, explicó un algoritmo que descubrió él y que llamó Bin2Pos, mostrando estadísticas y pruebas en tiempo real para adivinar cadenas con todos los métodos, siendo Bin2Pos el que menor número de peticiones enviaba (de media).

Además, mostró diferentes consultas SQL en una sola línea, que permiten acelerar el proceso de una auditoría, enviando una única petición y obteniendo el mismo resultado que al dividirla en N peticiones, así como ofuscación y evasión de WAF en base a caracteres no estándar, además de diversas "rarities"que el servidor SQL sigue entendiendo y ejecutando, pero que el WAF no lo interpreta como un ataque,…  En esta línea dio ejemplos para saltarse la protección de mod_security, GreenSQL o libinjection.

Esta charla, que Roberto dio hace dos semanas en Blackhat, fue brutal. Hasta el día de hoy, la que más me ha gustado! 


RogueAP / SSLStrip por Carlos Betancour



El colombiano, miembro de la comunidad Buggly, quiso mostrar qué tan fácil era llevar a cabo un ataque en una red wireless, mediante un Man in The Middle utilizando la herramienta SSLStrip de Moxie Marlinspike. Lamentablemente, la red wireless de la Universidad era un jungla ya de por sí, y no fue posible verlo en modo práctico. En cualquier caso, nos lo creemos totalmente!

Actualización: Carlos dijo que ya que no funcionó en ese momento, lo grabaría en un video y lo pondría a disposición de todo el mundo.

  

"Advanced Topics for rootkits in Linux" por Marcos Ricardo Schejtman



Continuamos con otra de las charlas más técnicas del día. El ponente mexicano empezó introduciendo conceptos de arquitectura y privilegios de ejecución de procesos en Linux, estructura en anillos, sistemas de ficheros virtuales, etc,…
Siguió relatando los diferentes sitios donde Linux guarda objetos de los procesos, por lo que serán rutas a tener en cuenta a la hora de construir un rootkit. Además contó el funcionamiento de diferentes componentes del sistema operativo del pingüino, scheduler, tablas de procesos, mapas de memoria, syscalls, etc…
Luego nos deleitó con diferentes maneras para esconder procesos que incluso herramientas como rkhunter ni chkrootkit pudieron detectar.
Acordamos que se pondría en contacto con Yago para validar si Unhide sería o no capaz de detectarlo. El código fuente del rootkit que programó Natas no lo liberará, atendiendo a una política de Responsible Disclosure, esperando primero a que existan formas de detección de este tipo de rootkits, o incluso publicará él mismo una contramedida.

"Pentesting en la era post-pc" por Jaime Andrés Restrepo   



Aunque esta charla se la ví hacer a Jaime en el EHCon de 2012 en Santa Cruz de la Sierra en Bolivia, reconozco que la disfruto cada vez más. En este caso, Jaime enseñó la utilidad de diferentes elementos como keyloggers hardware, micrófonos simulados en pendrives USB, herramientas que se pueden utilizar sobre software de auditoría en dispositivos móviles como teléfonos, tabletas, etc,…  Dispositivos "mini", que llevan internamente un ordenador, con APs wireless levantados que permiten conectarse en remoto, piñas wireless camufladas en libros huecos, y un sinfin de ideas muy interesantes para llevar a cabo ataques basados en ingeniería social/wireless, y otras perversidades. La charla culmina con diferentes videos, en los que Jaime muestra los resultados de diferentes ejercicios, llevados a cabo en lugares públicos, consistentes en simular redes wireless abiertas.


"Software en Tiempos de Espías" por Roberto Olaya



Mi buen amigo ecuatoriano fue el protagonista de una excelente charla sobre un tema que actualmente está en boca de todos: las estrategias de inteligencia de diferentes paises, así como los diferentes sistemas utilizados (al menos los que se conocen). Sistemas de espionaje de comunicaciones como Echelon, Enfopol, Promis, Carnivore, etc,…  Agencias que se unieron en USA como la DEA, FBI, NGA, NRO, NSA, ODNI, US. Air Force, US ARmy, para formar un sistema de comunicación común….  Nos contó igualmente los avances implementados en elementos militares, como lo que llevan en el casco, traductores online, cámaras que emiten vía satélite "lo que el soldado ve", identificación humana a distancia mediante reconocimiento facial (incluso aunque se haya hecho cirugía estética) etc,…
Habló por supuesto de Prism, así como de una página muy curiosa, Prism-Break con herramientas que te resultan más recomendables si quieres mejorar tu privacidad.


"Sé el primero en auditar tu web"  por Jhon Cesar Arango [jcaitf]



Esta charla, la única que dio Jhon César, uno de los organizadores del evento, versó sobre diversas herramientas de auditoría web: Uniscan, W3AF, Nikto, Joomscan, plecost, sqlmap, zap, etc…. 
Hizo varias demos con las mismas, de manera que permite hacer ver de una forma bastante fácil, que con un poco de formación, es posible adelantarse a los "chicos malos", a fin de poder mitigar el riesgo de un montón de vulnerabilidades. Sólo con esto no aseguraremos que la web está segura al 100% pero siempre quedará menos por securizar.

"Robo de identidad digital" por Gustavo Nicolás Ogawa



En esta charla, el compañero Gustavo Ogawa hizo un caso de búsqueda de una persona, desde el principio, encontrando la identidad digital del objetivo a través de internet. A partir de ahí hizo varias demostraciones en las que usaba Facebook como medio de ataque, engañando a la víctima para explotar una vulnerabilidad de algún software (creo que fue un JRE no actualizado) con Metasploit, accediendo a su equipo.
Leer más...

03 febrero 2012

Dradis Framework v2.9 disponible

Dradis, para el que no lo conozca, consiste en una herramienta que permite el compartir y recopilar la información que se va obteniendo durante auditorías de seguridad en sistemas y en aplicaciones web, así como en tests de intrusión.

A modo de repositorio, nos permite además importar ficheros de herramientas tan conocidas como Nessus, Nikto, Nmap, Burp, Nexpose, OpenVAS, w3af, ZAProxy, NSS...y un largo etc, ya que permite la creación de más plugins para importar cualquier tipo de información y organizarla dentro del proyecto basándose en la salida de las pruebas realizadas.

Programada en Ruby, esta herramienta fue presentada por primera vez en Defcon 17 por el español Daniel Gómez "etd". La versión 1.0 de Dradis se publicó en 2007,  llegando actualmente a la versión 2.9 que acaba de ser anunciada, con la inclusión de los plugins para importar información obtenida de las herramientas ZAProxy y el Retina Network Security Scanner, y la actualización de los plugins de Nessus, Nikto y Nmap.



La información se organiza y registra vía un interfaz web tras la instalación, en la cual se comienza con la creación de carpetas o nodos, incluyendo posteriormente los sistemas y anotaciones pertinentes, apoyándose en la información obtenida de herramientas y así organizar en un mismo punto todo lo que se vaya avanzando durante las pruebas de seguridad. La aplicación no distingue a los usuarios (se accede con un nombre de usuario pero no se registra previamente en el sistema), valiéndose únicamente de una contraseña establecida a modo de servidor  para consultar la información que se encuentre disponible y volcada en los proyectos.


El motor de importación de resultados de herramientas, analiza las salidas según el tipo de herramienta y los procesa, para incluir dentro del framework toda la información, separándola por sistema y puerto.




Gracias a Dradis, podremos olvidarnos de recopilar información en simples .txt o .doc sin formato, teniendo toda la información centralizada en un punto, en la que además se pueda trabajar de forma colaborativa por un equipo de personas.

Está disponible para todas las plataformas, con multitud de documentación que podréis consultar en su web.

Leer más...

21 noviembre 2011

Fortificación de lighttpd

Lighttpd es otro servidor web libre y gratuito que está desarrollado con el objetivo de ser ligero y altamente eficaz.

Al igual que la semana pasada con nginx, vamos a repasar algunas directivas que pueden impactar en la seguridad y que se han de tener en cuenta en una instalación o auditoría.

Lo primero y más básico es arrancar el servicio con un usuario no privilegiado, por lo que el fichero de configuración ha de incluir dos lineas como las siguientes:

server.username = "lighttpd" 
server.groupname = "lighttpd"

Para evitar que se generen listas del contenido de un directorio en caso de no existir un archivo index.html, es necesario deshabilitar el parámetro dir-listing tal de la siguiente forma:

dir-listing.activate = "disabled" 

Para modificar la cabecera Server y no mostrar la versión y producto del servidor web se especifica la cadena en server.tag:

server.tag ="HTTPD"

Si se desea restringir el acceso a determinadas extensiones de ficheros, que pueden existir residualmente o ser de configuración, puede hacerse como en este ejemplo:

url.access-deny = ( "~", ".inc", ".bak" )

Si el servidor no va a recibir ficheros, también se puede limitar el tamaño de una petición a 1kb, 

server.max-request-size  = 1

TRACE y TRACK, no están soportados en lighttpd, pero para deshabilitar todos los métodos menos los esencialmente necesarios como son GET, HEAD y POST:

$HTTP["request-method"] !~ "^(GET|HEAD|POST)" {
url.access-deny = ( "" )
}

Si queremos molestar a los auditores y denegar el acceso a algunas herramientas automáticas en base a su user-agent, se puede hacer con una expresión regular. ¡Ojo!, que esto es fácilmente evadible y sirva más de ejemplo para evitar bots o ataques concretos.

$HTTP["useragent"] =~ "(acunetix|nikto)" {
url.access-deny = ( "" )
}

Para evitar que las imágenes del servidor sean enlazadas desde otro sitio (hotlinking), tan solo hay que añadir las siguientes líneas:

$HTTP["referer"] !~ "^(hxxp://sbd\.com|hxxp://www\.sbd\.com)" {
url.access-deny = ( ".jpg", ".jpeg", ".png", ".gif" )
}

El status es un módulo que muestra información sobre el servidor, en ocasiones estos datos pueden incluir datos confidenciales y debería estar restringido a direcciones IP. Si no se utiliza, es aconsejable eliminarlo, borrando la línea que contenga "status.status-url" y verificando que no está cargado en "server.modules"

status.status-url = "/server-status"
server.modules = ( ..., "mod_status", ... )

Por último, si se hace uso de SSL, es recomendable deshabilitar la v2 y algunos ciphers. Una configuración robusta (a falta de parche para BEAST) podría ser esta:

ssl.use-sslv2 = "disable"
ssl.cipher-list = "TLSv1+HIGH !SSLv2 RC4+MEDIUM !aNULL !eNULL !3DES @STRENGTH"

Para restringir un recurso a varias direcciones IP, rangos o localhost, lighthttpd permite este tipo de sintaxis:

$HTTP["remoteip"] !~ "192.168.1.3|10.0.5.*|127.0.0.1" { 
   $HTTP["url"] =~ "^/Admin/" { url.access-deny = ( "" ) }
}

En caso de querer proteger un directorio con usuario y contraseña, del RFC 2617 se ha de usar digest y nunca basic, con una sintaxis del módulo mod_auth, similar a la siguiente

auth.backend = "htdigest"
auth.backend.htdigest.userfile = "lighttpd-htdigest.user" 
auth.debug = 2

auth.require = ( "/protected/" =>
    (
    "method"  => "digest",
    "realm"   => "Nombre de mi directorio con Password",
    "require" => "valid-user"
    ),
)
Para crear el fichero lighttpd-htdigest.user:
# htdigest -c lighttpd-htdigest.user 'Nombre de mi directorio con Password' aramosf
Leer más...

14 noviembre 2011

Fortificación de nginx

nginx es un popular servidor web y proxy inverso libre y gratuito que ya aloja más de 43 millones de dominios, entre los que se encuentra Wordpress, Dropbox, Facebook o TechCrunch.

En esta entrada vamos a ver algunos aspectos a configurar para que su instalación sea más segura.

Lo primero es eliminar información que identifique la versión de nginx todo lo que se pueda. Esto no hace el servicio más seguro, pero pone trabas a la hora de intentar buscarle fallos.

Para eliminar la cadena "nginx" de la cabecera Server, es necesario modificar el código fuente, en concreto del fichero  src/http/ngx_http_header_filter_module.c  siguientes líneas:

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

Por
static char ngx_http_server_string[] = "Server: httpd" CRLF;
static char ngx_http_server_full_string[] = "Server: httpd" CRLF;

Si únicamente se desea eliminar el número de versión, dejando  tan solo "nginx", o no se puede recompilar, en la configuración se puede especificar con la directiva:

server_tokens off;

Una vez instalado, hay que asegurarse de que no se ejecuta con un usuario con privilegios de administración. En su configuración ha de figurar el usuario y grupo son distintos de root.

user              nginx nginx;

La identificación de la versión también es posible si se observan los mensajes de error del servicio. Para asegurar que no se reporta en ningún momento lo mejor es modificar las siguientes líneas del fichero src/http/ngx_http_special_response.c:

static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;


static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

Por otras que no incluyan la variable NGINX_VER:

static u_char ngx_http_error_full_tail[] = CRLF;
static u_char ngx_http_error_tail[] = CRLF;

También se puede especificar en el fichero de configuración, dentro de server {}, cuáles serán las páginas de error personalizadas para cada una de los errores. En este ejemplo se redirige a error.html:

error_page 400 401 402 403 404 405 406 407 408 
409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 
505 506 507 /error.html;
location /error.html {
    internal;
}

Una vez modificado el código fuente, se compila deshabilitando todos los módulos que no se usen. La web de nginx facilita una lista completa con su descripción. Especialmente interesante de eliminar es el autoindex. Para deshabilitar se utiliza una línea como la siguiente:

./configure --with-http_ssl_module --without-http_autoindex_module
--without-http_browser_module --without-http_fastcgi_module
--without-http_geo_module --without-http_empty_gif_module 
--without-http_map_module  --without-http_proxy_module
--without-http_memcached_module --without-http_ssi_module
--without-http_userid_module  --with-http_ssl_module 

Como se gestionan los recursos dependerá más de las necesidades de rendimiento que de la propia seguridad, salvo se detecte y conozca algún fallo concreto. Si es posible y no impacta a este factor, se especifican tamaños de buffer pequeños donde sea más difícil explotar una vulnerabilidad.

client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
client_body_timeout 10;
client_header_timeout 10;
send_timeout 10;
keepalive_timeout 60 60
send_timeout 60

Otra directiva interesante es activar la opción para ignorar todas las cabeceras invalidas:

ignore_invalid_headers   on;
Para deshabilitar métodos HTTP, la mejor opción es usar listas blancas, marcando únicamente aquellos que se vayan a utilizar. Esta configuración también afecta al rendimiento, ya que procesar la expresión regular es costoso. También es importante destacar que nginx no soporta el método TRACE, ni PUT/DELETE/MKCOL/COPY/MOVE siempre y cuando no se compile con soporte Webdav

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 500;
}

Otras características interesantes son la posibilidad de devolver un código de error en base al user-agent o al referer con una expresión regular, tal y como se muestra en el siguiente ejemplo, que además no hace distinción entre mayúsculas y minúsculas al haber especificado: ~*

if ($http_user_agent ~* (acunetix|nikto) ) {
  return 500;
}
if ($http_referer ~* (porn|webcam|bing) ) {
return 500;
}

También es posible evitar que enlacen directamente a las imágenes (hotlinking)  desde la configuración de nginx:

location ~* (\.jpg|\.png|\.css)$ {
 if ($http_referer !~ ^(hxxp://www.sbd.com) ) {
  return 500;
 }
}
Por último, si el servicio necesita servir páginas mediante HTTPS, una configuración válida y robusta que evita el ataque BEAST es la siguiente:

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=2592000; includeSubdomains";

Aunque es aconsejable saber los requerimientos de navegación y comprobar los resultados en el servicio de análisis de SSL de Qualys.
Leer más...

23 marzo 2011

Nmap, esta vez desde la web

Nmap no es sólo un escáner de puertos, es una de las herramientas de seguridad y administración más potentes y populares que existen, y cuenta con una enorme comunidad de usuarios y desarrolladores.

Debido a la popularidad, versatilidad y potencia de la herramienta son varios los proyectos que la han llevado a la Web, haciéndola accesible a través de un navegador de forma remota.

En primer lugar tenemos algunos servicios que permiten escanear nuestra propia dirección IP, muy útiles para saber cómo nos ven desde fuera.

- Nmap Online: Uno de los más populares. Podemos lanzar escaneos predeterminados (Quick y Full) o personalizar uno, dentro de lo que nos permite el portal. Funciona realmente bien y es rápido. Actualmente versión 4.75 de nmap.

- Free Online-Portscanner: Parecido al anterior pero con opciones mucho más reducidas. Sólo un tipo de escaneo sin opción a modificaciones. Actualmente versión 3.77 de nmap.

- Self Audit My Server: Enfocado a trabajar con servidores web. Además de nmap lanza Whois, Nikto y SQLiX para auditar el servicio web. A diferencia de los anteriores, se puede lanzar contra otra IP o dominio que no sea el nuestro. Actualmente versión 5.00 de nmap y 2.03/2.04 de nikto. Podemos ver un ejemplo de escaneo a microsoft.com

Por otro lado tenemos proyectos que proporcionan el software para instalar el servicio en nuestra infraestructura.

- nmap-cgi: Muy completo, despliega un portal para realizar, guardar y administrar nuestros escaneos. Permite cuentas de usuario independientes, separar privilegios, escaneos avanzados de nmap, programar escaneos, etc ...


- Inprotect: Al igual que el anterior despliega una completa infraestructura para realizar y administrar escaneos. Destaca su generador de reportes y la cuidada interfaz.


- nmap-web: Si no nos interesa mucho la interfaz y queremos algo rápido de instalar y usable, nmap-web nos lo proporciona. Las opciones son reducidas y la interfaz es básica, pero cumple su función. Algunos ejemplos (1, 2, 3).
Leer más...

01 marzo 2011

Hacking LG TV for fun and profit!

Aprovechando uno de los días sin IVA de Mediamarkt, y teniendo en mente un cambio de TV (la anterior no tenía ni TDT integrada), volvimos a casa con una LG más moderna. Ya puestos, esta es algo más grande que la anterior, y como le confesé a Chema Alonso en la entrevista que me hizo, este año estará genial seguir la temporada de Fórmula 1 en el salón!

Según miraba la TV en Mediamarkt, me preguntaba a mí mismo para qué valdría el conector RJ-45 que se le veía detrás, y ya me picaban los dedos por conectarla en casa a ver qué habían dejado los ingenieros de LG a disposición de todo el mundo

Así, después de ver que todo funcionaba, configuré la red cableada de la TV con la IP 192.168.52.50 y con default gateway y DNS 192.168.52.254 (la máquina de casa que hace de UTM). Os doy estos datos para poneros en situación de lo que veréis que ocurre después.

Así pues… siguiendo el capítulo 0 del "Manual del buen auditor" el primer sencillo nmap lanzado (nmap -v -sT -sV -A -O -p1-65535 -P0 192.168.52.50) devuelve que no hay puertos abiertos. Leyendo el manual (esta vez el de la TV), se dice que puede reproducir contenidos digitales compatibles con DLNA (Digital Living Network Alliance) que estén en la misma red. DLNA funciona como UPnP, es decir, que los dispositivos "se anuncian" que existen en la red mediante el puerto 1900 UDP a una IP de Multicast… Curioso es que al buscar contenidos por la red desde el menú de la TV, al lanzar el siguiente nmap apareciera lo siguiente:

[root@Carmen ~]# nmap -v -sT -sV -A -O -p1-65535 -P0 192.168.52.50
Interesting ports on 192.168.52.50:
Not shown: 65534 closed ports
PORT      STATE SERVICE VERSION
33255/tcp open  unknown
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port33255-TCP:V=4.20%I=7%D=2/19%Time=4D5EFE64%P=i686-redhat-linux-gnu%r
SF:(GetRequest,F4,"HTTP/1\.1\x20500\x20Internal\x20Server\x20Error\r\nSERV
SF:ER:\x20Linux/2\.6\.31-1\.0\x20UPnP/1\.0\x20DLNADOC/1\.50\x20INTEL_NMPR/
SF:2\.0\x20LGE_DLNA_SDK/1\.5\.0\r\nCONNECTION:\x20close\r\nCONTENT-LENGTH:
SF:\x2060\r\nCONTENT-TYPE:\x20text/html\r\n\r\n
500\x20Internal\x20Server\x20Error)(HTTPOptions,E8,"HTTP/1\.
SF:1\x20501\x20Not\x20Implemented\r\nSERVER:\x20Linux/2\.6\.31-1\.0\x20UPn
SF:P/1\.0\x20DLNADOC/1\.50\x20INTEL_NMPR/2\.0\x20LGE_DLNA_SDK/1\.5\.0\r\nC
SF:ONNECTION:\x20close\r\nCONTENT-LENGTH:\x2054\r\nCONTENT-TYPE:\x20text/h
SF:tml\r\n\r\n

501\x20Not\x20Implemented

MAC Address: 00:E0:91:VV:XX:ZZ (LG Electronics)
No exact OS matches for host (If you know what OS is running on it, see http://insecure.org/nmap/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=4.20%D=2/19%OT=33255%CT=1%CU=38930%PV=Y%DS=1%G=Y%M=00E091%TM=4D5E
OS:FECD%P=i686-redhat-linux-gnu)SEQ(SP=BB%GCD=1%ISR=C4%TI=Z%II=I%TS=A)SEQ(S
OS:P=BB%GCD=1%ISR=C5%TI=Z%II=I%TS=A)OPS(O1=M5B4ST11NW5%O2=M5B4ST11NW5%O3=M5
OS:B4NNT11NW5%O4=M5B4ST11NW5%O5=M5B4ST11NW5%O6=M5B4ST11)WIN(W1=16A0%W2=16A0
OS:%W3=16A0%W4=16A0%W5=16A0%W6=16A0)ECN(R=Y%DF=Y%T=40%W=16D0%O=M5B4NNSNW5%C
OS:C=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%
OS:T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD
OS:=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=4
OS:0%TOS=C0%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUL=G%RUD=G)IE(R=Y%DFI
OS:=N%T=40%TOSI=S%CD=S%SI=S%DLI=S)

Uptime: 0.117 days (since Fri Feb 18 21:32:27 2011)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=187 (Good luck!)
IPID Sequence Generation: All zeros

OS and Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 119.277 seconds
               Raw packets sent: 126 (9832B) | Rcvd: 66 (6092B)

Ahora sí que tienes un puerto abierto TCP??? ¿Qué correrá en él?

[root@Carmen ~]# telnet 192.168.52.50 33031
Trying 192.168.52.50...
Connected to 192.168.52.50 (192.168.52.50).
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 400 Bad Request
SERVER: Linux/2.6.31-1.0 UPnP/1.0 DLNADOC/1.50 INTEL_NMPR/2.0 LGE_DLNA_SDK/1.5.0
CONNECTION: close
CONTENT-LENGTH: 50
CONTENT-TYPE: text/html


400 Bad Request 

GET / HTTP/1.0

HTTP/1.1 500 Internal Server Error
SERVER: Linux/2.6.31-1.0 UPnP/1.0 DLNADOC/1.50 INTEL_NMPR/2.0 LGE_DLNA_SDK/1.5.0
CONNECTION: close
CONTENT-LENGTH: 60
CONTENT-TYPE: text/html


500 Internal Server Error 

GET / HTTP/0.9

HTTP/1.1 500 Internal Server Error
SERVER: Linux/2.6.31-1.0 UPnP/1.0 DLNADOC/1.50 INTEL_NMPR/2.0 LGE_DLNA_SDK/1.5.0
CONNECTION: close
CONTENT-LENGTH: 60
CONTENT-TYPE: text/html


500 Internal Server Error
^[^]
telnet> quit
Connection closed.


Un servidor web?! Se comporta diferente dependiendo de la versión HTTP que usemos (0.9, 1.0 ó 1.1). Por la respuesta, sólo soporta peticiones HTTP 1.1, pero no permite ni una simple petición GET. ¿Tendrá vulnerabilidades? Googleando aparecen entradas sobre las capacidades DLNA (el plugin DLNADOC/1.50 que aparece en la cabecera). He de decir también que en sucesivas pruebas, el puerto abierto detectado cambiaba, en general a 33031 TCP. Aquí referenciaré siempre 33255 para mantener la coherencia.

El sentido común dice que un servidor web, si tiene alguna vulnerabilidad, la fantástica herramienta Nikto, lo sabrá. [DISCLAIMER] Esta prueba fue lanzada mientras mi novia veía la tele, por lo que, el comportamiento que vais a leer/ver ahora lo detecté por casualidad, pero mi cara fue algo así :O [/DISCLAIMER]

Ejecutando perl nikto.pl -host http://192.168.52.50:33255 -C all, el programa empieza a probar vulnerabilidades conocidas indicándonos si ha tenido éxito o no en cada una de ellas.

Mientras se ejecutaba esta herramienta, mi novia, muy aficionada a hacer zapping con el mando, llegó un momento en el que, al cambiar de canal, la TV mostraba durante unos 2 segundos la imagen, y se quedaba sin señal. He reproducido varias veces la situación y la podéis ver bajo estas líneas:



Aunque se pare la ejecución de la herramienta, hasta que no se reinicia la TV, no volverá a su comportamiento normal. Es decir, ¿el funcionamiento de la TV puede verse afectado dependiendo de lo que le hagas a su interfaz de red? Por ello, quise probar si era capaz de hacer algún otro tipo de denegación de servicio basado en estresar la tarjeta de red. ¿Qué pasaría si por ejemplo utilizara las capacidades de Flooding de Hping? Si no os acordáis de todas las opciones que tiene hping, podéis echar un vistazo al cheatsheet que comentamos aquí.

Una vez lanzado a ejecución la línea "hping -p 33255 --flood -a 192.168.52.254 -S 192.168.52.50"  la TV empezará a recibir una inundación de paquetes por su interfaz de red que la estresará tanto que seará incapaz de reproducir correctamente el video!! El audio se oye bien, pero el video no se decodifica como tiene que ser. Lo podéis ver en el siguiente video:



En este caso, si paramos la ejecución de Hping, la TV hará su trabajo correctamente, sin perder fotogramas, sin necesidad de reinicios.

Buscando otros vectores de ataque

Netcast es la aplicación de LG que nos presenta el portal de acceso a los contenidos digitales desde la TV permitiéndonos ver videos Youtube, conectarnos a Facebook, Twitter, el informe meteorológico con Accuweather, Google Maps, etc,… Dicho portal ofrece la posibilidad de hacer que, en su momento de carga, presente la temperatura de una ciudad y la hora de la medición. Podéis ver un ejemplo de esto en la siguiente imagen:





La idea ahora es analizar el funcionamiento y personalizar aún más ese portal. Siguiendo el "manual del buen juanker" nuevamente, procedemos a analizar el tráfico de red que efectúa la TV desde que la encendemos y accedemos al menú Netcast. Para ello, utilizando la herramienta Tshark (la utilidad de línea de comandos de Wireshark) analizamos el tráfico de red que intercambia la TV con el exterior para obtener la información meteorológica.. Mediante la línea: "tshark -i eth1 host 192.168.52.50 -V -w /tmp/tsharklg" obtendremos un fichero pcap que luego podremos analizar cómodamente con Wireshark (si alguien quiere que le envíe el pcap, que me lo pida).

Os cuento las conclusiones obtenidas de ese análisis:
  1. Lo primero que hace la TV es intentar resolver por DNS la dirección www.lge.com
  2. Una vez que resuelve, se conecta a esa IP al puerto TCP 80 y si obtiene una respuesta satisfactoria "detecta que tiene conexión a Internet".
  3. Una vez que entramos en el menú Netcast con el mando, se conecta a http://lgtv.accu-weather.com/widget/lgtv/weather-data.asp… con un montón de parámetros que devuelve un XML que posteriormente la TV parseará y mostrará en pantalla.

Bueno, pues ya tenemos las condiciones necesarias para el caldo de cultivo de una bonita inyección que genere un panel diferente.

Es increible que la TV necesite conectarse periódicamente a www.lge.com para saber si tiene o no Internet. Hice la prueba a nivel de firewall saliente (en 192.168.52.254) y bloqueé la IP a la que intenta conectarse la TV. Efectivamente, la LG se queja en un mensaje de error que no hay acceso a Internet y que verifique la conexión. El día que el servidor web de lge.com no esté accesible, para todos los dispositivos LG mundiales que ejecuten NetCast, no habrá Internet!

Analizando la petición web que hace a accu-weather.com y la respuesta en un XML, para llevar a cabo la inyección tendremos que disponer de un servidor web accesible por la TV y modificar la resolución DNS de accu-weather.com por la del servidor web propio. Si nuestro servidor DNS nos permite añadir entradas (no hace simplemente de relay/caché de DNS) lo haremos así. Para ello deshabilité en la máquina 192.168.52.254 el servicio DNS caché y utilicé una implementación de servidor DNS hecha en Perl muy sencillita que permite añadir manualmente qué queremos que se resuelva:

En mi caso, quedó así:

[root@Carmen ~]# more /tmp/dns.pl 
 #!/usr/bin/perl 

 use Net::DNS::Nameserver;
 use strict;
 use warnings;

 sub reply_handler {
         my ($qname, $qclass, $qtype, $peerhost,$query,$conn) = @_;
         my ($rcode, @ans, @auth, @add);

         print "Received query from $peerhost to ". $conn->{"sockhost"}. "\n";
         $query->print;

        
         if ($qtype eq "A" && $qname eq "lgtv.accu-weather.com" ) {
                 my ($ttl, $rdata) = (3600, "192.168.52.17"); #SI ALGUIEN NOS PIDE RESOLUCION DE LGTV.ACCU-WEATHER.COM DEVOLVEMOS LA IP DEL WEBSERVER
                 push @ans, Net::DNS::RR->new("$qname $ttl $qclass $qtype $rdata");
                 $rcode = "NOERROR";
         }elsif( $qname eq "www.lge.com" ) {
                 my ($ttl, $rdata) = (3600, "93.188.132.129"); #Importante añadir la resolución de www.lge.com porque si no dirá que no hay acceso a Internet!!!!
                 push @ans, Net::DNS::RR->new("$qname $ttl $qclass $qtype $rdata");
                 $rcode = "NOERROR";

         }else{
                  $rcode = "NXDOMAIN";
         }
        

         # mark the answer as authoritive (by setting the 'aa' flag
         return ($rcode, \@ans, \@auth, \@add, { aa => 1 });
 }

 my $ns = Net::DNS::Nameserver->new(
     LocalPort    => 53,
     ReplyHandler => \&reply_handler,
     Verbose      => 1,
 ) || die "couldn't create nameserver object\n";

 $ns->main_loop;

Así pues en la IP 192.168.52.17 levanté un servidor web, que devolvería en /widget/lgtv/weather-data.asp el siguiente XML:

[root@Test ~]# more /var/www/html/widget/lgtv/weather-data.asp


C
KM
KPH
kPa
MM

FailLand
Spain
40.4
-3.68

01:00
1
False


http://www.accuweather.com/m/en-us/EUR/ES/SP013/Madrid/current.aspx?p=lgtv
SecurityByDefault tenemos 2858 Followers en Twitter
21
20
30%
Sunny
01
4
4
SW
0.0
Low
…..
SNIP

De esta manera, la siguiente vez que entráramos en el menú Netcast de la TV, nos sorprendería de la siguiente manera:



Conclusiones

  • La TV LG es increible en cuanto a capacidades y prestaciones. Se ve y oye genial y estoy seguro que disfrutaré como un vikingo de las carreras de Fórmula 1!
  • Los ingenieros de LG han hecho un buen trabajo en la securización de la misma, al menos "de serie", puesto que hay que dedicarle un buen rato para encontrarle "cosillas"
  • Quizá sería interesante no haber incluido procesadores autónomos para la decodificación de la señal de TDT y el procesamiento del tráfico de red, a fin de evitar que una inundación de paquetes influyera en la decodificación o el refresco de pantalla.
  • Una pista falsa que seguí fue el intentar meterle mano a la funcionalidad DLNA. Desde un PC con un servidor DLNA, detecta que la TV está en la red, pero no permite ejecución de comandos ese dispositivo DLNA.
  • Para conseguir inyectar el texto deseado en el portal de entrada de Netcast hay que tomarse unas cuantas molestias, aunque oye siempre es divertido el tener un servidor que te genere un XML con información personalizada y acutalizada en el campo "observationtime" y enterarte en la TV cuando quieras.
  • Ahora ya sé qué medidas tomar cuando mi novia monopolice el mando a distancia de la TV y no compartamos el gusto por lo que estén dando en ese canal. Hping es mi amigo!
  • He visto las etiquetas de "Warranty void if this seal is broken", sin embargo, en ningún sitio pone que se invalide la garantía por darle un poco de caña al interfaz de red, ¿verdad?
  • Después de que sustituyeran CNN+ en español por Canal Gran Hermano pensé que la tele sería un coñazo… ¿Quién dijo ahora que la TV es aburrida?
Leer más...

27 febrero 2011

Enlaces de la SECmana - 60


    Leer más...

    18 julio 2010

    Enlaces de la SECmana - 28


    Bueno, una SECmana más que ha pasado, en la que hemos tenido muchas detenciones, muchas versiones nuevas de nuestras herramientas favoritas, y ya se van calentando motores para los próximos congresos que están a punto de celebrarse en verano, y que seguro que nos traen muchos titulares. De momento, empezamos con el recopilatorio de lo que ha dado de sí esta semana tan post-futbolera:
    Nada más, pasad buena SECmana, y si estáis ausentes, tranquilos: volveremos el domingo que viene!
    Leer más...

    21 abril 2010

    8 Herramientas de seguridad web comprensivas y gratuitas

    Aprovechando la salida de la última versión de Sandcat quería hacer una pequeña recopilación de las aplicaciones más populares y potentes para el análisis de seguridad web gratuitas.

    En alguna ocasión he leído comparaciones de estas herramientas con otras que únicamente hacen sus análisis en base a firmas, como por ejemplo Nikto o la versión gratuita de N-Stalker Esta comparación es un error, ya que el enfoque es completamente distinto. Ambas están enfocadas a detectar vulnerabilidades pero las aplicaciones basadas en patrones generalmente tienen bases de datos más amplias y actualizadas que las herramientas comprensivas y por lo tanto son complementarias.

    Las características son muy similares en todas ellas, hacen una navegación previa y posteriormente lanzan el banco de pruebas. Exceptuando las dos últimas, scrawlr y acunetix,  que únicamente detectan SQL Injection y XSS respectivamente, todas las demás buscan las vulnerabilidades más comunes.

    Sandcat Free Edition
    URL: http://www.syhunt.com/?n=Sandcat.Sandcat
    Descarga: http://www.syhunt.com/?n=Sandcat.Download
    Sistema Operativo: Windows




    NetSpaker CE
    URL: http://www.mavitunasecurity.com/communityedition/
    Descarga: http://www.mavitunasecurity.com/communityedition/download/
    Sistema Operativo: Windows


    Websecurify
    URL: http://www.websecurify.com/
    Descarga: http://code.google.com/p/websecurify/downloads/list
    Sistema Operativo: Windows, Mac OS, Linux



    w3af
    URL: http://w3af.sourceforge.net/
    Descarga: http://sourceforge.net/projects/w3af/files/
    Sistema Operativo: Windows, FreeBSD,  Linux





    skipfish
    URL: http://code.google.com/p/skipfish/
    Descarga: http://code.google.com/p/skipfish/downloads/list
    Sistema Operativo: Linux



    wapiti
    URL: http://www.ict-romulus.eu/web/wapiti/home
    Descarga: http://www.ict-romulus.eu/web/wapiti/download
    Sistema Operativo: Linux 



    scrawlr
    URL: http://www.communities.hp.com/securitysoftware/blogs/spilabs/archive/2008/06/23/finding-sql-injection-with-scrawlr.aspx
    Descarga: https://h30406.www3.hp.com/campaigns/2008/wwcampaign/1-57C4K/index.php?mcc=DNXA&jumpid=in_r11374_us/en/large/tsg/w1_0908_scrawlr_redirect/mcc_DNXA
    Sistema Operativo: Windows



    acunetix free edition
    URL: http://www.acunetix.com/cross-site-scripting/scanner.htm
    Descarga: http://www.acunetix.com/vulnerability-scanner/download.htm
    Sistema Operativo: Windows

    Leer más...