Administrator / Domain Admin / Tier-0 ‘ın Kurumdan yada Görevinden Ayrılmasının Ardından Yapılması Gereken Güvenlik Kontrolleri
Tier-0 Privileged Account Offboarding & Compromise Assessment
Amaç: Kurumdan ayrılan Domain Admin / Tier-0 yöneticisinin bütün erişimlerini sonlandırmak, bildiği veya erişebildiği credential’ları güvenli hale getirmek ve Active Directory ortamında yetki/persistence bırakılmadığını doğrulamak.
Önemli ayrım:
Normal / planlı ayrılış: Credential rotation + access cleanup + audit.
Şüpheli ayrılış: Yukarıdakilere ek olarak kapsamlı compromise assessment.
Compromise / Golden Ticket şüphesi varsa krbtgt prosedürü ayrıca uygulanır.
A. Kimlik ve Erişimlerin Acil Kapatılması
1. Tüm kullanıcı ve yönetici hesaplarını tespit et
Normal kullanıcı hesabı
Domain Admin hesabı
Server Admin hesabı
Entra ID hesabı
Cloud-only admin hesabı
PAM/PIM hesabı
VPN hesabı
Backup/virtualization/network hesapları tespit edildi.
Get-ADUser -Filter ‘SamAccountName -like “*username*”‘ `
-Properties Enabled,LastLogonDate,MemberOf,adminCount,whenCreated
2. Hesapları değiştirmeden önce forensic snapshot al
SID
ObjectGUID
DistinguishedName
Grup üyelikleri
adminCount
LastLogonDate
$User = Get-ADUser username `
-Properties SID,ObjectGUID,MemberOf,adminCount,LastLogonDate,whenCreated
$User | Format-List *
Bu bilgileri audit dosyasına export etmek faydalıdır:
$User | Export-Clixml C:\Audit\username-before-offboarding.xml
3. Kullanıcının normal AD hesabını Disable et
Normal kullanıcı hesabı disable edilir.
Disable-ADAccount -Identity username
Kontrol:
Get-ADUser username -Properties Enabled |
Select SamAccountName,Enabled
4. Ayrı privileged/admin hesabını Disable et
Ayrı Domain Admin hesabı disable edilir.
Disable-ADAccount -Identity adm-username
5. Privileged grup üyeliklerini kaldır
Özellikle:
Domain Admins
Enterprise Admins
Schema Admins
Administrators
DNSAdmins
DHCP Administrators
Backup Operators
Server Operators
Account Operators
Group Policy Creator Owners
custom Tier-0 groups
kontrol edilmelidir.
Get-ADPrincipalGroupMembership adm-username |
Sort Name |
Select Name,GroupScope,GroupCategory
6. Nested privileged group membership kontrolü yap
Direkt üyelik kontrolü yeterli değildir.
$U = Get-ADUser adm-username
Get-ADGroup -LDAPFilter `
“(member:1.2.840.113556.1.4.1941:=$($U.DistinguishedName))” |
Select Name,DistinguishedName
Nested üyelik üzerinden kalan privileged erişim olmadığı doğrulanır.
7. Entra ID erişimini kapat ve session’ları revoke et
Hybrid/cloud ortam varsa:
Sign-in blocked.
Refresh token’lar revoke edildi.
Browser/cloud session’ları revoke edilir.
PIM assignment’ları kaldırılır.
Registered MFA/FIDO yöntemleri değerlendirilir.
Microsoft Graph:
Revoke-MgUserSignInSession -UserId user@volsys.com
8. Remote access yöntemlerini kapat
VPN
RADIUS/NPS
RD Gateway
Citrix
Azure Bastion
PAM jump server
PAW/SAW
third-party remote access
erişimleri kaldırılır.
B. Credential ve Secret Rotation
9. Ayrılan kişinin AD parolasını değiştir
Disable işleminden sonra savunma katmanı olarak parola da değiştirilebilir.
Normal hesap password rotated.
Admin hesabı password rotated.
10. Shared Domain Admin hesaplarını tespit et
Ayrılan kişinin bildiği shared privileged hesaplar bulunmalıdır.
Shared DA hesapları belirlenir.
Parolaları rotate edilr.
Hesap kimin adına kayıtlı değil; ayrılan kişi bu credential’ı biliyor muydu?
11. Built-in Administrator hesabını değerlendir
Built-in Administrator kullanılıyor mu?
Ayrılan kişi parolasını biliyor muydu?
- Gerekiyorsa parola rotate edildi.
Get-ADUser -Identity Administrator `
-Properties Enabled,LastLogonDate,PasswordLastSet
12. Emergency / Break-Glass credential’ları rotate et
Kişinin erişimi varsa:
AD emergency account
Entra emergency access account
PAM break-glass
virtualization emergency account
backup emergency account
credential’ları değiştirilir.
Rotation sonrası hesapların gerçekten çalıştığı doğrulanmalıdır.
13. DSRM password’lerini değerlendir
Ayrılan administrator DC kurmuşsa veya DSRM password’ünü biliyor olabilecek durumdaysa:
Tüm DC’lerin DSRM credential risk değerlendirmesi yapılır.
Gerekiyorsa DSRM password’leri rotate edilir.
Local DC:
ntdsutil
set dsrm password
reset password on server null
q
q
Remote DC:
ntdsutil
set dsrm password
reset password on server DC02.domain.local
q
q
14. Windows LAPS password rotation gerçekleştir
Ayrılan kişi Tier-0/member server local admin parolalarını görmüş olabilecekse:
Reset-LapsPassword
Remote olarak kontrollü şekilde uygulanabilir.
DC dışındaki Tier-0 sistemlerde LAPS password’leri rotate edilir.
İlgili LAPS audit logları kontrol edilir.
15. Service account parolalarını gözden geçir
Ayrılan kişinin bildiği:
SQL service accounts
scheduled task accounts
monitoring accounts
backup accounts
application pool accounts
middleware accounts
tespit edilip parolaları kontrollü şekilde rotate edilir.
Önce dependency analizi yapılmalıdır.
16. gMSA / dMSA erişimlerini kontrol et
gMSA parolasını kullanıcı normal şekilde bilmez; fakat kimlerin managed password retrieve edebildiği kontrol edilmelidir.
Get-ADServiceAccount -Filter * `
-Properties PrincipalsAllowedToRetrieveManagedPassword |
Select Name,PrincipalsAllowedToRetrieveManagedPassword
Ayrılan kullanıcı veya kontrol ettiği grup listede bulunmuyor.
17. Non-AD secret’ları rotate et
API keys
application secrets
SSH keys
automation credentials
PowerShell stored credentials
DevOps secrets
password vault entries
certificates/private keys
değerlendirilir.
18. Backup / virtualization / storage / network credential’larını değiştir
Özellikle:
Veeam / Commvault / Rubrik / Cohesity
VMware vCenter / ESXi
Hyper-V / SCVMM
SAN/storage
firewall
switch/router
load balancer
DNS/IPAM
yönetim credential’ları kontrol edilir.
C. Active Directory Privilege Kontrolleri
19. Built-in privileged grupların tamamını audit et
$Groups = @(
“Domain Admins”,
“Enterprise Admins”,
“Schema Admins”,
“Administrators”,
“DNSAdmins”,
“Group Policy Creator Owners”,
“Backup Operators”,
“Server Operators”,
“Account Operators”
)
foreach ($G in $Groups) {
try {
Get-ADGroupMember $G -Recursive |
Select @{N=”Group”;E={$G}},Name,SamAccountName,ObjectClass
} catch {}
}
- Beklenmeyen hesap kontrol edilir.
20. Custom Tier-0 grupları kontrol et
Örneğin:
AD Admins
Infrastructure Admins
Server Admins
PKI Admins
Virtualization Admins
Backup Admins
IAM Admins
Custom privileged group’lar incelenir.
Ayrılan kişinin doğrudan/nested üyelikleri kaldırılır. (varsa)
21. adminCount=1 hesaplarını incele
Get-ADUser -LDAPFilter “(adminCount=1)” `
-Properties adminCount,Enabled,LastLogonDate |
Select Name,SamAccountName,Enabled,LastLogonDate
Not: adminCount=1, hesabın halen Domain Admin olduğu anlamına gelmez. Geçmişte protected group üyesi olmuş hesaplarda kalabilir.
Liste gerçek privileged membership ile karşılaştırılır.
22. AdminSDHolder ACL’ini kontrol et
$DN = (Get-ADDomain).DistinguishedName
$AdminSDHolder = “CN=AdminSDHolder,CN=System,$DN”
(Get-Acl “AD:\$AdminSDHolder”).Access |
Format-Table IdentityReference,ActiveDirectoryRights,AccessControlType,IsInherited
Özellikle:
- GenericAll
- GenericWrite
- WriteDACL
- WriteOwner
- ExtendedRight
hakları incelenmelidir.
23. Domain Root ACL’ini kontrol et
$DN = (Get-ADDomain).DistinguishedName
(Get-Acl “AD:\$DN”).Access |
Format-Table IdentityReference,ActiveDirectoryRights,AccessControlType,IsInherited
Ayrılan kullanıcı SID’si kontrol edilir.
Bilinmeyen privileged trustee kontrol edilir.
24. OU delegation ACL’lerini tarat
Get-ADOrganizationalUnit -Filter * | ForEach-Object {
$OU = $_
(Get-Acl “AD:\$($OU.DistinguishedName)”).Access |
Select @{N=”OU”;E={$OU.DistinguishedName}},
IdentityReference,
ActiveDirectoryRights,
AccessControlType,
IsInherited
}
Özellikle:
- GenericAll
- WriteDACL
- WriteOwner
- CreateChild
- DeleteChild
- Reset Password
- WriteProperty
haklarına bakılmalıdır.
25. GPO permission’larını kontrol et
Import-Module GroupPolicy
Get-GPO -All | ForEach-Object {
$GPO = $_
Get-GPPermission -Guid $GPO.Id -All |
Select @{N=”GPO”;E={$GPO.DisplayName}},
Trustee,
Permission
}
26. DNS administrative privilege’lerini kontrol et
Get-ADGroupMember “DNSAdmins” -Recursive
Ayrıca:
DNSAdmins üyeliği
DNS server management
AD-integrated DNS zone ACL
DNS server configuration
kontrol edilir.
27. AD CS / PKI yetkilerini kontrol et
CA Administrators
Certificate Managers
Certificate Template ACL
Enrollment Agent
Autoenrollment rights
private key access
kontrol edilir.
Varsa ayrılan kişiye ait authentication sertifikaları revoke edilmelidir.
28. Trust değişikliklerini kontrol et
Get-ADTrust -Filter * |
Select Name,Direction,TrustType,ForestTransitive,SelectiveAuthentication
Beklenmeyen yeni trust yok.
Trust özelliklerinde şüpheli değişiklik yok.
29. Kerberos delegation yapılandırmalarını kontrol et
Unconstrained Delegation
Get-ADComputer -Filter {TrustedForDelegation -eq $true} `
-Properties TrustedForDelegation |
Select Name,TrustedForDelegation
Constrained Delegation
Get-ADObject `
-LDAPFilter “(msDS-AllowedToDelegateTo=*)” `
-Properties msDS-AllowedToDelegateTo |
Select Name,ObjectClass,msDS-AllowedToDelegateTo
Beklenmeyen delegation bulunmadı.
30. RBCD kontrolü yap
Get-ADObject `
-LDAPFilter “(msDS-AllowedToActOnBehalfOfOtherIdentity=*)” `
-Properties msDS-AllowedToActOnBehalfOfOtherIdentity |
Select Name,ObjectClass,DistinguishedName,
msDS-AllowedToActOnBehalfOfOtherIdentity
Beklenmeyen RBCD tanımı bulunmadı.
D. AD Persistence Kontrolleri
31. Shadow Credentials kontrolü yap
Get-ADObject `
-LDAPFilter “(msDS-KeyCredentialLink=*)” `
-Properties msDS-KeyCredentialLink |
Select Name,ObjectClass,DistinguishedName,msDS-KeyCredentialLink
Özellikle:
Domain Admin hesapları
Enterprise Admin hesapları
Tier-0 service accounts
DC computer accounts
incelenmelidir.
Beklenmeyen msDS-KeyCredentialLink bulunmadı.
32. SIDHistory kontrolü yap
Get-ADUser -Filter * -Properties SIDHistory |
Where-Object {$_.SIDHistory.Count -gt 0} |
Select SamAccountName,SID,SIDHistory
Beklenmeyen SIDHistory kontrol edilir.
33. User account SPN’lerini kontrol et
Get-ADUser -Filter * -Properties ServicePrincipalName |
Where-Object {$_.ServicePrincipalName.Count -gt 0} |
Select SamAccountName,Enabled,ServicePrincipalName
Beklenmeyen SPN atanmış kullanıcı kontrol edilir.
34. Son dönemde oluşturulmuş kullanıcıları incele
$Since = (Get-Date).AddDays(-90)
Get-ADUser -Filter * -Properties whenCreated,Created,Enabled |
Where-Object {$_.whenCreated -ge $Since} |
Sort whenCreated -Descending |
Select Name,SamAccountName,Enabled,whenCreated
Şüpheli kullanıcı hesabı kontrol edilir.
35. Son dönemde oluşturulan group’ları incele
Get-ADGroup -Filter * -Properties whenCreated |
Where-Object {$_.whenCreated -ge $Since} |
Sort whenCreated -Descending |
Select Name,GroupScope,GroupCategory,whenCreated
Şüpheli privileged group kontrol edilir.
36. Son dönemde oluşturulan computer account’ları incele
Get-ADComputer -Filter * -Properties whenCreated,Enabled |
Where-Object {$_.whenCreated -ge $Since} |
Sort whenCreated -Descending |
Select Name,Enabled,whenCreated
Beklenmeyen computer account kontrol edilir.
37. Domain Controller Scheduled Task’lerini kontrol et
Get-ScheduledTask |
Select TaskPath,TaskName,State,
@{N=”RunAs”;E={$_.Principal.UserId}}
Özellikle:
- PowerShell
- cmd
- script
- UNC path
- unusual account
ile çalışan görevler incelenmelidir.
38. Domain Controller servislerini kontrol et
Get-CimInstance Win32_Service |
Select Name,DisplayName,State,StartMode,StartName,PathName |
Sort StartName
Şüpheli service account bulunmadı.
Şüpheli executable/script path bulunmadı.
39. SYSVOL ve NETLOGON değişikliklerini kontrol et
Get-ChildItem “\\domain.local\SYSVOL” -Recurse -File |
Sort LastWriteTime -Descending |
Select FullName,Length,LastWriteTime -First 200
Aynı kontrol:
üzerinde de yapılmalıdır.
Özellikle:
- .ps1
- .bat
- .cmd
- .vbs
- .exe
- .dll
- .xml
dosyaları incelenmelidir.
40. GPO içeriğinde persistence kontrolü yap
Kontrol edilecek alanlar:
- Startup Scripts
- Shutdown Scripts
- Logon Scripts
- Logoff Scripts
- Scheduled Tasks
- Services
- Registry
- Local Users and Groups
- Restricted Groups
- User Rights Assignment
- PowerShell scripts
GPO raporu:
Get-GPOReport -All -ReportType Html `
-Path C:\Audit\All-GPO-Report.html
E. Security Log / Forensic Kontroller
41. Ayrılan hesabın son logon aktivitelerini incele
Özellikle:
4624 – Successful logon
4625 – Failed logon
4648 – Logon using explicit credentials
4672 – Special privileges assigned
Örnek:
$Since = (Get-Date).AddDays(-30)
Get-WinEvent -FilterHashtable @{
LogName = ‘Security’
ID = 4624,4648,4672
StartTime = $Since
}
Ayrılış sonrası authentication aktivitesi kontrol edilir.
42. User account management event’lerini incele
Özellikle:
4720 – User created
4722 – User enabled
4723 – Password change attempted
4724 – Password reset
4725 – User disabled
4726 – User deleted
4738 – User changed
Ayrılan administrator’ın gerçekleştirdiği şüpheli hesap değişikliği kontrol edilir.
43. Privileged group membership event’lerini incele
Kontrol:
4728 – Member added to global security group
4729 – Member removed
4732 – Member added to local security group
4733 – Member removed
4756 – Member added to universal security group
4757 – Member removed
Get-WinEvent -FilterHashtable @{
LogName = “Security”
ID = 4728,4729,4732,4733,4756,4757
StartTime = $Since
}
Şüpheli privileged group membership değişikliği bulunmadı.
44. Active Directory object modification event’lerini incele
Özellikle:
5136 – Directory Service Object Modified
Kontrol edilmesi gereken attribute’lar arasında:
- nTSecurityDescriptor
- member
- servicePrincipalName
- msDS-KeyCredentialLink
- msDS-AllowedToDelegateTo
- msDS-AllowedToActOnBehalfOfOtherIdentity
- userAccountControl
bulunur.
- Şüpheli 5136 değişikliği bulunmadı.
45. Object creation / movement / deletion event’lerini incele
5137 – Directory Service Object Created
5139 – Directory Service Object Moved
5141 – Directory Service Object Deleted
Ayrılan admin tarafından oluşturulan şüpheli obje kontrol edilir.
46. Scheduled Task / Service creation event’lerini incele
Özellikle:
4698 – Scheduled Task created
4699 – Scheduled Task deleted
4702 – Scheduled Task updated
7045 – Service installed
DC/Tier-0 sistemlerde şüpheli task/service creation kontrol edilir.
47. Certificate Services aktivitelerini incele
AD CS kullanılıyorsa:
Son dönemde issued authentication certificate’ları kontrol edildi.
Enrollment Agent aktiviteleri kontrol edildi.
Ayrılan administrator’a verilen sertifikalar belirlendi.
Gerekli sertifikalar revoke edildi.
Template ACL değişiklikleri incelendi.
Certificate Services auditing aktifse ilgili CA audit event’leri SIEM üzerinden incelenmelidir.
F. Hybrid / Cloud ve Tier-0 Sistemleri
48. Entra / PIM / Cloud audit gerçekleştir
Kontrol:
- Sign-in logs
- Audit logs
- Role assignment
- PIM eligible assignment
- PIM activation
- Conditional Access changes
- Authentication method changes
- Enterprise application changes
- App registration secrets
- Service principal permissions
- Ayrılış öncesi şüpheli cloud privilege değişikliği bulunmadı.
- Ayrılış sonrasında login yok.
49. Defender for Identity / SIEM üzerinde geçmiş aktiviteyi araştır
Tercihen son:
30–90 gün
incelenmelidir.
Aranacak göstergeler:
- privilege escalation
- lateral movement
- DC access
- DCSync benzeri davranış
- credential reconnaissance
- abnormal LDAP queries
- suspicious replication requests
- unusual service creation
- new admin accounts
- security group changes
- Ayrılan hesabın SID’si SIEM’de aratıldı.
- Admin hesabı UPN/SamAccountName aratıldı.
- Kullanılan PAW/jump server IP’leri incelendi.
- Kritik alert bulunmadı veya investigation tamamlandı.
G. Kapanış ve Compromise Kararı
50. Final security closure gerçekleştir
Aşağıdakiler tamamlanmadan offboarding ticket kapatılmamalıdır:
AD accounts disabled.
Privileged memberships removed.
Nested memberships checked.
Entra sessions revoked.
VPN/PAM access removed.
Shared credentials rotated.
DSRM evaluated.
LAPS passwords evaluated/rotated.
Service account credentials reviewed.
Backup/virtualization credentials reviewed.
Domain ACL reviewed.
OU delegation reviewed.
AdminSDHolder reviewed.
GPO permissions reviewed.AD CS reviewed.
Kerberos delegation reviewed.
RBCD reviewed.
Shadow Credentials reviewed.
SIDHistory reviewed.
SYSVOL reviewed.
Scheduled Tasks reviewed.
Services reviewed.
Security logs reviewed.
SIEM/MDI investigation completed.
Evidence archived.
Security owner approval obtained.
Compromise / Golden Ticket şüphesi varsa
Şunlardan biri varsa farklı değerlendirilir:
Domain Controller compromise
NTDS.dit erişimi/çalınması
DCSync abuse
krbtgt hash exposure
Golden Ticket bulgusu
Domain Admin credential compromise ile DC tam kontrolü
incident response ekibinin domain compromise kararı
Bu durumda kontrollü bir krbtgt** double-reset** prosedürü uygulanabilir.
KRBTGT Reset #1
Replication tamamen tamamlanmalıdır.
repadmin /replsummary
repadmin /showrepl *
Bekleme
Minimum bekleme süresi:
Ortamdaki Maximum lifetime for user/service ticket değerinden daha uzun olmalıdır.
Microsoft default Kerberos ticket lifetime için 10 saat üzerinden prosedürü tarif eder.
KRBTGT Reset #2
İkinci reset yapılır ve tekrar tüm DC’lere replication doğrulanır.
Bu işlem normal offboarding prosedürünün parçası değildir; incident-response işlemidir.
Önerilen Risk Sınıflandırması
| Durum | Seviye | Yapılacak İşlem |
| Planlı ve güvenilir ayrılış | LOW | Standart Tier-0 offboarding |
| Beklenmedik ayrılış | MEDIUM | Offboarding + 30 günlük audit |
| Anlaşmazlıklı/hostile ayrılış | HIGH | Offboarding + 90 günlük compromise assessment |
| Credential theft şüphesi | CRITICAL | Incident Response |
| DC compromise şüphesi | CRITICAL | Forest compromise prosedürü |
| NTDS.dit / krbtgt hash exposure | CRITICAL | KRBTGT double-reset + IR |
Offboarding Sonrası AD Health Check
Değişiklikler tamamlandıktan sonra:
dcdiag /e /c /v
repadmin /replsummary
repadmin /showrepl *
Get-ADReplicationFailure -Target * -Scope Forest
Get-ADDomainController -Filter * |
Select HostName,Site,IPv4Address,OperatingSystem