
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 एक रक्षात्मक/ऑडिट और अधिकृत-मूल्यांकन उपकरण है। इसे केवल उन्हीं डायरेक्टरी के विरुद्ध चलाएँ जिनका मूल्यांकन करने के लिए आप अधिकृत हैं।
| क्षमता | विवरण |
|---|---|
| ट्रांसपोर्ट | WCF net.tcp (TCP/9389) पर ADWS — MC-NMF फ्रेमिंग, MS-NNS हैंडशेक, MC-NBFS/NBFSE बाइनरी XML, WS-Enumeration/WS-Transfer SOAP |
| प्रमाणीकरण | NTLMv2 (sign + seal) और Kerberos (ccache / keytab / पासवर्ड; RFC 4121 sealed GSS) |
| Recon कलेक्टर | 31 मॉड्यूल (नीचे देखें) → प्रति-मॉड्यूल CSV |
| रिपोर्टिंग | स्टाइल किया गया मल्टी-शीट XLSX वर्कबुक + स्व-निहित HTML डैशबोर्ड (खोज/क्रमबद्ध करें, severity बैज, scroll-spy) |
| सुरक्षा ऑडिट | 30 read-only नियम (ADCS ESC1–4/9 सहित) → severity-रैंक किया गया JSON, डैशबोर्ड में भी प्रदर्शित |
| प्रॉक्सी / जंप होस्ट | HTTP CONNECT, SOCKS5/5h, SOCKS4/4a (प्रॉक्सी प्रमाणीकरण + रिमोट DNS के साथ) |
| पेजिंग | सर्वर-साइड WS-Enumeration Pull पेजिंग, कॉन्फ़िगर करने योग्य पेज आकार |
| ऑफ़लाइन रिपोर्टिंग | पहले एकत्र किए गए CSVs से XLSX/HTML पुनर्निर्माण करें, DC की आवश्यकता नहीं |
| निर्भरताएँ | शुद्ध 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 30 read-only नियम चलाता है। फाइंडिंग्स में एक नियम आईडी, severity, प्रभावित
ऑब्जेक्ट, साक्ष्य, और उपचार होते हैं, और इन्हें Adit-Audit.json में लिखा जाता है (और,
जब -collect के साथ संयोजित किया जाता है, तो एक "Audit Findings" अनुभाग जो
डैशबोर्ड में सबसे आगे रहता है)। इंजन कभी भी गुप्त विशेषता मान (LAPS / gMSA /
BitLocker) नहीं पढ़ता, भले ही recon कलेक्टर पढ़ सकते हैं।
| नियम | गंभीरता | यह क्या चिह्नित करता है |
|---|---|---|
| AD-DOM-010 | गंभीर | गैर-Tier-0 प्रिंसिपल द्वारा धारित DCSync (प्रतिकृति) अधिकार |
| AD-ACL-001/005/006/007/011–016 | गंभीर | किसी विशेषाधिकार प्राप्त ऑब्जेक्ट पर खतरनाक नियंत्रण (GenericAll/Write, WriteDACL/Owner, ForceChangePassword, Write SPN / KeyCredentialLink / member / AllowedToAct) |
| AD-SDH-001/002 | गंभीर | AdminSDHolder का अप्रत्याशित नियंत्रण / स्वामी |
| AD-CS-001 | गंभीर–मध्यम | ESC1 — प्रमाणपत्र टेम्पलेट नामांकनकर्ता-प्रदत्त विषय की अनुमति देता है |
| AD-CS-002 | गंभीर–मध्यम | ESC2 — Any-Purpose / बिना-EKU प्रमाणपत्र टेम्पलेट |
| AD-CS-003 | उच्च–मध्यम | ESC3 — Certificate Request Agent टेम्पलेट |
| AD-CS-004 | उच्च | ESC4 — प्रमाणपत्र टेम्पलेट पर कमजोर पहुँच नियंत्रण |
| AD-CS-009 | उच्च | ESC9 — प्रमाणपत्र टेम्पलेट में सुरक्षा एक्सटेंशन का अभाव |
| AD-CS-005 | गंभीर/उच्च | ESC5 — किसी PKI ऑब्जेक्ट पर खतरनाक नियंत्रण (NTAuthCertificates, CA store, CA ऑब्जेक्ट) |
| AD-CS-006 | सूचना | AD CS मौजूद है — ESC6/ESC7/ESC8 के लिए होस्ट-स्तरीय सत्यापन आवश्यक है (ADWS पर अवलोकनीय नहीं) |
| AD-DOM-008 | उच्च | डोमेन-व्यापी रूप से प्रतिवर्ती पासवर्ड एन्क्रिप्शन सक्षम |
| AD-USR-001 | उच्च | Kerberos प्री-ऑथ अक्षम (AS-REP roastable) |
| AD-USR-009 | उच्च | खाता केवल DES एन्क्रिप्शन का उपयोग करता है |
| AD-CMP-006 | उच्च | गैर-DC पर अनियंत्रित प्रत्यायोजन (Unconstrained delegation) |
| AD-KCL-001 | उच्च | विशेषाधिकार प्राप्त खाते पर Key Credential (shadow credential) |
| AD-KRB-001 | उच्च | krbtgt पासवर्ड पुराना है |
| AD-DOM-005 | मध्यम | Machine Account Quota > 0 (कोई भी उपयोगकर्ता कंप्यूटर जोड़ सकता है) |
| AD-USR-002 | मध्यम | Kerberoastable सेवा खाता (विशेषाधिकार प्राप्त होने पर उच्च) |
| AD-USR-005 | मध्यम | PASSWD_NOTREQD सेट है |
| AD-USR-006 | मध्यम | विशेषाधिकार प्राप्त खाते का पासवर्ड कभी समाप्त नहीं होता |
| AD-USR-011 | मध्यम | विशेषाधिकार प्राप्त खाते का पासवर्ड पुराना है |
| AD-CMP-008 | मध्यम | संसाधन-आधारित प्रतिबंधित प्रत्यायोजन (Resource-based constrained delegation) कॉन्फ़िगर किया गया |
| AD-CMP-012 | मध्यम | लीगेसी / असमर्थित ऑपरेटिंग सिस्टम |
| AD-GRP-009 | मध्यम | विशेषाधिकार प्राप्त समूह में विदेशी सुरक्षा प्रिंसिपल |
| AD-GRP-020 | मध्यम | primaryGroupID के माध्यम से छिपी विशेषाधिकार प्राप्त सदस्यता |
| AD-TRU-001/003 | उच्च/मध्यम | SID फ़िल्टरिंग के बिना / SID इतिहास के साथ ट्रस्ट |
| AD-DNS-003/004 | मध्यम/निम्न | WPAD / ISATAP रिकॉर्ड मौजूद |
| AD-CMP-011 | निम्न | पुराना कंप्यूटर खाता |
| AD-INT-005 | उच्च | sIDHistory में विशेषाधिकार प्राप्त SID शामिल है |
| AD-USR-020 | उच्च | userPassword / unixUserPassword में संग्रहीत पुनर्प्राप्त करने योग्य पासवर्ड |
| AD-USR-021 | उच्च | description / info / comment में संभावित रूप से छोड़ा गया पासवर्ड (heuristic) |
| AD-DOM-012 | उच्च/मध्यम | Pre-Windows 2000 Compatible Access में Everyone / Anonymous / Authenticated Users |
थ्रेशोल्ड समायोज्य हैं: -krbtgt-max-age, -priv-pwd-max-age, -stale-days.
ADCS नोट: ESC1–ESC5 और ESC9 का मूल्यांकन ADWS पर AD ऑब्जेक्ट्स से किया जाता है। ESC6 (
EDITF_ATTRIBUTESUBJECTALTNAME2), ESC7 (CA भूमिका ACLs) और ESC8 (वेब नामांकन / NTLM रिले) 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 द्वारा endpoint से मिलाया जाता है। इसे खोजने के लिए, उदाहरण के लिए, 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'