1
Ringkasan Proyek
Deep Eye versi 1.4.0 dengan code name Hanzou adalah pemindai penetrasi berbasis AI yang dijalankan dari satu titik masuk CLI, deep_eye.py. Metadata paket mendeskripsikannya sebagai "Advanced AI-Driven Penetration Testing Tool" dengan lisensi MIT, dan menyatakan python_requires=">=3.8" (setup.py:23-311, setup.py:33-472). Badge di README menegaskan angka yang sama: versi 1.4.0, Python 3.8+, dan code name Hanzou (README.md:13-183).
Paket memasang satu perintah, deep-eye, lewat console_scripts yang menunjuk ke deep_eye:main (setup.py:49-534). Saat config/config.yaml belum ada, main() menjalankan wizard run_onboard, lalu memuat konfigurasi lewat ConfigLoader.load (deep_eye.py:238-2645).
Alur tingkat tinggi
graph TD
cli["deep_eye.py: main()"] --> cfg["ConfigLoader.load / run_onboard"]
cli --> aim["AIProviderManager"]
aim --> prov["Adapter provider: openai, claude, grok, ollama, ..."]
cli --> engine["ScannerEngine.scan()"]
engine --> recon["run_reconnaissance()"]
engine --> crawl["crawl_recursive()"]
engine --> vscan["VulnerabilityScanner.scan()"]
vscan --> feat["_feature_testers: 27 entri"]
engine --> post["Pipeline pasca-scan"]
post --> dedupe["dedupe_findings()"]
post --> rag["CVERagIndex.search()"]
post --> comp["enrich_vulnerabilities()"]
post --> triage["AITriage / BountyWriter"]
engine --> rep["ReportGenerator.generate()"]
rep --> out["html, pdf, json, sarif, junit, csv, xlsx"]
style aim fill:#f59e0b,color:#000
style prov fill:#f59e0b,color:#000
style feat fill:#f59e0b,color:#000
style post fill:#8b5cf6,color:#fff
style rag fill:#8b5cf6,color:#fff
style comp fill:#8b5cf6,color:#fff
style rep fill:#2d7d46,color:#fff
style out fill:#336791,color:#fff
%% fig: Alur tingkat tinggi Deep Eye
%% desc: CLI menyiapkan provider AI dan ScannerEngine, menjalankan fase scan, lalu mengalirkan temuan ke pipeline pasca-scan dan pembuatan laporan.main() merakit AIProviderManager dari konfigurasi, memanggil set_provider untuk provider yang dipilih, lalu menyerahkan ScannerEngine dengan depth, threads, proxy, custom_headers, dan cookies (deep_eye.py:297-3146). Pemanggilan scanner.scan() membawa empat sakelar fase: enable_recon, full_scan, quick_scan, dan scan_subdomains (deep_eye.py:342-3477). Signature scan() itu mengembalikan satu Dict, dan pada akhirnya mengisi pentest_state, end_time, duration, serta mengirim notifikasi penyelesaian sebelum berpindah ke PentestPhase.COMPLETED (core/scanner_engine.py:682-7008, core/scanner_engine.py:943-9619).
Lapisan AI provider
AIProviderManager._initialize_providers membuat instance adapter hanya untuk kunci ai_providers yang enabled: true. Setiap kegagalan impor dicatat sebagai warning dan tidak menghentikan proses (ai_providers/provider_manager.py:28-13710). README mengiklankan failover lintas 11 provider (README.md:2211), sedangkan _initialize_providers memuat blok untuk 12 kunci, termasuk nvidia_nim (ai_providers/provider_manager.py:130-13712).
| Kunci konfigurasi | Kelas adapter | Berkas |
|---|---|---|
openai | OpenAIProvider | ai_providers/openai_provider.py |
claude | ClaudeProvider | ai_providers/claude_provider.py |
grok | GrokProvider | ai_providers/grok_provider.py |
ollama | OllamaProvider | ai_providers/ollama_provider.py |
mistral | MistralProvider | ai_providers/mistral_provider.py |
openrouter | OpenRouterProvider | ai_providers/openrouter_provider.py |
orcarouter | OrcaRouterProvider | ai_providers/orcarouter_provider.py |
gemini | GeminiProvider | ai_providers/gemini_provider.py |
groq | GroqProvider | ai_providers/groq_provider.py |
lmstudio | LMStudioProvider | ai_providers/lmstudio_provider.py |
litellm | LiteLLMProvider | ai_providers/litellm_provider.py |
nvidia_nim | NvidiaNIMProvider | ai_providers/nvidia_nim_provider.py |
Setiap baris berasal dari blok inisialisasi yang sama (ai_providers/provider_manager.py:28-13710). generate() menetapkan max_retries = 3 dan berpindah provider ketika percobaan aktif gagal (ai_providers/provider_manager.py:148-16013). SDK yang menjadi bahan lapisan ini tercantum di requirements.txt: openai, anthropic, ollama, mistralai, google-genai, litellm, dan google-generativeai (requirements.txt:7-1414). Rincian pemilihan model dan failover ada di Lapisan AI Provider.
Pemindai kerentanan
VulnerabilityScanner membaca daftar enabled_checks dari bagian vulnerability_scanner di konfigurasi (core/vulnerability_scanner.py:31-3915). scan() hanya menjalankan pemeriksaan yang namanya muncul di daftar itu; contohnya sql_injection dan xss dipanggil berurutan berikut pencatatan start_attack/end_attack ke state manager (core/vulnerability_scanner.py:125-13916). Di luar pemeriksaan inti, konstruktor merakit 27 pasangan check_name/kelas ke _feature_testers, dan entri yang gagal diimpor dilewati tanpa error (core/vulnerability_scanner.py:71-9917).
README mengiklankan 50+ pemeriksaan kerentanan (README.md:2211), sementara docstring kelas menyebut "45+ attack methods" (core/vulnerability_scanner.py:31-3218). Tiap temuan berbentuk dict dengan kunci type, severity, url, parameter, payload, evidence, dan remediation (docs/MODULES.md:17-1919).
| Kelompok | Contoh nilai enabled_checks | Implementasi |
|---|---|---|
| Pemeriksaan inti | sql_injection, xss, command_injection, ssrf, xxe | metode _check_* di kelas |
| Feature tester | cors_csp, jwt_deep, graphql_deep, idor, stored_xss | modul terpisah di modules/ |
| Mobile | frida_mobile, android_static, ios_plist | modul terpisah di modules/ |
Katalog lengkap ada di Pemindai Kerentanan dan Katalog Modul.
Pipeline pasca-scan
Sebelum pemindaian URL, ScannerEngine.scan mengambil hasil crawl_recursive, menambahkan endpoint dari openapi_ingest bila openapi.enabled, lalu meminta AIAttackPlanner.plan menentukan urutan pemeriksaan bila ai_planner.enabled (core/scanner_engine.py:796-84520). Sesudah itu temuan melewati beberapa tahap pengayaan berurutan:
dedupe_findingsdanFPReplay.replaymerapikan daftar temuan (core/scanner_engine.py:851-86721).CVERagIndex.searchmencari CVE mirip dengantop_kdari konfigurasiragdan mengisicve_references(core/scanner_engine.py:878-91022).enrich_vulnerabilitiesmenambahkan kontrol dari framework yang diminta (core/scanner_engine.py:912-92323).AITriage.triage_vulnerabilitiesmembuang false positive, laluBountyWriter.generate_reportsmenulis laporan per temuan (core/scanner_engine.py:925-94124).
Urutan itu disengaja: komentar di kode menegaskan triage berjalan setelah RAG dan compliance, tetapi sebelum bounty writer (core/scanner_engine.py:925-94124). Rincian tiap tahap dibahas di CVE Intelligence dan RAG dan Alur Scan.
Laporan dan keluaran
graph LR
cli["--formats"] --> resolve{"Resolusi format"}
cfg["reporting.formats"] --> resolve
dflt["reporting.default_format"] --> resolve
resolve --> loop["geser formats satu per satu"]
loop --> ext["ext_map: junit -> junit.xml"]
ext --> gen["ReportGenerator.generate()"]
gen --> files["deep_eye_{domain}_{timestamp}.{ext}"]
style resolve fill:#f59e0b,color:#000
style loop fill:#8b5cf6,color:#fff
style gen fill:#2d7d46,color:#fff
style files fill:#336791,color:#fff
%% fig: Resolusi format laporan
%% desc: Format dipilih dari CLI, lalu konfigurasi, lalu default; setiap format memakai satu stem berkas yang sama.Prioritas pemilihan format berurutan: --formats dari CLI, lalu reporting.formats, lalu reporting.default_format yang defaultnya html (deep_eye.py:381-38725). Setiap format dipetakan ke ekstensi lewat ext_map, dan semua berkas memakai satu stem deep_eye_<domain>_<timestamp> (deep_eye.py:403-42826). ReportGenerator.generate() meneruskan junit ke utils.exports lewat build_junit_xml (core/report_generator.py:42-5527).
| Format | Ekstensi berkas |
|---|---|
html | .html |
pdf | .pdf |
json | .json |
sarif | .sarif.json |
junit | .junit.xml |
csv | .csv |
xlsx | .xlsx |
Pemetaan ini diambil apa adanya dari ext_map (deep_eye.py:403-42826). Rilis 1.4 menambahkan ekspor JUnit XML, CSV, dan XLSX beserta flag --formats; bagian yang sama mencatat pemetaan PCI-DSS v4.0, SOC 2, dan ISO 27001:2022 (CHANGELOG.md:8-1628, CHANGELOG.md:18-2329). Daftar format, opsi ekspor, dan isi tiap berkas dibahas di Pelaporan dan Ekspor.
Mode diff dan struktur repository
Flag --diff BASELINE CURRENT melewati fase scan sepenuhnya. Mode ini memuat dua JSON, memanggil diff_scans, merender hasil sesuai --diff-format, lalu mencetak New, Fixed, Severity Changed, Unchanged, dan Net Delta (deep_eye.py:207-23530). Fitur yang sama menormalkan URL agar pencocokan antar-scan akurat (CHANGELOG.md:35-3931). Alur retest dan interpretasi delta ada di Scan Diff dan Retest.
Direktori tingkat atas memisahkan CLI (deep_eye.py), mesin dan pelaporan (core/), adapter provider (ai_providers/), modul serangan dan pipeline (modules/), utilitas termasuk ekspor (utils/), template YAML (templates/), plugin kustom (plugins/), dan suite pytest (tests/) (README.md:204-22232).
⚠️ Deep Eye hanya untuk pengujian keamanan yang berizin. README menegaskan pemakaian terbatas pada sistem yang dimiliki atau memiliki izin tertulis, bahwa akses tanpa izin melanggar hukum, dan bahwa penulis tidak menanggung tanggung jawab atas penyalahgunaan (README.md:252-25933).
Sisanya dijelaskan pada halaman Arsitektur, Instalasi dan Konfigurasi Awal, Antarmuka CLI, Template YAML dan Plugin Kustom, dan Skills Agen dan Pengujian.