CCleaner – как не стать жертвой массовых атак
24.01.2018 Уктам СабировЗлоумышленники часто используют доверенные сервисы для организации своих атак. Это вызвано тем, что пользователи не сомневаются в надежности поставщиков тех программ, которыми они регулярно пользуются. В частности, это можно подтвердить прошлогодними атаками червя «Nyetya» и вируса «WNCRY», которые были осуществлены с использованием протоколов, ежедневно эксплуатируемых приложениями и сервисами «Windows». Также, такая маскировка позволяет долгое время скрывать следы заражения, что приводит к более масштабным последствиям атак.
CCleaner– это приложение, позволяющее пользователям избавиться от рутинных хлопот с компьютером. Оно включает в себя такой функционал, как очистка временных файлов, оптимизация работы операционной системы, а также ряд других полезных функций.
В сентябре 2017 года во время тестирования новой системы выявления эксплойтов, командой Cisco Talos был выявлен новый неизвестный исполняемый код, обнаруженный внутри инсталляционных файлов программы CCleanup версии 5.33. Более того, загрузка кода шла с официальных серверов разработчика. В процессе последующего изучения выяснилось, что несмотря на наличие защитных механизмов, таких как код верификации от разработчика программы – компании «Piriform» (речь идет об SSL-сертификате, который обеспечивает доверительное соединение между компьютером пользователя и серверами разработчика), программа CCleanup была не единственной, которая загружалась пользователями.
Во время установки программы, вместе с 32-битным кодом загружался также другой, вредоносный, код, который представлял из себя алгоритм генерации доменных имен (Domain Generation Algorithm, DGA) вместе с функционалом принудительного исполнения команд и контроля. Расследование позволило установить, что данный вредонос был размещен на серверах «Piriform» в сентябре 2017 года.
Если обратиться к истории релизов программы CCleanup, видно, что релиз версии 5.33 был выпущен 15 августа 2017 года, в релиз версии 5.34 – 12 сентября 2017 года. Таким образом, вредоносный код содержался в версиях программы, которая загружалась пользователями в течение указанного периода. Данный релиз был подтвержден сертификатом, который был выдан компании «Piriform» компанией «Symantec» и был действителен до октября 2018 года.

Отдельно необходимо упомянуть, что обе версии программы доступны на сайте разработчика, и хотя по утверждению разработчиков, вредоносного кода в инсталляционных файлах больше не содержится, сам факт подписи зараженной программы действующим сертификатом настораживает. Это также может указывать на то, что внутри компании могут быть инсайдеры и именно они помогли злоумышленникам прописать вредонос внутри исполняемых файлов программы.
Установка и запуск вредоносной программы
Прописанная внутри инсталлятора программы CCleanup функция «__scrt_get_dyn_tls_init_callback» позволяла осуществлять вызов и исполнение вредоносного кода в процессе использования программы.Тот в свою очередь исполнялся в два этапа. Сначала, каждый раз во время запуска программы CCleanup прописывались необходимые команды в набор библиотек DLL самой программы, что обеспечивало легитимность вредоноса во время использования антивирусных средств.
Далее, под исполнение вредоносного кода выделялось пространство динамической памяти. Примечательно, что как только для вредоносного кода выделялось место в динамической памяти, происходило стирание исходного кода, а затем, по факту исполнения самого вредоноса, полностью освобождалось и выделенное ранее для него место в динамической памяти. Таким образом, устранялись абсолютно все следы заражения.
Помимо этого, среди вредоносного функционала обнаружены другие возможности обхода средств антивирусной защиты. В частности, функция «CCBkrdr_GetShellcodeFromC2AndCall» обращалась к системной памяти для определения установленного времени и соответственно ставила задержку исполнения вредоносного кода на 601 секунду. Это делалась для того, чтобы скрыться от автоматизированных систем анализа, настроенных для запуска течение определенного периода времени. Также, это помогало автоматически устанавливать, исполняется ли вредоносное ПО в отладчике. В случае если предварительно установленные параметры не совпадали с заданным условием, исполнение вредоноса прекращалось до следующего цикла.
Также, выполнение вредоноса прекращалось, если система не была запущена под правами администратора. Соответствующие права требовались вредоносу для создания ключа «InstallID», который необходим при каждом процессе инсталляции. Сам ключ создается рандомно.
После успешного выполнения вышеуказанной последовательности процессов, вредонос начинал собирать и передавать на управляющий сервер системную информацию.

В случае с исследуемым экземпляром вредоноса, специалистам удалось установить, что часть кода, изначально кажущаяся ошибкой разработчиков, отвечает за установление соединения с управляющим сервером. Выглядит это следующим образом:
Сначала, уже упомянутый алгоритм DGA создавал поле в подразделе программы в системном реестре, но не записывал в него никакого значения. Таким образом, установление соединения между вредоносом и управляющим сервером устанавливалось на более позднем этапе, а именно после того, как формировалась база данных системной информации. После этого вредонос формировал запрос HTTPS POST на IP-адрес 216.126.225.148. Этот адрес был связан с доменным именем «speccy.piriform.com», являющимся легитимным сервером компании «Piriform» для сбора информации с серверного оборудования. Хитрость злоумышленников заключалась в том, что сервер игнорировал ошибки запроса и возвращал ответ с SSL-сертификатом, который был предназначен для упомянутого доменного имени. После этого, снабженный необходимым сертификатом, запрос к управляющему серверу вредоноса без труда обходил защитные механизмы, в том числе антивирусные средства, и обеспечивал обмен данными, содержащими также команды для исполнения на компьютере жертвы. Алгоритм работы вредоноса выглядит следующим образом:
1. При запуске программы CCleanup происходит обращение к исполняемому коду.
2. Далее загружаются необходимые для работы вредоноса библиотеки в системный реестр.
3. Вредонос выжидает 601 секунду, в то время как загрузка и выполнение программы CCleanup продолжается обычным ходом.
4. Вредонос проверяет задержку и при положительном результате, проверяет наличие администраторских полномочий. В противном случае, вредонос прекращает свою работу.
5. При наличии администраторских прав (соответственно, когда компьютер запущен под учетной записью администратора, что обычно происходит по умолчанию на обычных домашних компьютерах) вредонос инициирует сбор системной информации и передает ее на управляющий сервер, получая обратно различные команды для исполнения. Разумеется, все команды с управляющего сервера так или иначе компрометируют пользовательские данные.
2. Далее загружаются необходимые для работы вредоноса библиотеки в системный реестр.
3. Вредонос выжидает 601 секунду, в то время как загрузка и выполнение программы CCleanup продолжается обычным ходом.
4. Вредонос проверяет задержку и при положительном результате, проверяет наличие администраторских полномочий. В противном случае, вредонос прекращает свою работу.
5. При наличии администраторских прав (соответственно, когда компьютер запущен под учетной записью администратора, что обычно происходит по умолчанию на обычных домашних компьютерах) вредонос инициирует сбор системной информации и передает ее на управляющий сервер, получая обратно различные команды для исполнения. Разумеется, все команды с управляющего сервера так или иначе компрометируют пользовательские данные.
Как противодействовать?
Для борьбы с данным вредоносом, а также его аналогами, трудно найти какое-то одно и несколько оптимальных решений. Речь идет не только о возможных просчетах или неосторожности пользователей, компрометируются разработчики программ и их сервисы. В случае, как приведен пример выше, без наличия специализированных инструментов и привлечения высококвалифицированных специалистов, крайне сложно вычислить угрозу, которая к тому скрывается на доверенных ресурсах и сервисах.Это, конечно, не повод отказываться от использования тех или иных программ – пользователь всегда должен иметь под рукой необходимый ему набор программ и утилит, однако к доверию, которое ранее пользователь оказывал тому или иному разработчику, необходимо подкреплять уверенностью в своей защите.
Для этого, даже при работе с привычными инструментами, будь то системная утилита или медиа-проигрыватель, рекомендуется регулярно проверять, не были ли они скомпрометированы злоумышленниками. Актуальная информация о подобных угрозах и атаках всегда доступна на соответствующих ресурсах, освещающих вопросы и проблемы информационной безопасности.