You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**Objective:** Require 2FA for all administrator-capable accounts and maintain a documented break-glass recovery path.
668
668
669
+
See [WordPress Security Benchmark](https://github.com/dknauss/wp-security-benchmark) §5.1 for the compliance audit checklist and configuration rationale.
670
+
669
671
**Choose and Standardize One 2FA Plugin:**
670
672
671
673
-`two-factor`.
@@ -860,6 +862,8 @@ Then verify admin login and critical user flows in browser.
860
862
**Purpose:**
861
863
Apply plugin and theme updates with controlled blast radius, rapid detection of regressions, and a clear rollback path.
862
864
865
+
The [WordPress Security Benchmark](https://github.com/dknauss/wp-security-benchmark) §8.3 defines the patching SLA: security updates within 72 hours, critical patches within 24 hours or virtual-patched immediately.
866
+
863
867
**Prerequisites:**
864
868
- All updates tested on staging
865
869
- Database backed up
@@ -1998,7 +2002,7 @@ Lifecycle metadata for incident response procedures is tracked in [Appendix E](#
1998
2002
1999
2003
**Prerequisites for all incident procedures below:**
2000
2004
- SSH access to the production host with `sudo` privileges
- Access to monitoring dashboards and log aggregation
2003
2007
- Contact list for on-call personnel (see [Section 10.4](#104-incident-roles-and-escalation-path))
2004
2008
@@ -2102,47 +2106,51 @@ Confirm admin login and at least one critical business workflow before closing i
2102
2106
2103
2107
>**CRITICAL:** If breach is suspected, act immediately. Data loss and reputation damage increase with every minute of delay.
2104
2108
2109
+
This procedure implements the NIST SP 800-61r3 incident handling lifecycle described in the [WordPress Security Hardening Guide](https://github.com/dknauss/wp-security-hardening-guide) §12.3.
2110
+
2105
2111
**Alert Meaning:**
2106
2112
Evidence suggests active compromise or unauthorized access (malicious files, account misuse, redirect behavior, or scanner-confirmed malware).
2107
2113
2108
2114
**Customer Impact:**
2109
2115
Confidentiality, integrity, and availability are all at risk. This can require service isolation, user-facing communications, and credential revocation.
2110
2116
2117
+
**First action -- declare the incident:**
2118
+
2119
+
```text
2120
+
Severity: CRITICAL
2121
+
Issue: [Description of attack]
2122
+
Time Detected: [Time]
2123
+
Affected User Data: [If known]
2124
+
Escalation: [Your contact details]
2125
+
```
2126
+
2111
2127
**Diagnosis:**
2112
2128
2113
-
1. **Declare incident and notify security owner**
2114
-
```
2115
-
Severity: CRITICAL
2116
-
Issue: [Description of attack]
2117
-
Time Detected: [Time]
2118
-
Affected User Data: [If known]
2119
-
Escalation: [Your contact details]
2120
-
```
2121
-
2. **Contain exposure**
2129
+
1. **Contain exposure**
2122
2130
```bash
2123
2131
# Take site offline to prevent further data exfiltration
2124
-
# Option 1: Redirect to maintenance page (requires WP-CLI 2.2+)
2132
+
# Option 1: Redirect to maintenance page (requires WP-CLI 2.5+)
2125
2133
wp maintenance-mode activate
2126
2134
2127
2135
# Option 2: Block all traffic except admins
2128
2136
# Add to .htaccess or nginx config:
2129
2137
# deny all;
2130
2138
# allow [CUSTOMIZE: your-ip];
2131
2139
```
2132
-
3. **Determine scope of compromise**
2140
+
2. **Determine scope of compromise**
2133
2141
```bash
2134
2142
wp user list --format=table
2135
2143
wp user list --role=administrator --format=table
2136
2144
find /home/wordpress -name "*.php" -type f -mtime -7 -ls
tar -czf /root/forensics/breach-evidence-$(date +%Y%m%d-%H%M%S).tar.gz \
2142
2150
/home/wordpress/public_html
2143
2151
wp db export /root/forensics/breach-evidence-db-$(date +%Y%m%d-%H%M%S).sql
2144
2152
```
2145
-
5. **Perform security scans**
2153
+
4. **Perform security scans**
2146
2154
```bash
2147
2155
# Wordfence scans must be initiated through wp-admin > Wordfence > Scan
2148
2156
# For CLI-based malware scanning, use dedicated tools:
@@ -2170,9 +2178,7 @@ Confidentiality, integrity, and availability are all at risk. This can require s
2170
2178
echo"Reset $user — communicate new password via secure channel"
2171
2179
done
2172
2180
2173
-
# Invalidate all existing sessions
2174
-
# Plugin-dependent — wp user session destroy requires a session management plugin.
2175
-
# Alternative: wp db query "DELETE FROM wp_usermeta WHERE meta_key LIKE '_session_tokens';"
2181
+
# Invalidate all existing sessions (built-in WP-CLI command, no plugin required)
2176
2182
wp user list --field=ID | xargs -I {} wp user session destroy {} --all
2177
2183
```
2178
2184
4. Patch vulnerable components.
@@ -2182,7 +2188,15 @@ Confidentiality, integrity, and availability are all at risk. This can require s
2182
2188
wp theme update --all
2183
2189
```
2184
2190
2185
-
**Post-Mitigation Monitoring:**
2191
+
**Escalation:**
2192
+
2193
+
- Escalate immediately via [Section 10.4](#104-incident-roles-and-escalation-path) to Security Officer and Incident Commander.
2194
+
- If regulated data may be exposed, involve legal/compliance workflow before public disclosure.
2195
+
- If compromise cannot be contained quickly, execute disaster recovery path in [Section 11.2](#112-full-site-restore-from-backup).
2196
+
2197
+
**Recovery Validation:**
2198
+
2199
+
Run active monitoring for at least one full monitoring window (minimum 30 minutes):
2186
2200
2187
2201
```bash
2188
2202
# Watch for re-compromise indicators in real time
@@ -2194,15 +2208,7 @@ crontab -l
2194
2208
wp cron event list
2195
2209
```
2196
2210
2197
-
Run active monitoring for at least one full monitoring window (minimum 30 minutes) before reducing alerting posture.
2198
-
2199
-
**Escalation:**
2200
-
2201
-
- Escalate immediately via [Section 10.4](#104-incident-roles-and-escalation-path) to Security Officer and Incident Commander.
2202
-
- If regulated data may be exposed, involve legal/compliance workflow before public disclosure.
2203
-
- If compromise cannot be contained quickly, execute disaster recovery path in [Section 11.2](#112-full-site-restore-from-backup).
2204
-
2205
-
**Recovery Validation:**
2211
+
Then confirm recovery:
2206
2212
2207
2213
```bash
2208
2214
wp user list --role=administrator --format=table
@@ -2218,12 +2224,7 @@ Then confirm:
2218
2224
- site behavior is normal for at least one monitoring window;
2219
2225
- incident report is completed in [Section 10.6](#106-post-incident-review).
2220
2226
2221
-
**Post-Incident:**
2222
-
- Contact affected users
2223
-
- Monitor security vendor alerts
2224
-
- File incident report
2225
-
- Update security measures
2226
-
- Schedule security audit
2227
+
After all validation checks pass, initiate a full post-incident review per [Section 10.6](#106-post-incident-review), including affected-user notification and a security audit schedule.
0 commit comments