1"use strict";(self.webpackChunkveil_framework=self.webpackChunkveil_framework||[]).push([[542],{4854:function(e,n,t){t.r(n),t.d(n,{Head:function(){return E},default:function(){return g}});var a=t(8453),r=t(6540);function l(e){const n=Object.assign({h1:"h1",p:"p",a:"a",h2:"h2",ul:"ul",li:"li",strong:"strong",h3:"h3",code:"code",ol:"ol",hr:"hr",em:"em"},(0,a.RP)(),e.components);return r.createElement(r.Fragment,null,r.createElement(n.h1,null,"Mastering Veil-PowerView: Active Directory Reconnaissance Techniques (2026)"),"\n",r.createElement(n.p,null,"Active Directory is the backbone of enterprise identity management, and it is also the richest reconnaissance target an attacker encounters after gaining initial access. ",r.createElement(n.a,{href:"/veil-powerview/"},"Veil-PowerView")," provides a comprehensive toolkit for enumerating AD environments â users, groups, trusts, GPOs, ACLs, and delegation configurations â all through standard LDAP queries that blend with normal domain traffic."),"\n",r.createElement(n.p,null,"Understanding what PowerView reveals about your AD environment is essential for defenders because every piece of information an attacker can enumerate through PowerView is information you should be protecting, monitoring, or restructuring. This article covers the current state of AD reconnaissance techniques, what changed in 2025â26, and practical detection and hardening strategies."),"\n",r.createElement(n.h2,null,"What Changed Recently"),"\n",r.createElement(n.p,null,"AD reconnaissance with PowerView has evolved alongside changes in the AD security landscape:"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"LDAP channel binding and signing enforcement")," â Microsoft has been tightening LDAP security. Windows Server 2025 enforces LDAP signing by default. PowerView adapts by using authenticated LDAP sessions that comply with signing requirements."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Tiered administration models")," â More organizations implement the Microsoft ESAE (Enhanced Security Administrative Environment) model or derivatives. PowerView enumeration helps red teams validate whether tiering is actually enforced."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"AD CS (Certificate Services) enumeration")," â Following the ESC1-ESC8 research, AD CS enumeration has become a standard part of AD reconnaissance. PowerView extensions and complementary tools enumerate certificate templates, CAs, and enrollment permissions."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Azure AD / Entra ID hybrid enumeration")," â Modern environments are hybrid. PowerView handles on-premises AD; complementary tools cover the Azure/Entra ID side. Defenders need to monitor both planes."),"\n"),"\n",r.createElement(n.h2,null,"Core Reconnaissance Functions"),"\n",r.createElement(n.p,null,"The ",r.createElement(n.a,{href:"/veil-powerview-usage-guide/"},"PowerView usage guide")," covers the full command reference. Here we focus on the functions that matter most for detection and defense:"),"\n",r.createElement(n.h3,null,"Domain and Trust Enumeration"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-Domain"))," â Returns domain object information including domain controllers, functional level, and trust relationships"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-DomainTrust"))," â Enumerates all trust relationships. Bi-directional trusts between forests are particularly interesting to attackers because they enable cross-forest access."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-Forest"))," â Maps the forest structure including child domains and trust chains"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why it matters for defenders:")," Trust enumeration reveals lateral movement paths between domains. If a trust exists that you did not expect or that is no longer needed, it is an unnecessary attack surface."),"\n",r.createElement(n.h3,null,"User and Group
1Enumeration"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-DomainUser"))," â Enumerates all domain users with attributes including group memberships, last logon, password last set, and service principal names"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-DomainGroup"))," â Lists groups and their members, including nested group memberships"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,'Get-DomainGroupMember -Identity "Domain Admins" -Recurse'))," â Resolves the effective membership of high-privilege groups through nested memberships"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why it matters for defenders:")," Knowing which accounts are effectively Domain Admin â including through nested group membership â is fundamental. If your DA group has 47 effective members instead of the 5 you expected, you have an access control problem."),"\n",r.createElement(n.h3,null,"ACL and Delegation Enumeration"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Find-InterestingDomainAcl"))," â Identifies ACL entries that grant dangerous permissions (GenericAll, WriteDACL, WriteOwner, etc.) to non-admin users"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-DomainObjectAcl"))," â Returns the full DACL for a specific AD object"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Find-DomainUserLocation"))," â Identifies which machines domain users are currently logged into"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why it matters for defenders:")," Misconfigured ACLs are one of the most common AD attack paths. An account with ",r.createElement(n.code,null,"WriteDACL")," on the Domain Admins group can add itself as a member. These permissions are often granted accidentally and never audited."),"\n",r.createElement(n.h3,null,"GPO and Policy Enumeration"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-DomainGPO"))," â Lists all Group Policy Objects and their links"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-DomainGPOLocalGroup"))," â Identifies GPOs that modify local group memberships on domain computers"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,r.createElement(n.code,null,"Get-GPODelegation"))," â Finds who can modify specific GPOs"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why it matters for defenders:")," GPO modification permissions allow an attacker to push arbitrary configuration changes â including scheduled tasks, startup scripts, and security policy modifications â to all computers linked to that GPO."),"\n",r.createElement(n.h2,null,"Where Defenders Can Observe AD Reconnaissance"),"\n",r.createElement(n.h3,null,"LDAP Monitoring"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Windows Event ID 1644")," â LDAP search query logging. When enabled, it records the LDAP filter and attributes requested. PowerView queries are distinguishable by their specific filter patterns."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Volume anomalies")," â PowerView enumeration generates significantly more LDAP queries than normal user activity. A single workstation generating hundreds of LDAP searches in minutes is suspicious."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Attribute request patterns")," â Queries requesting ",r.createElement(n.code,null,"servicePrincipalName"),", ",r.createElement(n.code,null,"msDS-AllowedToDelegateTo"),", or ",r.createElement(n.code,null,"userAccountControl")," are associated with specific attack reconnaissance (Kerberoasting, delegation abuse)."),"\n"),"\n",r.createElement(n.h3,null,"Endpoint Monitoring"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"PowerShell logging")," â Script Block Logging (Event ID 4104) captures PowerView function calls and parameters. The function names themselves (",r.createElement(n.code,null,"Get-DomainUser"),", ",r.createElement(n.code,null,"Find-InterestingDomainAcl"),") are detection indicators."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Process monitoring")," â PowerShell processes making extensive LDAP connections, especially from non-administrative workstations."),"\n"),"\n",r.createElement(n.h3,null,"Network Monitoring"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"LDAP traffic analysis")," â Monitor the volume and pattern of LDAP queries from each endpoint. Reconnaissance tools generate bursts of LDAP traffic that differ from normal authentication and group policy refresh patterns."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Kerberos request anomalies")," â PowerView's Kerberoasting functions trigger TGS requests for service accounts. A single user requesting TGS tickets for many different SPNs is a classic Kerberoasting indicator."),"\n"),"\n",r.createElement(n.h2,null,"Common Detection Blind Spots"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"LDAP logging not enabled")," â Event ID 1644 logging is not enabled by default. Without it, LDAP reconnaissance is invisible."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"No baseline for LDAP volume")," â Without a baseline of normal LDAP query patterns, anomalous reconnaissance activity cannot be distinguished from normal operation."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Focus on tools over techniques"),' â Detecting "PowerView" by name misses equivalent functionality in other tools (SharpView, ADModule, custom scripts). Detect the LDAP query patterns, not the tool name.'),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Ignoring nested group memberships")," â Many organizations audit direct group memberships but do not track effective memberships through nesting. This is exactly the information PowerView's recursive enumeration reveals."),"\n"),"\n",r.createElement(n.h2,null,"Practical Hardening and Monitoring Guidance"),"\n",r.createElement(n.h3,null,"For AD Administrators"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Enable LDAP search query logging")," â Configure Event ID 1644 logging on domain controllers. Set appropriate thresholds for expensive and long-running queries."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Audit and minimize ACL permissions")," â Regularly audit ACLs on high-value AD objects (Domain Admins group, domain root, AdminSDHolder). Remove unnecessary permissions. Tools like BloodHound and PingCastle automate this analysis."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Implement tiered administration")," â Separate administrative accounts into tiers: Tier 0 (domain controllers), Tier 1 (servers), Tier 2 (workstations). Restrict where each tier's credentials can be used."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Clean up stale trusts")," â Remove domain and forest trusts that are no longer needed. Every trust is an attack path."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Enforce LDAP signing and channel binding")," â Ensure all LDAP communication is signed and uses channel binding to prevent LDAP relay attacks."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Audit AD CS")," â Review certificate templates, enrollment permissions, and CA configurations. The ESC1-ESC8 attack paths should be assessed and mitigated."),"\n"),"\n",r.createElement(n.h3,null,"For SOC Teams"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Build Kerberoasting detections")," â Alert on accounts requesting TGS tickets for multiple different SPNs
1within a short time window. This is a high-fidelity indicator of Kerberoasting reconnaissance."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Monitor PowerView function patterns")," â Script Block Log entries containing PowerView function names or their .NET equivalents indicate active AD enumeration."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Track LDAP query anomalies")," â Baseline LDAP query volumes per endpoint and alert on significant deviations."),"\n"),"\n",r.createElement(n.h3,null,"Lab Testing"),"\n",r.createElement(n.p,null,"Use ",r.createElement(n.a,{href:"/veil-powerview/"},"Veil-PowerView")," in a controlled lab environment to enumerate your AD configuration and identify the reconnaissance paths that your detection should cover. The ",r.createElement(n.a,{href:"/veil-powerview-usage-guide/"},"PowerView usage guide")," provides the command reference, and the ",r.createElement(n.a,{href:"/defensive-lab-guide-safely-analyzing-veil-payloads-in-a-sandbox/"},"sandbox lab guide")," covers safe lab configuration."),"\n",r.createElement(n.p,null,"For the broader evasion context, see ",r.createElement(n.a,{href:"/powershell-best-practices-reducing-attack-surface-against-advanced-payloads/"},"PowerShell hardening best practices")," for securing the PowerShell environment that PowerView runs in, and the ",r.createElement(n.a,{href:"/living-off-the-land-binaries-lolbas-in-2026-techniques-and-detection/"},"LOLBAS article")," for understanding how built-in tools are used alongside enumeration frameworks."),"\n",r.createElement(n.h2,null,"Related Reading"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/veil-powerview/"},"Veil-PowerView Overview")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/veil-powerview-usage-guide/"},"Veil-PowerView Usage Guide")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/framework/"},"Veil Framework Overview")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/powershell-best-practices-reducing-attack-surface-against-advanced-payloads/"},"PowerShell Best Practices: Reducing Attack Surface")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/living-off-the-land-binaries-lolbas-in-2026-techniques-and-detection/"},"LOLBAS in 2026: Techniques and Detection")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/guides/"},"Guides and Tutorials")),"\n"),"\n",r.createElement(n.hr),"\n",r.createElement(n.p,null,r.createElement(n.em,null,"Every piece of information PowerView enumerates is information your AD environment is exposing. If you do not want attackers to know who your Domain Admins are, what permissions they have, and where they are logged in â start hardening the access controls and monitoring the queries that reveal it.")))}var i=function(e={}){const{wrapper:n}=Object.assign({},(0,a.RP)(),e.components);return n?r.createElement(n,e,r.createElement(l,e)):l(e)},s=t(9329),o=t(1744),c=t(8963),m=t(8752),u=t(7304);function d(e){if(!e)return null;try{return new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(new Date(e))}catch{return null}}function h({pageContext:e,children:n}){const{frontmatter:t}=e,a=(null==t?void 0:t.title)||"",l=(null==t?void 0:t.description)||"",i=(null==t?void 0:t.slug)||"",o=(null==t?void 0:t.heroImage)||null,h=(null==t?void 0:t.date)||null,g=(null==t?void 0:t.lastmod)||null,E=d(h),f=g&&g!==h?d(g):null;return r.createElement(s.A,null,o&&r.createElement(c.A,{title:a,subtitle:l,backgroundImage:o}),r.createElement("article",{className:"page-content"},r.createElement("div",{className:"container"},E&&r.createElement("p",{className:"post-meta"},r.createElement("time",{dateTime:h},"Published ",E),f&&r.createElement(r.Fragment,null," · ",r.createElement("time",{dateTime:g},"Updated ",f))),r.createElement("div",{className:"post-layout-grid"},r.createElement("div",{className:"post-main"},n),r.createElement("aside",{className:"post-sidebar","aria-label":"Sidebar"},r.createElement("div",{className:"post-sidebar-scroll"},r.createElement(u.A),r.createElement(m.A,{sourceUrl:i})))))))}function g(e){return r.createElement(h,e,r.createElement(i,e))}function E({pageContext:e}){const{frontmatter:n}=e,t=null!=n&&n.heroImage?`https://www.veil-framework.com${n.heroImage}`:null;
1return r.createElement(o.A,{title:null==n?void 0:n.title,description:null==n?void 0:n.description,pathname:null==n?void 0:n.slug},(null==n?void 0:n.date)&&r.createElement("meta",{property:"article:published_time",content:n.date}),(null==n?void 0:n.lastmod)&&r.createElement("meta",{property:"article:modified_time",content:n.lastmod}),t&&r.createElement("meta",{property:"og:image",content:t}),t&&r.createElement("meta",{name:"twitter:image",content:t}))}},7304:function(e,n,t){t.d(n,{A:function(){return l}});var a=t(6540);function r({href:e,children:n,className:t,...r}){return a.createElement("a",Object.assign({href:e,target:"_blank",rel:"sponsored nofollow noopener",className:t},r),n)}function l(){const e="/veil-recommends/infosec-fundamentals";return a.createElement("aside",{className:"fc-wrap","aria-label":"Recommended course"},a.createElement("div",{className:"fc-header"},a.createElement("span",{className:"fc-dot fc-dot-r","aria-hidden":"true"}),a.createElement("span",{className:"fc-dot fc-dot-a","aria-hidden":"true"}),a.createElement("span",{className:"fc-dot fc-dot-g","aria-hidden":"true"}),a.createElement("span",{className:"fc-header-label"},"course_spotlight.sh")),a.createElement(r,{href:e,className:"fc-image-link","aria-label":"View Information Security Fundamentals course"},a.createElement("img",{src:"/img/hero/infosec-fundamentals.webp",alt:"Information Security Fundamentals course cover",className:"fc-image",loading:"lazy",width:"300",height:"169"})),a.createElement("div",{className:"fc-body"},a.createElement("div",{className:"fc-tag"},"Recommended Course"),a.createElement("h3",{className:"fc-title"},a.createElement(r,{href:e,className:"fc-title-link"},"Information Security Fundamentals")),a.createElement("p",{className:"fc-desc"},"Build a solid foundation in cybersecurity. Covers network fundamentals, common attack vectors, defensive controls, and the mindset needed for security research."),a.createElement("ul",{className:"fc-features"},a.createElement("li",{className:"fc-feature"},a.createElement("span",{className:"fc-feature-icon","aria-hidden":"true"},"â¸"),"Beginner-friendly â no prior experience needed"),a.createElement("li",{className:"fc-feature"},a.createElement("span",{className:"fc-feature-icon","aria-hidden":"true"},"â¸"),"Network attacks & defences"),a.createElement("li",{className:"fc-feature"},a.createElement("span",{className:"fc-feature-icon","aria-hidden":"true"},"â¸"),"Real-world security concepts")),a.createElement(r,{href:e,className:"fc-cta"},"View Course",a.createElement("span",{className:"fc-cta-arrow","aria-hidden":"true"}," â")),a.createElement("p",{className:"fc-disclosure"},"We may earn a commission if you enrol via our link, at no extra cost to you.")))}},8453:function(e,n,t){t.d(n,{RP:function(){return l}});var a=t(6540);const r=a.createContext({});function l(e){const n=a.useContext(r);return a.useMemo(()=>"function"==typeof e?e(n):{...n,...e},[n,e])}},8752:function(e,n,t){t.d(n,{A:function(){return r}});var a=t(6540);function r({sourceUrl:e}){const{0:n,1:t}=(0,a.useState)("idle"),{0:r,1:l}=(0,a.useState)("");return a.createElement("aside",{className:"nl-sw-wrap","aria-label":"Newsletter signup"},a.createElement("div",{className:"nl-sw-header"},a.createElement("span",{className:"nl-sw-dot nl-sw-dot-r","aria-hidden":"true"}),a.createElement("span",{className:"nl-sw-dot nl-sw-dot-a","aria-hidden":"true"}),a.createElement("span",{className:"nl-sw-dot nl-sw-dot-g","aria-hidden":"true"}),a.createElement("span",{className:"nl-sw-title"},"intel_feed.sh")),a.createElement("div",{className:"nl-sw-body"},a.createElement("p",{className:"nl-sw-prompt"},a.createElement("span",{className:"nl-sw-caret","aria-hidden":"true"},"$")," ","subscribe --to evasion-intel"),a.createElement("h3",{className:"nl-sw-heading"},"Stay ahead of the curve"),a.createElement("p",{className:"nl-sw-desc"},"AV bypass techniques, detection gaps, and lab-tested research â delivered before the mainstream catches up."),"done"===n?a.createElement("div",{className:"nl-sw-success",role:"status"},a.createElement("span",{className:"nl-sw-check","aria-hidden":"true"},"â"),a.createElement("div",null,a.createElement("strong",null,"Subscribed."),a.createElement("br",null),a.createElement("span",{className:"nl-sw-success-sub"},"Confirm your email to activate."))):a.createElement("form",{onSubmit:async function(e){e.preventDefault();const n=e.currentTarget,a=new FormData(n);if(!a.get("company")){t("loading"),l("");try{const e=await fetch("/api/subscribe",{method:"POST",body:a}),r=await e.json();r.success?(t("done"),n.reset()):(t("err"),l(r.error||"Something went wrong."))}catch{t("err"),l("Network error â please try again.")}}},className:"nl-sw-form",noValidate:!0},a.createElement("input",{type:"hidden",name:"site",value:"veil-framework"}),a.createElement("input",{type:"hidden",name:"source_url",value:e||""}),a.createElement("input",{type:"text",name:"company",tabIndex:"-1","aria-hidden":"true",className:"nl-sw-hp",autoComplete:"off"}),a.createElement("label",{htmlFor:"nl-sw-name",className:"nl-sw-label"},"Your name"),a.createElement("input",{id:"nl-sw-name",type:"text",name:"name",placeholder:"alias or handle",required:!0,autoComplete:"given-name",className:"nl-sw-input",disabled:"loading"===n}),a.createElement("label",{htmlFor:"nl-sw-email",className:"nl-sw-label"},"Email address"),a.createElement("input",{id:"nl-sw-email",type:"email",name:"email",placeholder:"[email protected]",required:!0,autoComplete:"email",className:"nl-sw-input",disabled:"loading"===n}),"err"===n&&a.createElement("p",{className:"nl-sw-error",role:"alert"},r),a.createElement("button",{type:"submit",className:"nl-sw-btn",disabled:"loading"===n},"loading"===n?"Connectingâ¦":"Subscribe to intel â"),a.createElement("p",{className:"nl-sw-legal"}
1,"No spam. No vendor fluff. Unsubscribe any time."))))}},8963:function(e,n,t){t.d(n,{A:function(){return r}});var a=t(6540);function r({title:e,subtitle:n,primaryLink:t,primaryText:r,secondaryLink:l,secondaryText:i,backgroundImage:s}){const o=s?{backgroundImage:`linear-gradient(135deg, rgba(37, 99, 235, 0.85) 0%, rgba(13, 33, 55, 0.9) 100%), url(${s})`,backgroundSize:"cover",backgroundPosition:"center"}:{};return a.createElement("section",{className:"hero blueprint-section-subtle",style:o},a.createElement("div",{className:"container"},a.createElement("h1",null,e),n&&a.createElement("p",null,n),(t||l)&&a.createElement("div",{style:{display:"flex",gap:"var(--space-md)",flexWrap:"wrap"}},t&&a.createElement("a",{href:t,className:"btn btn-primary"},r||"Get Started"),l&&a.createElement("a",{href:l,className:"btn btn-outline"},i||"Learn More"))))}}}]); 2//# sourceMappingURL=component---src-components-page-template-jsx-content-file-path-content-posts-mastering-veil-powerview-active-directory-reconnaissance-techniques-2026-mdx-33dce11e87245087fdef.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.