Microsoft Sentinel a gyakorlatban
Az előző cikkben a Microsoft Sentinel komponenseit és működését egy gyakorlati laborkörnyezeten keresztül ismertettem elméleti alapokra helyezve a SIEM/SOAR megoldás szerepét. Most azonban szintet lépünk: éles környezetben vizsgáljuk meg, hogyan használhatjuk a Sentinelt valós biztonsági események észlelésére és elemzésére.
Ebben a részben FortiGate tűzfal VPN naplói, valamint egyéb kritikus rendszerlogok segítségével mutatom be, hogyan lehet fenyegetéseket és gyanús aktivitásokat azonosítani. Végigmegyek a Sentinel adatforrások integrációján, az elemzési folyamatokon, és bemutatok konkrét vizsgálati eseteket – hogyan észlelhetünk például egy gyanús bejelentkezést, vagy hogyan lehet egy anomáliát mélyebben elemezni KQL lekérdezések segítségével.
Célom, hogy a Sentinel gyakorlati alkalmazását lépésről lépésre bemutatva segítséget nyújtsak azoknak, akik a saját környezetükben szeretnék kiaknázni a Sentinel képességeit a proaktív fenyegetésfelderítés és incidenskezelés terén.
🎬Forgatókönyv:
🛠Nézzük meg részletesen, milyen feladatokat végzünk el, miről lesz szó, és hogyan segíthet mindez a gyakorlatban.
📡A VPN logok példáján keresztül szemléltetjük a Microsoft Sentinel működését, mert egy konkrét, gyakorlati eset segít könnyebben átlátni ezt a komplex rendszert.
🛡 Fortigate tűzfal logjainak bekötése
🔹 A Fortigate tűzfal naplóit integráljuk a Sentinelbe, hogy valós idejű VPN eseményeket észlelhessünk.
🔍 Elemzés
🔹 KQL lekérdezések VPN eseményekre – Egyéni KQL lekérdezésekkel elemezheted a VPN csatlakozásokat és a felhasználói aktivitást.
🔹 VPN használati minták vizsgálata – Azonosíthatod a tipikus és szokatlan VPN-használati szokásokat a vállalatodban.
🚨 Detektálás
🔹 Gyanús VPN bejelentkezések riasztása – Automatikus értesítések a nem megszokott vagy kockázatos VPN bejelentkezések esetén.
🔹 Sikertelen VPN bejelentkezések figyelése – A többszöri sikertelen bejelentkezési kísérletek monitorozása a lehetséges támadások észlelésére.
🤖 Automatizáció
🔹 Playbook az ismeretlen IP-ről érkező bejelentkezések tiltására – Automatizált válasz az új vagy gyanús IP-címekről érkező bejelentkezések blokkolására.
📊 Vizualizáció
🔹 VPN Dashboard készítése Sentinelben – Grafikonokkal és térképekkel vizualizálhatod a VPN-használatot és a csatlakozási mintákat.
🔥 Fusion tesztelése
🔹 VPN bejelentkezések és admin jogok kombinált elemzése – Azonosíthatod, ha egy felhasználó röviddel a VPN-bejelentkezés után adminisztrátori jogosultságokat kap, ami gyanús lehet.
🛡 Fortigate tűzfal logjainak bekötése
A következő konfiguráció célja, hogy egy FortiGate tűzfalról érkező VPN kapcsolati naplókat (syslog) bekössük Microsoft Sentinel-be az egyszerűbb és átláthatóbb elemzés érdekében. Mivel csak a VPN-re vonatkozó logokat fogjuk továbbítani, a folyamat érthetőbb és kezelhetőbb lesz, mintha az összes tűzfalnapló között kellene keresgélnünk.
A naplók UDP Syslog protokollon keresztül érkeznek, és az adatokat egy Azure Arc-on keresztül kapcsolt Windows szerver fogja fogadni, amely továbbítja azokat a Sentinel Workspace-be. Ennek megvalósításához szükség lesz egy Data Collection Rule (DCR) létrehozására, amely szabályozza, hogy a beérkező logok milyen formában és milyen célhelyre kerüljenek.
A folyamat során:
- A FortiGate tűzfal beállításra kerül, hogy csak a VPN eseményekről küldjön syslogokat.
- Az Azure Arc által felügyelt szerver fogadja és előkészíti a naplókat.
- Egy Data Collection Rule (DCR) biztosítja, hogy a megfelelő adatok a Sentinel-be kerüljenek.
Ez a megoldás segít abban, hogy hatékonyan elemezzük a VPN kapcsolatokkal kapcsolatos eseményeket, anélkül hogy más tűzfalnaplók között kellene keresgélnünk.
Windows szerverünkön az alábbi logfájlba érkeznek be a Fortigate VPN rendszerlogok:
Ismerjük meg a VPN Syslogot, egy logbejegyzés – logsor (JSON formátumban jön be a tűzfalról UDP modulon keresztül):
{ „EventSourceAddress”: „192.168.1.100”, „MessageSourceAddress”: „192.168.1.100”, „AgentLess”: true, „EventReceivedTime”: „2025-02-10 14:30:00”, „AgentModuleName”: „UDP-In Syslog”, „SourceModuleName”: „UDP-In Syslog”, „AgentModuleType”: „im_udp”, „SourceModuleType”: „im_udp”, „AgentName”: „logsystem”, „PatternPath”: „Agentless;FortiOS;Event;VPN;39425 – SSL_VPN_SESSION_TUNNEL_DOWN”, „SyslogSeverity”: „INFO”, „Severity”: „informational”, „EventTime”: „2025-02-10 14:29:59”, „Hostname”: „192.168.1.100”, „Message”: „SSL tunnel shutdown”, „TaxonomyOS”: „FortiOS”, „TaxonomyProducer”: „NetworkVPNGateway”, „devname”: „FW-Gateway01”, „devid”: „FG1234567890”, „tz”: „+0100”, „logid”: „0101039425”, „subtype”: „vpn”, „level”: „information”, „logdesc”: „SSL VPN tunnel down”, „action”: „tunnel-down”, „tunneltype”: „ssl-web”, „tunnelid”: „987654321”, „remip”: „203.0.113.55”, „srccountry”: „Germany”, „user”: „johndoe@example.com”, „group”: „VPN_Users”, „reason”: „User disconnected manually”, „duration”: 4321, „sentbyte”: „10240”, „rcvdbyte”: „20480”, „msg”: „SSL tunnel shutdown”, „EventCategory”: „event/vpn”, „SourceCountry”: „Germany”, „ReceivedBytes”: „20480”, „SentBytes”: „10240”, „TransferredBytes”: 30720, „TargetAccountName”: „johndoe”, „TargetGroupName”: „vpn_users_group”, „TaxonomyAction”: „Disconnect”, „TaxonomyObject”: „Session”, „TaxonomyObjectSubType”: „Session_VPN”, „TaxonomyStatus”: „Success”, „TargetDomainName”: „example.com”, „TargetAccount”: „example.com\\johndoe”, „Facility”: „local7”, „EventSourceHostname”: „log-server01”, „TimeGenerated”: „2025-02-10 14:29:59” }
Azure Arc-ba bevont földi (on-premise) szerveren van a fenti Syslog fájl – A Monitoring Extension modulnak telepítve kell lennie:
Az alábbi on-premise szerveren a Microsoft Monitoring Agentet megfelelően kell konfigurálni, hogy a megfelelő Sentinel Log Analytics workspace-hez csatlakozzon.
Vezérlőpult:
Kell a megfelelő workspace ID (ez a Sentinel Log Analytics Workspace alatt az Overview alatt található):
A Sentinel Log Analytics Workspace-nél, az Agent rész alatt látszik, hogy szerverünk megfelelően csatlakoztatva lett.
Data Collection Rule beállítása a Log begyűjtéséhez:
Új Data Collection Rule, neve: FortiDCR
Itt kijelöljük a szervert amiről a logokat akarjuk gyűjteni. (A szerver nevét kitakartam, mert valódi környezetben csináltam a tesztet.)
Custom Text logot hozunk létre:
Custom JSON tipusú adatforrást készítünk:
Beadjuk a forrást ahonnan jön a log:
1 – Megdjuk hol található a log fájl a szerveren
2 – Megadjuk az adattábla nevét a Sentinel workspace-n ahová kerül a log
3 – Fel kell venni a JSON schema-t a megfelelő adattípusokkal string, datetime, stb.
Kiválasztjuk magát a Sentinel Workspace-t:
A FortigateSyslog_CL nevű adattábla ahová kerül a Syslog:
Így tudunk KQL lekérdezéseket indítani:
KQL tipusú query-vel le lehet kérdezni a Sentinelbe felkerült VPN logokat:
🔍 Elemzés
• KQL lekérdezések VPN eseményekre:
Futtathatsz egy alap KQL lekérdezést, hogy ellenőrizd a logokat (utolsó 24 óra):
FortiSyslog_CL
| where TimeGenerated > ago(24h)
| where subtype == "vpn"
| project TimeGenerated, user, action, remip, reason, duration
| order by TimeGenerated desc
Pédáult mit vizsgálhatsz?
✅ VPN csatlakozások és bontások (action: tunnel-up, tunnel-down)
✅ Felhasználók IP-címei és országai (remip, srccountry)
✅ Miért bontotta a kapcsolatot? (reason: auth timeout, user disconnect)
✅ Mennyi ideig tartott a munkamenet? (duration)
• VPN használati minták vizsgálata
Ha riasztásokat szeretnél generálni bizonyos gyanús VPN eseményekre, hozz létre egy Custom Analytic Rule-t Sentinelben.
📌 Példa: Ismeretlen országból VPN bejelentkezés
Ha egy felhasználó nem megszokott országból csatlakozik VPN-re, az kompromittált fiók jele lehet.
📌 KQL lekérdezés a szabályhoz:
FortiSyslog_CL
| where subtype == "vpn"
| where action == "tunnel-up"
| where srccountry !in ("Hungary", "Germany", "France")
| project TimeGenerated, user, remip, srccountry
📌 Mit csinál ez a szabály?
✔ Ha egy felhasználó például Kínából vagy Oroszországból jelentkezik be VPN-re, riasztást generál. (Vagy Magyarországon, Németországon, és Franciaországon kívűl bárhonnan.)
✔ Beállíthatod, hogy automatikusan küldjön e-mailt vagy Teams értesítést. Lentebb kibontom, hogyan lehet Custom Analytic Rule-t készíteni.
🚨 Detektálás
🔐 Gyanús VPN bejelentkezések riasztása
Ha egy felhasználó többször próbálkozik sikertelenül bejelentkezni VPN-re, akkor felmerülhet a gyanú, hogy brute force támadás vagy ellopott jelszó tesztelése zajlik.
📌 KQL Lekérdezés a Szabályhoz
FortiSyslog_CL
| where subtype == "vpn"
| where action == "login-failed"
| summarize failed_attempts=count() by user, bin(TimeGenerated, 30m)
| where failed_attempts > 3
| project TimeGenerated, user, failed_attempt
⚡ Mit Csinál Ez a Szabály?
✔ Ha egy felhasználó 30 percen belül 3-nál többször próbál belépni, azonnal riaszt.
✔ Hatékonyan alkalmazható Brute Force támadások felismerésére.
(Talán a 3 próbálkozás még kevés, hiszen előfordulhat, hogy a felhasználó egyszerűen elfelejtette a jelszavát. Az 5 sikertelen kísérlet viszont már valószínűsíti a támadás gyanúját. A tesztemben 3 próbálkozással demonstrálom a működést.)
🔐 Sikertelen VPN bejelntkezési kísérletek figyelése (Itt jön képe a Custom Analytic Rule)
Az előző szekcióban tesztelt lekérdezést, amely sikeresen visszaadta az eredményeket, most bemásoljuk, és ezzel „Rule Query” formátumban alkalmazzuk.
Ebben a szakaszban lehetőség van automatikusan incidens generálására, valamint egy Playbook futtatására, például az Entra-felhasználó letiltására. Jelenleg még nincs előre definiált válaszreakció, de a későbbi tesztesetek során ezt is bemutatom.
🤖Automatizáció: Playbookok a VPN Események Kezelésére
Ha egy gyanús VPN esemény történik, azonnal automatizálhatod a válaszreakciót Sentinel Playbookok segítségével, amelyek az Azure Logic Apps platformon futnak.
📌 Példa: Gyanús VPN Bejelentkezés Automatikus Zárolása
Ha egy felhasználó fél órán belül 5x sikertelenül próbál bejelentkezni, a rendszer azonnal felfüggesztheti a fiókját az alábbi lépések szerint:
📌 Mit Csinál a Playbook?
1️⃣ Microsoft Sentinel riasztást küld (Incidenst generál) ha túl sok sikertelen bejelentkezés van fél órán belül
2️⃣ A Playbook csatlakozik az Azure AD-hez, és ideiglenesen zárolja a felhasználót.
3️⃣ Egy Teams értesítést küld a SOC csapatnak, hogy az esemény gyorsan kivizsgálható legyen.
📌 Hogyan Hozd Létre?
✅ Navigálj ide: Microsoft Sentinel → Automation → Playbooks
✅ Hozz létre egy új Playbook-ot, és szerkezd alatta a Logic App-et
✅ Válassz egy triggert: „When an alert is triggered in Sentinel”
✅ Adj hozzá egy műveletet: „Entra User Block” (Ez egy összetett folyamat, amelyhez előre definiált műveletek állnak rendelkezésre, de manuálisan is testreszabható, szinte bármit meg lehet vele csinálni.)
🔹 Logic App és az Automatikus Válaszreakciók
Ebben a pontban lép be a Logic App, amely lehetővé teszi az automatikus válaszreakciók kezelését. Itt beállítható például:
✔ Entra felhasználó letiltása gyanús tevékenység esetén
✔ Teams értesítés küldése a SOC csapatnak
Mivel a beállítások viszonylag összetettek, ebben a bemutatóban nem fogom teljesen végigvezetni ezt a konfigurációt.
ℹ Fontos Tudnivaló a Logic App Számlázásáról
💰 A díjazás a végrehajtások (runs) alapján történik, nem a triggerek száma számít!
🔄 Ha egy trigger többször lefut és elindítja a munkafolyamatot, minden egyes végrehajtás után külön díjazás történik. Ez azt jelenti, hogy nem a trigger aktiválásának száma, hanem a tényleges folyamatfutások számítanak a költségek szempontjából.
💡 Tipp: Ha szeretnéd minimalizálni a költségeket, érdemes beépíteni feltételeket és szűrőket, amelyek csak releváns események esetén indítják el a munkafolyamatot.
Például:
✔ Csak akkor fusson le, ha a bejelentkezési próbálkozás egy gyanús országban történt.
✔ Csak akkor tiltsa le a felhasználót, ha több sikertelen kísérlet történt rövid időn belül.
✔ Csak kritikus események esetén küldjön értesítést a SOC csapatnak.
Logic App Designer:
A Logic App tervezőben lehetőség van a teljes folyamat logikájának vizuális felépítésére. Ennek részletes bemutatása önmagában is megérne egy külön blogposztot, így ebben a cikkben csak a legfontosabb lépéseket érintem.
Tehát létrejön a Custom Analytic rule alapján az incidens (VPN Suspicious Logins – VPN failed logins – tesztemben ezt véletlenül több néven is létrehoztam de ugyan arra az eseményre jön létre):
Ha a „VPN failed Logins” – rule alapján automatikusan létrejön egy incidens akkor válaszként a Playbook-ot a rendszer le fogja futtatni = ha fél órán belül 5 sikeretelen VPN bejelentkezés volt akkor a kompromittált Entra user letiltódik, SOC csapatnak Teams értesítés megy ki.
📊 VPN Használat Vizualizálása – Dashboard Készítése
Vizuálisan informatív módon követheted nyomon a céges VPN használatot az alábbi módon. A Sentinel Workbookokkal könnyedén létrehozhatsz egy átlátható és részletes dashboardot.
📌 Mit jeleníthetsz meg a VPN dashboardon?
✅ Élő VPN munkamenetek száma – valós idejű követés
✅ Top 10 leggyakoribb VPN felhasználó – ki csatlakozik a legtöbbször? (Jelen esetben ezt mutatom be.)
✅ VPN csatlakozások földrajzi térképen – hol történnek a kapcsolódások?
✅ VPN kapcsolatok időbeli eloszlása – csúcsidők vizsgálata az irodában
📌 KQL lekérdezés a leggyakoribb VPN felhasználókhoz
Az alábbi KQL lekérdezéssel könnyedén listázhatod a legaktívabb VPN-felhasználókat:
FortiSyslog_CL
| where subtype == "vpn"
| where action == "tunnel-up" | summarize count() by user
| top 10 by count_
1️⃣ Navigálj a Microsoft Sentinel → Workbooks menüponthoz
2️⃣ Hozz létre egy új dashboardot
3️⃣ Adj hozzá diagramokat és térképeket a KQL lekérdezések alapján
Új Sentinel Workbook létrehozása:
Hozzáadjuk a query-t (a lekérdezést):
Itt a lekérdezés:
El kell mentenünk:
Mostmár megjelent a workbook, a mentettek között:
Valós időben látszódik a Top 10 VPN felhasználó:
🔥 Fusion Rule Tesztelése Gyanús VPN Eseményekre
A Fusion Rule képes különböző eseményeket összekapcsolni, így segít azonosítani azokat a szokatlan mintázatokat, amelyek biztonsági kockázatot jelenthetnek. Ha ilyen eseményt érzékel, automatikusan riasztást generál.
📌 Gyanús helyzet: VPN bejelentkezés + Admin jogosultság szerzése
Képzeld el a következő forgatókönyvet:
🔹 Egy felhasználó VPN-en keresztül bejelentkezik
🔹 Rövid időn belül adminisztrátori jogosultságot kap az Active Directory-ban
Ez a viselkedés szokatlan lehet, különösen, ha az adott felhasználó korábban nem kapott adminisztrátori jogokat, vagy ha a rendszerben ritkán történik ilyen változás. Ez akár belső fenyegetést, kompromittált fiókot vagy jogosulatlan hozzáférési kísérletet is jelezhet.
📌Itt már nemcsak a FortiGate VPN Syslogokat, hanem az on-premise Windows Server tartományvezérlők Event logjait is felhasználjuk. A két adatforrást összevetjük és korreláljuk, hogy átfogóbb képet kapjunk az eseményekről.
Az alábbi DCR (Data Collection Rule gyűjti be a Windows Event logokat a földi „on-premise” szerverről):
Ez pedig maga az eseménynapló bejegyzés:
Az Event ID 4728 a Windows Security Log egyik eseménye, amely azt jelzi, hogy egy felhasználót hozzáadtak egy biztonsági csoporthoz.
📌 Részletek az Event ID 4728-ról:
✔ Esemény típusa: Windows Security Log
✔ Esemény leírása: „A member was added to a security-enabled global group.”
✔ Mit jelent? Ez az esemény azt rögzíti, amikor egy felhasználó bekerül egy globális biztonsági csoportba, például az Administrators, Domain Admins vagy más privilegizált csoportokba.
A tesztem során manuálisan rögzítettem az eseményt a naplóba azon a tesztszerveren, amelyre az Azure Monitoring Agent már telepítve volt. Ugyanakkor ez akár egy valós eseményként is megjelenhetne, ha az Azure Monitoring Agentet a tartományvezérlőkre is telepítenénk. (Mivel éles környezetben „teszteltem”, így nem akartam a logokat „meghamisítani”.)
🔍 VPN Bejelentkezés és Admin Jog Kiosztás Felderítése
Az alábbi KQL lekérdezés segít azonosítani azokat az eseteket, amikor egy felhasználó VPN-en bejelentkezik, majd 3 órán belül admin jogot kap egy Windows gépen. Ez a viselkedés gyanús lehet, és segíthet kiszűrni potenciális támadásokat vagy jogosulatlan hozzáféréseket.
📌 KQL Lekérdezés
| where subtype == „vpn”
| where action == „tunnel-up”
| extend User = tolower(TargetAccountName) // Felhasználónév kisbetűsítés
| project VPN_TimeGenerated = TimeGenerated, User
| join kind=inner (
// Windows események keresése (Admin jog kiadás)
Event
| where EventID == 4728
| extend ExtractedUser = tolower(RenderedDescription) // A RenderedDescription tartalmazza a felhasználónevet
| project Event_TimeGenerated = TimeGenerated, ExtractedUser, EventMessage = RenderedDescription, Computer
) on $left.User == $right.ExtractedUser
| where Event_TimeGenerated between (VPN_TimeGenerated .. VPN_TimeGenerated + 3h) // 3 órán belüli események
| project ExtractedUser, VPN_TimeGenerated, Event_TimeGenerated, Computer, EventMessage
| extend timestamp = Event_TimeGenerated, EventType = „VPN Login & Admin Rights Escalation”
🔎 KQL Lekérdezés Működése
1️⃣ VPN események keresése (FortiGate logok)
✔ A FortiSyslog_CL táblából szűri a VPN eseményeket (subtype == "vpn"
).
✔ Csak a sikeres VPN csatlakozásokat (action == "tunnel-up"
) tartja meg.
✔ A felhasználónevet kisbetűs formára alakítja (tolower()
), hogy illeszkedjen a Windows eseménylogokhoz.
✔ Kiválasztott mezők:
🔹 VPN_TimeGenerated – VPN bejelentkezés időpontja
🔹 User – A VPN-en bejelentkezett felhasználó
2️⃣ Windows események keresése (Admin jog kiadás)
✔ A Windows Event logokból csak azokat az eseményeket keresi, ahol az Event ID = 4728 (admin jog kiosztás).
✔ A RenderedDescription mezőből az admin jogot kapó felhasználót kisbetűsítve dolgozza fel.
✔ Kiválasztott mezők:
🔹 Event_TimeGenerated – Admin jog kiosztás időpontja
🔹 ExtractedUser – Az admin jogot kapó felhasználó
🔹 EventMessage – Az esemény részletes leírása
🔹 Computer – Az érintett számítógép
3️⃣ VPN és Windows események összekapcsolása
✔ A join kind=inner operátor segítségével összekapcsolja a két eseményt felhasználónév alapján (User == ExtractedUser
).
✔ Csak az azonos felhasználókhoz kapcsolódó események maradnak meg.
4️⃣ Időbeli szűrés: csak 3 órán belüli események
✔ Az admin jog kiosztásának 3 órán belül kell történnie a VPN bejelentkezés után.
✔ Ha ez a feltétel nem teljesül, az esemény nem jelenik meg az eredményben.
5️⃣ Kimeneti adatok kiválasztása
🔹 ExtractedUser – Az érintett felhasználó neve
🔹 VPN_TimeGenerated – VPN belépés időpontja
🔹 Event_TimeGenerated – Admin jog kiosztás időpontja
🔹 Computer – Az érintett számítógép
🔹 EventMessage – Az esemény részletes leírása
🔹 EventType – Egyedi jelölés: "VPN Login & Admin Rights Escalation"
❓ Miért Fontos Ez a Szabály?
✅ Automatikusan felismeri, ha egy felhasználó VPN-en bejelentkezik, majd rövid időn belül admin jogot kap.
✅ Segít kiszűrni a gyanús tevékenységeket, például támadásokat vagy insider threat-eket.
✅ Microsoft Sentinelben riasztásra és incident generálásra használható.
A Fusion Rule elkészítése:
Bemásoljuk a lekérdezést, az Entity mapping, és scheduling megadása:
Mikor van találat, és a két eseményt összekapcsolja a Sentinel megjelenik az incidens:
📝Összegzés
A Sentinel a gyakorlatban nem csupán egy elméleti biztonsági megoldás, hanem egy valós helyzetekben tesztelt és bizonyítottan hatékony eszköz, amely segít az IT-környezetek átláthatóságának növelésében és a fenyegetések gyors kezelésében. A cikk során számos gyakorlati példát és valós forgatókönyvet vizsgáltunk meg, amelyek rámutattak a Sentinel erősségeire, kihívásaira és az optimalizálás lehetőségeire.
A tapasztalatok azt mutatják, hogy a megfelelő konfiguráció, folyamatos finomhangolás és automatizáció révén a Sentinel valóban hatékony védelmi vonalat képezhet. Nem csupán a riasztások észlelésében, hanem azok kontekstuális elemzésében és kezelésében is kulcsszerepet játszik.
Végső soron a Sentinel nem csupán egy eszköz, hanem egy proaktív biztonsági stratégia része, amely segíthet a cégeknek a modern fenyegetésekkel szembeni védekezésben. Az igazi kihívás nem csupán az implementáció, hanem a folyamatos optimalizálás és a biztonsági csapatok megfelelő felkészítése annak érdekében, hogy a Sentinel teljes potenciálját ki lehessen aknázni.