
Active Directory recon और ADWS (net.tcp/9389) पर read-only security audit, Go में
adit एक सिंगल-बाइनरी Active Directory रेकॉनिसेंस और रीड-ओनली सिक्योरिटी-ऑडिट टूल है जो LDAP के बजाय ADWS (Active Directory Web Services, TCP/9389) के माध्यम से Domain Controller से बात करता है।
एक adit खदान का क्षैतिज प्रवेश द्वार है — अंदर आने का शांत रास्ता। LDAP/389 के बजाय
ADWS के माध्यम से AD को क्वेरी करने का मतलब है कि ट्रैफ़िक WCF net.tcp फ़्रेम्ड,
एक असामान्य पोर्ट पर बाइनरी-XML SOAP है, इसलिए क्लासिक LDAP की तुलना में इसका
निरीक्षण, फ़िल्टरिंग, या सिग्नेचर होने की संभावना बहुत कम है — जबकि यह अभी भी वही
डायरेक्टरी डेटा लौटाता है। adit पूर्ण ADWS प्रोटोकॉल स्टैक को Go में लागू करता है,
बिना किसी बाहरी रनटाइम निर्भरता के।
┌────────────┐ net.tcp/9389 ┌──────────────┐
│ adit │ ───────────────▶ │ ADWS on DC │ ──▶ local LDAP
│ (Linux) │ NMF · NNS · │ (port 9389) │
│ │ NBFSE · SOAP └──────────────┘
└────────────┘
adit एक डिफेंसिव/ऑडिट और अधिकृत-मूल्यांकन टूल है। इसे केवल उन डायरेक्टरीज़ के विरुद्ध चलाएँ जिनका मूल्यांकन करने के लिए आप अधिकृत हैं।
| Capability | Details |
|---|---|
| Transport | ADWS over WCF net.tcp (TCP/9389) — MC-NMF framing, MS-NNS handshake, MC-NBFS/NBFSE binary XML, WS-Enumeration/WS-Transfer SOAP |
| Authentication | NTLMv2 (sign + seal) और Kerberos (ccache / keytab / password; RFC 4121 sealed GSS) |
| Recon collectors | 31 मॉड्यूल (नीचे देखें) → प्रति-मॉड्यूल CSV |
| Reporting | स्टाइल्ड मल्टी-शीट XLSX वर्कबुक + सेल्फ-कंटेन्ड HTML डैशबोर्ड (search/sort, severity badges, scroll-spy) |
| Security audit | 27 रीड-ओनली नियम (incl. ADCS ESC1–4/9) → severity-रैंक्ड JSON, डैशबोर्ड में भी दिखाया गया |
| Proxy / jump host | HTTP CONNECT, SOCKS5/5h, SOCKS4/4a (प्रॉक्सी ऑथ + रिमोट DNS के साथ) |
| Paging | सर्वर-साइड WS-Enumeration Pull पेजिंग, कॉन्फ़िगर करने योग्य पेज साइज़ |
| Offline reporting | पहले से एकत्र किए गए CSVs से XLSX/HTML पुनर्निर्माण करें, DC की आवश्यकता नहीं |
| Dependencies | शुद्ध Go; कोई LDAP लाइब्रेरी नहीं, कोई .NET नहीं, कोई बाहरी सेवाएँ नहीं |
forest, domain, trusts, sites, subnets, schemahistory, dcs,
users, userspns, groups, computers, computerspns, ous, gpos,
gplinks, passwordpolicy, fgpp, dnszones, dnsrecords, kerberoastable,
asreproastable, krbtgt, adcs, cas, laps, protectedgroups,
groupmembers, gmsa, dmsa, printers, bitlocker
ADCS (adcs) ESC1–ESC4/ESC9 को फ़्लैग करता है; laps रिपोर्ट करता है कि कौन प्रत्येक पासवर्ड पढ़ सकता है;
protectedgroups Protected Users का ऑडिट करता है। वर्तमान सूची के लिए adit -list-modules चलाएँ।
-audit 27 रीड-ओनली नियम चलाता है। फ़ाइंडिंग्स में एक रूल id, severity, प्रभावित
ऑब्जेक्ट्स, साक्ष्य, और उपचार होते हैं, और इन्हें Adit-Audit.json में लिखा जाता है (और,
जब -collect के साथ संयोजित किया जाता है, तो एक "Audit Findings" अनुभाग जो
डैशबोर्ड का नेतृत्व करता है)। इंजन कभी भी गुप्त एट्रिब्यूट मान (LAPS / gMSA /
BitLocker) नहीं पढ़ता, भले ही रेकॉन कलेक्टर पढ़ सकते हैं।
| Rule | Severity | What it flags |
|---|---|---|
| AD-DOM-010 | Critical | गैर-Tier-0 प्रिंसिपल द्वारा धारित DCSync (replication) अधिकार |
| AD-ACL-001/005/006/007/011–016 | Critical | विशेषाधिकार प्राप्त ऑब्जेक्ट पर खतरनाक नियंत्रण (GenericAll/Write, WriteDACL/Owner, ForceChangePassword, Write SPN / KeyCredentialLink / member / AllowedToAct) |
| AD-SDH-001/002 | Critical | AdminSDHolder का अप्रत्याशित नियंत्रण / स्वामी |
| AD-CS-001 | Critical–Medium | ESC1 — सर्टिफिकेट टेम्पलेट नामांकनकर्ता-आपूर्ति विषय की अनुमति देता है |
| AD-CS-002 | Critical–Medium | ESC2 — Any-Purpose / no-EKU सर्टिफिकेट टेम्पलेट |
| AD-CS-003 | High–Medium | ESC3 — Certificate Request Agent टेम्पलेट |
| AD-CS-004 | High | ESC4 — सर्टिफिकेट टेम्पलेट पर कमज़ोर एक्सेस कंट्रोल |
| AD-CS-009 | High | ESC9 — सर्टिफिकेट टेम्पलेट में सुरक्षा एक्सटेंशन का अभाव |
| AD-CS-005 | Critical/High | ESC5 — PKI ऑब्जेक्ट का खतरनाक नियंत्रण (NTAuthCertificates, CA store, CA object) |
| AD-CS-006 | Info | AD CS मौजूद — ESC6/ESC7/ESC8 को होस्ट-स्तरीय सत्यापन की आवश्यकता है (ADWS पर अवलोकनीय नहीं) |
| AD-DOM-008 | High | डोमेन-व्यापी रिवर्सिबल पासवर्ड एन्क्रिप्शन सक्षम |
| AD-USR-001 | High | Kerberos pre-auth अक्षम (AS-REP roastable) |
| AD-USR-009 | High | खाता केवल DES एन्क्रिप्शन का उपयोग करता है |
| AD-CMP-006 | High | गैर-DC पर Unconstrained delegation |
| AD-KCL-001 | High | विशेषाधिकार प्राप्त खाते पर Key Credential (shadow credential) |
| AD-KRB-001 | High | krbtgt पासवर्ड स्टेल है |
| AD-DOM-005 | Medium | Machine Account Quota > 0 (कोई भी उपयोगकर्ता कंप्यूटर जॉइन कर सकता है) |
| AD-USR-002 | Medium | Kerberoastable सेवा खाता (विशेषाधिकार प्राप्त होने पर High) |
| AD-USR-005 | Medium | PASSWD_NOTREQD सेट |
| AD-USR-006 | Medium | विशेषाधिकार प्राप्त खाते का पासवर्ड कभी समाप्त नहीं होता |
| AD-USR-011 | Medium | विशेषाधिकार प्राप्त खाते का पासवर्ड स्टेल है |
| AD-CMP-008 | Medium | Resource-based constrained delegation कॉन्फ़िगर किया गया |
| AD-CMP-012 | Medium | लेगेसी / असमर्थित ऑपरेटिंग सिस्टम |
| AD-GRP-009 | Medium | विशेषाधिकार प्राप्त समूह में विदेशी सुरक्षा प्रिंसिपल |
| AD-GRP-020 | Medium | primaryGroupID के माध्यम से छिपी विशेषाधिकार प्राप्त सदस्यता |
| AD-TRU-001/003 | High/Medium | SID फ़िल्टरिंग के बिना / SID इतिहास के साथ ट्रस्ट |
| AD-DNS-003/004 | Medium/Low | WPAD / ISATAP रिकॉर्ड मौजूद |
| AD-CMP-011 | Low | स्टेल कंप्यूटर खाता |
| AD-INT-005 | High | sIDHistory में विशेषाधिकार प्राप्त SID शामिल है |
थ्रेशोल्ड ट्यून करने योग्य हैं: -krbtgt-max-age, -priv-pwd-max-age, -stale-days.
ADCS नोट: ESC1–ESC5 और ESC9 का मूल्यांकन ADWS पर AD ऑब्जेक्ट्स से किया जाता है। ESC6 (
EDITF_ATTRIBUTESUBJECTALTNAME2), ESC7 (CA role ACLs) और ESC8 (web enrollment / NTLM relay) CA होस्ट रजिस्ट्री/HTTP एंडपॉइंट्स में रहते हैं और ADWS पर अवलोकनीय नहीं हैं —AD-CS-006फ़्लैग करता है कि एक CA मौजूद है ताकि उन्हें होस्ट पर सत्यापित किया जा सके (जैसे Certipy के साथ)।
Go 1.26+ की आवश्यकता है। कोई अन्य बिल्ड निर्भरता नहीं।
# Build the binary
go build -o adit ./cmd/adit
./adit -version
# …or run without installing
go run ./cmd/adit -h
# Cross-compile release archives for linux/windows/darwin (amd64+arm64) into dist/
bash scripts/build-release.sh
-fqdn DC का वास्तविक FQDN होना चाहिए (इसका IP नहीं): ADWS SOAP To हेडर
WCF के AddressFilter द्वारा एंडपॉइंट के विरुद्ध मिलान किया जाता है। इसे खोजें, उदाहरण के लिए,
nslookup -type=SRV _ldap._tcp.dc._msdcs.<domain> <dc-ip>।
adit -dc <host> -fqdn <dc-fqdn> -d <DOMAIN> -u <user> -p <pass> [flags]
# RootDSE handshake only (verifies auth + the full protocol stack)
adit -dc 10.0.0.10 -fqdn dc01.example.local -d EXAMPLE.LOCAL -u user -p 'pass'
# Run every collector -> ./report/CSV-Files/*.csv + Adit-Report.{xlsx,html}
adit -dc 10.0.0.10 -fqdn dc01.example.local -d EXAMPLE.LOCAL -u user -p 'pass' \
-collect all -o ./report
# A subset of collectors
adit -dc 10.0.0.10 -fqdn dc01.example.local -d EXAMPLE.LOCAL -u user -p 'pass' \
-collect users,groups,computers,kerberoastable
# Audit only -> Adit-Audit.json
adit -dc 10.0.0.10 -fqdn dc01.example.local -d EXAMPLE.LOCAL -u user -p 'pass' -audit