# T1195.001 - Compromise Software Dependencies and Development Tools
## Descrição
Adversários comprometem a cadeia de fornecimento de software através da manipulação de dependências - bibliotecas, pacotes e ferramentas de desenvolvimento - inserindo código malicioso que será executado automaticamente quando desenvolvedores ou pipelines de CI/CD instalarem ou compilarem o software afetado. O ataque é particularmente insidioso porque explora a confiança implícita que o ecossistema de desenvolvimento moderno deposita em repositórios públicos de pacotes.
As modalidades mais comuns incluem: **typosquatting** (registro de pacotes com nomes deliberadamente similares a pacotes populares - ex.: `coluors` em vez de `colours`, `reques` em vez de `requests`); **dependency confusion** (exploração da ambiguidade entre repositórios privados e públicos, onde o gerenciador de pacotes baixa uma versão maliciosa pública em vez da interna legítima); e o **comprometimento direto de mantenedores** (roubo ou phishing de credenciais de públicação de pacotes legítimos com grandes bases de usuários). Todos esses vetores resultam em código do atacante executado com total confiança no ambiente da vítima - frequentemente em estações de desenvolvimento e servidores de build com acesso privilegiado. O [[g0032-lazarus-group|Lazarus Group]] tem utilizado esta técnica de forma recorrente em campanhas contra o setor financeiro e de criptomoedas, como documentado na [[solarwinds-supply-chain-attack|SolarWinds Supply Chain Attack]] e em operações derivadas.
Registros de pacotes afetados incluem npm (JavaScript/Node.js), PyPI (Python), NuGet (.NET), RubyGems, Maven (Java) e Composer (PHP). A superfície de ataque é amplificada pelo fato de que um único pacote comprometido pode ser transitivamente incorporado a centenas de projetos - o atacante compromete uma dependência de uma dependência, atingindo alvos que nunca instalaram diretamente o pacote malicioso. O [[g0016-apt29|Cozy Bear]] demonstrou a escala desse impacto ao comprometer a cadeia de build da SolarWinds, inserindo o backdoor [[t1027-obfuscated-files|T1027 - Obfuscated Files or Information]] em atualizações legítimas do Orion distribuídas a mais de 18.000 organizações.
**Contexto Brasil/LATAM:** O ecossistema de desenvolvimento de software brasileiro é extenso e majoritariamente dependente de repositórios públicos de pacotes - npm e PyPI são ubíquos. Fintechs, startups e grandes bancos digitais brasileiros operam com times de desenvolvimento ágeis que, sob pressão de entrega, raramente auditam a procedência de todas as dependências utilizadas. A adoção de SBOM (Software Bill of Materials) e ferramentas de Software Composition Analysis (SCA) ainda é incipiente na maioria das empresas fora do top-50 de tecnologia. Ataques de dependency confusion têm impacto elevado em organizações que mantêm pacotes internos no npm Registry sem escopo (`@`) - vulnerabilidade diretamente explorada por pesquisadores como Alex Birsan em 2021 para comprometer dezenas de empresas Fortune 500.
## Attack Flow
```mermaid
graph TB
DEV["Desenvolvedor / CI-CD<br/>(instala dependência)"]:::neutral --> POISON["Pacote malicioso<br/>no repositório público"]:::attack
POISON --> BUILD["Build pipeline<br/>comprometido"]:::neutral
BUILD --> ARTIFACT["Artefato trojanizado<br/>distribuído"]:::neutral
ARTIFACT --> C2["Backdoor ativo<br/>C2 estabelecido"]:::neutral
classDef neutral fill:#2c3e50,color:#ecf0f1,stroke:#7f8c8d
classDef attack fill:#e74c3c,color:#fff,stroke:#c0392b
```
## Como Funciona
**Passo 1 - Injeção na cadeia de dependências:** O adversário identifica um pacote amplamente utilizado (ou registra um nome similar via typosquatting) e pública uma versão maliciosa em um repositório público como npm ou PyPI. Em ataques de dependency confusion, o atacante registra públicamente um nome de pacote que a organização-alvo usa apenas em seu repositório privado - aproveitando que gerenciadores de pacotes como pip e npm priorizam, por padrão, versões públicas quando encontram ambiguidade de namespace. O código malicioso pode estar embutido em scripts de pós-instalação (`postinstall` no npm) que executam imediatamente na instalação, sem necessidade de que o desenvolvedor execute explicitamente o pacote.
**Passo 2 - Execução silenciosa no ambiente de build:** Quando o pipeline de CI/CD ou a estação do desenvolvedor instala as dependências do projeto (`npm install`, `pip install -r requirements.txt`), o pacote comprometido é baixado e seu código malicioso executa com os privilégios do processo de build. Em ambientes de CI/CD modernos (GitHub Actions, GitLab CI, Jenkins), esse processo ocorre em runners com acesso a tokens de autenticação, segredos de produção e permissões para públicar artefatos - tornando o comprometimento do pipeline significativamente mais valioso que o de uma única estação. Técnicas de [[t1027-obfuscated-files|ofuscação]] são comumente aplicadas ao payload para evadir scanners estáticos.
**Passo 3 - Persistência e exfiltração:** Com acesso ao ambiente de build, o adversário pode realizar diversas ações: exfiltrar segredos e tokens de autenticação presentes nas variáveis de ambiente do CI/CD; inserir backdoors em artefatos de software antes da públicação (comprometendo todos os usuários downstream do artefato); ou estabelecer acesso persistente ao ambiente de desenvolvimento para reconhecimento contínuo. O uso de [[t1059-001-powershell|T1059.001 - PowerShell]] ou shells equivalentes para stagers de C2 é comum nessa fase.
## Detecção
**Event IDs e fontes relevantes:**
| Evento / Fonte | Ferramenta | Descrição |
|----------------|-----------|-----------|
| Sysmon Event 1 | Sysmon | Process Creaté - npm/pip/pip3 spawning shells ou processos de rede |
| Sysmon Event 3 | Sysmon | Network Connection - processos de instalação de pacote conectando a IPs externos não esperados |
| Sysmon Event 11 | Sysmon | FileCreaté - scripts de postinstall criando arquivos em diretórios sensíveis |
| CI/CD audit logs | GitHub/GitLab | Execução de steps não declarados no pipeline; exfiltração de secrets |
| Package manager logs | npm/pip | Instalação de versões de pacotes públicadas recentemente com muitos downloads súbitos |
**Regra Sigma - Processo suspeito filho de gerenciador de pacotes:**
```yaml
title: Package Manager Spawning Suspicious Child Process
id: 7d2e4c91-3b8a-4f05-ae61-9c0d7e1f5b32
status: experimental
description: >
Detecta gerenciadores de pacotes (npm, pip, gem, nuget) criando processos
filhos suspeitos - indicativo de script de postinstall malicioso executando
durante instalação de dependência comprometida.
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\node.exe'
- '\npm.cmd'
- '\pip.exe'
- '\pip3.exe'
- '\gem.cmd'
- '\nuget.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\wscript.exe'
- '\curl.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
condition: selection_parent and selection_child
falsepositives:
- Scripts de build legítimos que invocam shell (válidar com inventário de dependências)
- Ferramentas de scaffolding como yeoman, creaté-react-app
level: high
tags:
- attack.initial_access
- attack.t1195.001
- attack.supply_chain
```
## Mitigação
| Controle | Mitigação | Prioridade para Org. Brasileira |
|----------|-----------|--------------------------------|
| Pinning de versões | Fixar versões exatas de dependências em arquivos de lock (`package-lock.json`, `poetry.lock`, `Pipfile.lock`) e commitar no repositório; nunca usar ranges como `^1.2.0` em produção | Alta - controle de menor custo |
| Registro privado com mirror | Usar registro privado de pacotes (Artifactory, Nexus, AWS CodeArtifact) que espelhe apenas pacotes aprovados; bloquear acesso direto ao PyPI/npm em ambientes de build | Alta |
| Software Composition Analysis | Integrar SCA no pipeline de CI/CD (Snyk, Dependabot, Socket.dev, OWASP Dependency-Check); bloquear build em caso de vulnerabilidade crítica ou pacote suspeito recém-públicado | Alta |
| 2FA para contas de públicação | Exigir autenticador TOTP ou hardware key para públicar em PyPI/npm; revisar quem tem permissão de publish no escopo da organização | Média |
| SBOM (Software Bill of Materials) | Gerar e manter SBOM para todos os projetos em produção; usar CycloneDX ou SPDX; auditar em fusões/aquisições e contratos com fornecedores de software | Média |
| Namespace protection | Registrar públicamente (como placeholder vazio) todos os nomes de pacotes internos para prevenir dependency confusion; usar escopo `@empresa/` no npm | Média |
> [!danger] Risco crítico para fintechs brasileiras
> Pipelines de CI/CD com acesso a ambientes de produção (Kubernetes, AWS, GCP) que instalam dependências sem SCA são alvos de alto valor. Um único pacote npm comprometido em um `postinstall` script pode exfiltrar toda a base de secrets do runner - incluindo tokens de acesso a banco de dados de produção e chaves de API de pagamento.
## Grupos que Utilizam Esta Técnica
%%
```dataview
TABLE WITHOUT ID
link(file.link, title) AS "Ator", origin AS "Origem"
FROM "cti/groups"
WHERE contains(techniques, this.file.link)
```
%%
<!-- QueryToSerialize: TABLE WITHOUT ID link(file.link, title) AS "Nota", title AS "Ator", origin AS "Origem" FROM "cti/groups" WHERE contains(techniques, this.file.link) -->
<!-- SerializedQuery: TABLE WITHOUT ID link(file.link, title) AS "Nota", title AS "Ator", origin AS "Origem" FROM "cti/groups" WHERE contains(techniques, this.file.link) -->
| Nota | Ator | Origem |
| ---- | ---- | ------ |
<!-- SerializedQuery END -->
## Threat Actors
- [[g0032-lazarus-group|Lazarus Group]] - grupo norte-coreano que utiliza comprometimento de dependências de software como vetor primário em campanhas contra desenvolvedores blockchain e exchanges de criptomoeda; distribui trojans disfarçados de SDKs e ferramentas de trading via npm e GitHub.
- [[g0016-apt29|Cozy Bear]] - grupo russo de espionagem que comprometeu o build pipeline da SolarWinds, inserindo o backdoor SUNBURST em atualizações legítimas do Orion - o ataque de supply chain mais impactante da história, afetando agências do governo americano e empresas globais via [[solarwinds-supply-chain-attack|SolarWinds Supply Chain Attack]].
## Software Associado
- [[t1195-supply-chain-compromise|T1195 - Supply Chain Compromise]] - técnica pai; abrange comprometimento de hardware, software e dependências ao longo de toda a cadeia de fornecimento.
- [[t1195-002-supply-chain-compromise|T1195.002 - Supply Chain Compromise - Software Supply Chain]] - subtécnica irmã; foca no comprometimento do software distribuído em si (installer, updaté package), em contraste com as dependências de desenvolvimento.
- [[t1608-stage-capabilities|T1608 - Stage Capabilities]] - técnica frequentemente combinada; adversários preparam infraestrutura e staging de payloads antes de inserir código malicioso em repositórios públicos.
- [[t1059-001-powershell|T1059.001 - PowerShell]] - frequentemente usado como stager no payload executado via postinstall scripts comprometidos.
- [[t1027-obfuscated-files|T1027 - Obfuscated Files or Information]] - adversários ofuscam código malicioso em dependências para evadir scanners estáticos e análise manual de revisão de código.
---
*Fonte: [MITRE ATT&CK - T1195.001](https://attack.mitre.org/techniques/T1195/001)*