January 2026 CHLA InfoSec Operations - Comprehensive Monthly Report
1. Executive Summary
Period: January 2026
Organization: Children’s Hospital Los Angeles (CHLA) - Information Security
Author: Evan Rosado - Information Security Analyst
Report Type: Comprehensive monthly operations summary synthesizing 34 daily captures ({total-lines:,} lines of documentation)
1.1. Month at a Glance
| Category | Summary |
|---|---|
Major Accomplishments |
Linux 802.1X deployment (90% complete), Google/Mandiant pentest support (external + internal), critical posture ACL remediation, home enterprise AD CS deployment |
Critical Security Findings |
Posture redirect ACL allowing Kerberos/SMB (evil twin vulnerability), CVE-2026-20029 ISE XXE vulnerability assessment |
Infrastructure Projects |
8 active projects: Linux workstation deployment, MSCHAPv2 migration, iPSK Manager hardening, netapi automation expansion |
Pentest Support |
7 days total: External pentest (Jan 13-16, Google/Mandiant), Internal pentest (Jan 19-23, Vartan/Ashley/Sarah) |
Personnel Collaboration |
17+ team members across InfoSec, Research, IT, Cloud teams |
Documentation Created |
27 Antora projects, 14+ comprehensive guides, 5+ Mermaid diagrams, deployment runbooks |
Status |
All P0 items tracked, no outstanding critical incidents, 90% milestone achieved on Linux deployment |
1.2. Key Metrics
| Metric | Value |
|---|---|
Total Work Days Logged |
22 days |
Total Captures |
34 |
Total Documentation Lines |
{total-lines:,} |
Critical Findings (Security) |
2 |
Major Projects Active |
8 |
Devices Impacted (MSCHAPv2) |
{total-devices-mschapv2:,} |
Home Enterprise Integration Points |
15+ (AD CS, ISE, WLC, switches, NAS) |
netapi Commands Implemented |
40+ new commands |
Antora Documentation Projects |
27 projects |
2. January 2026 Timeline
2.1. Week 1 (Jan 5-11): NAEMRI Onboarding + Linux Workstation Request
2.1.1. Key Events
-
Jan 5: NAEMRI vendor onboarding (WiFi dACL configuration)
-
Jan 6: VNC traffic investigation task assigned, Dr. Shahab Linux workstation request received
-
Jan 7-9: Design phase for Linux research workstation deployment
-
Jan 12: Extensive Linux workstation collaboration with Xiangming Ding (Senior Bioinformatics Scientist)
2.1.2. Technical Highlights
NAEMRI Onboarding (Jan 5):
-
Created ISE dACL for NAEMRI vendor device
-
Configured VLAN assignment and network access
-
Issue: SNE-21 connectivity loss (BMS device, Vivarium air systems) - UNRESOLVED
Linux Workstation Request (Jan 6-12):
-
Requestor: Dr. Shahab Asgharzadeh (Research faculty)
-
Department: Spatial Biology and Genomics Core
-
Collaboration: Xiangming Ding (Senior Bioinformatics Scientist, TSRI SBG Core)
-
Requirements: EAP-TLS 802.1X, LUKS encryption, Microsoft Defender, AD integration
-
Design Document:
DOC-2026-01-06-004-linux-research-workstation-ise-design.md
Camera Replacement (Jan 7):
-
Location: Rodney building, Sunset corner
-
Status: IPs confirmed, InfoBlox reservation PENDING
2.1.3. Personnel Interactions
| Name | Role/Department | Context |
|---|---|---|
Dr. Shahab Asgharzadeh |
Research Faculty |
Linux workstation deployment |
Xiangming Ding |
Senior Bioinformatics Scientist, TSRI SBG Core |
Technical collaboration on Linux requirements |
Nicholas Bergmann |
InfoSec Analyst II candidate |
Interview session (Jan 9/12) |
Sarah Clizer |
CISO |
Project approval and oversight |
William Cox |
Sr. InfoSec PM |
Project planning |
2.2. Week 2 (Jan 12-18): Home Enterprise AD CS + External Pentest
2.2.1. Key Events
-
Jan 12: Interview with Nicholas Bergmann (InfoSec Analyst II)
-
Jan 13: home enterprise Active Directory Certificate Services deployment begins
-
Jan 13-16: Google/Mandiant External Pentest (4 days)
-
Jan 14: AD CS complete, machine certificates issued for home enterprise
-
Jan 15: Pentest Day 1 activities, wireless field guide created
-
Jan 16: Pentest Day 2, evil twin attack detection prep
2.2.2. Home Enterprise AD CS Deployment (Jan 13-14)
Goal: Deploy enterprise PKI infrastructure for certificate-based 802.1X authentication testing before CHLA production deployment.
Components Deployed:
# Server: home-dc01 (10.50.1.50)
# Roles Installed:
Add-WindowsFeature ADCS-Cert-Authority -IncludeManagementTools
Add-WindowsFeature ADCS-Web-Enrollment
# Root CA Created: HOME-ROOT-CA
# Validity: 10 years
# Key Length: 4096-bit RSA
Certificate Templates Created:
| Template Name | Purpose | Auto-Enroll |
|---|---|---|
Linux-EAP-TLS-Machine |
Linux workstation 802.1X authentication |
Manual (via certbot) |
Windows-Computer |
Windows domain computers |
Yes (GPO) |
User |
User certificates |
Yes (GPO) |
Integration Points:
-
ISE: Configured to trust HOME-ROOT-CA for EAP-TLS validation
-
certbot: Custom script for Linux machine certificate enrollment
-
wpa_supplicant: Configured with machine cert + private key
Status: ✓ COMPLETE - Issued first machine cert on Jan 14, 2026
2.2.3. Google/Mandiant External Pentest (Jan 13-16)
Scope: External attack surface assessment
Duration: 4 days (Mon-Thu)
Team: Google/Mandiant penetration testers
Support Provided:
-
ISE live session monitoring
-
Network access troubleshooting
-
Wireless field guide created for pentest team
-
On-call support during testing hours
Wireless Field Guide Created:
-
File:
WRKX-2026-01-16-wireless-field-guide.md(created for pentest team) -
Contents: CHLA SSIDs, authentication methods, ISE policies, troubleshooting steps
-
Purpose: Enable pentest team self-service for WiFi connectivity issues
Finding Preview (discovered Jan 18): Evil twin attack successful due to permissive posture redirect ACL
2.3. Week 3 (Jan 19-25): Internal Pentest + Critical Security Finding
2.3.1. Internal Pentest Schedule (Jan 19-23)
| Date | Day | Staff | Hours | Activities |
|---|---|---|---|---|
01/19 |
Mon |
Vartan Batmazyan |
8a-3p |
Day 1: Network scanning, initial access attempts |
01/20 |
Tue |
Vartan Batmazyan |
8a-3p |
Day 2: EAP-TLS proof of concept testing |
01/21 |
Wed |
Ashley |
9a-2pm |
Day 3: WiFi security testing |
01/22 |
Thu |
Vartan Batmazyan |
8a-3p |
Day 4: Continued security assessments |
01/23 |
Fri |
Sarah Clizer (CISO) |
8am-2pm |
Day 5 (FINAL): Remediation verification |
2.3.2. CRITICAL SECURITY FINDING: Posture Redirect ACL Vulnerability (Jan 18)
Discovery Date: 2026-01-18 (weekend work session)
Severity: CRITICAL
Issue Summary:
During the Google/Mandiant external pentest (Jan 13-16), the pentest team deployed an evil twin attack using a Raspberry Pi running Kali Linux masquerading as the CHLA_Staff SSID.
The posture redirect ACL (applied before posture assessment completes) was TOO PERMISSIVE - it allowed protocols that should NEVER be allowed during onboarding:
| Protocol | Ports | Needed? | Risk |
|---|---|---|---|
Kerberos |
UDP/TCP 88 |
NO |
Allows AD authentication from rogue AP |
SMB |
TCP 445 |
NO |
Allows file sharing/lateral movement |
DNS |
UDP/TCP 53 |
YES |
Required for ISE portal redirect |
HTTP/HTTPS |
TCP 80/443 |
YES |
Required for posture portal access |
DHCP |
UDP 67/68 |
YES |
Required for IP assignment |
Attack Chain:
1. Pentest team broadcasts "CHLA_Staff" SSID (evil twin)
2. Employee device connects (no certificate validation on PSK networks)
3. Device receives DHCP (allowed)
4. Device resolves DNS (allowed)
5. Device sends Kerberos auth to real DCs (SHOULD BE BLOCKED!)
6. Device accesses SMB shares (SHOULD BE BLOCKED!)
7. Lateral movement possible BEFORE posture assessment
Evil Twin Device Details:
-
Device: Raspberry Pi 4 running Kali Linux
-
MAC Address:
00:14:D1:B0:50:D4 -
SSID Broadcast:
CHLA_Staff(exact match) -
Location: Identified via ISE session logs
Remediation Plan:
-
Create change request for posture redirect ACL update
-
Remove Kerberos (88), SMB (445), LDAP (389), LDAPS (636) from PERMIT list
-
Keep only: DNS (53), HTTP (80), HTTPS (443), DHCP (67/68), NTP (123)
-
Test in lab before production deployment
-
Document lesson learned: "Zero-trust means ZERO protocols beyond absolute minimum"
Status: IN PROGRESS - Change request pending approval (as of Jan 30)
2.3.3. Home Enterprise Testing: modestus-p50 EAP-TLS Success (Jan 19)
Milestone: First successful Linux EAP-TLS authentication using internally-issued machine certificate
Device*: modestus-p50 (Arch Linux)
Network*: Domus-Secure (home enterprise SSID)
Configuration:
# /etc/wpa_supplicant/wpa_supplicant-Domus-Secure.conf
network={
ssid="Domus-Secure"
key_mgmt=WPA-EAP
eap=TLS
identity="modestus-p50.inside.domusdigitalis.dev"
ca_cert="/etc/ssl/certs/HOME-ROOT-CA.pem"
client_cert="/etc/ssl/certs/modestus-p50-eaptls.pem"
private_key="/etc/ssl/private/modestus-p50-eaptls.key"
priority=10
}
Certificate Details:
| Field | Value |
|---|---|
Subject |
|
Issuer |
|
Valid From |
Jan 14, 2026 |
Valid Until |
Jan 14, 2028 |
Serial |
|
Key Length |
2048-bit RSA |
Authentication Flow:
modestus-p50
↓ (Machine Cert)
802.1X EAPOL
↓
WLC (Domus infrastructure)
↓ (RADIUS)
ISE (10.50.1.21)
↓
Validate cert against HOME-ROOT-CA
↓
Check CN matches hostname
↓
Verify cert not revoked (CRL check)
↓
Check group membership: Linux-Cert-Enrollers
↓
[.pass]#ACCESS GRANTED#
Status: ✓ SUCCESS - First production-ready Linux EAP-TLS implementation
2.3.4. PAM/SSSD Troubleshooting Marathon (Jan 22)
Issue: AD user gabriel@inside.domusdigitalis.dev cannot authenticate via su despite SSSD domain join working.
Root Cause: su - (login shell) uses /etc/pam.d/su-l, which was hardcoded to pam_unix.so instead of including system-auth.
Troubleshooting Timeline:
| Time | Hypothesis | Result |
|---|---|---|
14:39 |
|
Removed - still failing |
14:58 |
pam_sss.so not being called |
Confirmed via journalctl - only pam_unix seen |
15:03 |
/etc/pam.d/su-l misconfiguration |
ROOT CAUSE FOUND |
15:08 |
Applied fix with typo |
Used |
15:23 |
Fixed syntax errors |
Still failing - leading spaces in sssd-arch |
15:35 |
Removed leading spaces |
Still failing |
15:40 |
FINAL FIX: Updated /etc/pam.d/su-l |
✓ SUCCESS |
Final Fix:
# /etc/pam.d/su-l
#%PAM-1.0
auth sufficient pam_rootok.so
auth include system-auth # ← FIX: was "required pam_unix.so"
account include system-auth # ← FIX: was "required pam_unix.so"
session include system-auth # ← FIX: was "required pam_unix.so"
password include system-auth
Key Lessons Learned:
-
su vs su-l: Different PAM files!
suuses/etc/pam.d/su,su -uses/etc/pam.d/su-l -
PAM include syntax:
include system-authNOTinclude pam_unix.so -
forward_pass: Only use if pam_sss.so is NOT first in chain
-
Leading spaces: PAM configs must have NO leading whitespace
-
Testing tool:
sssctl user-checks gabriel@domain.com -a authconfirms SSSD works independently
Documentation Created: ARS-SYS-003-pam-sssd-ad-authentication.md (Arsenal entry)
2.4. Week 4 (Jan 26-30): Post-Pentest Operations + Home Enterprise NetworkManager Migration
2.4.1. Week Overview
-
Jan 26: iPSK Manager MySQL hardening, Dr. Shahab deployment validation
-
Jan 27: modestus-p50 NetworkManager migration (wired + wireless)
-
Jan 28-29: Zero-trust dACL troubleshooting, ACL ordering issues resolved
-
Jan 30: Final runbook updates, comprehensive documentation
2.4.2. iPSK Manager Security Hardening (Jan 26)
Goal: Restrict MySQL from wildcard access (%) to specific ISE hosts only.
Security Issue:
-- BEFORE (INSECURE):
mysql> SELECT user, host FROM mysql.user WHERE user='ipskadmin';
+-----------+------+
| user | host |
+-----------+------+
| ipskadmin | % | ← Allows connections from ANY host!
+-----------+------+
Fix Applied:
-- Step 1: Create localhost user FIRST (prevent web app outage)
CREATE USER 'ipskadmin'@'localhost' IDENTIFIED BY '<REDACTED>';
GRANT ALL PRIVILEGES ON ipsk.* TO 'ipskadmin'@'localhost';
-- Step 2: Create ISE-specific users
CREATE USER 'ipskadmin'@'10.101.2.131' IDENTIFIED BY '<REDACTED>'; -- PPAN
CREATE USER 'ipskadmin'@'10.101.2.122' IDENTIFIED BY '<REDACTED>'; -- SPAN
GRANT ALL PRIVILEGES ON ipsk.* TO 'ipskadmin'@'10.101.2.131';
GRANT ALL PRIVILEGES ON ipsk.* TO 'ipskadmin'@'10.101.2.122';
-- Step 3: DROP wildcard user (safe now)
DROP USER 'ipskadmin'@'%';
FLUSH PRIVILEGES;
Post-Hardening Verification:
mysql> SELECT user, host FROM mysql.user WHERE user='ipskadmin';
+-----------+---------------+
| user | host |
+-----------+---------------+
| ipskadmin | localhost | ← Web app access
| ipskadmin | 10.101.2.131 | ← ISE PPAN
| ipskadmin | 10.101.2.122 | ← ISE SPAN
+-----------+---------------+
Files Updated:
-
/var/www/html/config.php- updatedlocalhostcredentials -
ISE GUI: Administration → External Identity Sources → ODBC → Updated password
Status: ✓ COMPLETE - MySQL hardened, all authentication tests passing
2.4.3. modestus-p50 NetworkManager Migration (Jan 26-27)
Goal: Migrate from manual wpa_supplicant + dhcpcd to NetworkManager for both wired and wireless 802.1X.
Motivation:
-
Consistent tooling (NetworkManager handles both wired + wireless)
-
Built-in DNS management (no manual /etc/resolv.conf)
-
Better integration with desktop environments
-
Preparation for CHLA deployment (Ubuntu uses NetworkManager by default)
Migration Steps:
-
Disable dhcpcd (conflicts with NetworkManager):
systemctl disable dhcpcd systemctl stop dhcpcd -
Configure NetworkManager DNS:
# /etc/NetworkManager/NetworkManager.conf [main] plugins=keyfile dns=default # ← Enables NetworkManager DNS management -
Create wired 802.1X connection:
nmcli connection add \ type ethernet \ ifname enp0s31f6 \ con-name "Wired-802.1X" \ 802-1x.eap tls \ 802-1x.identity "modestus-p50.inside.domusdigitalis.dev" \ 802-1x.ca-cert "/etc/ssl/certs/HOME-ROOT-CA.pem" \ 802-1x.client-cert "/etc/ssl/certs/modestus-p50-eaptls.pem" \ 802-1x.private-key "/etc/ssl/private/modestus-p50-eaptls.key" \ 802-1x.private-key-password-flags 4 # Don't store password -
Fix wired "secrets required" error:
# Add identity-flags (required for wired, not for WiFi!) nmcli connection modify "Wired-802.1X" \ +802-1x.identity-flags not-required -
Configure wpa_supplicant backend for wireless (iwd doesn’t support enterprise well):
# /etc/NetworkManager/conf.d/wifi-backend.conf [device] wifi.backend=wpa_supplicant -
Mask iwd (conflicts with wpa_supplicant):
systemctl disable iwd systemctl mask iwd -
Create wireless 802.1X connection:
nmcli connection add \ type wifi \ ifname wlan1 \ # Note: interface name changed from wlan0 when switching backends! con-name "Domus-Secure" \ ssid "Domus-Secure" \ 802-11-wireless-security.key-mgmt wpa-eap \ 802-1x.eap tls \ 802-1x.identity "modestus-p50.inside.domusdigitalis.dev" \ 802-1x.ca-cert "/etc/ssl/certs/HOME-ROOT-CA.pem" \ 802-1x.client-cert "/etc/ssl/certs/modestus-p50-eaptls.pem" \ 802-1x.private-key "/etc/ssl/private/modestus-p50-eaptls.key" \ 802-1x.private-key-password-flags 4
Challenges Encountered:
| Issue | Root Cause | Resolution |
|---|---|---|
"Secrets required" error (wired) |
Missing |
Added |
DNS empty after DHCP |
dhcpcd disabled, NetworkManager not managing DNS |
Set |
WiFi interface disappeared |
iwd vs wpa_supplicant create different interface names |
Reboot with correct backend, interface appears as wlan1 |
Unmanaged interface |
Stray config in /etc/NetworkManager/conf.d/ |
Removed unmanaged-wlan0.conf |
Status: ✓ COMPLETE - Both wired and wireless working on NetworkManager after reboot
2.4.4. Zero-Trust dACL Troubleshooting (Jan 27-29)
Goal: Create ISE dACL that blocks ALL internal networks (RFC1918) but permits specific services.
Versions Created:
-
V1: Initial attempt - blocked everything including DNS
-
V2: Added DNS - still no SSH
-
V3: Added ISE - still no connectivity
-
V4: Reordered ACLs - partial success
-
V5: WORKING - Correct ACL ordering
Root Cause: ACL ordering matters! RFC1918 deny rules must come AFTER specific permits.
V5 (WORKING):
! Name: LINUX_RESEARCH_HARDENED_V5
! Purpose: Zero-trust - block internal, permit internet + essential services
! CRITICAL: Specific permits MUST come BEFORE RFC1918 denies!
! 1. Permit DNS (internal DNS servers)
permit udp any host 10.50.1.1 eq 53
permit tcp any host 10.50.1.1 eq 53
! 2. Permit ISE Posture
permit tcp any host 10.50.1.21 eq 8443
permit tcp any host 10.50.1.21 eq 8905
permit udp any host 10.50.1.21 eq 8905
! 3. Permit DHCP
permit udp any any eq 67
permit udp any any eq 68
! 4. Permit NTP
permit udp any any eq 123
! 5. Block RFC1918 (NOW - after specific permits!)
deny ip any 10.0.0.0 0.255.255.255
deny ip any 172.16.0.0 0.15.255.255
deny ip any 192.168.0.0 0.0.255.255
! 6. Permit Internet (HTTP/HTTPS/SSH outbound)
permit tcp any any eq 80
permit tcp any any eq 443
permit tcp any any eq 22
! 7. Permit return traffic for established connections
permit tcp any eq 22 any
permit tcp any eq 80 any
permit tcp any eq 443 any
permit tcp any gt 1023 any
permit udp any gt 1023 any
! 8. Implicit deny (no log - Cisco dACLs don't support "log" keyword)
deny ip any any
Key Lessons:
-
ACL ordering is CRITICAL: Specific permits BEFORE broad denies
-
Return traffic: Must permit
tcp any eq <port> anyfor server responses -
"log" keyword: NOT supported in Cisco dACLs (caused syntax errors)
-
Ephemeral ports: Must permit
tcp/udp any gt 1023 anyfor return traffic -
Testing methodology: Test each protocol individually (ping, SSH, curl) to isolate issues
Validation:
# From modestus-p50 (with V5 dACL applied):
# Internet - WORKS
curl -sI https://google.com | head -1
# HTTP/2 200
# Internal servers - BLOCKED (as expected)
ping -c 2 10.50.1.50
# 100% packet loss
# DNS - WORKS
dig google.com
# ANSWER SECTION present
# SSH inbound - WORKS
ssh 10.50.40.101 # from main workstation
# Connection successful
Status: ✓ SUCCESS - Zero-trust dACL working with proper ACL ordering
3. Major Technical Projects
3.1. Project 1: Linux Research Workstation Deployment (PRJ-ISE-CHLA-LINUX)
3.1.1. Project Overview
| Field | Value |
|---|---|
Project ID |
PRJ-ISE-CHLA-LINUX |
Status |
In Progress (90%) |
Start Date |
2026-01-06 |
Target Completion |
2026-02-07 (1 month) |
Primary Stakeholder |
Dr. Shahab Asgharzadeh (Research Faculty) |
Technical Lead |
Xiangming Ding (Senior Bioinformatics Scientist) |
InfoSec Lead |
Evan Rosado |
Infrastructure Support |
Ben Castillo (SysEng), Victor Negri (Cloud/AD) |
3.1.2. Technical Requirements
| Requirement | Implementation | Status |
|---|---|---|
LUKS Full Disk Encryption |
Encrypt all partitions with LUKS2 |
PENDING |
Active Directory Integration |
SSSD + realm join to chla.usc.edu |
PENDING |
Microsoft Defender for Endpoint |
Install mdatp, enable real-time protection |
PENDING |
UFW Firewall |
Default deny incoming, allow outgoing |
PENDING |
802.1X EAP-TLS Authentication |
Machine certificate via AD CS |
PENDING |
Zero-Trust Network Access |
ISE dACL blocking internal, permitting internet |
DESIGNED |
Sudoers Lockdown |
Domain users denied sudo |
PENDING |
3.1.3. Device Information
| Field | Value |
|---|---|
Owner |
Dr. Shahab Asgharzadeh |
Department |
Spatial Biology and Genomics Core (TSRI SBG) |
Location |
SRT Building, 9th Floor |
MAC Address (Wired) |
b4:e9:b8:f6:c8:17 |
Switch |
SRT-9-9300 |
Port |
Gi1/0/36 |
Current IP |
10.238.179.128 |
NAS IP |
10.134.144.109 |
OS |
Ubuntu 22.04 LTS (or Arch Linux - TBD) |
3.1.4. ISE Policy Design
Current Policy (TEMPORARY):
Policy Set: Wired Dot1X Closed
Authorization Rule: Research_Onboard
Condition: MAC EQUALS {dr-shahab-mac}
Result: Research_Onboard (no dACL - TOO OPEN)
Target Policy (PRODUCTION):
Policy Set: Wired Dot1X Closed
Authorization Rule: Linux_Research_Hardened
Condition: EAP-TLS AND Certificate.Subject CONTAINS "Linux-Research"
Result: Linux_Research_EAP_TLS
↓
VLAN: CHLA-IoT (40)
dACL: DACL_LINUX_RESEARCH_HARDENED
Reauth Timer: 3600 seconds
dACL Design (Zero-Trust):
! Block ALL internal networks FIRST
deny ip any 10.0.0.0 0.255.255.255
deny ip any 172.16.0.0 0.15.255.255
deny ip any 192.168.0.0 0.0.255.255
! Permit essential services (DNS, DHCP, NTP, ISE)
permit udp any host 10.112.142.41 eq 53 # DNS-1
permit udp any host 10.112.142.42 eq 53 # DNS-2
permit udp any any eq 67
permit udp any any eq 68
permit udp any any eq 123
! Permit AD/Kerberos (ONLY if needed - review with team)
permit tcp any host <DC-IP> eq 88
permit udp any host <DC-IP> eq 88
permit tcp any host <DC-IP> eq 389
! Permit ISE Posture
permit tcp any host <ISE-PSN-IP> eq 8443
permit tcp any host <ISE-PSN-IP> eq 8905
! Permit Internet (HTTP/HTTPS/SSH)
permit tcp any any eq 80
permit tcp any any eq 443
permit tcp any any eq 22
! Deny everything else
deny ip any any
3.1.5. Home Enterprise Testing (Proof of Concept)
Test Environment:
-
Domain: inside.domusdigitalis.dev
-
DC: home-dc01 (10.50.1.50)
-
ISE: ise-02 (10.50.1.21)
-
Test Device: modestus-p50 (Arch Linux)
-
Certificate Authority: HOME-ROOT-CA (internal AD CS)
Milestones Achieved:
| Milestone | Date | Status |
|---|---|---|
AD CS Deployment |
Jan 14 |
✓ COMPLETE |
First Machine Certificate Issued |
Jan 14 |
✓ COMPLETE |
wpa_supplicant EAP-TLS Success |
Jan 19 |
✓ COMPLETE |
AD Domain Join Working |
Jan 22 |
✓ COMPLETE |
PAM/SSSD User Auth Fixed |
Jan 22 |
✓ COMPLETE |
NetworkManager Migration |
Jan 27 |
✓ COMPLETE |
Zero-Trust dACL V5 Working |
Jan 29 |
✓ COMPLETE |
What Works in Home Enterprise:
-
✓ 802.1X EAP-TLS with machine certificate
-
✓ AD domain join (realm + SSSD)
-
✓ User authentication via PAM/SSSD
-
✓ NetworkManager (wired + wireless)
-
✓ Zero-trust dACL (blocks internal, permits internet)
-
✓ DNS resolution
-
✓ SSH access
Pending for CHLA Production:
-
LUKS encryption validation
-
Microsoft Defender installation
-
UFW firewall configuration
-
Certificate request from CHLA AD CS
-
ISE policy migration from Research_Onboard to Linux_Research_EAP_TLS
3.1.6. Documentation Created
Antora Documentation Projects:
-
PRJ-ISE-HOME-LINUX-ANTORA- home enterprise implementation guide -
PRJ-ISE-CHLA-LINUX-ANTORA- CHLA production deployment guide
Deployment Runbooks:
-
DEPLOY-2026-01-23-shahab-linux-workstation.md- Validation checklist -
DEPLOY-2026-01-26-shahab-linux-workstation.adoc- Comprehensive deployment guide
Key Sections:
-
Phase 1: SSH Validation (LUKS, AD, Defender, UFW, certs, 802.1X)
-
Phase 2: ISE Hardening (dACL creation, authz profile, rule updates)
-
Phase 3: Deliverables (for Ben, Victor, Sarah)
3.1.7. Next Steps
-
Ben Castillo (SysEng):
-
Complete LUKS encryption
-
Install and configure Microsoft Defender
-
Configure UFW firewall
-
Request machine certificate from CHLA AD CS
-
Configure wpa_supplicant or NetworkManager
-
-
Victor Negri (Cloud/AD):
-
Create AD groups:
GRP-Research-Linux-Workstations,GRP-Research-Linux-Users -
Add machine account to Workstations group
-
Issue machine certificate
-
-
Evan Rosado (InfoSec):
-
Create
DACL_LINUX_RESEARCH_HARDENEDin production ISE -
Create
Linux_Research_EAP_TLSauthorization profile -
Add authorization rule
-
Force reauth and verify dACL applied
-
-
Sarah Clizer (CISO):
-
Review and approve final configuration
-
Sign off on production deployment
-
3.1.8. Success Criteria
| Criteria | Status |
|---|---|
All security controls validated (LUKS, Defender, UFW, 802.1X) |
PENDING |
Machine certificate issued and installed |
PENDING |
802.1X EAP-TLS authentication successful |
PENDING |
Zero-trust dACL applied and tested |
READY |
User access functional (SSH, domain auth) |
PENDING |
Documentation complete and approved |
COMPLETE |
CISO sign-off obtained |
PENDING |
3.2. Project 2: netapi ISE Automation Expansion
3.2.1. Overview
Goal: Expand netapi CLI tool with comprehensive ISE automation capabilities to reduce manual GUI operations and enable infrastructure-as-code workflows.
Status: ACTIVE - 40+ new commands implemented in January
Primary Use Cases:
-
Automated ISE configuration deployment
-
Validation scripts for security controls
-
Troubleshooting and diagnostics
-
Live session monitoring
-
Policy auditing
3.2.2. Commands Implemented in January
Network Access Conditions:
netapi ise get-conditions # List all conditions
netapi ise get-conditions --dict Session # Filter by dictionary
netapi ise get-condition <name> # Get specific condition
netapi ise create-posture-condition <name> # Create posture condition
netapi ise create-condition <name> # Generic condition creation
netapi ise delete-condition <name> # Delete condition
Dictionary Management:
netapi ise get-dictionaries # List all ISE dictionaries
netapi ise get-dictionary <name> # Get dictionary attributes
Universal API Caller:
netapi ise api-call ers GET <path> # ERS API (config)
netapi ise api-call openapi GET <path> # OpenAPI v1 (modern REST)
netapi ise api-call mnt GET <path> # MnT API (monitoring)
netapi ise api-call admin POST <path> # Admin UI API (undocumented)
API Discovery Tools:
netapi ise list-api-modules # List all 200+ SDK modules
netapi ise list-api-modules --filter <keyword> # Search modules
netapi ise inspect-module <name> # Show module methods
netapi ise inspect-module <name> --format json # JSON output
Existing Commands (Enhanced):
# Endpoint management
netapi ise get-endpoint <MAC>
netapi ise update-endpoint <MAC> --group <name>
netapi ise delete-endpoint <MAC>
# Authorization profiles
netapi ise get-authz-profiles
netapi ise get-authz-profile <name>
netapi ise create-authz-profile <name> --dacl <dacl> --vlan <vlan>
# Downloadable ACLs
netapi ise get-dacls
netapi ise get-dacl <name>
netapi ise create-dacl <name> --aces "<ACL rules>"
netapi ise update-dacl <name> --aces "<ACL rules>"
netapi ise delete-dacl <name>
# Authorization rules
netapi ise get-authz-rules <policy-set>
netapi ise add-authz-rule <policy-set> <rule-name> <profile>
# Live monitoring (MnT API)
netapi ise mnt session <MAC>
netapi ise mnt sessions
netapi ise mnt count
netapi ise mnt failed
# DataConnect (Advanced)
netapi ise dc test
netapi ise dc stats
netapi ise dc recent --hours 4 --limit 50
netapi ise dc failed --hours 48
netapi ise dc session <MAC>
3.2.3. Real-World Use Cases
Use Case 1: Automated Linux Deployment Validation
#!/bin/bash
# Validate all ISE objects for Linux workstation deployment
echo "Validating Endpoint Groups..."
netapi ise get-endpoint-groups | grep Linux
echo "Validating dACLs..."
for dacl in Research_Onboard Posture-Discovery Compliant Quarantine; do
netapi ise get-dacl "DACL_Linux_Research_$dacl"
done
echo "Validating Authorization Profiles..."
for profile in Onboard Discovery Full Quarantine; do
netapi ise get-authz-profile "Linux_Research_$profile"
done
echo "Checking live session..."
netapi ise mnt session b4:e9:b8:f6:c8:17
Use Case 2: API Discovery for Unknown Features
# Find all posture-related modules
netapi ise list-api-modules --filter posture
# Output:
# posture
# native_sup_port_profile
# anc_policy
# anc_endpoint
# Inspect posture module
netapi ise inspect-module posture
# Output shows available methods:
# - get_posture_by_id()
# - get_all()
# - create()
# - update()
# - delete()
Use Case 3: Troubleshoot Endpoint Group Parent Hierarchy
# Problem: ERS API doesn't show parent relationships
# Solution: Use Admin UI API (undocumented)
# Step 1: Get group IDs
PARENT_ID=$(netapi ise api-call ers GET /ers/config/endpointgroup | \
jq -r '.SearchResult.resources[] | select(.name=="Linux-Workstations") | .id')
CHILD_ID=$(netapi ise api-call ers GET /ers/config/endpointgroup | \
jq -r '.SearchResult.resources[] | select(.name=="Linux-Research-Workstations") | .id')
# Step 2: Set parent-child relationship via Admin UI API
netapi ise api-call admin POST /admin/idMgmtEndpointGroupAction.do \
--data "{
\"action\": \"update\",
\"endpointGroup.id\": \"$CHILD_ID\",
\"endpointGroup.name\": \"Linux-Research-Workstations\",
\"endpointGroup.parentGroupID\": \"$PARENT_ID\"
}"
3.2.4. Documentation Updates
Antora Documentation:
-
PRJ-NETAPI-ANTORA/docs/asciidoc/modules/ROOT/pages/development/api-discovery.adoc(270+ lines)-
Real-world troubleshooting case: endpoint group parent hierarchy
-
API surface comparison (ERS vs OpenAPI vs Admin UI)
-
Module category reference (200+ modules)
-
Lessons learned: SDK parameter naming, silent failures
-
-
PRJ-ISE-CHLA-LINUX-ANTORA/docs/asciidoc/modules/ROOT/pages/appendix/netapi-automation.adoc(565 lines)-
Complete CLI automation alternative to GUI
-
Automated deployment scripts
-
Manual netapi command reference
-
Universal API caller guide
-
Best practices and warnings
-
Deployment Scripts:
-
ise-linux-deployment-complete.sh- Creates all ISE objects (groups, dACLs, profiles) -
ise-test-linux-deployment.sh- Validates deployment configuration -
LINUX-DEPLOYMENT-GUIDE.adoc- Step-by-step automation guide
3.2.5. Key Discoveries
Discovery 1: Posture Conditions Use "Session" Dictionary
ISE stores posture conditions in the Session dictionary, NOT a "Posture" dictionary:
Dictionary: Session
Attribute: PostureStatus
Values: Compliant, NonCompliant, Unknown
Discovery 2: Admin UI API Workaround for Parent Groups
ERS API silently ignores parentId in UPDATE requests. Must use undocumented Admin UI API (/admin/idMgmtEndpointGroupAction.do) to set parent-child relationships.
Discovery 3: SDK Parameter Naming
SDK uses snake_case (e.g., parent_id) but ISE API expects camelCase JSON (e.g., parentId). The SDK handles this mapping, but direct API calls must use correct casing.
3.2.6. Metrics
| Metric | Value |
|---|---|
New Commands Implemented |
40+ |
Documentation Lines Added |
835+ |
SDK Modules Documented |
200+ |
Deployment Scripts Created |
3 |
Use Cases Documented |
10+ |
3.2.7. Next Steps
-
Implement authorization rule management (update, delete, reorder)
-
Add policy set CRUD operations
-
Implement certificate management (trusted certs, system certs)
-
Add TACACS+ profile management
-
Create CI/CD integration guide
3.3. Project 3: MSCHAPv2 to Certificate-Based Authentication Migration
3.3.1. Overview
| Field | Value |
|---|---|
Project ID |
MSCHAPV2-MIGRATION |
Status |
In Progress (10%) |
Total Devices |
{total-devices-mschapv2:,} |
Priority |
P1-Critical |
Timeline |
Q1-Q2 2026 (6 months) |
Security Driver |
MSCHAPv2 vulnerable to ASLEAP attacks |
Compliance Driver |
Zero-trust architecture initiative |
3.3.2. Device Inventory
| Wave | Device Type | Count | Contact |
|---|---|---|---|
1 |
Chromebooks |
1,754 |
Paul Tran |
2 |
WYSE Thin Clients |
857 |
Andrew Rolle |
3 |
Windows Domain Computers |
270 |
Intune Team |
4 |
macOS Devices |
331 |
JAMF Team |
5 |
iOS/iPhone |
1,760 |
Intune/JAMF |
TOTAL |
{total-devices-mschapv2:,} |
3.3.3. Migration Strategy
Phase 1: Chromebooks (Wave 1)
-
Contact Paul Tran (Chromebook management lead)
-
Determine certificate distribution method:
-
Option A: SCEP enrollment via Chrome policy
-
Option B: Manual certificate deployment via Admin Console
-
-
Pilot with 50 Chromebooks
-
Validate connectivity
-
Roll out to remaining 1,704 devices
Phase 2: WYSE Thin Clients (Wave 2)
-
Contact Andrew Rolle (Thin client management)
-
Evaluate certificate provisioning:
-
Option A: GPO-based cert auto-enrollment (if domain-joined)
-
Option B: Manual cert deployment via management tool
-
-
Test on 10 devices
-
Monitor for boot/login issues
-
Scale to 857 devices
Phase 3: Windows Domain Computers (Wave 3)
-
Collaborate with Intune team
-
Configure auto-enrollment via GPO
-
Create WiFi profile with EAP-TLS via Intune
-
Pilot with IT department (20 devices)
-
Monitor ISE Live Logs for failures
-
Roll out to remaining 250 devices
Phase 4: macOS (Wave 4)
-
Work with JAMF team
-
Configure JAMF certificate provisioning
-
Create WiFi profile with EAP-TLS settings
-
Test on 10 macOS devices
-
Full deployment to 321 devices
Phase 5: iOS/iPhone (Wave 5)
-
Coordinate with Intune/JAMF teams (split management)
-
Determine MDM coverage:
-
Intune-managed: Hospital-owned iPhones
-
JAMF-managed: Research/physician iPhones
-
BYOD: Requires ISE BYOD portal
-
-
Test SCEP enrollment via MDM
-
Validate WiFi profile deployment
-
Roll out to 1,760 devices
3.3.4. Current Status (End of January)
Progress:
-
✓ Project scoped and documented
-
✓ Device inventory complete ({total-devices-mschapv2:,} devices identified)
-
✓ Wave 1-2 contacts identified (Paul Tran, Andrew Rolle)
-
Initial meetings scheduled (PENDING)
-
Pilot plan drafted (PENDING)
Blockers:
-
Waiting on availability for kickoff meetings with Paul and Andrew
-
Chromebook certificate enrollment method needs validation
-
WYSE thin client management tool needs assessment
3.3.5. Risks
| Risk | Mitigation | Priority |
|---|---|---|
Mass connectivity outage if cert deployment fails |
Phased rollout, keep MSCHAPv2 as fallback during pilot |
HIGH |
Chromebooks may not support EAP-TLS |
Validate in Google Admin docs, test with pilot |
MEDIUM |
WYSE thin clients may not have cert stores |
Research Wyse OS cert capabilities, engage vendor support |
HIGH |
BYOD devices (iOS) require ISE BYOD portal |
Implement ISE BYOD portal in parallel (separate project) |
MEDIUM |
3.3.6. Timeline (Proposed)
| Phase | Timeframe | Status |
|---|---|---|
Wave 1 (Chromebooks) |
Feb-Mar 2026 |
PLANNING |
Wave 2 (WYSE Thin Clients) |
Mar-Apr 2026 |
PLANNING |
Wave 3 (Windows Domain) |
Apr 2026 |
NOT STARTED |
Wave 4 (macOS) |
May 2026 |
NOT STARTED |
Wave 5 (iOS) |
May-Jun 2026 |
NOT STARTED |
MSCHAPv2 Deprecation |
Jul 2026 |
NOT STARTED |
3.3.7. Next Steps (February 2026)
-
Schedule kickoff meetings:
-
Paul Tran (Chromebooks) - Week of Feb 3
-
Andrew Rolle (WYSE Thin Clients) - Week of Feb 3
-
-
Research Chromebook EAP-TLS support:
-
Review Google Admin Console cert management
-
Determine SCEP vs manual cert deployment
-
Identify WiFi profile deployment method
-
-
Assess WYSE thin client capabilities:
-
Verify Wyse OS supports cert stores
-
Determine management tool (ThinOS Manager?)
-
Test certificate deployment on lab device
-
-
Draft pilot plan:
-
50 Chromebooks (Wave 1 pilot)
-
10 WYSE thin clients (Wave 2 pilot)
-
Success criteria
-
Rollback procedure
-
3.4. Project 4: dsec Secrets Manager - Domain Access Control
3.4.1. Overview
Goal: Implement tier-based access control to prevent accidental disclosure of client/work credentials when using personal automation tools.
Security Model: Enforce strict boundaries between personal infrastructure (domain d000) and client environments (domain d001+).
Status: ✓ COMPLETE (Implemented Jan 21-23)
3.4.2. Implementation
Access Control Rules:
| Domain | Access Level | Description |
|---|---|---|
|
FULL |
Home infrastructure - all tiers accessible (dev, staging, prod, lab) |
|
RESTRICTED |
Client domains - only |
Protected Commands:
-
dsec show <domain> <tier> <resource>- View secret -
dsec edit <domain> <tier> <resource>- Edit secret -
dsec load <domain>- Load environment variables -
dsec source <domain> <tier> <resource>- Source credentials
Configuration Variables:
DSEC_HOME_DOMAIN=d000 # Full access domain
DSEC_ALLOWED_TIERS=lab # Allowed tiers for client domains
DSEC_DOMAIN_LOCK=true # Enable restriction
Override (for authorized access):
DSEC_DOMAIN_LOCK=false dsec show d001 prod/network/ise-admin
3.4.3. Access Denied Warning
Unauthorized access attempts display a comprehensive legal warning:
╔═══════════════════════════════════════════════════════════════════════╗
║ ACCESS DENIED ║
║ ║
║ Unauthorized access to client/work credentials is PROHIBITED. ║
║ ║
║ This system contains proprietary and confidential information ║
║ protected by: ║
║ • 18 U.S.C. § 1030 (Computer Fraud and Abuse Act) ║
║ • 18 U.S.C. § 1832 (Theft of Trade Secrets) ║
║ • Non-Disclosure Agreements (NDAs) ║
║ • Client confidentiality agreements ║
║ ║
║ Domain: d001 ║
║ Tier: prod ║
║ Resource: network/ise-admin ║
║ Attempted at: 2026-01-21 14:32:10 PST ║
║ Source: /home/evanusmodestus/atelier/.../secrets/bin/dsec ║
║ ║
║ This access attempt has been logged to: ║
║ ~/.secrets/.metadata/audit.log ║
║ ║
║ To access lab-tier resources: dsec show d001 lab/<resource> ║
║ For authorized prod access: DSEC_DOMAIN_LOCK=false dsec show ... ║
╚═══════════════════════════════════════════════════════════════════════╝
3.4.4. Directory Structure
Before (flat structure):
~/.secrets/environments/domains/
├── d000/
│ ├── dev/network/ise-admin.age
│ ├── staging/network/ise-admin.age
│ └── prod/network/ise-admin.age
└── d001/
├── dev/network/ise-admin.age
└── prod/network/ise-admin.age ← RISKY: accessible by accident
After (tier-based access control):
~/.secrets/environments/domains/
├── d000/ # HOME - Full access
│ ├── dev/
│ ├── staging/
│ ├── prod/
│ └── lab/
└── d001/ # CLIENT - Restricted
├── dev/ ← ACCESS DENIED (unless DSEC_DOMAIN_LOCK=false)
├── prod/ ← ACCESS DENIED
└── lab/ ← ALLOWED (safe for automation)
└── network/
├── switch-readonly.age
└── ise-test.age
3.4.5. Testing
Test 1: Access d000 prod (should work)
$ dsec show d000 prod/network/ise-admin
✓ Password: [REDACTED]
Test 2: Access d001 prod (should deny)
$ dsec show d001 prod/network/ise-admin
╔═══════════════════════════════════════════════════════════════════════╗
║ ACCESS DENIED ║
║ ... ║
╚═══════════════════════════════════════════════════════════════════════╝
Test 3: Access d001 lab (should work)
$ dsec show d001 lab/network/switch-readonly
✓ Password: [REDACTED]
Test 4: Override protection (authorized)
$ DSEC_DOMAIN_LOCK=false dsec show d001 prod/network/ise-admin
✓ Password: [REDACTED]
3.4.6. Documentation Updates
Files Modified:
-
~/.secrets/bin/dsec- Addedcheck_domain_tier_allowed()function -
PRJ-SECRETS/docs/asciidoc/dsec.adoc- Domain Access Control section (200+ lines) -
PRJ-SECRETS/docs/asciidoc/quick-reference.adoc- Access control cheat sheet -
DOMAIN_INVENTORY.yaml.age- Schema v2.2 (tier-based metadata)
PDFs Rebuilt:
-
dsec.pdf(1.2M) - Complete reference with access control -
quick-reference.pdf(156K) - Cheat sheet
3.4.7. Audit Logging
All access denials are logged to ~/.secrets/.metadata/audit.log:
2026-01-21 14:32:10 PST | ACCESS_DENIED | d001/prod/network/ise-admin | /home/evanusmodestus/atelier/.../secrets/bin/dsec | 18 U.S.C. § 1030, § 1832
2026-01-22 09:15:03 PST | ACCESS_DENIED | d001/staging/pki/ca-admin | /home/evanusmodestus/.../dsec | NDA violation risk
3.4.8. Success Criteria
-
✓ Implemented tier-based access control
-
✓ Legal warning banner displays on denial
-
✓ Audit logging functional
-
✓ Lab tier accessible for safe automation
-
✓ Override mechanism works (DSEC_DOMAIN_LOCK=false)
-
✓ Documentation complete (200+ lines)
3.5. Project 5: PRJ-RECOVERY Antora Documentation
3.5.1. Overview
Goal: Create comprehensive disaster recovery documentation covering backup strategies, encryption, versioning, and restore procedures.
Status: ✓ COMPLETE (Created Jan 22)
Format: Antora documentation site with Mermaid diagrams
3.5.2. Project Structure
PRJ-RECOVERY/
├── docs/asciidoc/
│ ├── antora.yml
│ ├── modules/ROOT/
│ │ ├── pages/
│ │ │ ├── index.adoc # Landing page
│ │ │ ├── borg-backups.adoc # Borg Backup guide
│ │ │ ├── age-encryption.adoc # Age encryption
│ │ │ ├── git-versioning.adoc # Git LFS + multi-remote
│ │ │ ├── restore-procedures.adoc # Recovery runbooks
│ │ │ └── backup-arsenal.adoc # 6-tier backup arsenal
│ │ └── images/diagrams/
│ │ ├── backup-arsenal-layers.mmd # 6-tier diagram
│ │ ├── borg-architecture.mmd # Borg deduplication
│ │ ├── age-workflow.mmd # Encryption workflow
│ │ ├── git-multi-remote.mmd # Multi-remote sync
│ │ └── restore-decision-tree.mmd # Recovery decision tree
│ └── antora-playbook.yml
3.5.3. 6-Tier Backup Arsenal
┌─────────────────────────────────────────────────────────────┐
│ TIER 1: Live Data (Working Files) │
│ ~/.secrets, ~/atelier, /etc │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TIER 2: Age Encryption (In-Place) │
│ ~/.secrets/**/*.age (encrypted sensitive files) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TIER 3: Git Versioning (Local Repo) │
│ .git/ (commit history, LFS pointers) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TIER 4: Git Multi-Remote (Off-Site Sync) │
│ gitea (self-hosted), github (cloud), gitlab (cloud) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TIER 5: Borg Deduplicated Backups (Encrypted Archives) │
│ NAS: /volume1/borg_backups (daily snapshots) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TIER 6: Offline/Cold Storage (Disaster Recovery) │
│ USB drives, external HDDs (quarterly sync) │
└─────────────────────────────────────────────────────────────┘
3.5.4. Key Sections
1. Borg Backups:
-
Installation and setup
-
Repository initialization
-
Automated backup scripts
-
Deduplication explanation
-
Restore procedures
-
Verification techniques
2. Age Encryption:
-
Key generation (
age-keygen) -
File encryption (
age -r <pubkey> -o file.age file) -
Decryption (
age -d -i <private-key> file.age) -
Integration with secrets management
-
Metadata protection
3. Git Versioning:
-
Git LFS setup for large files
-
Multi-remote configuration (gitea + github + gitlab)
-
Push to all remotes:
git remote | xargs -n1 git push -
LFS migration for existing repos
-
.gitattributes configuration
4. Restore Procedures:
-
Decision tree: Which backup tier to use?
-
Borg extract commands
-
Age decryption workflows
-
Git remote clone procedures
-
Point-in-time recovery
5. Backup Arsenal Layers:
-
Rationale for 6-tier approach
-
Redundancy vs. paranoia balance
-
Cost-benefit analysis
-
Automation opportunities
3.5.5. Mermaid Diagrams
backup-arsenal-layers.mmd:
graph TD
A[Live Data] -->|Age Encrypt| B[Encrypted Files]
B -->|Git Commit| C[Local Repo]
C -->|Push| D[Remote: Gitea]
C -->|Push| E[Remote: GitHub]
C -->|Push| F[Remote: GitLab]
A -->|Borg Backup| G[NAS Archive]
G -->|Quarterly Sync| H[Offline USB]
git-multi-remote.mmd:
graph LR
A[Local Repo] -->|push| B[gitea.inside.domusdigitalis.dev]
A -->|push| C[github.com/user/repo]
A -->|push| D[gitlab.com/user/repo]
B -.->|failover| C
C -.->|failover| D
3.5.6. Metrics
| Metric | Value |
|---|---|
Total Files |
27 |
Total Pages |
14 |
Mermaid Diagrams |
5 |
Documentation Lines |
2,500+ |
Build Output |
HTML site (400K) |
3.5.7. Practical Examples
Daily Borg Backup:
#!/bin/bash
# ~/.local/bin/daily-borg-backup
REPO="ssh://nas-01/volume1/borg_backups"
borg create \
--stats \
--progress \
--compression lz4 \
"$REPO::arch-{hostname}-{now:%Y-%m-%d_%H%M%S}" \
~/atelier \
~/.secrets \
/etc
borg prune \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
"$REPO"
Multi-Remote Push:
# Push to all remotes simultaneously
git remote | xargs -n1 -P3 git push
Age Encryption Workflow:
# Encrypt sensitive file
AGE_PUB="$HOME/.secrets/.metadata/keys/master.age.pub"
age -R "$AGE_PUB" -o secret.txt.age secret.txt
# Decrypt
AGE_KEY="$HOME/.secrets/.metadata/keys/master.age.key"
age -d -i "$AGE_KEY" secret.txt.age > secret.txt
3.5.8. Next Steps
-
Implement automated Borg health checks
-
Create restore validation test suite
-
Add Ansible playbook for backup orchestration
-
Document bare-metal recovery procedure
4. Security & Compliance
4.1. Critical Security Findings
4.1.1. Finding 1: Posture Redirect ACL Allows Kerberos/SMB
| Field | Value |
|---|---|
Finding ID |
PENTEST-POSTURE-ACL-001 |
Severity |
CRITICAL |
Discovery Date |
2026-01-18 |
Discoverer |
Google/Mandiant External Pentest Team |
Attack Vector |
Evil twin WiFi access point |
Impact |
Lateral movement BEFORE posture assessment |
Technical Details:
The posture redirect ACL (applied while client is downloading/installing posture agent) was configured to allow:
permit tcp any any eq 88 # Kerberos - UNNECESSARY
permit tcp any any eq 445 # SMB - UNNECESSARY
permit tcp any any eq 389 # LDAP - UNNECESSARY
Attack Chain:
-
Attacker broadcasts "CHLA_Staff" SSID (evil twin)
-
Employee device connects (PSK network, no certificate validation)
-
Device gets redirected to ISE posture portal
-
During posture assessment, device has FULL NETWORK ACCESS via permissive ACL
-
Device can authenticate to AD (Kerberos 88)
-
Device can access file shares (SMB 445)
-
Attacker can pivot to internal resources
Proof of Concept:
-
Device: Raspberry Pi 4 running Kali Linux
-
MAC:
00:14:D1:B0:50:D4 -
SSID:
CHLA_Staff(exact match) -
Result: Successfully connected employee devices and accessed internal SMB shares
Remediation:
-
IMMEDIATE: Change request to update posture redirect ACL
-
NEW ACL (zero-trust):
! Posture Redirect ACL (RESTRICTIVE) permit udp any host <ISE-PSN> eq 8905 # ISE posture permit tcp any host <ISE-PSN> eq 8443 # ISE portal permit tcp any host <ISE-PSN> eq 8905 # ISE posture permit udp any eq 67 any eq 68 # DHCP permit udp any any eq 53 # DNS permit tcp any any eq 80 # HTTP (portal redirect) permit tcp any any eq 443 # HTTPS (portal) deny ip any any # DENY ALL ELSE -
VALIDATION: Test in lab with evil twin simulation
-
DEPLOYMENT: Apply to all policy sets
-
MONITORING: ISE Live Logs for posture failures
Status: PENDING - Change request drafted, awaiting approval (as of Jan 30)
4.1.2. Finding 2: CVE-2026-20029 ISE XXE Vulnerability
| Field | Value |
|---|---|
CVE ID |
CVE-2026-20029 |
Severity |
HIGH |
Affected Versions |
ISE 3.1, 3.2, 3.3 (pre-patch) |
CHLA ISE Version |
3.2 Patch 5 |
Vulnerability Type |
XML External Entity (XXE) Injection |
Attack Vector |
Authenticated API access |
Description:
Cisco Identity Services Engine (ISE) contains an XML External Entity (XXE) vulnerability in the ERS API. An authenticated attacker with valid API credentials could exploit this vulnerability to:
-
Read arbitrary files from the ISE server
-
Perform Server-Side Request Forgery (SSRF) attacks
-
Cause Denial of Service (DoS)
Assessment:
-
CHLA Exposure: LOW
-
ERS API access restricted to InfoSec team (5 accounts)
-
No external API exposure
-
API credentials rotated quarterly
-
MFA required for ISE Admin access
-
-
Patch Status: PENDING
-
Cisco released patch: ISE 3.2 Patch 8
-
Current version: 3.2 Patch 5
-
Upgrade window: Feb 10-12, 2026 (approved)
-
-
Mitigations in Place:
-
ERS API firewall rules (allow only from InfoSec jump hosts)
-
API rate limiting enabled
-
Audit logging for all ERS API calls
-
No third-party API integrations
-
Action Plan:
-
✓ iTrack change request submitted (Jan 25)
-
✓ Maintenance window scheduled (Feb 10-12)
-
Pre-upgrade backup (Feb 9)
-
Upgrade ISE PPAN to 3.2 Patch 8 (Feb 10)
-
Upgrade ISE SPAN to 3.2 Patch 8 (Feb 11)
-
Upgrade ISE PSNs to 3.2 Patch 8 (Feb 12)
-
Post-upgrade validation
-
Document in security audit log
Status: SCHEDULED - Patch deployment Feb 10-12, 2026
4.2. Compliance & Auditing
4.2.1. ISE Live Logs Monitoring
Daily Review:
-
Failed authentication attempts
-
Posture non-compliance events
-
Authorization policy violations
-
Anomalous MAC addresses
Weekly Reports:
-
Top 10 failed auth attempts (by user)
-
Top 10 failed auth attempts (by MAC)
-
Posture compliance rate
-
Policy set usage statistics
4.2.2. Endpoint Hygiene
Managed Devices:
| Category | Count | Compliance Rate |
|---|---|---|
Windows Domain |
3,450 |
98.2% |
macOS |
845 |
96.7% |
iOS/iPhone |
1,760 |
94.3% |
Chromebooks |
1,754 |
99.1% |
WYSE Thin Clients |
857 |
97.8% |
Unmanaged Devices:
-
Guest WiFi: 120-150 daily
-
BYOD (Personal devices): 340 registered
-
Vendor/Contractor: 25-30 active
4.2.3. Certificate Lifecycle Management
Machine Certificates:
-
Validity: 2 years
-
Auto-renewal: 30 days before expiration (GPO for Windows)
-
Manual renewal: Linux workstations (certbot script)
User Certificates:
-
Validity: 1 year
-
Auto-enrollment: Windows domain users (GPO)
-
Manual: BYOD devices (ISE BYOD portal)
5. Incidents & Troubleshooting
5.1. Critical Incidents
5.1.1. Incident 1: SNE-21 Connectivity Loss (UNRESOLVED)
| Field | Value |
|---|---|
Incident ID |
SNE-21 |
Severity |
CRITICAL |
Impact |
BMS device offline - Vivarium air systems monitoring lost |
Reported |
2026-01-05 |
Status |
UNRESOLVED |
Owner |
Evan Rosado (InfoSec) |
Symptoms:
-
BMS (Building Management System) device loses network connectivity intermittently
-
Device MAC: (TBD - pending investigation)
-
Location: Vivarium (animal research facility)
-
Impact: Air quality monitoring for animal habitats offline
Investigation Steps Taken:
-
Check ISE Live Logs for authentication failures
-
Verify switch port status
-
Check for MAC flapping
-
Review DHCP lease history
-
Inspect for network loops
Blockers:
-
Device location requires facilities escort
-
Vivarium access restricted (animal research protocols)
-
Vendor (BMS company) has not responded to support ticket
Next Steps:
-
Schedule Vivarium site visit with facilities
-
Coordinate with BMS vendor for remote diagnostics
-
Consider temporary network bypass for air quality monitoring
Status: PENDING - Facilities access approval needed
5.1.2. Incident 2: JOY Natus Workstation APIPA Issue
| Field | Value |
|---|---|
Incident ID |
JOY-NATUS-001 |
Severity |
MEDIUM |
Impact |
EEG workstation unable to access network |
Reported |
2026-01-08 |
Status |
IN PROGRESS |
Owner |
Willie Colindres, Edwin Vasquez (IT Desktop Support) |
Symptoms:
-
Natus EEG workstation shows APIPA address (169.254.x.x)
-
Unable to reach PACS servers
-
Unable to upload EEG studies
Troubleshooting:
-
ISE Session Check:
-
MAC: (TBD - pending from Willie)
-
Last successful auth: (TBD)
-
Current status: No active session
-
-
Switch Port Verification:
-
Port status: (TBD)
-
VLAN assignment: (TBD)
-
PoE status: (TBD)
-
-
DHCP Lease:
-
DHCP pool: (TBD)
-
Gateway: (TBD)
-
DNS: (TBD)
-
Corrective Actions:
-
Clear ISE endpoint entry
-
Bounce switch port
-
Release/renew DHCP
-
Verify VLAN assignment
-
Update MAC address corrections (see Issue 3)
Status: PENDING - Waiting on Willie/Edwin for MAC address and switch details
5.1.3. Incident 3: Natus MAC Address Corrections (RESOLVED)
| Field | Value |
|---|---|
Incident ID |
(part of JOY-NATUS-001) |
Severity |
LOW |
Impact |
Incorrect ISE endpoint registration |
Discovered |
2026-01-12 |
Status |
RESOLVED |
Owner |
Evan Rosado (InfoSec) |
Issue:
During Nicholas Bergmann interview session (Jan 12), discovered ISE endpoint database had incorrect MAC addresses for Natus EEG workstations.
Devices Affected:
| Workstation | Incorrect MAC | Correct MAC |
|---|---|---|
STARK1 |
|
|
THANOS1 |
|
|
Root Cause:
-
Manual entry error during initial registration
-
No validation against DHCP lease database
Remediation:
# Delete incorrect endpoints
netapi ise delete-endpoint "00:1A:2B:3C:4D:5E"
netapi ise delete-endpoint "00:1A:2B:3C:4D:6E"
# Devices will re-register with correct MACs on next authentication
Status: ✓ RESOLVED - Endpoints re-registered with correct MACs
5.1.4. Incident 4: Pat Levitt Authentication Failure (RESOLVED)
| Field | Value |
|---|---|
Incident ID |
(ad-hoc - Jan 30) |
Severity |
MEDIUM |
Impact |
Faculty member unable to access network |
Reported |
2026-01-30 ~3:15 PM (Microsoft Teams) |
Status |
RESOLVED |
Owner |
Evan Rosado (InfoSec) |
User |
Pat Levitt (USC Faculty/Non Physician CWR Neurology) |
Time to Resolution |
~30 minutes |
Symptoms:
-
User reported "can’t access network"
-
Authentication method: (unknown at time of report)
Investigation Plan:
# Load credentials
dsource d001 dev/network
export ISE_PAN_IP="10.101.2.131"
# Check for active sessions
netapi ise mnt session <MAC_ADDRESS>
# Review authentication history
netapi ise dc auth-history <MAC_ADDRESS> --limit 10
# Check for failed attempts
netapi ise dc failed --limit 20 | grep -i levitt
netapi ise dc failed --limit 20 | grep -i plevit
# Check user authentication status
netapi ise mnt auth-status <MAC_ADDRESS>
Root Cause:
IP address misconfiguration on user’s workstation.
Resolution:
Corrected IP configuration (DHCP/static IP settings).
Validation:
User confirmed network access restored.
Status: ✓ RESOLVED - IP address misconfiguration corrected
5.2. Infrastructure Troubleshooting
5.2.1. Issue 1: Isensix DHCP Not Receiving IP (RESOLVED)
| Field | Value |
|---|---|
Reported By |
Jenny Huang |
Date |
2026-01-22 12:30 PM |
Device MAC |
|
Switch/Port |
SRT-9_9300 / Gi2/0/4 |
VLAN |
729 (CHLA-IoT) |
Auth Status |
MAB Success |
dACL Applied |
|
Status |
RESOLVED |
Symptoms:
-
Device authenticates successfully via MAB
-
Assigned to VLAN 729 (CHLA-IoT)
-
dACL applied correctly
-
NO IP ADDRESS ASSIGNED
Diagnostic Output:
SRT-9_9300#show access-session mac 00:1C:2C:61:90:06 d
Interface: GigabitEthernet2/0/4
MAC Address: 001c.2c61.9006
IPv4 Address: Unknown ← NO IP!
Status: Authorized
Current Policy: PMAP_DefaultWiredDot1xClosedAuth_1X_MAB_V2
Server Policies:
Vlan Group: Vlan: 729
ACS ACL: xACSACLx-IP-TEST_Medical_Temp_Monitor-68fa6c22
Method status list:
Method State
dot1x Stopped
mab Authc Success
Root Cause:
dACL missing DHCP permit! Device blocked from sending DHCP requests.
Current dACL (broken):
Extended IP access list xACSACLx-IP-TEST_Medical_Temp_Monitor-68fa6c22
1 permit tcp any eq 6001 host 10.192.220.51
2 permit tcp any eq 6001 host 10.192.220.52
3 permit tcp any eq 6001 host 10.192.220.64
4 permit tcp any eq 6001 host 10.192.220.65
6 permit icmp any any
8 deny ip any any ← BLOCKS UDP 67/68 (DHCP)!
Fix Applied:
! ISE: Policy > Results > Authorization > Downloadable ACLs
! Name: TEST_Medical_Temp_Monitor
permit udp any eq bootpc any eq bootps ← ADD THIS LINE FIRST!
permit tcp any eq 6001 host 10.192.220.51
permit tcp any eq 6001 host 10.192.220.52
permit tcp any eq 6001 host 10.192.220.64
permit tcp any eq 6001 host 10.192.220.65
permit icmp any any
deny ip any any
Validation:
# Force reauth on switch
clear access-session mac 001c.2c61.9006
# Verify IP assigned
show access-session mac 00:1C:2C:61:90:06 d | include IPv4
# IPv4 Address: 10.x.x.x ← SUCCESS!
Status: ✓ RESOLVED - dACL updated, device received IP address
6. Personnel & Collaboration
6.1. Team Members Engaged
| Name | Role/Department | Projects/Incidents |
|---|---|---|
Sarah Clizer |
CISO |
Linux deployment oversight, pentest coordination, final approvals |
William Cox |
Sr. InfoSec PM |
Project planning, documentation review |
Vartan Batmazyan |
InfoSec (Contractor) |
Internal pentest (Days 1, 2, 4) |
Ben Castillo |
Systems Engineering |
Linux workstation deployment (OS install, security controls) |
Xiangming Ding |
Senior Bioinformatics Scientist, TSRI SBG Core |
Technical requirements for Linux workstation |
Dr. Shahab Asgharzadeh |
Research Faculty |
Linux workstation primary user |
Victor Negri |
Cloud/AD Team |
AD group creation, certificate issuance |
Omer Joffe |
Claroty (Vendor) |
Pending: ISE diagrams, dACL docs, integration architecture |
Mauricio Naranjo |
Security Operations |
Pending: VNC traffic hunt |
Victor Cancino |
IT Operations |
Camera replacement coordination |
Willie Colindres |
IT Desktop Support |
JOY Natus workstation troubleshooting |
Edwin Vasquez |
IT Desktop Support |
JOY Natus workstation troubleshooting |
Nathan Munoz |
IT |
General infrastructure support |
Ebelin Carmona |
IT |
General infrastructure support |
Anthony Martinez |
Systems Engineer |
Obsidian vault consultation (personal) |
Jenny Huang |
Clinical Engineering |
Isensix DHCP issue |
Paul Tran |
IT - Chromebook Management |
MSCHAPv2 migration Wave 1 contact |
Andrew Rolle |
IT - Thin Client Management |
MSCHAPv2 migration Wave 2 contact |
Nicholas Bergmann |
InfoSec Analyst II (Candidate) |
Interview session Jan 9/12 |
6.2. External Contacts
| Organization | Contact | Purpose |
|---|---|---|
Google/Mandiant |
Pentest Team |
External pentest (Jan 13-16) |
Cisco TAC |
Support Cases |
ISE upgrade, CVE-2026-20029 patch |
Claroty |
Omer Joffe |
ISE-Claroty integration |
Microsoft |
Support |
Defender for Linux deployment |
7. Metrics & Analytics
7.1. Work Distribution
| Category | Days | % of Month |
|---|---|---|
Linux 802.1X Project |
12 |
55% |
Pentest Support |
7 |
32% |
Incident Response |
5 |
23% |
Documentation |
8 |
36% |
Home Enterprise Testing |
6 |
27% |
Research & Development |
4 |
18% |
| Percentages exceed 100% due to overlapping activities (e.g., documentation happens during all projects) |
7.2. Technical Output
| Deliverable | Count |
|---|---|
Antora Documentation Projects |
27 |
Daily Work Logs |
22 |
Deployment Runbooks |
3 |
Security Findings |
2 |
Mermaid Diagrams |
5+ |
Arsenal Entries |
2 |
netapi Commands Implemented |
40+ |
Git Commits (Principia) |
45+ |
Lines of Documentation |
{total-lines:,} |
7.3. ISE Policy Objects Created
| Object Type | Count |
|---|---|
Endpoint Identity Groups |
5 |
Downloadable ACLs (dACLs) |
15+ (V1-V5 iterations) |
Authorization Profiles |
8 |
Authorization Rules |
4 |
Network Access Conditions |
3 |
7.4. Home Enterprise Infrastructure
| Component | Status | Notes |
|---|---|---|
Active Directory Domain |
RUNNING |
inside.domusdigitalis.dev |
AD Certificate Services |
RUNNING |
HOME-ROOT-CA (10-year validity) |
Cisco ISE |
RUNNING |
v3.2 Patch 5 |
Cisco WLC |
RUNNING |
WiFi controller |
Cisco Catalyst Switches |
RUNNING |
802.1X capable |
pfSense Firewall |
RUNNING |
Perimeter security |
Synology NAS |
RUNNING |
Borg backup repository |
Linux Test Workstation (P50) |
RUNNING |
Arch Linux, EAP-TLS working |
8. Pending Items (Carry-Forward to February)
8.1. High Priority
| Item | Priority | Owner |
|---|---|---|
Camera IPs in InfoBlox for Rodney |
P2 |
Victor Cancino / Evan Rosado |
JOY workstation follow-up (Natus) |
P2 |
Willie Colindres / Edwin Vasquez |
VNC hunt with Mauricio |
P2 |
Mauricio Naranjo / Evan Rosado |
SNE-21 investigation |
P0 (CRITICAL) |
Evan Rosado (needs facilities access) |
CVE-2026-20029 iTrack submission |
P1 |
COMPLETE - Patch scheduled Feb 10-12 |
Posture redirect ACL remediation |
P0 (CRITICAL) |
Evan Rosado (change request pending) |
Dr. Shahab workstation - complete deployment |
P0 |
Ben Castillo / Victor Negri / Evan Rosado |
iPSK Manager MySQL hardening |
P1 |
COMPLETE |
8.2. Medium Priority
| Item | Priority | Owner |
|---|---|---|
YouTube/GetWell review |
P2 |
Evan Rosado |
Azure DevOps LFS .lfsconfig fix |
P2 |
Evan Rosado |
ISE diagrams for Omer |
P2 (OWED) |
Evan Rosado |
dACL documentation for Omer |
P2 (OWED) |
Evan Rosado |
Claroty integration architecture for Omer |
P2 (OWED) |
Evan Rosado |
8.3. Scheduling Required
| Item | Priority | Owner |
|---|---|---|
MSCHAPv2 migration meetings (Paul Tran) |
P1 |
Evan Rosado / Paul Tran |
MSCHAPv2 migration meetings (Andrew Rolle) |
P1 |
Evan Rosado / Andrew Rolle |
Victor Negri follow-up (AD groups) |
P1 |
Victor Negri / Evan Rosado |
Azure Legacy kick-off |
P2 |
TBD |
9. Lessons Learned
9.1. Technical
-
ACL Ordering is CRITICAL: In Cisco dACLs, specific permits MUST come before broad denies. Learned the hard way after 5 iterations of
LINUX_RESEARCH_HARDENEDdACL. -
PAM Configuration for SSSD:
suandsu -use different PAM files (/etc/pam.d/suvs/etc/pam.d/su-l). Always check both when troubleshooting AD authentication. -
NetworkManager vs wpa_supplicant: WiFi interface names change based on backend (iwd creates
wlan0, wpa_supplicant may createwlan1). Always verifynmcli device status. -
Posture ACLs Need Zero-Trust Mindset: Default to DENY ALL, explicitly permit ONLY what’s needed (DNS, DHCP, ISE posture, HTTP/HTTPS). Never assume "common" protocols like Kerberos are safe during onboarding.
-
Home Enterprise = Production Validation: Testing in home enterprise (inside.domusdigitalis.dev) caught 90% of issues before CHLA deployment. AD CS, ISE, PAM/SSSD, dACL ordering all validated safely.
-
netapi Universal API Caller: When the SDK doesn’t expose a method (like endpoint group parent hierarchy), use
netapi ise api-call adminto access undocumented Admin UI API endpoints. -
Evil Twin Attacks are REAL: Google/Mandiant proved it. PSK-based WiFi (like
CHLA_Staff) is vulnerable without certificate validation. Migration to EAP-TLS is not optional. -
API Discovery Tools Save Time:
netapi ise list-api-modulesandinspect-modulerevealed 200+ SDK modules. No more guessing which API to use. -
dACLs Don’t Support "log" Keyword: Cisco downloadable ACLs don’t support the
logkeyword. Caused syntax errors in V1-V3 iterations. -
Return Traffic Requires Explicit Permits: Must permit
tcp any eq <port> anyfor server responses andtcp/udp any gt 1023 anyfor ephemeral ports.
9.2. Process
-
Attribute-Driven Documentation: Centralizing 54 configuration values as AsciiDoc attributes (like
:ise-ppan-ip:,:dr-shahab-mac:) made runbooks maintainable and CI/CD-ready. -
Pentest Coordination is Time-Intensive: 7 days of pentest support (external + internal) required constant ISE monitoring, troubleshooting, and on-call availability. Plan for 30-40% time allocation.
-
Daily Captures are Invaluable: 34 captures ({total-lines:,} lines) provided complete audit trail for the month. Essential for monthly reporting and incident reconstruction.
-
Home Enterprise Mirrors Production: Investing in home enterprise infrastructure (AD CS, ISE, WLC, switches) enabled safe testing of critical changes without risking CHLA production.
-
Documentation-as-Code: Antora documentation projects (27 created) with Mermaid diagrams provide professional, version-controlled knowledge base.
-
Secrets Management Discipline: dsec domain access control prevented accidental disclosure of CHLA credentials when working on personal automation. Legal warnings work.
-
Collaboration Requires Clear Ownership: Linux project involved 5+ teams (InfoSec, SysEng, Cloud, Research). Clear RACI matrix prevented confusion.
-
Todo Lists Prevent Task Loss: Using TodoWrite tool during complex troubleshooting (PAM/SSSD, dACL debugging) ensured no steps were forgotten.
-
Ask Questions Before Implementing: Used AskUserQuestion during plan mode to clarify CHLA runbook approach (netapi vs GUI). Prevented wasted effort.
-
Encrypt Sensitive Conversations: All Claude conversations with CHLA details encrypted via
capture-convtoTAB-CONVERSATIONS/CNV-*.md.age. No plaintext client info in git repos.
9.3. Personal
-
Weekend Work Pays Off: Jan 18 weekend session discovered critical posture ACL vulnerability. Off-hours work enables deep focus.
-
Context Switching is Costly: Juggling 8 projects + 3 critical incidents caused cognitive overhead. Need better time blocking.
-
Home Enterprise Learning Translates to Work: Every hour invested in home enterprise EAP-TLS testing directly benefited CHLA Linux deployment. ROI proven.
-
Documentation NOW vs Later: Writing detailed daily captures (WRKX) in real-time saved 10+ hours during monthly report synthesis. Future self thanks past self.
-
Physical Security Matters: DMV reminder (Jan 26) shows even InfoSec professionals need checklists for personal tasks.
-
Tooling Investment Compounds: Building netapi over months now enables 5-minute automation tasks that used to take 30 minutes in ISE GUI.
10. Appendices
10.1. Appendix A: Key File References
10.1.1. CHLA Runbooks
| File | Location |
|---|---|
Dr. Shahab Deployment Checklist |
|
Dr. Shahab Deployment Guide |
|
Linux Research Workstation Design |
|
Wireless Field Guide (Pentest) |
|
10.1.2. Antora Documentation
| Project | Build Output |
|---|---|
PRJ-ISE-HOME-LINUX-ANTORA |
|
PRJ-ISE-CHLA-LINUX-ANTORA |
|
PRJ-NETAPI-ANTORA |
|
PRJ-RECOVERY |
|
PRJ-SECRETS |
|
10.1.3. Home Enterprise Configuration
| Component | Config File |
|---|---|
AD CS Certificate Templates |
HOME-ROOT-CA (Windows CA MMC) |
ISE Trusted Certificates |
ISE GUI > Administration > Certificates > Trusted Certificates |
wpa_supplicant (modestus-p50) |
|
NetworkManager (modestus-p50) |
|
SSSD (modestus-p50) |
|
PAM (modestus-p50) |
|
10.1.4. Scripts & Automation
| Script | Location |
|---|---|
ISE Linux Deployment (Complete) |
|
ISE Deployment Validation |
|
Daily Borg Backup |
|
Age Encryption Helper |
|
dsec Secrets Manager |
|
10.2. Appendix B: Acronyms & Glossary
| Term | Definition |
|---|---|
802.1X |
IEEE standard for network access control using port-based authentication |
AD CS |
Active Directory Certificate Services - Microsoft PKI infrastructure |
APIPA |
Automatic Private IP Addressing (169.254.x.x) - indicates DHCP failure |
BMS |
Building Management System |
BYOD |
Bring Your Own Device |
CHLA |
Children’s Hospital Los Angeles |
CISO |
Chief Information Security Officer |
CoA |
Change of Authorization (RADIUS command to update session policy) |
dACL |
Downloadable Access Control List (pushed from ISE to switch) |
DC |
Domain Controller (Active Directory) |
EAP-TLS |
Extensible Authentication Protocol - Transport Layer Security (certificate-based 802.1X) |
ERS |
External RESTful Services (ISE API for configuration) |
ISE |
Cisco Identity Services Engine |
LUKS |
Linux Unified Key Setup (disk encryption) |
MAB |
MAC Authentication Bypass (fallback 802.1X method using MAC address) |
MnT |
Monitoring and Troubleshooting (ISE API for live sessions) |
MSCHAPv2 |
Microsoft Challenge-Handshake Authentication Protocol version 2 (password-based 802.1X) |
NAS |
Network Access Server (in RADIUS context, this is the switch or WLC) |
PACS |
Picture Archiving and Communication System (medical imaging) |
PAM |
Pluggable Authentication Modules (Linux authentication framework) |
PKI |
Public Key Infrastructure |
PPAN |
Primary Policy Administration Node (ISE deployment) |
PSK |
Pre-Shared Key (WiFi password) |
PSN |
Policy Service Node (ISE RADIUS server) |
RADIUS |
Remote Authentication Dial-In User Service |
SCEP |
Simple Certificate Enrollment Protocol |
SPAN |
Secondary Policy Administration Node (ISE deployment) |
SSSD |
System Security Services Daemon (Linux AD integration) |
SysEng |
Systems Engineering |
TSRI SBG |
The Scripps Research Institute - Spatial Biology and Genomics Core |
VLAN |
Virtual Local Area Network |
WLC |
Wireless LAN Controller |
XXE |
XML External Entity (injection vulnerability) |
10.3. Appendix C: ISE Policy Reference
10.3.1. Policy Sets
| Policy Set | Protocol | Primary Use Case |
|---|---|---|
Wired Dot1X Closed |
802.1X, MAB |
Wired network access with strict authentication |
Corp WIFI |
802.1X |
Corporate WiFi (certificate-based) |
Guest WIFI |
WebAuth |
Guest/visitor WiFi portal |
IoT WIFI |
PSK, MAB |
IoT devices (sensors, BMS, medical devices) |
CHLA_Staff |
PSK |
VULNERABLE - Migrate to EAP-TLS |
10.3.2. Authorization Profiles (Linux-Related)
| Profile Name | VLAN | dACL |
|---|---|---|
Research_Onboard |
CHLA-IoT (40) |
NONE (TOO OPEN) |
Linux_Research_Posture_Pending |
CHLA-IoT (40) |
DACL_Research_Onboard |
Linux_Research_Discovery |
CHLA-IoT (40) |
Research-Linux-Posture-Discovery |
Linux_Research_Full |
CHLA-IoT (40) |
Research-Linux-Compliant |
Linux_Research_Quarantine |
Critical Auth Fallback (999) |
Research-Linux-Quarantine |
Linux_Research_EAP_TLS |
CHLA-IoT (40) |
DACL_LINUX_RESEARCH_HARDENED |
10.3.3. Endpoint Identity Groups (Linux)
| Group Name | Description |
|---|---|
Linux-Workstations |
Parent group for all Linux research workstations |
Linux-Research-Workstations |
Child group for Spatial Biology and Genomics Core Linux devices |
Linux-Onboarding |
Temporary group during initial provisioning |
10.4. Appendix D: netapi Command Reference
10.4.1. Quick Command Lookup
# Endpoint Management
netapi ise get-endpoint <MAC> # Get endpoint details
netapi ise update-endpoint <MAC> --group <grp> # Move to endpoint group
netapi ise delete-endpoint <MAC> # Delete endpoint
# Authorization Profiles
netapi ise get-authz-profiles # List all profiles
netapi ise get-authz-profile <name> # Get specific profile
netapi ise create-authz-profile <name> \ # Create profile
--dacl <dacl> --vlan <vlan>
# Downloadable ACLs
netapi ise get-dacls # List all dACLs
netapi ise get-dacl <name> # Get specific dACL
netapi ise create-dacl <name> --aces "<ACL>" # Create dACL
netapi ise update-dacl <name> --aces "<ACL>" # Update dACL
netapi ise delete-dacl <name> # Delete dACL
# Authorization Rules
netapi ise get-authz-rules <policy-set> # List rules in policy
netapi ise add-authz-rule <policy> <rule> <profile> \
--dict <dict> --attr <attr> --value <val> # Add rule
# Network Access Conditions
netapi ise get-conditions # List all conditions
netapi ise get-conditions --dict Session # Posture conditions
netapi ise get-condition <name> # Get specific condition
netapi ise create-posture-condition <name> \ # Create posture condition
--attr PostureStatus --value Compliant
netapi ise delete-condition <name> # Delete condition
# Monitoring & Troubleshooting (MnT)
netapi ise mnt session <MAC> # Get active session
netapi ise mnt sessions # List all active sessions
netapi ise mnt count # Session count
netapi ise mnt failed # Failed authentications
netapi ise mnt coa <MAC> # Force reauthentication
# DataConnect (Advanced)
netapi ise dc test # Check DataConnect health
netapi ise dc stats # DataConnect statistics
netapi ise dc recent --hours 4 --limit 50 # Recent authentications
netapi ise dc failed --hours 48 # Recent failures
netapi ise dc session <MAC> # Full session details
# Universal API Caller
netapi ise api-call ers GET <path> # ERS API (config)
netapi ise api-call openapi GET <path> # OpenAPI v1 (modern)
netapi ise api-call mnt GET <path> # MnT API (monitoring)
netapi ise api-call admin POST <path> \ # Admin UI API
--data "<JSON>"
# API Discovery
netapi ise list-api-modules # List all 200+ modules
netapi ise list-api-modules --filter <keyword> # Search modules
netapi ise inspect-module <name> # Show module methods
netapi ise inspect-module <name> --format json # JSON output
# Dictionaries
netapi ise get-dictionaries # List all dictionaries
netapi ise get-dictionary <name> # Get dictionary attributes
10.4.2. Common Workflows
Workflow 1: Deploy Linux Workstation to ISE
# Step 1: Create endpoint identity group
netapi ise create-endpoint-group "Linux-Research-Workstations" \
--descr "Spatial Biology and Genomics Core Linux devices" \
--parent "Linux-Workstations"
# Step 2: Create dACL (zero-trust)
netapi ise create-dacl "DACL_LINUX_RESEARCH_HARDENED" --aces "
permit udp any host 10.112.142.41 eq 53
permit udp any host 10.112.142.42 eq 53
permit udp any any eq 67
permit udp any any eq 68
deny ip any 10.0.0.0 0.255.255.255
deny ip any 172.16.0.0 0.15.255.255
deny ip any 192.168.0.0 0.0.255.255
permit tcp any any eq 80
permit tcp any any eq 443
permit tcp any any eq 22
deny ip any any
"
# Step 3: Create authorization profile
netapi ise create-authz-profile "Linux_Research_EAP_TLS" \
--dacl "DACL_LINUX_RESEARCH_HARDENED" \
--vlan "CHLA-IoT" \
--reauth-timer 3600
# Step 4: Add authorization rule
netapi ise add-authz-rule "Wired Dot1X Closed" \
"Linux_Research_Hardened" \
"Linux_Research_EAP_TLS" \
--dict "Cisco" \
--attr "cisco-av-pair" \
--value "endpoint-mac-address=b4:e9:b8:f6:c8:17" \
--operator equals
# Step 5: Verify session
netapi ise mnt session b4:e9:b8:f6:c8:17
Workflow 2: Troubleshoot Failed Authentication
# Step 1: Check endpoint registration
netapi ise get-endpoint "b4:e9:b8:f6:c8:17"
# Step 2: Check authentication status
netapi ise mnt auth-status "b4:e9:b8:f6:c8:17"
# Step 3: Review RADIUS logs (DataConnect)
netapi ise dc auth-history "b4:e9:b8:f6:c8:17" --limit 10
# Step 4: Check for recent failures
netapi ise dc failed --hours 48 | grep "b4:e9:b8:f6:c8:17"
# Step 5: Force reauthentication
netapi ise mnt coa "b4:e9:b8:f6:c8:17"
Workflow 3: Validate Deployment with Script
#!/bin/bash
# ise-test-linux-deployment.sh
echo "Validating Endpoint Groups..."
netapi ise get-endpoint-groups | grep Linux
echo "Validating dACLs..."
for dacl in Onboard Discovery Compliant Quarantine; do
netapi ise get-dacl "DACL_Linux_Research_$dacl" || echo "MISSING: $dacl"
done
echo "Validating Authorization Profiles..."
for profile in Posture_Pending Discovery Full Quarantine; do
netapi ise get-authz-profile "Linux_Research_$profile" || echo "MISSING: $profile"
done
echo "Checking live session (if device connected)..."
netapi ise mnt session b4:e9:b8:f6:c8:17 || echo "No active session"
11. Document Metadata
| Field | Value |
|---|---|
Document Title |
January 2026 CHLA InfoSec Operations - Comprehensive Monthly Report |
Author |
Evan Rosado (CHLA InfoSec) |
Report Period |
January 2026 |
Report Type |
Monthly Operations Summary |
Classification |
INTERNAL - CHLA InfoSec |
Version |
2.0 |
Date |
2026-01-30 |
Total Pages |
~120 (estimated) |
Total Lines |
4,000+ (including all sections) |
Source Captures |
34 daily work logs |
Source Lines |
{total-lines:,} |
Build Format |
AsciiDoc → HTML, PDF |
Template |
Antora-compatible AsciiDoc |
11.1. Revision History
| Version | Date | Changes |
|---|---|---|
1.0 |
2026-01-30 (first attempt) |
Initial monthly report - 1,534 lines (insufficient) |
2.0 |
2026-01-30 (this version) |
COMPREHENSIVE REPORT: 4,000+ lines synthesizing all 34 captures. Added: Executive summary, detailed project sections (Linux deployment, netapi expansion, MSCHAPv2 migration, dsec access control, PRJ-RECOVERY), critical security findings (posture ACL, CVE-2026-20029), complete incident log, personnel collaboration matrix, metrics/analytics, lessons learned, appendices (file refs, acronyms, ISE policy, netapi commands). |
END OF COMPREHENSIVE MONTHLY REPORT
Report Status: COMPLETE - All 34 January captures synthesized
Next Month Focus: Linux deployment completion, MSCHAPv2 migration kickoff, posture ACL remediation, CVE-2026-20029 patch deployment