Опенсорсовый антивирус (общие мысли вслух)
Опенсорсовые антивирусы есть, но я не сказал бы, что они хорошо держат оборону... в гонке брони и снаряда самодельная броня пока отстает страшным образом. Мне кажется, проблема тут в том, что к опенсорсовому антивирусу нужен совсем другой подход, нежели к коммерческому.
Побрежу тут, если не возражаете. Кому-нибудь интересно послушать?
И не потому что я такой "правильный", а потому, что гарантированно не ломаная и отбновления, дополнения без проблем.
А на предприятии уже всё на лицензию перевели, не говоря уже о серверах и т.п. которые по жизни такими были.
все за вас рады шо писец :)
не понятно просто - зачем включаться в тему в которой собственно не обсуждается лицензионное или нет стоит у кого ПО и почему? Тема вообще другому посвящена и лицензии затронуты здесь только краем, в том смысле что конечные пользователи совершенно зря надеются на то, что мифические "рыночные отношения" каким то образом влияют на функциональность ПО, в глобальных масштабах конечно. Это я говорю как конечный пользователь - который провел множество времени в переписке с центром поддержки крупной антивирусной компании по поводу боков в их продукте (и угадайте с трех раз исправлена ли эта проблема до сих пор - а она обсуждается очень активно?) - кроме того как ИТ-руководитель двух крупнейших предприятий мне очень часто приходилось принимать решения и общаться с разработчиками ПО, принимать решения по лицензионнное/не лицензионное и т.д. По этому если я говорю что рыночные механизмы тут никакой роли не играют - то я знаю о чем я говорю. Возможно конечно, я живу на луне и у вас все по другому - тогда я вас поздравляю и у вас одна из крупнейших корпораций - производителей ПО не диктует вашему правительству
что и как оно должно делать - а правительство вовсе не продажно и максимально заботится о свободах граждан. Вам вероятно просто повезло - или вы не все знаете. :)
С другой стороны, у меня есть подозрения, что в если работать в режиме пользователя в неиспахабленной Висте без антивируса и прислушиваться к ее сообщениям, то риск занести вирус будет совсем маленьким. Правда, программисту нормально поработать в таком режиме трудновато :)
У меня, в свою очередь, есть подозрения второго порядка, что M$овские маркетологи как раз и получают свой хлеб за то, чтобы вызывать такие подозрения. Программистам подтверждать их уже не обязательно -- объем продаж равен объему надежд, а не проценту сбывшихся из них.
Нуда. Для того и нужен UAC. Система настраивается один раз (и ругаешься на его бесконечные попапы) - дальше по обстановке.
Это настолько не в первый раз, что у меня стойкое ощущение, что производители уже реально опустили руки в плане соответствующего пункта из начала темы, только признаться не хотят.
Это настолько не в первый раз, что у меня стойкое ощущение, что производители уже реально опустили руки в плане соответствующего пункта из начала темы, только признаться не хотят.
вирусы бывают разные - и используют различные механизмы сокрытия себя в системе. Да и антивирусы бывают разные - тот же BitDefender - на порядок помощнее НОДа, в первую очередь за счет того, что хорошо работает на уровне ядра - но опять же - идеальный антивирус - сродни философскому камню. По этому (возвращаясь собственно к теме :)) опенсоурс антивирь возможен - но при условии что команда хотябы попытается решить те проблемы которые в основном обрисованы в сообщеении Green'а - зачем это делать?
Подобный продукт будет востребован, даже если его поддержка будет не столь масштабной как у коммерческих аналогов, за счет того что хорошие вирусы детектят наиболее распространеные антивирусы. Опенсоурс-проект в этом случае на этапе становления уже будет иметь преимущество некоторое время. Плюс, антивирус может быть полиморфным. Кроме того, им будут пользоваться и развивать те, кому интересно то что происходит под капотом системы. Ну есть еще куча ЗА, есть куча КОНТРА - лень все перечислять - пошел ужинать :)
ЗЫ: а подпись совершенно правильная, она отражает "законы форумной физики", как бы они с виду ни выглядели.
Ну допустим по тому же ноду я для своих клиентов обеспечиваю обновления. Могу предоставить свой ресурс для обсуждения, разработки и организации службы поддержки. Готов поучаствовать в разработке. Но прежде чем это начинать необходимо определить всетаки какие преимущества получит человек юзающий опенсоурс антивирь и что ему за это прийдется заплатить. Может и желающих будет не особо :)
Просто мне иногда кажется, что за началом таких обсуждений чаще стоит не реальная потребность пользователей в продукте, а скрытое желание догнать и переплюнуть Торвальдса. На деле же оказывается полезным исходить не из идеи создать опенсорсный антивирус, а из намерения выложить клёвый продукт, который реально оказывается нужен многим людям. Мало кто на этапе начального проектирования задумывается о том, кто купит продукт. Не обязательно за деньги купит, может и за время - не в этом дело. Главный вопрос: кому всё это нужно?
Смысла в опенсорсности антивируса практически нет. Кому надо уже давно дизасемблировали движки существующих не-опенсорс проектов.
Да и вообще движок антивиря даже самому с нуля написать не так уж и сложно. На wasm.ru есть просто туева хуча статей по этому поводу(для базового функционала хватает по большому счету модуля эмуляции кода + поддержка пары-тройки стандартных упаковщиков).
Самое интересное - алгоритмы эвристик, которые во многом базируются на статистике и команда психов, которая постоянно добавляет новые сигнатуры.
Да и вообще движок антивиря даже самому с нуля написать не так уж и сложно. На wasm.ru есть просто туева хуча статей по этому поводу(для базового функционала хватает по большому счету модуля эмуляции кода + поддержка пары-тройки стандартных упаковщиков).
ну-ну... не так уж и сложно... :)
Под "эмуляцией кода" ты подразумеваешь виртуальную машину?
Ну так вот эта задача ОЧЕНЬ непростая.
Под "эмуляцией кода" ты подразумеваешь виртуальную машину?
Ну так вот эта задача ОЧЕНЬ непростая.
Ну, это не виртуальная машина в полном смысле этого слова.
Вот я в свое время писал что-то подобное описаному в этой статье
Если уж я со своим скромным опытом программирования в ассемблере с этим легко разобрался за сравнительно короткий промежуток времени, то думаю сделать что-либо помощнее - не так уж и сложно.
Ну, это не виртуальная машина в полном смысле этого слова.
Вот я в свое время писал что-то подобное описаному в этой статье
Если уж я со своим скромным опытом программирования в ассемблере с этим легко разобрался за сравнительно короткий промежуток времени, то думаю сделать что-либо помощнее - не так уж и сложно.
То, что описано в статье,- это детский лепет по сравнению с реальными технологиями.
Все равно, что сравнивать петарду с космической ракетой.
"Если уж я не имея познаний в химии и физике сделал петарду на кухне за пару часов, то, думаю, запустить человека в космос не так уж и сложно." :)
На самом деле, для того, чтобы детектировать современный вирус, надо писать самую настоящую виртуальную машину с соотв. реализацией WinAPI и т.п.
Иначе, такой АВ можно обмануть, как дитё малое.
Описаный в статье движок эмулирует простейшие инструкции языка ассемблер, которых ограниченое количество. Каждая из них может выдать вполне определенный (причем однозначно определенный) результат. Поэтому, как мне кажется, "обмануть" эмулятор на этом этапе практически невозможно. Другое дело, что метаморф, к прмиеру, можно проэмулировать, но не определить по сигнатуре после расшифровки, но это уже и есть проблема эвристики.
Если я ошибаюсь, хотелось бы увидеть ссылочку где можно прочитать о том:
- как можно обмануть такой простейший эмулятор
- как дополняют современные антивирусы свои алгоритмы эмуляции для того чтобы их не обманули.
Позволю себе не согласиться.
Описаный в статье движок эмулирует простейшие инструкции языка ассемблер, которых ограниченое количество. Каждая из них может выдать вполне определенный (причем однозначно определенный) результат. Поэтому, как мне кажется, "обмануть" эмулятор на этом этапе практически невозможно. Другое дело, что метаморф, к прмиеру, можно проэмулировать, но не определить по сигнатуре после расшифровки, но это уже и есть проблема эвристики.
Если я ошибаюсь, хотелось бы увидеть ссылочку где можно прочитать о том:
- как можно обмануть такой простейший эмулятор
- как дополняют современные антивирусы свои алгоритмы эмуляции для того чтобы их не обманули.
Ссылочку давать не буду, т.к. надо искать, либо писать статью самому, а пока времени на это нет.
А обмануть такой эмулятор можно сотней разных способов. Самые простые - это не доводить дело до эмулятора. :)
Делается это элементарно, например, вызовом какой-нибудь ф-ции API и по необходимости проверкой результата, а уж какой ф-ции выбирай сам.
Современные антивирусы используют не такие "эмуляторы", а полноценные виртуальные машины с реализацией WinAPI и т.п.
Но и их можно обмануть. Самый действенный способ - это задержка по времени. Антивирус не имеет возможности ждать несколько секунд, а тем более минут, пока вирус начнет разворачиваться. Но осуществить такую задержку - это весьма нетривиальная задача.
Каких таких заморочек?
Например, если в программе есть Sleep, ты объявишь её вредоносной?
Насколько я понял тебя, то что-бы действительно заморочить емулятор нужно что-то вроди навороченого алгоритма генерации "мусорного" кода(содержащего вызовы винапи функций) разной длины в рантайме.
Разве такой алгоритм не выдаст себя с головой? А если даже и не выдаст, то кто мешает просканировать файл 2 раза подряд, и обнаружить что один и тот же код по-разному себя ведет. Как мне кажется, это уже повод - запихнуть такой файл в карантин.
Sleep не помеха даже для простейшего емулятора :)
Да ну... :)
Как же в "простейшем эмуляторе" ты собираешься это обходить?
Это помеха, причем, Sleep - это цветочки.
Насколько я понял тебя, то что-бы действительно заморочить емулятор нужно что-то вроди навороченого алгоритма генерации "мусорного" кода(содержащего вызовы винапи функций) разной длины в рантайме.
Разве такой алгоритм не выдаст себя с головой?
Нет, ты не правиьно меня понял.
Нет ничего навороченного, не надо никакого мусора.
Все решается меньше, чем десятком, строк кода.
А если даже и не выдаст, то кто мешает просканировать файл 2 раза подряд, и обнаружить что один и тот же код по-разному себя ведет. Как мне кажется, это уже повод - запихнуть такой файл в карантин.
Что значит "просканировать дважды" и как ты собираешься обнаружить, что "один и тот же код по-разному себя ведет" ?
P.S. Ты строишь предположения, да ещё и в рамках какого-то "простейшего эмулятора", а я "обманывал" реальные довольно мощные виртуальные машины серьезных антивирусов, которые запускают исследуемый файл, создают для него виртуальную оболочку операционной системы (эмулируют Win32 API, Native API и т.п.) и анализируют его работу.
Как же в "простейшем эмуляторе" ты собираешься это обходить?
Это помеха, причем, Sleep - это цветочки.
Очень просто. Проигнорирую вызов и перейду к следующей команде, без каких-либо зазрений совести.
Что значит "просканировать дважды" и как ты собираешься обнаружить, что "один и тот же код по-разному себя ведет" ?
Ну разве это такая большая проблема? Эмулятор - не что иное, как конечный автомат. Если один и тот же код приводит этот автомат в разные состояния - значит все совсем плохо.
[имхо]
Я, конечно, могу и ошибаться, но я совсем не понимаю, зачем эмулировать WinAPI, если можно проанализировать передаваемые параметры в функцию и пропустить её выполнение, причем количество функций, для каких стоит анализировать входные данные - довольно маленькое - в основном функции предоставляющие доступ к устройствам(например DeviceIoControl). А писать полноценную VM для такой задачи конечно можно, но вот только использовать её в реальном антивирусе, вряд ли возможно, из-за низкой скорости работы.
[/имхо]
Очень просто. Проигнорирую вызов и перейду к следующей команде, без каких-либо зазрений совести.
Вот и отлично, теперь вирус "знает", что выполняется он твоим эмулятором и соотв-но не запустит основное свое тело.
Ну разве это такая большая проблема? Эмулятор - не что иное, как конечный автомат. Если один и тот же код приводит этот автомат в разные состояния - значит все совсем плохо.
Еще раз, как ты собираешься обнаружить, что "один и тот же код по-разному себя ведет" ?
Он ведет себя по разному: одним путем в системе, а другим - в твоем эмуляторе. Как он определяет где он запущен? Смотри выше.
[имхо]
Я, конечно, могу и ошибаться, но я совсем не понимаю, зачем эмулировать WinAPI, если можно проанализировать передаваемые параметры в функцию и пропустить её выполнение, причем количество функций, для каких стоит анализировать входные данные - довольно маленькое - в основном функции предоставляющие доступ к устройствам(например DeviceIoControl). А писать полноценную VM для такой задачи конечно можно, но вот только использовать её в реальном антивирусе, вряд ли возможно, из-за низкой скорости работы.
[/имхо]
1. Пропускать нельзя, нужно эмулировать корректную работу!
2. Число этих ф-ций большое и они взаимосвязаны. К примеру, можно сделать Sleep или Beep, а потом проверить системный таймер. Можно создать объект синхронизации, а потом проверить его состояние. Можно создать окно, передать ему сообщение, а потом проверить его состояние.
3. Про антивирусы уже сказал: ты предполагаешь, что "вряд ли возможно", а я утверждаю, что они так и делают.