Identifiera skadlig kod med Microsoft Sentinel för Azure Firewall

Skadlig kod är programvara som är utformad för att orsaka skada, störningar eller äventyra säkerheten och funktionaliteten i datorsystem, nätverk eller enheter. Den innehåller olika typer av hot, till exempel virus, maskar, trojaner, utpressningstrojaner, spionprogram, adware, rootkits med mera. Skadlig kod kan ha olika negativa effekter, till exempel stöld av känsliga data, kryptering eller borttagning av filer, visning av oönskade annonser, långsammare prestanda eller till och med att ta kontroll över enheten.

Det är viktigt att identifiera och eliminera skadlig kod från ett system eller nätverk, vilket du kan göra genom att använda olika identifieringstekniker, till exempel signaturbaserade, beteendebaserade, heuristiska eller maskininlärningsbaserade tekniker. Identifiering av skadlig kod är avgörande för att skydda användarnas säkerhet och sekretess samt integriteten och tillgängligheten för system och nätverk.

Azure Firewall IDPS-funktionen identifierar och nekar automatiskt skadlig kod som standard och kan förhindra att molnarbetsbelastningarna smittas. Du kan ytterligare förbättra den här funktionen genom att använda automatiserad identifiering och svar med hjälp av fördefinierade identifieringsfrågor och Microsoft Sentinel. I den här artikeln utforskar du hur du identifierar en del vanlig skadlig kod som finns i Azure Firewall-loggar som Coinminer, Cl0p och Sunburst med hjälp av fördefinierade KQL-identifieringsfrågor för Azure Firewall.

Dessa identifieringar gör det möjligt för säkerhetsteam att ta emot Sentinel-aviseringar när datorer i det interna nätverket begär anslutningar till domännamn eller IP-adresser på Internet som är länkade till kända indikatorer för kompromiss (IOCs), enligt definitionen i identifieringsregelfrågan. Verkliga positiva identifieringar bör betraktas som indikatorer för kompromisser (IOCs). Sedan kan team för säkerhetsincidenter initiera ett svar och implementera lämpliga anpassade reparationsåtgärder baserat på dessa identifieringssignaler.

Anvisningar om hur du distribuerar analysreglerna med hjälp av följande frågor finns i Identifiera nya hot med Hjälp av Microsoft Sentinel med Azure Web Application Firewall.

Vanliga sårbarheter för skadlig kod

Följande sårbarheter för skadlig kod är vanliga i dagens nätverk.

Coinminer

På grund av den senaste tidens ökning av utvinning av kryptovalutor finns det ett ökande behov av högpresterande nätverksbearbetningsenheter. Distribuerad databehandling expanderar och den utbredda tillgången på gruvprogramvara, både i juridiska och olagliga sammanhang.

Coinminer representerar en typ av skadlig kod som använder maskinvaruresurserna på ett ovetande offerdator för utvinning av kryptovaluta. Grafikprocessorn (GPU) för den intet ont anande användarens dator används för att köra olika skript som syftar till att bryta kryptovalutor och beräkna transaktionsblockshashvärden.

För att minska risken för dessa hot bör proaktiva åtgärder genomföras på de typiska startpunkterna. Detta omfattar att se till att Jupyter-programvara distribueras med korrekt autentisering, konfigurering och uppdatering av webbprogram för att minimera sårbarheter, kontrollera extern åtkomst till Docker och följa extra Nolltillit principer.

Följande identifieringsfråga kan användas för att skapa en analysregel i Sentinel för att automatiskt identifiera och svara på den här skadliga koden med hjälp av Azure Firewall-loggar.

// Coinminer Detection Rule
// Detects suspicious traffic patterns associated with coinmining activity in Azure Firewall logs for Sentinel

let coinminerPorts = dynamic(["2375", "2376", "2377", "4243", "4244"]); // List of known coinminer ports  
//Assign the known domains to a variable
let coinminerdomains = dynamic(["teamtnt.red", "kaiserfranz.cc", "45.9.148.123"]); // List of known coinminer domains  

(union isfuzzy=true 

(AzureDiagnostics  
| where ResourceType == "AZUREFIREWALLS"  
| where Category == "AzureFirewallApplicationRule" 
| parse msg_s with Protocol 'request from ' SourceHost ':' SourcePort 'to ' DestinationHost ':' DestinationPort '. Action:' Action 
| extend action_s = column_ifexists("action_s", ""), transactionId_g = column_ifexists("transactionId_g", "")  
| where DestinationPort in (coinminerPorts) // Filter traffic on known coinminer ports  
| summarize CoinminerAttempts = count() by DestinationHost, DestinationPort  
| where CoinminerAttempts > 10 // Adjust threshold as needed  
), 

(AZFWIdpsSignature 
| where DestinationPort in (coinminerPorts) 
| summarize CoinminerAttempts = count() by DestinationIp, DestinationPort 
| where CoinminerAttempts > 10 // Adjust threshold as needed   

), 

(AzureDiagnostics  
| where ResourceType == "AZUREFIREWALLS"  
| where Category == "AzureFirewallDnsProxy"  
| parse msg_s with "DNS Request: " ClientIP ":" ClientPort " - " QueryID " " Request_Type " " Request_Class " " Request_Name ". " Request_Protocol " " Request_Size " " EDNSO_DO " " EDNS0_Buffersize " " Response_Code " " Response_Flags " " Response_Size " " Response_Duration  
| where Request_Name has_any(coinminerdomains)  
| extend DNSName = Request_Name  
| extend IPCustomEntity = ClientIP  

),  

(AzureDiagnostics  
| where ResourceType == "AZUREFIREWALLS"  
| where Category == "AzureFirewallApplicationRule"  
| parse msg_s with Protocol ' request from ' SourceHost ':' SourcePort 'to' DestinationHost ':' DestinationPort '. Action:' Action  
| where isnotempty(DestinationHost)  
| where DestinationHost has_any(coinminerdomains)  
| extend DNSName = DestinationHost  
| extend IPCustomEntity = SourceHost), 

(AZFWApplicationRule 
| where isnotempty(Fqdn) 
| where Fqdn has_any (coinminerdomains)   
| extend DNSName = Fqdn  
| extend IPCustomEntity = SourceIp), 

(AZFWDnsQuery 
| where isnotempty(QueryName) 
| where QueryName has_any (coinminerdomains) 
| extend DNSName = QueryName 
| extend IPCustomEntity = SourceIp 

), 

(AZFWIdpsSignature 
| where DestinationIp has_any (coinminerdomains) 
| extend DNSName = DestinationIp 
| extend IPCustomEntity = SourceIp 

), 

(AZFWIdpsSignature 
| where Description contains "coinminer" 
| extend DNSName = DestinationIp 
| extend IPCustomEntity = SourceIp 
) 

)

Cl0p

Cl0p är en utpressningstrojan som fungerar genom att tillämpa distinkta krypteringsnycklar på offrets filer och sedan begära en lösensumma för filernas dekryptering. Den använder en sårbarhet i dataöverföringsprogramvaran MOVEit och skickar spear phishing-e-postmeddelanden till många anställda i hopp om att leverera cl0p. Sedan använder den verktyg som truebot och dewmode för att flytta i sidled i nätverket och exfiltera data. Utpressningstrojanen krypterar filer med hjälp av AES-256-krypteringsalgoritmen.

Cl0p sårbarheter inkluderar CVE-2023-35036, CVE-2023-34362 och CVE-2023-35708. I juni 2023 publicerade FBI och CISA ett pressmeddelande om detta utnyttjande. Effekterna av utpressningstrojaner cl0p registreras på flera universitet i amerikanska mellanvästern och statliga organisationer. Flygbolag, TV-nätverk och brittiska butiker är de senaste offren för utpressningstrojangänget cl0p .

Följande identifieringsfråga kan användas för att skapa en analysregel i Sentinel för att automatiskt identifiera och svara på den här skadliga koden med hjälp av Azure Firewall-loggar.

Identifieringsfråga för Cl0p: Identifiering av skadlig kod för brandvägg för Sentinel/identifiering – analysregelfråga för Cl0p.json

Sunburst

Den här skadliga koden riktar sig till offer med hjälp av DGA-strängar (Domain Generation Algorithm) för att undvika identifiering och upprätta en kommando- och kontroll-bakdörrsattack. DGA-strängarna är ofta svåra för säkerhetsverktyg att identifiera de domäner som används av skadlig kod på grund av det mönster som används i syntaxen och deras ständiga ändring av domäninformationen.

Följande identifieringsfråga kan användas för att skapa en analysregel i Sentinel för att automatiskt identifiera och svara på den här skadliga koden med hjälp av Azure Firewall-loggar.

Identifieringsfråga för Sunburst skadlig kod: Identifiering av skadlig brandvägg för Sentinel/identifiering – analysregelfråga för Sunburst.json