Northern Virginia, USA
ProjectsSeptember 17, 2025

Active Directory 2.0: SIEM + SOAR Auto-Response (Splunk, Slack, Shuffle)

Active Directory 2.0: SIEM + SOAR Auto-Response (Splunk, Slack, Shuffle) — project cover
I built a compact blue-team pipeline that turns a successful offsite RDP login into a guided, one-click containment action:
  • Detect unauthorized successful Windows logons in Splunk (Event ID 4624, LogonType 7/10).
  • Notify in Slack with user, host, source IP, and time.
  • Approve via Shuffle User Input email (Yes/No).
  • Contain automatically in Active Directory: disable the user via LDAP.
  • Confirm in Slack and verify in ADUC.
Why this matters: In a SOC, shaving minutes off detection and response for identity-based attacks is critical. This workflow reduces MTTD/MTTR, enforces human-in-the-loop governance for identity actions, and demonstrates practical SIEM + SOAR + IAM integration.
  • Cloud lab topology (VPC):
    • Windows Server 2025 Domain Controller (AD DS), Windows Server 2025 Test VM, and Ubuntu 22.04 Splunk server on isolated VPC.
    • Host & cloud firewalls tuned for 3389 (RDP), 8000 (Splunk Web), and 9997 (Splunk receiving).
  • Active Directory setup:
    • Promoted DC; domain MyDFIR.local.
    • Created Jenny Smith (JSmith) test user; enabled RDP access on the Test VM for domain users.
    • Verified domain joins and sign-in behavior (MYDFIR\JSmith vs local account context).
  • Splunk ingestion & detection:
    • Installed Splunk Enterprise on Ubuntu; set TZ to GMT; added Splunk Add-on for Microsoft Windows.
    • Created index mydfir-ad; enabled receiving on :9997.
    • Deployed Universal Forwarder on both Windows hosts; added:
      Conf
      # inputs.conf (local)
      [WinEventLog://Security]
      index = mydfir-ad
      disabled = 0
      
    • SPL detection for successful RDP logons (offsite):
      Spl
      index=mydfir-ad EventCode=4624 (Logon_Type=7 OR Logon_Type=10)
      Source_Network_Address=* Source_Network_Address!="-"
      | eval human_time=strftime(_time,"%Y-%m-%d %H:%M:%S %Z")
      | stats count by _time, human_time, ComputerName, Source_Network_Address, user, Logon_Type
      
    • Saved as scheduled alert “MyDFIR-Unauthorized-Successful-Login-RDP” (ran every minute during testing).
  • Slack alerting:
    • Slack workspace + #alerts channel.
    • Message template (from Shuffle) with runtime args:
      Alert: $exec.search_name
      Time:  $exec.result.human_time
      User:  $exec.result.user
      Source IP: $exec.result.Source_Network_Address
      
    • Used channel ID to route reliably to #alerts.
  • Shuffle SOAR workflow (human-in-the-loop):
    • Webhook (from Splunk) → Slack alert → User Input (Email Yes/No) → Active Directory: Disable User → Get User Attributes → Condition → Slack confirmation.
    • LDAP details: host (DC), port 389, useSSL=false (testing), Base DN CN=Users,DC=MyDFIR,DC=local.
    • Account mapping: normalized $exec.result.user to sAMAccountName (e.g., JSmith) to avoid domain prefix issues (MYDFIR\JSmith).
    • Post-action verification: parsed user attributes and matched userAccountControl state (or attribute blob contains ACCOUNTDISABLE) before sending Slack success message.
  • Proof of remediation:
    • Final Slack message: “Account JSmith has been disabled.”
    • ADUC screenshot shows the down-arrow on the user icon and “Enable account” in the context menu.
  • Windows & AD: Windows Server 2022, AD DS, ADUC, LDAP (389).
  • Linux & SIEM: Ubuntu 22.04, Splunk Enterprise, Splunk Add-on for Microsoft Windows, Universal Forwarder.
  • SOAR & Messaging: Shuffle (webhooks, user input, app actions), Slack API (chat.postMessage).
  • Networking & Security: VPC networking, RDP (3389), UFW rules, role-based access (email approvals), least-privilege after testing.
  • Detection Engineering: Windows Event IDs (4624), Logon Types (7/10), SPL authoring, alert scheduling, runtime arg templating.
  • Evidence & Ops: Run logs, Explore Runs, Slack channel IDs, sanitized screenshots.
  • OAuth & Slack scopes: Resolved invalid_scope and not_in_channel by using correct chat:write scope and posting via channel ID with the bot invited to #alerts.
  • Webhook vs “Play” runs (Shuffle): To pass runtime args ($exec.*), I triggered from the Webhook start node; manual Play runs skip nodes or lack payloads.
  • LDAP bind & policy errors: Encountered strongerAuthRequired; for testing, used 389 / no SSL and a temporary privileged test account to validate binding (then reverted).
  • Username normalization: $exec.result.user sometimes arrives as MYDFIR\JSmith. Mapping to sAMAccountName=JSmith fixed “No user found” errors.
  • Sequencing & conditions: Ensured the Slack confirmation only fires after attributes show the disabled state (checked userAccountControl/attribute text).
  • Security hygiene: Opened RDP and Splunk ports narrowly; widened briefly for test signal; locked down after validation. Sanitized public IPs, channel IDs, webhook IDs, emails in screenshots.
Takeaway: Building a reliable IR automation isn’t just wiring tools—it’s data normalization, policy awareness, and safe defaults with explicit approval points.
  • Operational flow: Unauthorized successful RDP logins are detected within a minute, surfaced to Slack with context, approved by email, and contained by disabling the AD user—then verified and announced.
  • SOC value: Converts a noisy identity tactic into a repeatable, governed playbook, improving MTTD/MTTR and reducing reliance on ad-hoc manual steps.
  • Next steps:
    • Add IP reputation enrichment pre-approval to aid triage.
    • Implement LDAPS (636) with certs and a service account scoped for disable-only.
    • Extend to re-enable flow with ticket linkage and post-incident checks (MFA, password reset, device health).

Related projects

Sentilops – Financial Intelligence Automation System

Sentilops – Financial Intelligence Automation System

Built an AI-assisted finance-intelligence pipeline that ingests newsletters and business content, extracts structured signals, routes actions, stores knowledge, and alerts on relevant financial and cash-flow insights.
NOVA CASHFLOW – Financial Literacy Community Automation

NOVA CASHFLOW – Financial Literacy Community Automation

Built community, research, newsletter, and financial-intelligence workflows supporting NOVA CASHFLOW's practical financial-literacy mission for students and young professionals.
Finance + Real Estate Intelligence Automation Suite

Finance + Real Estate Intelligence Automation Suite

A reusable automation architecture for extracting, classifying, storing, and routing finance and real-estate intelligence from newsletters, research sources, and business content.
SentinelOps – AI-Assisted Phishing Investigation Platform

SentinelOps – AI-Assisted Phishing Investigation Platform

Built a Python-based phishing investigation platform that automates webpage evidence collection, IOC extraction, phishing risk scoring, and analyst-ready reporting using Playwright, OpenRouter, and SQLite.
SmishGuard – USPS Smishing Detection & IOC Extraction

SmishGuard – USPS Smishing Detection & IOC Extraction

Analyzed a real-world USPS SMS phishing campaign and developed a Python-based CLI tool to automate smishing triage, extract indicators of compromise (IOCs), generate incident response documentation, and create detection rules.
Enterprise Help Desk Lab – osTicket on Microsoft Azure

Enterprise Help Desk Lab – osTicket on Microsoft Azure

Deployed and secured a cloud-hosted enterprise help desk system in Microsoft Azure using Ubuntu, Apache, MySQL, and osTicket. Implemented SLA tiers, department-based routing, structured triage workflows, and simulated enterprise IT operations.
CupidSecure – AI-Powered Romance Scam Detection

CupidSecure – AI-Powered Romance Scam Detection

Built an end-to-end AI security platform that analyzes dating conversations for romance-scam patterns, scores financial risk, and provides a training simulator and threat dashboard — winner of 1st Place in the Blockchain, Cyber & Security track at HackFax × PatriotHacks 2026.
LinkedIn Content Automation Engine (Make.com, OpenRouter, Gamma AI)

LinkedIn Content Automation Engine (Make.com, OpenRouter, Gamma AI)

Built an end-to-end LinkedIn content engine that turns TLDR newsletters into SOC-focused posts with AI-generated Gamma slide decks, fully automated and scheduled in Make.com.
Cybersecurity Awareness Research for College Students

Cybersecurity Awareness Research for College Students

Transformed an ENG 111 research assignment into a real-world cybersecurity policy proposal advocating mandatory student cybersecurity training and continuous awareness initiatives, supported by peer-reviewed research.
SOAR + EDR Automated Incident Response (LimaCharlie, Tines, Slack, HTML Email)

SOAR + EDR Automated Incident Response (LimaCharlie, Tines, Slack, HTML Email)

Developed a fully automated detection-to-isolation workflow: LimaCharlie detects suspicious activity, Tines generates Slack and email alerts, collects analyst approval, and isolates the endpoint via API—confirming success in Slack.
LCPS Gift Card Phishing Incident Analysis (BEC Investigation)

LCPS Gift Card Phishing Incident Analysis (BEC Investigation)

Investigated and documented a real-world Business Email Compromise (BEC) phishing attempt targeting an LCPS email account. Performed email header forensics, social engineering analysis, framework mapping, and produced a formal incident report and visual case-study poster.
Cloud SOC Honeypot: Microsoft Sentinel Attack Map (Azure)

Cloud SOC Honeypot: Microsoft Sentinel Attack Map (Azure)

Built a cloud-based SOC lab: deployed a Windows honeypot VM in Azure, captured 44,000+ brute-force attempts, forwarded logs to Log Analytics, integrated with Microsoft Sentinel, enriched attacker IPs with GeoIP, and visualized global attack sources on a live map.
Windows Recovery Project: BIOS Boot Failure (Error 1962)

Windows Recovery Project: BIOS Boot Failure (Error 1962)

Troubleshot and restored a compromised Windows desktop that failed with BIOS Error 1962: 'No Operating System Found.' Adjusted BIOS boot configuration, attempted DISM/SFC repairs, then performed a clean OS reinstall via bootable USB to recover full functionality.
IntelliPath AI: Personalized Learning Through AI-Driven Video Summaries

IntelliPath AI: Personalized Learning Through AI-Driven Video Summaries

Developing an AI-powered platform that transforms YouTube videos into structured summaries, actionable notes, and personalized learning paths. Features include transcript analysis, AI assistant chat, sidebar navigation with history/folders, payment integration, and cloud-based persistence.
Astray: Lost Kingdoms (Python Pixel RPG)

Astray: Lost Kingdoms (Python Pixel RPG)

Building a 16-bit RPG in Python using Pygame, featuring interactive menus, real-time cutscenes, object-oriented game logic, and a story-driven quest system. Demonstrates software development skills, creativity, and iterative project management.