ronakmishra28/microsoft-sentinel-enterprise-siem-lab
GitHub: ronakmishra28/microsoft-sentinel-enterprise-siem-lab
Stars: 0 | Forks: 0
# Microsoft Sentinel Enterprise SIEM Lab
**SC-200 Certified** | CompTIA Security+ | ISC2 CC
This lab simulates a real enterprise SOC environment built entirely from scratch. I connected two virtual machines (Windows 11 and Ubuntu 22.04) to Microsoft Sentinel via Azure Arc, ingested security logs from both endpoints, and used a Kali Linux VM as an attacker to simulate real-world threats including SSH brute force, RDP brute force, and post-exploitation reconnaissance. I then detected those attacks using custom KQL analytics rules, investigated them using threat hunting queries, responded using the NIST incident response framework, and automated the response using a SOAR playbook. Every step is documented with screenshots taken directly from the live environment.
This is not a guided lab or a walkthrough — every component was configured manually, every detection rule was written from scratch, and every incident was investigated end-to-end.
## How to Navigate This Repo
| If you want to see... | Go to... |
|----------------------|----------|
| How the lab was set up | [Day 1](./Day01-Environment-Setup/) |
| Multi-endpoint onboarding + first attack | [Day 2](./Day02-Multi-Endpoint-Attack-Simulation/) |
| Incident response investigation | [Day 3](./Day03-Threat-Hunting-Incident-Response/) + [IR Report](./Day03-Threat-Hunting-Incident-Response/IR-2026-001-SSH-Brute-Force.pdf) |
| Windows attack detection | [Day 4](./Day04-Windows-Attack-Simulation/) |
| KQL threat hunting queries | [Day 5](./Day05-KQL-Threat-Hunting/) |
| SOAR automation playbook | [Day 6](./Day06-SOAR-Automation/) |
| SOC Dashboard | [Day 7](./Day07-SOC-Dashboard/) |
| All KQL queries in one place | [Analytics Rules](#analytics-rules) + [Hunting Queries](#threat-hunting-queries) |
| MITRE ATT&CK coverage | [MITRE ATT&CK Coverage](#mitre-attck-coverage) |
| Screenshots | [Day01](./Day01-Environment-Setup/screenshots/) through [Day07](./Day07-SOC-Dashboard/screenshots/) |
## Lab Architecture
MacBook M4 Pro (Host)
└── Parallels
├── Windows 11 Enterprise — RONAKMISHRA345C (10.0.0.32) → Monitored Endpoint
├── Ubuntu 22.04 — ronak (10.0.0.33) → Monitored Endpoint
└── Kali Linux 2025.2 (10.0.0.100) → Attack Machine
Microsoft Azure
└── Resource Group: sc200-rg (East US)
├── Log Analytics Workspace: sc200-lab
├── Microsoft Sentinel
├── Azure Arc (connects both VMs to Azure)
├── Azure Monitor Agent (on Windows + Ubuntu)
├── Data Collection Rules (Windows Security Events + Linux Syslog)
└── Logic App: Sentinel-Block-IP-Playbook (SOAR)
## What Was Built
| Component | Details |
|-----------|---------|
| SIEM Platform | Microsoft Sentinel on Log Analytics Workspace |
| Monitored Endpoints | Windows 11 Enterprise + Ubuntu 22.04 via Azure Arc |
| Data Sources | Windows Security Events (AMA) + Linux Syslog (AMA) |
| Analytics Rules | 3 custom detection rules (SSH BF, RDP BF, Recon) |
| Hunting Queries | 4 custom KQL threat hunting queries |
| Incidents | 3 auto-generated incidents from analytics rules |
| SOAR | Logic App playbook + Automation Rule |
| Incident Report | IR-2026-001 (SSH Brute Force — Resolved) |
## Lab Timeline
### Day 1 — Environment Setup & Windows Endpoint
- Deployed Microsoft Sentinel workspace (`sc200-lab`)
- Connected Windows VM to Azure Arc
- Installed Azure Monitor Agent on Windows
- Created Data Collection Rule for Windows Security Events
- Connected Windows Security Events via AMA connector
- Verified SecurityEvent logs flowing into Sentinel
- Simulated Windows brute force — detected EventID 4625 failed logons
### Day 2 — Multi-Endpoint Onboarding & Attack Simulation
- Connected Ubuntu VM to Azure Arc
- Installed Azure Monitor Agent on Ubuntu
- Created Linux Syslog Data Collection Rule
- Verified Syslog data flowing from Ubuntu into Sentinel
- Ran Hydra SSH brute force from Kali against Ubuntu — 260 failed attempts detected
- Built custom analytics rule: **SSH Brute Force Attack Detected** (High severity, MITRE T1110.001, runs every 5 min)
- Incident auto-generated: ID 1 — SSH Brute Force Attack Detected — High — Active
### Day 3 — Threat Hunting & Incident Response
- Built attack timeline chart showing 3 attack waves (48, 120, 88 attempts)
- Identified attacker IP (10.0.0.100) and targeted username via KQL forensics
- Confirmed no successful authentication
- Contained attacker IP via UFW: `sudo ufw deny from 10.0.0.100 to any port 22`
- Confirmed block — Kali SSH connection timed out
- Wrote incident report: [IR-2026-001-SSH-Brute-Force](./Day03-Threat-Hunting-Incident-Response/IR-2026-001-SSH-Brute-Force.pdf)
### Day 4 — Windows Attack Simulation
- Ran Nmap from Kali against Windows VM — discovered ports 445 (SMB) and 3389 (RDP) open
- Ran Hydra RDP brute force — 14 failed logons (EventID 4625) detected in Sentinel
- Ran reconnaissance commands on Windows (whoami, net user, ipconfig) — detected via EventID 4688
- Built **RDP Brute Force Attack Detected** analytics rule (High, MITRE T1110)
- Built **Suspicious Reconnaissance Commands Detected** analytics rule (Medium, MITRE T1082)
- 3 active analytics rules total
### Day 5 — KQL Threat Hunting
Built 4 custom hunting queries in Microsoft Sentinel:
| Query | Tactic | Technique |
|-------|--------|-----------|
| Failed Logon Summary by Account | Credential Access | T1110 |
| Suspicious Process Creation on Windows | Execution | T1204 |
| Privilege Escalation Detection | Privilege Escalation | T1068 |
| Linux Recon Detection | Discovery | T1082 |
### Day 6 — SOAR Automation
- Built Logic App playbook: `Sentinel-Block-IP-Playbook`
- Trigger: Microsoft Sentinel incident
- Action: Add automated comment to incident with response instructions
- Created Automation Rule: `Auto-Respond to SSH Brute Force`
- Fires when incident created matching SSH Brute Force analytics rule
- Automatically runs the playbook
- Granted Sentinel Automation Contributor permissions on resource group
### Day 7 — SOC Dashboard (Azure Monitor Workbooks)
- Built a full enterprise SOC dashboard in Azure Monitor Workbooks connected to the sc200-lab Log Analytics workspace
- Dashboard contains 6 live sections powered by KQL queries:
| Section | Visualization | Data Source |
|---------|--------------|-------------|
| Failed Logon Analysis (Windows) | Bar chart | SecurityEvent — EventID 4625 |
| SSH Brute Force Attack Timeline | Line chart | Syslog — Failed password events |
| Top Attacker IPs | Grid | Syslog — Parsed attacker IP |
| Windows Security Event Distribution | Pie chart | SecurityEvent — EventID 4624/4625/4688/4672 |
| Reconnaissance Commands Detected | Grid | SecurityEvent — EventID 4688 |
| Active Incidents | Grid | SecurityIncident |
## Analytics Rules
### Rule 1: SSH Brute Force Attack Detected
Syslog
| where Facility == "authpriv"
| where SyslogMessage contains "Failed password" or SyslogMessage contains "authentication failure"
| where Computer == "ronak"
| summarize FailedAttempts = count() by Computer, HostName, bin(TimeGenerated, 5m)
| where FailedAttempts > 10
- **Severity:** High
- **MITRE ATT&CK:** T1110.001 — Brute Force: Password Guessing
- **Schedule:** Every 5 minutes
### Rule 2: RDP Brute Force Attack Detected
SecurityEvent
| where EventID == 4625
| where TimeGenerated > ago(1h)
| summarize FailedLogons = count() by IpAddress, Account, Computer
| where FailedLogons > 5
- **Severity:** High
- **MITRE ATT&CK:** T1110 — Brute Force
- **Schedule:** Every 5 minutes
### Rule 3: Suspicious Reconnaissance Commands Detected
SecurityEvent
| where EventID == 4688
| where TimeGenerated > ago(1h)
| where CommandLine has_any ("whoami", "net user", "ipconfig", "systeminfo", "tasklist", "net localgroup")
| project TimeGenerated, Account, Computer, NewProcessName, CommandLine
- **Severity:** Medium
- **MITRE ATT&CK:** T1082 — System Information Discovery
- **Schedule:** Every 5 minutes
## Threat Hunting Queries
### Failed Logon Summary by Account
SecurityEvent
| where EventID == 4625
| where TimeGenerated > ago(24h)
| summarize FailedLogons = count() by Account, Computer, IpAddress
| where FailedLogons > 5
| order by FailedLogons desc
### Suspicious Process Creation on Windows
SecurityEvent
| where EventID == 4688
| where TimeGenerated > ago(7d)
| where CommandLine has_any ("whoami", "net user", "ipconfig", "systeminfo", "tasklist", "net localgroup")
| project TimeGenerated, Account, Computer, NewProcessName, CommandLine, IpAddress
| order by TimeGenerated desc
### Privilege Escalation Detection
SecurityEvent
| where EventID in (4672, 4728, 4732, 4756)
| where TimeGenerated > ago(7d)
| project TimeGenerated, Account, Computer, EventID, Activity, IpAddress
| order by TimeGenerated desc
### Linux Recon Detection
Syslog
| where TimeGenerated > ago(7d)
| where SyslogMessage has_any ("whoami", "uname", "ifconfig", "netstat", "ps aux", "id", "cat /etc/passwd")
| project TimeGenerated, HostName, SyslogMessage, Facility, SeverityLevel
| order by TimeGenerated desc
## Incident Report
**IR-2026-001 — SSH Brute Force Attack Against Ubuntu Server**
| Field | Value |
|-------|-------|
| Date | May 16, 2026 |
| Analyst | Ronak Mishra |
| Severity | High |
| Status | Resolved |
| Attacker IP | 10.0.0.100 (Kali Linux) |
| Target | ronak (Ubuntu 22.04, 10.0.0.33) |
| Total Attempts | 260 failed SSH authentication attempts |
| Attack Duration | ~28 minutes across 3 waves |
| Successful Auth | None |
| MITRE ATT&CK | T1110.001 — Brute Force: Password Guessing |
**Attack Timeline:**
- 05:05 UTC — First wave begins (48 attempts)
- 05:25 UTC — Second wave (120 attempts)
- 05:30 UTC — Third wave (88 attempts)
- 05:45 UTC — Attacker IP identified via KQL forensics
- 05:50 UTC — Containment: `sudo ufw deny from 10.0.0.100 to any port 22`
- 05:52 UTC — Block confirmed, SSH from Kali timed out
Full report: [IR-2026-001-SSH-Brute-Force](./Day03-Threat-Hunting-Incident-Response/IR-2026-001-SSH-Brute-Force.pdf)
## MITRE ATT&CK Coverage
| Tactic | Technique | Detection Method |
|--------|-----------|-----------------|
| Credential Access | T1110 — Brute Force | Analytics Rule + Hunting Query |
| Credential Access | T1110.001 — Password Guessing | Analytics Rule |
| Discovery | T1082 — System Information Discovery | Analytics Rule + Hunting Query |
| Execution | T1204 — User Execution | Hunting Query |
| Privilege Escalation | T1068 — Exploitation for Privilege Escalation | Hunting Query |
## Key Skills Demonstrated
- Azure Arc deployment for hybrid endpoint management
- Azure Monitor Agent installation and Data Collection Rule configuration
- Windows Security Event log analysis (EventID 4625, 4624, 4688, 4672)
- Linux Syslog ingestion and analysis
- KQL query writing for detection, investigation, and hunting
- Custom analytics rule creation with MITRE ATT&CK mapping
- Incident response following NIST IR framework
- Threat containment via UFW firewall rules
- SOAR playbook development with Azure Logic Apps
- Automation rule configuration for automated incident response
## Screenshots
| Day | Folder | Contents |
|-----|--------|----------|
| Day 1 | [Day01/](./Day01-Environment-Setup/) | Workspace setup, Arc connection, AMA install, DCR, first logs, KQL queries |
| Day 2 | [Day02/](./Day02-Multi-Endpoint-Attack-Simulation/) | Ubuntu onboarding, Hydra attack detection, analytics rule, incident creation |
| Day 3 | [Day03/](./Day03-Threat-Hunting-Incident-Response/) | Attack timeline, IR forensics, containment, IR report |
| Day 4 | [Day04/](./Day04-Windows-Attack-Simulation/) | Nmap scan, RDP brute force, recon detection, 3 analytics rules |
| Day 5 | [Day05/](./Day05-KQL-Threat-Hunting/) | 4 custom threat hunting queries |
| Day 6 | [Day06/](./Day06-SOAR-Automation/) | SOAR playbook, automation rule, triggered response |
| Day 7 | [Day07/](./Day07-SOC-Dashboard/) | SOC dashboard — 6 sections, live KQL visualizations |
## Author
**Ronak Mishra**
- Portfolio: [ronakmishra28.github.io](https://ronakmishra28.github.io)
- Blog: [ronakonweb.medium.com](https://ronakonweb.medium.com)
- LinkedIn: [www.linkedin.com/in/ronakmishra/](https://www.linkedin.com/in/ronakmishra)
- Certifications: SC-200 | CompTIA Security+ | ISC2 CC