동남아시아 금융 부문을 노리는 포리얼 악성코드

Elastic Security는 동남아시아 금융 기관, 특히 베트남 금융 부문을 대상으로 하는 PHOREAL 멀웨어를 발견했습니다.

17분 읽기캠페인
PHOREAL 멀웨어, 동남아 금융 부문을 노리다

서문

Elastic Security는 베트남의 한 금융 서비스 기관을 대상으로 PHOREAL/RIZZO 백도어를 사용하는 캠페인이 진행 중인 것을 확인했습니다. 이 멀웨어는 한동안 사용되어 왔지만, 방어 회피 및 캠페인 보호 기법으로 메모리에 로드되는 것이 관찰된 것은 이번이 처음입니다. 자체 관찰 및 이전에 보고된 정보를 분석한 결과, 이 활동 그룹(멀웨어+기술+피해자학)을 REF4322로 추적하고 있습니다.

위협은?

포리얼/리조는 초기 피해자 특성 분석과 익스플로잇 후 후속 작업을 통해 조직의 데이터 기밀을 침해할 수 있는 백도어입니다. 다른 연구에서도 APT32(일명 씨로터스, 오션로터스, APT-C-00, 그룹 G0050)가 독점적으로 사용하는 것으로 보고된 바 있습니다.

영향은?

APT32는 주로 동남아시아, 특히 베트남에 정치적 또는 경제적 이해관계가 있는 피해자를 표적으로 삼습니다.

Elastic은 이에 대해 무엇을 하고 있나요?

Elastic Security는 이러한 위협 경보 중 하나를 분류하고, 엔드포인트 및 네트워크 필터링을 위해 관찰 가능한 항목을 추출하고, 배포된 Elastic 에이전트 제품군 전체에서 위협을 식별하고 완화하기 위한 새로운 악성코드 서명을 생성하는 방법을 자세히 설명했습니다.

조사 세부 정보

위협 탐색 & 모니터링 작업을 수행하던 중, Elastic Security 연구원들은 Elastic Agent 엔드포인트 센서에서 생성된 shellcode_thread Windows 메모리 보호 경고 클러스터를 확인했습니다. 이러한 특정 경고는 모두 동일한 클러스터 내에서 발생했고, 특이하게도 control.exe 프로세스를 표적으로 삼았다는 점에서 흥미로웠습니다. Windows control.exe 프로세스는 사용자가 컴퓨터 설정을 보고 조정할 수 있는 유틸리티인 제어판 항목의 실행을 처리합니다.

일반적으로 셸코드_스레드 보호에 대한 오탐이 관찰되면 광범위한 사용자 기반에서 확인되며, 대부분의 경우 다양한 게임 치트 방지 또는 DRM(디지털 저작권 관리) 메커니즘에 기인합니다. 이 경우 단일 클러스터와 Microsoft 서명된 대상 프로세스는 비정형적인 것으로 추가 조사가 필요합니다.

Elastic Security의 메모리 보호에 대한 자세한 내용은 여기에서, 인메모리 공격에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

알림의 이상값 특성에서 흥미를 느낀 저희는 추가 조사를 통해 위협을 검증하고 특성을 파악했습니다:

대상 프로세스는 서명된 Windows 바이너리입니다.

...
"process": {
     "args": [
       "control.exe",
       "Firewall.cpl",
       "{2D48D219-C306-4349-AE1F-09744DFFB5B9}"
     ],
     "Ext": {
       "code_signature": [
         {
           "trusted": true,
           "subject_name": "Microsoft Windows",
           "exists": true,
           "status": "trusted"
         }
       ],
       "dll": [
...

서명되지 않은 로드된 .dll

...
   "Ext": {
     "mapped_address": 1945501696,
     "mapped_size": 21135360
   },
   "path": "C:\\Windows\\SysWOW64\\tscon32.dll",
   "code_signature": [
     {
       "exists": false
     }
   ],
   "name": "tscon32.dll",
   "hash": {
     "sha1": "007970b7a42852b55379ef4cffa4475865c69d48",
     "sha256": "ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33",
     "md5": "2b6da20e4fc1af2c5dd5c6f6191936d1"
   }
 },
...

알림 스레드에서 모듈 시작

...
 "pe": {
   "original_file_name": "CONTROL.EXE"
 },
 "name": "control.exe",
 "pid": 5284,
 "thread": {
   "Ext": {
     "start_address_module": "C:\\Windows\\SysWOW64\\tscon32.dll",
...

메모리 영역 메타데이터 알림

...
"memory_region": {`
   "region_size": 73728,
   "region_protection": "RWX",
   "allocation_base": 81395712,
   "bytes_allocation_offset": 0,
   "allocation_type": "PRIVATE",
   "memory_pe_detected": true,
   "region_state": "COMMIT",
   "strings": [
     "QSSSSSSh ",
     ...
     "bad cast",
     "Local\\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}",
     "Netapi32.dll",
     "NetWkstaGetInfo",
     "NetApiBufferFree",
     "\\\\.\\pipe\\{A06F176F-79F1-473E-AF44-9763E3CB34E5}",
     "list<T> too long",
     "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll",
     "DllEntry",
     ...
     ".?AVbad_alloc@std@@",
     "C:\\Windows\\syswow64\\control.exe",
     ":z:zzzzzz7",
     ...
     "InternalName",
     "mobsync.exe",
     "LegalCopyright",
...

피벗을 위한 스레드 데이터

...
"thread": {
 "Ext": {
   "start_address_bytes": "8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300",
   ...
   "start_address_bytes_disasm": "mov edi, edi\npush ebp\nmov ebp, esp\ncall 0x000043f0\ncall 0x000043ea\npush eax\ncall 0x000043d0\ntest eax, eax\njnz 0x00000038\npush dword ptr [ebp+0x08]"
 },
...

예제 알림에서 먼저 스레드가 시작된 dll/모듈인 start_address_module을 식별합니다. C:\Windows\SysWOW64\tscon32.dll은 경고한 스레드의 start_address_module입니다. 또한 유일하게 서명되지 않은 dll이 로드되어 있으므로 집중적으로 작업하기에 좋은 곳입니다. 샘플에 대해 이전에 공개된 정보를 확인하기 위해 VirusTotal에서 해시값을 확인할 때 아무런 결과가 표시되지 않았습니다.

좀 더 자세히 살펴보면 알림 스레드의 첫 번째 32 바이트인 start_address_bytes를 살펴봤습니다. 시작_주소_바이트(8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300)의 값을 사용하여 콘텐츠를 쿼리하여 VirusTotal에서 피벗을 검색할 수 있습니다: {8bff558bec56e83f3e0000e8343e000050e8143e000085c0752a8b750856e821}. 비교적 적은 수의 결과를 확인했지만, 2021년 7월에 처음 제출된 아래 항목이 포함되어 있습니다.

바이러스 토탈의 결과를 조사하는 과정에서 위협 연구자 펠릭스 빌스타인(@fxb_b)이 크라우드소싱된 YARA 규칙을 작성하여 이를 PHOREAL 백도어로 식별한 것을 확인할 수 있었습니다. 콘텐츠 탭으로 이동하면 알림의 일부 문자열을 이전에 VirusTotal에 보고된 내용과 비교할 수 있습니다.

위에서 식별한 고유 문자열과 시작_주소_바이트를 사용하여 아래와 같이 고유 문자열($a)과 시작_주소_바이트($b)를 16진수 값으로 변환하여 YARA 서명을 만들 수 있습니다.

변환된 YARA 문자열

strings:
          \\  "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}"  ascii wide
    $a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
            30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
            31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
            2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
            45 00 35 00 7D 00 }

          \\  "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}"  ascii wide
    $a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
            33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
            32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
            37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }

          \\  "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll"  ascii
    $a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
            34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }

          \\  PHOREAL start_address_bytes sequence
          \\  mov edi, edi; push ebp; mov ebp, esp; call 0x000043f0;
          \\  call 0x000043ea; push eax; call 0x000043d0; test eax, eax;
          \\  jnz 0x00000038; push dword ptr [ebp+0x08]
    $str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
            00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
condition:
    2 of them

이 규칙은 Elastic 에이전트에 배포될 때 고객에게 PHOREAL을 식별하고 (메모리 보호가 켜져 있는 고객 환경에서는) shellcode_thread 메모리 보호를 통해 이미 제공된 백스톱 방지를 차단합니다. 저희의 경우 이 규칙을 배포함으로써 코발트 스트라이크 비콘 수집하기 문서에서 설명한 것과 동일한 메커니즘을 사용하여 악성 스레드를 수집할 수 있었습니다.

새로운 YARA 아티팩트가 배포된 직후, 메모리에서 캡처된 악성 스레드와 함께 새로운 malware_signature 경고를 받았습니다. 악성코드 분석 및 리버스 엔지니어링(MARE) 팀의 수동 바이너리 분류는 샘플과 과거 보고서의 구조와 기능을 비교하여 샘플이 포리얼/리조임을 빠르게 확인했습니다. 또한 2018년 CYLANCE OceanLotus 백서에 설명된 대로 RCDATA 리소스에서 RC4 암호화된 도메인을 추출할 수 있었습니다.

MARE가 식별한 도메인(thelivemusicgroup[.]com)은 현재 103.75.117[.]250으로 확인됩니다. Oneprovider[.]com이 소유하고 있습니다, 캐나다에 본사를 둔 전용 서버 호스팅 회사로 전 세계에 데이터 센터가 분산되어 있습니다.

https:// ipinfo.io/ 103.75.117[.]250에 대한 쿼리 결과

{
  "ip": "103.75.117[.]250",
  "city": "Hong Kong",
  "region": "Central and Western",
  "country": "HK",
  "loc": "22.2783,114.1747",
  "org": "AS133752 Leaseweb Asia Pacific pte. ltd.",
  "timezone": "Asia/Hong_Kong",
  "asn": {
    "asn": "AS133752",
    "name": "Leaseweb Asia Pacific pte. ltd.",
    "domain": "leaseweb.com",
    "route": "103.75.117[.]0/24",
    "type": "hosting"
  },
  "company": {
    "name": "Oneprovider.com - Hong Kong Infrastructure",
    "domain": "oneprovider[.]com",
    "type": "hosting"
  },
  "privacy": {
    "vpn": false,
    "proxy": false,
    "tor": false,
    "relay": false,
    "hosting": true,
    "service": ""
  },
  "abuse": {
    "address": "1500 Ste-Rose LAVAL H7R 1S4 Laval Quebec, Canada",
    "country": "CA",
    "email": "info@oneprovider.com",
    "name": "ONE PROVIDER",
    "network": "103.75.117[.]0/24",
    "phone": "+1 514 286-0253"
  },
  "domains": {
    "ip": "103.75.117[.]250",
    "total": 2,
    "domains": [
      "thelivemusicgroup[.]com",
      "cdn-api-cn-1[.]com"
    ]
  }

도메인에 대한 대부분의 흥미로운 정보는 비공개로 보호되지만 아래 그림의 "업데이트됨" 및 "생성됨" 날짜는 이 도메인이 악의적으로 사용된 기간을 제한하는 데 유용할 수 있습니다.

Elastic 에이전트는 침해 이후 배포된 것으로 보이며, 이로 인해 초기 액세스 경로를 파악하는 데 한계가 있었습니다. 2017년 맨디언트 보고서에 따르면 PHOREAL은 피해자 분류 및 악용 후 후속 조치를 위한 '거점 구축' 용도로 배포될 수 있다고 합니다.

분석

Elastic Security는 다이아몬드 모델을 활용하여 침입의 공격자와 피해자 간의 높은 수준의 관계를 설명합니다.

적대적 평가 정당화

관찰된 활동과 이전 보고를 바탕으로 높은 확신을 가지고 REF4322가 APT32/OceanLotus이며 이 사건의 배후에 있는 것으로 평가합니다. APT32는 특히 베트남에 관심이있는 동남아시아 정부 및 기업 또는 기타 국제 기업을 대상으로 부터 활동해 왔습니다. 2014 APT32는 현재 PHOREAL 백도어를 운영하는 것으로 확인된 유일한 그룹이며, 이번 피해자는 이전의 전형적인 특정 APT32 피해자들의 지역 및 산업별 프로필과 일치합니다.

결론

YARA 규칙

이 PHOREAL 활동을 식별하기 위해 YARA 규칙을 만들었습니다.

REF4322/APT32 인메모리 백도어 PHOREAL/Rizzo를 탐지하는 Yara 규칙

rule Windows_Trojan_PHOREAL {
    meta:
        Author = "Elastic Security"
        creation_date = "2022-02-16"
        last_modified = "2022-02-16"
        os = "Windows"
        arch = "x86"
        category_type = "Trojan"
        family = "PHOREAL"
        threat_name = "Windows.Trojan.PHOREAL"
        description = "Detects REF4322/APT32 in-memory backdoor PHOREAL/Rizzo."
        reference_sample = "88f073552b30462a00d1d612b1638b0508e4ef02c15cf46203998091f0aef4de"


    strings:
              \\  "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}"  ascii wide
        $a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
                30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
                31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
                2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
                45 00 35 00 7D 00 }

              \\  "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}"  ascii wide
        $a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
                33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
                32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
                37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }

              \\  "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll"  ascii
        $a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
                34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }

              \\  PHOREAL start_address_bytes sequence
        $str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
                00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
    condition:
        2 of them
}

방어 권장 사항

다음 단계를 활용하여 네트워크의 보호 태세를 개선할 수 있습니다:

  1. Windows 엔드포인트에서 Elastic Security 메모리 보호 활성화
  2. 위에 포함된 YARA 서명을 활용하여 조직 내에 PHOREAL 활동이 존재하는지 확인하세요.
  3. 식별된 네트워크 IOC를 오가는 네트워크 트래픽을 모니터링 또는 차단하고 영향을 받는 시스템을 적절히 수정하세요.

참고 자료

문서 전체에서 다음과 같은 연구를 참조하였습니다.

Observables

표시기유형참조참고
thelivemusicgroup[.]com도메인 이름멀웨어로 암호화된 C2 도메인
103.75.117[.]250IPv4-addrthelivemusicgroup[.]com의 확인된 IP
ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33SHA256tscon32.dllPHOREAL dll

아티팩트

아티팩트는 결합된 압축 번들로 ECS 및 STIX 형식으로도 다운로드할 수 있습니다.