COM
COM은 Windows에서 기본으로 제공하는 기능으로 프로그램 간 객체를 공유하는 시스템입니다. 지속성 공격은 기본적으로 은닉성이 바탕이 되기 때문에, 이미 사용중인 오브젝트를 덮어쓰는 것 보다는 존재하지 않는 오브젝트를 찾아 그곳에 백도어를 심는 것이 안전한 방법입니다.
Process Monitor은 Sysinternals Suite의 일부로, 파일 시스템, 레지스트리, 프로세스의 활동을 실시간으로 보여주며 다양한 공격(DLL SideLoading 등) 벡터를 찾는데 유용한 도구입니다. 보통의 경우 제어권을 탈취한 Windows 머신에서 GUI 환경을 획득하는 것 자체가 제한될 수 있습니다. 따라서 먼저 자신의 로컬 머신에서 하이재킹 할 수 있는 항목을 직접 조사한 뒤에, 하이재킹이 가능한 오브젝트를 찾아 피해자 PC에서 적용시키는 것이 일반적인 방법입니다. Process Monitor을 아래 Microsoft에서 다운로드 후, Procmon64를 실행합니다.
기본적으로 Procmon64를 실행했을 땐 많은 프로세스 목록이 나오기 때문에 필터를 생성하여 나에게 필요한 취약한 오브젝트 목록만을 확인해야 합니다.
현재 생성한 필터는 3가지로 다음과 같습니다.
RegOpenKey 작업
Result가 NAME NOT FOUND인 경우(삭제 등에 의해 현재는 참조하지 않는 오브젝트)
Path가 InprocServer32로 끝나는 경우
RegOpenKey를 설정하는 이유는 COM 객체를 로드할 때, 시스템 관련 정보를 레지스트리에서 가져오기 위해 다음과 같은 키들을 열고(RegOpenKey) 탐색하기 때문입니다.
HKCR\CLSID\{...}
HKCU\Software\Classes\CLSID\{...}
HKLM\SOFTWARE\Classes\CLSID\{...}
우리가 하는 행위들이 단순한 업무적 모의해킹이 아닌, 작전 보안 관점에서 생각했을 때는 지속성과 더불어 은닉성을 항상 생각하고 있어야 합니다. 즉 자주 호출되는 오브젝트를 하이재킹 할 경우 비콘 커넥트 혹은 리버스쉘 등은 더욱 쉽고 대기 없이 되겠지만 그만큼 이상 징후로 노출될 수도 있으며 시스템이 불안정해질 수도 있습니다. 적당히 자주 호출되면서도 사람들이 자주 사용하는 프로그램(MS 365, KakaoTalk 등)은 피하는 것이 좋습니다.
실습에서는 HKCU\Software\Classes\CLSID{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32
를 골랐습니다. 이것을 레지스트리에 대해 질의하면 HKLM에는 존재하지만 HKCU에는 존재하지 않는 것을 알 수 있습니다.
HKCU에 새로운 레지스트리 키를 생성하여, 이 CLSID를 가리키게 하고 악성 DLL을 로드하도록 할 수 있습니다. DLL Hijacking에서 언급하는 내용과 동일한 방법입니다. 코발트 스트라이크의 페이로드 생성 기능을 이용하여 dll 파일을 삽입하거나 간단한 실습을 원할 경우msfvenom을 통해 리버스쉘 dll을 생성 후 삽입합니다.
이제 DllHost.exe가 이 COM 엔트리를 로드할 때, 삽입한 악성 DLL이 실행됩니다.
Last updated
Was this helpful?