Data/Locales/checks/ko/ADTradecraftChecks.json

{
  "_family": "ADTradecraftChecks.json",
  "ADTRADE-001": {
    "name": { "value": "SYSVOL의 Group Policy Preferences cpassword 잔여물", "status": "machine-draft" },
    "description": { "value": "2008년부터 2014년 5월까지 Group Policy Preferences는 관리자가 'cpassword' 필드를 사용하여 예약된 작업, 로컬 사용자 암호, 매핑된 드라이브 및 서비스를 푸시할 수 있게 했습니다. 이 필드는 Microsoft가 공개적으로 문서화한 AES-256 키로 암호화되었습니다. MS14-025의 수정은 새로운 기본 설정에서 cpassword 필드를 비활성화했지만 SYSVOL의 기존 항목은 그대로 두었습니다. 모든 레드팀 활동은 여전히 이것들을 발견합니다. 인증된 도메인 사용자라면 누구나 SYSVOL을 읽고 cpassword를 획득하여 오프라인에서 해독할 수 있습니다. 여기서 무언가를 발견하면 노출된 모든 자격 증명을 침해된 것으로 취급하고 교체합니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "\\\\domain\\SYSVOL\\domain\\Policies\\**\\*.xml 아래 어디에도 cpassword 특성이 없음.", "status": "machine-draft" },
    "remediationSteps": { "value": "SYSVOL 스캔: Get-ChildItem -Path \\\\<domain>\\SYSVOL\\<domain>\\Policies -Recurse -Include *.xml | Select-String 'cpassword'. 각 일치 항목에 대해: (1) 자격 증명이 노출된 계정의 암호를 교체하고(사용자 이름은 동일한 XML에 있음), (2) 기본 설정이 생성된 이후 해당 자격 증명 사용에 대한 로그를 감사하고, (3) 새 자격 증명이 준비되면 GPP 기본 설정을 삭제합니다. Microsoft의 KB2962486에 정리 지침이 있습니다.", "status": "machine-draft" }
  },
  "ADTRADE-002": {
    "name": { "value": "DCShadow 지표(불량 Configuration 파티션 서버)", "status": "machine-draft" },
    "description": { "value": "DCShadow(Vincent LE TOUX / Benjamin Delpy, BlueHat IL 2018)는 CN=Sites,CN=Configuration 아래에 nTDSDSA + server 개체를 작성하여 공격자가 제어하는 호스트를 도메인 컨트롤러로 등록합니다. 이 가짜 DC는 실제 DC가 되지 않고도 악성 복제 데이터(SID history, 암호 해시)를 삽입하는 데 사용됩니다. 참고: 오래된 도메인에서 일치하지 않는 server 개체는 실제 DCShadow 공격보다는 'ntdsutil metadata cleanup' 없이 제거된 DC의 잔여 DC 메타데이터인 경우가 훨씬 많으므로, 이는 Critical이 아니라 High로 평가됩니다. whenCreated 타임스탬프를 조사하여 최근에 생성된(의심스러운) 개체와 오래된 잔여 메타데이터를 구별합니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "CN=Sites,CN=Configuration 아래의 모든 server 개체가 실제로 인벤토리에 있는 도메인 컨트롤러에 해당함. 알려진 DC와 일치하지 않는 최근 생성된 server 개체 없음.", "status": "machine-draft" },
    "remediationSteps": { "value": "열거: Get-ADObject -Filter {objectClass -eq 'server'} -SearchBase \"CN=Sites,$((Get-ADRootDSE).configurationNamingContext)\" -Properties whenCreated, dNSHostName | Sort whenCreated. DC 인벤토리(Get-ADDomainController -Filter *)와 상호 참조합니다. 실제 DC와 일치하지 않는 server 개체, 특히 최근에 생성된 것은 즉각적인 사고 대응이 필요합니다. DCShadow는 도메인 탈취급 프리미티브입니다. 탐지 시점 신호로 스키마 컨테이너의 5137 / 5141 이벤트를 모니터링합니다.", "status": "machine-draft" }
  },
  "ADTRADE-003": {
    "name": { "value": "오래된 BitLocker 복구 키", "status": "machine-draft" },
    "description": { "value": "BitLocker 복구 키는 이를 백업한 컴퓨터의 msFVE-RecoveryInformation 하위 개체로 AD에 저장됩니다. 컴퓨터가 폐기되었지만 AD 개체가 남겨지면, 복구 키는 BitLocker 복구 권한을 가진 누구나(일반적으로 'Tier-0'보다 넓은 그룹) 쿼리할 수 있는 상태로 남습니다. 오래된 키는 폐기된 드라이브가 리퍼비셔 또는 쓰레기통에서 복구될 경우 해독 가능함을 의미합니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "모든 msFVE-RecoveryInformation 개체가 지난 90일 동안 활성 상태인 컴퓨터에 속함. 비활성화되었거나 최근에 수정된 후 오래된 컴퓨터 계정에 고아로 남은 키 없음.", "status": "machine-draft" },
    "remediationSteps": { "value": "복구 정보 열거: Get-ADObject -Filter {objectClass -eq 'msFVE-RecoveryInformation'} -Properties whenCreated. 각각에 대해 상위 컴퓨터 개체까지 올라가 lastLogonTimestamp / Enabled를 확인합니다. 90일 이상 비활성인 컴퓨터의 경우: 드라이브가 지워지거나 파괴되었는지 확인한 다음 AD 컴퓨터 개체를 삭제합니다(복구 정보를 연쇄적으로 삭제함). 적극적으로 사용 중이지만 매우 오래된 복구 키를 가진 컴퓨터의 경우: Backup-BitLockerKeyProtector를 통해 교체합니다. BitLocker 복구 그룹의 멤버십이 엄격한지 확인합니다.", "status": "machine-draft" }
  },
  "ADTRADE-004": {
    "name": { "value": "RODC 암호 복제 정책 위생", "status": "machine-draft" },
    "description": { "value": "읽기 전용 도메인 컨트롤러는 암호 복제 정책(PRP)에 나열된 주체의 암호를 캐시합니다. Tier-0 계정(Domain Admin, Enterprise Admin, krbtgt)이 RODC의 PRP로 직접 또는 그룹 중첩을 통해 접근 가능하면, RODC를 침해하면 해당 계정도 침해됩니다. 기본 'Denied RODC Password Replication Group'에는 DA / EA / SA / Schema Admins / krbtgt가 명시적으로 포함되어야 합니다; 일부 환경은 정책을 사용자 지정하고 실수로 이러한 거부를 제거합니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "도메인의 모든 RODC가 Domain Admins, Enterprise Admins, Schema Admins, krbtgt 및 Account Operators가 거부 측의 멤버인 암호 복제 정책을 가짐. 높은 권한 계정이 허용 측의 멤버가 아님.", "status": "machine-draft" },
    "remediationSteps": { "value": "각 RODC에 대해: Get-ADDomainController -Filter {IsReadOnly -eq $true} | ForEach-Object { Get-ADDomainControllerPasswordReplicationPolicy -Identity $_ -Allowed; Get-ADDomainControllerPasswordReplicationPolicy -Identity $_ -Denied }. 거부 목록에 내장된 'Denied RODC Password Replication Group'이 포함되어 있는지 확인합니다. 환경에 RODC가 없으면 이 검사는 해당 없음(N/A)이며 PASS입니다. Microsoft의 RODC 계획 가이드에 표준 PRP 템플릿이 있습니다.", "status": "machine-draft" }
  },
  "ADTRADE-005": {
    "name": { "value": "Entra 원활한 SSO 컴퓨터 계정(AZUREADSSOACC$) 키 교체", "status": "machine-draft" },
    "description": { "value": "하이브리드 ID에 대해 Entra(Azure AD) 원활한 Single Sign-On이 활성화되면 AD는 AZUREADSSOACC$라는 컴퓨터 계정을 생성합니다. 그 암호는 Entra가 SSO 티켓을 검증하는 데 사용하는 공유 Kerberos 키입니다. Microsoft는 이 키가 자동으로 교체되지 않으며 관리자가 롤링해야 한다고 문서화합니다. 공격자가 AZUREADSSOACC$ 키를 추출하면(DCSync 또는 DC에서 읽을 수 있는 일반 NT 해시), Azure AD 서비스에 대한 Kerberos Silver Ticket을 위조하여 추가 상호 작용 없이 키가 유효한 동안 동기화된 모든 하이브리드 사용자로 인증할 수 있습니다. 90일 넘게 교체되지 않은 키는 그 창을 극적으로 넓힙니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "AZUREADSSOACC$ Kerberos 키가 최소 90일마다 교체됨(교체마다 두 번 롤링하여 이전 키를 무효화).", "status": "machine-draft" },
    "remediationSteps": { "value": "Entra Connect / Azure AD 모듈이 있는 머신에서 원활한 SSO 키를 교체합니다: Import-Module 'C:\\Program Files\\Microsoft Azure Active Directory Connect\\AzureADSSO.psd1'; New-AzureADSSOAuthenticationContext; Update-AzureADSSOForest. 교체를 두 번 수행하고(계정은 현재 + 이전 키를 저장함) 정기적으로 예약합니다. 원활한 SSO를 더 이상 사용하지 않으면 비활성화하고 AZUREADSSOACC$ 개체를 삭제합니다.", "status": "machine-draft" }
  },
  "ADTRADE-006": {
    "name": { "value": "권한 있는 주체의 Shadow Credentials(msDS-KeyCredentialLink)", "status": "machine-draft" },
    "description": { "value": "msDS-KeyCredentialLink 특성은 비즈니스용 Windows Hello / 암호 없는 PKINIT 로그온에 사용되는 공개 키를 보유합니다. 대상에 대해 이 특성에 쓰기 액세스 권한을 가진 공격자는 자신의 키 쌍(Whisker / pyWhisker)을 추가한 다음 일치하는 개인 키를 사용하여 해당 계정으로 Kerberos TGT를 요청할 수 있습니다. 이는 'shadow credentials'로 알려진 은밀한 지속성 및 사칭 기법입니다. Tier-0 개체(도메인 관리자, 도메인 컨트롤러 또는 adminCount=1 계정)의 예기치 않은 키 자격 증명은 정당한 WHfB 등록으로 입증될 때까지 잠재적 백도어로 취급해야 합니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "권한 있는/Tier-0 주체에 인식되지 않는 msDS-KeyCredentialLink 값 없음; 모든 키가 알려진 WHfB/암호 없는 등록에 매핑됨.", "status": "machine-draft" },
    "remediationSteps": { "value": "표시된 각 주체에 대해 키 자격 증명을 검사하고(Get-ADObject -Properties msDS-KeyCredentialLink 또는 DSInternals Get-ADKeyCredential cmdlet) 각 장치 키를 정당한 비즈니스용 Windows Hello 등록과 연관시킵니다. 승인된 등록으로 귀속할 수 없는 항목을 제거합니다. msDS-KeyCredentialLink에 쓸 수 있는 대상을 제한합니다(Key Admins / Enterprise Key Admins 및 해당 쓰기를 부여하는 OU/개체 DACL 감사). 침해가 의심되면 영향을 받는 계정을 재설정합니다.", "status": "machine-draft" }
  },
  "ADTRADE-007": {
    "name": { "value": "BadSuccessor dMSA 마이그레이션 권한 상승 표면", "status": "machine-draft" },
    "description": { "value": "Windows Server 2025는 마이그레이션 기능이 있는 위임된 관리 서비스 계정(dMSA, 개체 클래스 msDS-DelegatedManagedServiceAccount)을 도입했습니다: dMSA는 기존 계정을 대체하는 것으로 표시될 수 있으며, 이후 해당 계정의 권한과 Kerberos 키를 상속합니다. 2024년 공개된 'BadSuccessor' 기법은 이를 악용합니다: OU에서 dMSA를 생성하기만 할 수 있는 주체(dMSA 클래스에 대한 CreateChild 또는 OU에 대한 광범위한 쓰기/GenericAll)는 dMSA를 생성하고 권한 있는 계정을 가리키게 하여 그 키를 상속함으로써, 해당 계정에 대한 권한을 직접 보유하지 않고도 그 계정으로 상승할 수 있습니다. 이 검사는 Tier-0가 아닌 주체가 그 기능을 보유한 OU를 인벤토리에 포함합니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "Tier-0가 아닌 주체가 어떤 OU에서도 위임된 MSA(msDS-DelegatedManagedServiceAccount)를 생성하거나 쓸 수 없음.", "status": "machine-draft" },
    "remediationSteps": { "value": "표시된 각 OU에서 비관리 주체로부터 CreateChild(msDS-DelegatedManagedServiceAccount 클래스에 대한), GenericAll, WriteDacl 및 WriteOwner를 제거합니다. 위임된 OU 권한을 광범위하게 감사합니다: BadSuccessor를 가능하게 하는 동일한 ACE는 다른 개체 생성 악용도 가능하게 합니다. 패치/완화될 때까지 msDS-DelegatedManagedServiceAccount 개체 생성(4662/5137 이벤트)을 모니터링합니다. 이 검사는 스키마가 Server 2025 이전인 포리스트에서는 건너뜁니다(SKIP).", "status": "machine-draft" }
  },
  "ADTRADE-008": {
    "name": { "value": "Key Admins / Enterprise Key Admins 그룹 멤버십", "status": "machine-draft" },
    "description": { "value": "Key Admins(도메인 RID 526) 및 Enterprise Key Admins(RID 527) 그룹은 도메인/포리스트 전체에서 msDS-KeyCredentialLink 특성에 쓸 수 있는 권한을 부여받습니다. 이는 모든 멤버를 도메인 전체 shadow-credential 프리미티브로 만듭니다: 멤버는 모든 계정에 키 자격 증명을 심고 PKINIT를 통해 그 계정으로 인증할 수 있습니다. 이 그룹들은 비어 있는 상태로 배포되며 특정 비즈니스용 Windows Hello 키 프로비저닝 워크플로가 명백히 필요로 하지 않는 한 비어 있어야 합니다. 모든 멤버는 정당화되어야 하는 권한 상승 경로입니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "Key Admins 및 Enterprise Key Admins 그룹이 비어 있음(상시 멤버 없음).", "status": "machine-draft" },
    "remediationSteps": { "value": "Key Admins 및 Enterprise Key Admins의 모든 멤버를 검토합니다. 비즈니스용 Windows Hello 키를 프로비저닝할 문서화되고 지속적인 필요가 없는 계정을 제거합니다. WHfB 키 프로비저닝에 위임된 권한이 필요한 경우, 이러한 도메인 전체 그룹의 멤버십 대신 가능한 한 좁은 권한을 가진 전용 서비스 계정으로 범위를 지정합니다. 예기치 않은 멤버를 잠재적 지속성 메커니즘으로 취급합니다.", "status": "machine-draft" }
  },
  "ADTRADE-009": {
    "name": { "value": "Cert Publishers 그룹 멤버십", "status": "machine-draft" },
    "description": { "value": "Cert Publishers 그룹(도메인 RID 517)의 멤버는 NTAuth 저장소와 사용자/컴퓨터 개체에 인증서를 게시할 수 있습니다. 기본적으로 이 그룹에는 Enterprise CA 컴퓨터 계정만 포함됩니다. 이 그룹에 배치된 사용자 또는 서비스 계정은 어떤 인증서가 인증에 신뢰되는지에 영향을 미칠 수 있는 능력을 얻으며, 이는 여러 AD CS 권한 상승 경로(ESC 계열 공격)의 발판이 되고 인증서 기반 사칭을 가능하게 할 수 있습니다. 컴퓨터 계정 멤버십(CA 호스트 자체)은 예상되는 것입니다; 컴퓨터가 아닌 멤버는 발견 사항입니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "Cert Publishers에 Enterprise CA 컴퓨터 계정만 포함됨: 사용자 또는 서비스 계정 없음.", "status": "machine-draft" },
    "remediationSteps": { "value": "Cert Publishers 그룹에서 사용자 또는 서비스 계정을 제거합니다; Enterprise CA 컴퓨터 계정만 그곳에 속합니다. NTAuth 저장소 내용(certutil -viewstore -enterprise NTAuth)에서 예기치 않은 CA 인증서를 검토합니다. AD CS를 광범위하게 강화합니다: 인증서 템플릿 등록 권한과 ESC1-ESC8 잘못된 구성 표면을 감사합니다.", "status": "machine-draft" }
  },
  "ADTRADE-010": {
    "name": { "value": "그룹 관리 서비스 계정(gMSA) 태세 및 암호 노출", "status": "machine-draft" },
    "description": { "value": "그룹 관리 서비스 계정(gMSA)은 AD가 자동으로 생성하고 교체하는 240비트 암호를 보유하여, 약한 서비스 계정 암호의 Kerberoasting과 수동 교체 노동을 제거합니다. 두 가지 태세 우려 사항: (1) gMSA가 서비스 ID에 실제로 사용되는지 여부, 그리고 (2) msDS-GroupMSAMembership 보안 설명자(PrincipalsAllowedToRetrieveManagedPassword)로 제어되는, 관리 암호를 검색할 권한이 있는 대상. 해당 설명자가 광범위한 주체(Everyone, Authenticated Users, Domain Users) 또는 비권한 주체에게 권한을 부여하면, 그 주체는 평문 gMSA 암호를 복구하여(예: GMSAPasswordReader) 서비스를 완전히 사칭할 수 있습니다.", "status": "machine-draft" },
    "recommendedValue": { "value": "서비스 ID가 gMSA로 실행됨; msDS-GroupMSAMembership이 서비스를 실행해야 하는 특정 호스트로만 범위가 지정됨(광범위하거나 비권한 주체 없음).", "status": "machine-draft" },
    "remediationSteps": { "value": "각 gMSA에 대해 PrincipalsAllowedToRetrieveManagedPassword를 서비스를 실행하는 정확한 컴퓨터 계정(또는 엄격하게 범위가 지정된 그룹)으로 설정합니다: Set-ADServiceAccount -Identity <gmsa> -PrincipalsAllowedToRetrieveManagedPassword <hosts>. 해당 목록에서 Everyone / Authenticated Users / Domain Users를 제거합니다. 서비스 계정이 여전히 정적 사용자 계정 암호를 사용하는 경우, 자동 교체와 Kerberoasting 저항성을 얻기 위해 gMSA로 마이그레이션합니다.", "status": "machine-draft" }
  }
}