Забавный факт: несмотря на огромное количество зараженных, многие даже не подозревают об эпидемии. Вирус практически никак себя не проявляет - попробуй сходу определи, что твой компьютер в ботнете :).
По оценкам разных антивирусных компаний, Downadup заразил от 9 до 11 миллионов машин. Учитывая развитие средств защиты, это кажется нереальной цифрой. Да, все вокруг трубят, что виновата критическая ошибка в Винде, заплатку для которой Microsoft выпустила еще в феврале. Но даже при наличии убойного эксплоита такой огромный ботнет мог собрать только неординарный вирус, с приемами которого антивирусы еще не сталкивались. Однако при более внимательном рассмотрении легко выясняется, что Downadup - малварь довольно пионерская. И правильнее ее назвать - грамотно приготовленным червем, собранным по давно известным рецептам – с небольшой, но действенной импровизацией.
Какие рецепты использовали создатели? Вот в этом мы и разберемся.
Рецепт 1: незаметно разместиться во многих частях системы
Заразив машины, червь копирует свое тело во вполне привычные места:
* %System%\[Random].dll
* %Program Files%\Internet Explorer\[Random].dll
* %Program Files%\Movie Maker\[Random].dll
* %All Users Application Data%\[Random].dll
* %Temp%\[Random].dll
* %System%\[Random].tmp
* %Temp%\[Random].tmp
Вместо маскировки под какой-нибудь системный файл (которая с появлением все более интеллектуальных менеджеров задач становится бесполезной) в имени файла используется случайно сгенерированный набор символов. Одним из простейших, но зачастую действенных приемов для отлова свежей малвари в системе является банальный поиск файла по свежей дате создания. Чтобы не попасться на такую простую уловку, каждому из созданных файлов червь присваивает значения даты, взятые с файла %System%\kernel32.dll. После этого производится ряд изменений в реестре, дабы обеспечить запуск червя. Но смею заверить, никаких подозрительных имен процессов в менеджере задач не найти - Downadup аттачит себя в svchost.exe, explorer.exe и services.exe.
Рецепт 2: обезоружить систему, отключив мешающие сервисы
Чтобы комфортно обитать в системе и делать все, что заблагорассудится, червю необходимо немного подстроить ее под себя. Самая главная задача – как можно дольше продержаться в системе. Большинство действий направлено именно на это. Забегая вперед, скажу, что одним из способов заражения систем является эксплуатирование серьезной дыры в RPC-службе Винды (что-то знакомое, правда?). Патч вышел несколько месяцев назад, но коль уж пользователь поленился тогда установить апдейт, то и нечего делать это теперь. Первым делом червь отключает службу автоматических обновлений - Windows Automatic Update Service (wuauserv). У пользователя по-прежнему остается возможность скачать патч вручную - тем более, о том, что необходимо поставить заплатку под номером MS08-67, трубят на каждом углу. Но и здесь - облом. Червь использует еще один тривиальный прием. Перехватывая вызовы API-функций, отвечающих за работу с DNS, он препятствует обращению к нежелательным для него доменам. Всякий раз, когда, например, браузер пытается выполнить DNS-запрос, вызывая функции DNS_Query_A, DNS_Query_W или DNS_Query_W, червь проверяет, не желает ли юзер обратиться на запрещенный сайт. Под раздачу попадают все домены, указывающие своим названием на принадлежность к серверам Microsoft или распространенных антивирусных компаний и некоторым другим ресурсам.
Просто для примера, блокируются все сайты со следующими словами в названии: microsoft, symantec, norton, mcafee, trendmicro, sophos, panda, avast, avira, avp, avg, kaspersky, f-prot, nod.
Этот всем известный прием работает идеально. Жертвы бьются в конвульсиях, не имея возможности даже скачать антивирус и обновить базы. Помимо этого отключаются еще и центр обеспечения безопасности Windows Security Center Service (wscsvc), и сервис Windows Defender Service (WinDefend). А чтобы пользователей не доставал Microsoft по поводу возникающих в системе ошибок (а они действительно довольно часто возникают после заражении системы), отключаются 2 сервиса Windows Error Reporting Service. Тут есть еще важный нюанс, который показывает, что создатели подготовились, можно сказать, на «отлично». Под Vista'ой эти сервисы так просто не отключить ввиду автоматической системы для настройки стека TCP/IP, которая тут же подпортит жизнь. Поэтому, обнаружив, что попал в Vista, червяк тут же отключает эту функцию, выполнив консольную команду: netsh interface tcp set global autotuning=disabled
Рецепт 3: использовать разные способы распространения
Большинство червей используют только один способ распространения – создатели плохо штудировали учебники, в отличие от автора Downadup. Наш червь использует сразу три метода:
- через «сетевое окружение», перебирая пароль администратора к системной шаре ADMIN$;
- используя эксплоит для уязвимости 0867, найденной во всех версиях Windows;
- через внешние носители, используя автозапуск.
В итоге получаем эффект синергии!
Разберем каждый из способов более подробно.
Рецепт 4: распространяться через сетевое окружение
Прием на самом деле очень простой. Червь использует системную функцию NetServerEnum, чтобы найти «соседние компьютеры», и пытается залогиниться на каждую систему. Сначала используются параметры учетной записи пользователя, но это работает только в том случае, если на сторонней машины у него есть права администратора. Этот вариант чаще всего проваливается. Далее червь, через API-функцию NetUserEnum, получает список пользователей на удаленном компьютере и начинает брутфорсить по ним, используя небольшой словарик, в который входят распространенные пароли. Например:
[имя пользователя]
[имя пользователя][имя пользователя]
[имя пользователя наоборот]
111111 и прочие простые числовые пароли
qwerty и т.д.
В случае, если червь удачно обратится к расшаренному ресурсу, он создает копию себя в папке ADMIN$, опять же со случайным именем файла:
\\[Server Host Name]\ADMIN$\System32\[random filename].[random extension]
Затем на удаленной системе создается ежедневное задание в планировщике, с помощью которого выполняется следующая команда, запускающая червя:
rundll32.exe [random filename].[random extension], [random]
Рецепт 5: распространяться с помощью эксплоита
Понятно, что для масштабного распространения одного (всем известного) приема мало - нужна фишка. И такой фишкой в Downadup'е стал эксплоит, который пробивает любую непропатченную систему с уязвимостью переполнения буфера MS08-067 в сервисе «Сервер». Для этого червь отсылает удаленной машине специальным образом сформированный RPC-запрос, вызывающий переполнение буфера при вызове функции wcscpy_s в библиотеке netapi32.dll. На компьютере запускается специальный код-загрузчик, который скачивает с зараженной машины исполняемый файл червя и запускает. Чтобы это реализовать, червь сначала коннектится к сайтам http://www.getmyip.org, http://checkip.dyndns.org и некоторым другим с целью выяснить внешний IP-адрес системы (%ExternalIPAddress%). После чего использует его для создания HTTP-сервера на случайном порту: http://%ExternalIPAddress%:%RandomPort%
Созданный HTTP-сервер позволяет малвари отправить с зараженной системы специально собранные пакеты с эксплоитом на другие машины. Так, если эксплоит пробил систему, то ее тут же заставляют скачать копию червя с первой зараженной системы по HTTP. Как правило, тело червя имеет одно из следующих расширений: bmp, gif, jpeg, png. А для того чтобы быстрее распространяться, червь делает небольшую поправку в реестре, значительно увеличивая количество возможных TCP-подключений:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
"TcpNumConnections" = dword:0x00FFFFFE
Как и заведено, заразив систему червь делает невозможным повторное эксплуатирование уязвимости (например, другими вирусами), перехватывая вызовы функции NetpwPathCanonicalize.
Рецепт 6: распространяться на внешних устройствах
Каждый, кто пользуется USB-девайсами, хотя бы раз, но сталкивался с вирусами, которые переносятся на флешках. Причиной тому – система автозапуска, но о проблеме знают как сами пользователи, так и антивирусы, которые с грехом пополам научились обнаруживать подозрительные файлы autorun.inf. Казалось бы, Downadup должен обломаться и не сильно рассчитывать на этот способ распространения, ан нет. Вместо обычного Autorun.inf, который имеет очень маленький размер, создатели слегка обфусцировали файл, добавив туда массу мусора и, тем самым, обманув многие сигнатурные антивирусы. Для увеличения размера можно использовать специальные символы. Windows игнорирует их во время парсинга и отлично понимает оставшуюся корректную часть файла, где спрятались строчки для инфицирования системы:
Open=RUNDLL32.EXE .\RECYCLER\jwgvsq.vmx
Несложно догадаться, что команда выполняет запуск DLL-ки jwgvsq.vmx, которая находится в скрытом каталоге на том подключаемом диске, где лежит autorun.inf.
Рецепт 7: позволить скачивать любые файлы
Все инфицированные системы - это ботнет. В случае Downadup, – ботнет на 8-9 миллионов машин, что в денежном эквиваленте может приносить десятки тысяч долларов в день. Спам, кликботы, ддосы, продажа трафика, промышленный шпионаж, прокси, подмена поисковой выдачи и еще дюжина другая способов заработать. Но такой махиной нужно, во-первых, управлять, а, во-вторых, каким-то образом использовать. Понятно, что в тело червя всего функционала не уместить, да и не нужно - достаточно предусмотреть возможность загрузки дополнительных программ, например, хорошего троя :). Создатели такую возможность предусмотрели и сделали это очень хитро.
Изначально никакого управления над зараженной машиной нет. То есть нельзя просто взять и сказать ей: «Скачай трой с такого-то HTTP-адреса». Обычный ход вирус-мейкеров - жестко зашить адрес управляющего сервера в тело вируса, но какова вероятность, что такой домен проживет хотя бы неделю, особенно под натиском многомиллионного ботнета? Небольшая. К тому же один домен легко закрыть - и вирус тут же станет безопасным. Downadup намного умнее. Червь каждый день использует 250 разных доменов, имена которых, конечно же, внутрь тела не вшиты. Вместо этого был придуман специальный алгоритм, позволяющий по текущей дате генерировать названия новых управляющих доменов, к которым и стучится червь. Задача хозяев ботнета - заблаговременно их зарегистрировать.
Выглядит это примерно следующим образом. Сначала Downadup соединяется с одним из нескольких заданных серверов (google.com, baidu.com, w3.org и другие) для того, чтобы получить системную дату. Полученная дата тут же используется для генерации списка доменов (%PredictableDomainsIPAddress%), откуда червь может скачать дополнительные файлы. Он проверяет, перевалила ли дата за 1 января 2009 и в случае успеха скачивает файлы с адреса, запуская их после загрузки: http://%PredictableDomainsIPAddress%/search?q=%d
Резюме
И что мы имеем в итоге? Качественно сделанный вирус, использующий вполне стандартные приемы. Сильно удручает тот факт, что практически все антивирусные компании, которые так привыкли громко заявлять о себе, не смогли ему вовремя противодействовать. Это касается даже серьезных корпоративных решений, за которые приходилось краснеть и, разводя руками, отправлять специалистов для ручного удаления заразы. Особенно меня забавляют инструкции по удалению Downadup'а, которые публикуются на тех же самых сайтах антивирусников. Напомню, все они заблокированы на инфицированных компьютерах. В этих же инструкциях - ссылки на закачку специальных утилит, опять же с заблокированных серверов. Классно работаете, ребята.
Как избавиться от червя вручную
Я лично рекомендую не полагаться ни на какие сканнеры и специальные утилиты, а удалять такую заразу исключительно вручную.
Как водится, если хочешь что-то сделать хорошо, то сделай это сам. Алгоритм такой:
1. Во-первых, нужно удалить ключ системного реестра:
[HKLM\SYSTEM\CurrentControlSet\Services\netsvcs]
2. Далее удаляем строку «%System%\<rnd>.dll» из значения следующего параметра ключа реестра:
[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost] "netsvcs"
3. Ребутимся.
4. После перезапуска нужно удалить оригинальный файл червя (его расположение на зараженном компьютере зависит от способа, которым программа попала на компьютер).
5. Для этого пытаемся найти и удалить файл:
%System%\<rnd>.dll, где <rnd> - случайная последовательность символов.
6. А также килляем следующие файлы со всех съемных носителей:
<X>:\autorun.inf
<X>:\RECYCLER\S-5-3-42-2819952290-8240758988-879315005-3665\.vmx, где rnd – случайная последовательность строчных букв, X – буква съемного диска.
Как деактивируются «лишние службы»
Пример Downadup'а показал, насколько просто отключаются многие защитные механизмы Винды. Червь удаляет несколько ключей из реестра для того, чтобы деактивировать Security Center Notifications и отключить автозапуск Windows Defender. Для обхода файрвола создается следующая запись в реестре - дабы система могла скачать копию червя:
HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List,
[PortNumber]:TCP = "[PortNumber]:TCP:*Enabled:[random]"
А для маскировки в системе червь сначала удаляет все точки восстановления системы, созданные пользователем, а затем немного колдует в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Advanced\Folder\Hidden\SHO WALLCheckedValue= dword:00000000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost, netsvcs = %Previous data% and %Random%
Как подсчитать количество зараженных машин?
Как выяснить, сколько компьютеров было поражено червём? Ведь нет никакого специального сервиса для хакеров, который вел бы статистику как, скажем, как Google Analytics для обычный вебсайтов :). Не являясь владельцем ботнета, об общем числе зомби можно лишь строить предположения, однако, в случае c Downadup все намного хитрее. Как уже было сказано, для управления ботнетом используется 250 доменов каждый день, которые генерируются по специальному алгоритму в зависимости от текущей даты. Некоторые антивирусные лаборатории, в том числе F-Secure и Symantec, опубликовали в своих блогах результаты интересного эксперимента. Расковыряв в теле червя алгоритм генерации, ребята зарегистрировали некоторые из возможных доменов и стали отслеживать подключения к ним. Каждое из подключений представляет собой обычный HTTP-запрос, который отображается в логе веб-сервера примерно следующей записью:
x.x.x.x [16/Jan/2009:09:45:09 -0700] "GET /search?q=29 HTTP/1.0" 404 282 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
Но даже имея такую статистику, дать оценку зараженных компьютеров очень сложно. Многие из них работают через NAT и поэтому имеют один и тот же IP. Связка уникальных IP и User-Agent так же давала лишь приблизительные результаты. Зато позже выяснился один интересный момент: оказывается, что параметр /search/q=<некоторое число> вовсе не является случайным, как предполагалось изначально. Он увеличивается каждый раз, когда червь успешно поражает машину через уязвимость MS08-067 - а значит, показывает, сколько компьютеров машина заразила с момента последнего старта. В примере выше одна инфицированная система заразила 29 компьютеров. Вот теперь, обработав логи, и собрав информацию о самых "плодовитых" червей, можно было сделать более точный вывод о количестве заражений. Если верить F-Secure, эта цифра составляла более 8 миллионов машин на 16 января. Нехило!
INFO
При обнаружении UPnP-роутера в сети червь умеет сам открывать необходимый для дальнейшего заражения http-порт.
WARNING!
За использование полученной информации в незаконных целях редакция ответственности не несет.
WWW
Описание ошибки в сервисе "Служба" можно прочитать здесь: http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx
Список доменов от F-Secure, которые вероятно будут использоваться для управления ботнетом в феврале (хорошо бы занести в блок-лист):http://www.f-secure.com/weblog/archives/Downadup_Domain_Blocklist_February.txt
Автор: Степан «Step» Ильин