Skip to main content

dalonso-security-repo

Microsoft Security threat hunting queries, KQL examples, Sentinel workbooks, and security analytics notebooks

معلومات المصدر

المستودع
reason-machines/security-skills
آخر نشاط في المصدر
١٢ يونيو ٢٠٢٦ في ١٨:٤٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٢
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
dalonso-security-repo
description
Microsoft Security threat hunting queries, KQL examples, Sentinel workbooks, and security analytics notebooks
triggers
["how do I use KQL queries from Dalonso Security Repo","show me threat hunting examples for Microsoft Sentinel","help me with Microsoft security analytics notebooks","how to implement Sentinel workbooks from Dalonso repo","find KQL queries for threat detection","use David Alonso security resources for threat hunting","implement Microsoft Defender threat hunting queries","analyze security data with Dalonso notebooks"]
# Dalonso Security Repo > Skill by [ara.so](https://ara.so) — Security Skills collection. A comprehensive collection of Microsoft Security resources including KQL queries, threat hunting use cases, Microsoft Sentinel workbooks, and Jupyter notebooks for security analytics and investigation workflows. ## What This Repository Provides The Dalonso Security Repo is a curated knowledge base for Microsoft Security technologies: - **Threat Hunting Use Cases**: Real-world KQL (Kusto Query Language) queries for proactive threat detection - **Microsoft Sentinel Workbooks**: Custom visualization and analysis dashboards - **Security Analytics Notebooks**: Jupyter notebooks for advanced investigation and automation - **Practical Examples**: Production-ready queries and workflows for security operations ## Installation Clone the repository to access all resources: ```bash git clone https://github.com/davidalonsod/Dalonso-Security-Repo.git cd Dalonso-Security-Repo ``` For Jupyter notebooks, install required dependencies: ```bash pip install jupyter msticpy pandas azure-monitor-query azure-identity ``` ## Repository Structure The repository is organized by security tool and use case: ``` Dalonso-Security-Repo/ ├── Threat-Hunting/ # KQL queries for threat hunting ├── Sentinel-Workbooks/ # Custom Sentinel workbooks (JSON) ├── Notebooks/ # Jupyter notebooks (.ipynb) ├── Detection-Rules/ # Analytics rules and detections └── Investigation-Queries/ # Ad-hoc investigation KQL ``` ## Working with KQL Queries ### Basic KQL Query Structure KQL queries in this repo follow standard Microsoft Sentinel/Log Analytics syntax: ```kql // Example: Detecting suspicious PowerShell execution SecurityEvent | where TimeGenerated > ago(24h) | where EventID == 4688 | where Process has "powershell.exe" | where CommandLine has_any ("bypass", "encoded", "hidden") | project TimeGenerated, Computer, Account, CommandLine, ParentProcessName | order by TimeGenerated desc ``` ### Using Queries in Microsoft Sentinel 1. Navigate to **Microsoft Sentinel** > **Logs** 2. Copy the KQL query from the repository 3. Paste into the query editor 4. Adjust time ranges and parameters as needed 5. Run and analyze results ### Threat Hunting Query Pattern ```kql // Pattern: Multi-stage threat hunting let suspiciousIPs = datatable(IPAddress:string) [ "192.0.2.1", "198.51.100.1" ]; let timeframe = 7d; CommonSecurityLog | where TimeGenerated > ago(timeframe) | where DestinationIP in (suspiciousIPs) | join kind=inner ( SigninLogs | where TimeGenerated > ago(timeframe) | where ResultType == "0" ) on $left.SourceIP == $right.IPAddress | project TimeGenerated, SourceIP, DestinationIP, UserPrincipalName, DeviceDetail | summarize count() by SourceIP, UserPrincipalName ``` ## Working with Sentinel Workbooks ### Importing a Workbook 1. Download the workbook JSON file from the repository 2. In **Microsoft Sentinel** > **Workbooks** > **Add workbook** 3. Click **Edit** > **Advanced Editor** (</> icon) 4. Replace content with the downloaded JSON 5. Click **Apply** > **Save** ### Workbook JSON Structure ```json { "version": "Notebook/1.0", "items": [ { "type": 3, "content": { "version": "KqlItem/1.0", "query": "SecurityEvent\n| summarize count() by Computer\n| top 10 by count_", "size": 0, "title": "Top 10 Event Sources" } } ] } ``` ## Using Security Analytics Notebooks ### Setting Up Jupyter Environment ```python # Install required packages # pip install msticpy azure-monitor-query azure-identity pandas matplotlib import msticpy as mp from msticpy.data import QueryProvider from azure.identity import AzureCliCredential import pandas as pd import os # Initialize MSTICPy mp.init_notebook() ``` ### Connecting to Microsoft Sentinel ```python # Authenticate using Azure CLI or environment variables qry_prov = QueryProvider("MSSentinel") # Configure workspace workspace_id = os.getenv("SENTINEL_WORKSPACE_ID") tenant_id = os.getenv("AZURE_TENANT_ID") qry_prov.connect( connection_str=f"loganalytics://code().tenant('{tenant_id}').workspace('{workspace_id}')" ) ``` ### Running Threat Hunting Queries ```python # Example: Hunt for lateral movement query = """ SecurityEvent | where TimeGenerated > ago(24h) | where EventID == 4624 | where LogonType == 3 | summarize LogonCount = count() by Account, Computer, IpAddress | where LogonCount > 10 | order by LogonCount desc """ results = qry_prov.exec_query(query) print(f"Found {len(results)} potential lateral movement events") results.head(10) ``` ### Data Analysis Pattern ```python # Analyze authentication anomalies import matplotlib.pyplot as plt def analyze_auth_patterns(dataframe): """Analyze authentication patterns for anomalies""" # Group by hour dataframe['Hour'] = pd.to_datetime(dataframe['TimeGenerated']).dt.hour hourly_counts = dataframe.groupby('Hour').size() # Plot distribution plt.figure(figsize=(12, 6)) hourly_counts.plot(kind='bar') plt.title('Authentication Events by Hour') plt.xlabel('Hour of Day') plt.ylabel('Event Count') plt.show() # Identify anomalies (simple threshold) mean_count = hourly_counts.mean() std_count = hourly_counts.std() threshold = mean_count + (2 * std_count) anomalies = hourly_counts[hourly_counts > threshold] return anomalies # Use the function auth_data = qry_prov.exec_query("SigninLogs | where TimeGenerated > ago(7d)") anomalies = analyze_auth_patterns(auth_data) print(f"Anomalous hours: {anomalies.index.tolist()}") ``` ## Common Detection Patterns ### Credential Access Detection ```kql // Detect LSASS memory access SecurityEvent | where TimeGenerated > ago(1h) | where EventID == 4656 | where ObjectName has "lsass.exe" | where AccessMask has "0x1010" | project TimeGenerated, Computer, SubjectUserName, ProcessName, ObjectName ``` ### Persistence Mechanism Detection ```kql // Monitor registry run keys SecurityEvent | where TimeGenerated > ago(24h) | where EventID in (4657, 4663) | where ObjectName has_any ( "\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", "\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce" ) | project TimeGenerated, Computer, Account, ObjectName, ProcessName ``` ### Command and Control Detection ```kql // Detect beaconing behavior CommonSecurityLog | where TimeGenerated > ago(24h) | summarize ConnectionCount = count(), AvgBytes = avg(SentBytes + ReceivedBytes), TimeVariance = stdev(bin(TimeGenerated, 1m)) by SourceIP, DestinationIP | where ConnectionCount > 50 | where TimeVariance < 5 // Consistent timing | where AvgBytes < 1000 // Small payloads ``` ## Configuration ### Environment Variables Set up authentication for notebooks: ```bash export AZURE_TENANT_ID="your-tenant-id" export SENTINEL_WORKSPACE_ID="your-workspace-id" export AZURE_CLIENT_ID="your-service-principal-id" export AZURE_CLIENT_SECRET="your-service-principal-secret" ``` ### MSTICPy Configuration Create `msticpyconfig.yaml` in your working directory: ```yaml AzureSentinel: Workspaces: Default: WorkspaceId: ${SENTINEL_WORKSPACE_ID} TenantId: ${AZURE_TENANT_ID} TIProviders: VirusTotal: Args: AuthKey: ${VT_API_KEY} Primary: true Provider: "VirusTotal" ``` ## Troubleshooting ### KQL Query Timeout If queries timeout, optimize with: ```kql // Use time filters early | where TimeGenerated > ago(1h) // Limit columns | project TimeGenerated, Computer, Account // Use summarize instead of distinct when possible | summarize count() by Computer ``` ### Notebook Authentication Issues ```python # Try interactive authentication from azure.identity import InteractiveBrowserCredential credential = InteractiveBrowserCredential() qry_prov.connect(credential=credential) ``` ### Missing Data in Queries Verify data connectors are enabled and tables exist: ```kql // List available tables search * | distinct $table | order by $table asc ``` ### Performance Optimization ```kql // Use materialize() for reusable subqueries let suspiciousEvents = materialize( SecurityEvent | where TimeGenerated > ago(24h) | where EventID in (4624, 4625, 4688) ); suspiciousEvents | where EventID == 4624 | summarize count() by Computer ``` ## Best Practices 1. **Always use time filters** early in queries to reduce data scanned 2. **Test queries on small timeframes** before expanding scope 3. **Document custom queries** with comments explaining detection logic 4. **Version control workbooks** by exporting JSON regularly 5. **Use environment variables** for sensitive configuration 6. **Leverage MSTICPy** for complex investigation workflows 7. **Schedule notebooks** for automated threat hunting runs ## Additional Resources - [David Alonso LinkedIn](https://www.linkedin.com/in/david-alonso-dominguez/) - [Microsoft Sentinel Documentation](https://docs.microsoft.com/azure/sentinel/) - [KQL Reference](https://docs.microsoft.com/azure/data-explorer/kusto/query/) - [MSTICPy Documentation](https://msticpy.readthedocs.io/)
عرض على GitHub