펜테스터를 위한 Impacket: 비밀번호 변경 기법
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
이 기사에서는 Impacket 도구를 사용하여 Active Directory 구성 오류가 사용자 비밀번호를 강제로 재설정할 수 있도록 하는 방법을 설명합니다. 이 기사에서는 impacket-changepasswd 유틸리티가 계정 탈취를 가능하게 하기 위해 Reset Password ACE를 활용할 수 있는 방법에 중점을 둡니다. 이 기술은 SMB-SAMR, RPC-SAMR, LDAP, Kerberos를 포함한 여러 프로토콜을 지원합니다.
조사
이 보고서는 한 사용자가 다른 계정 객체에 대해 Reset Password 권한을 부여받은 실험실 시나리오를 제시합니다. 보고서는 평문 자격 증명, 해시 전달, 키 전달, Kerberos TGT 캐시 사용을 포함한 여러 인증 방법을 통해 다양한 프로토콜에서 계정 비밀번호를 조작합니다.
완화
방어자는 BloodHound와 같은 도구를 사용하여 Active Directory ACL을 정기적으로 감사하여 과도하게 허용된 Reset Password 권한을 식별해야 합니다. 계층화된 관리 모델을 적용하고 Protected Users 보안 그룹을 사용하는 것도 노출을 크게 줄일 수 있습니다. LDAP 서명 강제 및 Credential Guard 배포도 권장됩니다.
대응
의심스러운 활동이 감지되면 보안 팀은 Windows 이벤트 ID 4723, 4724, 4738, 4771, 및 5136을 조사해야 합니다. 분석가는 비밀번호 재설정이 승인되었는지 확인하고 고유한 SAMR 트래픽이나 LDAP 디렉터리 변경 사항이 있는지 환경을 검토해야 합니다. 즉각적인 조치에는 영향을 받은 계정의 권한 감사를 포함하고 잠재적으로 손상된 관리자 사용자의 자격 증명을 회전하는 것이 포함되어야 합니다.
공격 흐름
우리는 이 부분을 여전히 업데이트 중입니다. 알림을 받으려면 등록하세요
알림 받기모의 실행
전제 조건: Telemetry & Baseline Pre-flight Check가 통과되었어야 합니다.
이유: 이 섹션은 탐지 규칙을 유도하기 위해 설계된 적대자 기술(TTP)의 정밀한 실행을 자세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 논리에 의해 기대되는 정확한 원격 측정을 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련이 없는 예제는 오진을 초래할 것입니다.
-
공격 서사 & 명령: 적대자는 위임된 권한으로 사용자 계정을 성공적으로 손상했거나 도메인 관리자로 권한을 상승시켰습니다. 지속성을 장기적으로 확보하고 이후 단계에서 탐지를 피하기 위해, 공격자는 알려진 서비스 계정의 비밀번호를 재설정하기로 결정합니다. 기본 PowerShell 도구를 사용하여 (
Set-ADAccountPasswordornet user), 공격자는Service_SVC의 비밀번호를 변경하려고 시도합니다. 이 행동은 루틴 관리 작업에 녹아들도록 설계된 고전적인 “Living off the Land” 기술이며, 탐지 규칙이 잡도록 설계된 특정 Windows 보안 이벤트 ID (4724/4738)를 트리거합니다. -
회귀 테스트 스크립트:
# 모의 스크립트: PowerShell을 통한 비밀번호 재설정 # 참고: 이는 적절한 권한을 가진 제어된 실험실 환경에서 실행되어야 합니다. $TargetUser = "Service_SVC" Write-Host "[*] 대상 사용자가 존재하는지 확인..." -ForegroundColor Cyan if (Get-ADUser -Filter "SamAccountName -eq '$TargetUser'") { Write-Host "[+] 대상 사용자 $TargetUser 를 찾았습니다. 비밀번호 재설정 모의 진행 중..." -ForegroundColor Green # 이벤트 ID 4724 / 4738 생성 try { $NewPassword = ConvertTo-SecureString "SimulatedPass123!" -AsPlainText -Force Set-ADAccountPassword -Identity $TargetUser -NewPassword $NewPassword Write-Host "[+] 성공: 비밀번호 재설정이 트리거되었습니다. 보안 로그에서 이벤트 ID 4724/4738을 확인하세요." -ForegroundColor Green } catch { Write-Host "[-] 오류: 비밀번호를 재설정하지 못했습니다. 관리자/인가된 사용자로 실행 중인지 확인하십시오." -ForegroundColor Red Write-Error $_ } } else { Write-Host "[-] 오류: 대상 사용자 $TargetUser 를 찾을 수 없습니다. 먼저 사용자를 생성하십시오." -ForegroundColor Red } -
정리 명령:
# 정리 스크립트: 원래 상태 복원 $TargetUser = "Service_SVC" $OriginalPassword = ConvertTo-SecureString "Original_Safe_Pass_2025!" -AsPlainText -Force Write-Host "[*] $TargetUser 의 원래 비밀번호를 복원 중..." -ForegroundColor Cyan Set-ADAccountPassword -Identity $TargetUser -NewPassword $OriginalPassword Write-Host "[+] 정리 완료." -ForegroundColor Green