
AD, ADCS और Entra ID के लिए Rust आधारित attack-path विश्लेषण
ओपन-सोर्स Active Directory, ADCS और Entra ID / Azure आक्रमण-पथ विश्लेषण, जो बहुत बड़े वातावरणों के लिए Rust में बनाया गया है। CopperHound SharpHound, bloodhound-python, ldapdomaindump और AzureHound आउटपुट, कच्चे LDIF डंप और Sysinternals AD Explorer स्नैपशॉट को एक मेमोरी-मैप्ड ग्राफ़ स्टोर में अंतर्ग्रहण करता है और पथ, एक्सपोज़र और CHQL क्वेरी सीधे उसी पर चलाता है, बिना किसी ग्राफ़ डेटाबेस के। एक कंटेनर वेब UI और REST API दोनों को सर्व करता है।

![]() |
![]() |
![]() |
स्क्रीनशॉट में काल्पनिक डेमो डेटा (scripts/demo_data.py) का उपयोग किया गया है।
दस्तावेज़ीकरण: उपयोगकर्ता गाइड · परिनियोजन · डेटा स्रोत · REST API · CHQL · एज संदर्भ · प्रदर्शन · आर्किटेक्चर
docker compose up -d --build
docker compose logs copperhound | grep "Initial admin password"
http://127.0.0.1:8090 खोलें, admin के रूप में साइन इन करें, अपनी SharpHound /
AzureHound .zip या .json फ़ाइलें Data टैब पर ड्रॉप करें और Rebuild
graph दबाएँ। COPPERHOUND_ADMIN_PASSWORD पासवर्ड सेट करता है, और
COPPERHOUND_PORT / COPPERHOUND_HOST प्रकाशित पते को बदलते हैं (डिफ़ॉल्ट
127.0.0.1:8090, ताकि यह 8080 पर BloodHound के साथ-साथ चल सके)।
अभी तक कोई डेटा नहीं? python scripts/demo_data.py demo/ एक गढ़ा हुआ
वातावरण (AD, ADCS और Entra ID, जिसमें जानबूझकर कमज़ोरियाँ हैं) लिखता है जिसे
अपलोड किया जा सके; देखें
Try it with demo data।
Docker के बिना: cd web && npm ci && npm run build, फिर
cargo run --release -- serve (डिफ़ॉल्ट: 127.0.0.1:8080, डेटा ./data में,
UI ./web/dist से)।
खाते, API टोकन, वॉच फ़ोल्डर, निर्धारित रिपोर्ट, परिवर्तन अलर्ट, HTTPS और सिंगल साइन-ऑन (OpenID Connect, SAML 2.0): docs/DEPLOYMENT.md।
हर ingest के बाद बैकग्राउंड में गणना की जाती है:
CLI समकक्ष: copperhound findings corp.chg, copperhound plan corp.chg --steps 10।
एक WebGL graph canvas (sigma.js) जिसमें search, pathfinding, node details, हर derived edge के लिए "How was this derived?", CHQL editor और query library, और findings, remediation, zones, posture, reports, data और administration के लिए पेज हैं। स्क्रीनशॉट के साथ walkthrough: docs/USER_GUIDE.md।
एक read-only Cypher dialect जिसे native graph operations में संकलित किया जाता है — कई
patterns और MATCH clauses, OPTIONAL MATCH, WITH, aggregation,
ORDER BY/SKIP/LIMIT, UNION, undirected और variable-length hops, path
functions और pattern predicates। अधिकांश BloodHound CE और legacy queries
बिना बदलाव के चलते हैं; देखें CHQL reference and Cypher compatibility table।
MATCH p = shortestPath((u:User {name:'[email protected]'})-[*1..]->(t {tier0:true})) RETURN p
MATCH p = allShortestPaths((g:Group)-[*1..]->(t {tier0:true})) WHERE g.name STARTS WITH 'DOMAIN USERS@' RETURN p
MATCH (u:User {hasspn:true, enabled:true}) WHERE u.pwdlastset < 1600000000 RETURN u.name, u.pwdlastset
MATCH (g:Group)-[:AdminTo]->(c:Computer) RETURN g.name, count(c)
MATCH (p)-[r:ADCSESC1|ADCSESC6a]->(d:Domain) RETURN p, r, d
MATCH (n {owned:true}), (m:Group) WHERE m.objectid ENDS WITH '-512' MATCH p = shortestPath((n)-[*1..]->(m)) RETURN p
MATCH (dc)-[:MemberOf*0..]->(g:Group) WHERE g.objectid ENDS WITH '-516' WITH collect(dc) AS dcs
MATCH (c:Computer {unconstraineddelegation:true}) WHERE NOT c IN dcs RETURN c
कमांड लाइन पर: copperhound query corp.chg "MATCH …"। days_ago(n) सापेक्ष टाइमस्टैम्प देता है, जैसे WHERE u.lastlogontimestamp < days_ago(90)।
UI में 15 श्रेणियों (Domain Information, Dangerous Privileges, Kerberos, Delegation, ACL Abuse, Sessions & Lateral Movement, GPO & OU, Hygiene, Shortest Paths, Tier Zero, Owned, ADCS, Azure / Entra ID, Azure Resources और Hybrid) में 159 पूर्वनिर्मित क्वेरीज़ शामिल हैं, प्रत्येक को टैग किया गया है और एक सिंथेटिक ग्राफ़ पर परखा गया है। आपकी अपनी क्वेरीज़ को सर्वर-साइड सहेजा जा सकता है।