среда, 18 июня 2008 г.

Создание своего зеркала сервера обновления антивируса Касперского

Один из популярных антивирусов в России это, конечно же, Антивирус Касперского (далее AK). Обсуждать, хорош он или плох я не буду, это очередная тема для "священных войн". Но факт остаётся фактом - им пользуются многие.

Основной задачей при использовании любого антивируса является его своевременное обновление. Существует несколько способов для AK:
  • Автоматическое обновление. Программа сама обновляется по команде или автоматически.
  • Обновление через архивы антивирусных баз, скачанных с сайта антивируса
  • Для локальных сетей предприятий существует агент для администрирования антивируса ( Kaspersky Administration Kit ) , одной из задач которого является обновления всех
    версий программ АК (или всевозможных анти-спамов от Касперского).
  • еще один не официальный способ - копирование баз с компьютера с установленным АК на другой. Подробнее можно узнать тут.

Все это хорошо. Но как быть, если ставятся следующие условия. У нас есть большая сеть, разделенная на два сегмента. В одном можно
использовать службу "Клиент для сетей Microsoft", а в другом нет. Выход в интернет только на одном компьютере. Трафик дорогой. Нет мощностей для установки Kaspersky Administration Kit. Да и возможно мы еще и используем нелицензионный софт (При обновлении с официального сервера ключ программы заносится в статистическую базу. При каком то значении количества запросов с одного ключа, ключ банится, что не позволяет работать антивирусу.) Но это так, вариант, надо все-таки использовать лицензионный софт.
Т.е. ставится задача - создать зеркало сервера обновлений, которое работает как при расшареной папке так и без неё, экономия трафика ( т.е. скачивание только изменившихся файлов). Как быть?

Попробуем решить эту задачу.
Если нельзя использовать "Клиент для сетей Microsoft" для обновления, то нам нужно чтобы АК обновлялся как с собственным сервером по HTTP. Т.е. нам нужен веб-сервер который дает на просмотр папку с обновлениями. Но нам нужно заставить АК ходить на наш сервер, а не на официальный. Стандартными настройками этого не сделать. АК может обновляться либо с официального сервера, либо из локальной папки или сетевой. Эту проблему можно решить старым дедовским способом - в файле ваш_диск:\WINDOWS\system32\drivers\etc\hosts сделать записи вида
ваш_сервер_обновлений dnl-ru1.kaspersky-labs.com
Но где нам взять весь список официальных серверов? Поковырявшись в антивирусных базах мы их легко найдем. Но так как мы их еще не скачали то вот ссылка на xml файл на сервере обновлений, где как раз и хранятся все возможные адреса. Ну а
если вам лень от туда выковыривать то вот уже готовый файл. Стоит учесть, что если у вас установлен AK 7 версии со всевозможными проактивными
защитами, или KIS, то периодически они будут ругаться, что файл
ваш_диск:\WINDOWS\system32\drivers\etc\hosts содержит подозрительные записи.
Будем считать, что веб-сервер вы настроите сами. Осталось определиться где брать сами антивирусные базы.

Структура антивирусных баз.

Теперь стоит поговорить о структуре антивирусных баз.

Все, что будет описано, справедливо для 6 и 7 версии АК (и KIS). Для более ранних версий не рассматривал.
Главная папка сервера обновления это index/6/ . В ней должен находиться файл
u0607g.xml. Это первый файл, к которому обращается антивирус при обновлении. Таких xml файлов в обновлениях много. Их можно назвать файлами-указателями на обновления. Вся информация о том, откуда брать
обновления хранится в них.
Рассмотрим файл u0607g.xml . Он состоит из структур FileDescription ( в терминах xml не селён, извините)
<FileDescription
ComponentID="AVS"
UpdateType="desc"
ServerFolder="../../bases/av/avc/i386"
Filename="av-i386-0607g.xml"
FileDate="17022008 0704">
ComponentID содержит имя компонента антивируса, указатель на обновление Filename которого находится на сервере в папке ServerFolder (относительно текущей папки). Т.е. каждый компонент АК имеет свои базы. Вот небольшой список компонент,
что доступен на сервере обновления в файле retr.dat
AVS - Cигнатуры угроз;Описание вирусов и других вредоносных программ
AH - Сигнатуры атак Анти-Хакера для сборок 402, 411;Описание типичных сетевых атак
AHI386 - Сигнатуры атак Анти-Хакера для 32-разрядных операционных систем;Описание типичных сетевых атак
AHX64 - Сигнатуры атак Анти-Хакера для 64- разрядных операционных систем;Описание типичных сетевых атак
RT - Список компонентов для загрузки;Список компонентов для загрузки
Updater -Данные для балансировки нагрузки на инфраструктуру обновления;Данные для балансировки нагрузки на инфраструктуру обновления

Таким образом, антивирус, загрузив файл index/6/u0607g.xml, просматривает его и создает список файлов-указателей обновлений для установленных компонентов. Затем он загружает эти файлы-указатели и просматривает их. В них та же структура FileDescription, но зачастую она не содержит поле ServerFolder. Это значит, что файл обновления лежит в той же папке что и файл-указатель . Просмотрев все указатели, формируется список для закачки новых файлов.

Так примерно выглядит процедура обновления АК. Стоит отметить такие вещи:
  1. Список компонент, которые установлены на данном компьютере можно найти в реестре в разделе HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\protected\AVP7\environment в ключах с именем похожим на Components
  2. для некоторых компонент не существует обновлений. Например NEWS.
  3. даже если вы отключили какой-то компонент (например проактивную защиту), антивирус будет искать для него обновление. Не найдя, он выдаст сообщение об ошибке. Единственный компонент, загрузку которого можно отключить, это KAV2006EXEC и подобные. Это обновление программных файлов.
  4. Для того чтобы точно узнать (не из реестра) какие компоненты нужны, на будущем нашем зеркале оставляем только файл index/6/u0607g.xml . Запустив обновление антивируса в окошке мы увидим ошибки и ссылки на недостающие файлы. Потом мы ищем имя этого файла в index/6/u0607g.xml, определяем имя компонента.
  5. Опытным путем можно найти, что для AK 7 версии нужны следующие компоненты - AVS;AHI386;BLST;RM,BB,BB2;Updater;INFO;EMUI386;WAI386;KAV2006EXEC;RT

Теперь разберемся с задачей создания зеркала обновлений.

Минимум нам нужны две папки. Это папка Index и папка Bases. А если мы хотим, чтобы АК мог обновлять программные файлы, то потребуется папка AutoPatches. Т.е. если мы "тупо" скачаем эти папки со всем содержимым то получим зеркало сервера обновления. Если эту операцию проделывать каждые 2 часа, то у нас будут всегда свежие базы. Но мы люди не богатые, экономные, и , что самое главное, умные. В этих папках содержится множество не нужных нам обновлений, а если мы будем заново каждые 2 часа закачивать все папки вообще на трафике разоримся. Тогда нам нужно думать как АК при обновлении. А именно:
  1. скачать index/6/u0607g.xml
  2. скачать файлы-указатели для нужных нам компонентов
  3. скачать только изменившиеся файлы обновлений для этих компонентов

Для этих целей нам надо уметь качать, и уметь определять какие файлы нам нужны.
С первой задачей мы справимся с помощью консольной программы WGet. А вот со второй задачей сложнее. Для её решения я написал небольшую консольную программу kav_upd.

Kav_upd

Консольная программа, для формирования списка файлов обновления для загрузки. Для работы требуется файл conf.ini, в котором содержаться настройки работы программы.
components=KAV2006Exec;RT;AVS;AHI386;Updater;WM;RM,BB,BB2
local=ru
path=D:\avp\test3\avp\
components - список компонентов через точку с запятой, которые мы хотим загрузить. Названия должны быть такие же как в файле u0607g.xml (RM,BB,BB2 - это один компонент)
local - язык, может быть en,ru,de,fr. Указываете какой язык нужен для файла retr.dat .
path - путь, где хранятся базы

Программа имеет 2 ключа для запуска. Первый "-main". Программа смотрит файл
%path%\index\6\u0607g.xml и создает файл main.txt с писком файлов указателей для загрузки. Второй "-othes". Он читает файл main.txt и файлы указатели, создавая файл othes.txt со списком файлов обновления для загрузки.

Скрипт для создания зеркала обновлений.

Теперь приступим к созданию самого скрипта. Будем использовать обычные командные
файлы Windows. Вот пример такого скрипта

Set avp_path=D:\avp\test3\avp
Set log=log.txt
wget -P %avp_path% --timestamping -x -nH http://dnl-ru1.kaspersky-labs.com/index/6/u0607g.xml -o %log%
call kav_up.exe -main
wget -P %avp_path% --timestamping -B http://dnl-ru1.kaspersky-labs.com/ -i main.txt -x -nH -o %log%
call kav_up.exe -othes
wget -P %avp_path% --timestamping -B http://dnl-ru1.kaspersky-labs.com/ -i othes.txt -x -nH -o %log%

После выполнения, в папке D:\avp\test3\avp лежат нудные нам файлы. Ключ --timestamping программы wget говорит программе скачивать только обновленные файлы. После первого запуска скачается порядка 19 мб (в зависимости от компонент). В дальнейшем гораздо меньше. Изучив ключи wget можно сделать, чтобы работа шла через прокси-сервер.

Теперь мы можем выложить содержимое папки avp_path на веб-сервер. И АК настроенный на этот сервер , будет обновляться с него нормально. Так же папку avp_path можно расшарить в сети, и настроить АК на обновление из этой папки.

Заключение.

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

И еще , не забывайте менять адрес сервера, с которого берете базы. Иначе можно создать большую нагрузку на него. Ведь АК балансирует нагрузку на сервера, выбирая определенный. Выбор основывается на этом файле .

Ссылки.

Kav_upd - (57 кб.) программа kav_upd
Kav_upd.scr - (4 кб.) исходники kav_upd на Delphi 2007
update_script - (219 кб.) набор файлов для создания зеркала обновлений
Wget для Windows - страница порта wget под windows
Инструкция по Wget

39 комментариев:

  1. осилил на половину
    к сожалению антивирусы не юзаю временно

    ОтветитьУдалить
  2. Огромное спасибо за статью, единственное надо подправить ссылки на файлы, а то не качается ничего.

    ОтветитьУдалить
  3. Dimitri
    прошу прощения. поправил ссылки

    ОтветитьУдалить
  4. Привет...у меня проблема с настройкой зеркала, ты не могу бы сказать свою асю чтобы помочь настроить его на моем сайте, отблагодарю. вот если что моя 492-538-285

    ОтветитьУдалить
  5. ой блин на главной я нашел твою асю

    ОтветитьУдалить
  6. Вопрос такой возможно ли в файле cong.ini прописать local=ru,en. Тоесть загружать обновления сразу для двух локализаций антивиря?

    ОтветитьУдалить
  7. Нет. Не было такой необходимости.

    ОтветитьУдалить
  8. Ссылка на Kav_upd битая. Закачайте файл еще раз пожалуйста
    С уважением
    soul57

    ОтветитьУдалить
  9. прошу прощения, ссылки поправлены.
    что то постоянно не так (

    ОтветитьУдалить
  10. да, у всех выбают проколы. Ссылка уже рабочая, а Касперский forever :mrgreen:

    ОтветитьУдалить
  11. у меня Касперский дал сбой. пропустил вирус, который сожрал все програмы установленные на буке, оставил только оболочки. вот так :cry:

    ОтветитьУдалить
  12. Да антивирусник конечно отличный только вот моё железо его абсолютно не тянет, может кто нибудь знает способ как снизить загрузку системы АК?Подскажите плиз

    ОтветитьУдалить
  13. это говорит о том, что железо пора менять, а антивирусник просто супер!

    ОтветитьУдалить
  14. спасибо за ссылку на xml файл на сервере обновлений. очень пригодилась :mrgreen:

    ОтветитьУдалить
  15. Автор, а сложно подобное вообще писать?

    ОтветитьУдалить
  16. Итшник либо использовать более старую версию, но возникнут вопросы с ключами (при пиратском использовании).
    второй вариант - использовать 7 версию. и периодически делать полную проверку компьютера, когда антивирус скажет (плюс минус пару дней). благодоря этому антивирус не будет лишний раз проверять файлы, у которых контрольная сумма не изменилась. технология iChecker если не ошибаюсь.
    ну и самом собой для нормальной работы на xp надо 512 мб оперативной памяти. ну и можно поиграться с фильтрами ,какие файлы проверять, а какие нет. например зачем проверять rar архив когда ты его скачал? пусть проверяет содержимое архива при распаковке. но это всего лишь вариант, не претендующий на правильность. в каждом случае все индивидуально.

    ОтветитьУдалить
  17. indamixer
    не знаю даже. главное разобраться что надо вообще делать. а потом пытаться реализовать. делал для себя, было интересно. в итоге получилось что то

    ОтветитьУдалить
  18. недавно почистили свой комп Касперским, сама в шоке сколько всякой дряни он нашел. теперь буду поьзоваться постоянно :razz:

    ОтветитьУдалить
  19. чтобы обновить, надо найти ошибку или придумать новый функционал.
    пока мыслей таких нет.
    если что то прделожите - сделаем.

    ОтветитьУдалить
  20. пасип, но по мне лучше нод32, базы всегда свежачек

    ОтветитьУдалить
  21. А есть, какая нибудь альтернатива? ;)

    ОтветитьУдалить
  22. Помогите пжста. Ключ –timestamping не корректно работает. Когда пытаюсь обновиться то все файлы начинают качаться по новой, хотя они присутствуют в папке. Как сделать чтобы качались ТОЛЬКО новые файлы?
    +++++++++++++++++++++++++++++
    Set avp_path=C:\WebServers\home\123\www\avp\
    Set log=log.txt

    wget -P %avp_path% --timestamping -x -nH http://dnl-ru1.kaspersky-labs.com/index/6/u0607g.xml -o %log%
    call kav_up.exe -main
    wget -P %avp_path% --timestamping -B http://dnl-ru1.kaspersky-labs.com/ -i main.txt -x -nH -o %log%
    call kav_up.exe -othes
    wget -P %avp_path% --timestamping -B http://dnl-ru1.kaspersky-labs.com/ -i othes.txt -x -nH -o %log%Set avp_path=C:\WebServers\home\10.2.11.41\www\avp\
    Set log=log.txt

    wget -P %avp_path% --timestamping -x -nH http://dnl-ru1.kaspersky-labs.com/index/6/u0607g.xml -o %log%
    call kav_up.exe -main
    wget -P %avp_path% --timestamping -B http://dnl-ru1.kaspersky-labs.com/ -i main.txt -x -nH -o %log%
    call kav_up.exe -othes
    wget -P %avp_path% --timestamping -B http://dnl-ru1.kaspersky-labs.com/ -i othes.txt -x -nH -o %log%

    ОтветитьУдалить
  23. Киря Робски
    не видел
    XuT
    обсудили в icq
    Блоговед
    всегда готов к обсуждению

    ОтветитьУдалить
  24. Хотел почитать исходники и, возможно, переписать на юниксовом шелле/пхп - http://www.dobrih.net/files/avp/kav_up.scr.zip не качается :(

    ОтветитьУдалить
  25. yanis
    исправил. уже 3 раз вроде. оказывается не все сылки поправил
    http://www.dobrih.net/files/avp/kav_upd.scr.zip

    ОтветитьУдалить
  26. Спасибо.
    Я вчера уже начал писать, как закончу - дам ссылку на результат. Плохо что в шелле ХМЛ-парсера нет никакого, а "настоящие" языки программирования неохота мучать :)

    ОтветитьУдалить
  27. А можно запостить сюда обсуждение в ICQ
    XuT
    обсудили в icq
    по поводу wget -timestamping
    ?

    ОтветитьУдалить
  28. yanis, хоть мы и обсудили с тобой , отпишу для всех
    XuT жаловался, что у него постоянно все файлы закачиваются.
    ответ был такой - вначале запускаешь скрипт , он первый раз скачивает и фиксирует даты. затем, при новой закачке он качает только изменившиеся файлы.
    проблемы бывают такие что качает все. с чем связано трудно сказать. нужно попробовать новые версии wget.
    как альтернатива, изменить программу (как ты и сделал в nix варианте), сверяя размер и дату файла на сервере и в xml

    ОтветитьУдалить
  29. С размерами файлов вроде лучше - но, увы, не во всех файлах проставлен атрибут FileSize. Мой скрипт будет такие файлы каждый раз качать... Хотя я попробую скомбинировать - если атрибут проставлен, то верить ему. Если нет - то проверять с сервера

    ОтветитьУдалить
  30. *никсовая версия здесь, обсуждаем:
    http://forum.lissyara.su/viewtopic.php?f=14&t=10414

    ОтветитьУдалить
  31. Спасибо за статью оказалась очень полезной.

    ОтветитьУдалить
  32. Рекомендую подписку на ленту новостей расположить на видном месте! Читателей будет больше! Особенно на таком сайте, как у вас! Проверяля - на 30% выросло количество подписчиков!

    ОтветитьУдалить
  33. Спасибо, отличная статья, очень помогла.

    ОтветитьУдалить
  34. а для КИС 8 версии эта фича прокатит?

    ОтветитьУдалить
  35. не проверял. на 7 точно работает.
    а для 8 версии есть официальная программа http://forum.kaspersky.com/index.php?s=1e7e5681568712f59db8f646623bb0bd&showforum=93

    ОтветитьУдалить
  36. Спасибо огромное!!!!! Уже 3 года держу сервер зеркал в локальной сети, зеркалировал обновления касперского тупым скачивание всего содержимого нужных ему папок. Ща затестим эту утилку.

    ОтветитьУдалить
  37. как не обидно, но советую глянуть http://forum.kaspersky.com/index.php?s=1e7e5681568712f59db8f646623bb0bd&showforum=93
    а мое, это так, металолом уже

    ОтветитьУдалить
  38. Здорово! А вот еще бы в базах на таком зеркале, блек лист старый держать без обновления. Тупо переписывать не помогает. У кого какие мысли есть.
    Ищу такую "приделку".

    ОтветитьУдалить