
⚠️ In Arbeit – Das Projekt wird aktiv entwickelt. Die Kern-Scanning-Engine ist funktionsfähig; Datenbankpersistenz, Caching und vollständige Testabdeckung sind für kommende Iterationen geplant.
NuReaper ist eine .NET 8 Backend-API, die automatisch die Sicherheit von NuGet-Paketen analysiert. Sie geben einen Link zu einem beliebigen NuGet-Paket an, und das System lädt rekursiv dessen gesamten Abhängigkeitsbaum herunter, dekompiliert den kompilierten Code und scannt jede Methode auf bösartige Muster – und gibt einen detaillierten Bedrohungsbericht zurück.
🔍 Für nicht-technische Leser: Stellen Sie es sich vor wie das Installieren einer App auf Ihrem Telefon. Zusammen mit ihr werden Dutzende kleinerer Bibliotheken automatisch installiert. NuReaper untersucht jede einzelne von ihnen – und betrachtet den tatsächlichen kompilierten Binärcode – und erkennt, ob eine von ihnen versucht, sich mit verdächtigen Servern zu verbinden, versteckten Code auszuführen oder ihr wahres Verhalten zu verschleiern.
Senden Sie eine einzelne HTTP-Anfrage mit einer NuGet-Paket-URL, und NuReaper wird:
.nupkg-Datei ab und berechnet deren SHA-256-Hash.Die Engine analysiert Code auf der IL-Ebene (Intermediate Language) und erkennt 7 Muster, die für bösartige Software charakteristisch sind:
Netzwerk: HttpClient, WebClient, DNS, TcpClient, WebSocket
Ausführung: Process.Start, Assembly.Load, Activator.CreateInstance
Low-Level: DllImport, VirtualAlloc, CreateThread, NtCreateThreadEx
System: ManagementObjectSearcher (WMI)
Zeichenkettenbasiert: Verkettung, CharArray, Interpolation, StringBuilder
Verdächtig: URL, IP-Adresse, .onion-Adresse, Base64
Der Bewertungsalgorithmus berücksichtigt:
POST /api/PackageScanScannt das angegebene NuGet-Paket zusammen mit seinem vollständigen Abhängigkeitsbaum.
Anfrage:
{
"url": "https://www.nuget.org/packages/System.Net.Http/4.3.4"
}
Antwort:
{
"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": [...]
}
}
Aufgebaut auf Clean Architecture mit strenger Trennung der Belange:
NuReaperBackend/
├── NuReaper.Api/ # API-Ebene – Controller, Middleware, Start
├── NuReaper.Application/ # Anwendungsebene – Befehle, Schnittstellen, DTOs, Validierung
├── NuReaper.Domain/ # Domänenkern – Entitäten, Aufzählungen, Abstraktionen
├── NuReaper.Infrastructure/ # Implementierungen – Scanner, Parser, Repositories
│ └── Repositories/
│ ├── Scanners/ # IL-Analyse-Engine
│ │ ├── Analysis/ # ScanModule, ScanMethod, NetworkApiCallScan
│ │ ├── Detectors/ # 7 Mustererkennungen (Pattern1–Pattern7)
│ │ ├── Patterns/ # PatternRegistry (Regex: URL, IP, .onion, Base64)
│ │ ├── RiskCalculation/# Bedrohungsbewertungsalgorithmus
│ │ ├── Finders/ # Auffinden von API-Aufrufen in IL-Anweisungen
│ │ ├── VariableAnalysis/# Verfolgen von Variablenwerten über IL hinweg
│ │ └── StringAnalysis/ # Rekonstruktion von Zeichenfolgen aus Fragmenten
│ ├── Parsers/ # .nuspec-Datei-Parsing
│ ├── GraphBuilders/ # Erstellung von Abhängigkeitsgraphen (BFS + Rekursion)
│ └── FileHelpers/ # Herunterladen, Extrahieren, SHA-256
└── Docker/
├── Dockerfile
└── docker-compose.yml
Package URL
│
▼
DependencyGraphBuilder ← erstellt Abhängigkeitsgraphen aus .nuspec-Dateien
│ (Rekursion + BFS, Zyklenerkennung)
▼
Liste der eindeutigen Pakete
│
▼ (parallel, SemaphoreSlim — CPU-1 Threads)
NetworkApiCallScan pro Paket
├── DownloadPackageAsync ← ruft .nupkg ab
├── CalculateSha256 ← Integritätsprüfung
├── ExtractNupkgAsync ← entpackt das Archiv
└── GetAssemblyFiles ← listet .dll-Dateien auf
│
▼ (Parallel.ForEachAsync)
ScanModule (pro .dll)
│
▼ (Parallel.ForEach — alle Typen und Methoden)
ScanMethod (pro Methode)
│
▼ (7 Mustererkennungen)
Pattern1..7 → FindingSummaryDto
│
▼
CalculateThreatLevel ← Score 0–100
│
▼
ScanPackageResultResponse
Dieses Projekt ist unter der PolyForm Noncommercial License 1.0.0 verfügbar, kommerzielle Nutzung ist untersagt. Für kommerzielle Lizenzierung oder Anfragen kontaktieren Sie: [email protected]
| # | Pattern | Description |
|---|
| 1 | Direct API Call | Verdächtiger String wird sofort in einem Netzwerkaufruf verwendet. |
| 2 | String Assigned | URL wird einer Variablen zugewiesen und dann an einen Netzwerkaufruf übergeben. |
| 3 | String Construction | URL wird durch Verkettung aufgebaut ("http://" + var + "/path") – Verschleierungstechnik. |
| 4 | String Interpolation | URL wird mittels Interpolation zusammengesetzt ($"{part1}{part2}"). |
| 5 | Char-Only Interpolation | URL wird Zeichen für Zeichen aus einem Zeichen-Array aufgebaut – fortgeschrittene Verschleierung. |
| 6 | DefaultInterpolatedStringHandler | Low-Level-Interpolationsmechanismus, der verwendet wird, um Zeichenfolgen vor der statischen Analyse zu verbergen. |
| 7 | Bare API Calls | Direkte Netzwerkaufrufe ohne explizite Zeichenfolgen (TcpClient.Connect, Socket.Connect, Process.Start). |
| Bereich | Technologie / Muster |
|---|
| Architektur | Clean Architecture |
| Kommunikation zwischen den Schichten | CQRS + MediatR |
| IL-Code-Analyse | dnlib |
| Eingabevalidierung | FluentValidation + MediatR Pipeline Behaviour |
| Objektzuordnung | AutoMapper |
| Protokollierung | Serilog (Konsole + tägliche Rolling-Datei) |
| API-Dokumentation | Swagger / OpenAPI |
| Datenbank | Entity Framework Core + MySQL (Pomelo) |
| HTTP | IHttpClientFactory mit Verbindungspooling |
| Containerisierung | Docker + Docker Compose |
| Testen | xUnit + Moq |
| Paket | Zweck |
|---|
dnlib | .NET-IL-Dekompilierung und -Analyse |
MediatR | CQRS – Befehls-/Abfrage-Pipeline |
FluentValidation | Anfragevalidierung |
AutoMapper | Objektzuordnung zwischen den Schichten |
Serilog | Strukturierte Protokollierung |
Pomelo.EntityFrameworkCore.MySql | MySQL-ORM |
Swashbuckle.AspNetCore | Swagger-Benutzeroberfläche |
xUnit + Moq | Komponententests |