[긴급 분석] 당신의 아이폰을 노린다, 강력한 익스플로잇 킷 '코루나(Coruna)'의 모든 것
Google Threat Intelligence Group
Google Threat Intelligence
Visibility and context on the threats that matter most.
Contact Us & Get a Demo해당 블로그의 원문은 2026년 3월 4일 Google Cloud 블로그(영문)에 게재되었습니다.
서론
Google 위협 인텔리전스 그룹(GTIG)은 2019년 9월에 출시된 iOS 버전 13.0부터 2023년 12월에 출시된 17.2.1까지의 Apple iPhone 모델을 대상으로 하는 새롭고 강력한 익스플로잇 킷을 확인했습니다. 개발자들에 의해 "코루나(Coruna)"로 명명된 이 익스플로잇 킷은 5개의 완전한 iOS 익스플로잇 체인과 총 23개의 익스플로잇을 포함하고 있었습니다. 이 익스플로잇 킷의 핵심 기술적 가치는 포괄적인 iOS 익스플로잇 모음에 있으며, 가장 진보된 것들은 비공개 익스플로잇 기술과 완화 기술 우회 기법을 사용합니다.
코루나 익스플로잇 킷은 정교한 공격 능력이 어떻게 확산되는지를 보여주는 또 다른 사례입니다. 2025년에 걸쳐 GTIG는 처음에는 한 감시 업체의 고객이 수행한 고도로 표적화된 작전에서 그 사용을 추적했으며, 그 후 러시아 스파이 그룹으로 의심되는 UNC6353이 우크라이나 사용자를 대상으로 한 워터링 홀 공격에서 배포되는 것을 관찰했습니다. 그 후 중국에서 활동하는 금전적 동기의 위협 행위자인 UNC6691이 대규모 캠페인에서 사용할 때 전체 익스플로잇 킷을 입수했습니다. 이러한 확산이 어떻게 발생했는지는 불분명하지만, "중고" 제로데이 익스플로잇에 대한 활발한 시장이 있음을 시사합니다. 이러한 확인된 익스플로잇 외에도, 다수의 위협 행위자들이 이제 새로 발견된 취약점과 함께 재사용 및 수정할 수 있는 고급 익스플로잇 기술을 획득했습니다.
Google의 공개 정책에 따라, 우리는 업계 전반에 걸쳐 인식을 높이고 보안을 발전시키기 위해 우리의 연구를 공유합니다. 또한 사용자를 추가적인 악용으로부터 보호하기 위해 확인된 모든 웹사이트와 도메인을 세이프 브라우징에 추가했습니다. 코루나 익스플로잇 킷은 최신 버전의 iOS에는 효과적이지 않으므로, iPhone 사용자는 기기를 최신 버전의 iOS로 업데이트할 것을 강력히 권장합니다. 업데이트가 불가능한 경우, 보안 강화를 위해 잠금 모드를 활성화하는 것이 좋습니다.
발견 타임라인


그림 1: Coruna iOS 익스플로잇 킷 타임라인
초기 발견: 상업용 감시 업체의 역할
2025년 2월, 우리는 한 감시 회사의 고객이 사용한 iOS 익스플로잇 체인의 일부를 포착했습니다. 이 익스플로잇들은 이전에 본 적 없는 자바스크립트 프레임워크에 통합되어 있었으며, 간단하지만 독특한 자바스크립트 난독화 기술을 사용하고 있었습니다.
[16, 22, 0, 69, 22, 17, 23, 12, 6, 17].map(x => {return String.fromCharCode(x ^ 101);}).join("")i.p1=(1111970405 ^ 1111966034);
The JavaScript framework used these constructs to encode strings and integers
이 프레임워크는 핑거프린팅 모듈을 시작하여 다양한 데이터 포인트를 수집하고, 기기가 실제인지, 그리고 어떤 특정 아이폰 모델과 iOS 소프트웨어 버전을 실행 중인지 확인합니다. 수집된 데이터를 기반으로, 그림 2의 난독화 해제된 자바스크립트에서 볼 수 있듯이 적절한 웹킷(WebKit) 원격 코드 실행(RCE) 익스플로잇을 로드한 다음, 포인터 인증 코드(PAC) 우회 기술을 로드합니다.


그림 2: Coruna 익스플로잇 킷의 난독화 해제된 자바스크립트
그 당시, 저희는 iOS 17.2를 실행하는 기기에 전달된 웹킷(WebKit) 원격 코드 실행(RCE) 익스플로잇을 복구했고, 이것이 CVE-2024-23222임을 확인했습니다. 이 취약점은 이전에 제로데이로 식별되었으며, 2024년 1월 22일 Apple이 iOS 17.3에서 외부 연구원의 공로를 인정하지 않고 해결한 바 있습니다. 그림 3은 저희의 주석과 함께 실제 환경에서 전달된 RCE 익스플로잇의 시작 부분을 정확하게 보여줍니다.


그림 3: CVE-2024-23222를 이용한 RCE 익스플로잇이 실제 환경에서 전달된 방식
정부 지원 공격자의 사용
2025년 여름, 저희는 cdn.uacounter[.]com에 호스팅된 동일한 자바스크립트 프레임워크를 발견했습니다. 이 웹사이트는 산업 장비 및 소매 도구부터 지역 서비스 및 전자 상거래 웹사이트에 이르기까지, 해킹된 다수의 우크라이나 웹사이트에서 숨겨진 아이프레임(iFrame)으로 로드되었습니다. 이 프레임워크는 특정 지리적 위치의 일부 아이폰 사용자에게만 전달되었습니다.
프레임워크는 동일했고, 동일한 익스플로잇 세트를 전달했습니다. 저희는 서버가 종료되기 전에 CVE-2024-23222, CVE-2022-48503, CVE-2023-43000을 포함한 웹킷(WebKit) RCE들을 수집했습니다. 저희는 CERT-UA(우크라이나 컴퓨터 비상 대응팀)에 알려 해킹된 모든 웹사이트를 정리하는 데 협력했습니다.
중국 스캠 웹사이트에서 전체 익스플로잇 체인 수집
연말에, 저희는 주로 금융과 관련된 매우 방대한 수의 가짜 중국 웹사이트에서 해당 자바스크립트 프레임워크를 확인했으며, 이들은 정확히 동일한 iOS 익스플로잇 킷을 유포하고 있었습니다. 그림 4는 가짜 WEEX 암호화폐 거래소 웹사이트에서 가져온 것으로, 이 웹사이트들은 사용자들이 iOS 기기로 방문하도록 유도하려 했습니다.


그림 4: 가짜 암호화폐 거래소 웹사이트에서 사용자를 익스플로잇으로 유도하는 팝업
iOS 기기로 이 웹사이트들에 접속하면, 지리적 위치에 관계없이 숨겨진 아이프레임(iFrame)이 주입되어 익스플로잇 킷을 전달합니다. 예를 들어, 그림 5는 3v5w1km5gv[.]xyz에서 발견된 것과 동일한 CVE-2024-23222 익스플로잇을 보여줍니다.


그림 5: 스캠 사이트에서 발견된 CVE-2024-23222 익스플로잇 스크린샷
저희는 최종 페이로드를 포함하여 난독화된 모든 익스플로잇을 입수했습니다. 추가 분석을 통해, 공격자가 익스플로잇 킷의 디버그 버전을 배포한 사례를 발견했습니다. 이 버전에는 내부 코드명을 포함한 모든 익스플로잇이 평문으로 남아 있었습니다. 바로 그때 저희는 이 익스플로잇 킷의 내부 명칭이 '코루나(Coruna)'일 가능성이 높다는 것을 알게 되었습니다. 종합적으로, 저희는 5개의 완전한 iOS 익스플로잇 체인을 포괄하는 수백 개의 샘플을 수집했습니다. 이 익스플로잇 킷은 2019년 9월에 출시된 iOS 13.0 버전부터 2023년 12월에 출시된 17.2.1 버전까지 실행되는 다양한 아이폰 모델을 표적으로 삼을 수 있습니다.
이어지는 섹션에서는 프레임워크에 대한 간략한 설명, 익스플로잇 체인 분석, 그리고 저희가 포착한 관련 임플란트에 대해 다룰 것입니다. 수집된 데이터에 대한 분석은 현재 진행 중이며, 새로운 블로그 게시물이나 근본 원인 분석(RCA)을 통해 추가적인 기술 사양을 발표할 예정입니다.
코루나 익스플로잇 킷
익스플로잇 킷을 둘러싼 프레임워크는 매우 정교하게 설계되었습니다. 익스플로잇 조각들은 모두 자연스럽게 연결되어 있으며, 일반적인 유틸리티 및 익스플로잇 프레임워크를 사용하여 결합됩니다. 이 킷은 다음과 같은 독특한 동작을 수행합니다.
-
기기가 잠금 모드이거나 사용자가 개인 정보 보호 브라우징 상태인 경우 작동을 중단합니다.
-
리소스 URL을 생성하는 과정에서 고유하고 하드코딩된 쿠키를 사용합니다.
-
리소스는 해시로 참조되며,
sha256(COOKIE + ID)[:40]을 사용하여 고유한 쿠키와 함께 파생시켜야 URL을 얻을 수 있습니다. -
RCE(원격 코드 실행) 및 PAC(포인터 인증 코드) 우회 기술은 암호화되지 않은 상태로 전달됩니다.
이 킷에는 웹킷(WebKit) 내에서 RCE 이후 적절한 익스플로잇 체인을 로드하기 위한 바이너리 로더가 포함되어 있습니다. 이 경우, 바이너리 페이로드의 특징은 다음과 같습니다.
-
자신이 무엇인지, 어떤 칩과 iOS 버전을 지원하는지 나타내는 고유한 메타데이터를 가집니다.
-
.min.js로 끝나는 URL에서 제공됩니다.
-
각 블롭(blob)마다 고유한 키를 사용하여 ChaCha20으로 암호화됩니다.
-
헤더가 0xf00dbeef로 시작하는 커스텀 파일 형식으로 패키징됩니다.
-
렘펠-지브-웰치(LZW) 알고리즘으로 압축됩니다.
그림 6은 이러한 가짜 금융 웹사이트 중 하나를 탐색할 때, iOS 15.8.5를 실행하는 아이폰 XR의 감염이 네트워킹 관점에서 어떻게 보이는지를 보여주며, 각기 다른 부분에 대한 저희의 주석이 포함되어 있습니다.


그림 6: iOS 15.8.5에서 전달된 Coruna 익스플로잇 체인
익스플로잇과 그 코드명
이 익스플로잇 킷의 핵심 기술적 가치는 포괄적인 iOS 익스플로잇 모음에 있습니다. 익스플로잇에는 원어민 수준의 영어로 작성된 설명 문자열(docstring)과 주석을 포함한 방대한 문서가 포함되어 있습니다. 가장 진보된 익스플로잇들은 비공개 악용 기술과 완화 기술 우회 기법을 사용합니다. 다음 표는 다양한 익스플로잇 체인에 대한 저희의 진행 중인 분석 요약입니다. 하지만 전체 조사가 아직 진행 중이므로 특정 CVE 연관 정보는 변경될 수 있습니다. iOS 13부터 iOS 17.2.1까지의 버전을 다루는 총 23개의 익스플로잇이 있습니다.
포톤(Photon)과 갈륨(Gallium)은 2023년 카스퍼스키가 발견한 오퍼레이션 트라이앵귤레이션의 일부로 제로데이로도 사용되었던 취약점을 악용하고 있습니다. 코루나 익스플로잇 킷은 또한 앞서 언급된 취약점들의 악용을 용이하게 하기 위해 재사용 가능한 모듈들을 내장하고 있습니다. 예를 들어, rwx_allocator라는 모듈은 여러 기술을 사용하여 유저랜드(userland)에서 RWX 메모리 페이지 할당을 막는 다양한 완화 기술을 우회합니다. 커널 익스플로잇 또한 커널 모드 PAC와 같은 커널 기반 완화 기술을 우회할 수 있는 다양한 내부 모듈을 내장하고 있습니다.
최종 페이로드
익스플로잇 체인의 마지막 단계에서는 PlasmaLoader(GTIG에서는 PLASMAGRID로 추적)라는 스테이저 바이너리가 com.apple.assistd를 식별자로 사용하여, 익스플로잇이 구축한 커널 구성 요소와의 통신을 용이하게 합니다. 이 로더는 iOS에서 루트(root) 권한으로 실행되는 데몬인 powerd에 자신을 주입합니다.
주입된 페이로드는 우리가 감시 업체에서 일반적으로 기대하는 기능을 보여주지 않고, 대신 금융 정보를 훔칩니다. 이 페이로드는 디스크에 있는 이미지에서 QR 코드를 디코딩할 수 있습니다. 또한 텍스트 덩어리를 분석하여 BIP39 단어 시퀀스나 "backup phrase", "bank account"와 같은 매우 구체적인 키워드를 찾는 모듈도 가지고 있습니다. 만약 Apple 메모에서 그러한 텍스트가 발견되면 C2 서버로 다시 전송됩니다.
더 중요한 것은, 이 페이로드가 http://<C2 URL>/details/show.html에서 검색된 설정을 통해 원격으로 추가 모듈을 수집하고 실행할 수 있는 능력을 갖추고 있다는 점입니다. 설정 및 추가 모듈은 고유한 하드코딩된 비밀번호로 보호된 7-ZIP 아카이브로 압축되어 있습니다. 설정은 JSON으로 인코딩되어 있으며, 각 모듈의 이름과 해당 URL, 해시, 크기 목록을 간단히 포함하고 있습니다.
{
"entries": [
{
"bundleId": "com.bitkeep.os",
"url": "http://<C2URL>/details/f6lib.js",
"sha256": "6eafd742f58db21fbaf5fd7636e6653446df04b4a5c9bca9104e5dfad34f547c",
"size": 256832,
"flags": {
"do_not_close_after_run": true
}
}
...
]
}예상대로, 확인된 모든 모듈은 대부분 동일한 설계를 보이며, 다음 애플리케이션에서 암호화폐 지갑이나 민감한 정보를 유출하기 위해 함수 후크를 설치합니다.
com.bitkeep.oscom.bitpie.walletcoin98.crypto.finance.insightsorg.toshi.distributionexodus-movement.exodusim.token.appcom.kyrd.krystal.iosio.metamask.MetaMaskorg.mytonwallet.appapp.phantomcom.skymavis.Genesiscom.solflare.mobilecom.global.wallet.ioscom.tonhub.appcom.jbig.tonkeepercom.tronlink.hdwalletcom.sixdays.trustcom.uniswap.mobile
이 모든 모듈에는 중국어로 작성된 문장으로 된 적절한 로깅이 포함되어 있습니다.
<PlasmaLogger> %s[%d]: CorePayload 管理器初始化成功,尝试启动...
이 로그 문자열은 CorePayload 관리자가 성공적으로 초기화되었음을 나타냅니다.
다음과 같은 일부 주석에는 이모티콘도 포함되어 있으며, 마치 LLM(대규모 언어 모델)이 생성한 것임을 시사하는 방식으로 작성되어 있습니다.
<PlasmaLogger> %s[%d]: [PLCoreHeartbeatMonitor] ✅ 心跳监控已启动 (端口=0x%x),等待 CorePayload 发送第一个心跳...네트워크 통신은 HTTPS를 통해 이루어지며, 수집된 데이터는 정적 문자열의 SHA256 해시를 키로 사용하여 AES로 암호화된 후 POST 방식으로 전송됩니다. 일부 HTTP 요청에는 sdkv나 x-ts와 같은 추가적인 HTTP 헤더와 타임스탬프가 포함됩니다. 이 임플란트는 하드코딩된 C2 서버 목록을 포함하고 있지만, 서버가 응답하지 않을 경우를 대비한 대체 메커니즘도 갖추고 있습니다. 임플란트는 "lazarus"라는 문자열을 시드(seed)로 사용하여 예측 가능한 도메인 목록을 생성하는 맞춤형 도메인 생성 알고리즘(DGA)을 내장하고 있습니다. 이 도메인들은 15자의 길이를 가지며, 최상위 도메인(TLD)으로 .xyz를 사용합니다. 공격자들은 Google의 공개 DNS 해석기를 사용하여 해당 도메인들이 활성화되어 있는지 확인합니다.
결론
Google은 스파이웨어 산업으로 인한 피해를 제한하기 위한 공감대를 형성하고 진전을 이루기 위해 설계된 폴 몰 프로세스(Pall Mall Process)에 헌신적으로 참여해 왔습니다. 우리는 함께 이러한 강력한 기술의 오용을 제한하고 전 세계의 인권을 보호하기 위한 국제 규범과 프레임워크를 개발하는 데 집중하고 있습니다. 이러한 노력은 미국 정부가 스파이웨어의 정부 사용을 제한하기 위해 취한 조치와 유사한 노력을 위한 최초의 국제적 약속을 포함한 이전의 정부 조치들을 기반으로 합니다.
감사의 말
이 조사를 진행하는 동안 파트너십을 보여준 Google Project Zero와 Apple 보안 엔지니어링 및 아키텍처 팀에 감사의 말씀을 전합니다.
침해 지표 (IOCs)
이 블로그 게시물에 설명된 활동을 추적하고 식별하는 데 더 넓은 커뮤니티를 돕기 위해, 등록된 사용자를 위한 무료 GTI 컬렉션에 IOC를 포함시켰습니다.
파일 지표
암호화폐 관련 웹사이트에서 전달된 임플란트 및 해당 모듈의 해시값.
임플란트
모듈
네트워크 지표
UNC6353 지표
UNC6691 지표
YARA Rules
rule G_Hunting_Exploit_MapJoinEncoder_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$s1 = /\[[^\]]+\]\.map\(\w\s*=>.{0,15}String\.fromCharCode\(\w\s*\^\s*(\d+)\).{0,15}\.join\(""\)/
$fp1 = "bot|googlebot|crawler|spider|robot|crawling"
condition:
1 of ($s*) and not any of ($fp*)
}rule G_Backdoor_PLASMAGRID_Strings_1 {
meta:
author = "Google Threat Intelligence Group (GTIG)"
strings:
$ = "com.plasma.appruntime.appdiscovery"
$ = "com.plasma.appruntime.downloadmanager"
$ = "com.plasma.appruntime.hotupdatemanager"
$ = "com.plasma.appruntime.modulestore"
$ = "com.plasma.appruntime.netconfig"
$ = "com.plasma.bundlemapper"
$ = "com.plasma.event.upload.serial"
$ = "com.plasma.notes.monitor"
$ = "com.plasma.photomonitor"
$ = "com.plasma.PLProcessStateDetector"
$ = "plasma_heartbeat_monitor"
$ = "plasma_injection_dispatcher"
$ = "plasma_ipc_processor"
$ = "plasma_%@.jpg"
$ = "/var/mobile/Library/Preferences/com.plasma.photomonitor.plist"
$ = "helion_ipc_handler"
$ = "PLInjectionStateInfo"
$ = "PLExploitationInterface"
condition:
1 of them
}