Pull to refresh

Conficker — из пушки по воробьям

Reading time 8 min
Views 42K
Conficker — семейство вредоносного программного обеспечения, относящегося к категории червей. Conficker — название, наиболее часто употребляемое в прессе и образованное путем перестановки частей домена trafficconverter.biz, к которому обращалась первая версия ВПО, согласно другой версии название образовано от английского слова configuration и немецкого слова ficker (синоним английского fucker). Среди зарубежных антивирусных компаний используется название Downadup, а так же Kido в классификации Kaspersky Lab. Первые образцы были обнаружены в ноябре 2008 года. По состоянию на январь 2009 было поражено около 9 миллионов компьютеров во всём мире. Столь большое число обусловлено использованием для своего автоматического распространения уязвимости службы Server операционной системы Microsoft Windows MS08-067. Следует отметить, что на момент распространения компания Microsoft уже выпустила обновление безопасности, устраняющую данную уязвимость. Однако тот факт, что обычные пользователи, как правило, не уделяют должного внимания механизму постоянного обновления операционной системы (в том числе из-за использования «пиратских» копий), сыграл немаловажную роль. К сожалению, в очередной раз на практике было продемонстрировано пренебрежительное отношение к вопросам компьютерной безопасности. В апреле 2009 года размер ботсети оценивался в 3.5 миллиона.
Существует пять основных модификаций Conficker, обозначаемых буквами A (21 ноября 2008), B (29 декабря 2008), C (20 февраля 2009), D (4 марта 2009), E (7 апреля 2009). В терминологии некоторых антивирусных компаний используется наименования A, B, B++, C, D соответственно.

Conficker.A

Код ВПО скомпилирован в виде динамической библиотекой Windows (PE DLL-файл) и упакован при помощи UPX. Для своих копий присваивает дату создания и изменения, взятую из файла kernel32.dll, что бы исключить возможность своего обнаружения сортировкой по дате. В зависимости от версии операционной системы использует разные методы автоматического запуска при следующем старте системы. Если установлена Windows 2000, код внедряется в процесс services.exe. В противном случае создается служба с именем netsvcs, запускаемая через svchost.exe.
Данная версия содержала только один метод распространения — посредством эксплуатации уязвимости в службе Server (MS08-067). Для этого Conficker запускает HTTP сервер на случайном TCP порту, который затем используется для загрузки себя на другие компьютеры. Conficker получает список IP адресов компьютеров, находящихся в сетевом окружении, путем сканирования. Для обеспечения быстрого распространения в сети червь увеличивает возможное число сетевых соединений в системе, используя модификацию образа системного драйвера tcpip.sys, загруженного в памяти, а так же изменяя параметр
'TcpNumConnections' = 'dword:0x00FFFFFE' в ветке [HKLM\ SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] реестра. Далее производит атаку удаленных компьютеров. Для этого отсылается специальным образом сформированный RPC-запрос, который вызывает переполнение буфера при вызове функции wcscpy_s в библиотеке netapi32.dll. В результате этого управление передается загрузчику, который скачивает Conficker с зараженного компьютера и запускает его на выполнение. Для невозможности повторного использования уязвимости MS08-067 (что бы компьютер не могли заразить другие вредоносные программы), Conficker устанавливает ловушку на вызов функции NetpwPathCanonicalize библиотеки netapi32.dll, предотвращая переполнение буфера и реализуя, таким образом, технологию hotpatching (установка обновлений без перезагрузки, хотя на самом деле никакого патча не устанавливается).
Имя командного центра для управления не является жестко заданным, ежедневно генерируется 250 доменов по псевдослучайному алгоритму с использованием префиксов 5 доменов верхнего уровня. Таким образом, создатели пытались защититься от внесения адресов командного центра в black-list сотрудниками антивирусных компаний и потери управления. С них Conficker пытается получить команды на загрузку и запуск других вредоносных программ из Интернета. Кроме этого, обращается к домену trafficconverter.biz, пытается загрузить с него и выполнить файл с фиксированным именем loadadv.exe.
Для защиты от подмены загружаемых файлов, применялись криптографические алгоритмы с использованием шифрования и цифровой подписи. Для загружаемого файла высчитывался хэш SHA-1 длинной 512 бит, который затем использовался в качестве ключа шифрования по алгоритму RC4, этот хэш так же использовался для цифровой подписи RSA с ключом 1024 бит. В отличии от последующих вариантов не содержал в себе функций самозащиты.
Высказывались предположения, что Conficker разработали на Украине, так как Conficker.A проверяет наличие украинской раскладки клавиатуры и самоуничтожался в этом случае. Кроме того, скачивается база данных GeoIP с сайта maxmind.com и при сканировании украинские адреса, выявленые с ее помощью, не заражаются. В следующих версиях этот функционал уже не был реализован.

Conficker.B

В этой версии для расширения «ареала обитания» были добавлены еще два механизма распространения — путем использования сетевых ресурсов (каталогов) со «слабыми» паролями и алгоритм заражения USB-Flash носителей с запуском через autorun.inf. Conficker пытается подключиться к удаленному компьютеру под учетной записью администратора, для этого производится последовательный перебор паролей согласно списку, заданному в коде. При успешном подборе на удаленный компьютер копируется файл червя и создается задание Task Sheduler для его запуска в качестве сервиса при помощи regsvr32. Для автозапуска с USB-Flash носителя создается обфусцированный файл autorun.inf, сам dll файл помещается в скрытый каталог RECYCLER под случайным именем с расширением vmx.
Механизм криптографической защиты загружаемых файлов от модификации претерпел изменение, в качестве алгоритма хэширования был применен алгоритм MD6 (новейший на том момент, разработан в 2008 году), длинна ключа RSA была увеличена до 4096 бит. В коде явно прослеживается желание авторов устранить все потенциальные возможности использовать уязвимость типа «переполнение буфера» или слабости реализации криптоалгоритмов.
В этой версии были внедрены функции самозащиты. В частности, отключалсь следующие службы: Windows Automatic Update Service; Background Intelligent Transfer Service;
Windows Security Center Servic; Windows Defender Service; Windows Error Reporting Service. Тем самым отключался механизм обновления операционной системы, посредством которого могла произойти установка специализированных средств удаления от компании Microsoft. Устанавливались перехваты на вызов следующх функций библиотеки dnsrslvr.dll: DNS_Query_A; DNS_Query_UTF8; DNS_Query_W; Query_Main; SendTo; NetpwPathCanonicalize; InternetGetConnectedState. При этом происходила фильтрация имен запрашиваемых через сервис DNS ресурсов с целью запретить доступ к определенному списку доменов. Таким образом блокировался доступ пользователю к основным сайтам, где можно скачать обновление антивирусных баз или специальные утилиты удаления вредоносных программ.

Conficker.C

Основное изменение касается только механизма генерации доменов, из-за чего некоторые антивирусные компании называют эту версию B++. В качестве ответа инициативе Conficker Working Group по резервированию имен доменов, генерируемых Conficker по псевдослучайному алгоритму, разработчики увеличили их количество с 250 до 50.000 в сутки, что свело на нет попытки их ежедневной регистрации. Для генерации использовались префиксы уже 8 доменов верхнего уровня (вместо 5), из 50.000 выбирались 500, это означало ежедневное подсоединение около 1% всех зараженных компьютеров и снижало, таким образом, нагрузку на управляющий центр. Например, если взять цифру 10 миллионов, значит, сервер фактически подвергался DDOS атаке с 100.000 компьютеров.

Conficker.D

Количество используемых для генерации доменов префиксов увеличилось с 8 до 110. Была устранена ошибка в реализации MD6 типа «переполнение буфера», допущенная разработчиком алгоритма Рональдом Ривестом и обнародованная 19 февраля 2009 года. Усовершенствовалась система самозащиты — отключалась возможность загрузки в «безопасном режиме» и производилась попытка завершить процессы программ, в именах которых присутствуют заданные строки (антивирусные программы).
Полностью изъяты механизмы собственного распространения. Внедрен механизм peer-to-peer для обновления. Для приема информации от других копий червя создаются два «серверных» потока, один работает по протоколу TCP, другой — по протоколу UDP. Интересной особенностью реализации p2p, является отказ от исходного списка пиров. Этот список обычно или задается внутри исполняемого кода, либо размещается на публичных серверах. Conficker же находит свои пиры методом сканирования IP адресов. Для каждого найденного IP адреса проверялось, функционирует ли на нем Conficker. Если да, создавался «клиентский» поток для связи с удаленной копией. При сканировании проверялось нахождение IP в black list адресов антивирусных компаний, к ним обращение не производится. «Серверные» потоки никогда не добавляют в список пиров адреса подключенных клиентов. Адреса добавляются только «клиентскими» потоками в случае, если текущая версия червя совпадает с удаленной. В случае разных версий происходит загрузка новейшей либо клиентом от сервера, либо сервером от клиента. Механизм p2p предусматривает два вида распространения, в режиме сохранения загруженного файла для последующей «раздачи», либо в режиме запуска в адресном пространстве в виде потока. Это позволяет производить замену выполняемого кода «налету» без его сохранения в виде файла. В то же время, файлы, загружаемые по сгенерированным доменам, запускаются и работают независимо от запущенного Conficker.

Conficker.E

В очередной раз было введено несколько новшеств. Например, процедура сканирования доступных IP для заражения и передачи обновлений (через механизм P2P) оценивает ширину канала в Интернет и согласно этой оценке регулирует свою активность по распространению и сканированию. Это делается для того, чтобы не привлекать внимание администраторов ЛВС. Еще одна особенность — изменение сетевой инфраструктуры для своего распространения. Алгоритм заражения требует, чтобы заражаемый хост инициировал соединение (после успешного срабатывания эксплоита MS08-067) с заражающим хостом для загрузки кода Conficker. Брандмауэры, установленные в модемах и маршрутизаторах, обычно блокируют такую активности. Кроме того, заражённые компьютеры, скорее всего, располагаются за NAT. Поэтому Conficker предварительно обнаруживает шлюзы в локальной сети. Для этого запускается собственный SSDP сервер, который рассылает широковещательные сообщения по всей сети. Сетевое стройство, поддерживающее SSDP, посылает ответ. Обнаружив, таким образом, шлюз, червь перенастраивает оборудование через механизм UPnP для организации себе такого канала, который шлюз будет пропускать в обратном направлении (из внешней сети вовнутрь) и уже с использованием этого канала заражает другие компьютеры.
Возвращена процедура заражения посредством эксплуатации уязвимости MS08-067.
Conficker.E удалял себя, если текущая дата была 3 мая 2009 года или позже, но оставлял на компьютере свою предыдущую версию.
Наконец-то с этой версии началась «монетизация прибыли», для этого загружались два вида вредоносных программ. Первая — поддельный антивирус Spyware Protect 2009, загружаемый с серверов, расположенных на Украине. Запустившись, он периодически выводит на экран сообщения об обнаруженных в системе вирусах и предлагает купить свою платную полную версию с возможностью лечения. Вторая — троян Waledac, также известного как Iksma по классификации Kaspersky Lab, обнаруженного в январе 2009 года. Основной функционал Waledac — кража персональных данных и рассылка спама. В феврале 2010 года Федеральный суд штата Вирджиния удовлетворил иск Microsoft и разрешил приостановить обслуживание 277 доменов, связанных с системой управления ботнетом Waledac. Все эти были домены зарегистрированы в зоне .com, оператором которой является американская компания VeriSign.

Послесловие

Анализ Conficker вызывает крайне противоречивые чувства. С одной стороны — крайне высокий уровень продуманности. С другой — распространенная, в конечном итоге, «полезная нагрузка» никак не вяжется с тем фактом, что злоумышленники имели очень большие возможности по установке сколь угодно большого количества ВПО на конечные компьютеры, в том числе для кражи учетных записей платежных систем. То есть — из пушки по воробьям. Создается впечатление, что разработчики, в основном, преследовали исследовательские цели. До сих пор не понятно, является ли Украина родиной этой вредоносной программы. Некоторые исследователи отмечают, что рабочий эксплоит к уязвимости MS08-067 первым появился в Китае, и его код почти полностью воспроизведен в Conficker. Вьетнамская компания BKIS, занимающаяся компьютерной безопасностью, утверждает, что Conficker был создан в Китае. Эксперты BKIS сделали вывод о китайском происхождении червя Conficker после анализа его кода, который имеет много общего с червем Nimda, виновником эпидемии 2001 года. Предполагается, что Nimda был разработан в Китае, так как в коде были обнаружены указания на эту страну. Официально эти данные не были подтверждены.

Ссылки:

аналитический отчет компании Symantec «The Downadup Codex», edition 2.0 (eng, pdf);
анализ функционирования версий A, B, B++ © от компании SRI International «An Analysis of Conficker's Logic and Rendezvous Points» (eng, htm);
анализ функционирования версии C (D) от компании SRI International «Conficker C Analysis» (eng, htm);
описание работы механизма peer-to-peer от компании SRI International «Conficker C P2P Reverse Engineering Report» (eng, htm).
Tags:
Hubs:
+70
Comments 41
Comments Comments 41

Articles