Sality — одно из наиболее известных семейств вредоносного программного обеспечения. В своем развитии ВПО Sality прошло несколько стадий.
Первое упоминание о нем датируется июлем 2003 года. В своей первоначальной версии Sality заражал исполняемые файлы путем добавления своего кода, упакованного с помощью UPX. В качестве полезной нагрузки выступал кейлоггер, перехваченные данные отсылались по протоколу SMTP на один из серверов, размещенных в России. Название является производной от английского названия города — «Salavat City» (Салават, Республика Башкортостан). Предположительно прозвище разработчика — Sector — дало название в классификации компании Dr.Web. На тот момент Sality не представлял интереса в техническом плане, автор использовал довольно примитивные механизмы — файловый инфектор был относительно простым по сравнению с другими образцами ВПО того времени, адрес SMTP сервера был жестко задан внутри кода и не мог быть изменен, так же не могла быть изменена полезная нагрузка.
С 2004 по 2008 год автор много работал над усовершенствованием Sality. Значительно изменилась методика инфицирования, а вирус стал полиморфным без изменения точки входа (техника entry-point obscuring), затрудняя тем самым процесс обнаружения и лечения. Вредоносные функции были выделены в отдельные модули, которые могли дополнительно загружаться с ряда URL-адресов, жестко прописанных в коде. Также были включены процедуры противодействия механизмам защиты: блокировка или отключение некоторых межсетевых экранов, утилит и антивирусных программ. Начиная с 2008 года (возможно, конца 2007) автор кардинально изменил схему распространения, вместо заранее заданных адресов, которые могли быть легко заблокированы антивирусными компаниями, был реализован механизм peer-to-peer обновления модулей и загрузки сторонних вредоносных программ для последующего запуска.
Архитектура
Далее описывается работа одной из последних версий Sality (после 2008 года). Все компоненты являются независимыми и запускаются в отдельных потоках.
Модуль инжектирования (внедрения в адресное пространство другого процесса)
Sality пытается внедрить свою копию во все запущенные процессы, за исключением тех, которые выполняются от имени аккаунтов 'system', 'local service' и 'network service'. Для привилегированных процессов выставляет себе Debug privileges, и пытается внедриться снова. Для исключения повторного внедрения использует mutex с именем приложения. Это является одним из признаков инфицирования компьютера.
Модуль защиты
Этот модуль защищает Sality от антивирусного ПО. Для предотвращения загрузки ОС в режиме защиты от сбоев (Safe boot mode) вирус удаляет из реестра ключи и значения в следующих ветках: 'HKEY_CURRENT_USERSystemCurrentControlSetControlSafeBoot' и 'HKEY_LOCAL_MACHINESystemCurrentControlSetControlSafeBoot'.
Блокируется работа служб множества антивирусных программ. Ранние версии Sality вели себя даже более агрессивно и просто удаляли эти службы из системы.
Вирус также внедряет драйвер ядра. Этот драйвер добавляется под псевдослучайным именем в папку %System%drivers. Создается служба с именем «amsint32». Драйвер выполняет три различные функции:
- «убийца» процессов (process killer) — Sality непрерывно сканирует запущенные процессы, и если имя процесса входит в список защитного ПО, то такой процесс останавливается. Сам список жестко прописан в коде. Для обхода антивирусной самозащиты все процессы уничтожаются драйвером на уровне ядра;
- фильтр пакетов (packet filter) — драйвер регистрирует функцию 'IPFilter Callback routine' путем отправки контрольного запроса IOCTL_PF_SET_EXTENSION_POINTER к драйверу IPFilter (этa функция работала в Windows ХР/2003/2000, но в Vista и более поздних версиях уже не используется). Благодаря этой функции Sality мог отбрасывать IP-пакеты, которые соответствовали шаблонам адресов сайтов производителей антивирусного ПО. В результате пользователь не мог зайти, к примеру, на сайт Symantec.com;
- блокировщик (blocker) входящего и исходящего трафика SMTP. Этот функционал реализовывался модулем, работающего в режиме пользователя, и запускался по команде от оператора ботсети. В более поздних версиях этот модуль не использовался, хотя его код сохранился.
Модуль заражения
Модуль заражения отвечает за размножение вируса, в качестве объектов выступают:
- файлы, перечисленные в ветке реестра 'HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellNoRoamMUICache'. Эта ветка содержит имена приложений, которые использует Explorer при группировке значков в панели задач. Как побочный эффект — MUICache является репозиторием практически всех приложений, установленных в системе;
- файлы в ключах запуска (run keys) веток 'HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun' и 'HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun';
- сканируются (enumerate) файлы exe и scr на подмонтированных дисках от В до Z;
- корневые каталоги дисков, отличных от Windows-раздела, инфицируются путем создания зараженной копии программ «Калькулятор» или «Сапер». Файл создается с произвольным именем и расширением exe, cmd или pif. Также создается или модифицируется файл autorun.inf для автоматического запуска созданных зараженных файлов при монтировании диска. При запуске такого файла вместо запуска соответствующей программы («Калькулятор» или «Сапер») открывается окно Explorer;
- cканируются сетевые ресурсы в поисках исполняемых файлов.
Для файлов антивирусов (из списка) вместо заражения производится попытка перезаписать код точки входа байтами «СССЗ СССЗ СССЗ СССЗ» (повторяющиеся инструкции int 3 и ret). В случае неудачи этой операции Sality пытается удалить файл. Модуль заражения также сканирует каталоги и удаляет файлы с расширением vdb или avc (сигнатуры антивирусов компаний Symantec и Kaspersky).
Интересная особенность модуля заражения: процедуры заражения отключаются, если список пиров (peer list) пуст. Это отражает своеобразную стратегию распространения — нет необходимости заражать файлы, если отсутствует подключение к Р2Р сети и скачивание дополнительных вредоносных модулей невозможно.
Для заражения используется техника EPO (entry-point obscuring):
- точка входа не меняется;
- по адресу входа записывается команда jmp перехода на код вируса, код располагается в конце последней секции, которая специально для этого расширяется. Дополнительно к флагам секции добавляется разрешение на запись и исполнение;
- после расшифровки восстанавливается содержимое файла, стертое командой jmp, основной код вируса запускается в отдельном потоке, управление передается на оригинальную точку входа.
Sality проверяет свое присутствие в системе по определенному mutex, различному для разных вариантов. При запуске из корневого каталога диска открывается окно Explorer.
Модуль закачек
Модуль закачек отвечает за скачивание и запуск дополнительных вредоносных модулей с URL-адресов, полученных модулем peer-to-peer. Скачанные файлы закодированы шифром RC4, ключ которого прописан в коде. Наиболее вероятно, что Sality и его вредоносные модули созданы одним и тем же автором. Однако вредоносные модули работают по традиционной схеме и соединяются с управляющими серверами, расположенными по всему миру.
Список вредоносных модулей, распространяемых Sality:
спам-генераторы и спам-шлюзы (spam relay), содержание спама обычно связано с рекламой казино или фармацевтикой;
НТТР-прокси, используются для маскировки сетевой активности и достижения анонимности;
сборщики информации, собирают пароли, учетные записи и персональные данные, в том числе и данные веб-форм (внедрение в Internet Explorer);
заражение веб-сайтов. Этот вредоносный модуль перехватывает учетные записи FTP, после чего подключается к данным FTP и заражает HTML-файлы. Заражение происходит путем внедрения IFRAME, указывающего на сторонний ресурс или с использованием скриптов, выполняемых на стороне сервера. Цели подобных заражений могут варьироваться от drive-by загрузок и заражения пользовательских компьютеров до спам-рассылок;
распределенная система взлома, в феврале 2011 года был распространен модуль, который мог работать в нескольких режимах в зависимости от команд С&С-сервера:
- обнаружение SIP и HTTP серверов: С&С отправляет модулю список IP-адресов для сканирования. Результат сканирования сообщается С&С-серверу;
- регистрация аккаунтов на целевом сервере (функционал реализован не полностью);
- взлом аккаунтов: С&С отправляет модулю список аккаунтов и список паролей для перебора. Обнаруженная корректная пара логин — пароль отправляется обратно на С&С-сервер;
- взлом Asterisk FreePBX, обнаруженные в предыдущем шаге или полученные из других источников списки серверов и списки паролей используются для обнаружения и подбора паролей к серверам Asterisk FreePBX. Цели у подобного рода атак, как правило, финансовые. Можно зарегистрировать платный номер и совершить звонок на него с каждого из обнаруженных SIP-аккаунтов. Взлом FreePBX может нести и более серьезные последствия, так как злоумышленник получает контроль над аутентификацией и тарификацией пользователей, а также маршрутизацией звонков;
экспериментальные модули, на сегодняшний день известно всего два экспериментальных модуля, запущенных, по всей видимости, для отработки технологии. Первый модуль — это скрипт автоматической регистрации приложения Facebook. Модуль — сборщик информации, внедренный в Internet Explorer через стандартный СОМ-интерфейс, собирает из веб-форм регистрационные данные, отправляет С&С-серверу и сохраняет локально в зашифрованном виде. Экспериментальный модуль выполняет скрипт со следующей очередностью действий: открыть Internet Explorer в режиме видимого (!) окна, перейти на сайт facebook.com, войти, используя перехваченные регистрационные данные, перейти на страницу приложения VIР Slots (# 11908467418), разрешить доступ приложению, закрыть окно. Приложение использует доступ на уровне 'Basic information' — имя, пол, фото и список друзей. На данный момент этот модуль не производит никаких вредоносных действий (потому и назван экспериментальным), однако сама возможность подобного рода активности позволяет злоумышленникам использовать взломанный аккаунт Facebook для распространения спама (постинги) или для приобретения виртуальных кредитов.
Еще один скрипт, распространенный Sality, выполнял следующие действия: запустить Internet Explorer в невидимом режиме, перейти на сайт google.com; запустить поиск строки «auto insurance bids»; закрыть окно. Скрипт служит экспериментальным целям и позволяет продвигать те или иные темы в Google Trends.
Модуль peer-to-peer
Модуль peer-to-peer отвечает за распространение URL-ссылок на вредоносные модули. Р2Р-сеть не имеет фиксированных С&С-серверов. В случае Sality попытка или заблокировать сеть ботнета будет означать необходимость заблокировать все superpeer, что теоретически возможно, но трудно реализуемо. Первичное соединение с сетью происходит с помощью начального списка (bootstrap list) пиров, содержащегося в зараженных файлах и включающего публичный IP и порт ряда уже существующих пиров. Во всех вариациях вируса, размер списка ограничивается 1000 записями.
В момент первого запуска Sality в реестре Windows создается локальная копия начального списка (в ветке HKEY_CURRENT_USER под псевдослучайным именем), и в дальнейшем этот локальный список обновляется путем добавления новых активных и удаления неактивных пиров.
Существует, по меньшей мере, четыре версии протоколов:
- экземпляры реализации версии протокола V1 не обнаружены;
- версия V2 впервые была обнаружена в начале 2008 года, но на данный момент уже не используется;
- версия протокола V3 и сеть на ее основе на сегодняшний день является наиболее распространенной и разветвленной. Первые упоминания об этом протоколе встречаются, начиная с 2009 года;
- сеть на основе протокола V4 заметно меньше сети V3. Впервые была обнаружена в конце 2010 года.
Различия между протоколами версий V2 и V3 минимальны. Поскольку каждый зараженный файл содержит открытый ключ, используемый для проверки списка URL-ссылок, каждая новая версия протокола требует использования нового ключа. Можно предположить, что переход от версии V2 к V3 был продиктован фактом компрометации закрытого ключа, используемого для подписи списка URL.
В протоколе 3-й версии была потенциальная уязвимость в алгоритме работы, которая позволяла перехватить управление ботнетом (антивирусным компаниям или другим злоумышленникам) — после скачивания и проверки списка URL-адресов не производится никаких других проверок ни самих адресов, ни файлов, скачиваемых с них. То есть можно было изменить записи DNS и/или подменить файлы-модули на свои, что вело к перехвату управления. Информация о такой возможности в целях уничтожения ботсети была опубликована неизвестным под псевдонимом law-abiding citizen (законопослушный гражданин).С целью устранения указанных слабых сторон 3-й версии, по-видимому, автор и разработал 4-ю версию, в которой все закачиваемые файлы должны содержать цифровую подпись и проверяются перед запуском при помощи открытого ключа RSA длинной 2048 бит.
Наши дни
В настоящее время Sality продолжает оставаться одной из наиболее распространенных вредоносных программ в мире. Группа исследователей из Калифорнийского университета в Сан-Диего и университета Наполи (Италия) в октябре 2012 года опубликовала отчёт (pdf, eng) с анализом активности Sality. Информация была собрана с помощью пассивной системы мониторинга трафика UCSD Network Telescope. Исследователи утверждают, что в 12-дневный период в феврале 2011 года с 3 млн IP-адресов приходили пакеты на инициацию соединения по протоколу SIP. По мнению авторов отчета, владельцы ботнета пытались брутфорсить SIP-сервера для создания фейковых аккаунтов, чтобы использовать их для бесплатной телефонии, анонимных звонков, мошенничества и т.д.
Интересно то, что использовался ряд методик, чтобы максимально замаскировать сканирование. Например, с 1 млн IP-адресов пришло всего по одному пакету на инициализацию соединения, затем эти адреса не использовались. Диапазон сканируемых IP-адресов изменялся по фрактальной кривой Гильберта, чтобы затруднить обнаружение факта сканирования. Исследователи считают, что был просканирован весь диапазон IPv4, то есть весь интернет, но этот трафик не смогла бы обнаружить ни одна система детектирования угроз, так как запросы шли с разных IP. Указанные факты помогают понять размах деятельности ботнета Sality и оценить интеллектуальные способности его создателей.
Данный текст является неполным русским переводом отчета компании Symantec «Sality: Story of a Peer-to-Peer Viral Network», ver.1, июль 2011 (pdf, eng). Перевод взят в дневнике пользователя Live Journal Andrey-Perla и частично переработан.
Автор: nuklearlord