
Nuget स्कैनर
⚠️ कार्य प्रगति पर — यह परियोजना सक्रिय रूप से विकसित हो रही है। कोर स्कैनिंग इंजन कार्यात्मक है; डेटाबेस स्थिरता, कैशिंग, और पूर्ण परीक्षण कवरेज आगामी संस्करणों के लिए योजनाबद्ध है।
NuReaper एक .NET 8 बैकएंड API है जो स्वचालित रूप से NuGet पैकेजों की सुरक्षा का विश्लेषण करता है। आप किसी भी NuGet पैकेज का लिंक प्रदान करते हैं, और सिस्टम पुनरावर्ती रूप से उसकी पूरी निर्भरता श्रृंखला डाउनलोड करता है, कंपाइल कोड को डीकंपाइल करता है, और हर विधि में दुर्भावनापूर्ण पैटर्न के लिए स्कैन करता है — एक विस्तृत खतरा रिपोर्ट लौटाता है।
🔍 गैर-तकनीकी पाठकों के लिए: इसे अपने फोन पर कोई ऐप इंस्टॉल करने जैसा समझें। इसके साथ ही दर्जनों छोटी लाइब्रेरी स्वचालित रूप से इंस्टॉल हो जाती हैं। NuReaper उनमें से हर एक की जाँच करता है — वास्तविक कंपाइल बाइनरी कोड को देखकर — और पता लगाता है कि उनमें से कोई संदिग्ध सर्वर से कनेक्ट होने, छिपे हुए कोड को निष्पादित करने, या अपने वास्तविक व्यवहार को अस्पष्ट करने का प्रयास करता है या नहीं।
एक NuGet पैकेज URL के साथ एक HTTP अनुरोध भेजें, और NuReaper यह करेगा:
.nupkg फ़ाइल प्राप्त करता है और उसका SHA-256 हैश गणना करता हैइंजन IL (मध्यवर्ती भाषा) निर्देश स्तर पर कोड का विश्लेषण करता है और दुर्भावनापूर्ण सॉफ़्टवेयर की विशेषता वाले 7 पैटर्न पहचानता है:
| # | पैटर्न | विवरण |
|---|---|---|
| 1 | प्रत्यक्ष API कॉल | संदिग्ध स्ट्रिंग तुरंत नेटवर्क कॉल में उपयोग की जाती है |
| 2 | स्ट्रिंग असाइन | URL एक चर को सौंपा गया, फिर नेटवर्क कॉल में पास किया गया |
| 3 | स्ट्रिंग निर्माण | संयोजन द्वारा URL बनाया गया ("http://" + var + "/path") — अस्पष्टता तकनीक |
| 4 | स्ट्रिंग इंटरपोलेशन | इंटरपोलेशन द्वारा URL का निर्माण ($"{part1}{part2}") |
| 5 | केवल कैरेक्टर इंटरपोलेशन | एक कैरेक्टर एरे से कैरेक्टर-दर-कैरेक्टर URL — उन्नत अस्पष्टता |
| 6 | DefaultInterpolatedStringHandler | स्थैतिक विश्लेषण से स्ट्रिंग छिपाने के लिए उपयोग किया जाने वाला निम्न-स्तरीय इंटरपोलेशन तंत्र |
| 7 | नग्न API कॉल | स्पष्ट स्ट्रिंग के बिना प्रत्यक्ष नेटवर्क कॉल (TcpClient.Connect, Socket.Connect, Process.Start) |
Network: HttpClient, WebClient, DNS, TcpClient, WebSocket
Execution: Process.Start, Assembly.Load, Activator.CreateInstance
Low-level: DllImport, VirtualAlloc, CreateThread, NtCreateThreadEx
System: ManagementObjectSearcher (WMI)
String-based: Concatenation, CharArray, Interpolation, StringBuilder
Suspicious: URL, IP address, .onion address, Base64
स्कोरिंग एल्गोरिथ्म निम्नलिखित को ध्यान में रखता है:
POST /api/PackageScanदिए गए NuGet पैकेज और उसकी पूर्ण निर्भरता वृक्ष को स्कैन करता है।
अनुरोध:
{
"url": "https://www.nuget.org/packages/System.Net.Http/4.3.4"
}
प्रतिक्रिया:
{
"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": [...]
}
}
स्वच्छ आर्किटेक्चर पर आधारित है जिसमें चिंताओं का सख्त पृथक्करण है:
NuReaperBackend/
├── NuReaper.Api/ # API परत — कंट्रोलर, मिडलवेयर, स्टार्टअप
├── NuReaper.Application/ # एप्लिकेशन परत — कमांड, इंटरफ़ेस, DTOs, सत्यापन
├── NuReaper.Domain/ # डोमेन कोर — एंटिटीज, एनम, एब्स्ट्रक्शन
├── NuReaper.Infrastructure/ # कार्यान्वयन — स्कैनर, पार्सर, रिपॉजिटरी
│ └── Repositories/
│ ├── Scanners/ # IL विश्लेषण इंजन
│ │ ├── Analysis/ # ScanModule, ScanMethod, NetworkApiCallScan
│ │ ├── Detectors/ # 7 पैटर्न डिटेक्टर (Pattern1–Pattern7)
│ │ ├── Patterns/ # PatternRegistry (regex: URL, IP, .onion, Base64)
│ │ ├── RiskCalculation/# खतरा स्कोरिंग एल्गोरिथ्म
│ │ ├── Finders/ # IL निर्देशों में API कॉल का पता लगाना
│ │ ├── VariableAnalysis/# IL में चर मानों की ट्रैकिंग
│ │ └── StringAnalysis/ # टुकड़ों से स्ट्रिंग का पुनर्निर्माण
│ ├── Parsers/ # .nuspec फ़ाइल पार्सिंग
│ ├── GraphBuilders/ # निर्भरता ग्राफ निर्माण (BFS + पुनरावृत्ति)
│ └── FileHelpers/ # डाउनलोड, निकालना, SHA-256
└── Docker/
├── Dockerfile
└── docker-compose.yml
| क्षेत्र | तकनीक / पैटर्न |
|---|---|
| आर्किटेक्चर | Clean Architecture |
| अंतर-स्तरीय संचार | CQRS + MediatR |
| IL कोड विश्लेषण | dnlib |
| इनपुट सत्यापन | FluentValidation + MediatR Pipeline Behavior |
| ऑब्जेक्ट मैपिंग | AutoMapper |
| लॉगिंग | Serilog (कंसोल + रोलिंग डेली फ़ाइल) |
| API दस्तावेज़ीकरण | Swagger / OpenAPI |
| डेटाबेस | Entity Framework Core + MySQL (Pomelo) |
| HTTP | कनेक्शन पूलिंग के साथ IHttpClientFactory |
| कंटेनरीकरण | Docker + Docker Compose |
| परीक्षण | xUnit + Moq |
Package URL
│
▼
DependencyGraphBuilder ← builds dependency graph from .nuspec files
│ (recursion + BFS, cycle detection)
▼
List of unique packages
│
▼ (parallel, SemaphoreSlim — CPU-1 threads)
NetworkApiCallScan per package
├── DownloadPackageAsync ← fetches .nupkg
├── CalculateSha256 ← integrity verification
├── ExtractNupkgAsync ← unpacks the archive
└── GetAssemblyFiles ← lists .dll files
│
▼ (Parallel.ForEachAsync)
ScanModule (per .dll)
│
▼ (Parallel.ForEach — all types and methods)
ScanMethod (per method)
│
▼ (7 pattern detectors)
Pattern1..7 → FindingSummaryDto
│
▼
CalculateThreatLevel ← score 0–100
│
▼
ScanPackageResultResponse
| पैकेज | उद्देश्य |
|---|---|
dnlib | .NET IL डीकंपाइलेशन और विश्लेषण |
MediatR | CQRS — कमांड/क्वेरी पाइपलाइन |
FluentValidation | अनुरोध सत्यापन |
AutoMapper | क्रॉस-लेयर ऑब्जेक्ट मैपिंग |
Serilog | संरचित लॉगिंग |
Pomelo.EntityFrameworkCore.MySql | MySQL ORM |
Swashbuckle.AspNetCore | Swagger UI |
xUnit + Moq | यूनिट परीक्षण |
यह परियोजना PolyForm Noncommercial License 1.0.0 के तहत उपलब्ध है, वाणिज्यिक उपयोग निषिद्ध है। वाणिज्यिक लाइसेंस या पूछताछ के लिए, संपर्क करें: [email protected]