조커스파이를 노출시킨 초기 연구

2023년 6월, 일본에 위치한 암호화폐 거래소를 익스플로잇하기 위해 커스텀 및 오픈 소스 macOS 도구를 배포한 조커스파이(JOKERSPY)에 대한 개요입니다.

JOKERSPY를 폭로하는 초기 연구

핵심 사항

  • 이것은 활성 침입에 대한 초기 알림으로, 다음과 같은 추가 세부 정보가 포함되어 있습니다.
  • REF9134는 정찰 및 명령 및 제어를 위한 맞춤형 및 오픈 소스 도구를 활용합니다.
  • 이 활동의 대상에는 일본의 암호화폐 거래소가 포함됩니다.

서문

이 연구 문서에서는 최근에 발견된 REF9134라는 침입을 살펴봅니다. 이 침입은 sh.py 백도어를 사용하여 macOS Swiftbelt 열거 도구를 배포하는 것과 관련이 있습니다. sh.py와 xcc는 최근 비트디펜더에 의해 조커스파이로 불리고 있습니다.

구체적으로 이 연구는 다음과 같은 내용을 다룹니다:

  • 엘라스틱 시큐리티 랩이 공격자 그룹의 정찰을 식별한 방법
  • xcc , sh.py 백도어 설치 및 열거 도구를 배포하여 탐지를 회피하는 공격자의 단계

이 공격에 대한 자세한 내용은 추후에 공개될 예정입니다.

Overview

2023년 5월 말, 일본의 유명 암호화폐 거래소에서 기존 액세스 권한을 가진 공격자가 바이너리( xcc ) 실행을 감지한 진단 엔드포인트 경보 중 하나를 트리거했습니다. xcc는 Apple에서 신뢰하지 않으며, 공격자는 기본 macOS 도구 코드 서명을 사용하여 자체 서명했습니다. 이 탐지 자체가 반드시 무해한 것은 아니었지만, 초기 경고 이후 관찰된 업계 수직 및 추가 활동은 저희의 눈길을 사로잡았고 더 세심한 주의를 기울이게 했습니다.

xcc 를 실행한 후 위협 행위자가 자체 TCC 데이터베이스를 생성하고 기존 데이터베이스를 대체하여 TCC 권한을 우회하려고 시도하는 것을 관찰했습니다. 6월 1일에는 xcc와 동일한 디렉토리에서 실행되는 새로운 Python 기반 도구가 발견되었으며, Swiftbelt로 알려진 오픈 소스 macOS 사후 익스플로잇 열거 도구를 실행하는 데 사용되었습니다.

분석

REF9134는 비트코인, 이더리움 및 기타 일반적인 암호화폐 거래를 위한 자산 교환에 중점을 둔 일본의 대형 암호화폐 서비스 제공업체에 침입한 공격입니다.

xcc 바이너리

xcc ( d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8 )는 현재 시스템 권한을 평가하는 데 사용되는 Swift로 작성된 자체 서명된 다중 아키텍처 바이너리입니다. Elastic 보안 연구소에서 관찰한 버전은 XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4 로 서명되어 있으며, 공개적으로 알려진 신뢰할 수 없는 페이로드와 유사한 코드 서명을 가지고 있습니다.

동일한 식별자로 서명된 다른 바이너리를 식별하기 위해 XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4를 16진수로 변환하고 VirusTotal을 검색하여 3 추가 샘플( 콘텐츠:{5850726f74656374436865636b2d35353535343934346637343039366138333662373333313062643535643937643164666635636434} ).

각각은 구조적 차이가 있지만 동일한 핵심 기능을 포함하고 있습니다. 이러한 불일치는 이러한 변종 xcc가 실행을 방해하는 엔드포인트 기능을 우회하기 위해 개발되었음을 나타낼 수 있습니다.

xcc 가 생성된 직후 연구원들은 위협 행위자가 기존 TCC 데이터베이스인 /도서관/애플리케이션 지원/com.apple.TCC/TCC.db를 통해 /Users/Shared/tcc.db 를 복사하는 것을 관찰했습니다. 이를 통해 위협자는 시스템 사용자에게 표시되는 TCC 프롬프트를 피하는 동시에 광범위한 파일 쓰기 권한이 있는 디렉터리를 악용할 수 있습니다.

XCode 아티팩트

이 바이너리를 분석하는 동안 연구원들은 /Users/joker/Developer/Xcode/DerivedData/와 /Users/joker/Downloads/Spy/XProtectCheck/라는 두 가지 고유 경로가 비정상적인 것으로 확인했습니다. Xcode를 사용하여 코드를 컴파일하는 기본 경로는 /Users/[사용자 이름]/Developer/Xcode/DerivedData입니다.

TCC 남용

이러한 내사 권한은 기본 TCC(투명성, 동의 및 제어) 기능으로 관리됩니다. 연구원들은 xcc가 현재 화면이 잠겨 있는지, 현재 프로세스가 신뢰할 수 있는 접근성 클라이언트인지 확인할 뿐만 아니라 FullDiskAccess 및 ScreenRecording 권한을 검사한다고 판단했습니다.

디토네이트 환경에서 성공적으로 실행하면 다음과 같은 결과가 표시되었습니다:

사용자 지정 TCC 데이터베이스가 예상 위치에 배치되면 위협 행위자는 xcc 바이너리를 실행합니다.

최초 침투

xcc 바이너리는 bash를 통해 세 개의 개별 프로세스에 의해 실행되었습니다.

  • /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
  • /Applications/iTerm.app/Contents/MacOS/iTerm2
  • /애플리케이션/비주얼 스튜디오 Code.app/Contents/MacOS/Electron.

아직 조사 중이며 정보를 계속 수집하고 있지만, 이 멀웨어의 초기 액세스는 악성 또는 백도어 플러그인 또는 타사 종속성이 위협 행위자에게 액세스를 제공한 것으로 강력하게 추정하고 있습니다. 이는 악성 종속성이 있는 것으로 밝혀진 감염된 macOS QR코드 리더에 대한 트윗과 sh.py 백도어 버전에서 발견된 하드코딩 도메인을 연관시킨 Bitdefender의 연구원들이 발견한 연관성과 일치합니다.

배포된 암호화 라이브러리

5월 31일, 연구원들은 /Users/shared/keybag/에 배포된 세 개의 비네이티브 DyLib인 libcrypto.1.0.0.dylib, libncursesw.5.dylib, libssl.1.0.0.dylib를 관찰했습니다. MacOS에서 파일 및 키체인 데이터 보호를 위한 키는 키백에 저장되며 iOS, iPadOS, watchOS 및 tvOS와 관련이 있습니다. 현재 연구자들은 이러한 스테이징이 방어 회피 목적으로 사용되며 유용한 취약점이 포함되어 있을 수 있다고 추측하고 있습니다. 위협 행위자는 패치가 적용되지 않은 시스템이나 애플리케이션에 이러한 취약점을 도입할 계획을 세울 수 있습니다.

sh.py 백도어

sh.py는 스위프트벨트와 같은 다른 익스플로잇 후 기능을 배포하고 실행하는 데 사용되는 파이썬 백도어입니다.

이 멀웨어는 ~/Public/Safari/sar.dat에서 구성을 로드합니다. 구성 파일에는 명령 및 제어(C2) URL, 비콘을 위한 절전 타이머(기본값은 5 초), 각 상담원에게 할당된 고유한 9자리 식별자 등의 중요한 요소가 포함되어 있습니다.

이 멀웨어는 주기적인 비콘의 일부로 다양한 시스템 정보를 수집하고 전송합니다. 전송된 정보에는 다음이 포함됩니다:

  • 호스트 이름
  • 사용자 이름
  • 도메인 이름
  • 현재 디렉토리
  • 실행 가능한 바이너리의 절대 경로입니다.
  • OS 버전
  • 64비트 OS
  • 64비트 프로세스
  • Python 버전

아래는 백도어에서 처리할 수 있는 다양한 명령어를 요약한 표입니다:

명령설명
sk백도어 실행 중지
l매개변수로 제공된 경로의 파일을 나열합니다.
c셸 명령의 출력을 실행하고 반환합니다.
cd디렉터리 변경 및 새 경로 반환
xs현재 컨텍스트에서 파라미터로 주어진 Python 코드를 실행합니다.
xsi매개변수로 주어진 Base64로 인코딩된 Python 코드를 디코딩하고 컴파일한 다음 실행합니다.
r시스템에서 파일 또는 디렉터리 제거
e매개 변수를 사용하거나 사용하지 않고 시스템에서 파일 실행하기
u감염된 시스템에 파일 업로드
d감염된 시스템에서 파일 다운로드
g구성 파일에 저장된 현재 멀웨어의 구성을 가져옵니다.
w멀웨어의 구성 파일을 새 값으로 재정의합니다.

스위프트벨트

6월 1일, 손상된 시스템은 SeatBelt에서 영감을 받아 레드팀 Cedric Owens가 만든 MacOS 열거 기능인 MacOS.Hacktool.Swiftbelt에 대한 시그니처 경고를 등록했습니다. 다른 열거 방법과 달리 Swiftbelt는 명령줄 아티팩트가 생성되지 않도록 Swift 코드를 호출합니다. 특히 xcc 변형도 Swift를 사용하여 작성됩니다.

서명 경고는 Swiftbelt가 /Users/shared/sb에 기록되었고 bash 셸 인터프리터인 sh를 사용하여 실행되었음을 나타냅니다. 연구진이 관찰한 전체 명령줄은 Users/Shared/sb /bin/sh -c /users/공유/sb \> /users/공유/sb.log 2\>& 1로, 위협 행위자가 캡처한 결과는 sb.log에 기록되고 오류는 STDOUT으로 전달되었음을 보여줍니다.

다이아몬드 모델

Elastic Security는 다이아몬드 모델을 활용하여 침입의 공격자, 기능, 인프라, 피해자 간의 높은 수준의 관계를 설명합니다. 다이아몬드 모델은 단일 인시던트에 가장 일반적으로 사용되며, 인시던트 간의 관계를 생성하는 방법으로 활동 스레딩(섹션 8)을 활용하지만, 공격자 중심(섹션 7.1.4)으로도 사용할 수 있습니다. 접근 방식을 사용하면 복잡하지만 하나의 다이아몬드를 만들 수 있습니다.

관찰된 전술 및 기법

MITRE ATT&CK 전술

전술은 기술 또는 하위 기술의 이유를 나타냅니다. 이는 적의 전술적 목표, 즉 행동을 수행하는 이유입니다. 이 캠페인에서 엘라스틱 보안 연구소가 관찰한 전술은 다음과 같습니다:

MITRE ATT&CK Techniques / Sub techniques

기술 및 하위 기술은 적군이 행동을 수행하여 전술적 목표를 달성하는 방법을 나타냅니다. 이 캠페인에서 Elastic 보안 연구소가 관찰한 기법은 다음과 같습니다:

탐지 로직

YARA

Elastic Security는 이 활동을 식별하기 위해 YARA 규칙을 만들었습니다. 아래는 JOKERSPY 백도어와 SwiftBelt 도구를 식별하기 위한 YARA 규칙입니다.

rule Macos_Hacktool_JokerSpy {
    meta:
        author = "Elastic Security"
        creation_date = "2023-06-19"
        last_modified = "2023-06-19"
        os = "MacOS"
        arch = "x86"
        category_type = "Hacktool"
        family = "JokerSpy"
        threat_name = "Macos.Hacktool.JokerSpy"
        reference_sample = "d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8"
        license = "Elastic License v2"

    strings:
        $str1 = "ScreenRecording: NO" fullword
        $str2 = "Accessibility: NO" fullword
        $str3 = "Accessibility: YES" fullword
        $str4 = "eck13XProtectCheck"
        $str5 = "Accessibility: NO" fullword
        $str6 = "kMDItemDisplayName = *TCC.db" fullword
    condition:
        5 of them
}
rule MacOS_Hacktool_Swiftbelt {
    meta:
        author = "Elastic Security"
        creation_date = "2021-10-12"
        last_modified = "2021-10-25"
        threat_name = "MacOS.Hacktool.Swiftbelt"
        reference_sample = "452c832a17436f61ad5f32ee1c97db05575160105ed1dcd0d3c6db9fb5a9aea1"
        os = "macos"
        arch_context = "x86"
        license = "Elastic License v2"

    strings:
        $dbg1 = "SwiftBelt/Sources/SwiftBelt"
        $dbg2 = "[-] Firefox places.sqlite database not found for user"
        $dbg3 = "[-] No security products found"
        $dbg4 = "SSH/AWS/gcloud Credentials Search:"
        $dbg5 = "[-] Could not open the Slack Cookies database"
        $sec1 = "[+] Malwarebytes A/V found on this host"
        $sec2 = "[+] Cisco AMP for endpoints found"
        $sec3 = "[+] SentinelOne agent running"
        $sec4 = "[+] Crowdstrike Falcon agent found"
        $sec5 = "[+] FireEye HX agent installed"
        $sec6 = "[+] Little snitch firewall found"
        $sec7 = "[+] ESET A/V installed"
        $sec8 = "[+] Carbon Black OSX Sensor installed"
        $sec9 = "/Library/Little Snitch"
        $sec10 = "/Library/FireEye/xagt"
        $sec11 = "/Library/CS/falcond"
        $sec12 = "/Library/Logs/PaloAltoNetworks/GlobalProtect"
        $sec13 = "/Library/Application Support/Malwarebytes"
        $sec14 = "/usr/local/bin/osqueryi"
        $sec15 = "/Library/Sophos Anti-Virus"
        $sec16 = "/Library/Objective-See/Lulu"
        $sec17 = "com.eset.remoteadministrator.agent"
        $sec18 = "/Applications/CarbonBlack/CbOsxSensorService"
        $sec19 = "/Applications/BlockBlock Helper.app"
        $sec20 = "/Applications/KextViewr.app"
    condition:
        6 of them
}

참고 자료

위의 조사에서 참조한 내용은 다음과 같습니다:

관찰

이 연구에서는 다음과 같은 관찰 가능성에 대해 논의했습니다.

Observable유형이름참조
app.influmarket[.]org도메인해당 없음sh.py 도메인
d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8SHA-256/사용자/공유/xccMacos.Hacktool.JokerSpy
8ca86f78f0c73a46f31be366538423ea0ec58089f3880e041543d08ce11fa626SHA-256/사용자/공유/sbMacOS.Hacktool.Swiftbelt
aa951c053baf011d08f3a60a10c1d09bbac32f332413db5b38b8737558a08dc1SHA-256/사용자/공유/sh.pysh.py 스크립트