피드로 돌아가기
Dev.toSecurity
원문 읽기
Public API 제약을 우회한 Memory 분석으로 ROT 엔트리 22개 전수 추출
Deep inside the COM: Reading Windows ROT Without Asking Permission. Detective story
AI 요약
Context
Windows COM의 GetRunningObjectTable API가 보안 정책 및 AppContainer 필터링으로 인해 실제 등록된 객체 일부만 반환하는 제약 존재. API 호출 없이 rpcss 메모리 영역을 직접 분석하여 필터링 되지 않은 전체 ROT(Running Object Table) 뷰를 확보하려는 시도.
Technical Solution
- Ghidra 기반 역공학을 통한 CScmRot 및 CScmRotEntry 구조체 오프셋 정밀 분석
- ReadProcessMemory를 활용한 svchost 프로세스 내 rpcss.dll 글로벌 포인터(gpscmrot) 추적
- LOAD/STORE 인스트럭션 차이에 따른 글로벌 변수 접근 지점의 불일치 해결
- 다수 svchost 프로세스 중 ROT가 실제 초기화된 활성 인스턴스를 식별하는 검증 로직 도입
- 하드코딩된 RVA 대신 Mutex 호출 및 해시 테이블 접근 패턴을 기반으로 한 Behavioral Scorer 설계
- 251개 버킷으로 구성된 Rolling Hash 테이블 구조를 분석하여 엔트리 전수 스캔 수행
실천 포인트
1. 역공학 시 기호(Symbol)보다 생성자(Constructor)의 필드 초기화 순서를 통해 정확한 구조체 오프셋 산출
2. 메모리 스캔 시 LOAD와 STORE 인스트럭션의 차이로 인한 포인터 불일치 가능성 검토
3. 동일 DLL이 여러 프로세스에 로드된 경우, 포인터 NULL 여부를 통해 실제 데이터가 초기화된 활성 프로세스 선별
4. 바이너리 분석 시 정적 주소보다는 불변의 동작 패턴(Behavioral Pattern)을 가중치 기반으로 점수화하여 타겟 식별