# M1045 — Code Signing
## Visão Geral
---
*Fonte: [MITRE ATT&CK — M1045](https://attack.mitre.org/mitigations/M1045)*
## Descrição
Code Signing é um processo de segurança que garante a autenticidade e a integridade do software por meio da assinatura digital de executáveis, scripts e outros artefatos de código.
```mermaid
graph TB
A["🏗️ Build Artifact<br/>binário / script<br/>gerado no CI/CD"] --> B["🔑 Assinar com PKI<br/>certificado de CA<br/>confiável — Signtool"]
B --> C["📦 Distribuir Assinado<br/>hash registrado<br/>imutável no pipeline"]
C --> D["🖥️ Endpoint Verifica<br/>AppLocker / WDAC<br/>válida assinatura + hash"]
D --> E{"Assinatura<br/>válida?"}
E -->|Sim| F["✅ Executar<br/>código autorizado"]
E -->|Não| G["🚫 Bloquear<br/>alertar SOC"]
``` Ele impede que código não confiável ou malicioso seja executado ao verificar as assinaturas digitais contra fontes confiáveis. Code signing protege contra adulteração, impersonificação e distribuição de software não autorizado ou malicioso, formando uma defesa crítica contra ataques de supply chain e exploração de software. Esta mitigação pode ser implementada por meio das seguintes medidas:
Aplicar Execução de Código Assinado:
- Implementação: Configurar sistemas operacionais (ex.: Windows com AppLocker ou Linux com Secure Boot) para permitir apenas a execução de código assinado.
- Caso de uso: Prevenir a execução de scripts PowerShell maliciosos ao exigir que todos os scripts sejam assinados com um certificado confiável.
Aplicação de Drivers Assinados por Vendors:
- Implementação: Habilitar code signing em modo kernel para garantir que apenas drivers assinados por vendors confiáveis possam ser carregados.
- Caso de uso: Um driver malicioso que tenta modificar a memória do sistema falha ao carregar porque não possui uma assinatura válida.
Gerenciamento de Revogação de Certificados:
- Implementação: Utilizar Online Certificate Status Protocol (OCSP) ou Certificate Revocation Lists (CRLs) para bloquear certificados associados a código comprometido ou obsoleto.
- Caso de uso: Um certificado comprometido usado para assinar uma atualização maliciosa é revogado, impedindo a execução adicional do software.
Verificação de Software de Terceiros:
- Implementação: Exigir que software de fornecedores externos seja assinado com certificados válidos antes do deployment.
- Caso de uso: Uma organização implanta apenas software de terceiros assinado e verificado para prevenir ataques de supply chain.
Integridade de Scripts em Pipelines CI/CD:
- Implementação: Integrar code signing nos pipelines de CI/CD para assinar e verificar artefatos de código antes do release em produção.
- Caso de uso: Uma empresa de software garante que todos os builds de produção sejam assinados, impedindo que builds adulterados cheguem aos clientes.
**Componentes-Chave do Code Signing**
- Verificação de Assinatura Digital: Verifica a autenticidade do código garantindo que foi assinado por uma entidade confiável.
- Gerenciamento de Certificados: Utiliza Public Key Infrastructure (PKI) para gerenciar certificados de assinatura e listas de revogação.
- Política de Aplicação para Código Não Assinado: Impede a execução de binários e scripts não assinados ou não confiáveis.
- Verificação de Integridade por Hash: Confirma que o código não foi alterado desde a assinatura comparando hashes criptográficos.
## Técnicas Mitigadas
| ID | Técnica |
|---|---------|
| T1505 | [[t1505-server-software-component\|T1505 — Server Software Component]] |
| T1204.003 | [[t1204-003-malicious-image\|T1204.003 — Malicious Image]] |
| T1525 | [[t1525-implant-internal-image\|T1525 — Implant Internal Image]] |
| T1059.002 | [[t1059-002-applescript\|T1059.002 — AppleScript]] |
| T1059 | [[t1059-command-and-scripting-interpreter\|T1059 — Command and Scripting Interpreter]] |
| T1036.005 | [[t1036-005-match-legitimate-resource-name-or-location\|T1036.005 — Match Legitimaté Resource Name or Location]] |
| T1036.001 | [[t1036-001-invalid-code-signature\|T1036.001 — Invalid Code Signature]] |
| T1546.013 | [[t1546-013-powershell-profile\|T1546.013 — PowerShell Profile]] |
| T1036 | [[t1036-masquerading\|T1036 — Masquerading]] |
| T1554 | [[t1554-compromise-host-software-binary\|T1554 — Compromise Host Software Binary]] |
| T1601.001 | [[t1601-001-patch-system-image\|T1601.001 — Patch System Image]] |
| T1601.002 | [[t1601-002-downgrade-system-image\|T1601.002 — Downgrade System Image]] |
| T1543.003 | [[t1543-003-windows-service\|T1543.003 — Windows Service]] |
| T1059.001 | [[t1059-001-powershell\|T1059.001 — PowerShell]] |
| T1505.001 | [[t1505-001-sql-stored-procedures\|T1505.001 — SQL Stored Procedures]] |
| T1543 | [[t1543-create-or-modify-system-process\|T1543 — Create or Modify System Process]] |
| T1601 | [[t1601-modify-system-image\|T1601 — Modify System Image]] |
| T1505.004 | [[t1505-004-iis-components\|T1505.004 — IIS Components]] |
| T1546.006 | [[t1546-006-lcloaddylib-addition\|T1546.006 — LC_LOAD_DYLIB Addition]] |
| T1505.006 | [[t1505-006-vsphere-installation-bundles\|T1505.006 — vSphere Installation Bundles]] |
| T1505.002 | [[t1505-002-transport-agent\|T1505.002 — Transport Agent]] |
| T1127.002 | [[t1127-002-clickonce\|T1127.002 — ClickOnce]] |
## Contexto LATAM
> [!globe] Relevância Regional
> Code signing é uma defesa crítica contra supply chain attacks que têm afetado organizações brasileiras, especialmente via software de terceiros sem assinatura digital adequada. Malware brasileiro como loaders de [[s0531-grandoreiro]] frequentemente utilizam binários não assinados ou com assinaturas expiradas — e a baixa adoção de WDAC no Brasil deixa espaço para essa técnica prosperar em ambientes corporativos nacionais.
> - Adoção em SOCs brasileiros: médio em setor financeiro e grandes corporações — enforcement de assinatura via AppLocker/WDAC; baixo em governo e PMEs onde software sem assinatura é commonplace
> - Regulamentações relevantes: BACEN 4893/2021 (controle de integridade de software em sistemas financeiros), ICP-Brasil (infraestrutura de chaves públicas brasileira — base legal para PKI nacional), Decreto 10.748/2021 (identidade digital gov.br)
> - Desafios regionais: muitos softwares fiscais e ERP nacionais (TOTVS, Sankhya, Protheus) distribuídos sem code signing adequado, custo de certificados de assinatura de código via ICP-Brasil, ausência de cultura de PKI corporativo em empresas de médio porte