Table of Contents
ToggleActive Directory USN 추적: 동기화 갭 분석 가이드
⚠️
배경
Oracle OID와 Active Directory(AD) 연동 중 "Last Applied Change Number"(LACN)와 AD의 실제 USN 간 불일치가 발생했습니다.
- LACN(동기화 쪽)과 AD USN(원본 쪽)에 수백만 건 규모의 갭 발견
- 2022~2025년 사이 3년간의 변동 내역 미적용으로 사용자 계정 정보 불일치
- 서비스 정상화를 위한 긴급 대응 필요
1. USN과 오브젝트 메타데이터
USN(Update Sequence Number)
AD가 변경 이력을 기록하고 복제 대상 변경점을 관리하는 일련번호입니다.
▶주요 특징
- uSNCreated: 오브젝트 생성 시점 추적
- msDS-ReplAttributeMetaData: 속성 수준 변경 이력 관리
- uSNChanged: 최신 상태 모니터링
- AD 복제, 포렌식, 롤백 지점 지정에 활용
추적이 필요한 이유
- 동기화 서비스 장애: DIP, OID-Sync 등 서비스 장애 시 정확한 갭 분석으로 신속한 복구
- 무결성 검증: 실시간 USN 대조로 누락 데이터 사전 감지
- 복구 지점 설정: 복원, 리커버리 시 정확한 기준점 제공
- 액션 플랜 수립: DC와 Object별 USN 상태 기반 체계적 대응
2. 실전 해결 사례
문제 진단
💡
고객 질문
"AD에서 최신 Change Number(USN)를 확인하고, 구간별 영향 오브젝트나 속성의 USN값, 변경시간을 파악하는 방법은?"
✅
해결 방안
- LDAP, repadmin 기반 명령어로 즉시 적용 가능한 해결책 제시
- 오브젝트/속성별 USN 분석법으로 정확한 진단 능력 확보
- USN 범위를 복구 체크포인트로 활용하여 다양한 복구 시나리오 대응
3. 현장 적용 사례
▶수십개월 누락 USN 갭 분석 워크플로우
- LACN과 highestCommittedUSN 비교로 갭 규모 파악
- AD 담당자에게 2022년 말 USN 요청으로 기준점 설정
- 오브젝트의 uSNCreated, uSNChanged 수집으로 변경 이력 전수 조사
- 해당 기간 모든 변경/삭제/추가 내역 추적으로 누락 데이터 식별
- 순차적 rewind 셋팅 후 반복 동기화로 안전한 데이터 복구
- Tombstone 기간 초과 삭제분 별도 재처리로 완전한 데이터 정합성 확보
▶USN 추적으로 의심 트랜잭션 수집
- 특정 시점 신규 생성 사용자의 메타정보 추출로 정확한 시간 기준점 확보
- 이를 타임 마커로 활용하여 동일 시점 변경사항 일괄 추적
- 복제 장애 해결, 미적용 트랜잭션 소급에 활용
4. 명령어 가이드
ldapsearch
repadmin
ldapsearch 기반 USN 정보 추출
ldapsearch -x -LLL -h <AD-HOST> -p <AD-PORT> \
-D "<읽기권한 계정 DN>" -w "<PASSWORD>" \
-b "<확인할 사용자 DN>" \
"(objectClass=*)" \
whenCreated whenChanged uSNCreated uSNChanged creatorsName msDS-ReplAttributeMetaData
실제 예시
ldapsearch -x -LLL -h 172.16.0.1 -p 389 \
-D "CN=Administrator,CN=Users,DC=example,DC=com" -w "ObiAdmin##11" \
-b "CN=Seed Beater,OU=_USERS,DC=example,DC=com" \
"(objectClass=*)" \
whenCreated whenChanged uSNCreated uSNChanged creatorsName msDS-ReplAttributeMetaData
repadmin 상세 분석
repadmin /showobjmeta <DC-NAME> "<User DN>"
실제 예시
repadmin /showobjmeta DOM-CON "CN=Seed Beater,OU=_USERS,DC=example,DC=com"
출력 예시
Loc.USN Originating DSA Org.USN Org.Time/Date Ver Attribute
======= ============================= ======= ================ === =========
32825 Default-First-Site-Name\DOM-CON 32825 2025-07-08 04:55:09 1 objectClass
36882 Default-First-Site-Name\DOM-CON 36882 2025-07-08 19:55:39 4 userPrincipalName
주요 속성
속성명 | 의미 |
---|---|
whenCreated | 오브젝트 생성 시각 (UTC/GMT) |
uSNCreated | 생성 시 부여된 USN, 구간 하한 지표 |
whenChanged | 최신 변경 시각 |
uSNChanged | 마지막 변경 시 부여된 USN |
msDS-ReplAttributeMetaData | 속성별 상세 복제 메타데이터 |
creatorsName | 생성자 계정 |
5. 분석 활용 시나리오
▶특정 날짜 USN 산출
- 원하는 시점 직전/직후 생성 오브젝트의 USN 값 확인
- 범위 내 변경된 모든 오브젝트로 해당 구간 변동 파악
- msDS-ReplAttributeMetaData에서 속성별 정확한 USN 참조
💡
실무 활용
생성 시점이 명확한 오브젝트 우선 추적으로 신뢰도 높은 기준점 확보
▶포렌식 및 롤백 지점 마킹
- 사고 발생 시점 USN 확인으로 영향 범위 완전 파악
- AD 복원, 복제 장애 분석, 오염 데이터 식별 등 체계적 장애 대응
6. 명령어 비교
구분 | ldapsearch | repadmin |
---|---|---|
동작 환경 | 크로스플랫폼 | 윈도 AD/RSAT |
복제 메타데이터 | 일부 속성 (파싱 필요) | 명확한 표 형식 |
USN 추출 | 대량 데이터 효율적 처리 | 정밀한 분석 |
✅
사용 권장
일반 단일 값/간단 범위 추적: ldapsearch
상세 복제/속성 단위 추적: repadmin /showobjmeta
상세 복제/속성 단위 추적: repadmin /showobjmeta
7. 주의사항
⚠️
USN 값은 DC 단위로 관리
동일 시간대 서로 다른 DC에서 USN이 다를 수 있으므로 DC GUID/InvocationID 확인 필요
⚠️
msDS-ReplAttributeMetaData 형태
복잡한 base64/XML 형태로 제공되므로 PowerShell이나 Python 스크립트 활용한 자동화 처리 필수
⚠️
USN → 시간 변환 불가
USN만으로는 정확한 시간 정보를 얻을 수 없으므로 오브젝트/속성 메타데이터와 상호 참조 필요
⚠️
복구 시점 산정
복잡한 시스템 특성상 예측 오류 가능성을 상정하고 충분한 검증 과정 필요
8. 현장 활용 예시
- 사고 시점 USN 범위 계산: 침해 사고나 데이터 삭제 시 피해 범위 정확한 산정
- AD 장애 복구 타임라인: 시스템 장애 시 증거 보존 및 단계별 복구 계획
- 이관/동기화 검증: 시스템 이관 시 최종 트랜잭션 USN 기반 데이터 정합성 비교
- 포렌식 분석: 보안 사고 조사 시 정확한 변경 이력 추적으로 사고 경위 파악
결론
특정 날짜 구간의 AD 변경사항 파악은 오브젝트의 USN 및 복제 메타데이터 분석으로 가능합니다.
ldapsearch와 repadmin, msDS-ReplAttributeMetaData, uSNCreated/uSNChanged 등을 활용하면 실제 복제/변경 내역을 시간 순으로 추적하는 분석 기반을 구축할 수 있습니다.
향후 계획
🔄
진행 중인 프로젝트
현재 이 사례는 진행 중인 프로젝트입니다. 고객과 USN 갭 분석 완료 후 실제 해결 방안을 결정하고 실행하는 단계가 남아있습니다.
최종 해결 방식이 점진적인 USN 기반 동기화가 될지, 전면적인 Bootstrap 동기화가 될지는 추가 분석 결과에 따라 결정됩니다. 문제가 완전히 해결되면 실제 적용한 해결 방법과 교훈을 공유하겠습니다.