T1590.001

Domain Properties

Adversaries may gather information about the victim's network domain(s) that can be used during targeting. Information about domains and their properties may include a variety of details, including what domain(s) the victim owns as well as administrative data (name, registrar, etc.) and more directly actionable information such as contacts, business addresses, and name servers. Adversaries gather this information via direct collection (WHOIS queries, DNS enumeration), passive data sets, or by querying publicly accessible API endpoints such as Microsoft's GetUserRealm and autodiscover APIs in Office 365/Azure environments. Tools such as AADInternals leverage these public APIs to enumerate tenant domain details, federation configuration, and company metadata — all without authenticating to the target environment.

Microsoft Sentinel / Defender
kusto
let AADReconPatterns = dynamic([
    "Get-AADIntTenantDomains", "Get-AADIntLoginInformation", "Get-AADIntTenantDetails",
    "Invoke-AADIntReconAsOutsider", "Get-AADIntCompanyInformation", "Get-AADIntTenantID",
    "Get-AADIntOpenIDConfiguration", "Get-AADIntTenantDomainNames", "AADInternals"
]);
let WhoisToolPatterns = dynamic([
    "whois.exe", "whois ", "Get-Whois", "Invoke-Whois"
]);
let WhoisServiceDomains = dynamic([
    "whois.iana.org", "who.is", "whois.domaintools.com", "whois.verisign-grs.com",
    "whois.networksolutions.com", "rdap.org", "rdap.arin.net", "rdap.verisign.com"
]);
// Detection 1: AADInternals module execution or O365 domain recon via PowerShell
let ToolExecution = DeviceProcessEvents
| where Timestamp > ago(24h)
| where ProcessCommandLine has_any (AADReconPatterns)
    or (FileName in~ ("powershell.exe", "pwsh.exe") and ProcessCommandLine has "GetUserRealm")
    or (FileName in~ ("powershell.exe", "pwsh.exe") and ProcessCommandLine has "autodiscover" and ProcessCommandLine has "microsoft")
    or ProcessCommandLine has_any (WhoisToolPatterns)
| extend DetectionType = case(
    ProcessCommandLine has_any (AADReconPatterns), "AADInternals_DomainRecon",
    ProcessCommandLine has "GetUserRealm", "O365_GetUserRealm_Recon",
    ProcessCommandLine has "autodiscover", "Autodiscover_DomainEnum",
    "WHOIS_Tool_Execution"
)
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
         InitiatingProcessFileName, InitiatingProcessCommandLine, DetectionType;
// Detection 2: WHOIS protocol connections (TCP port 43) or connections to known WHOIS web services
let WhoisConnections = DeviceNetworkEvents
| where Timestamp > ago(24h)
| where (RemotePort == 43)
    or (RemoteUrl has_any (WhoisServiceDomains))
| where InitiatingProcessFileName !in~ ("svchost.exe", "lsass.exe", "services.exe", "SearchProtocolHost.exe", "MsMpEng.exe")
| extend DetectionType = case(
    RemotePort == 43, "WHOIS_Protocol_Port43",
    "WHOIS_WebService_Access"
)
| project Timestamp, DeviceName,
         AccountName=InitiatingProcessAccountName,
         FileName=InitiatingProcessFileName,
         ProcessCommandLine=InitiatingProcessCommandLine,
         InitiatingProcessFileName,
         RemoteUrl, RemoteIP, RemotePort, DetectionType;
// Detection 3: Azure AD audit events for domain enumeration operations
let AzureDomainEnum = AuditLogs
| where TimeGenerated > ago(24h)
| where OperationName in ("List domains", "Get domain", "Verify domain",
                          "List company information", "Get company information",
                          "List tenantDetails", "List organization")
| where Result == "success"
| extend InitiatedByUser = tostring(InitiatedBy.user.userPrincipalName)
| extend InitiatedByApp = tostring(InitiatedBy.app.displayName)
| extend IPAddress = tostring(parse_json(tostring(InitiatedBy.user)).ipAddress)
| extend DetectionType = "AzureAD_DomainEnumeration"
| project Timestamp=TimeGenerated, DeviceName="AzureAD",
         AccountName=coalesce(InitiatedByUser, InitiatedByApp),
         FileName=InitiatedByApp, ProcessCommandLine=OperationName,
         InitiatingProcessFileName=IPAddress, DetectionType;
union ToolExecution, WhoisConnections, AzureDomainEnum
| sort by Timestamp desc
medium severity medium confidence

Data Sources

Process: Process Creation Network Traffic: Network Connection Creation Application Log: Application Log Content Microsoft Defender for Endpoint Azure Active Directory Audit Logs

Required Tables

DeviceProcessEvents DeviceNetworkEvents AuditLogs

False Positives

  • IT administrators performing legitimate WHOIS lookups to verify domain registrations, check expiry dates, or investigate abuse complaints
  • Security teams using AADInternals or similar tools for authorized red team exercises, tenant health checks, or identity posture assessments
  • DevOps/cloud automation scripts querying Azure AD domain configuration (List domains, List organization) during infrastructure provisioning or validation pipelines
  • Third-party SaaS connectors and monitoring platforms that enumerate Azure AD tenant domain details during onboarding or health monitoring
  • Domain registrars or managed DNS provider tools that perform routine WHOIS queries as part of domain portfolio management workflows

Unlock Pro Content

Get the full detection package for T1590.001 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections