Español | English
rss facebook linkedin Twitter

Inteligencia en Seguridad

Decía Stephen Hawking en su libro de ‘Historia del Tiempo’ que, si pusiese todas las publicaciones que aparecen diariamente de su especialidad una detrás de otra, tendría que viajar a 60 Km/hora para mantenerse delante de ellas. Esta metáfora sirve para hacernos una idea de la cantidad de información que se genera diariamente en cualquier campo, pero teniendo en cuenta que el libro está escrito en 1988, creo que todos estaremos de acuerdo en que en la actualidad tendríamos que viajar notablemente más rápido que el Dr. Hawking.

El análisis de tal cantidad de información necesita de un pre-proceso de selección, eliminación de "ruido blanco", contrastar su veracidad, análisis técnico y de impacto, medidas de mitigación y aplicación en escenarios reales. Es un proceso complejo en el que intervienen multitud de componentes, desde la selección de fuentes apropiadas (muchas veces propias) hasta la creación de procesos automáticos que ayuden en la "digestión" de las mismas. Hay que sumar a las dificultades la velocidad de proceso, ya que la información caduca rápidamente y es necesario hacer llegar a todos los actores implicados la información lo antes posible. Por supuesto, el formato de entrega debe ser el adecuado para cada uno de los receptores, lo más sintético posible y orientado a su negocio, junto con las implicaciones y mitigaciones cuando lo aplicamos al entorno de la seguridad.

Sin duda se trata de una tarea nada sencilla. Los clientes de servicios de inteligencia son los primeros que exigen estar perfectamente informados de cualquier novedad que les pueda afectar, tanto a nivel técnico como en lo que atañe a sus procesos productivos. Es necesario, por tanto, generar una relación cercana con ellos para conocer qué esperan y cómo desean recibir la información. Este último es un tema muy importante, ya que enfocar el detalle de una información a un perfil distinto al receptor puede hacer que ésta sea totalmente inútil.






Sobre phishings en la nube y el robo a un ladrón

Desde Imperva nos cuentan que han descubierto un kit de phishing muy especial. A diferencia de los kits que vienen apareciendo desde hace años, este promete incluir una serie de características muy interesantes:

  • ¡No es necesario saber PHP ni HTML!
  • ¡Fácil, rápido, limpio y compacto!
  • Permite suplantar 16 importantes webs con calidad "profesional"
  • ¡La notificación de nuevas víctimas es muy rápida!
  • No necesita instalación (Portable)
  • Funciona en: Windows XP / Vista / Windows 7
  • Incluye un pequeño servidor FTP integrado
  • Proporciona una herramienta de "limpieza" (en caso de que desee eliminar rastros sobre usted o sus víctimas)
Una de las características más interesantes de este nuevo tipo de kits es la posibilidad de utilizarlos sin necesidad de instalar nada. Esto se consigue gracias a que, tanto el backend, como el código encargado de la recolección de información robada, están alojados en la nube, y en caso de cierre de la página de phishing, basta con volver a colgar dicha página en otro servidor para que todo vuelva a "funcionar".

Sin embargo, lo que es más curioso de este kit concreto, es el hecho de que, sus programadores -que colgaron el kit en foros de hacking- incluyeron una pequeña backdoor en el programa cuyo propósito no era otro que el de enviar los datos robados por las distintas "instalaciones" a su propio servidor, consiguiendo de esta forma, y con un esfuerzo mínimo, un volumen de credenciales robadas bastante superior al que hubieran conseguido si hubieran sido ellos mismos los que hubieran montado los phishings.

Por supuesto, para que no fuese demasiado "cantoso", y por qué no, quizás también como una forma de demostrar un cierto agradecimiento a sus incautos colaboradores, un pequeño porcentaje de las credenciales robadas se enviaban también a los usuarios del kit para compensarles por el duro trabajo realizado montando los phishings para beneficio de los "colegas" ;)

Con la idea de trastear un poco con el kit, me bajé una copia y, para mi sorpresa, ¡llevaba la friolera de 213.000 descargas!:


Al descomprimir el programa para la instalación nos encontrábamos con un banner publicitario en el que se comentaban las características del software:


Como no tenía un Windows a mano, hago un inciso para comentar que el programa se instala bastante bien en Linux con Wine (al menos, con la versión 1.0.1 que es la que viene en Lenny) y solamente me hizo falta descargar la librería msvbvm60.dll para poder ejecutarlo.

Con la idea de documentar un poco el proceso, durante la instalación aproveché para hacer algunas capturas de pantalla:
En la última captura, ya con el kit en ejecución, se puede apreciar una ventana en la que se pueden elegir esas 16 páginas (bastante conocidas, por cierto) que el programa permite falsificar:


Está claro que en este mundo de la ciberdelincuencia se puede aplicar perfectamente aquello de que "el que no corre, vuela" y, por supuesto, hay que andarse con mucho ojo si uno no quiere que "se la den con queso" ;)

Fernando Braquehais
S21sec e-crime





XPath Injection

Antes de ver una inyección de XPath, veamos que es el lenguaje XPath:

"XPath (XML Path Language) es un lenguaje que permite construir expresiones que recorren y procesan un documento XML. La idea es parecida a las expresiones regulares para seleccionar partes de un texto sin atributos (plain text). XPath permite buscar y seleccionar teniendo en cuenta la estructura jerárquica del XML. XPath fue creado para su uso en el estándar XSLT, en el que se usa para seleccionar y examinar la estructura del documento de entrada de la transformación".

Una de las virtudes de XPath, es que puede seleccionar información dentro de un documento XML, haciendo referencia a cualquier tipo de dato, mostrando el resultado en una representación en forma de "árbol de nodos". Dentro de cada árbol, existen diferentes tipos de nodos:

- Raíz.
- Elemento.
- Atributo.
- Texto.
- Comentarios.
- Instrucción de procesamiento.

Otro de los puntos fuertes son sus expresiones (instrucciones del lenguaje), en las que se incluyen operaciones, como por ejemplo los "location path": /usuario/contraseña. Esta operación hace referencia a todos los elementos contraseña que descienden de cualquier elemento usuario que a su vez, desciende el nodo raíz.

Operaciones a destacar:

- /usuario/dir[@private="si"] -> selecciona los elementos cuyo predicado private sea un "si".
- //usuario/nombre -> selecciona todos los nombre de los usuarios.
- //usuario/node() -> selecciona todos los nodos descendientes de usuario de cualquier tipo: text(), comment(), processinginstruction().

Funciones a destacar:

- count(): count(//usuario/child::node()) -> el resultado será el número de nodos de todos los usuarios.
- stringlength(string): stringlength(//usuario[position()=1]/child::node()[position()=1]) -> devolverá el tamaño del primer string del primer nodo del primer usuario.

- substring(string, num, num):substring((//usuario[position()=1]/child::node()[position()=1),1,1) -> devolverá la primera letra del primer nodo del primer usuario.

Una vez tenida una cierta idea de cómo funciona XPath, vamos a ver un ejemplo práctico para poder realizar la inyección XPath:

Estamos ante una aplicación común, en la que se nos pide el usuario y la contraseña para poder acceder a una zona privada. Como es habitual, tenemos dos entradas de texto, en la cuales estarán permitidas cadenas alfanuméricas y quizás algún carácter especial. Probamos a meter únicamente en el usuario una comilla simple ', y esperamos la respuesta de la aplicación. Con un poco de suerte, recibiremos un error de este estilo:

System.Xml.XPath.XPathException:
Error during parse of
string(//usuario[nombre/text()=''' and contraseña/text()='']/cuenta/text())

Bien, el error nos muestra información importante, ya que aparece la petición realizada y podemos deducir la estructura del xml al que hace referencia, que sería algo así:

<usuario>
<nombre></nombre>
<contraseña></contraseña>
<cuenta></cuenta>
</usuario>

Una vez conocida la estructura y como se realizan las peticiones, empezaremos a inyectar código. Probaremos a meter en el campo de usuario la siguiente instrucción ' or 1=1 or ''='. La petición realizada, quedaría de la siguiente manera "string(//usuario[nombre/text()='' or 1=1 or ''='' and contraseña/text()='']/cuenta/text())". Si todo sale bien, la consulta nos debería de devolver el primer usuario de la lista del xml, dándonos acceso a la aplicación.

Pero, ¿qué pasaría si el aplicativo no devuelve nada después de realizar peticiones en busca de usuarios, contraseñas, etc., si como hemos podido observar, el campo usuario parece ser vulnerable?, ¿significa eso que la aplicación no es vulnerable? Puede que sea así, pero también podríamos estar delante de un posible Blind XPath Injection.

En este caso, para saber si la consulta que realizamos nos devuelve algo, nos fijaremos si las respuesta recibida es verdadera o falsa. Imaginemos que tenemos un usuario y contraseña y necesitamos saber qué tipo de privilegio tiene, si es cuenta de administrador, usuario normal o invitado. Basándonos en la estructura obtenida anteriormente, la petición a realizar sería la siguiente:

' or substring((//usuario[position()=1]/child::node()[position()=3]),1,1)="a" or ''='

Lo que estamos pidiendo en la petición es que, queremos saber si la primera letra del tipo de cuenta del primer usuario es "a". Si la respuesta es verdadera, la aplicación nos devolverá una respuesta positiva, en este caso acceso al aplicativo. Si fuera una respuesta falsa, se recargaría la página del login de nuevo.

Como se puede observar, este tipo de inyección es muy parecida a la inyección SQL, pero como pasa con todo lo parecido, siempre hay algo distinto.

Néstor López del Moral, Dept. Auditoría S21sec






Nuevo incidente SCADA

El pasado domingo día 13 de junio, se produjo un nuevo incidente en materia de SCADA. Un fallo en uno de los equipos que integran el sistema SCADA de la planta de tratamiento de agua de la ciudad de Chelan (WA, USA) ha dejado a sus ciudadanos sin agua corriente durante varias horas.

El fallo en el equipo ha propiciado que el sistema principal de agua careciera de presión suficiente para el bombeo del líquido elemento. Unas horas más tarde el servicio ha sido restablecido por completo gracias al sistema de backups.

El incidente no ha sido grave gracias a la rápida actuación de los operarios de la planta restaurando el equipo que originó el problema, unido a que el incidente se produjo de madrugada y a que el hospital de la ciudad contaba con medidas preventivas para casos de emergencia, por lo que se ha puesto en funcionamiento el tanque de reserva, que ha sido suficiente para abastecer al hospital durante el tiempo que ha durado el corte.
Aunque el incidente no ha pasado a mayores, se ha hecho patente la importancia de la seguridad en infraestructuras críticas, puesto que el fallo de un simple equipo ha afectado durante horas la calidad de vida de todos los ciudadanos de esta población en cuestión.

También hay que recalcar la importancia de que cada organización responsable de sistemas SCADA cuente con procedimientos de seguridad, puesto que si en este caso no se hubiera contado con un plan de contingencia, el restablecimiento del servicio hubiera sido más lento y tedioso además de haber causado mucho más daño.

Enlace a la noticia publicada por el periódico local : http://www.lakechelanmirror.com/main.asp?SubSectionID=5&ArticleID=2670&SectionID=5

Daniel Herreras Rodríguez
S21sec labs






(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2012 - Todos los derechos reservados


login