Специалисты Google Threat Intelligence Group (GTIG) раскрыли масштабную кампанию кибершпионажа, которую на протяжении более года вела группировка UNC6508, связанная с Китайской Народной Республикой. Под ударом оказались ведущие исследовательские институты Северной Америки в области медицины, обороны и искусственного интеллекта. Злоумышленники действовали незаметно, начиная с сентября 2023 года, и сумели скомпрометировать десятки организаций, включая государственные медицинские учреждения, университеты и военные исследовательские центры.
Описание
Вектор атаки был выбран нестандартный. Вместо прямого взлома корпоративных сетей UNC6508 целенаправленно эксплуатировала уязвимости в REDCap - веб-платформе для сбора и управления данными клинических исследований. Эта система широко применяется в медицинском сообществе Северной Америки, но её архитектура позволяет запускать устаревшие версии программного обеспечения параллельно с актуальными. Именно эту особенность и использовали хакеры, зондируя серверы жертв на предмет старых, непропатченных релизов.
После получения доступа к серверу REDCap злоумышленники развёртывали кастомную вредоносную программу INFINITERED. Этот модульный бэкдор (вредоносная программа с функциями удалённого управления) встраивался в легитимные системные файлы REDCap и перехватывал процесс обновления платформы, гарантируя своё сохранение даже при установке новых версий. Основной компонент INFINITERED - кейлоггер, перехватывающий учётные данные, которые пользователи вводили при аутентификации. Украденные логины и пароли шифровались и прятались в локальной таблице сессий REDCap под видом обычных записей.
Три месяца спустя после первоначального взлома вредонос начинал активную фазу кражи. Установившись на сервере, INFINITERED работал незаметно, регистрируя весь трафик аутентификации. Собранные данные позволяли злоумышленникам получить доступ к учётным записям администраторов домена и другим привилегированным аккаунтам. После захвата контроля UNC6508 переходила к финальной стадии - эксфильтрации.
Ключевой находкой аналитиков стало использование UNC6508 совершенно новой для китайских группировок техники утечки данных - манипуляции с правилами соответствия контента в облачных корпоративных пакетах. Под видом администратора злоумышленники создавали правило под названием "Patroit", которое на основе регулярных выражений отслеживало ключевые слова и адреса в отправляемых и получаемых письмах. Все сообщения, соответствующие заданным шаблонам, автоматически пересылались скрытой копией на подконтрольный хакерам почтовый ящик Gmail BebitaBarefoot774[@]gmail.com. Как только эта активность была обнаружена, Google отключил данный аккаунт, но к тому моменту утечка уже шла непрерывно более года.
Список отслеживаемых UNC6508 тем впечатляет. Он охватывает данные о геостратегической политике, операциях Индо-Тихоокеанского командования, искусственном интеллекте, беспилотных системах, наступательных киберпрограммах, военной медицине и даже конкретном возбудителе - вирусе Чикунгунья. Последнее совпало со вспышкой этого заболевания в китайской провинции Гуандун в июле 2025 года. Анализ собранных правил демонстрирует, что перечень терминов составлялся вручную и содержит орфографические ошибки, что указывает на живую корректировку приоритетов разведки.
Особое внимание UNC6508 уделяла операционной безопасности. Все сетевые соединения шли через сложную цепочку обфускации: взломанные маршрутизаторы, резидентные прокси, частные виртуальные серверы - исключительно на территории США. Контрольный почтовый ящик создавался через сервис массовой регистрации и использовался только для одной задачи. Такая изощрённая маскировка серьёзно затруднила атрибуцию и обнаружение инцидентов для служб защиты.
В ходе расследования GTIG совместно с подразделением Mandiant Consulting и командой FLARE смогла восстановить полную цепочку атаки: от начального взлома REDCap-сервера до скрытого вывода данных. Уведомления о компрометации были направлены всем пострадавшим организациям, а индикаторы скомпрометированности внесены в платформу Google Security Operations, что позволяет клиентам проверять свои сети на наличие следов INFINITERED.
Для предотвращения подобных атак специалисты рекомендуют в обязательном порядке обновлять REDCap до последней версии, полностью удаляя старые инсталляции, внедрять двухфакторную аутентификацию для всех учётных записей администраторов, в том числе через сторонних провайдеров, а также настроить аудит правил соответствия контента и мониторинг их изменений. Особо ценные учётные записи стоит подключать к программам расширенной защиты от фишинга и кражи файлов cookie.
Масштаб и длительность кампании UNC6508 указывает на то, что китайская разведка системно осваивает новые инструменты и тактики, целенаправленно встраиваясь в рабочие процессы исследовательских организаций. Метод использования легитимных корпоративных функций для вывода данных, вероятно, будет взят на вооружение другими злоумышленниками, что делает своевременное выявление аномальных правил комплаенса критически важным для безопасности любого крупного учреждения.
Индикаторы компрометации
IPv4
- 23.169.65.49
Emails
- BebitaBarefoot774@gmail.com
SHA256
- 4efbef69eb3b09bacff892d6a55778d07c418e7f15eba3cf1245e8cdfd8dda0b
- 51a57bfc9ed3eb6451c1c289607814d59e1698c666fb97ac5f694c398f23d045
- 58bb25777e0aa86bcd2125101e0bca4e8732b03d91bd8d2f205b446a2a8d5c86
- 8f0158855a656b629ca76ebca565f18bc25563ded34b65d6771632c20edb68ec
- ba6b73b0ca0dc7f86b3b397893ac32d729fd53f9df20643288f141f29d020af7
- c1ac43d23f89d41eb4ff131678ab562ab2cfed9aa334b13767ef141d303b0e5b
- db65c1b9f9e4cb4d729f45ad4b6fcf3e277caf9eb4c875425dec93fd883f9136
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | rule G_Backdoor_INFINITERED_1 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $magic_flag = "ej671a16i7fd8202nu6ltfg5p6x7u" $magic_flag_base64 = "ej671a16i7fd8202nu6ltfg5p6x7u" base64 $marker = "b49e334d-9c01-463e-9bc5-00a6920fb66e" $marker_base64 = "YjQ5ZTMzNGQtOWMwMS00NjNlLTliYzUtMDBhNjkyMGZiNjZl" $s1 = "substr($cookieValue, strlen($magic_flag));" $s2 = "getcwd(), php_uname(), phpversion(), $_SERVER['SERVER_SOFTWARE']" $s3 = "'data' => encrypt($data, $key)" $s4 = "$data = shell_exec($command);" $s5 = "move_uploaded_file($tmpPath, $fileName)" $s6 = "$data = implode('|', $fields)" $b_s1 = "substr($cookieValue, strlen($magic_flag));" base64 $b_s2 = "getcwd(), php_uname(), phpversion(), $_SERVER['SERVER_SOFTWARE']" base64 $b_s3 = "'data' => encrypt($data, $key)" base64 $b_s4 = "$data = shell_exec($command);" base64 $b_s5 = "move_uploaded_file($tmpPath, $fileName)" base64 $b_s6 = "$data = implode('|', $fields)" base64 $t1 = "(isset($_POST['username']) && $_POST['password'])" $t2 = "INSERT INTO redcap_sessions (session_id, session_data, session_expiration) VALUES ('$session_id', '$str', FROM_UNIXTIME($expiration_timestamp))" $t3 = "encrypt($currentUTC . '[::]' . $_POST['username'] . '[::]' . $_POST['password']);" $t4 = "redcap_connect.php" $b_t1 = "(isset($_POST['username']) && $_POST['password'])" base64 $b_t2 = "INSERT INTO redcap_sessions (session_id, session_data, session_expiration) VALUES ('$session_id', '$str', FROM_UNIXTIME($expiration_timestamp))" base64 $b_t3 = "encrypt($currentUTC . '[::]' . $_POST['username'] . '[::]' . $_POST['password']);" base64 $b_t4 = "redcap_connect.php" base64 $u1 = "$zip->open($filename) === TRUE)" $u2 = "$hooks_encode =" $u3 = "$auth_encode =" $u4 = "$file_content_hooks = $zip->getFromName($file_hooks);" $u5 = "$file_content_auth = $zip->getFromName($file_auth);" $u6 = "$file_content_upgrade = $zip->getFromName($file_upgrade);" $u7 = "str_replace($search_content, $hooks_decode, $file_content_hooks);" $u8 = "str_replace($search_content, $upgrade_decode, $file_content_upgrade);" $u9 = "str_replace($search_content, $auth_decode, $file_content_auth);" $b_u1 = "$zip->open($filename) === TRUE)" base64 $b_u2 = "$hooks_encode =" base64 $b_u3 = "$auth_encode =" base64 $b_u4 = "$file_content_hooks = $zip->getFromName($file_hooks);" base64 $b_u5 = "$file_content_auth = $zip->getFromName($file_auth);" base64 $b_u6 = "$file_content_upgrade = $zip->getFromName($file_upgrade);" base64 $b_u7 = "str_replace($search_content, $hooks_decode, $file_content_hooks);" base64 $b_u8 = "str_replace($search_content, $upgrade_decode, $file_content_upgrade);" base64 $b_u9 = "str_replace($search_content, $auth_decode, $file_content_auth);" base64 $filemarker = "<?php" condition: filesize < 1MB and $filemarker in (0 .. 128) and (((any of ($magic*) or any of ($marker*)) and (any of ($s*) or any of ($t*) or any of ($u*))) or 4 of ($s*) or 4 of ($b_s*) or all of ($t*) or all of ($b_t*) or 6 of ($u*) or 6 of ($b_u*)) } |