Skip to main content

Secure Offboarding Checklist

Version: 1.0
Last update: November 2025
Responsible: HR (coordination) + DevOps (technical) + AppSec (validation) + Security Champion
Cycle: from T-14 days before until T+1 day after the end


📖 Objective​

Formalise and execute a secure offboarding process for:

  • Contractors whose contract ends
  • Critical suppliers that are terminated
  • Team members (internal or external) who leave the organisation

Benefit: Complete revocation of access, recovery of assets, DORA/NIS2 compliance


🏃 Offboarding Timeline​

T-14 dias: Notificação de término é conhecida
└─ HR notifica Security Champion + DevOps + AppSec

T-10 dias: Preparação começa
└─ Checklist de offboarding enviado a stakeholders

T-5 dias: Avisos iniciais
└─ Notificação ao contractor/fornecedor (email + verbal)
└─ Backup de trabalho iniciado

T-1 dia: Avisos finais
└─ Last day confirmation email
└─ Equipamentos recolhidos agendados

T+0 (Dia de Término):
└─ Acesso revogado em T+0 (imediato após fim do expediente), com verificação até T+1
└─ Assets finais recuperados

T+1 dia: Verificação
└─ Sign-off de conclusão
└─ Entrevista de saída (feedback)

T+7 dias: Auditoria
└─ Revisão de logs (comportamento suspeito?)
└─ Validação de limpeza

📋 PRE-OFFBOARDING (T-14 to T-1)​

1. Initial Notification and Planning​

ItemOwnerStatusDateNotes
HR notifies: CISO, Security Champion, Tech Lead, DevOps Lead, ManagerHR[ ]____Email with the end date
Planning meeting 2 weeks beforeSecurity Champion[ ]____Checklist sent, responsibilities assigned
Notice to the contractor (if known in advance)Manager[ ]____Verbal + written
Document the reason for leavingHR[ ]____Resignation, end of contract, termination, etc.

2. Backup and Recovery of Work​

ItemOwnerExecutedVerifiedNotes
Identify all the contractor's repositories/dataTech Lead[ ][ ]List Git repos, Jira boards, OneDrive shares
Last commit identifiedDevOps[ ][ ]Date, SHA, content
Full backup of private repositoriesDevOps[ ][ ]E.g.: git clone --mirror
Backup of developed source codeDevOps[ ][ ]Zip archive, versioned with a timestamp
Backup of created documentationTech Lead[ ][ ]Wikis, README, specs, design docs
Backup of important communicationHR[ ][ ]Critical emails, Slack messages (if compliance requires it)
Archive in secure storageDevOps[ ][ ]Retention: 5 years (Policy 33 §8), restricted access

Storage:

Location: /archive/offboarded/{contractor-name}/{date}/
├─ git-repos-backup.tar.gz
├─ code-artifacts/
├─ documentation/
└─ metadata.json (index, sizes, checksums)

3. Pre-Offboarding Notifications​

CommunicationFromToWhenContent
Offboarding NoticeSecurity ChampionContractorT-7 daysExact end date, list of what to hand over
Equipment Return NoticeHRContractorT-5 daysWhen/where to return the laptop, mobile phone, badges, etc.
Post-Termination Confidentiality NoticeLegalContractorT-1 dayLegal confidentiality obligations continue, duration, consequences
Last Access EmailSecurity ChampionContractor + ManagerT-0Last day of access - final activities?

🔐 OFFBOARDING EXECUTION (T+0 END DATE)​

4. Revocation of Technical Access (on the same day as T+0)​

Timeline: Start revocation between T+0 (end of the working day) and T+1 (morning)

4.1 Git & CI/CD Access​

ItemOwnerCommand/ActionStatusVerification
Remove the contractor from Github/GitLab orgsDevOpsgithub:remove-member {org} {user}[ ]Contractor cannot clone private repos
Revoke SSH keys (all)DevOpsDelete from ~/.ssh/authorized_keys and the Git platform[ ]SSH clone fails
Revoke Personal Access Tokens (PATs)DevOpsRevoke via GitHub/GitLab settings[ ]API calls fail with 401
Revoke CI/CD credentialsDevOpsDelete service account tokens[ ]CI/CD pipeline fails if the contractor tries to trigger it
Remove collaborator permissionsTech LeadRemove from all repositories[ ]No "edit" access visible
Archive contractor repos (if personal)DevOpsgit archive and move to /archive[ ]Repos marked as archived on platform

Verification:

# Post-revocation check (5 min após revogação)
ssh -i /tmp/test-key git@github.com
# Expected: Permission denied (publickey)

git clone https://github.com/[org]/[private-repo]
# Expected: fatal: repository not found / access denied

4.2 VPN, Wifi, Physical Access​

ItemOwnerActionStatusVerification
Deactivate VPN accountITDeactivate in VPN management console[ ]VPN login fails
Revoke Wifi credentialsITRemove MAC address / WiFi certificate[ ]Device cannot connect
Deactivate badge/card accessFacilitiesCard deactivated in access control system[ ]Badge scan denied at doors
Deactivate parking passFacilitiesRemove licence plate from parking system[ ]Cannot access parking

4.3 Cloud & SaaS Platforms​

PlatformItemOwnerActionStatusVerification
AWSIAM UserDevOpsDeactivate access key + delete user[ ]aws s3 ls fails (401)
AzureService Principal / UserDevOpsDelete or disable in Entra ID[ ]Cannot login to Azure portal
Google CloudService AccountDevOpsDelete service account[ ]GCP API calls fail
JiraUser AccountTech LeadDeactivate user in directory[ ]Cannot login, all issues reassigned
ConfluenceUser AccountTech LeadDeactivate user[ ]Cannot access wikis
SlackUser AccountHRDeactivate user[ ]Cannot login, marked as "inactive"
EmailCorporate EmailHRDisable mailbox (may keep 30 days)[ ]OWA/IMAP login fails

4.4 Database & Data Store Access​

ItemOwnerActionStatusVerification
Revoke PostgreSQL rolesDBADROP ROLE contractor_name[ ]psql connection rejected
Revoke MySQL usersDBADROP USER 'contractor'@'%'[ ]MySQL login fails
Revoke MongoDB authDBARemove user from database[ ]MongoDB auth fails
Revoke S3/Storage accessDevOpsRemove IAM policy, delete credentials[ ]AWS S3 upload/download fails
Revoke Vault accessDevOpsRemove AppRole, invalidate token[ ]Vault auth fails

4.5 MFA & Authentication​

ItemOwnerActionStatusVerification
Remove MFA deviceITRemove from Microsoft Authenticator / Authy[ ]Contractor cannot log in with MFA
Revoke biometric accessFacilitiesRemove fingerprint from system[ ]Badge reader rejects biometric
Revoke corporate device registrationITRemove from MDM (Mobile Device Management)[ ]Device loses corporate mail, VPN

4.6 Integrations, Automation and Indirect Access​

ItemOwnerActionStatusVerification
Inventory the integrations associated with the userDevOpsList apps/integrations connected to Git, CI/CD, ChatOps, ALM[ ]List attached to the offboarding
Revoke application and integration tokensDevOpsRevoke OAuth tokens, webhooks, installed apps, bots, runners[ ]Events/actions stop executing
Revoke credentials in secrets managers and automationDevOpsInvalidate tokens/approles, remove bindings to pipelines[ ]Access fails / executions fail
Remove synchronisation/export configurationsIT/DevOpsDisable synchronisations, forwards, connections to external storage[ ]No export exists after T+0
Validate that there are no permissions inherited through groupsIT/Tech LeadReview indirect groups/roles in directories and platforms[ ]No residual access via a group

5. Recovery of Physical Assets​

ItemCollected ByResponsibleStatusVerification
Laptop/Desktop computerITSecurity Champion[ ]Device serial verified, collected in person
Mobile phone (if corporate)ITSecurity Champion[ ]Wiped on site (or scheduled)
Badges/CardsFacilitiesSecurity Champion[ ]Physically returned
Keys (office, lab, locker)FacilitiesSecurity Champion[ ]All accounted for
Hardware tokens (security key, fob)ITSecurity Champion[ ]Returned and destroyed
External drives/USB sticksTech LeadSecurity Champion[ ]Scanned for unauthorised data
Documents/printoutsHRSecurity Champion[ ]Collected, shredded or archived
Other equipmentHRSecurity Champion[ ]Specify: _________________

Procedure:

1. Schedule collection meeting (T+0 or T+1)
2. Witness: Security Champion + HR + IT
3. Device powered off, inventory checked
4. Wiping scheduled (within 48h) or done on-site
5. Sign-off form completed
6. Evidence photographed/logged

6. Secrets & Credentials Rotation​

ItemOwnerActionStatusVerification
API keys contractor had access toAppSecRevoke in platform, rotate secrets[ ]Old key returns 401
Database passwordsDBARotate in Vault + all apps updated[ ]Old password fails login
JWT signing keysDevOpsRotate if contractor had access[ ]Old tokens become invalid
SSH host keys (if compromised risk)DevOpsRegenerate (e.g.: GitHub deploy keys)[ ]Old SSH key fails
OAuth tokensDevOpsRevoke all tokens for contractor's app[ ]App reauthenticates
Certificates/SSL keysDevOpsRotate if contractor had access[ ]Old cert expires or revoked

Time limit: all rotations on the same day for planned departures, within ≤ 2 h for unplanned departures and immediately for security reasons (the Manual's choice; Policy 33 §7).


📋 POST-OFFBOARDING (T+1 to T+7)​

7. Verification of Completion​

T+1 (Day after the end):

ItemOwnerVerifiedObservations
Confirmation: All access revokedDevOps[ ]Cross-check all platforms
Confirmation: All devices recoveredIT[ ]Serial numbers matched, wiping initiated
Confirmation: Contractor cannot log in to any platformAppSec[ ]Login test (must fail) on 5 random platforms
Data backup verifiedDevOps[ ]Archive integrity validated (checksums OK)
Sign-off form signedSecurity Champion[ ]All parties have signed

Sign-Off Form Template:

OFFBOARDING SIGN-OFF

Contractor: ________________
Data de Término: ________________
Data de Offboarding Completado: ________________

Confirmamos que o seguinte foi completado:
✓ Acesso técnico revogado (Git, Cloud, VPN, Email, Jira, Slack)
✓ Ativos físicos recuperados (laptop, badge, chaves)
✓ Secrets rotacionados (API keys, DB passwords, etc.)
✓ Backup de dados arquivado
✓ Confidentiality agreement assinado e reforçado
✓ Nenhum acesso residual identificado

Assinado por:
- HR Manager: _________________ Data: _____
- Security Champion: _________________ Data: _____
- DevOps Lead: _________________ Data: _____
- Tech Lead: _________________ Data: _____

Escalonamento (se necessário):
Incidentes durante offboarding: [_______________]
CISO Notificado? [ ] Sim [ ] Não
Data: _____

Contacto para follow-up: _________________

8. Exit Interview (Feedback)​

T+1 or T+2, 1-1 with the contractor (optional but recommended)

TopicQuestionAnswerActions
SecurityHow were the security policies? Clear? An impediment?[_____][ ] Feedback for training
IncidentsAny security incident/error during the project?[_____][ ] Incident ticket if so
Access ControlWas access appropriate? Did you have excessive permissions?[_____][ ] Adjustment for the next one
ToolingWere the security tools intuitive?[_____][ ] Tool review if feedback is negative
TrainingWas the onboarding training sufficient?[_____][ ] Track iterated if there are gaps
RecommendationsRecommendations for improvement?[_____][ ] Backlog item created

Result: Scoring (1–5) aggregated into a "Contractor Security Rating" (see US-20)


9. Log Audit (T+3 to T+7)​

AppSec Engineer review:

VerificationQueryExpected resultStatus
Last access to GitGit logs for the last 72hNo new commit/push[ ]
Last access to the VPNVPN logs for the last 72hAccess ended at T+0[ ]
Last access to emailEmail logs for the last 72hNo login after T+0[ ]
Last access to the cloudCloud audit logs for the last 72hNo action after T+0[ ]
Suspicious behaviourSIEM alerts for the last 7 daysNo alert related to the contractor[ ]
Data exfiltration attemptDLP logs for the last 7 daysNo upload/download attempt[ ]
Activity via integrations/botsAutomation/ChatOps/GitHub Apps/CI logsNo execution associated with the user after T+0[ ]

If an anomaly is found:

  • Alert the CISO immediately
  • Start an incident investigation
  • Review residual access logs
  • Escalation to Legal if necessary

📊 Artefacts & Documentation​

Keep for 5 years (Policy 33 §8):

Archive Location: /compliance/offboarding/{contractor-name}/{date}/
├─ offboarding-checklist.pdf (signed)
├─ backup-manifest.json
│ ├─ repositories: [list]
│ ├─ artifacts: [list]
│ └─ timestamp, checksums
├─ device-inventory.pdf (with photos)
├─ secrets-rotation-log.txt
├─ access-revocation-log.txt
├─ audit-logs-excerpt.pdf (last 72h)
├─ exit-interview.pdf
└─ sign-off-form.pdf

⚠️ Red Flags & Escalation​

If any of the following occurs, ESCALATE IMMEDIATELY:

Red FlagActionOwner
Contractor tries to log in after T+0Escalate CISO, investigate login attemptSecurity Monitoring
Data missing from the backupInvestigate theft/deletion, forensicsDevOps + CISO
Secrets were not rotated in timeRotate NOW, investigate whyAppSec + DevOps
"Missing" equipmentEscalate HR + Legal, possibly theftFacilities + HR
Contractor has not returned equipmentLegal letter, escalate to managementHR + Legal
Suspicious behaviour in the logsFull forensics, preserve evidenceAppSec + CISO
Contractor on a sanctions list (after leaving)Legal + CISO, compliance checkCompliance + Legal

📎 Checklists by Type of Departure​

A. Immediate Termination (for Cause)​

Diferença: Sem avisos, revogação no mesmo dia

[ ] Security incident confirmado
[ ] Violação de política de segurança
[ ] Roubo de ativos
[ ] Breach potencial
[ ] Comportamento malicioso confirmado

Ações especiais:
- [ ] Device wiped on-site (não permitir levar laptop)
- [ ] Backup forense realizado ANTES de wipe
- [ ] Legal notificado
- [ ] CISO escalação obrigatória
- [ ] Possível relato a authorities

B. Amicable Termination (End of Contract)​

Timeline: Planeado com 2 semanas de aviso

[ ] Backup de trabalho completo
[ ] Knowledge transfer realizado
[ ] Entrevista de saída feita
[ ] Referências para re-hire consideradas
[ ] Thank you email sent

C. End of Contract by Expiry​

Automático após data pré-definida

[ ] Notificação automática em HR system
[ ] Offboarding inicia T-14 dias automaticamente
[ ] Extensão? Re-negotiate com Procurement

🏁 Success Criteria​

Offboarding is considered COMPLETE when:

  • ✅ All technical access revoked (0 residual access)
  • ✅ All physical assets recovered
  • ✅ Secrets rotated
  • ✅ Backup archived with confirmed integrity
  • ✅ Sign-off form signed by 4+ parties
  • ✅ Log audit shows no post-termination activity
  • ✅ Confidentiality obligations reinforced
  • ✅ Complete archive in compliance storage (5 years)


Ownership: HR + DevOps + AppSec
Review: Annual
Last update: November 2025