Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta Oracle. Mostrar todas las entradas

miércoles, mayo 22, 2024

El amo de los datos

Ayer tuve una jornada interesante de transformación digital en Londres. Hablando de datos, ML, GenAI, arquitecturas RAG, y normalización de datos. Cosas habituales hoy en día en cualquier empresa. En uno de esos momentos en los que estaba escuchando, sobre casos de uso que que se iban a crear usando ML, el debate acabó una vez en los datos. El Catálogo, el Data-Fabric, el Data WharehouseData Curation, la validación de la ingesta, los Data Streams, etcétera. Cosas habituales en la vida de la digitalización de empresas.

Figura 1: El amo de los datos

Para mí, eso fue el día a día cuando en al año 2016 tuve la responsabilidad de ser el Chief Data Officer de Telefónica y tuve que tomar muchas, muchas, muchas decisiones sobre estos temas que, a día de hoy que soy el Chief Digital Officer, siguen perdurando en nuestro trabajo diario. 

Estando en ese debate, mi cabeza viajo temporalmente a mis inicios con los datos. Cuando bajaba la calle Barcelona de Móstoles, pasaba por delante del Eco Móstoles, y me metía en un pequeño parque a medio terminar que se encontraba y se encuentra a espaldas de calle Libertad de Móstoles. Allí estaba uno de los locales de la Academia RUS de la que os he hablado muchas veces. Tendría yo 14 o 15 años e iba a mi clase de Informática diaria. A seguir aprendiendo a programar.

En aquellos años ya había dejado el BASIC y el Logo atrás, y estaba con con COBOL, SQL y MS/DOS. También tocaría aprender DBASE, C y Pascal, pero antes de ellos, mi paso era hacer códigos con la IDENTIFICATION DIVISION y la PROCEDURE DIVISON. Había que aprender a identar el código, usar muchas mayúsculas, y ser muy disciplinado en la forma de hacer programas con este lenguaje llamado COBOL.

Las clases a las que asistía de informática se multiplicaban en mi agenda, normalmente hacía tres cursos a la semana diferente, haciendo clases los lunes y miércoles, y los martes y jueves, y repitiendo algunas de 17:30 a 18:30 y de 18:30 a 19:30, y luego había algunos cursos que se daban los viernes y sábados. De los 12 a los 16 años fueron años en los que mi afición era programar, así que no me importaba pasarme dos horas cada día en la academia, e incluso quedarme los viernes y sábado. ¿Qué podría haber más divertido que eso? Además, de vez en cuando daba yo la clase, y me llevaba de maravilla con Bea, mi profesora muchos de esos años.

Nada de lo que aprendí en aquellos años fue en vano. Todo ese aprendizaje sigue en mí, cambiado, adaptado, y mejorado, pero como base sobre la que construí mucho de mi conocimiento futuro. Y ayer me acordé de la época de COBOL y el acceso a Datos para hacer cosas. En aquellos momentos, cuando pasé de BASIC a COBOL, entré en el mundo de las reglas de estilo y la programación estructurada con técnicas de diseño de software muy metódicas. Formas de hacer las cosas de manera industrial. El trabajo de programador como factoría de software. Dados unos requisitos, escribir código como si fueras una máquina tú.

Los programas de gestión, hechos con COBOL y datos almacenados en bases de datos o ficheros tenían siempre las mismas estructuras. Y todos mis primeros Menús eran siempre ALTAS, BAJAS, MODIFICACIONES y CONSULTAS. Tendía que definir las fuentes de datos, los tipos de datos que iba a utilizar, si eran ficheros, los accesos que serían Secuenciales (si eran en cinta), acceso aleatorio (si eran en cintas modernas con aceleración de rebobinado y avanzado) o de acceso directo (si el almacenamiento era en disco). O los tipos de datos que se iban a leer de las bases de datos, en forma de registros que había que procesar,  pintar por pantalla en listados, etcétera.

La programación era una ingeniería. Las cosas tenía una forma de hacerse. Había metodologías de desarrollo de software. Hablábamos de los modelos de solucionar cada uno de los problemas. Y teníamos guías de estilo de programación, nombres de variables, llamadas a procedimientos, factorización del software, etcétera, para hacerlo mantenible, aduitable, y permitir que cualquier código fuera tocado por cualquier programador de COBOL. Me encantaba saber que era una pieza de parte de una industria de desarrollo de software. Podría ser programador o mi sueño entonces, ser "Analista", para poder asignar las tareas a los programadores siguiendo las guías de desarrollo del software de una empresa. 

Podéis imaginaros lo que un niño de 14 o 15 años sentía cuando se veía ahí. Siento un analista de software. Metiendo líneas de código y jugando con los decimales como Richard Prior en Superman III, desde tu terminal. Identando tu código. Flipante.

Y os cuento todo esto, porque de aquella época también aprendi parte de la gestión de los datos que décadas después usé como Chief Data Officer en Telefónica. Y es que, allí, en aquellos años, me explicaron cómo la Banca creaba sus aplicaciones para preservar sus datos. Cómo los informáticos habían creado para COBOL una metodología de trabajo con datos basada en mantener el core más sagrado de la empresa, LOS DATOS, a salvo de malos programadores. Metiendo una capa de seguridad, metiendo una capa de protección. 

Y yo escuchaba atento. ¿Cuál sería el truco? ¿Cómo lo han hecho? ¿Cuál es el secreto?

No había mucha magia. O sí. Según se mire. 

Lo habían hecho otros informáticos que llegaron a interesarme tanto o más que los Analistas, se trataba de tipos más duros aún. Que tenían más poder porque protegían el activo más valioso de las empresas. De la poderosa industria bancaria. Los datos, que al final de día era dinero. Se trataba de los Administradores de Bases de Datos.

¡¡Buaahhh!

¡Qué pasada!

Resulta que había unos tipos que para que los Analista de Programación pudieran diseñar sus programas de ALTAS, BAJAS, MODIFICACIONES y CONSULTAS, con sus infinitos listados por pantalla y por impresora (no conté yo espacios ni nada para cuadrar listados en papel continuo de impresoras matriciales), estos Analistas tenían que hablar con los Administradores de Bases de Datos para que les disponibilizaran los datos que necesitaban utilizar para sus programas. Y ellos decidían cómo lo hacían.

Esto, tenía su ciencia. Porque no iban a dejar que cualquier Programador tocara cualquier dato, así que se dedicaban a crear VISTAS, VISTAS para Actualización de datos, y Tablas de solo lectura que disponibilizaban a los Analistas para que hicieran su aplicación de ABMyC sobre estas fuentes de datos. Los Analistas repartían las tareas a los Programadores, y la Factoría de Software de la empresa seguía produciendo sistemas de información para la empresa.

Si habéis leído esto, sabréis porque cuando llegué a la Universidad me centré en aprender todas las asignaturas de Bases de Datos. A aprender a hacer el diseño lógico y el diseño físico de las bases de datos. A aprender cómo funcionaban los Tablespaces, las p-codes de las consultas de bases de datos, a descubrir los detalles de las formas normales de Boyce-Codd, a aprender PL/SQL, T-SQL, hacer optimización de bases de datos y aplicaciones, etcétera. El resto, ya os lo sabéis, trabajé mucho con las bases de datos Oracle cuando salí de la Universidad, luego llegó el SQL Injection... y el resto es historia moderna, desarrollando mi perfil profesional en datos y hacking.

Pero ayer volví a ello una vez más, porque el debate nos llevaba a cómo preservar los datos y disponibilizarlos a los modelos. Hoy hablamos de Data Streams, de Gestores de Consentimientos para acceso a datos, de políticas y procedimientos de anonimización y pseudoanonimización, de consultas con algoritmos de cifrado homomórfico, de roles de seguridad, de las plantillas de cumplimiento regulativo, etcétera. 

Entonces, el Administrador de la Base de Datos era el "amo de los datos" y de todo eso. Y yo lo aprendí en una academia de barrio de Móstoles. Leyendo libros y deseando un día poder ser parte de esa Industria y la Ingeniería del Software. Flipante.  

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, julio 28, 2022

La década de Yahoo! en el trono de la Web

El otro día vi un vídeo de esos que hacen estadísticas sobre todo, aprovechando los datos de webs como Statista, y me sorprendió ver lo que mostraba. Se trataba de ver el TOP 10 de webs con más tráfico desde el nacimiento de Internet hasta hoy en día. Los datos se muestran mes a mes y pensé que no me iba a sorprender lo que viera, pero.. sí, sí que me sorprendió.

Figura 1: La década de Yahoo! en el trono de la Web

Saber que Yahoo! había sido el WebSite con más tráfico no era algo nuevo para mí. Estuve invitado a la Yahoo! Security Week allá por el año 2009 y pude conocer de primera mano mucha de la grandeza de esa compañía. Según los datos, alcanzó el número 1 de los WebSites más visitados en el año 2.000. En Junio del año 2.000. Cuando yo cumplía 25 años. 

Está claro que Yahoo! es la ganadora de la llamada época de las ".COM", donde los portales horizontales y verticales comenzaban a inundar la red. Portales de contenido. Contenido creciendo de manera exponencial. Y como consecuencia, los buscadores, para que los usuarios llegaran de la forma más rápida a la información más precisa.

Figura 2: Top 10 de Junio de 2002

De aquella época de las .COM, con las arquitecturas de aplicaciones de tres capas, que venían con sus servidores de base de datos Oracle, sus servidores de aplicaciones en entornos como BEA WebLogic con frontales HTTP/S, y sus servidores SUN Microsystems. Una época donde las empresas ganadoras parecían auténticos monstruos que iban a ser los reyes durante mucho tiempo.

Lo cierto es que en aquella época, los datos de tráfico web son bastantes "pequeños" comparados con los que tenemos hoy en día. En aquellos momentos aún no había llegado la movilidad, no habían llegado las apps, y las nuevas formas de utilizar Internet. Lejos estaba la Web 2.0 aún. Estábamos en ".COM", a los pocos años de haber nacido la World Wide Web.

En el año 2006, justo en los albores de la Web 2.0 y la llegada masiva de la movilidad, de iPhone, el 3G, y las redes sociales con clientes móviles, Google consiguió adelantar un mes en tráfico a Yahoo!, pero volvió a ponerse por delante, y en Junio de 2006, Yahoo! estaba otra vez en al cabeza. Ya no hablábamos de .COM. Ya Sun Microsystems no era tampoco la empresa que había sido antes. Y tampoco la forma de hacer aplicaciones. 

Figura 3: Top Ten en Mayo de 2006

Ya no hablábamos de arquitecturas en tres capas, sino de BigData, de High Perfomance Computing, y los albores del Cloud Computing. Acababa de nacer apenas unos meses atrás AWS, proponiendo una nueva forma de hacer aplicaciones escalables, además de ver que el interfaz web iba a dar cada vez más paso al Internet móvil. Pero Yahoo! aguantó en la web.

Figura 4: Top Ten en Junio de 2010

Y aguantó hasta el año 2010Junio de 2010 y Yahoo!, ya con números de 11.5 B de usuarios por mes, seguía aguantando a Google en la cabeza de lista. Ya estaba, como podéis ver, FacebookAmazonYoutube y Google, apretando los números.  Y desde ahí, Yahoo! ha ido perdiendo tráfico. 

En Enero de 2022, el Top 5 lo forman Google, Youtube, Facebook, Twitter e Instagram. Y Yahoo! aguanta con 3.5B , mucho menos de lo que llegó a ser, peleando por no ser adelantado por XVideos, y sobre todo teniendo en cuenta que Google va por 90B de usuarios mes. Un crecimiento brutal.

Figura 5: Top Ten en Enero de 2022

Sin embargo, el mundo ya no es "Web", ya hay mucho mundo móvil, donde otras plataformas como TikTok tienen mucho que decir en el mundo móvil, o con mundos virtuales que cierran el tráfico en sus apps, o con los nuevos mundos virtuales descentralizados que comienzan poco a poco a crecer. Hay que tomarse esta gráfica como lo que es, una simple visión puntual reflejo de un cambio, que no es todo lo que ha pasado en estos años, pero sí que es reflejo del cambio continuo y agresivo de esta era digital en la que vivimos, donde las revoluciones duran... unos años.

Al final, este artículo solo es un recordatorio para ver que cuando llegan los cambios tecnológicos, luchar con el éxito es un problema para todas las empresas. Los ganadores de la Web, de las .COM, o de la Web2.0 no tienen porque ser los ganadores en esta nueva evolución. Ya veremos.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


jueves, febrero 17, 2022

Apúntate al OpenExpo Business Live: Cloud Day 2022 para el próximo 24 de Febrero

El próximo 24 de Febrero, los compañeros de OpenExpo Europe han organizado la jornada OpenExpo Business Live: Cloud Day 2022 que es 100% gratuita y online (solo debes registrarte aquí) con conferencias y mesas de debate para tratar temas de gran interés, como el uso de la Cloud en la Administración Pública, el uso de Cloud para Startups, Entrepeneurs & Developers, el uso de soluciones PaaS vs. IaaS, o el funcionamiento de bases de datos como MySQL en la nube.

Figura 1:  Apúntate al OpenExpo Business Live: Cloud Day 2022
para el próximo 24 de Febrero

La jornada es 100% gratuita y online, y esta formada por tres ponencias y dos mesas de debate. que os paso a contar a continuación en detalle, pero tienes aquí la agenda con horarios completa, que también puedes ver en la web del evento.  La primera sesión será una ponencia a las 16:05 a cargo de Nacho Fernández, que es Business Development Manager para SMB Partners & Products en Arsys y que hablará de "Cloud Services: el camino hacia la Nube".
La primera mesa de debate cuenta con la presencia de ponentes de la talla de María Álvarez, Responsable de Políticas Públicas y Relaciones Gubernamentales de Google, Gema T. Pérez Ramón, Directora de la Agencia Tributaria de Madrid del Ayuntamiento de Madrid, Jorge Bermúdez, Fiscal experto en ciberseguridad de la Fiscalía General del Estado y Sofía Fernández Vázquez, Jefa de Gabinete del Área Delegada de Innovación y Emprendimiento del Ayuntamiento de Madrid, para la primera mesa de debate.


Después tendremos a Matias Sosa, que es Cloud Specialist & Product Marketing Manager en OVHCloud, que dará una ponencia donde hablará de "¿Por qué adoptar soluciones PaaS en Cloud?" Algo que suele significar procesos de re-ingeniería de aplicaciones, productos y servicios pero que tiene sus ventajas, ya que se aprovecha de las principales capacidades de la tecnología de Cloud Computing.


Posteriormente contaremos con una mesa de debate de Cloud Native Developed Business Apps en la que contaremos con Ignacio Melero, que es Azure Developer Technical Lead en Microsoft, Daniel Suarez, que es el CEO de Zapiens.ai, Estela Gil Berlinches, consultora especialista en eCommerce, Marketing Digital y SaaS, y Gabriel Cuesta Arza, que es el CIO/CTO en Mobius Group.

Figura 5: Mesa de debate "Cloud Native Developed Business Apps"

Y para completar la jornada, tendremos una sesión de Vittorio Cioe, que es Principal Solutions Engineer de MySQL Oracle, que hablará de "Cómo crear soluciones preparadas para el futuro con MySQL Database Service y HeatWave". 
Además, el evento estará presentado por Beatriz Cerrolaza, CEO de Alise Devices y MyPublicInbox, junto con Andrea Andrade, Marketing Communication Manager en OpenExpo Europe. Por último, recordarte que para poder asistir, solo debes reservar tu plaza registrándote en el OpenExpo Business Live Cloud Day 2022, y si quieres comunicarte con los ponentes, puedes hacerlo a través de MyPublicInbox, que están accesibles en https://mypublicinbox.com/publicprofiles/CloudDay2022


¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


viernes, agosto 25, 2017

Y de tu SAP a conocer tu motor de Bases de Datos

Llegar al Sistema Gestor de Bases de Datos (SGBD) en cualquier proceso de Ethical Hacking es fundamental. Ahí están los datos y suele ser la pieza más preciada. Si un atacante consigue llegar y acceder con privilegios se verían afectados los pilares de la seguridad: La confidencialidad, la Disponibilidad y la Integridad. En otro día vimos en un artículo cómo es posible descubrir la infraestructura SAP de una organización, y hoy vamos a ver cómo continuar para descubrir dónde está el SGBD que utiliza el sistema SAP de una empresa gracias a un componente fundamental en los entornos SAP: el ICM (Internet Communication Manager), responsable de la comunicación del sistema SAP con Internet mediante los protocolos HTTP, HTTPS y SMTP.

Figura 1: Y de tu SAP a conocer tu motor de Bases de Datos

Todos los sistemas SAP utilizan un Sistema Gestor de Base de Datos Relacional (SGBDR) donde mantienen centralizada la casi totalidad de la información manejada por este software de gestión (información de clientes, pedidos, proveedores, etcétera). Dada la naturaleza de esta información, lo lógico es que este SGBD se encuentre en la red interna de la empresa y sólo desde allí se admitan las peticiones a las bases de datos.

Figura 2: Arquitectura del sistema que recibe las peticiones desde Internet

En este artículo se veremos cómo, aprovechándonos de una mala configuración en el ICM del sistema SAP, en ocasiones, es posible conocer el tipo de SGBD es utilizado por el sistema, parte del direccionamiento interno de la empresa donde se encuentra el SGBD, así como el sistema operativo que corre en el host del servidor de bases de datos.

Módulo sap_icf_public_info

Para descubrir el SGBD del sistema SAP de una empresa, puede usarse el módulo sap_icf_public_info de Metasploit disponible en el GitHub de la empresa Rapid7.

Figura 3: Información del módulo sap_icf_public_info en Metasploit desde Kali Linux

Lo que hace este módulo es aprovechar parte de la configuración por defecto del componente ICM, para que éste pueda reenviar peticiones HTTP/S a un recurso XML que guarda la información sobre el SGBD usado en el sistema SAP, versión del sistema operativo del host sobre el que corre el servidor de base de datos, direccionamiento IP interno, etcétera.

La configuración del módulo es muy es sencilla, ya que la mayoría de las veces basta con indicar el en parámetro RHOSTS la dirección pública del sistema SAP expuesto en Internet (set RHOST 200.x.x.x). Por defecto, el módulo realizará peticiones HTTP al puerto 8000/TCP del sistema SAP.

Figura 4: Configuración del módulo sap_icf_pulic_info 

Descubriendo los Sistemas Gestores de Bases de Datos

Tras lanzar el módulo, observamos que devuelve información sobre un SGBD, en este caso Oracle, el nombre del servidor de base de datos, sappbobd, el nombre del host sobre el que corre, sapboci, así como la dirección IPv4 interna que tiene asignada, 192.168.241.40. Además, el sistema operativo es un SunOS.

Figura 5: Información de un SGBD Oracle y el host en el que corre

En este otro caso, tenemos que el SGBD es MSSQL de Microsoft, el nombre interno del servidor de base de datos es SVRPROERP\PRD, el nombre del host es SRVPROER y el sistema operativo es un Windows NT.

Figura 6: Información de un SGBD MS SQL Server del Host en que corre

En este otro ejemplo, tenemos que el SGBD es un DB/400 de IBM, el nombre del host y del SGBD coinciden, sapprod, el sistema operativo sobre el que corre el SGBD es OS/400 de IBM.

Figura 7: Información de un SGBD DB/400 de IBM y el host en que corre

Análisis del tráfico de red generado por el módulo

Siempre que se lanza un módulo en Metasploit es interesante capturar y analizar el tráfico de red que genera, ya que puede proporcionarnos más información que la meramente devuelta por el módulo. Descubrimos que el módulo sap_icf_public_info realiza una petición por GET vía HTTP de un recurso XML cuya URI es /sap/public/info.

Figura 8: Flujo TCP de la petición realizada al sistema SAP

Dado que es una petición bajo el protocolo HTTP, conociendo la URI (/sap/public/info), la dirección IP del sistema SAP y el puerto TCP que recibe la petición, es posible construir la URL completa y acceder al recurso XML directamente desde un navegador web.

Figura 9: Resultado de la petición generada desde un navegador web

Conclusiones

Para evitar este tipo de fugas de información del sistema SAP y evitar que sea indexada por los principales motores de búsqueda, bastaría impedir que el componente ICM realice la petición del recurso XML directamente desde Internet mediante el protocolo HTTP, permitiendo las peticiones únicamente desde la dirección 127.0.0.1 de localhost o indicando qué hosts son aquellos que sí tienen permiso para consultar la información del recurso XML.

Figura 10: Zona de la configuración de los hosts con acceso al recurso XML

Autor: Amador Aparicio de la Fuente (@amadapa)
Escritor del libro "Hacking Web Technologies"

martes, marzo 29, 2016

SIDU: Un Database Web GUI para escanear servidores

Este domingo por la noche no conseguía dormirme con la vuelta al trabajo por lo que aproveché para revisar algunas cosas en Internet. Esta vez le tocó el turno a los ataques a cadenas de conexión de bases de datos, así que, como ya hiciera tiempo atrás con Chive, con SQL Web Data Administrator, MyLittleAdmin, MyLittleBackup, ASP.NET Enterprise Manager o las aplicaciones Citrix, busqué algún nuevo panel de control de bases de datos por medio de un interfaz web, y di con SIDU, una herramienta que permite gestionar motores de bases de datos MySQL, Postgres, SQLite y CUBRID.

Figura 1: SIDU - Un DB Web GUIO con bugs de XSPA

Encontrar la herramienta publicada en Internet no es difícil. Hay muchas organizaciones que tienen este tipo de aplicaciones en sus sitios web, para poder administrar sus bases de datos, y ésta, en concreto, viene con muchas posibilidades.

Figura 2: Lista de bases de datos a las que se puede conectar para lanzar comandos SQL

Como se puede ver, permite hasta Microsoft SQL Server, por lo que podría ser una víctima propicia para los ataques de Connection String Parameter Polution, pero lo cierto es que necesita un driver especial en los entornos en los que mirado. Pero sí que se pueden hacer otras cosas, como vamos a ver.

Remote XSPA (Cross-Site Port Attacks)

Estas herramientas son propensas a la vulnerabilidad de XSPA (Cross-Site Port Attacks). Al final, una cadena de conexión a una base de datos permite introducir una dirección IP o nombre de dominio de un servidor de bases de datos y un puerto, por lo que si los mensajes de error no han sido controlados, alguien podría manipular estos servicios para valores para escanear servidores. Por supuesto, esta escaneo se puede hacer a tres niveles distintos:
1.- Escanear puertos del propio servidor de bases de datos: Bastaría con manipular el valor del puerto con respecto a localhost. 
2.- Escanear puertos de cualquier servidor de Internet: Esto se podría realizar si el firewall de la infraestructura de red donde está montado el servidor web que hospeda a SIDU no controlar las conexiones de salida. 
3.- Escanear la DMZ: Esto se podría hacer si se averigua la dirección IP local del servidor en el que está hospedado SIDU.
En la última versión, en la 5.3 de SIDU, la vulnerabilidad de XSPA está presente, y basta con hacer unas sencillas pruebas para comprobarlo. En este caso vamos a ver como un puerto está abierto o cerrado según los mensajes de error. Para ello he elegido la web de un diario.

Figura 3: El puerto está cerrado

Cuando el puerto está abierto, tal y como se puede ver arriba, el mensaje de error que se obtiene es un Connection Time-Out, esto es así porque la conexión TCP nunca se abre.

Figura 4: El puerto está abierto

Por el contrario, cuando el puerto está cerrado, el mensaje que se obtiene es completamente distinto. En este caso un "MySQL Gonne Away", porque el puerto TCP se abre pero está esperando el desafío de login de MySQL que nunca llega.

Figura 5: El puerto está abierto y es un MySQL

Si el puerto estuviera abierto, y además hubiera un servidor MySQL en él, se obtendría aún un tercer mensaje de error, informando de que el usuario y la contraseña son incorrectos, con lo que tendríamos el bug de XSPA completo.

SIDU PHP Info: Local IP disclosure

Para poder hacer lo mismo en el servidor local, bastaría con cambiar el puerto con localhost, pero si lo que deseamos es hacerlo con la DMZ, entonces hay que averiguar cuál es la dirección IP de la red local con que se ha configurado el servidor web que hospeda a SIDU. Esto, gracias al propio SIDU es una tarea bastante sencilla.

Figura 6: Conexión a una base de datos SQLlite que no existe

Una de las cosas que trae SIDU, es una conexión para lanzar consultas a bases de datos SQLite que no necesita usuario ni contraseñas. Cuando seleccionas esa opción, no se valida si la base de datos existe o no, así que puedes poner lo que quieras en ella y llegar al panel interno creado para lanzar consultas SQL.

Figura 7: En el menú interno hay acceso a un PHP Info

Lo mejor de todo es que, entre las opciones que han puesto en el menú se encuentra la de lanzar un PHP Info, tal y como se ve en la pantalla.

Figura 8: Acceso a la dirección IP local del servidor que hospeda SIDU

Y por supuesto, con esto llegaríamos a la dirección IP local del servidor web en el que se encuentra hospedado SIDU. Algo bastante sencillo de hacer para cualquier visitante. 

DMZ XSPA (Cross-Site Port Attacks)

Una vez que se tiene la dirección IP local del servidor web, se puede comenzar a escanear el segmento completo, haciendo un barrido a toda la red - en este caso de tipo C - para localizar todos los servidores que allí se encuentran.

Figura 9: Escaneo por puertos de MySQL del segmento de red

Como habría que escanear todos los puertos de todos los servidores, lo suyo sería buscar los well-known más comunes, como el 80 de los servidores web, o el propio puerto de los servidores MySQL de la red.


Figura 10: Connection String Attacks @ DefCON 18

Este tipo de herramientas de administración de bases de datos, donde delegan toda la seguridad en el establecimiento de conexiones, tienen habitualmente los mismos problemas. Os dejo arriba la charla de Connection String Attacks que dimos en DefCON por si te apetece repasar los fallos más habituales, así como los ataques que se pueden hacer.

Saludos Malignos!

jueves, noviembre 20, 2014

Fugas de información en las webs de Server Testing

Este que va es el último artículo de una serie que comenzó buscando los Huevos de Pascua de PHP. Como ya os conté, buscando servidores en los que probar me topé con el fichero check.php de Symfony que mostraba datos jugosos sobre la instalación del servidor. Algo similar a un info.php que tanto ayuda cuando se encuentra en una auditoría. Buscando archivos check.php en los robots.txt llegué por pura casualidad a magento-check.php, que también daba cierta información de la infraestructura que estaba detrás cuando se había montado un servidor e-commerce con Magento. En ese punto se me ocurrió buscar otras formas de comprobación de infraestructura estaría usando la gente en sus aplicaciones web para ver qué salía. Y salió mucho y variado.

Figura 1: Riesgos de seguridad. Un leak de serverstatus.php lleva a todos los PHP Info

Lo que hice fue empezar a jugar con combinaciones de palabras habituales con los que alguien podría llamar a este tipo de ficheros para comprar los servicios. Cosas como test, info, server, status y similares. Después, buscar estas cadenas en los robots.txt y simplemente esperar a ver qué salía. El resultado fue una pléyade de ficheros info.php cambiados de nombre, comprobaciones hechas a mano con información del back-end y algunas mucho más elaboradas. 

Figura 2: Un info.php guardado como testserver.php

En la parte de comprobaciones manuales os dejo estos cuatro ficheros en los que se puede ver la dirección IP y cómo comprueba su estado, la conexión a un servidor interno SQL Server con su nombre NetBIOS de conexión y una con el resumen de todo el software instalado.

Figura 3: Un /serverstatus/ que revela la dirección IP

Figura 4: Un servertest.php que revela rutas de software.

Figura 5: Un /ServerTest/ que revela un servidor SQL interno en la red

Figura 6: Un cheks.php que informa del software de la instalación.

En otros servidores, lo que ha aparecido han sido páginas mucho más elaboradas, parece que por algún tipo de aplicación concreta, y con aún más información todavía sobre versiones de bases de datos, direccionamiento IP, versiones del framework PHP, etcétera.

Figura 7: Un /serverInfo con detalles de la instalación.

Figura 8: En este caso /server-test/ revela el software interno y hasta la instancia de Oracle

Figura 9: Un fichero /server-test.php revela software y versión del framework PHP

Por último, os dejo otro grupo donde gracias a uno de estos test se puede conocer la infraestructura de toda la red interna, además de descubrir herramientas de monitorización personales que pueden utilizarse para escanear cualquier parte de sus sistemas, ya que admiten manipulación de paramétros de entrada con el nombre del servidor.

Figura 10: Un test.html que llama dinámicamente a cada servidor para saber si está vivo.

Al final, sea mediante programas que generen los frameworks, o mediante aplicaciones manuales hechas a medida para comprobar tu infraestructura, si no proteges el acceso a estos ficheros en tus servidores web, entonces estarás teniendo fugas de información que podrán ser utilizadas por cualquier atacante para construir un ataque a medida contra tu empresa. Viendo esto, en nuestro sistema de Pentesting Persistente Faast, en la parte de fuzzing de webs hemos metido la lista de combinaciones completas de nombres de estas aplicaciones de testing de infraestructura para descubrir estas fugas de información lo antes posible.

Saludos Malignos!

miércoles, junio 25, 2014

SQL Injection: Aplicar Mínima Superficie de Exposición en las Cadenas de Conexión a BBDD

Cuando me toca explicar la fortificación de aplicaciones web hay que hablar obligatoriamente del impacto que tienen los bus de SQL Injection y de cómo poder limitarlos aplicando las reglas de Mínimo Punto de Exposición y Minima Superficie de Exposición. Una de las areas donde se puede tener un buen resultado, es en la utilización del propio sistema de seguridad del motor de bases de datos que se esté utilizando, aprovechando un esquema múltiple de conexiones a bases de datos y permisos restringidos a cada uno de ellas. 

Bases de datos sin compartición de usuarios

Cuando se va a conectar una aplicación web a una base de datos, es necesario contar con al menos un usuario de la base de datos que tenga permisos en el SGBD. Con ese usuario, al menos, se hará la cadena de conexión para gestionar los datos que se almacenen en la base de datos que que allí se cree. Uno de los errores más comunes que se encuentran es que ese usuario al final se puede usar en varias bases de datos creadas dentro del mismo SGBD - algo muy común en entornos Microsoft SQL Server - o que tenga acceso a esquemas creados para otras aplicaciones - algo muy común en entornos Oracle Dabatabase -.

Figura 1: Mala gestión de conexiones a bases de datos en un SGBD

Esto lleva a que al final, si alguien es capaz de localizar un bug de SQL Injection en una aplicación web conectada a una base de datos, con el mismo usuario que la aplicación usa para conectarse a esa base de datos es capaz de conectarse a otras bases de datos y sacar datos de ella.

Figura 2: Bases de datos con usuarios aislados

Para evitar eso, cada base de datos de aplicación debe poder ser accedida única y exclusivamente por el/los usuarios que vayan a ser utilizados en la conexión de esa aplicación. Si alguien intenta acceder a esa base de datos desde otra cadena de conexión, deberá recibir un mensaje de error.

Figura 3: Error de conexión al intentar cambiar de base de datos con un bug de SQL Injection

Dentro de una aplicación web, conexiones distintas para cada rol

Supongamos que tenemos una aplicación web expuesta en Internet en la que los usuarios que allí se creen tienen tres roles. Vamos a suponer que estos tres roles son: Rol Administrador que puede leer, escribir todas las tablas que dan soporte a la aplicación, el Rol Editor, que pueden escribir y borrar registros en tres tablas, y el Rol Lector que solo puede leer datos de dos tablas.

A estos roles, hay que sumar que la propia aplicación web, en algún momento puede tener que realizar algunas acciones no dependientes de las acciones de los usuarios, por ejemplo la autenticación de las credenciales, las operaciones de mantenimiento, etcétera. Para ello, hablaremos del Rol de Aplicación.

Lo suyo es que, para dejar un entorno fortificado se creen dentro de la base de datos cuatro usuarios que representen a los cuatro roles con los que se va a conectar la aplicación web. Cada uno de esos usuarios de la base de datos tendrá asignados los privilegios sobre el sistema necesarios para el cumplimiento de su rol dentro de la aplicación web, así como los permisos sobre los objetos estrictos y nada más.

Figura 4: Tabla de roles y permisos

A partir de ese momento, la aplicación web no gestionará una única cadena de conexión, sino que gestionará 4 cadenas de conexión distintas para cada una de las acciones que quiera realizar. Por ejemplo, para hacer un proceso de login con un usuario, la aplicación web primero creará una conexión con el usuario del Aplicación, autenticará las credenciales que le introduzcan contra su tabla_usuarios, y una vez que se sepa el rol que deberá tener ese usuario dentro de la aplicación web, se cerrará la conexión con el Rol_Aplicación y se abrirá una nueva conexión con el usuario de la base de datos con el rol adecuado.

Figura 5: Esquema de cadenas de conexión múltiples desde la misma aplicación web a la misma base de datos

Esto lo que hace es que, si un usuario con el Rol_Lector encuentra un bug de SQL Injection dentro de la aplicación, el impacto que puede tener estará limitado. Por el contrario, lo habitual es que las aplicaciones web solo gestionen un único usuario de conexión con todos los permisos sobre todos los objetos de la base de datos, lo que lleva a que cualquier usuario de la aplicación web que encuentra un bug de SQL Injection acabe teniendo acceso a todos los objetos de la base de datos, ya  que el usuario que está utilizando la aplicación web en la conexión a la base de datos los tiene.

Saludos Malignos!

sábado, mayo 03, 2014

Buscar bugs de HeartBleed en Well-Known Ports con Google Hacking: Cpanel, Oracle Web Server, Open View y demás

En el artículo de HeartBleed puede desangrarte vivo se explica cómo se puede explotar esta vulnerabilidad para robar las contraseñas de los usuarios de un servidor web, la demostración se hacía con un servidor Plesk publicado por el puerto 8443. El que ese puerto sea no demasiado común hace que muchos rastreos lo dejen fuera del radar. Pensando en cuántos tipos de servidores web, publicados a Internet en puertos no habituales, podrían estar esperando a que cualquiera le enviara un latido malicioso decidí hacer unas sencillas pruebas esta mañana de sábado que os paso a contar.

Detección automática con el navegador

Para simplificar la tarea de descubrir si un servidor es vulnerable o no, decidí automatizar este proceso mediante un plugin del navegador. Ahora existen muchos plugins como ChromeBleed para Google Chrome o FoxBleed para Mozilla Firefox que te ayudan a detectar cuando estás navegando por un servidor vulnerable a HeartBleed.

Figura 1: StopBleed y ChromeBleed instalados en Google Chrome

Esta protección es más que recomendable, y ayuda a saber cuáles son los servidores que podrían estar monitorizados en tiempo real para capturar todos los datos de la memoria del proceso OpenSSL vulnerable. Con uno de ellos activado en el navegador, ya estamos listos para poder comenzar a hacer un poco de hacking con buscadores.

Buscando los puertos comunes no habituales con OpenSSL

Como ya sabéis, el proceso OpenSSL puede usarse para muchos servicios, como VPN-SSL, FTP-s, LDAP-s, etcétera, pero también para paneles de administración web es común que los servidores HTTP-s de acceso estén en puertos distintos al que por defecto es usado para este servicio, el número 443.

Para encontrar cuántos puertos podrían tener servicios con SSL lo más sencillo es irse a cualquier base de datos de Well-Known Ports en Internet. En este caso yo utilicé la base de datos de puertos de Speed Guide que tiene un interfaz de búsqueda muy cómodo y una lista de puertos bastante ampliada. Una sencilla búsqueda por SSL para saber en cuántos puertos debería buscar para encontrar la mayoría de los servicios que pudieran tener una versión vulnerable de OpenSSL arrojó un total de 99 77 servicios.

Figura 2: Puertos con algún servicio SSL en ellos

Esto quiere decir que si escaneamos todas las direcciones IP de Internet por esos 99 77 puertos buscando versiones de OpenSSL vulnerables tendríamos un porcentaje grandísimo de todas las versiones vulnerables expuestas a Internet. Si alguien se anima y me pasa los datos, estaré agradecido.

Seleccionando los paneles de administración web

Para poder hacer Hacking con Buscadores, lo más cómo es buscar aquellos puertos que son utilizados por servicios como Plesk (8443), para lo que una revisión manual es suficiente. Como podéis ver, salen cosas interesantes en la lista.

Figura 3: Servicios HTTPs por puertos no habituales

Entre ellos, servidores web de Oracle, OpenView o el popular CPanel, utilizando puertos no demasiado habituales en los escaneos de HTTPs. Ahora se trataría de localizar esos servidores web indexados en los buscadores. Vamos a ello.

El truco de barra para localizar los servidores web en Google

Si te has leído el libro de Pentesting con FOCA, sabrás que una de las cosas que hace la herramienta para buscar los servidores más interesantes a la hora de hacer un pentesting es utilizar El Truco de la Barra en Google Hacking.

Este truco es algo que no acabo de entender muy bien por qué funciona así, pero lo cierto es que si pones una barra antes del dominio en el modificador site, te permite buscar por puertos. Así, si queremos localizar servidores web en un determinado puerto pertenecientes a un dominio solo habría que hacer algo como site:/dominio:puerto/. En los siguientes ejemplos se puede ver cómo serían las búsquedas en Google para localizar servidores Cpanel en Alemania o Argentina.

Figura 4: Servidores indexados en Google por el puerto 2096 de Cpanel

Esto es válido para cualquier puerto en cualquier dominio. Por ejemplo, para localizar servidores de Oracle Web Application Server en un país, solo habría que cambiar el dominio y el puerto para obtener una lista de servidores indexados por ese puerto.

Detectando la vulnerabilidad de HeartBleed

Para detectar la vulnerabilidad, bastaría con obtener los resultados y abrir la página web en nuevas pestañas y el plugin de detección automáticamente irá cantando si el servidor es vulnerable o no al fallo. Yo he probado en varios países y sorprende ver lo fácil que es encontrar servidores de administración de hosting, webmails o herramientas de gestión publicadas sobre versiones vulnerables de OpenSSL.

Figura 5: Uno de los muchos Cpanels vulnerables a HeartBleed descubiertos

Esto deja claro que la vulnerabilidad va a dar mucho juego durante años, como el famoso bug de IIS que permitía ejecutar comandos remotamente en los servidores y que costó erradicar de Internet años.

La explotación de HeartBleed

Explotar el bug de HeartBleed para conseguir las credenciales de los usuarios es ya conocido, solo hay que monitorizar la memoria del proceso OpenSSL constantemente hasta que en un volcado aparezcan - en texto claro - las credenciales buscadas. Todos los pentesters tienen ya sus scripts y herramientas, y si usas FOCA ya sabes que tiene un plugin de monitorización continua para que se vuelque la memoria.

Figura  6: Monitorización continua de un bug de HeartBleed con el plugin de FOCA

Vamos a ver si desde Eleven Paths podemos sacar algún plugin de Latch para Plesk o CPanel para poder implantarlo. Ya teníais disponibles los de RoundCube, y SquirrelMail para servidores de WebMail y ahora está listo también el de Open-Xchange que podéis conseguir ya si nos lo pedís. Aquí tenéis una lista de guías y plugins de Latch para integrar ya. Si alguien se anima a querer integrarlo con Cpanel o Plesk, o cualquier otro servicio, nosotros le ayudamos.

Lo dicho ya con anterioridad. Si descubres que alguno de los servidores que utilizas habituales es vulnerable a HeartBleed, notifícalo y no envíes ningún dato hasta que no esté solucionado. Después cambia las passwords de esos sistemas. Si estás a cargo de una red, escanea los 99 77 puertos del principio en todas tus direcciones IP, a ver si aparece alguna versión vulnerable del software en algún punto.

Saludos Malignos!

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares