Dotazy na tabulku NetworkSessions
Informace o používání těchto dotazů na webu Azure Portal najdete v kurzu služby Log Analytics. Informace o rozhraní REST API najdete v tématu Dotaz.
Získání provozu do nestandardních portů
Tento dotaz identifikuje zdrojové IP adresy, které odesílají žádosti o připojení přes více portů. Může to být označení nežádoucích pokusů o výpis dostupných služeb. Odkazy: Kontrola síťových služeb MITRE (T1046)
// This query identifies source IP addresses sending connection requests over multiple ports.
// This could be an indication of adversary attempts to list available services.
// References: MITRE Network Service Scanning (T1046)
let threshold=5;
// Used to filter commonly used ports in your org
let commonPorts=dynamic([443, 53, 389, 80, 0, 880, 8888, 8080]);
NetworkSessions
| where isnotempty(DstPortNumber) and not(ipv4_is_private(DstIpAddr) )
// filter out IANA ephemeral or negotiated ports as per https://en.wikipedia.org/wiki/Ephemeral_port
| where DstPortNumber !between (toint(49512) .. toint(65535))
and DstPortNumber !in (commonPorts)
| where EventResult == "Failure"
| summarize PortCount=dcount(DstPortNumber) by SrcIpAddr, bin(TimeGenerated, 2m)
| where PortCount > threshold
Velký objem provozu do neobvyklých domén
Tento dotaz identifikuje domény, které přijímají méně časté objemy dat. Může to být označení nežádoucích pokusů o krádež a exfiltraci dat.
// This query identifies domains receiving uncommon about of data volume.
// This could be an indication of adversary attempts to steal and exfiltrate data.
let isInternal = (url_hostname:string){url_hostname endswith ".local" or url_hostname endswith ".lan" or url_hostname endswith ".home"};
// used to exclude internal traffic
let top1M = (externaldata (Position:int, Domain:string) [@"http://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip"] with (format="csv", zipPattern="*.csv"));
// fetch the alexa top 1M domains
let top2ndLevelDomain=top1M
| extend Domain = tolower(extract("([^.]*).{0,7}$", 1, Domain))
| distinct Domain;
let rareDomainTraffic = NetworkSessions
| where isnotempty(UrlHostname) and not(isInternal(UrlHostname))
| extend SndLevelDomain=tolower(extract("([^.]*).{0,7}$", 1, UrlHostname))
| where SndLevelDomain !in (top2ndLevelDomain)
| summarize BytesSent=sum(SrcBytes) by SndLevelDomain, UrlHostname;
rareDomainTraffic | summarize TotalBytes=sum(BytesSent) by SndLevelDomain
| join kind=innerunique
rareDomainTraffic
on SndLevelDomain
| sort by TotalBytes desc