Zendesk Hardening Guide
Support platform security for API tokens, app marketplace, and ticket redaction
Overview
Zendesk handles customer support data including tickets, chat transcripts, and customer PII. OAuth apps, webhooks, and Zendesk Marketplace integrations extend functionality but increase attack surface. API tokens enable bulk ticket export; compromised integrations access customer communication history.
Intended Audience
- Security engineers managing support platforms
- Zendesk administrators
- GRC professionals assessing customer data compliance
- Third-party risk managers evaluating support integrations
Table of Contents
1. Authentication & Access Controls
1.1 Enforce SSO with MFA
Profile Level: L1 (Baseline) NIST 800-53: IA-2(1)
ClickOps Implementation
Step 1: Configure SAML SSO
- Navigate to: Admin Center → Account → Security → Single sign-on
- Configure SAML settings
- Enable: Require SSO
Step 2: Enable 2FA
- Navigate to: Admin Center → Account → Security → Two-factor authentication
- Enable: Require two-factor authentication
- Configure backup codes
1.2 Implement Role-Based Access
Profile Level: L1 (Baseline) NIST 800-53: AC-3, AC-6
ClickOps Implementation
Step 1: Define Custom Roles
| Role | Permissions |
|---|---|
| Admin | Full access (limited users) |
| Team Lead | Manage team, view reports |
| Agent | Handle tickets only |
| Light Agent | Comment only (no ticket actions) |
Step 2: Configure Role Permissions
- Navigate to: Admin Center → People → Team → Roles
- Create custom roles
- Assign minimum permissions
1.3 Configure IP Restrictions
Profile Level: L2 (Hardened) NIST 800-53: AC-6
ClickOps Implementation
Step 1: Enable IP Restrictions
- Navigate to: Admin Center → Account → Security → Advanced
- Configure: IP restrictions
- Add allowed IP ranges
2. API & App Security
2.1 Secure API Token Management
Profile Level: L1 (Baseline) NIST 800-53: IA-5
Description
Manage Zendesk API tokens securely.
Rationale
Attack Scenario: Stolen API token enables bulk ticket export; customer PII and support history exfiltrated for social engineering.
ClickOps Implementation
Step 1: Audit API Tokens
- Navigate to: Admin Center → Apps and integrations → APIs → Zendesk API
- Review all active tokens
- Remove unused tokens
Step 2: Create Scoped Tokens
- Use OAuth apps for granular permissions
- Set token expiration
- Document token purposes
2.2 Marketplace App Security
Profile Level: L1 (Baseline) NIST 800-53: CM-7
ClickOps Implementation
Step 1: Review Installed Apps
- Navigate to: Admin Center → Apps and integrations → Apps → Zendesk Support apps
- Review all installed apps
- Remove unused apps
Step 2: Configure App Permissions
- Review OAuth scopes per app
- Require admin approval for new apps
- Audit app access regularly
3. Data Security
3.1 Configure Data Redaction
Profile Level: L1 (Baseline) NIST 800-53: SC-28
ClickOps Implementation
Step 1: Enable Ticket Redaction
- Navigate to: Admin Center → Account → Security → Advanced
- Configure: Redaction
- Enable automatic credit card redaction
Step 2: Configure Deletion Schedules
- Set up ticket archiving
- Configure attachment deletion
- Enable GDPR deletion workflows
3.2 Secure Attachments
Profile Level: L1 (Baseline) NIST 800-53: SC-28
ClickOps Implementation
Step 1: Configure Attachment Settings
- Limit attachment file types
- Set size limits
- Enable malware scanning
Step 2: Access Control
- Require authentication for attachments
- Configure secure attachment URLs
- Set expiration on attachment links
4. Monitoring & Detection
4.1 Enable Audit Logs
Profile Level: L1 (Baseline) NIST 800-53: AU-2, AU-3
ClickOps Implementation
Step 1: Access Audit Logs
- Navigate to: Admin Center → Account → Audit logs
- Review authentication events
- Monitor configuration changes
Detection Focus
-- Detect bulk ticket exports
SELECT user_email, action, COUNT(*) as exports
FROM zendesk_audit_log
WHERE action = 'ticket_export'
AND timestamp > NOW() - INTERVAL '24 hours'
GROUP BY user_email, action
HAVING COUNT(*) > 10;
-- Detect API abuse
SELECT api_token, endpoint, COUNT(*) as requests
FROM api_log
WHERE timestamp > NOW() - INTERVAL '1 hour'
GROUP BY api_token, endpoint
HAVING COUNT(*) > 1000;
Appendix A: Edition Compatibility
| Control | Team | Growth | Professional | Enterprise |
|---|---|---|---|---|
| SAML SSO | ❌ | ❌ | ✅ | ✅ |
| IP Restrictions | ❌ | ❌ | ✅ | ✅ |
| Audit Logs | ❌ | ❌ | ❌ | ✅ |
| Custom Roles | ❌ | ❌ | ❌ | ✅ |
Changelog
| Date | Version | Maturity | Changes | Author |
|---|---|---|---|---|
| 2025-12-14 | 0.1.0 | draft | Initial Zendesk hardening guide | Claude Code (Opus 4.5) |