HIPAA Remediation 2025: 14-Day Proven Security Rule Sprint
If you need a fast, defensible way to close HIPAA Security Rule gaps before your next audit, this 14-day HIPAA remediation sprint gives you a pragmatic, code-first plan. You’ll tackle the big four—risk analysis, access controls, audit logging, and encryption at rest/in transit—and package audit evidence that examiners actually accept. Where useful, we’ve included drop-in snippets (Terraform, Bash, Nginx, SQL, PowerShell) plus ready-to-use templates.

Need expert help? Our team can run or co-pilot this sprint and deliver the binder.
Start here: Risk Assessment Services → Remediation Services → Pentest Testing Corp
TL;DR
- Scope: Security Rule must-haves for PHI systems: inventory, access control, encryption, logging, backups, vendor BAAs.
- Output: An auditor-ready evidence pack: policies, configs, screenshots, exports, and logs mapped to §164.308, §164.310, §164.312, §164.316.
- Timebox: 14 business days with daily artifacts and a final handoff.
- Tools: Cloud/IaC, system hardening, SIEM queries, IR runbooks, plus a free external scan for quick hygiene wins.
Day-by-Day HIPAA Remediation Plan (with code you can ship)
Day 1: Build the PHI Asset Inventory + Data Flows (Admin §164.308(a)(1)(ii)(A))
Create a machine-generated list; tag PHI stores and ePHI data flows.
AWS quick pull (Bash + AWS CLI):
#!/usr/bin/env bash
set -euo pipefail
aws ec2 describe-instances --query 'Reservations[].Instances[].{Id:InstanceId,Name:Tags[?Key==`Name`]|[0].Value,State:State.Name,Subnets:SubnetId}' --output table > inventory_ec2.txt
aws rds describe-db-instances --query 'DBInstances[].{Id:DBInstanceIdentifier,Engine:Engine,Encrypted:StorageEncrypted,KmsKeyId:KmsKeyId,MultiAZ:MultiAZ}' --output table > inventory_rds.txt
aws s3api list-buckets --query 'Buckets[].Name' --output text | tr '\t' '\n' > inventory_s3.txt
Lightweight risk register (YAML)
- asset: rds-phidb-prod
threats: [unauth_access, misconfig, weak_encryption]
likelihood: medium
impact: high
controls: [kms_at_rest, tls_in_transit, iam_least_priv, audit_logs]
owner: [email protected]
due: 2025-11-20
Day 2: Confirm BAAs + Vendor Access (Org §164.314)
Track who can access PHI; attach BAAs; restrict shared accounts.
Vendor tracker (CSV)
Vendor,Service,PHI Access,BAA Signed,Last Review,Notes
Acme EHR,Cloud EHR,Yes,2025-03-10,2025-11-01,Scope EHR-prod only
Day 3: Access Controls & MFA Everywhere (Tech §164.312(a))
Enforce least privilege; remove dormant users; ban shared admin logins.
AWS IAM: deny wildcard & enforce MFA (policy snippet)
{
"Version": "2012-10-17",
"Statement": [
{"Effect":"Deny","Action":"*","Resource":"*","Condition":{"StringLike":{"aws:RequestedRegion":"*"}}},
{"Effect":"Deny","Action":"*","Resource":"*","Condition":{"BoolIfExists":{"aws:MultiFactorAuthPresent":"false"}}}
]
}
Linux: sudo-without-TTY = no; require audit
echo 'Defaults requiretty' >> /etc/sudoers
sed -i 's/^# *USE_AUDIT.*/USE_AUDIT yes/' /etc/login.defs
Day 4: Joiners-Movers-Leavers (JML) Audit (Admin §164.308(a)(3))
Export active accounts, compare to HR list, and disable stragglers.
Quick diff (Bash)
comm -23 <(sort hr_active.csv) <(sort directory_active.csv) > should_be_disabled.csv
Day 5: Map & Minimize PHI (Admin §164.308(a)(3)(ii)(B))
Find PHI columns and reduce blast radius.
Find likely PHI columns (PostgreSQL)
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE column_name ~* '(ssn|social|mrn|dob|patient|phi|diagnosis|insurance|member)';
Row-level security example (PostgreSQL)
ALTER TABLE claims ENABLE ROW LEVEL SECURITY;
CREATE POLICY minimum_necessary ON claims
USING (current_setting('app.user_role') IN ('billing','clinician'));
Day 6: Encryption at Rest (Tech §164.312(a)(2)(iv))
Mandate KMS/TDE for databases and buckets.
Terraform: S3 default SSE-KMS + block public access
resource "aws_s3_bucket" "phi" { bucket = "org-prod-phi" }
resource "aws_s3_bucket_public_access_block" "phi" {
bucket = aws_s3_bucket.phi.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "phi" {
bucket = aws_s3_bucket.phi.id
rule { apply_server_side_encryption_by_default { sse_algorithm = "aws:kms" } }
}
MySQL TDE (MariaDB) example
INSTALL SONAME 'file_key_management';
SET GLOBAL file_key_management_filename='/etc/mysql/encryption/keyfile';
ALTER TABLE patients ENCRYPTION='Y';
Day 7: Encryption in Transit (Tech §164.312(e)(1))
TLS 1.2+ only; strong ciphers; HSTS; redirect to HTTPS.
Nginx TLS + HSTS
server {
listen 443 ssl http2;
server_name ehr.example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5:!3DES:!SHA1;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
...
}
server {
listen 80;
return 301 https://$host$request_uri;
}
Node.js client: enforce TLS
const https = require('https');
const agent = new https.Agent({ minVersion: 'TLSv1.2', maxVersion: 'TLSv1.3', honorCipherOrder: true });
Day 8: Audit Logging + Retention (Tech §164.312(b), Admin §164.308(a)(1)(ii)(D))
Turn on API/action logs; centralize; alert on suspicious PHI access.
AWS CloudTrail + S3 log bucket SSE-KMS (CLI)
aws cloudtrail create-trail --name org-trail \
--s3-bucket-name org-sec-logs --is-multi-region-trail \
--kms-key-id alias/org-logs
aws cloudtrail start-logging --name org-trail
Linux auditd watchlist
echo "-w /etc/passwd -p wa -k id_changes" >> /etc/audit/rules.d/hipaa.rules
echo "-w /var/log/ -p rwxa -k log_tamper" >> /etc/audit/rules.d/hipaa.rules
augenrules --load
Detect off-hours PHI reads (SQL example)
SELECT user_id, count(*)
FROM access_log
WHERE action='READ' AND object_type='PHI'
AND extract(dow from ts) IN (0,6) OR extract(hour from ts) NOT BETWEEN 7 AND 19
GROUP BY user_id HAVING count(*)>10;
Day 9: Backups, DR & Key Hygiene (Admin §164.308(a)(7))
Immutable backups, encrypted, tested restores.
AWS Backup Plan (JSON)
{
"Rules": [{
"RuleName": "daily-phi",
"TargetBackupVaultName": "vault-phi",
"ScheduleExpression": "cron(0 2 * * ? *)",
"StartWindowMinutes": 60,
"CompletionWindowMinutes": 600,
"Lifecycle": {"DeleteAfterDays": 35}
}]
}
PostgreSQL: verified restore (Bash)
pg_dump -Fc -d phidb_prod -f /backups/phidb_$(date +%F).dump
pg_restore -l /backups/phidb_$(date +%F).dump | head -n 5 # smoke check
Day 10: Endpoint Encryption (Phys §164.310(d)(1), Tech §164.312(a))
Encrypt laptops/workstations; capture proof.
Windows BitLocker (PowerShell)
Enable-BitLocker -MountPoint "C:" -EncryptionMethod XtsAes256 -UsedSpaceOnly
(Get-BitLockerVolume -MountPoint "C:").VolumeStatus
macOS FileVault
sudo fdesetup enable
fdesetup status
Capture screenshots + export device lists showing encryption status for evidence.
Day 11: Minimum Necessary & Session Management (Tech §164.312(a)(1))
Short sessions, re-auth for sensitive actions, and fine-grained scopes.
OIDC token with PHI-scoped claims (example)
{
"sub":"u-123", "acr":"urn:mfa:phishing_resistant",
"scope":"phi.read:clinic-001",
"auth_time":1731480000
}
Day 12: Incident Response (IR) & Breach Notification (Admin §164.308(a)(6))
Create a concise IR runbook with roles, comms, timers.
IR runbook skeleton (Markdown)
# HIPAA IR Plan
## Triggers
- Unauthorized PHI access alert
## First 60 minutes
- Incident Commander (IC) assigns scribe
- Contain: disable compromised creds; isolate host
## Notifications
- Privacy Officer decision on breach status within 72h
Day 13: Policies, Training & Acknowledgments (Admin §164.308(a)(5), §164.316)
Ship short policies; capture staff signatures digitally.
Training log (CSV)
Employee,Course,Date,Score,Acknowledged
Jane Doe,HIPAA Security 101,2025-11-12,95,Yes
Day 14: Evidence Packaging & Sign-off
Bundle outputs into a single folder with control mappings.
Binder layout
/evidence
/164.308 # Admin safeguards
/164.310 # Physical
/164.312 # Technical
/164.316 # Documentation
attestations/, policies/, screenshots/, configs/, exports/
mapping.xlsx # control ↔ artifact
exceptions.csv
risk-register.yaml
Artifacts Auditors Commonly Accept
- Risk analysis: inventory exports, risk register YAML, owner assignments.
- Access control: IAM policies, SSO/MFA screenshots, JML diffs, least-privilege evidence.
- Encryption: KMS screenshots, DB/S3 encryption configs, TLS scans, Nginx/Caddy configs.
- Audit logs: CloudTrail/auditd settings, SIEM queries, sample alerts, retention configuration.
- Backups/DR: backup policies, successful restore logs, key rotation proof.
- Policies & training: PDFs, LMS completion exports, signed acknowledgments.
- Vendors: BAA list, data flow diagrams, least-privileged vendor access.
- Exceptions: exception register with compensating controls and due dates.
Handoff Templates (copy/paste)
Exception register (CSV)
ID,Control,Exception,Compensating Control,Owner,Expiry,Status
EX-001,164.312(a),Legacy app lacks TLS 1.2,IPsec tunnel + WAF mTLS,App Owner,2026-03-31,Open
Change log (CSV)
Date,Change,Environment,Requested By,Approved By,Ticket
2025-11-13,Enable SSE-KMS on S3 org-prod-phi,Prod,SecOps,CTO,CHG-2219
Risk treatment (YAML)
- id: R-04
risk: Off-hours PHI access undetected
treatment: SIEM rule + on-call page
metric: MTTA < 15m
Validate Quickly with Our Free Scanner
Homepage of the Free Website Vulnerability Scanner

👉 Run a free check: free.pentesttesting.com
A snippet of the scan report to check Website Vulnerability

Implementation Snippets You Can Reuse
CSP starter for patient portal
Content-Security-Policy: default-src 'self'; frame-ancestors 'none'; object-src 'none'; base-uri 'self'; frame-src 'self'
mTLS for internal admin (Nginx)
ssl_client_certificate /etc/nginx/ca.pem;
ssl_verify_client on;
WAF allowlist for EHR webhook
aws wafv2 create-ip-set --name ehr-webhook-allow \
--addresses 203.0.113.0/24 198.51.100.10/32 --scope REGIONAL --ip-address-version IPV4
PHI export watermarking (S3 object tag via CLI)
aws s3api put-object-tagging --bucket org-prod-phi --key exports/report.csv \
--tagging 'TagSet=[{Key=phi,Value=true},{Key=owner,Value=data-team}]'
Control Mapping Cheat-Sheet
- §164.308 (Administrative): risk analysis, training, IR, contingency, evaluations.
- §164.310 (Physical): device/media control, facility access, workstation use.
- §164.312 (Technical): access, audit controls, integrity, person/entity auth, transmission security.
- §164.316 (Documentation): policies, procedures, records retention.
Where to Go Next
- Book the sprint: Risk Assessment Services
- Get hands-on help: Remediation Services
- Learn more: On Our Blog Page.
- Related read: Prevent XSSI Attack in OpenCart (security headers + response handling concepts align with Security Rule hardening)
🔐 Frequently Asked Questions (FAQs)
Find answers to commonly asked questions about S.