제퍼넷 로고

워터링 홀, 아시아에 새로운 macOS 악성코드 DazzleSpy 배포

시간

홍콩 민주화 라디오 방송국 웹사이트가 사이트 방문자의 Mac에 사이버 스파이 맬웨어를 설치한 Safari 익스플로잇을 제공하도록 손상되었습니다.

11 월 11th, Google TAG 게시 블로그 게시물 macOS에서 실행되는 Safari 웹 브라우저에 대한 익스플로잇으로 이어지는 워터링 홀 공격에 대해 설명합니다. ESET 연구원은 해당 출판물이 발행되기 일주일 전에 이 캠페인을 조사하여 피해자를 손상시키는 데 사용된 대상 및 맬웨어에 대한 추가 세부 정보를 알아냈습니다. 여기에서는 Mac 사용자를 손상시키는 데 사용된 WebKit 익스플로잇에 대한 분석과 macOS를 대상으로 하는 새로운 맬웨어 제품군인 페이로드에 대한 분석을 제공합니다. 하지만 먼저 피해자들이 악성코드를 처음 접하게 된 경로부터 살펴보자.

목표

그건 신고 SEKOIA.IO의 Felix Aimé는 익스플로잇을 전파하는 데 사용된 웹사이트 중 하나가 홍콩 활동가를 표적으로 하는 가짜 웹사이트라고 밝혔습니다. 우리는 홈페이지에서 "광복 홍콩, 우리 시대의 혁명"을 읽을 수 있습니다. 가장 최근의 등록 날짜 Fightforhk[.]com 도메인, 19월 XNUMX일th, 2021, 그리고 웹사이트에 더 이상 액세스할 수 없다는 사실이 그 아이디어를 뒷받침합니다. 우리는 또한 확인할 수 있습니다 인터넷 아카이브 13월 XNUMX일에 웹 페이지 사본을 캐시했습니다.th. 이 사본에는 악성 iframe이, 그림 1에서 볼 수 있듯이.

그림 1. Fightforhk[.]com, 13월 XNUMX일 Wayback Machine에 의해 보관됨

ESET 연구원은 Google TAG가 게시되기 몇 개월 전에 동일한 익스플로잇을 배포한 합법적인 웹사이트인 온라인, 홍콩, 친민주주의 라디오 방송국을 발견했습니다. D100. 그림 2에서 볼 수 있듯이, iframe이 에서 제공하는 페이지에 주입되었습니다. bc.d100[.]넷 – 가입자가 사용하는 웹사이트 섹션 – 30월 XNUMX일 사이th 11 월 4th 2021.

두 배포 방식에는 공통점이 있습니다. 민주화에 동조하여 홍콩에서 방문객을 끌어들이는 것입니다. 그들이 이 위협의 주요 표적이었던 것 같습니다.

그림 2. 발췌 https://bc.d100[.]net/Product/Subscription 4년 2021월 XNUMX일

익스플로잇 체인

그림 3에서 볼 수 있듯이 악성 웹사이트에서 호스팅되는 페이지는 amnestyhk[.]org 도메인은 설치된 macOS 버전을 확인하고 브라우저가 macOS 10.15.2 이상에서 실행 중인 경우 다음 단계로 리디렉션합니다.

그림 3. 내용 defaultaa.html 페이지 amnestyhk[.]org

다음 단계로 명명된 4ba29d5b72266b28.html (그림 4 참조) 익스플로잇 코드가 포함된 JavaScript를 로드하기만 하면 됩니다. 맥.js.

그림 4. 4ba29d5b72266b28.html 페이지의 내용

로드할 스크립트 태그 caps.js 주석 처리되었습니다. 익스플로잇의 이전 버전이 로드됨 캡스톤.js 새 버전에 있는 동안 해당 파일에서 캡스톤.js 익스플로잇 코드 앞에 추가됩니다. 맥.js.

WebKit 익스플로잇

브라우저에서 코드 실행을 얻는 데 사용되는 익스플로잇은 매우 복잡하며 일단 멋지게 포맷되면 1,000줄 이상의 코드가 있습니다. 취약점이 iOS 및 PAC 지원(포인터 인증 코드) iPhone XS 이상과 같은 장치는 그림 5와 같이 주석 처리되었습니다.

그림 5. iOS 및 PAC 지원 장치를 대상으로 하는 방법에 대한 설명이 포함된 JavaScript 익스플로잇 발췌

우리는 확인했습니다 패치 Google TAG에 의해 식별된 취약점을 수정합니다. 이 취약점이 할당되었을 가능성이 있지만 CVE-2021-1789, 공개적으로 사용 가능한 기술 세부 정보가 부족하여 확인할 수 없습니다. 아래에서 취약점이 14.1 이전의 Safari 버전에 미치는 영향에 대한 이해를 간략하게 설명합니다.

익스플로잇은 메모리 읽기 및 쓰기 액세스를 얻기 위해 두 가지 기본 요소를 구현합니다. 하나는 객체의 주소를 누출하는 것입니다(애드로프) 그리고 하나는 주어진 메모리 주소에서 가짜 JavaScript 객체를 만드는 것입니다(가짜). 이 두 함수를 사용하여 익스플로잇은 메모리에서 겹치는 서로 다른 유형의 두 배열을 생성하므로 다른 하나를 사용하여 액세스할 때 포인터로 처리되는 값을 그 중 하나에 설정할 수 있습니다. 이 기술은 Samuel Groß의 그의 저서에서 잘 설명되어 있습니다. 여러 출판물 주제에. 아래에서는 개체 주소 누출을 가능하게 한 취약점에 대해 설명합니다.

이 익스플로잇은 JIT 컴파일 코드에서 개체의 속성을 열거하는 동안 "getter" 함수를 통해 액세스할 수 있도록 개체 속성을 수정하여 발생하는 부작용에 의존합니다. JavaScript 엔진은 속성 값이 배열에 캐시되어 있으며 getter 함수를 호출한 결과가 아니라고 잘못 추측합니다. 우리는 코드의 관련 부분을 추출했습니다. 애드로프 그림 6에서 볼 수 있는 프리미티브. (e)r ESET Research에서 제공합니다.

그림 6. 개체 주소 누출을 가능하게 하는 익스플로잇의 주석이 달린 발췌 부분

여기서 발생하는 첫 번째 부패는 다음과 같은 결과입니다. 바(빅). 이 함수는 JSCell 객체에 대한 포인터를 반환합니다(더 정확하게 말하면, 게터세터), JavaScript 코드에서 액세스할 수 없습니다. 다음은 결과입니다. 설명(막대(빅)) JavaScriptCore 콘솔에서:

세포: 0x7fffb34dc080 (0x7ffff38cc4c8:[0x3af5, 게터세터, {}, 비배열, 리프]), 구조 ID: 15093

이 JSCell은 JavaScript를 호출하여 JSObject로 변환됩니다. 목적 기능. 내부적으로 이것은 JSCell을 호출하는 결과를 가져옵니다. 반대하다 방법. GetterSetter를 JSObject로 변환하는 구현이 없으며 코드는 결국 폴백하고 해당 유형이 Symbol이라고 가정합니다.. GetterSetter가 잘못 캐스팅됩니다. 상징. 코드에서 캐스트를 수행하기 전에 셀 유형이 기호라는 주장을 보았을 것입니다. 그러나, 그 주장하다 WebKit의 매크로는 릴리스 빌드에서 컴파일됨.

기억 속의 위치는 게터[0] 이 손상된 기호의 값과 동일합니다. 따라서 값을 재할당 게터[0] 기호의 값을 변경합니다. 값은 다음을 사용하여 JavaScript에서 가져옵니다. toString 방법.

업데이트된 JavaScriptCore 코드는 이제 개체가 GetterSetter가 있는 속성을 포함합니다. 속성 열거 후, 개체의 속성에 "빠르게" 액세스할 수 있는지 여부를 고려하기 전에.

가짜 개체 생성을 자세히 설명하려면 자체 기사가 필요합니다. 간단히 말해서, 이번에는 JIT 컴파일된 코드가 범위를 벗어난 항목에 액세스하고 가져오기 전에 힙에 조심스럽게 뿌려진 주소를 반환하는 방식으로 개체가 조작되지만 동일한 버그를 남용합니다.

나머지 코드는 다음과 같은 완화를 우회할 수 있습니다. 기가케이지, 다음 단계를 로드합니다.

Google TAG에서 설명한 대로 JavaScript는 Mach-O 실행 파일을 메모리에 로드합니다. 기본 로더는 외부 라이브러리에서 기호 가져오기를 구현하지 않습니다. 대신 주소 드로펜dlsym 로드된 Mach-O에 패치됩니다. 그런 다음 실행 파일에서 이를 사용하여 외부 라이브러리에서 함수 주소를 동적으로 로드하고 가져올 수 있습니다.

루트로 권한 에스컬레이션

이제 코드 실행이 이루어졌으므로 다음 단계는 메모리에 로드되어 실행되는 Mach-O입니다. 이 Mach-O는 로컬 권한 상승 취약점을 악용하여 다음 단계를 루트로 실행합니다. 우리의 조사는 악용된 취약점이 Xinru Chi와 Tielei Wang에 의해 설명된 Google의 분석을 확인합니다. zer0con 2021에서 프레젠테이션, 그러나 그것은 또한 MOSEC 2021에서 더 자세히 발표 Tielei 왕. 취약점이 할당되었습니다. CVE-2021-30869. 그림 7은 Tielei Wang이 호출한 함수에 대한 호출을 보여줍니다. adjust_port_type 그의 마지막 프레젠테이션에서. Mach 포트의 내부 유형을 변경하는 기능을 담당하는 이 기능은 MOSEC에서 발표된 것과 동일한 방식으로 Mach-O에서 구현됩니다. 취약점이 존재하지 않는 한 마하 포트 유형을 변경하는 것은 불가능합니다.

그림 7. 포트 유형 변경 IKOT_NAMED_ENTRYIKOT_HOST_PRIV 특별한 (특권) 마하 포트에 접근하기 위해

요약하자면, Mach-O는 다음을 수행합니다.

  1. 인수로 제공된 URL에서 파일을 다운로드합니다.
  2. AES-128-EBC 및 사용자 지정 델타가 있는 TEA를 사용하여 이 파일의 암호를 해독합니다.
  3. 결과 파일을 씁니다. $TMPDIR/공항 쌍 실행 가능하게 만듭니다.
  4. 권한 상승 익스플로잇을 사용하여 com.apple.quarantine속성 사용자에게 서명되지 않은 실행 파일의 시작을 확인하도록 요청하지 않도록 파일에서
  5. 동일한 권한 상승을 사용하여 루트 권한으로 다음 단계를 시작합니다.

해독된 페이로드는 우리의 분석이 Google TAG에서 설명한 것과 가장 다른 부분입니다. D100 사이트의 취약한 방문자에게 전달된 페이로드는 우리가 DazzleSpy라고 명명한 새로운 macOS 맬웨어였습니다.

대즐스파이

DazzleSpy는 공격자가 손상된 컴퓨터를 제어하고 파일을 추출할 수 있는 다양한 기능을 제공하는 완전한 기능의 백도어입니다. 샘플은 x86_64 CPU 아키텍처용으로 컴파일된 Mach-O 바이너리 파일입니다.

고집

감염된 장치에서 지속하기 위해 멀웨어는 다음과 같은 속성 목록 파일(plist, 그림 8 참조)을 추가합니다. com.apple.softwareupdate.plist ~로 LaunchAgents 폴더. 맬웨어 실행 파일의 이름은 소프트웨어 업데이트 그리고 에 저장 $홈/.로컬/ 폴더에 있습니다.

그림 8. 속성 목록 파일 LaunchAgents 폴더

씨앤씨커뮤니케이션즈

DazzleSpy는 하드코딩된 C&C 서버에 연결합니다. 우리가 해독한 샘플에서 찾은 IP 주소와 포트는 88.218.192[.]128:5633. 처음에 멀웨어는 TLS 핸드셰이크를 수행한 다음 사용자 지정 프로토콜을 사용하여 JSON 개체를 교환하여 C&C 서버에서 감염된 Mac으로 명령을 전달합니다. DazzleSpy의 바이너리에는 인증 기관(CA)으로 사용되는 X.509 인증서가 포함되어 있습니다. 서버의 인증서가 해당 기관에서 발급되었는지 확인합니다. 실제로는 동일한 자체 서명 인증서가 CA와 C&C 서버 모두에 사용됩니다. 이 기술은 종단 간 암호화가 불가능한 경우 데이터 전송을 거부하여 잠재적인 도청으로부터 멀웨어의 통신을 보호합니다.

표 1에는 DazzleSpy에서 지원하는 명령 목록이 나와 있습니다. 첫 번째 열은 C&C 서버에서 수신한 JSON 개체에 있어야 하는 명령의 이름입니다. 많은 것이 선택 또는 필수 매개변수를 지원합니다.

표 1. DazzleSpy C&C 명령

명령 이름 목적
하트 비트 하트비트 응답을 보냅니다.
정보 다음을 포함하여 손상된 컴퓨터에 대한 정보를 수집합니다.
 • 하드웨어 UUID 및 Mac 일련 번호
 • 사용자 이름
 • 디스크 및 디스크 크기에 대한 정보
 • macOS 버전
 • 현재 날짜 및 시간
 • Wi-Fi SSID
 • IP 주소
 • 주요 실행 파일의 맬웨어 바이너리 경로 및 MD5 해시
 • 멀웨어 버전
 • 시스템 무결성 보호 상태
 • 현재 권한
 • 사용 가능 여부 CVE-2019-8526 열쇠 고리를 버리다
검색파일 손상된 시스템에서 지정된 파일을 검색합니다.
스캔파일 파일을 열거합니다. 바탕 화면, 다운로드서류 폴더.
cmd를 제공된 쉘 명령을 실행합니다.
다시 시작CMD 쉘 세션을 다시 시작합니다.
다시 시작 제공된 매개변수에 따라: C&C 명령 세션, 셸 세션 또는 RDP 세션을 다시 시작하거나 가능한 맬웨어 추적(fsck_hfs.log 파일 및 애플리케이션 로그).
프로세스 정보 실행 중인 프로세스를 열거합니다.
키 체인 macOS 버전이 2019보다 낮은 경우 CVE-8526-10.14.4 익스플로잇을 사용하여 키체인을 덤프합니다. 공개 키스틸 구현이 사용됩니다.
다운로드파일정보 제공된 폴더를 열거하거나 제공된 파일 이름에 대한 생성 및 수정 타임스탬프와 SHA-1 해시를 제공합니다.
다운로드파일 제공된 경로에서 파일을 추출합니다.
파일 파일 작업: 정보를 제공하고, 제공된 경로에서 파일의 이름을 바꾸거나, 제거하거나, 이동하거나, 실행합니다.
제거 감염된 컴퓨터에서 자신을 삭제합니다.
RDP 정보 원격 화면 세션에 대한 정보를 제공합니다.
RDP 원격 화면 세션을 시작하거나 종료합니다.
마우스 이벤트 원격 화면 세션에 대한 마우스 이벤트를 제공합니다.
수락 파일 정보 파일 전송을 준비합니다(제공된 경로에 폴더 생성, 존재하는 경우 파일 속성 변경).
수락파일 제공된 파일을 디스크에 씁니다. 추가 매개변수를 사용하여 CVE-2019-8526 취약점을 악용하는 데 필요한 파일을 자체 업데이트하거나 기록합니다.
양말 5 SOCKS5 세션을 시작하거나 종료합니다(구현되지 않음).
복구 정보 파티션 스캔과 관련된 파일 복구 기능처럼 보입니다. 이러한 기능은 작동하지 않는 것으로 보이며 아마도 아직 개발 중일 것입니다. 여기에는 하드코딩된 값이 많이 포함되어 있습니다.
회복

유물

DazzleSpy 바이너리를 분석하는 동안 악성 코드의 내부 이름과 작성자의 출처를 암시할 수 있는 흥미로운 아티팩트를 여러 개 발견했습니다.

여러 위치(예: 그림 9 참조)에서 맬웨어는 다음을 참조합니다. osxrk 그리고 문자열 1.1.0 내부 버전 번호인 것 같습니다.

그림 9. DazzleSpy 악성코드의 가능한 내부 이름 및 버전 번호

또한 DazzleSpy의 작성자는 사용자 이름을 남겼기 때문에 운영 보안에 대해 그다지 걱정하지 않은 것 같습니다. 왕핑 바이너리에 포함된 경로에서. 그림 10에는 이 사용자 이름과 내부 모듈 이름을 나타내는 경로가 포함되어 있습니다.

그림 10. DazzleSpy 바이너리에 포함된 경로

악성코드가 손상된 컴퓨터에서 현재 날짜와 시간을 획득하면 그림 11에서 볼 수 있듯이 획득한 날짜를 C&C 서버로 보내기 전에 아시아/상하이 표준시(일명 중국 표준시)로 변환합니다.

그림 11. 디컴파일된 코드 getSystemDate 기능

또한 DazzleSpy 악성코드에는 그림 12와 같이 중국어로 된 내부 메시지가 다수 포함되어 있다는 점에 유의해야 합니다.

그림 12. 중국어 내부 오류 메시지

결론

이 캠페인에 사용된 익스플로잇의 복잡성을 고려할 때 이 작업의 배후 그룹이 강력한 기술 능력을 가지고 있다고 평가합니다. 여기에 사용된 LPE(로컬 권한 상승) 취약점에 대한 정보가 온라인에 게시되어 있지만 Safari에서 코드를 실행하는 데 사용되는 특정 WebKit 취약점에 대한 정보는 찾을 수 없습니다. DazzleSpy에서 종단 간 암호화가 시행되고 누군가가 손상된 시스템과 C&C 서버 사이에 TLS 검사 프록시를 삽입하여 암호화되지 않은 전송을 도청하려고 하면 C&C 서버와 통신하지 않는다는 점도 흥미롭습니다.

이 그룹이 추구한 물의 구멍 작전은 목표가 홍콩에서 정치적으로 활동적이고 민주화를 지지하는 개인일 가능성이 있음을 보여줍니다. 이 캠페인은 LightSpy iOS 맬웨어(설명: TrendMicro카스퍼 스키)를 사용하여 같은 방식으로 배포되었습니다. iframe이 WebKit 익스플로잇으로 이어지는 홍콩 시민을 위한 웹사이트에 주입. 현재로서는 두 캠페인이 동일한 그룹에 속하는지 확인할 수 없지만 ESET Research는 유사한 악성 활동을 계속 추적하고 보고할 것입니다.

침해 지표(IoC)

견본

SHA-1 파일 이름 ESET 탐지 이름 상품 설명
F3772A23595C0B51AE32D8E7D601ACBE530C7E97 맥.js JS/Exploit.Agent.NQK WebKit 익스플로잇이 있는 JavaScript 코드는 LPE를 시작합니다.
95889E0EF3D31367583DD31FB5F25743FE92D81D 해당 사항 없음 OSX/Exploit.Agent.C LPE가 다음 단계를 시작하는 Mach-O 파일.
EE0678E58868EBD6603CC2E06A134680D2012C1B 서버.enc OSX/대즐스파이 DazzleSpy Mach-O의 암호 해독 후 서버.enc.

파일명

  • $HOME/라이브러리/LaunchAgents/com.apple.softwareupdate.plist
  • $HOME/.local/소프트웨어 업데이트
  • $HOME/.local/security.zip
  • $HOME/.local/security/keysteal데몬
  • $HOME/.local/보안/libkeystealClient.dylib

네트워크

Safari 익스플로잇의 URL

  • https://amnestyhk[.]org/ss/defaultaa.html
  • https://amnestyhk[.]org/ss/4ba29d5b72266b28.html
  • https://amnestyhk[.]org/ss/mac.js
  • https://amnestyhk[.]org/ss/server.enc

DazzleSpy C&C 서버

  • 88.218.192[.]128:5633

DazzleSpy CA 인증서

SHA-256 : 1F862B89CC5557F8309A6739DF30DC4AB0865668193FDFF70BA93F05D4F8C8B8

MITRE ATT&CK 기술

이 테이블은 다음을 사용하여 제작되었습니다. 버전 10 MITRE ATT&CK 프레임워크.

술책 ID 성함 상품 설명
자원 개발 T1583.001 인프라 획득: 도메인 다음과 같은 도메인 이름 amnestyhq[.]org 손상된 웹 서버에서 사용하기 위해 획득했습니다.
T1583.004 인프라 확보: 서버 서버(또는 가상 서버)는 WebKit 익스플로잇을 제공하기 위해 임대되었으며 DazzleSpy의 C&C 서버로 사용되었습니다.
T1584.004 침해 인프라: 서버 추가하기 위해 합법적인 웹사이트가 손상되었습니다. iframe이 악성 JavaScript 코드를 로드합니다.
T1587.001 기능 개발: 맬웨어 DazzleSpy는 피해자의 정보를 훔치기 위해 개발된 macOS 맬웨어입니다.
T1587.003 역량 개발: 디지털 인증서 DazzleSpy는 X.509 인증서를 사용하여 C&C 서버의 신뢰성을 확인합니다.
T1587.004 기능 개발: 활용 문서화되지 않은 Safari 익스플로잇이 대상을 손상시키는 데 사용되었습니다.
T1608.004 무대 기능: 드라이브 바이 타겟 이 작업은 대상이 방문할 가능성이 있는 웹사이트를 손상시켜 악성코드를 배포합니다.
초기 액세스 T1189 드라이브 바이 타협 감염된 웹 사이트는 Mac에서 Safari를 사용하는 방문자에게 익스플로잇을 제공했습니다.
실행 T1569 시스템 서비스 익스플로잇은 Mach 메시지를 런칭 검역 플래그를 제거하고 쿤드 악성코드를 실행합니다.
고집 T1543.001 시스템 프로세스 생성 또는 수정: 에이전트 시작 DazzleSpy는 Launch Agent를 설치하여 지속됩니다.
권한 에스컬레이션 T1068 권한 상승을 위한 악용 macOS용 LPE 익스플로잇은 권한을 루트로 승격하는 데 사용됩니다.
방어 회피 T1620 반사 코드 로딩 다음 단계를 다운로드하는 LPE 익스플로잇은 메모리에서만 로드되고 실행됩니다.
자격 증명 액세스 T1555.001 암호 저장소의 자격 증명: 키체인 DazzleSpy는 macOS 키체인에서 자격 증명을 훔칠 수 있습니다.
발견 T1083 파일 및 디렉토리 검색 DazzleSpy를 사용하여 특정 폴더의 파일을 열거할 수 있습니다.
T1057 프로세스 발견 DazzleSpy는 실행 중인 프로세스 목록을 얻을 수 있습니다.
T1082 시스템 정보 검색 DazzleSpy는 macOS 버전을 얻을 수 있습니다.
T1016 시스템 네트워크 구성 검색 DazzleSpy는 IP 주소와 Wi-Fi SSID를 얻을 수 있습니다.
T1033 시스템 소유자/사용자 검색 DazzleSpy는 손상된 Mac에서 현재 사용자 이름을 얻을 수 있습니다.
T1124 시스템 시간 검색 DazzleSpy는 손상된 Mac에서 시스템 시간을 얻을 수 있습니다.
수집 T1005 로컬 시스템의 데이터 DazzleSpy는 손상된 시스템에서 문서를 검색할 수 있습니다.
T1113 화면 캡처 DazzleSpy에는 화면 활동을 기록하는 기능이 있습니다.
명령 및 제어 T1071 애플리케이션 계층 프로토콜 DazzleSpy는 C&C 통신에 맞춤형 JSON 기반 프로토콜을 사용합니다.
T1132.001 데이터 인코딩: 표준 인코딩 DazzleSpy는 base64를 사용하여 C&C 통신의 일부를 인코딩합니다.
T1573 암호화된 채널 DazzleSpy는 TLS 암호화를 사용합니다.
T1571 비표준 포트 DazzleSpy는 TCP 포트 5633을 사용합니다.
여과 T1041 C2 채널을 통한 유출 DazzleSpy는 C&C 통신 채널을 통해 데이터를 추출합니다.

spot_img

최신 인텔리전스

spot_img