Registry configurations designed to be used for troubleshooting and development are now a means of covert persistence due to the lack of visibility by security tools like Autoruns. Here, we highlight three key ways Tanium modules, including Trace and Detect, can be used to rapidly determine the existence of this relatively unknown persistence mechanism.

(사진: Bruno Glätsch / Pixabay)
트위터에서 하룻밤 사이에 새로운 지속성 방식이 소개된 것을 보게 되면 어떻게 하시나요? 한 가지 아이디어: Tanium을 사용하여 현재 진행 중인 모든 활동을 신속하게 확인하고, 해당 활동이 발생할 때 즉시 알림이 전송되도록 설정하세요. 이 모든 일이 아침 식사 전에 일어났다.
4월 10일에서 Oddvar Moe(@oddvarmoe)는 트위터를 통해 자신의 블로그 게시물인 “ ” 및 “Persistence Using Globalflags in Image File Execution Options – Hidden from autoruns.exe”를 공유했습니다. 이 게시물들은 레지스트리 구성을 통해, ‘감시 대상’인 다른 프로세스가 종료된 후에도 눈에 띄지 않게 프로세스를 실행하는 지속성 메커니즘에 대해 다루고 있습니다. 이 방법은 현재 Microsoft의 Sysinternals Autoruns에서 열거하는 영구 저장 위치에 포함되어 있지 않습니다.
글로벌 플래그를 사용하면 개발자는 한 프로세스가 종료된 후 다른 프로세스를 시작할 수 있습니다. Autoruns가 이러한 구성 항목을 열거하지 않기 때문에, 이는 현재 사각지대로 남아 있습니다. 이 설정은 마이크로소프트 개발자 도구 모음에 포함된 유틸리티인 gflag.exe를 사용하여 설정하거나, 관리자 계정으로 레지스트리를 수정하여 수행할 수 있습니다.
문제 해결이나 개발 작업에 해당 컴퓨터가 사용되고 있지 않은 한, 이러한 레지스트리 설정의 존재는 매우 의심스러우므로 조사해야 합니다. 이에 대해서는 아래에서 다루게 되며, 새로 공개된 세부 정보를 바탕으로 자신의 환경을 얼마나 신속하게 평가할 수 있는지 보여주는 예시 시나리오 역할을 합니다.
여기서는 Trace 및 Signals를 포함한 Tanium 모듈을 활용하여, 비교적 잘 알려지지 않은 이 지속성 메커니즘의 존재 여부를 다음 세 가지 주요 방법을 통해 신속하게 파악할 수 있는 방법을 소개합니다:
- 레지스트리 설정의 현재 상태를 살펴보면;
- Trace를 사용하여 레지스트리 변경 내역을 검토하고; 그리고
- 향후 이러한 레지스트리 설정의 변경 사항에 대해 실시간 알림 기능을 구축함으로써.
이 문제에 대하여
Moe의 블로그 게시물에서는 모니터링 대상 프로세스가 종료될 때마다 해당 프로세스를 시작하는 실행 트리거를 설정하는 세 가지 레지스트리 수정 사항을 지적하고 있습니다. 게다가, 모니터링 대상 프로세스가 종료되면 두 번째 프로세스가 아무런 알림 없이 실행됩니다. 즉, 그래픽 인터페이스가 있다면 백그라운드에서 실행된다는 뜻입니다. 공격자는 이 기능을 지속성을 유지하는 수단으로 활용할 수 있습니다. 즉, 자신이 선택한 프로세스가 종료된 후에도 레지스트리 키가 제거될 때까지 자신의 코드가 계속 실행되도록 할 수 있습니다.
이 Windows 기능에 대한 자세한 내용은 Microsoft의 , 및에 설명되어 있습니다.
테스트를 위해, 아래 스크립트는 notepad.exe가 종료될 때마다 evil.exe가 실행되도록 레지스트리를 수정합니다.
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe” /v GlobalFlag /t REG_DWORD /d 512 reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe” /v ReportingMode /t REG_DWORD /d 1 reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe” /v MonitorProcess /d "C:\temp\evil.exe"
현재 활동
Tanium을 통해 기업 전반에서 이 기술이 이미 사용되고 있는지를 확인할 수 있습니다.
일부 환경에서는 이 기법을 합법적으로 사용할 수도 있으므로, 기존 구성이 악의적인 것인지 아니면 무해한 것인지 판단하기 위해 신중한 검토가 이루어져야 합니다. 한 가지 출발점은 레지스트리의 SilentProcessExit 하이를 찾아보는 것입니다. 대부분의 환경에서 이 키는 비어 있거나 존재하지 않아야 합니다. 이번 조사에는 다음 세 가지 센서가 사용될 예정입니다:
- 레지스트리 키의 하위 키 - 종료 시 실행을 유발하는 모든 프로세스를 표시합니다. 아래 그림 1에서는 SilentProcessExit 아래에 “notepad.exe”가 유일한 하위 키로 표시되어 있습니다.
- 레지스트리 키 값 이름 - 어떤 하위 키가 있는지 보여줍니다. 그림 1에는 MonitorProcess와 ReportingMode라는 두 개의 레지스트리 값 이름 항목이 표시되어 있습니다.
- 레지스트리 값 데이터 - 이 데이터는 모니터링 대상 프로세스가 종료될 때 실행되도록 구성된 프로세스를 나타냅니다. 그림 1은 두 항목에 대한 데이터를 보여줍니다.

그림 1: 이 기사에서 테스트에 사용된 예시 항목.
아래 그림 2에서, ‘Tanium 레지스트리 키 하위 키’ 센서는 SilentProcessExit 키 아래에 있는 notepad.exe 하위 키 항목을 표시합니다.

그림 2: 레지스트리 키 하위 키 센서를 사용하여 SilentProcessExit 검색하기.
센서: 모든 컴퓨터의 레지스트리 키 하위 키 레지스트리 키 하위 키 [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit]
“레지스트리 키 하위 키” 센서가 반환하는 모든 하위 키에 대해, 조사자는 KeyPath 값을 복사하여 이를 “레지스트리 키 값 이름” 센서의 매개변수로 사용하여 MonitorProcess 항목이 존재하는지 확인해야 합니다(그림 3 참조). MonitorProcess 항목이 존재하면 ReportingMode 항목도 함께 존재해야 합니다.

그림 3: 하위 키를 검색하는 데 사용되는 레지스트리 키 값 이름 ‘sensor’.
센서: 레지스트리 키 값 이름 모든 컴퓨터의 레지스트리 키 값 이름 [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe]
주어진 MonitorProcess 항목에 대해 어떤 프로세스가 실행될지 확인하려면, 레지스트리 키 하위 키 출력에서 얻은 KeyPath 값과 레지스트리 키 값 이름 센서 출력에서 얻은 값 이름을 모두 레지스트리 값 데이터 센서의 매개변수로 지정해야 합니다(그림 4 참조).

그림 4: 레지스트리 값 데이터 센서 출력.
센서: 모든 컴퓨터의 레지스트리 값 데이터 레지스트리 값 데이터 [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe,MonitorProcess]
센서 출력의 KeyPath와 Value Name을 레지스트리 값 데이터 센서의 매개변수로 사용하면, 그림 4에서 볼 수 있듯이 이 MonitorProcess에 대한 데이터 항목과 함께 디스크 상에 프로세스가 저장된 경로를 확인할 수 있습니다.
또한 그림 4 에서는 대체 데이터 스트림(ADS) 내에 프로세스 바이너리를 숨기는 예시를 확인할 수 있습니다. ADS는 NTFS 파일 시스템의 기능으로, 공격자는 이를 이용하여 바이너리 파일을 삽입함으로써 Windows 탐색기나 cmd.exe 및 PowerShell.exe를 통해 표시되는 일반적인 디렉터리 목록에서 해당 파일이 보이지 않게 할 수 있습니다. 프로세스 바이너리 이름에 포함된 “:” 기호에 주목하십시오.
숨겨진 실행 파일은 C:\Windows 폴더 또는 NTFS 디렉터리 항목 내에 삽입되어 있으며, 파일 이름은 “cmd.exe”로 지정되어 있습니다.
지난 활동
Tanium 센서를 사용하면 수십만 대의 엔드포인트에 걸쳐 이러한 특정 레지스트리 위치를 단 몇 초 만에 검색할 수 있습니다.
하지만 초기 활동 이후에 레지스트리 항목이 삭제되었다면 어떨까요? 위에서 보여준 “현재 상태” 센서들은 장착되지 않을 것입니다. 전사적으로 과거 데이터를 검색하기 위해, Tanium Trace 데이터를 활용하여 레지스트리를 살펴보겠습니다.
먼저 SilentProcessExit 레지스트리 키를 확인하여 SetRegistryKey 이벤트가 기록되었는지 살펴봅니다(그림 5 참조).

그림 5: ‘값’ 센서 출력의 레지스트리 키 추적.
센서: 레지스트리 키 또는 값 추적 모든 컴퓨터에서 레지스트리 키 또는 값 추적[무제한, 1523639748493|1523643347493, 0, 0, 10, 0, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit, , SetValueKey, , , ]
“key” 열에는 종료 시 MonitorProcess 실행 파일이 실행되도록 하는 실행 파일의 항목이 포함되어 있습니다. 확장된 키 열 데이터는 다음과 같습니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe
Trace는 값 데이터를 기록하지 않기 때문에, 이 시점에서 어떤 프로세스가 다른 프로세스를 트리거하도록 구성되었는지는 알 수 있지만, 해당 프로세스가 어디에 위치하는지는 알 수 없습니다. 하지만 ‘Trace’를 통해 라이브 연결을 열어 확인해 볼 수 있습니다.
경고
Tanium Detect Signal은 기업의 현재 상태 및 과거 데이터를 검색할 뿐만 아니라, 이러한 레지스트리 키가 위에서 설명한 방식으로 구성되어 있을 경우 실시간 경고를 제공할 수 있습니다.
group(Registry.key_path에 '\\SilentProcessExit\\'가 포함되어 있고, Registry.value_name에 'MonitorProcess'가 포함되어 있는 경우)
이 시그널이 배포되면, 어떤 프로세스가든 MonitorProcess 항목을 생성하여 SilentProcessExit 키 아래에 지속성을 설정할 때마다 Tanium Detect 인터페이스에서 실시간 알림이 발생하며, 이러한 알림은 SIEM 또는 알림 시스템으로 전달될 수 있습니다.
다른 Tanium Detect 알림과 마찬가지로, 해당 알림을 선택한 후 ‘Trace Live Connection’으로 전환하여 해당 활동을 더 자세히 조사할 수 있습니다(그림 6 참조). 여기에서는 해당 프로세스 활동을 자세히 살펴봅니다. 이 경우, 악성 프로세스가 다시 ADS로 삽입되었으나, 이번에는 C:\System 디렉터리 항목 내에 삽입되었습니다.

그림 6: 신호 알림 및 Trace와 실시간 연결을 설정할 수 있는 옵션.
다음으로, Trace에서 프로세스 트리 보기를 확인할 수 있습니다(그림 7 참조). 특히 주목할 점은, 해당 악성 프로세스의 상위 프로세스가 Windows 오류 보고 서비스인 WerFault.exe라는 사실입니다. 또한, 악성 프로세스가 SYSTEM 권한이 아닌 동일한 사용자 계정 컨텍스트에서 실행된다는 점에 유의하십시오.

그림 7: Trace 내의 프로세스 시각화.
프로세스 해시가 빨간색으로 강조 표시되어 있는데, 이는 Tanium Reputation 서비스가 이 파일을 악성 파일로 분류했음을 나타냅니다.
이제 해시 값과 파일 세부 정보를 바탕으로 Tanium Protect로 이동하여 해당 프로세스의 향후 실행을 차단할 수 있습니다. 또한 표준 Tanium 작업을 사용하여 레지스트리를 정리하고 기존 프로세스를 모두 종료할 수도 있습니다.
신호 예시
아래에서는 이 지속성 메커니즘을 활성화하는 다양한 방식에 해당하는 Tanium Detect Signal 경고 메시지를 확인할 수 있습니다(그림 8-13 참조).

그림 8: 배치 파일을 통해 MonitorProcess 항목을 추가할 때 표시되는 경고 메시지.

그림 9: 배치 파일을 사용하여 GlobalFlag 항목을 추가할 때 표시되는 경고 메시지.

그림 10: Regedit.exe GUI를 사용하여 MonitorProcess 항목을 수동으로 추가할 때 표시되는 경고 메시지.

그림 11: PowerShell을 사용하여 레지스트리를 수정할 때 표시되는 경고 메시지.

그림 12: 구성이 변경된 레지스트리 파일.

그림 13: 그림 12 의 레지스트리 파일을 병합하자 이 경고가 표시되었습니다.
한 가지 더 말씀드리자면. IOC 경고가 발생하면 그림 14과 같이 해시 색상 강조 표시를 포함한 ADS가 상세 보기 화면에 표시됩니다.

그림 14: 해시 값을 기반으로 바이너리에 대한 IOC 스캔 결과가 일치한 경우.
요약
이 기사에서 설명하는 프로세스는 Tanium이 레지스트리 설정의 현재 상태를 확인하고, Trace를 통해 레지스트리 변경 내역을 분석하며, 마지막으로 향후 이러한 레지스트리 설정 변경에 대한 실시간 알림 기능을 구축함으로써, 비교적 잘 알려지지 않은 지속성 메커니즘의 존재 여부를 신속하게 파악할 수 있는 방법을 보여줍니다. 더 자세한 내용을 알고 싶으시다면, ‘ ’ , ‘Tanium User Community’, ‘ ’에 함께 참여하셔서 의견을 나누어 봅시다.
Tanium이 실제로 어떻게 작동하는지 궁금하신가요? 와 1:1 데모를 예약하거나 주간 웨비나에 참여해 보세요. 에서 개최될 예정인 행사()에서 Tanium 전문가들과 상담해 보세요.
저자 소개: 스콧 랭겐도르프(Scott Langendorf)는 Tanium EDR 팀의 이사입니다. 그는 국가 차원의 해킹 집단으로부터 공격을 받고 있던 한 글로벌 엔지니어링 기업에서 시니어 매니저로 근무한 후, 2015 년 가을에 타늄에 합류했다. 사이버 보안 분야에서 8년간의 경력을 쌓은 스콧은, 방어 및 위협 탐지 팀에게 신속한 엔드포인트 가시성, 경보 시스템, 데이터 민첩성이 얼마나 중요한지 인식하고, 보안 제품 개발을 지원하기 위해 타늄에 합류했습니다. 그는 또한 NASA에서 우주 정거장의 전력 시스템 관련 업무를 담당했으며, APT1 이 막 발견되기 시작했을 무렵에는 에너지 분야에서 IT 관리자로 근무하기도 했다.
