# T1505.001 - SQL Stored Procedures ## Técnica Pai [[t1505-server-software-component|T1505 - Componente de Software Servidor]] ## Descrição Adversários abusam de stored procedures SQL para estabelecer persistência em servidores de banco de dados. Stored procedures são blocos de código SQL armazenados no próprio banco de dados que podem ser invocados por nome, agendados via eventos internos ou disparados automaticamente na inicialização do servidor - criando um vetor de persistência altamente discreto e muitas vezes fora do escopo do monitoramento tradicional de endpoints. O mecanismo é especialmente relevante em ambientes corporativos onde bancos de dados como **Microsoft SQL Server**, **MySQL** e **PostgreSQL** são componentes críticos de aplicações de negócio, ERP e sistemas financeiros - incluindo infraestruturas amplamente presentes no Brasil. > [!example] Malware Associado > O [[s0603-stuxnet|Stuxnet]] - um dos malwares mais sofisticados já analisados - utilizou stored procedures SQL como parte de seu mecanismo de persistência em ambientes SCADA/ICS, demonstrando a viabilidade do vetor mesmo em sistemas de alta segurança. ## Como Funciona ```mermaid graph TB A["Acesso inicial ao banco<br/>(credencial comprometida ou SQLi)"] B["Escalonamento de privilégio<br/>no banco de dados"] C["Habilitação de funcionalidades perigosas<br/>(ex: xp_cmdshell no MSSQL)"] D["Criação de stored procedure<br/>maliciosa"] E["Procedimento vinculado a<br/>evento de startup ou trigger"] F["Persistência estabelecida:<br/>execução automática em cada restart"] G["Execução de comandos SO<br/>a partir do contexto do banco"] A --> B B --> C C --> D D --> E E --> F F --> G classDef initial fill:#e74c3c,color:#fff classDef step fill:#3498db,color:#fff classDef persist fill:#8e44ad,color:#fff classDef impact fill:#e67e22,color:#fff class A initial class B,C,D,E step class F persist class G impact ``` ## Vetores de Abuso no MSSQL ### xp_cmdshell - Execução de Comandos do SO O `xp_cmdshell` é uma extended stored procedure nativa do Microsoft SQL Server que permite executar comandos do sistema operacional diretamente a partir de uma query SQL. Desabilitado por padrão desde o SQL Server 2005, adversários com privilégios `sysadmin` podem reativá-lo: ```sql -- Reabilitar xp_cmdshell EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; -- Executar comando no SO EXEC xp_cmdshell 'powershell -enc <base64_payload>'; ``` Uma vez habilitado, o adversário pode criar uma stored procedure que reabilita `xp_cmdshell` e executa um payload a cada reinicialização do serviço SQL Server. ### CLR Integration - Assemblies .NET Maliciosas O SQL Server suporta integração com o Common Language Runtime (CLR) do .NET, permitindo stored procedures escritas em C#, VB.NET ou F#. Adversários exploram esse recurso para carregar assemblies .NET maliciosas diretamente no contexto do banco: ```sql -- Habilitar CLR EXEC sp_configure 'clr enabled', 1; RECONFIGURE; -- Criar assembly a partir de bytes hex (bypass de disco) CREATE ASSEMBLY MaliciousAssembly FROM 0x4D5A... -- bytes da DLL maliciosa WITH PERMISSION_SET = UNSAFE; -- Vincular stored procedure à assembly CREATE PROCEDURE dbo.BackdoorProc AS EXTERNAL NAME MaliciousAssembly.[Namespace.Class].Method; ``` Esse método é particularmente evasivo porque o código malicioso reside no banco de dados, não no sistema de arquivos - escapando de varreduras de AV tradicionais. ### Startup Stored Procedures No MSSQL, stored procedures marcadas para execução automática rodam quando o serviço SQL Server é iniciado: ```sql -- Marcar procedure para execução no startup do SQL Server EXEC sp_procoption 'MaliciousProc', 'startup', 'true'; ``` Qualquer stored procedure com essa flag executa automaticamente a cada reinicialização do serviço - sem necessidade de agendamento externo ou interação do usuário. ## Contexto de Ameaça > [!warning] Relevância para Ambientes Corporativos Brasileiros > Sistemas ERP (SAP, TOTVS, Oracle EBS), plataformas de pagamento e sistemas bancários amplamente adotados no Brasil dependem de SQL Server e PostgreSQL. Acesso ao banco de dados via credenciais comprometidas ou injeção SQL cria oportunidade direta para abuso de stored procedures. O [[g0032-lazarus-group|Lazarus Group]] historicamente utiliza bancos de dados como pivot em campanhas financeiras. ## Detecção ```mermaid graph TB A["Logs de auditoria SQL<br/>(SQL Server Audit / pgaudit)"] B{"xp_cmdshell habilitado<br/>ou CLR habilitado?"} C["ALERTA CRÍTICO:<br/>habilitação de feature perigosa"] D{"Nova stored procedure<br/>criada com PERMISSION_SET=UNSAFE?"} E["ALERTA ALTO:<br/>possível CLR backdoor"] F{"sp_procoption com<br/>'startup'='true'?"} G["ALERTA ALTO:<br/>persistência via startup proc"] H["EDR - Process Creation"] I{"sqlservr.exe invocando<br/>cmd.exe ou powershell.exe?"} J["ALERTA CRÍTICO:<br/>execução SO via banco"] A --> B B -->|Sim| C A --> D D -->|Sim| E A --> F F -->|Sim| G H --> I I -->|Sim| J classDef monitor fill:#27ae60,color:#fff classDef check fill:#3498db,color:#fff classDef alert fill:#e74c3c,color:#fff class A,H monitor class B,D,F,I check class C,E,G,J alert ``` ### Queries de Detecção (MSSQL) ```sql -- Verificar stored procedures com flag de startup SELECT name, is_auto_executed FROM sys.procedures WHERE is_auto_executed = 1; -- Verificar assemblies CLR instaladas SELECT name, permission_set_desc, creaté_daté FROM sys.assemblies WHERE is_user_defined = 1; -- Verificar se xp_cmdshell está habilitado SELECT value_in_use FROM sys.configurations WHERE name = 'xp_cmdshell'; ``` ### Fontes de Dados para SIEM | Fonte | O que monitorar | |-------|----------------| | SQL Server Audit | `ALTER SERVER CONFIGURATION`, criação de assemblies CLR, chamadas a `sp_procoption` | | Windows Event Log | Processo filho de `sqlservr.exe` (cmd.exe, powershell.exe, wscript.exe) | | Sysmon Event 1 | `ParentImage` = `sqlservr.exe` com `CommandLine` suspeito | | Netflow/EDR | Conexões de rede originadas pelo processo `sqlservr.exe` | ## Mitigações | ID | Mitigação | Aplicação | |----|-----------|-----------| | [[m1026-privileged-account-management\|M1026 - Privileged Account Management]] | Limitar contas com papel `sysadmin` no SQL Server; separar conta de serviço SQL de contas administrativas | Alta prioridade | | [[m1047-audit\|M1047 - Audit]] | Habilitar SQL Server Audit para capturar DDL em stored procedures, criação de assemblies e alterações de configuração | Alta prioridade | | [[m1045-code-signing\|M1045 - Code Signing]] | Exigir que assemblies CLR sejam assinadas com certificado de confiança; bloquear `PERMISSION_SET=UNSAFE` | Média prioridade | ### Hardening Adicional - Desabilitar `xp_cmdshell` e manter desabilitado com monitoramento de tentativas de reabilitação - Desabilitar CLR integration se não for utilizado pela aplicação - Aplicar princípio do menor privilégio: contas de aplicação não devem ter permissão `ALTER ANY ASSEMBLY` ou `CONTROL SERVER` - Segregar o serviço SQL Server em conta de serviço dedicada sem privilégios de domínio ## Software Associado - [[s0603-stuxnet|Stuxnet]] - utilizou stored procedures SQL como componente de persistência em sistemas SCADA --- *Fonte: MITRE ATT&CK - T1505.001 (https://attack.mitre.org/techniques/T1505/001)*