
⚠️ Trabalho em Andamento — O projeto está em desenvolvimento ativo. O mecanismo principal de varredura está funcional; persistência de banco de dados, cache e cobertura total de testes estão planejados para iterações futuras.
NuReaper é uma API backend .NET 8 que analisa automaticamente a segurança de pacotes NuGet. Você fornece um link para qualquer pacote NuGet, e o sistema baixa recursivamente toda a árvore de dependências, descompila o código compilado e varre cada método em busca de padrões maliciosos — retornando um relatório detalhado de ameaças.
🔍 Para leitores não técnicos: Pense como instalar um aplicativo no seu celular. Junto com ele, dezenas de bibliotecas menores são instaladas automaticamente. O NuReaper inspeciona cada uma delas — olhando o código binário compilado real — e detecta se alguma delas tenta conectar a servidores suspeitos, executar código oculto ou ofuscar seu comportamento real.
Envie uma única requisição HTTP com uma URL de pacote NuGet, e o NuReaper irá:
.nupkg e calcula seu hash SHA-256O mecanismo analisa o código no nível de instruções IL (Intermediate Language) e reconhece 7 padrões característicos de software malicioso:
Rede: HttpClient, WebClient, DNS, TcpClient, WebSocket
Execução: Process.Start, Assembly.Load, Activator.CreateInstance
Baixo nível: DllImport, VirtualAlloc, CreateThread, NtCreateThreadEx
Sistema: ManagementObjectSearcher (WMI)
Baseado em string: Concatenation, CharArray, Interpolation, StringBuilder
Suspeito: URL, IP address, .onion address, Base64
O algoritmo de pontuação leva em conta:
POST /api/PackageScanEscaneia o pacote NuGet fornecido junto com sua árvore de dependências completa.
Requisição:
{
"url": "https://www.nuget.org/packages/System.Net.Http/4.3.4"
}
Resposta:
{
"rootPackageName": "System.Net.Http",
"rootPackageVersion": "4.3.4",
"totalPackages": 12,
"totalFindingsFromAllPackages": 5,
"threatLevelAllPackages": 47.5,
"scannedTimeAllPackages": "2026-03-25T12:00:00Z",
"packages": [
{
"packageName": "System.Net.Http",
"version": "4.3.4",
"sha256Hash": "abc123...",
"threatLevel": 35.0,
"totalFindings": 3,
"findings": [
{
"type": "HttpClientCall",
"confidenceScore": 95.0,
"dangerLevel": 60.0,
"evidence": "http://example.com/payload",
"location": "MyClass::SendData",
"hopDepth": 0,
"flowTrace": "[Pattern1] Direct API call using string..."
}
]
}
],
"dependencyGraph": {
"rootPackage": "[email protected]",
"nodes": [...],
"edges": [...],
"cycles": [...]
}
}
Construída sobre Arquitetura Limpa com uma separação estrita de responsabilidades:
NuReaperBackend/
├── NuReaper.Api/ # Camada de API — controladores, middleware, inicialização
├── NuReaper.Application/ # Camada de Aplicação — comandos, interfaces, DTOs, validação
├── NuReaper.Domain/ # Núcleo do Domínio — entidades, enums, abstrações
├── NuReaper.Infrastructure/ # Implementações — scanners, parsers, repositórios
│ └── Repositories/
│ ├── Scanners/ # Mecanismo de análise IL
│ │ ├── Analysis/ # ScanModule, ScanMethod, NetworkApiCallScan
│ │ ├── Detectors/ # 7 detectores de padrões (Pattern1–Pattern7)
│ │ ├── Patterns/ # PatternRegistry (regex: URL, IP, .onion, Base64)
│ │ ├── RiskCalculation/# Algoritmo de pontuação de ameaça
│ │ ├── Finders/ # Localizando chamadas de API em instruções IL
│ │ ├── VariableAnalysis/# Rastreando valores de variáveis em IL
│ │ └── StringAnalysis/ # Reconstruindo strings a partir de fragmentos
│ ├── Parsers/ # Análise de arquivos .nuspec
│ ├── GraphBuilders/ # Construção do grafo de dependências (BFS + recursão)
│ └── FileHelpers/ # Download, extração, SHA-256
└── Docker/
├── Dockerfile
└── docker-compose.yml
Package URL
│
▼
DependencyGraphBuilder ← constrói grafo de dependências a partir de arquivos .nuspec
│ (recursão + BFS, detecção de ciclos)
▼
Lista de pacotes únicos
│
▼ (paralelo, SemaphoreSlim — threads CPU-1)
NetworkApiCallScan por pacote
├── DownloadPackageAsync ← busca .nupkg
├── CalculateSha256 ← verificação de integridade
├── ExtractNupkgAsync ← descompacta o arquivo
└── GetAssemblyFiles ← lista arquivos .dll
│
▼ (Parallel.ForEachAsync)
ScanModule (por .dll)
│
▼ (Parallel.ForEach — todos os tipos e métodos)
ScanMethod (por método)
│
▼ (7 detectores de padrões)
Pattern1..7 → FindingSummaryDto
│
▼
CalculateThreatLevel ← pontuação 0–100
│
▼
ScanPackageResultResponse
Este projeto está disponível sob a Licença PolyForm Não Comercial 1.0.0, uso comercial é proibido. Para licenciamento comercial ou consultas, entre em contato: [email protected]
| # | Padrão | Descrição |
|---|
| 1 | Chamada de API Direta | String suspeita usada imediatamente em uma chamada de rede |
| 2 | String Atribuída | URL atribuída a uma variável, depois passada para uma chamada de rede |
| 3 | Construção de String | URL construída por concatenação ("http://" + var + "/path") — técnica de ofuscação |
| 4 | Interpolação de String | URL montada via interpolação ($"{part1}{part2}") |
| 5 | Interpolação Apenas com Caracteres | URL construída caractere por caractere a partir de um array de caracteres — ofuscação avançada |
| 6 | DefaultInterpolatedStringHandler | Mecanismo de interpolação de baixo nível usado para ocultar strings da análise estática |
| 7 | Chamadas de API Nuas | Chamadas de rede diretas sem strings explícitas (TcpClient.Connect, Socket.Connect, Process.Start) |
| Área | Tecnologia / Padrão |
|---|
| Arquitetura | Clean Architecture |
| Comunicação entre camadas | CQRS + MediatR |
| Análise de código IL | dnlib |
| Validação de entrada | FluentValidation + MediatR Pipeline Behavior |
| Mapeamento de objetos | AutoMapper |
| Registro de logs | Serilog (console + rolling daily file) |
| Documentação da API | Swagger / OpenAPI |
| Banco de dados | Entity Framework Core + MySQL (Pomelo) |
| HTTP | IHttpClientFactory with connection pooling |
| Containerização | Docker + Docker Compose |
| Testes | xUnit + Moq |
| Pacote | Finalidade |
|---|
dnlib | Descompilação e análise IL .NET |
MediatR | CQRS — pipeline de comando/consulta |
FluentValidation | Validação de requisições |
AutoMapper | Mapeamento de objetos entre camadas |
Serilog | Registro estruturado de logs |
Pomelo.EntityFrameworkCore.MySql | MySQL ORM |
Swashbuckle.AspNetCore | Swagger UI |
xUnit + Moq | Testes unitários |