RemoteMonolog: NTLM 인증 강제를 위한 DCOM 무기화

코드가 표시된 대형 디지털 화면 앞에 서 있는 남자의 뒷모습

작성자

Andrew Oliveau

Red Team Operator

Mimikatz로 손쉽게 자격증을 취득하던 시절 좋든 나쁘든 끝나가고 있습니다. Microsoft가 자격 증명 도용에 대한 방어를 강화하고 엔드포인트 탐지 및 대응(EDR) 솔루션이 계속 발전함에 따라 수평 이동, 페이로드 실행, 로컬 보안 기관 하위 시스템 서비스(LSASS) 직접 액세스와 같은 기존의 레드팀 기법에 대한 감시가 강화되고 있습니다. 그 결과 레드팀 커뮤니티는 Windows 시스템에서 자격 증명을 수집하기 위한 대안 방법을 강구해야 했습니다.

'고급' 페이로드나 LSASS에 대한 액세스 필요 없이, 간단히 '자체적으로 운영'하며 활용도 낮은 COM(Component Object Model)을 통해 비슷한 결과를 얻을 수 있다고 상상해 보세요. 만약 흥미를 느낀다면, 이 블로그에는 다음 참여에서 사용할 수 있는 재밌는 요령이 가득 담겨 있으니 꼭 읽어보세요.

COM과 이에 대응한 분산 컴포넌트 객체 모델(DCOM)의 기초를 간략하게 설명하고, RunAs 설정과 인증 강제가 영향을 미치는 이유에 대해 자세히 알아보고, 새로운 자격 증명 수집 도구인 RemoteMonologue를 소개합니다.

COM 및 DCOM에 대해 알아야 할 사항

구성 요소 객체 모델(COM)은 Windows에서 가장 오래되고 널리 퍼진 기술 중 하나로, 일상적인 애플리케이션과 서비스의 이면에서 조용히 작동합니다. COM은 오래되었음에도 불구하고 공격자에게 유용한 리소스로 남아 있으며 수평 이동, 권한 상승 및 지속성을 달성할 수 있는 대체 방법을 제공합니다. 그러나 고유한 복잡성으로 인해 공격 표면의 상당 부분이 탐색되지 않았습니다.

이 블로그에서 이해해야 할 주요 개념은 다음과 같습니다.

  • COM: 소프트웨어 구성 요소가 프로세스 경계를 넘어 서로 상호 작용할 수 있도록 하는 핵심 Windows 기술입니다. COM을 사용하면 프로그램이 기능을 복제하지 않고도 다른 프로그램의 기능을 재사용할 수 있습니다. 예를 들어, 프로그램은 이러한 기능 자체를 구현하지 않고도 COM 객체를 사용하여 시스템 로그를 읽거나 Excel 파일에 새 항목을 추가할 수 있습니다.
  • DCOM(분산 컴포넌트 객체 모델) 네트워크 기반 통신을 가능하게 하는 COM의 확장입니다. DCOM을 사용하면 한 시스템에서 실행되는 프로세스가 다른 시스템에 있는 COM 객체에서 함수를 호출할 수 있습니다. 이러한 네트워크 기반 기능 덕분에 DCOM은 수평 이동을 위한 유용한 도구가 되었습니다. DCOM 객체에 액세스하려면 일반적으로 원격 시스템에 대한 로컬 관리자 권한이 필요합니다.

높은 수준에서 COM 객체는 다음과 같은 두 가지 주요 구성 요소가 있는 독립적인 단위로 생각하면 됩니다.

  • 속성: 이는 객체의 상태나 구성을 나타냅니다.
  • 메서드: 이는 객체가 수행할 수 있는 작업을 나타냅니다. 예를 들어 COM 객체에는 프로세스를 시작하거나 파일을 만들거나 인증 요청을 시작하는 메서드가 있을 수 있습니다.

공격자는 이러한 방법을 악용하여 수평 이동을 촉진하고, 곧 설명하겠지만 비밀번호 크래킹 및 릴레이 공격을 위해 원격 NTLM 인증을 강제할 수 있습니다.

컴퓨터를 바라보는 남성

보안 인텔리전스 강화 


매주 Think 뉴스레터에서 보안, AI 등에 대한 뉴스와 인사이트를 확인하고 위협에 한발 앞서 대처하세요. 


대화형 사용자 실행

재미있는 내용을 살펴보기 전에 COM의 한 가지 중요한 구성 요소를 더 자세히 논의해야 합니다. COM의 애플리케이션 식별자(AppID)는 COM 애플리케이션의 보안, ID 및 런타임 동작을 관리하기 위한 핵심 메커니즘으로, 특히 DCOM 또는 특정 보안 컨텍스트가 필요한 애플리케이션과 관련된 시나리오에서 중요한 역할을 합니다. COM 클래스가 AppID에 등록되면 해당 AppID에 대해 정의된 보안 설정을 상속합니다.

특히 관심을 가져야 할 보안 설정은 인스턴스화 시 DCOM 객체를 실행하는 데 사용할 사용자 계정을 지정하는 RunAs 키입니다. RunAs 키는 다음 레지스트리에서 찾을 수 있습니다.

  • HKEY_CLASSES_ROOT\AppID\{AppID_GUID}

DCOM 및 RunAs 키에 대한 Microsoft의 설명서를 검토하는 동안 한 가지 구체적인 가치, 즉 대화형 사용자가 눈에 띄었습니다. 이 값은 현재 시스템의 콘솔 세션에 로그인한 사용자의 보안 컨텍스트에서 실행되도록 DCOM 객체를 구성합니다. 공격적인 관점에서 볼 때 이는 영향을 받는 사용자의 자격 증명을 모른 채 DCOM 객체를 활용하여 다른 사용자로 작동할 수 있기 때문에 흥미롭습니다.

AppID가 있는 모든 DCOM 객체의 RunAs 값이 대화형 사용자로 설정된 것은 아닙니다. 실제로 AppID의 약 절반은 RunAs 값이 전혀 설정되어 있지 않습니다. 하지만 목적에 맞게 RunAs 값을 추가하거나 수정할 수 있다면 어떨까요?

기본적으로 레지스트리의 AppID는 DACL(임의 액세스 제어 목록)로 보호되어 그림 1과 같이 TrustedInstaller 소유권 권한을 부여하고 로컬 관리자가 읽기 전용 액세스로 액세스할 수 있도록 제한합니다.

AppId의 기본 DACL 설정 스크린샷
그림 1: AppID의 기본 DACL 설정

그러나 로컬 관리자에게는 레지스트리 키를 포함한 시스템 객체의 소유권을 가져올 수 있는 SeTakeOwnershipPrivilege 권한이 부여됩니다. 이 권한은 AppID의 소유권을 변경할 수 있기 때문에 이 공격과 관련이 있습니다. 소유권이 변경되면 AppID에 대한 모든 권한을 부여한 다음 설정을 수정하여 RunAs 값을 추가하거나 변경할 수 있습니다.

RunAs 값이 대화형 사용자로 수정되면 공격이 간단해집니다. 이를 통해 DCOM 객체를 다른 활성 세션의 컨텍스트에서 강제로 실행할 수 있습니다. 그러나 이 공격의 성공 여부는 궁극적으로 표적이 되는 특정 DCOM 객체가 노출하는 속성과 방법에 따라 달라집니다.

NTLM 인증 강제

이제 DCOM 객체를 세션 하이재킹 도구로 변환할 수 있다는 것을 알았으므로, 다음 단계는 하이재킹을 완료하는 데 활용할 수 있는 메서드와 속성을 식별하는 것입니다. 이 연구를 위해 저는 대부분의 공개 DCOM 수평 이동 기술과는 다른 접근 방식을 사용하여 페이로드를 실행하지 않고도 사용자 침해를 달성할 수 있는지 살펴보았습니다.

저는 대상 시스템에서 페이로드를 전송하거나 실행할 필요가 없는 '파일리스' 형식으로 비슷한 결과를 얻는 데 중점을 두었습니다. 대상 시스템에서 페이로드를 전송하고 실행하는 것은 종종 레드팀 운영에서 '비용이 많이 드는' 작업으로 간주되기 때문에 이 구분이 중요합니다. 이 단계를 피하면 일반적인 보안 제어가 트리거될 위험이 크게 줄어듭니다. 따라서 DCOM을 통해 NTLM 인증을 강제하여 원격 사용자 계정을 손상시키는 것을 목표로 했습니다.

기존의 수평 이동 기술을 수행하는 것보다 NTLM 인증을 강제하면 다음과 같은 몇 가지 주요 이점이 있습니다.

  • NTLMv1/NTLMv2 해시를 캡처하고 오프라인에서 크랙을 시도합니다.
  • 영향을 받는 사용자로서 작업을 수행하기 위해 NTLMv1 또는 WebDAV NTLMv2 해시를 LDAP 또는 SMB와 같은 다른 네트워크 서비스에 전달합니다.
  • 일반적으로 보안 도구에서 더 많은 조사를 받는 대상 시스템에서 페이로드를 전송하고 실행하는 것을 피합니다.
  • LSASS 프로세스를 건드리지 않도록 하여 탐지 위험을 줄입니다.

이 글을 쓰는 현재, 대부분의 도메인 컨트롤러에서는 LDAP 서명 및 채널 바인딩이 필요하지 않으며 기본적으로 적용됩니다. 이러한 보안 기능은 Windows Server 2025에서만 필수입니다. 즉, 대상 시스템에서 NTLMv1 또는 WebDAV 인증을 강제할 수 있는 경우 이를 LDAP로 릴레이하고 영향을 받는 사용자로 작업을 수행할 수 있습니다. 마찬가지로 도메인 컨트롤러를 제외한 Windows 서버에서는 기본적으로 SMB 서명이 필요하지 않습니다.

또 다른 중요한 고려 사항은 2024년 12월 현재 Nic Losby가 공개적으로 공유한 레인보우 테이블을 사용하여 NTLMv1 해시를 간단하게 크랙할 수 있다는 점입니다. 이러한 테이블을 사용하면 NTLMv1 해시에서 자격 증명을 복구하는 데 필요한 시간과 노력을 크게 줄일 수 있습니다. NTLMv2 해시 대신 NTLMv1 해시를 얻기 위해 대상 시스템에서 다음 레지스트리 키를 수정합니다.

  • HKLM\System\CurrentControlSet\Control\Lsa\LmCompatibilityLevel

LmCompatibilityLevel을 2 이하의 값으로 설정하면 시스템이 인증을 위해 NTLMv1로 폴백합니다. 이러한 수정은 로컬 관리자 권한으로 가능하며 일반적으로 "NetNTLMv1 다운그레이드 공격"이라고 합니다.

또는 HTTP 기반 인증을 이 서비스로 전달할 수 있으므로 WebDAV 인증을 캡처하여 LDAP로 전달할 수 있습니다. WebClient 서비스가 아직 권한 있는 액세스로 실행되고 있지 않은 경우 대상 시스템에서 원격으로 활성화할 수 있습니다. 활성화되면 UNC 경로에 시스템의 NetBIOS 이름을 지정하여 리스너에 WebDAV NTLM 인증을 강제할 수 있습니다. 예를 들면 다음과 같습니다.

  • \\MYHACKERBOX@80\giveme\creds.txt

NTLM 릴레이 공격 및 다른 엔드포인트로 릴레이할 수 있는 프로토콜에 대한 자세한 내용은 여기에서 다음 리소스를 참조하세요.

ServerDataCollectorSet DCOM 객체

조사하는 동안 인증 강제에 활용할 수 있는 메서드와 속성을 식별하기 위해 CLSID가 {03837546-098B-11D8-9414-505054503030}ServerDataCollectorSet DCOM 객체를 분석했습니다. 눈에 띄는 속성 중 하나는 DataManager였는데, 다행히도 이 COM 객체에는 메서드와 속성을 더 자세히 정의하는 형식 라이브러리가 포함되어 있습니다.

ServerDataCollector 속성 및 메서드 열거
그림 2: ServerDataCollector 속성 및 메서드 열거

OleView.NET를 사용하여 ServerDataCollectorSet의 형식 라이브러리를 검토한 결과 DataManager 속성에 두 개의 매개 변수가 필요한 Extract 메서드가 있다는 것을 알게 되었습니다.

  1. CabFilename - 추출할 CAB 파일의 이름입니다.
  2. DestinationPath - CAB 파일의 콘텐츠를 추출할 경로입니다.

CabFilename 매개변수의 존재는 네트워크 인증 작업이 발생할 수 있는 UNC 경로를 제공할 가능성을 시사했기 때문에 특히 흥미로웠습니다.

OleView.NET으로 사용한 유형 라이브러리 분석
그림 3: OleView.NET을 사용한 유형 라이브러리 분석

이 이론을 테스트하기 위해 내 시스템(172.22.164.58)을 가리키는 CabFilename 매개변수에 대한 UNC 경로를 제공했습니다. 그림 4와 같이 응답자를 실행합니다. 그 결과는 어땠을까요? 성공입니다! 그림 5와 같이 NTLMv2 해시를 캡처할 수 있었습니다.

Extract 메서드를 사용하여 인증 강제
그림 4: Extract 메서드를 사용하여 인증 강제
NTLMv2 자격 증명 캡처
그림 5: NTLMv2 자격 증명 캡처

다음으로 ServerDataCollectorSet의 RunAs 키를 수정하여 원격 시스템(172.22.166.170)의 다른 사용자로부터 자격 증명을 캡처할 수 있는지 테스트했습니다. 이를 위해 원격 레지스트리 서비스를 사용해 AppID {03837503-098B-11D8-9414-505054503030}대화형 사용자 값을 추가했습니다.

다른 사용자가 대상 시스템(이 경우 GALAXY\yoda)에 로그인한 후 ServerDataCollectorSet DCOM 객체에 GALAXY\Administrator로 액세스하고 그림 6과 동일한 Extract 메서드를 실행했습니다. 다시 한 번 인증을 성공적으로 캡처했습니다. 하지만 이번에는 GALAXY\yoda에서 생성되었습니다(그림 7 참조). 이것은 RunAs 키를 대화형 사용자로 수정하면 DCOM 객체를 활용하여 다른 사용자의 세션을 가로채는 것을 가능하게 함을 보여줍니다.

Extract 방법을 사용하여 원격으로 인증 강제 실행
그림 6: Extract 방법을 사용하여 원격으로 인증 강제 실행
다른 사용자의 NTLMv2 자격 증명 캡처
그림 7: 다른 사용자의 NTLMv2 자격 증명 캡처

이 공격 흐름은 아래 다이어그램에 나와 있습니다.

RemoteMonolog 공격을 보여주는 그래프
그림 8: RemoteMonolog 공격

FileSystemImage DCOM 객체

인증 강제에 취약한 또 다른 흥미로운 DCOM 객체는 CLSID가 인 {2C941FC5-975B-59BE-A960-9A2A262853A5} FileSystemImage입니다. 이 객체는 DCOM 기반 공격에서는 덜 일반적인 기법인 메서드를 호출하는 대신 단순히 속성을 수정하여 강제 실행이 트리거되기 때문에 특히 고유합니다.

해당 속성은 WorkingDirectory이며, 기본적으로 대화형 사용자의 %TEMP% 폴더를 가리킵니다. 그러나 WorkingDirectory 값을 리스너를 가리키는 UNC 경로로 변경하면 그림 9 및 10과 같이 NTLMv2 인증을 캡처할 수 있습니다.

인증을 강제하도록 WorkingDirectory 속성 수정
그림 9: 인증을 강제하도록 WorkingDirectory 속성 수정
NTLMv2 자격 증명 캡처 시연
그림 10: NTLMv2 자격 증명 캡처

세션 하이재킹 기능을 검증하기 위해 AppID {2C941FD1-975B-59BE-A960-9A2A262853A5}의 RunAs 키를 대화형 사용자로 설정하여 원격으로 테스트했습니다. 이 구성은 FileSystemImage DCOM 객체가 대상 시스템의 활성 사용자의 보안 컨텍스트에서 실행되도록 트리거했습니다. 그리고 예상대로 해당 사용자의 NTLMv2 해시를 캡처할 수 있었습니다.

이 기술은 속성과 방법을 수정하여 DCOM 객체의 공격 표면을 확장하여 인증을 강제할 수 있음을 보여줍니다.

UpdateSession DCOM 객체

공유할 가치가 있는 마지막 DCOM 객체 중 하나는 CLSID가 {4CB43D7F-7EEE-4906-8698-60DA1C38F2FE}UpdateSession입니다. 유형 라이브러리를 후기할 때 AddScanPackageService 메서드는 serviceName 인수와 더 흥미롭게도 scanFileLocation 인수가 필요했기 때문에 두드러졌습니다. scanFileLocation이 있다는 것은 UNC 경로를 허용할 수 있음을 나타냅니다.

OleView.NET을 사용하여 UpdateSession의 유형 라이브러리 분석
그림 11: OleView.NET을 사용하여 UpdateSession의 유형 라이브러리 분석

이 이론을 테스트할 때 NTLMv2 인증을 성공적으로 캡처했지만, 아래 그림과 같이 사용자 계정의 자격 증명을 받는 대신 시스템 계정의 자격 증명을 받았습니다.

UpdateSession 메서드를 사용한 인증 강제
그림 12: UpdateSession 메서드를 사용한 인증 강제
머신 계정 인증 캡처
그림 13: 머신 계정 인증 캡처

이 발견은 RunAs 키를 추가하고 이를 대화형 사용자로 설정한 후에도 UpdateSession DCOM 객체가 여전히 시스템 계정으로 네트워크 작업을 수행한다는 점에서 특히 흥미로운 결과입니다. 그렇다면 왜 이런 일이 발생할까요? 간단한 대답은 DCOM 객체 자체는 인스턴스화하는 사용자 또는 대화형 사용자의 보안 컨텍스트에서 실행되지만 네트워크 작업은 별도의 프로세스인 svchost.exe에 의해 수행된다는 것입니다. UNC 경로는 svchost.exe로 전달되며, 이러한 작업의 기본값은 항상 SYSTEM 계정입니다. 따라서 RunAs 키 설정은 이 동작에 영향을 미치지 않습니다.

RunAs 키는 네트워크 작업에 사용되는 계정에 영향을 미치지 않지만, 시스템 계정 자격 증명을 캡처하는 것은 여러 공격 시나리오에서 여전히 유용합니다.

  1. Active Directory에서 관심 있는 DACL 권한에 대한 액세스:
    컴퓨터 계정(예: DOMAIN\MACHINE$)에는 수평 이동 또는 권한 상승에 유용할 수 있는 Active Directory의 특정 객체에 대한 권한이 있을 수 있습니다.
  2. 추가 회피를 위한 실버 티켓 위조:
    머신 계정의 NTLM 해시를 사용하여 실버 티켓을 위조할 수 있으므로 시스템상의 모든 사용자를 사칭하여 탐지될 위험을 줄이면서 작업을 수행할 수 있습니다.

RemoteMonolog

이 공격은 RemoteMonologue라는 이름이 붙여졌는데, InternalMonologue와 유사한 기능을 수행하지만 원격으로 공격을 수행한다는 점이 가장 큰 차이점입니다. 이 도구는 Impacket 라이브러리를 사용하여 Python으로 개발되었으며 공격 프로세스를 자동화합니다.

RemoteMonolog는 앞서 언급한 세 가지 DCOM 객체(-dcom) 중 하나를 대상으로 지정하여 지정된 리스너(-auth-to)에 대해 인증 강제를 수행할 수 있는 기능을 제공합니다. 또한 여러 시스템에서 자격 증명의 검증을 위해 분사 모듈(-spray)과 자격 증명을 캡처할 수 있는 추가 이점이 있습니다. 이 도구는 NetNTLMv1 다운그레이드 공격(-downgrade)도 지원하며, HTTP 인증을 용이하게 하기 위해 WebClient 서비스를 활성화하는 옵션(-webclient)도 있습니다. 마지막으로, 이 도구에는 대상 시스템에서 활성 세션이 있는 사용자를 열거하는 쿼리 모듈(-query)이 포함되어있습니다.

다음은 응답자를 리스너로 사용하면서 NetNTLMv1 다운그레이드 공격으로 RemoteMonolog를 실행하는 예입니다. 기본적으로 DCOM 옵션을 지정하지 않으면 이 도구는 ServerDataCollectorSet DCOM 객체를 사용합니다.

RemoteMonolog를 실행하여 자격 증명 캡처
그림 14: RemoteMonolog를 실행하여 자격 증명 캡처

다음은 또 다른 예입니다. 이번에는 FileSystemImage DCOM 객체를 사용하여 공격이 실행되고 WebClient 서비스가 HTTP 인증을 받도록 한 다음 ntlmrelayx를 사용하여 LDAP로 릴레이됩니다.

LDAP로 릴레이하도록 HTTP 인증 강제 실행
그림 15: LDAP로 릴레이하도록 HTTP 인증 강제 실행

방어 고려 사항

이 블로그에 설명된 기술로부터 보호하고 탐지하기 위해 몇 가지 예방 및 탐지 조치를 구현할 수 있습니다.

예방 조치:

  1. LDAP 서명 및 채널 바인딩 사용: 도메인 컨트롤러에서 LDAP 서명 적용 및 채널 바인딩을 구성하여 릴레이 공격으로부터 LDAP 엔드포인트를 보호합니다. 참고: 이러한 설정은 Windows Server 2025부터 기본적으로 적용됩니다.
  2. 최신 Windows 버전으로 업그레이드: 서버는 Windows Server 2025로, 워크스테이션은 Windows 11 버전 24H2로 업그레이드하면 NTLMv1이 제거되었으므로 NetNTLM 다운그레이드 공격을 완화할 수 있습니다.
  3. SMB 서명 시행: Windows 서버에서 SMB 서명을 활성화하고 시행하여 SMB 릴레이 공격을 방지합니다.
  4. 강력한 비밀번호 정책 구현: 강력한 비밀번호 요구 사항을 적용하여 비밀번호 크래킹 공격을 더욱 어렵게 만듭니다.

탐지 기회:

  1. DCOM 객체에 대한 원격 액세스 모니터링: 영향을 받는 DCOM 객체와 해당 속성 및 메서드에 대한 액세스를 추적하여 비정상적인 활동을 식별합니다.
  2. 레지스트리 수정 모니터링: RunAs 및 LmCompatibilityLevel 레지스트리 키의 변경 사항을 모니터링합니다.
  3. WebClient 서비스 활동 추적: HTTP 기반 NTLM 인증을 용이하게 하는 데 사용되는 WebClient 서비스가 원격으로 활성화된 인스턴스를 모니터링합니다.

결론

RemoteMonolog 공격은 활용도가 낮은 DCOM 객체를 무기화하여 은밀한 파일리스 인증 강제 공격을 수행하는 방법을 보여줍니다. 공격자는 특정 속성을 수정하고 NetNTLMv1 다운그레이드와 같은 기술을 활용함으로써 페이로드를 배포하거나 LSASS와 같은 민감한 프로세스에 직접 액세스하지 않고도 사용자 계정을 손상시키고 권한을 상승시킬 수 있습니다.

방어자는 LDAP 서명, SMB 서명 시행, NTLMv1과 같은 레거시 프로토콜 비활성화와 같은 주요 시스템을 강화하는 데 집중함으로써 공격 표면을 크게 줄일 수 있습니다. 또한 레지스트리 수정, DCOM 활동 및 원격 서비스 변경에 대한 강력한 모니터링을 통해 이러한 기술을 초기 단계에 탐지하고 그 영향을 완화할 수 있습니다.

Mixture of Experts | 12월 12일, 에피소드 85

AI 디코딩: 주간 뉴스 요약

세계적인 수준의 엔지니어, 연구원, 제품 리더 등으로 구성된 패널과 함께 불필요한 AI 잡음을 차단하고 실질적인 AI 최신 소식과 인사이트를 확인해 보세요.

관련 솔루션
IBM Guardium

가장 중요한 데이터를 보호하세요. 환경 전반에서 민감한 정보를 탐색, 모니터링 및 보호하는 동시에 규정 준수를 자동화하고 위험을 줄이세요.

IBM Guardium 살펴보기
엔터프라이즈 보안 솔루션

세계 최대 엔터프라이즈 보안 제공업체의 솔루션을 사용해 보안 프로그램을 혁신하세요.

    보안 솔루션 살펴보기
    사이버 보안 서비스

    사이버 보안 컨설팅, 클라우드 및 관리형 보안 서비스를 통해 비즈니스를 혁신하고 위험을 관리하세요.

    사이버 보안 서비스 살펴보기
    다음 단계 안내

    클라우드 및 온프레미스 환경 전반에서 기업을 보호하기 위해 데이터 보호, 위협 탐지 및 규정 준수를 자동화하세요.

    1. IBM Guardium 살펴보기
    2. 사이버 보안 솔루션 알아보기