Эксплуатация уязвимости в процедуре обновления DrWeb

Эксплуатация уязвимости в процедуре обновления DrWeb

В этой статье я хочу более подробно рассказать о проблемах протокола обновления в антивирусе Dr.Web, благодаря чему, в случае перехвата трафика, становится возможным подмена компонентов антивируса и выполнение произвольного кода. Информацию об уязвимости я впервые увидел в материалах конференции SyScan2014 в презентации Breaking Antivirus Software (Joxean Koret), и т.к. факт наличия уязвимости уже известен, то особого смысла в еще одной публикации не было. По крайне мере, до одного момента.

В обсуждении статьи «Данные около 70 000 карт были скомпрометированы на платежном шлюзе РЖД» меня искренне удивила реакция некоторых читателей, и предположительно одного из сотрудников компании Dr.Web, который отказался признавать наличие проблем в ПО. Поэтому, было решено самому разобраться в деталях, а также проверить возможность эксплуатации. Надеюсь, эта публикация поспособствует скорейшему исправлению ситуации.

Исходные данные:

В качестве «подопытного» выбран Dr.Web версии 6.0, как обладающий множеством сертификатов: ФСТЭК, ФСБ, Минобороны РФ. Остальные версии не рассматривались, так что, возможно в них присутствуют аналогичные проблемы, а возможно и нет. В ходе эксперимента все настройки антивируса выставлены по-умолчанию, встроенная защита НЕ отключалась. В качестве операционной системы используется Windows 7.

  • Dr.Web ® Virus-Finding Engine drweb32.dll (7.00.9.04080)
  • Dr.Web ® Scanning Engine dwengine.exe (7.0.1.05020 (Build 9393))
  • Dr.Web ® Windows Action Center Integration dwsewsc.exe (7.0.1.05020 (Build 9393))
  • Dr.Web File System Monitor spiderg3.sys (6.0.10.12290)
  • Dr.Web Protection for Windows dwprot.sys (7.0.0.08090)
  • SpIDer Agent for Windows spideragent.exe (6.0.5.10310)
  • SpIDer Agent admin-mode module for Windows spideragent_adm.exe (6.0.5.10310)
  • SpIDer Agent settings module for Windows spideragent_set.exe (6.0.5.10310)
  • SpIDer Mail ® for Windows Workstation spiderml.exe (6.0.3.08040)
  • SpIDer Mail ® for Windows Workstation settings module spml_set.exe (6.0.3.08040)
  • Dr.Web Winsock Provider Hook drwebsp.dll (6.0.1.04140)
  • Dr.Web Winsock Provider Hook drwebsp64.dll (6.0.1.04140)
  • Dr.Web© Scanner for Windows drweb32w.exe (6.00.16.01270)
  • Dr.Web ® Console Scanner dwscancl.exe (7.0.1.05020 (Build 9393))
  • Dr.Web ® Shell Extension drwsxtn.dll (6.00.1.201103100)
  • Dr.Web ® Shell Extension drwsxtn64.dll (6.00.1.201103100)
  • Dr.Web Updater for Windows drwebupw.exe (6.00.15.201301210)
  • Dr.Web Helper drwreg.exe (6.00.12.201102110)
  • Dr.Web SysInfo dwsysinfo.exe (7.00.3.201204270)
  • DrWeb ® Quarantine Manager dwqrui.exe (7.0.1.05020 (Build 9393))
  • Dr.Web Adds-on unpacker drwadins.exe (6.00.0.02270)
  • Dr.Web ® for Microsoft Outlook Settings drwebsettingprocess.exe (6.00.0.201101130)
  • Dr.Web ® for Microsoft Outlook Messages drwmsg.dll (6.00.0.201101130)
  • Dr.Web ® for Microsoft Outlook drwebforoutlook.dll (6.00.0.201101130)

Для эксплуатации уязвимости необходимо, чтобы атакующий имел возможность перенаправления трафика пользователя (например, вследствие подмены DNS-сервера, отравления ARP кэша или как-то еще). Для простоты эксперимента, в тестовой среде компьютеры клиента и злоумышленника находятся в одной сети:

Описание уязвимости
  • update.geo.drweb.com
  • update.drweb.com
  • update.msk.drweb.com
  • update.us.drweb.com
  • update.msk5.drweb.com
  • update.msk6.drweb.com
  • update.fr1.drweb.com
  • update.us1.drweb.com
  • update.kz.drweb.com
  • update.nsk1.drweb.com
    Запрос метки времени — timestamp

GET /x64/600/av/windows/timestamp HTTP/1.1 Accept: */* Host: update.drweb.com X-DrWeb-Validate: 259e9b92fa099939d198dbd82c106f95 X-DrWeb-KeyNumber: 0110258647 X-DrWeb-SysHash: E2E8203CB505AE00939EEC9C1D58D0E4 User-Agent: DrWebUpdate-6.00.15.06220 (windows: 6.01.7601) Connection: Keep-Alive Cache-Control: no-cache

HTTP/1.1 200 OK Server: nginx/42 Date: Sat, 19 Apr 2014 10:33:36 GMT Content-Type: application/octet-stream Content-Length: 10 Last-Modified: Sat, 19 Apr 2014 09:26:19 GMT Connection: keep-alive Accept-Ranges: bytes

GET /x64/600/av/windows/drweb32.flg HTTP/1.1 Accept: */* Host: update.drweb.com X-DrWeb-Validate: 259e9b92fa099939d198dbd82c106f95 X-DrWeb-KeyNumber: 0110258647 X-DrWeb-SysHash: E2E8203CB505AE00939EEC9C1D58D0E4 User-Agent: DrWebUpdate-6.00.15.06220 (windows: 6.01.7601) Connection: Keep-Alive Cache-Control: no-cache

HTTP/1.1 200 OK Server: nginx/42 Date: Sat, 19 Apr 2014 10:33:37 GMT Content-Type: application/octet-stream Content-Length: 336 Last-Modified: Wed, 23 Jan 2013 09:42:21 GMT Connection: keep-alive Accept-Ranges: bytes [windows]

LinkNews=http://news.drweb.com/flag+800/ LinkDownload=http://download.geo.drweb.com/pub/drweb/windows/8.0/drweb-800-win.exe FileName= isTime=1 TimeX=1420122293 cmdLine= Type=1 ExcludeOS=2k|xp64 ExcludeDwl=ja ExcludeLCID=17|1041 [signature] sign=7077D2333EA900BCF30E479818E53447CA388597B3AC20B7B0471225FDE69066E8AC4C291F364077

GET /x64/600/av/windows/drweb32.lst.lzma HTTP/1.1 Accept: */* Host: update.drweb.com X-DrWeb-Validate: 259e9b92fa099939d198dbd82c106f95 X-DrWeb-KeyNumber: 0110258647 X-DrWeb-SysHash: E2E8203CB505AE00939EEC9C1D58D0E4 User-Agent: DrWebUpdate-6.00.15.06220 (windows: 6.01.7601) Connection: Keep-Alive Cache-Control: no-cache

HTTP/1.1 200 OK Server: nginx/42 Date: Sat, 19 Apr 2014 10:33:39 GMT Content-Type: application/octet-stream Content-Length: 2373 Last-Modified: Sat, 19 Apr 2014 10:23:08 GMT Connection: keep-alive Accept-Ranges: bytes

.>UX.E… (другие данные опущены)

Запрашиваемый файл представляет собой архив, сжатый по алгоритму lzma (используется в 7-Zip). После распаковки сам файл выглядит примерно так:

Шестнадцатеричные значения рядом с именами файлов представляют собой контрольные суммы файлов, вычисленные по алгоритму crc32. В данном случае, контрольные суммы используются для поддержания «версионности» файлов. Также можно увидеть, что механизм обновлений может использовать переменные среды, вроде %CommonProgramFiles%, %SYSDIR64% и т.д. – т.е. файлы можно заливать не только в папку Dr.Web, но и другие системные директории

GET /x86/600/av/windows/dwrtoday.vdb HTTP/1.1 Accept: */* Host: update.drweb.com X-DrWeb-Validate: 741d1186c47dc500ab5a60629579d8cf X-DrWeb-KeyNumber: 0110242389 X-DrWeb-SysHash: 08AA5F775FD38D161E2221928D10903F User-Agent: DrWebUpdate-6.00.15.06220 (windows: 6.01.7600) Connection: Keep-Alive Cache-Control: no-cache

HTTP/1.1 200 OK Server: nginx/42 Date: Sat, 19 Apr 2014 02:02:36 GMT Content-Type: application/octet-stream Content-Length: 5712 Last-Modified: Sat, 19 Apr 2014 01:31:32 GMT Connection: keep-alive Accept-Ranges: bytes

Dr.Web ® version 4.20+ Anti-Virus Database Copyright © by Igor Daniloff, 1998-2014 Created by Doctor Web Anti-Virus Labs, St.Petersburg IDRW4. CR/.U.._.C..9G.

\J. 6G. >u. y$_naykP. x. h… . J. QS. 7..(другие данные опущены)

В том случае, если контрольные суммы файлов из полученного списка обновления отличаются от используемых, то клиент запрашивает патч существующего:

Если патч получить не удается или файла ранее не было в системе, то идет запрос на новый файл целиком:

Обновляемые файлы также идут без каких-либо проверок, в открытом виде, либо просто запакованые lzma.

Эксплуатация
    Создаем собственный бэкдор, который бы выполнился на компьютере-клиенте и передал управление злоумышленнику. Для этого можно использовать нагрузку Meterpreter из проекта Metasploit Framework, дополнительно прогнав через Veil-Evasion для обхода антивируса. На выходе получаем файл drwebupw.exe, который в дальнейшем заменит оригинальный компонент антивируса клиента при обновлении.

Далее запускаем непосредственно процедуру отравления arp-кэша и подмены dns:

Таким образом, трафик после эксплуатации пойдет по следующей схеме:

  1. Принимает входящее соединение
  2. Формирует метку времени и отвечает на запрос timestamp
  3. Формирует файл с дополнительной информацией drweb32.flg
  4. Формирует файл со списком обновлений и запаковывает его в lzma архив drweb32.lst.lzma
  5. Отдает фейковое обновление на запрос клиента

При запуске, скрипт начнет принимать соединения и в ответ на запрос обновления выдаст фейковое обновление для файла drwebupw.exe

Клиент успешно его примет и перезапишет оригинальный компонент:

Если все прошло нормально, то при очередной попытке обновиться, от клиента придет коннект:

📎📎📎📎📎📎📎📎📎📎