viernes, febrero 20, 2009

Las Mejores Practicas Contra la Pirateria

Hoy en día, la mayoría de las páginas web se construyen en torno a las aplicaciones para proporcionar servicios de calidad a sus usuarios. En particular, son ampliamente utilizados para crear, editar y administrar su contenido. Debido a la naturaleza interactiva de estos sistemas, donde la entrada de los usuarios es fundamental, es importante pensar en la seguridad, a fin de evitar explotaciones maliciosas por terceras personas y para garantizar la mejor experiencia al usuario.

Algunos tipos de intento de hacking y cómo prevenirlos

Hay muchos tipos diferentes de ataques que los hackers pueden llevar a cabo con el fin de tener un control total o parcial de un sitio web. En general, los más comunes y peligrosos son los de inyección de SQL y de cross-site scripting (XSS).

La inyección de SQL es una técnica para introducir un trozo de código malicioso en una aplicación web, si la base de datos es vulnerable se puede cambiar su comportamiento. Es una técnica poderosa si tienes en cuenta que permite manipular las URL (dentro de String Query en la base de datos) o cualquier otro formulario (búsqueda, acceso, correo electrónico de registro, etc.) para inyectar el código malicioso. Puedes encontrar algunos ejemplos de inyección de SQL en la Web Application Security Consortium.
Las precauciones que se pueden tomar para evitar este tipo de ataque. Por ejemplo, es una buena práctica agregar una capa de un formulario en la parte delantera y en la parte final de la base de datos. En PHP, la extensión PDO se usa a menudo para trabajar con parámetros (a veces llamados marcadores o variables de obligación) en lugar de integrar lo que los usuarios introducen en las declaraciones. Otra técnica realmente fácil es el caracter de escape, todos los caracteres peligrosos que pueden tener un efecto directo sobre la estructura de la base de datos deben se escapados. Por ejemplo, cada aparición de una comilla simple [ '] en un parámetro debe ser sustituido por dos comillas simples [''] para formar una cadena SQL válida. Estos son sólo dos de las acciones más comunes que puedes hacer para mejorar la seguridad de un sitio y evitar las inyecciones SQL. En la red puedes encontrar muchos recursos que pueden satisfacer tus necesidades (lenguajes de programación, aplicaciones web específicas ...).



La otra técnica que voy a introducir aquí es de cross-site scripting (XSS). XSS es una técnica para inyectar código malicioso en una página web, explotando vulnerabilidades de seguridad en aplicaciones web. Este tipo de ataque es posible cuando la aplicación web procesa los datos obtenidos a través de la entrada del usuario y no hace ningún tipo de verificación o validación antes de devolverla al usuario final. Puedes encontrar algunos ejemplos de cross-site scripting en la Web Application Security Consortium.

Hay muchas maneras de asegurar una aplicación web en contra de esta técnica. Algunas acciones fáciles que se pueden tomar:

* Extrayendo los input que pueden ser insertados en un formulario (por ejemplo, ver la función strip tags de PHP);
* Utilizando la codificación de los datos para evitar la inyección directa de caracteres potencialmente maliciosos (por ejemplo, véase la función htmlspecialchars de PHP);
* Creando una capa entre la entrada de datos y la parte final para evitar la inyección directa de código en la aplicación.

Algunos recursos sobre la seguridad CMSS

La inyección de SQL y el cross-site scripting son sólo dos de las muchas técnicas utilizadas por los hackers para atacar y explotar sitios inocentes. Como norma general en materia de seguridad, es importante mantenerse al día sobre cuestiones de seguridad y, en particular cuando se utiliza software de terceros, para asegurarte de que tienes instalada la última versión disponible. Muchas aplicaciones web están hechas en torno a grandes comunidades, ofreciendo apoyo y actualizaciones constantes.
Por dar algunos ejemplos, cuatro de las mayores comunidades de Open Source en sistemas de gestión de contenidos -Joomla, Wordpress, PHP-Nuke y Drupal- proporcionan guías útiles sobre la seguridad en sus sitios web y hospedan una gran comunidad de foros donde los usuarios pueden hablar de sus temas y pedir ayuda. Por ejemplo, en la sección de WordPress Hardening WordPress, ofrece documentación sobre la manera de fortalecer la seguridad de su CMS. Joomla ofrece muchos recursos en materia de seguridad, en particular, una Lista de control con una lista de las acciones que los webmasters deberían tomar para mejorar la seguridad de un sitio web basado en Joomla. En el sitio de Drupal, puedes acceder a información sobre cuestiones de seguridad, dirigiéndote a su sección de Seguridad. También puedes suscribirte a su lista de correo sobre seguridad que se actualiza constantemente sobre los temas en curso. PHP-Nuke ofrece documentación sobre la Seguridad en el capítulo 23 de su sección Cómo (How to), dedicada a la gestión del sistema de este CMS. También tienen una sección llamada he sido hackeado - ¿Y ahora qué?, que ofrece una guía para resolver los problemas relacionados con el hacking.



Algunas formas de identificar el hackeo de tu sitio

Como antes he mencionado, existen muchos tipos diferentes de ataques que los piratas pueden realizar en un sitio, y hay diferentes métodos de explotación de un sitio inocente. Cuando los piratas son capaces de tomar el control completo de un sitio, puede desfigurarlo (cambiando la página de inicio), borrar todo el contenido (bajando las tablas de tu base de datos), o insertar programas maliciosos o ladrones de cookies. También pueden explotar un sitio para hacer spam, por ejemplo, ocultando los vínculos que apuntan a mis recursos o creando paginas que redireccionan a sitios de malware. Cuando estos cambios en tu aplicación son evidentes (como la desfiguración de tu web), puedes darte cuenta fácilmente de que has sido hackeado, pero otras vulnerabilidades, en particular aquellas que tienen la intención de hacer spam, no son tan evidentes. Google, a través de algunos de sus productos, ofrece a los webmasters algunas formas de detectar si un sitio ha sido hackeado o modificado por un tercero sin autorización. Por ejemplo, usando la búsqueda de Google puedes buscar palabras típicas añadidas por los piratas a tu sitio web e identificar las páginas que se han sido comprometidas. Simplemente abre google.es y pon cadena_a_buscar_en_tu_sitio site: tu_site, buscando palabras que los hackers usan normalmente para el spam (viagra, porno, mp3, juegos de apuestas, etc.):

[site:ejemplo.com viagra] [site: ejemplo.com viagra] [viagra site:ejemplo.com]

Si no estás familiarizado con el operador de búsqueda site:, es una forma de hacer la consulta a Google restringiendo su búsqueda a un sitio específico. Por ejemplo, la búsqueda site: googleblog.blogspot.com sólo dará resultados del Blog Oficial de Google. Cuando añadimos palabras del spam a este tipo de consulta, Google mostrará todas las páginas indexadas del sitio web que contienen esas palabras de spam y en este caso es muy probable que haya sido hackeado. Para comprobar estas páginas sospechosas, abre la versión en caché que tiene el Google y podrás detectar el cambio de comportamiento, si lo hubiere. De esta forma, podrías limpiar tus páginas comprometidas y también comprobar si existen anomalías en los archivos de configuración de tu servidor (por ejemplo, en servidores web Apache:. Htaccess y httpd.conf).
Si tu sitio no aparece más en los resultados de búsqueda de Google, podría significar que Google ha descubierto malas prácticas en tu sitio web como consecuencia del piratereo y puede retirarte temporalmente de su índice, debido a la violación de las directrices de calidad del webmaster.

A fin de mantener constantemente un ojo en la presencia de palabras sospechosas en tu sitio web, puedes también utilizar las Alertas de Google para supervisar cuestiones como:

site:example.com viagra OR casino OR porn OR ringtones

Recibirás un aviso por e-mail cada vez que una de estas palabras clave se encuentren en el contenido de tu sitio.

También puedes utilizar las Utilidades del Webmaster de Google para detectar cualquier actividad de hackeo en tu sitio. Las Herramientas del Webmaster proporcionan estadísticas sobre las consultas de búsqueda más habituales de tu sitio. Esta información te ayudará a controlar si tu sitio es clasificado como sospechoso de tener palabras de spam no relacionadas. El "Qué datos ve el bot de Google" es también útil, verás si Google detecta cualquier palabra inusual en tu sitio, independientemente de si estás en su clasificación o no.

Si tienes una cuenta de Herramientas para webmasters y Google considera que tu sitio ha sido hackeado, serás notificado según el tipo de ataque de tu sitio:

* Si una tercera persona de forma maliciosa está utilizando tu sitio web para hacer comportamiento de spam (tales como ocultar enlaces o la creación de páginas de spam) y ha sido detectado por su rastreador, se te notificará en el Centro de mensajes con información detallada (una muestra de la URL hackeada o un texto de los enlaces ocultos);
* Si tu sitio es hackeado para alojar programas maliciosos (malware), verás un aviso de malware en la "Descripción" en la página de las Herramientas para webmasters.

Comportamiento del hacker eliminado, ¿y ahora qué?

¿Tu sitio ha sido hackeado o está sirviendo malware? Primero hay que limpiar el desorden del malware y a continuación, realiza una de las siguientes acciones:

* Si tu sitio ha sido hackeado con propósitos de spam, visita el sitio reconsideration request a través de las Herramientas para el Webmasters de Google para solicitar la reconsideración de tu sitio;
* Si tu sitio estaba proporcionando malware a los usuarios, envía una solicitud de reconsideración de malware en la pagina de "Descripción" de las Herramientas para webmasters.

Espero que hayas encontrado útiles estos consejos.

Traducción y añadidos de Carmelo del articulo y otros:

http://googlewebmastercentral.blogspot.com/2009/02/best-practices-against-hacking.html

martes, febrero 17, 2009

Ataque al UPnP en Red (y III)

Una Introducción a Miranda

Miranda es una herramienta de administración de UPnP escrita en Python. Incorpora una línea (shell) de comandos que soporta autocompletado e historial de últimos comandos, se puede guardar el trabajo en un archivo que puede ser recargado para su posterior análisis. También puedes alterar las configuraciones del programa sobre la marcha, y registrar todos tus comandos en un archivo log, de manera que puedas saber exactamente lo que ejecutaste y cuándo lo ejecutaste.

Miranda puede descubrir hosts UPnP tanto activamente como pasivamente, y con un simple comando pueden ser enumerados todos los tipos de dispositivos, servicios, acciones y variables. Las variables de estado del servicio pueden ser automáticamente correlacionadas con sus acciones asociadas, e identificadas tanto sus variables de salida y/o entrada para cada acción. Miranda almacena la información de todos los hosts en una estructura única de datos y te permite desplegar directamente toda la información y ver su contenido.

Finalmente, puedes ejecutar cualquier acción soportada por el host UPnP; si la acción requiere algún valor de entrada, se te informará su nombre y su tipo (string, 4 byte entero, 2 byte entero, etc), así como los valores permitidos o rangos de valores que el host UPnP ha suplido, y se te pedirá que ingreses el valor.




Descubriendo hosts UPnP con Miranda




Cuando inicias Miranda por primer vez, te llevará a una shell interactiva con un prompt ‘upnp>’ a la espera de ejecución de comandos. La primera cosa que probablemente quieras hacer es descubrir si hay algún host UPnP en tu red; esto puede ser realizado con los comandos ‘pcap’ o ‘msearch’. Cuando es ejecutado el comando ‘pcap’, Miranda se pondrá en escucha (modo pasivo) buscando mensajes SSDP NOTIFY, mientras que el comando ‘msearch’ consultará los dispositivos UPnP usando un mensaje M-SEARCH. Por defecto, ‘msearch’ buscará todos los dispositivos UPnP, pero también se le puede especificar que busque un determinado tipo de dispositivo o servicio si así se desea. En este ejemplo, simplemente buscaremos algún dispositivo:
Código:
upnp> msearch

Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop...

****************************************************************
SSDP reply message from 192.168.0.1:5678
XML file is located at http://192.168.0.1:5678/igd.xml
Device is running Embedded UPnP/1.0
***************************************************************

Discover mode halted...

Aquí podemos ver que hay un host UPnP en la red, el cual resulta ser un router DI-524. También podemos ver que nos informa del tipo de servidor UPnP (’Embedded UPnP/1.0¿), y la ubicación del archivo XML raíz.

Ejecutando el comando ‘host list’ nos muestra la lista de todos los hosts UPnP descubiertos y el número índice de cada uno (el número índice es usado en los comandos para hacer referencia a un host específico, en el ejemplo queda más claro):
Código:
upnp> host list

[0] 192.168.0.1:5678

Aquí tenemos un host UPnP, ahora necesitamos enumerar sus capacidades. Ejecutando el comando ‘host get 0′ obtendremos toda la información UPnP del host con el índice 0:
Código:
upnp> host get 0

Requesting device and service info for 192.168.0.1:5678 (this could take a few seconds)...

Host data enumeration complete!

Ahora buscamos en todos los datos que hemos recogido de este host usando el comando ‘host info’. Este comando nos permite desplegar los datos del host interno de Miranda y ver la información que este almacena. Observa también que todos estos comandos se autocompletaran automáticamente, de manera que no tendrás que escribirlos por completo:
Código:
upnp> host info 0

xmlFile : http://192.168.0.1:5678/igd.xml
name : 192.168.0.1:5678
proto : http://
serverType : Embedded HTTP Server 3.23
upnpServer : Embedded UPnP/1.0
dataComplete : True
deviceList : {}

Código:
upnp> host info 0 deviceList

InternetGatewayDevice : {}
WANDevice : {}
WANConnectionDevice : {}

Código:
upnp> host info 0 deviceList WANConnectionDevice services WANIPConnection actions

AddPortMapping : {}
GetNATRSIPStatus : {}
GetGenericPortMappingEntry : {}
GetSpecificPortMappingEntry : {}
ForceTermination : {}
GetExternalIPAddress : {}
GetConnectionTypeInfo : {}
GetStatusInfo : {}
SetConnectionType : {}
DeletePortMapping : {}
RequestConnection : {}

Dependiendo del host, puede haber muchos datos en esta estructura, así que si quieres ver el resumen de los datos para un host en particular, ejecuta el comando ‘host summary’:
Código:
upnp> host summary 0

Host: 192.168.0.1:5678
XML File: http://192.168.0.1:5678/igd.xml
InternetGatewayDevice
manufacturerURL: http://www.dlink.com
modelName: D-Link Router
UPC: 123456789001
modelNumber: None
presentationURL: http://192.168.0.1:80
friendlyName: D-Link Router
fullName: urn:schemas-upnp-org:device:InternetGatewayDevice:1
modelDescription: Internet Access Router
UDN: uuid:upnp-InternetGatewayDevice-1_0-12345678900001
modelURL: None
manufacturer: D-Link
WANDevice
manufacturerURL: http://www.dlink.com
modelName: D-Link Router
UPC: 123456789001
modelNumber: 1
presentationURL: None
friendlyName: WANDevice
fullName: urn:schemas-upnp-org:device:WANDevice:1
modelDescription: Internet Access Router
UDN: uuid:upnp-WANDevice-1_0-12345678900001
modelURL: http://support.dlink.com
manufacturer: D-Link
WANConnectionDevice
manufacturerURL: http://www.dlink.com
modelName: D-Link Router
UPC: 123456789001
modelNumber: 1
presentationURL: None
friendlyName: WAN Connection Device
fullName: urn:schemas-upnp-org:device:WANConnectionDevice:1
modelDescription: Internet Access Router
UDN: uuid:upnp-WANConnectionDevice-1_0-12345678900001
modelURL: http://support.dlink.com
manufacturer: D-Link

El comando de resumen nos muestra todos los tipos de dispositivos que este host reporta, así como algún dato adicional relacionado con cada tipo de dispositivo. Si quieres ver toda la información que miranda almacena sobre un host en particular, lo puedes hacer con el comando ‘host details 0′. Sin embargo, la información que arroja este comando es generalmente bastante larga, probablemente quieras guardarla en un archivo y verla en un editor de texto; esto lo puedes hacer con el comando ’save info 0′:
Código:
upnp> save info 0 dl524

Host info for '192.168.0.1:5678' saved to 'info_dl524.mir'

El argumento ‘dl524′ es opcional; si no pones ninguna cadena como argumento, se usará el número índice en su lugar. Mientras que estemos en la sesión, también podemos guardar los datos que Miranda ha almacenado sobre todos los hosts que han sido descubiertos, de modo que después podamos cargarlos de nuevo e iniciar una nueva sesión:
Código:
upnp> save data session1

Host data saved to 'struct_session1.mir'

Enviado comandos UPnP con Miranda

Ahora vamos a explorar algunas de las acciones que podemos ejecutar en este dispositivo. Anteriormente cuando ejecutamos el comando ‘host info’, listamos todas las acciones disponibles para el servicio WANIPConnection que está asociado con el dispositivo WANConnectionDevice; vamos a verlas otra vez:
Código:
upnp> host info 0 deviceList WANConnectionDevice services WANIPConnection actions

AddPortMapping : {}
GetNATRSIPStatus : {}
GetGenericPortMappingEntry : {}
GetSpecificPortMappingEntry : {}
ForceTermination : {}
GetExternalIPAddress : {}
GetConnectionTypeInfo : {}
GetStatusInfo : {}
SetConnectionType : {}
DeletePortMapping : {}
RequestConnection : {}

Como puedes ver, este servicio es el que soporta las acciones AddPortMapping y DeletePortMapping, así como algunas otras que parecen interesantes. Primero intentaremos ejecutar la acción GetExternalIPAddress; esto se puede hacer con el comando ‘host send’. Para ejecutar un comando, debes indicar el número índice del host, el nombre del tipo de dispositivo que soporta el servicio, el nombre del servicio que soporta la acción, y el nombre de la acción que quieras ejecutar (de nuevo, todos estos campos se autocompletan, no es mas que escribir mientras se va mirando)
Código:
upnp> host send 0 WANConnectionDevice WANIPConnection GetExternalIPAddress

NewExternalIPAddress : 68.12.34.56

‘NewExternalIPAddres’ es el nombre de la variable asociada con esta acción, y ‘68.12.34.56′ es el valor devuelto para esa variable por el IGD. Algunas acciónes tienen varias variables asociadas con ellas; estas variables pueden ser tanto de entrada (valores que le pasamos al IGS) o de salida (valores devueltos por el IGD). En el caso de la acción GetExternalIPAddress, solo hay una variable de salida. Sin embargo, si hay alguna variable de entrada disponible para una acción, Mirando nos pedirá que introduzcamos estos valores antes de enviar la acción. Toda la información de la variable puede ser enumerada/vista usando los comandos ‘host info’ o ‘host details. No tenemos que tener ningún conocimiento sobre estas variables antes de ejecutar las acciones UPnP.

Intentemos mapeando el puerto 8080 en la WAN para abrir la interfaz administrativa que está en el puerto 80 del IGD (192.168.0.1):
Código:
upnp> host send 0 WANConnectionDevice WANIPConnection AddPortMapping

Required argument:
Argument Name: NewPortMappingDescription
Data Type: string
Allowed Values: []
Set NewPortMappingDescription value to: All your ports are belong to us

Required argument:
Argument Name: NewLeaseDuration
Data Type: ui4
Allowed Values: []
Set NewLeaseDuration value to: 0

Required argument:
Argument Name: NewInternalClient
Data Type: string
Allowed Values: []
Set NewInternalClient value to: 192.168.0.1

Required argument:
Argument Name: NewEnabled
Data Type: boolean
Allowed Values: []
Set NewEnabled value to: 1

Required argument:
Argument Name: NewExternalPort
Data Type: ui2
Allowed Values: []
Set NewExternalPort value to: 8080

Required argument:
Argument Name: NewRemoteHost
Data Type: string
Allowed Values: []
Set NewRemoteHost value to:

Required argument:
Argument Name: NewProtocol
Data Type: string
Allowed Values: ['TCP', 'UDP']
Set NewProtocol value to: TCP

Required argument:
Argument Name: NewInternalPort
Data Type: ui2
Allowed Values: []
Set NewInternalPort value to: 80

La acción AddPortMapping recibe varios valores, pero hay unos puntos importantes que deben ser mencionados:

1. Los valores Booleanos son ‘1′ (verdadero) o ‘0′ (falso)
2. El argumento NewProtocol solo permite dos valores, ‘TCP’ o ‘UDP’
3. No especificamos ningún valor para la variable NewRemoteHost, la cual permite que todos los hosts remotos coincidan con esta asignación de puertos.

No recibimos ningún dato porque la acción AddPortMapping no tiene ninguna variable de salida definida (de nuevo, toda esta información es almacenada en la estructura de datos, si tienes curiosidad). Sin embargo, podemos verificar que la acción fue ejecutada exitosamente lanzando la acción GetSpecificPortMappingEntry:
Código:
upnp> host send 0 WANConnectionDevice WANIPConnection GetSpecificPortMappingEntry

Required argument:
Argument Name: NewExternalPort
Data Type: ui2
Allowed Values: []
Set NewExternalPort value to: 8080

Required argument:
Argument Name: NewRemoteHost
Data Type: string
Allowed Values: []
Set NewRemoteHost value to:

Required argument:
Argument Name: NewProtocol
Data Type: string
Allowed Values: ['TCP', 'UDP']
Set NewProtocol value to: TCP

NewPortMappingDescription : All your ports are belong to us
NewLeaseDuration : 0
NewInternalClient : 192.168.0.1
NewEnabled : 1
NewInternalPort : 80

Ahora podemos borrar el puerto mapeado con la acción DeletePortMapping. Igual que AddPortMapping, la acción DeletePortMapping no devuelve ningún dato a menos que haya ocurrido un error:
Código:
upnp> host send 0 WANConnectionDevice WANIPConnection DeletePortMapping

Required argument:
Argument Name: NewProtocol
Data Type: string
Allowed Values: ['TCP', 'UDP']
Set NewProtocol value to: TCP

Required argument:
Argument Name: NewExternalPort
Data Type: ui2
Allowed Values: []
Set NewExternalPort value to: 8080

Required argument:
Argument Name: NewRemoteHost
Data Type: string
Allowed Values: []
Set NewRemoteHost value to:

Hay una gran multitud de otras acciones interesantes, como por ejemplo ForceTermination, la cual provoca la caída de la conexión WAN del router. Vale la pena explorar los varios servicios y acciones para cada dispositivo que estés auditando.

Conclusión

Si bien, UPnP es un protocolo que pocos entienden, está activo en una amplia mayoría de redes caseras, e incluso también en algunas redes corporativas. Muchos dispositivos soportan UPnP para facilitar el uso a los consumidores, sin embargo, a menudo soportan acciones que ningún servicio debería de estar posibilitado de ejecutar automáticamente, y especialmente sin ninguna autorización. Peor aún, la implementación del protocolo en sí rara vez es construido con una mentalidad prioritaria en la seguridad, dejándolo abierto a futuros ataques.

La mejor defensa contra los ataques UPnP tanto locales como remotos es simplemente deshabilitarlo en algunos/todos los dispositivos de la red. Sin embargo, considerando que este protocolo y otros protocolos “medio-magicos” están diseñados para ayudar a Pepito, quién probablemente esté inconsciente de los peligros de tales protocolos, la única verdadera solución es que los vendedores sean mas atentos en sus diseños, y sus implementaciones, más seguras.

Fin de la 3 y última Parte.

Tradud. de CarmeloC del art.: http://www.ethicalhacker.net/content/view/220/24/

lunes, febrero 16, 2009

Ataque al UPnP en Red (II)

Panorama del Protocolo UPnP

El protocolo UPnP utiliza la dirección de multidifusión 239.255.255.250 y el puerto TCP 1900. Los dispositivos que ofrecen servicios UPnP periódicamente envian NOTIFICACIONES SSDP al 239.255.255.250:1900, anunciandose a sus clientes que están escuchando. Si ves el tráfico en tu LAN con un router UPnP, es muy probable que notes como evía ráfagas de avisos de NOTIFICACION SSDP cada pocos segundos, es porque la mayoría de los rOuters actuales se anuncian como múltiples dispositivos UPnP, y envian una notificación por cada tipo de dispositivo.

Del mismo modo, los clientes UPnP pueden enviar requerimientos SSDP M-SEARCH al 239.255.255.250:1900 para ver si alguno dispositivos UPnP responden. Los Clientes pueden enviar un "requerimiento" M-SEARCH buscando algún dispositivo UPnP cualquiera, o pueden especificar que están buscando un dispositivo UPnP en particular, o pueden hacer "requerimientos" sólo a dispositivos UPnP que soporten un tipo de servicio determinado. Los hosts UPnP en los que coincidan el dispositivo-servicio con los solicitados van a responder con un mensaje de RESPUESTA SSDP, que contiene la misma información enviada en un mensaje de NOTIFICACION SSDP.

Un mensaje de NOTIFICACION SSDP es enviado por el host UPnP que contiene una cabecera de 'Localización' donde especifica la ubicación de un archivo XML. Este archivo XML contiene datos que indican, entre otras cosas, el tipo (s) de dispositivo UPnP y los servicios soportados por el host, así como rutas adicionales a los documentos XML que describen los diversos servicios en detalle. Para descubrir todas las capacidades de un IGD UPnP, hay que analizar todos los archivos XML para extraer los tipos de dispositivos, servicios y acciones que ofrece el IGD.



Los dispositivos UPnP tienen varios servicios que avisan del tipo de acciones que soportan. Un cliente UPnP puede enviar una solilcitud a un dispositivo UPnP en cualquier momento, lo que podría ser una solicitud para abrir un puerto, cambiar el servidor DNS por defecto, o cualquier otra cosa con el que el dispositivo sea compatible con UPnP. Los datos de entrada y salida de las acciones solicitadas se envían utilizando SOAP, que utiliza XML para estructurar la información enviada entre dos partes. Las peticiones SOAP son fundamentalmente peticiones "HTTP POST", con algunas cabeceras SOAP adicionales incluidas en las cabeceras HTTP.

Auditando manualmente los dispositivos UPnP

Para descubrir si un router es compatible con UPnP, puedes ir a la interfaz de administración del router, y comprobar si hay una opción para activar o desactivar UPnP, mientras que la mayoría de los routers tienen UPnP habilitado por defecto, algunos no lo hacen.

En realidad para auditar la configuración de un dispositivo UPnP, tienes que instalar y ejecutar el programa Wireshark (u otro husmeador) y buscar por paquetes de NOTIFICACION SSDP enviados a la dirección de multidifusión 239.255.255.250 en el puerto 1900; estas notificaciones serán dispositivos UPnP anunciandose a la red. Una vez que los mensajes de NOTIFICACION SSDP son capturados, puede examinar las cabeceras SSDP del volcado (dump) del Wireshark para obtener la ubicación del archivo XML raiz. Una vez que consigues ese archivo (simplemente a través de una petición HTTP GET), se puede examinar para ver qué dispositivos y servicios soporta ese host UPnP. A continuación, puedes solicitar otros archivos XML adicionales desde el host (un archivo por cada servicio) y analizar esos documentos XML para determinar qué acciones soporta cada servicio y, a continuación, correlacionar cualquier estado de las variables (variables de entrada y salida) que utiliza cada acción, así como la identificación de las variables que se utilizan para la entrada, y la que se utiliza para la salida (una acción puede utilizar una variable como un parámetro de entrada, mientras que otra utiliza la misma variable como un parámetro de salida).

Obviamente, la auditoría de hosts UPnP manualmente puede necesitar mucho tiempo y nos obliga a generar las solicitudes a dispositivos UPnP de forma manual para ejecutar acciones UPnP en contra de ellos. Utilizando una herramienta para automatizar el proceso hace que todo sea más fácil.

Fin de la segunda Parte. En la tercero empiezo con el programa Miranda.

Carmelo C.

Ataque al UPnP en Red (I)

Universal Plug-n-Play (UPnP) es un protocolo que permite a diversos dispositivos de red autoconfigurarse a sí mismos. Uno de los usos más comunes de este protocolo es permitir que los dispositivos o programas abran puertos en tu router para poder comunicarse correctamente con el mundo exterior (Xbox, por ejemplo, hace esto). El protocolo UPnP se construye encima de los protocolos y especificaciones pre-existentes, en particular, UDP, SSDP, SOAP y XML.

En este artículo se abordan algunas de las cuestiones de seguridad relacionadas con UPNP, se describe brevemente el funcionamiento interno del protocolo, y se muestra cómo identificar y analizar los dispositivos UPnP en una red utilizando herramientas de código abierto. Si bien se centra específicamente en IGDs (dispositivos de puerta de enlace a Internet, alias, routers), es importante recordar que hay muchos otros dispositivos y sistemas que también soportan UPNP, y pueden ser vulnerables a ataques similares.

El Problema de UPnP

Permitiendo que programas legítimos modifiquen la configuración de su router, como lo necesiten, hacen al usuario Pepito la vida mucho más fácil - por desgracia, también hace que la vida de Paquito hacker sea más fácil, también. Para que UPnP sea verdaderamente "plug-n-play", no hay autenticación incorporada en el protocolo, cualquier programa puede utilizar UPnP para modificar la configuración del router (o cualquier otro dispositivo UPnP).



A principios de este año, PDP (de los famosos GNUCITIZEN) publicó la investigación que había realizado en relación con la seguridad de UPnP. Si bien los problemas de seguridad con UPnP no es nada nuevo, es un protocolo que normalmente sólo se ejecuta dentro de una red local, obligando a un atacante infiltrarse en la red local antes de poder explotar cualquier vulnerabilidad de UPnP. Sin embargo, PDP demostró que era posible utilizar Flash para enviar solicitudes UPnP desde el navegador de un cliente local a un router con UPnP habilitado y cambiar la configuración del cortafuegos del router. Dado que el archivo Flash puede ser integrado dentro de una página preparada de manera maliciosa, o inyectado en una página de confianza a través de XSS o inyección de SQL, un atacante de forma remota podría aprovechar esto para alterar la configuración de un router. Lo peor de todo es que en la mayoría de los casos, estos cambios de configuración en el router no se reflejan en su interfaz administrativa, dejando a la víctima completamente ignorante de que haya ocurrido nada.

Por supuesto, para las redes inalámbricas UPnP es peligroso incluso sin el ataque de Flash al navegador, un atacante puede estar físicamente a distancia de la red al mismo tiempo que intenta introducirse en la red interna. Una vez dentro, puede comenzar a alterar la configuración del router a través de UPnP.

¿Cómo es Esto de Grave?

La gravedad de este ataque depende de la aplicación UPnP utilizada por el router, así como de su configuración. Por ejemplo, la alteración de la configuración mediante el ataque Flash descrito anteriormente tendría que adivinar la dirección IP del router algo bastante previsible, pero algunos routers también asignan sus propios nombres de host que toman una dirección IP cualquiera de trabajo. Sin embargo, incluso si un router no resuelve el nombre de host, la seguridad a través de la oscuridad no es buena práctica, y un simple cambio de la dirección IP por defecto de un router no debe considerarse suficiente defensa contra un ataque de este tipo.

Además, unas implementaciones de UPnP tienen más riesgo que otras; varios IGDs con UPnP habilitado permiten alterar la configuración de las DNS directamente a través de UPnP, simplemente con un ataque de phishing MITM (?). Otros, en particular los dispositivos que utilizan alguna forma de Linux embebido, actualmente usan los valores "no-sanitizados" que reciben a través del UPnP como parte de la ejecución de comandos de la shell, dejándolos abiertos a los ataques de inyección de comandos. Aqui se encuentra Una lista de algunos routers vulnerables.

Bien, digamos que ningún nombre de host resuelve la IP del router, y su aplicación UPnP no es vulnerable al secuestro de DNS o la inyección de comandos. Lamentablemente, no estamos fuera de peligro aún, recuerda que el uso más común de UPnP es abrir puertos al router. Debido a esto, casi todos los enrutadores que admiten UPnP tambien soportan AddPortMapping, lo que en esencia permite que un dispositivo o software le diga al router "el tráfico entrante desde internet al puerto X del router lo envias a un host interno que está escuchando en el puerto Z". Bueno, ¿y si nos reenvía el tráfico del puerto 8080 de la WAN a yahoo.com en el puerto 80? Lo sé, lo sé, yahoo.com no es un host de la red interna! Sin embargo, algunas implementaciones de UPnP no comprueban que están remitiendo a un host interno, lo que permite a un atacante mandar su tráfico a través del router. Además, si el atacante sabe la IP interna del router o el nombre del host, puede ser capaz de conectar cualquier puerto de la WAN del router al puerto 80 del la LAN del router, de manera efectiva abriéndo la interfaz de administración del router para todo el mundo.

Hasta aqui la Primera Parte.

domingo, febrero 15, 2009

Noticias de Tecnologia, Inventos

Jaguar C-XC, coche del futuro propulsado a hidrógeno


Últimamente hemos traido un par de noticias de tecnología en vehículos, particularmente en coches y motocicletas futuristas, como hemos visto que han tenido muy buena recepción por parte de los usuarios, hemos decidido continuar con este tipo de informes.

En esta ocasión, nos encontramos con un concepto de la afamada marca de coches Jaguar, el diseñador Phillip Dean ha desarrollado este concepto del modelo Jaguar C-XC, un auto que destaca no solo por su asombroso diseño, sino también por que será ecológico. El mismo estará propulsado por hidrógeno y como vemos en la fotografía, su diseño incluye un techo de vidrio con una capa que cubre casi toda su superficie superior, aunque también incluye los vidrios laterales.



fuente:tecnomagazine.net

viernes, febrero 13, 2009

Haga usted mismo un "acto de pirateria" contra el CIS

El Gobierno habla mucho de I+D+I, pero sus propios centros de investigación demuestran una ignorancia absoluta en el funcionamiento de internet. Sólo así se explica que el CIS atribuya a un "acto de piratería informática", algo tan sencillo como cambiar un número en la dirección de una web.

(D.R. Herrera/R. Vilas) Zapatero se llena la boca con eso de la inversión en investigación, competitividad, sociedad de la información, nuevas tecnologías, etc. Sin embargo, lo cierto es que incluso los propios centros oficiales de investigación –que se supone están dirigidos por científicos de prestigio– muestran un desconocimiento asombroso de las normas más elementales con las que funciona internet. Que el CIS atribuya a un "ataque de piratería informática" la filtración de su último barómetro de opinión resulta entre ridículo y dramático.

Este jueves, la directora del Centro de Investigaciones Sociológicas, Belén Barreiro, anunció pomposamente que ha abierto una investigación para saber "cómo se ha podido filtrar" parte del último barómetro con intención de voto que tenía que hacerse público el jueves, a las 13.00 horas.

Ya la prensa del día cita fuentes del CIS que anoche no se explicaban tan misterioso hecho, y hablaban ya de sesudas pesquisas para intentar averiguarlo. Leemos en ABC: "Estupefacción en el CIS por el asalto informático a su web y la revelación en internet de unos datos secretos hasta hoy".

Cómo cometer lo que el CIS llama "un acto de piratería"

El método para obtener estos datos no es tan complicado. Lo ha explicado el propio autor de Wonkapistas. Esta es la dirección con la que se ha publicado el avance de resultado del "estudio 2782", que incluye la intención de voto:

http://www.cis.es/cis/opencms/ES/Novedades/Documentacion_2782.html

Entre los enlaces de esa página se puede acceder a los ficheros PDF con todos los datos. Ese enlace no aparecía en los menús del sitio web del CIS, pues el apartado de "Avances de resultados", que es donde aparece hoy, estaba vacío. Sin embargo, que no fuera accesible a través de esos menús no significa que no estuviera ya disponible; tan sólo que la dirección no se había hecho pública. ¿Cómo supo entonces de ella el autor del blog Wonkapistas?

Pues muy sencillo. Observen que en la dirección hay un número. El sociólogo sólo tuvo que anotar la dirección donde se publicó el avance del anterior barómetro del CIS, que era:

http://www.cis.es/cis/opencms/ES/Novedades/Documentacion_2781.html (ya no está disponible)

Luego, cuando supo que el viernes sería la rueda de prensa en la que se ofrecerían los resultados, no tuvo más que probar a cambiar el número por uno posterior y voilá, ahí estaban los datos, disponibles y abiertos a cualquiera. Cabe suponer que los funcionarios del CIS tenían la costumbre de subir los datos antes de la rueda de prensa, para que en el momento de presentar los datos bastara con un simple click para que aparecieran en el menú.

Esto, como cualquiera es capaz de entender, no requiere de grandes conocimientos informáticos, sino sólo de un poco de interés e intuición. No hace falta violar la seguridad informática de ningún ordenador ni tampoco abrir ninguna investigación, como ha anunciado el CIS. Simplemente basta con subir los resultados el mismo día en que se presentan, y no antes.

Fuentes:
http://www.libertaddigital.com/internet/haga-usted-mismo-un-ataque-de-pirateria-informatica-contra-el-cis-1276350660/
http://www.kriptopolis.org/como-jaquearon-cis
http://seguridad-de-la-informacion.blogspot.com/2009/02/por-que-lo-llaman-filtracion-cuando.html

sábado, febrero 07, 2009

Elhacker.net y HackingBallZ, Herramientas y textos


Voy a poner una lista de enlaces externos donde existen utilidades y textos sobre el tema de los hacker, la inseguridad del Internet y de los PCś conectados a toda red. Por ahora sólo he usado de referencia un par de sitios, hackingballz.com y elhacker.net de donde he recopilado las utilidades más interesantes para mi :

Todos estos enlaces los iré cambiando sobre la marcha, así que puede que varíen de un día para otro, ajustándose cada vez mejor a la función que pretendo con esta recopilación.

viernes, febrero 06, 2009

Juegos en Facebook y Hi5

¿Sabes cuáles son las aplicaciones más populares de Facebook?
Los juegos. Teniendo esto en mente, Hi5 da paso adelante al lanzar juegos para el sitio.

El aspecto más importante es el empleo de su moneda virtual de hi5 - Monedas. Los usuarios podrán gastar sus Monedas para comprar contenido premium, características avanzadas y actualizaciones de estado. Muchos editores de juegos de Facebook hacen lo mismo, pero hi5 espera que una moneda virtual unificada atraiga a más jugadores, y en última instancia haga que gasten más dinero en sus juegos.

Según afirma Ramu Yalamanchi, fundador y presidente de hi5,
“Para nuestra audiencia de 15 a 24 años, los juegos sociales representan un gran gasto de tiempo y dinero en todo el mundo. hi5 Games sólo es un rango de características inmersivas que en el futuro atraerá a nuestros usuarios, para mantenerlos en el sitio por más tiempo y llevarlos a nuevas formas de monetización para nuestra empresa”.


Hi5 también ofrece mensajes integrados, características de desafío e invitación, que funcionarán en todo el sitio. Nuevamente, esto lleva un paso adelante a los juegos sociales que en Facebook, donde cada juego individual tiene su propio sistema de invitación/desafío/comunicación. En cuanto a juegos que se ofrecen, existe la opción usual de estrategias, arcades, deportes y juegos de cartas; hi5 promete agregar más juegos todos los meses.

Fuente: http://es.mashable.com/blog/2009/02/05/cuando-los-tiempos-son-duros-los-duros-juegan/

lunes, febrero 02, 2009

Crea facilmente un "USB live" desde Windows con uSbuntu Live Creator

uSbuntu Live Creator es una herramienta para crear fácilmente dispositivos USB “live” con Ubuntu desde Windows, es decir, instalar el sistema operativo en un pendrive para poder ejecutarlo y usarlo en cualquier ordenador que permita arrancar desde USB.usbuntu


Es similar a la aplicación que ya viene incluida de serie en Intrepid Ibex, pero tiene alguna funcionalidad adicional y funciona perfectamente para crear pendrives con sesiones en vivo de Ubuntu, Kubuntu y Xubuntu.

El proceso es muy sencillo, al ejecutarlo aparecerá una curiosa interfaz gráfica con los cinco pasos a seguir para la creación de un USB en vivo:

Paso1: seleccionar el dispositivo USB donde será instalado.
Paso 2: elegir el archivo fuente del sistema operativo (el fichero .iso descargado o el CD de instalación)
Paso 3: elegir el tamaño de persistencia de los datos: eligiendo por ejemplo 100MB, se podrán utilizar esos 100MB para guardar datos y archivos de configuración incluso cuando se reinicie la sesión.
Paso 4: seleccionar algunas opciones adicionales (formatear el dispositivo, activar la ejecución de Ubuntu en Windows…)
Paso 5: realizar la instalación.

En todos los pasos hay un botón de ayuda, donde obtener una aclaración de qué es exactamente cada paso, y también un indicador en forma de semáforo que indica si ese paso está configurado correctamente.


Download desde la página de su creador aqui.

Cosas breves de Gnu/Linux

pinguinolinux
Wine 1.1.14

Este proyecto Open Source permite ejecutar aplicaciones de Windows en Linux. No es un emulador ya que los programas en Wine actúan como programas nativos. En su nueva versión corrige varios bugs, como el de Internet Exploper 7. Sólo ejecuta la aplicación con Wine y tu programa de windows seguro que te funciona con el linux, bueno a lo mejor no, pero casi seguro.

Knoppix 6.0

LiveCD basada en Debian, que incluye al entorno de escritorio LXDE (Lightweight X11 Desktop Environment), el recientemente lanzado OpenOffice 3.0.1 y la versión 3.0.5 de Firefox.

KDE 4.2

Entorno de escritorio, código “The Answer” version 4.2, incluye un refinamiento de Plasma, mayor eficiencia de KWin y nuevos efectos de escritorio. L.Torvalds se cambia a Gnome, Debian y OpenSUSE ya han empezado a ofrecer los paquetes binarios de KDE.

FSF termina con la campaña BadVista

“El hecho que Microsoft haya extendido varias veces la fecha del fin de Windows XP y el lanzamiento público de la versión Beta de Windows 7 prueban el fracaso de Windows Vista” dice John Sullivan, jefe de operaciones de la Fundación de Software Libre, con lo cual dan por terminada su campaña de BadVista.



Leido en: http://www.fayerwayer.com/