информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеВсе любят медСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / site updates
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Разнообразие ради выживания. Популяция из различных исполняемых модулей с одинаковой функциональностью. 04.02.03 14:28  
Publisher: dl <Dmitry Leonov>
<"чистая" ссылка>
Разнообразие ради выживания. Популяция из различных исполняемых модулей с одинаковой функциональностью.
Yinrong Huang, перевод - Дмитрий Леонов http://members.rogers.com/yinrong/, http://bugtraq.ru/

В биологии хорошо известен тот факт, что виды с разнообразными популяциями более устойчивы к вымиранию под давлением естественного отбора, чем виды с "клонированной" популяцией. Я считаю это одной из важных причин необходимости поддержания биологического разнообразия.
На этих выходных SQL Slammer использовал не только уязвимости в Microsoft SQL 2000, но и уязвимости в стандартных методах распространения программных пакетов. Обычный программный пакет содержит одни и те же документы, одни и те же исполняемые файлы. Другими словами, пакет просто копируется, или "клонируется" без изменений. Я считаю, что произошедшее дает нам урок важности разнообразия и в компьютерном мире.
После внимательного изучения кода [ http://www.eeye.com/html/Research/Flash/sapphire.txt ] SQL Slammer становится понятно, что этот...

Полный текст
Интернет для людей? Или для Вирей?! 05.02.03 04:30  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Вы соображаете, что происходит в Сети? Уже сейчас стоимость и ресурсоемкость систем защиты превышает стоимость и ресурсоемкость программ и данных, которые они защищают! Кто на кого работает? Компьютеры на людей или уже мы на них пашем? Ну, ладно, в реале ставкой в гонке вооружений является жизнь, потому, как она ни бессмысленна, от нее ни куда не деться, но в Сети-то мы что защищаем такой ценой?
ИМХО существует ряд очень простых правил сетевой безопасности, соблюдение которых делает атаку бессмысленной:
1. Open Source
2. Ставь только то ПО, которому доверяешь.
3. Не размещай на компах, подключенных к сети инфу, которая может Тебя скомпрометировать.
4. Храни дубликат ценной инфы на носителе, исключающем бесконтрольную запись.
5. Размещай в сети АБСОЛЮТНЫЙ МИНИМУМ сервисов.
6. Решай все задачи в сети АБСОЛЮТНЫМ МИНИМУМОМ средств.
7. Всякий "оживляж" вредит и Тебе и тем, кто посещает твой сайт.

Кто не соблюдает, становится жертвой собственного 1-3.14здяйства.
По зрелом размышлении список, конечно может быть продолжен и усовершенствован, но смысл, думаю, ясен и так.

И, ради Бога, не надо поддаваться на разные деструктивные тенденции. Развести нас на эту "гонку вооружений", это то же, своего рода атака.
Интернет для людей? Или для Вирей?! 05.02.03 15:06  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Open Source не панацея, я совсем недавно натыкался на свой же обзор 3-4 летней давности, где было описание червя, бродящего по вполне из себя open source Linux'у. Так что плюха вполне может и во вполне доверямом софте, реализующем абсолютной минимум необходимой функциональности. Наконец, сейчас просто приходится играть с теми картами, которые есть на руках, а вслучае последнего червяка пострадали и те, кто аккуратно соблюдал все правила гигиены просто из-за того, что полегли каналы.
Так что лишние новые идеи по поводу защиты лишними не будут. Тем более что никаких новых накладных расходовво время функционирования они не дают.
Времена меняются, к сожалению 05.02.03 12:58  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Вы соображаете, что происходит в Сети? Уже сейчас стоимость
> и ресурсоемкость систем защиты превышает стоимость и
> ресурсоемкость программ и данных, которые они защищают! Кто
> на кого работает? Компьютеры на людей или уже мы на них
> пашем? Ну, ладно, в реале ставкой в гонке вооружений
> является жизнь, потому, как она ни бессмысленна, от нее ни
> куда не деться, но в Сети-то мы что защищаем такой ценой?
В инете (да и в защитах для обычных программ) защищаются деньги. И по большому счету в реале те кто управляет гонкой вооружений своей жизнью не рискуют, а чужие - это обычный ресурс. Типа можно все население мобилизовать и послать в бой, но тогда остановится производство и солдаты подохнут с голоду. Вот они и балансируют. Просто им выгодно сохранять как можно больше жизней, но не каждую конкретную. Кроме того нужно еще идти на поводу у общественного мнения. Такая вот система сдержек и противовесов.

> ИМХО существует ряд очень простых правил сетевой
> безопасности, соблюдение которых делает атаку
> бессмысленной:
> 1. Open Source
> 2. Ставь только то ПО, которому доверяешь.
> 3. Не размещай на компах, подключенных к сети инфу, которая
> может Тебя скомпрометировать.
> 4. Храни дубликат ценной инфы на носителе, исключающем
> бесконтрольную запись.
> 5. Размещай в сети АБСОЛЮТНЫЙ МИНИМУМ сервисов.
> 6. Решай все задачи в сети АБСОЛЮТНЫМ МИНИМУМОМ средств.
> 7. Всякий "оживляж" вредит и Тебе и тем, кто посещает твой
> сайт.
> Кто не соблюдает, становится жертвой собственного
> 1-3.14здяйства.
На заре человечества (когда компьютеры были большими, а Настоящие Мужики сами писали драйверы для собственноручно собранных девайсов) существовал некий барьер для выхода в инет (и приобщения к компам вообще). Те кто его преодолевал уже и сами осознавали все что происходит и им не нужно было вталдычивать прописные истины - они уже все сами понимали. В том числе и то, что не стоит вредить собратьям.

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

По поводу Open Source, минимума сервисов и т.д. - это все правильно и вообще разве что на домах не висят объявления: "Майкрософт и серверы не совместимы", но из-за значительно сниженного барьера вступления в компутерное сообщество большинство (подавляющее) - именно вот эти самые 1-3.14 и сламмер это очень наглядно продемонстрировал: мало того что мелкософт, так дырке уже полгода.

А средства защиты ввиду своей сложности являются очень дорогими - никто не станет работать себе в убыток, а в свете сложившейся ситуации еще и очень востребованными. Так что есть спрос - будет и предложение. А спрос есть: ну не могут простые смертные защищаться сами - им нужно "нажми на кнопку - получишь результат"

> По зрелом размышлении список, конечно может быть продолжен
> и усовершенствован, но смысл, думаю, ясен и так.
>
> И, ради Бога, не надо поддаваться на разные деструктивные
> тенденции. Развести нас на эту "гонку вооружений", это то
> же, своего рода атака.
Конкретно Вас может и не разведут вместе с большинством обитателей этого форума, но кроме нас людей еще много
Отвечаю, по возможности по-порядку: 06.02.03 05:41  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Денежные каналы в Сети нужно отделять от всех остальных если не физически, то хотя-бы на уровне протоколов потому, что они навязывают всему миру свои, нужные только им правила игры и перегораживают пути прогресса юридическими рогатками.

> На заре человечества (когда компьютеры были большими, а
> Настоящие Мужики сами писали драйверы для собственноручно
> собранных девайсов) существовал некий барьер для выхода в
> инет (и приобщения к компам вообще). Те кто его преодолевал
> уже и сами осознавали все что происходит и им не нужно было
> вталдычивать прописные истины - они уже все сами понимали.
> В том числе и то, что не стоит вредить собратьям.
>
> После появления всяких виндовсов с вижуал васиками - к
> компутерам хлынул поток ламеров. Одни просто тупые и их
> используют другие - просто злобные: комплекс
> неполноценности заставляет самореализовываться любыми
> путями в том числе и мнимой властью над другими.
>
> По поводу Open Source, минимума сервисов и т.д. - это все
> правильно и вообще разве что на домах не висят объявления:
> "Майкрософт и серверы не совместимы", но из-за значительно
> сниженного барьера вступления в компутерное сообщество
> большинство (подавляющее) - именно вот эти самые 1-3.14 и
> сламмер это очень наглядно продемонстрировал: мало того что
> мелкософт, так дырке уже полгода.
>
> А средства защиты ввиду своей сложности являются очень
> дорогими - никто не станет работать себе в убыток, а в
> свете сложившейся ситуации еще и очень востребованными. Так
> что есть спрос - будет и предложение. А спрос есть: ну не
> могут простые смертные защищаться сами - им нужно "нажми на
> кнопку - получишь результат"
>
А результата, экстраполируя нынешнюю ситуацию, может быть только 2: либо ламер перестает быть ламером, либо становится рабом хакера (админа). Ибо, кто управляет потоками информации, тот управляет миром.
И, вот об этом орать нужно на каждом углу!

У-ххх! Потрясающам мысля (в порядке "лирико - философского отступления"):
В детстве я много спорил со своей Мамашей (доцентьшей математики) на философские темы, и однажды, в пылу очередной словесной баталии она невзначай заметила: "Если следовать идее спирального развития, то вслед за эпохой коммунизма должна прийти эпоха нового рабовладения" - и, подумав - "Очевидно, на интеллектуальной основе"...
Просто, пророчество какое-то!
Так вот, только-что мне в голову пришло продолжение, на тему спирального развития:
В доистоорическую эпоху основныим фактором выживания человека было не столько обладание оружием (дубиной), сколько личные качества бойца (умение ей владеть). Затем человечество добилось того, что стало возможным "нажать на кнопку" (курок) и "получить резултат" (убить врага). Сегодня, совершив полный виток, мы на новом уровне, вернулись на исходную: основным фактором выживания стало не столько обладание компьютером и программами, сколько личное умение ими пользоваться!

> > По зрелом размышлении список, конечно может быть
> продолжен
> > и усовершенствован, но смысл, думаю, ясен и так.
> >
> > И, ради Бога, не надо поддаваться на разные
> деструктивные
> > тенденции. Развести нас на эту "гонку вооружений", это
> то
> > же, своего рода атака.
> Конкретно Вас может и не разведут вместе с большинством
> обитателей этого форума, но кроме нас людей еще много

Как я уже пытался объяснить, выхода у них нет, есть только 2 входа:
в институт
и в концлагерь.
В любом случае социальный темп жизни ускорился на несколько порядков 06.02.03 15:28  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Так что новый виток спирали будет длиться не несколько сотен, а несколько лет.
Отвечаю, по возможности по-порядку: 06.02.03 06:28  
Автор: catlion <catlion> Статус: Member
<"чистая" ссылка>
> Сегодня, совершив полный виток, мы на новом уровне,
> вернулись на исходную: основным фактором выживания стало не
> столько обладание компьютером и программами, сколько
> личное умение ими пользоваться!
>

Что за выживание? Ламер, форматирующий свой винт от вирусов и троянов раз в неделю, нормально себя чуйствует. Это даже иногда становится хобби. А спам, который шлет его Аутглюк и идет на его ящик, забивает каналы. И уже надо ставить фильтры и файры вместо того, чтобы заниматься креативом.

> Как я уже пытался объяснить, выхода у них нет, есть только
> 2 входа:
> в институт
> и в концлагерь.

Не совсем ясно, у кого есть 2 входа - у тех, кого много кроме нас? :)
Я тоже когда-то пытался реализовать эту идею 04.02.03 17:20  
Автор: amirul <Serge> Статус: The Elderman
Отредактировано 04.02.03 17:33  Количество правок: 1
<"чистая" ссылка>
Делал компилятор ANSI C, который на первом этапе просто делает разбор и сохраняет полученное дерево разбора (которое включается в инсталляционный пакет), а на этапе инсталляции это дерево мутирует (причем для каждого типа ноды задано несколько эквивалентных мутаций) в несколько итераций, и некоторые участки оптимизируются, вводится несколько ветвей, в которые никогда не приходит исполнение, вводятся условные переходы, о которых точно известно куда уйдет поток. И только после этого выполняется backend. Чтоб усложнить реверсинг (не предоставлять потенциальным реверсерам полное дерево всей программы) и для повышения эффективности, этим способом собирается не вся программа, а только ее расшифровщик (или несколько расшифровщиков/зашифровщиков для разных кусков программы). Ну в общем этот проект загнулся (вернее я его законсервировал до лучших времен)

ЗЫ: А с полиморфизмом АВ-ы так и не справились по человечески имхо. Полиморфизмы тоже бывают разные. И чаще всего в расшифровщике меняются от популяции к популяции только некоторые константы - с этим на раз справляются плавающие сигнатуры, но вот например, описанный выше алгоритм я с трудом представляю как обнаружить как в вирусе, так и в антивирусе (разве что в песочнице, но флаг в руки сканеру, если он будет пытаться сэмулировать поток исполнения команд так на 50000 для каждого исполняемого файла в системе, кроме того после этого он начнет материться даже на анекдоты про вовочку).
Если кто еще не знает, сейчас полно вирусов, которые не только пытаются прятаться, но и тем или иным образом вывести из строя антивирус, так что ему тоже приходится защищаться всеми доступными способами.

А изменчивость как фактор выживания как для вирусов, так и для честных прог - это действительно очень неплохой фактор.
Re: Я тоже когда-то пытался реализовать эту идею 07.02.03 13:41  
Автор: sassa Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Делал компилятор ANSI C, который на первом этапе просто
> делает разбор и сохраняет полученное дерево разбора
> (которое включается в инсталляционный пакет), а на этапе
> инсталляции это дерево мутирует (причем для каждого типа
> ноды задано несколько эквивалентных мутаций)

VCG.Belka тоже такими вещами занимается в меру возможностей. ЛовИмо.

> в несколько
> итераций, и некоторые участки оптимизируются, вводится
> несколько ветвей, в которые никогда не приходит исполнение,
> вводятся условные переходы, о которых точно известно куда
> уйдет поток.

если известен алгоритм, по которому строятся такие ветви, то по нему же их можно и обнаружить.

> И только после этого выполняется backend. Чтоб
> усложнить реверсинг (не предоставлять потенциальным
> реверсерам полное дерево всей программы) и для повышения
> эффективности, этим способом собирается не вся программа, а
> только ее расшифровщик (или несколько
> расшифровщиков/зашифровщиков для разных кусков программы).

функционально это только упрощает задачу, поскольку по расшифровщику уже можно сказать многое.

> Ну в общем этот проект загнулся (вернее я его
> законсервировал до лучших времен)
>
> ЗЫ: А с полиморфизмом АВ-ы так и не справились по
> человечески имхо.

...ввиду простоты языка описания баз вирусов.


> ...но вот например, описанный выше
> алгоритм я с трудом представляю как обнаружить как в
> вирусе, так и в антивирусе (разве что в песочнице, но флаг
> в руки сканеру, если он будет пытаться сэмулировать поток
> исполнения команд так на 50000 для каждого исполняемого
> файла в системе, кроме того после этого он начнет
> материться даже на анекдоты про вовочку).

ерунда. неоптимизированный полиморфик (замена операций эквивалентными из известного набора) разбирается как регулярное или стековое выражение. кю.

нынешние сканеры обламываются из-за несовершенства языка описания вирусов и недостаточной длины сигнатуры (регулярного выражения).

> ...А изменчивость как фактор выживания как для вирусов, так и
> для честных прог - это действительно очень неплохой фактор.

CodeRed обращался к внешней DLL, а не к коду IIS. полиморфизм IIS ни к чему не привел бы.
Собственно идея-то совсем другая 07.02.03 15:24  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> VCG.Belka тоже такими вещами занимается в меру
> возможностей. ЛовИмо.
Кроме эквивалентных преобразований нод я предусматривал еще и вставку новых нод (которые затем тоже участвуют в мутации) и перемещение готовых веток и оптимизацию (тоже стохастическую): несколько нод объединяются в одну или несколько других и тоже затем участвует в мутации. Кроме того, так как фактически происходит компиляция, и функциональность мутируемого алгоритма известна, то компилятор (полиморфный движок) может принимать решения о дисперсии данных (раскидать, допустим, int или массив на несколько битовых наборов и пустить их в разные ветки для обработки), причем переход в каждую конкретную ветку может быть условным: на одном этапе генерируется нода-ветвление с одной веткой - unreacheable (примерно такой какая выкидывается большинством современных компиляторов), после нескольких итераций мутаций данные для этой ноды тоже могут прийти из нескольких других ветвей. Возможно и дальнейшее развитие идеи.

Восстановление первоначальной функциональной сигнатуры по получившемуся коду будет значительно сложнее, чем восстановление первоначального C-шного кода по исполняемому, скомпилированному с -O2 хотя бы.

> если известен алгоритм, по которому строятся такие ветви,
> то по нему же их можно и обнаружить.
Алгоритм стохастический и одни и те же ноды могут быть получены мутацией различных начальных. Если при этом учесть внесенный "мусор" и опять таки стохастическую оптимизацию - объединение нод (при этом возможно объединение "мусорных" с валидными), то восстановление - не такая уж тривиальная задача. См по поводу восстановления исходного текста по скомпилированному с оптимизацией.

> функционально это только упрощает задачу, поскольку по
> расшифровщику уже можно сказать многое.
Нужно еще понять что это именно расшифровщик. И что именно он делает. Кроме того на самом деле такой метод ничего не делает с функциональностью - можно делать не ксорку со случайно сгенеренным (состоящим из команд не имеющих сигнатур) генератором гаммы, а DES, например, или любой другой алгоритм имеющий прямое и обратное преобразование (tg - arctg, разложенные в ряд или еще что-нить). Расшифровщик нужет только для эффективности (чтоб ядро работало как можно быстрее) и для сокрытия кода (по дереву, включенному в инсталлятор, восстановить первоначальный алгоритм очень легко)

> > ЗЫ: А с полиморфизмом АВ-ы так и не справились по
> > человечески имхо.
> ...ввиду простоты языка описания баз вирусов.
Ну да. Обнаружить такой алгоритм можно, но при это программа специально заточенная для этого должна быть размером с IDA. Вирусы не обладают такими возможностями. А использование такой методики в самих вирусах тоже проблематично - движок будет на порядок больше активной части вируса и распространяться на дискетах или через инет будет им ой как неудобно. Кстати именно для защиты одного AntiSpyware от самих SpyWare я и разрабатывал данную систему (но потом из за цейтнота ограничился ксоркой по гамме, которая генерится случайным набором команд - тоже не очень легко найти: около 50 опкодов с произвольными парами регистр-регистр и регистр-константа, но можно и не слишком большими усилиями)

> ерунда. неоптимизированный полиморфик (замена операций
> эквивалентными из известного набора) разбирается как
> регулярное или стековое выражение. кю.
Кроме замены используется добавление пустышек, объединение операций тоже по заданным критериям, перестановка информационно-независимых друг от друга (информационные потоки в компиляторе тоже отслеживаются), разбиение информационных потоков на несколько и т.д.. И все это делается в несколько десятков итераций.

> нынешние сканеры обламываются из-за несовершенства языка
> описания вирусов и недостаточной длины сигнатуры
> (регулярного выражения).
Если нынешние сканеры обламываются даже на таких примитивных (относительно) конструкциях как в современных полиморфиках (примитивные они просто из-за ограниченности допустимого размера - несколько килобайт)

> CodeRed обращался к внешней DLL, а не к коду IIS.
> полиморфизм IIS ни к чему не привел бы.
Собственно статья о другом применении данного подхода. В моем случае я защищался от кода, который уже находится на машине и может исследовать, что у меня там творится, а первоначальная статья защищает от сетевых атак. И было ясно указано, что все dll-ки для данного процесса должны загружаться по новым адресам, перемещается стек и куча. Переполнение буфера все так же происходит, но при этом большинство известных методик передачи исполнения только что загруженному коду будет просто валить процесс, который только что скомпрометирован. В случае удаленных атак алгоритм перемещения опять-таки известен, но неизвестны конкретные адреса по которым произошло перемещение. Если на компьютере выполняется код, который может сообщить злоумышленнику новые адреса, то ему гораздо легче открыть реверсивную телнет сессию и не заморачиваться переполнением буферов.
Re: Собственно идея-то совсем другая 12.02.03 17:28  
Автор: sassa Статус: Незарегистрированный пользователь
<"чистая" ссылка>
разница в том, что Вы пытаетесь доказать, что трудно определить, что именно вычисляет дерево (а это неоспоримо, поскольку упирается в теорему Геделя и Entscheidungsproblem), а я говорю, что, зная эталонное дерево, можно определить, является ли данное дерево ее мутацией. трудно (возможно ли?) написать антивирус, который ловит любой вирус, но легко написать антивирус, который ловит любые мутации полиморфика с заданными правилами.


> > VCG.Belka тоже такими вещами занимается в меру
> > возможностей. ЛовИмо.
> Кроме эквивалентных преобразований нод я предусматривал еще
> и вставку новых нод (которые затем тоже участвуют в
> мутации)

вставка новых нод - это разновидность NOP: изменение незадействованных информационных потоков. (код NOP эквивалентен XCHG AX,AX, например)

> и перемещение готовых веток

зная эталонное дерево, всегда можно сказать, куда ветка может переместиться без искажения смысла действия. отвечаем на вопрос "могла ли эта ветка переместиться вон туда? y/n"

> и оптимизацию (тоже
> стохастическую): несколько нод объединяются в одну или
> несколько других и тоже затем участвует в мутации. Кроме
> того, так как фактически происходит компиляция, и
> функциональность мутируемого алгоритма известна,

вот-вот. точно как и когда ищем мутанта, проверяем, можно ли по известным правилам получить "это" из "того".

> то
> компилятор (полиморфный движок) может принимать решения о
> дисперсии данных (раскидать, допустим, int или массив на
> несколько битовых наборов и пустить их в разные ветки для
> обработки), причем переход в каждую конкретную ветку может
> быть условным:

алгоритм компилятора знает, на какие условия нужно обращать внимание. антивирус может обращать внимание на те же условия, чтобы выяснить, постоянно ли это условие в разветвлении. ставим ли мы задачу ловить "все" вирусы - или те, которые сгенерированы конкретным компилятором по конкретному алгоритму? кстати, мне можно и не проверять, выполняется ли условие - в первом приближении я могу посмотреть что делают Обе ветки и перестать, если ни одна ничего подозрительного не делает, или прикопаться к условию, если хоть одна выглядит заманчиво - кстати, я буду знать, какое условие Ожидать.


> Восстановление первоначальной функциональной сигнатуры по
> получившемуся коду будет значительно сложнее, чем
> восстановление первоначального C-шного кода по
> исполняемому, скомпилированному с -O2 хотя бы.

согласен. но получение получившегося кода из первоначальной функциональной сигнатуры не будет значительно сложнее :-)


> > если известен алгоритм, по которому строятся такие
> ветви,
> > то по нему же их можно и обнаружить.
> Алгоритм стохастический и одни и те же ноды могут быть
> получены мутацией различных начальных.

ну и что? я знаю начальную ноду и смотрю, а могло ли получиться то, что вижу, хотя бы и с помощью стохастики. стохастика, к тому же, не является совершенно случайной - естьограниченныйнабор вариантов, из которых она выбирает один.


> Если при этом учесть
> внесенный "мусор" и опять таки стохастическую оптимизацию -
> объединение нод (при этом возможно объединение "мусорных" с
> валидными), то восстановление - не такая уж тривиальная
> задача.

антивирус целится поймать обращение к конкретному прерыванию. при вызове этого прерывания регистры должны быть инициализированы определенным образом. так антивирус может узнать, какие информационные потоки отслеживать. мусорные инструкции видно сразу.

я не писал антивирус, но я писал мотор для генерации случайных информационных потоков и мотор для детекцииконкретныхпотоков. контрольная точка - "int 21h"; задание: что и откуда заносится в АХ и DХ - конкретные потоки. далее, "что и откуда заносится в [DX], [DX+1], ..." - все дела, имеем знание о функциональности.


> > функционально это только упрощает задачу, поскольку по
> > расшифровщику уже можно сказать многое.
> Нужно еще понять что это именно расшифровщик.

отчего же? :-) "а не расшифровщик ли это? y/n"

задача, стоящая перед хакером, отличается от задачи, стоящей перед антивирусом. последний знает, чтО искать; и если не нашел - значит, его там нет.

"эта программа сгенерирована не с помощью VCG" отличается от полного ответа на вопрос "каков алгоритм генератора этой программы?"


> ...а DES, например, или любой
> другой алгоритм имеющий прямое и обратное преобразование
> (tg - arctg, разложенные в ряд или еще что-нить).

да один хрен. если я знаю, что искать нужно DES, то я смогу его или найти, или не найти :-)


> ...(но потом из за цейтнота ограничился ксоркой по
> гамме, которая генерится случайным набором команд - тоже не
> очень легко найти: около 50 опкодов с произвольными парами
> регистр-регистр и регистр-константа, но можно и не слишком
> большими усилиями)

ну, правильно. если я знаю, что здесь должна быть гамма с размером (стохастически) от 8 до 79 инструкций...

> > ерунда. неоптимизированный полиморфик (замена операций
> > эквивалентными из известного набора) разбирается как
> > регулярное или стековое выражение. кю.
> Кроме замены используется добавление пустышек, объединение
> операций тоже
> по заданным критериям,

...известным антивирусу! :-) (хотя и неизвестным хакеру, взламывающему этот вирус В ПЕРВЫЙ РАЗ)

> перестановка
> информационно-независимых друг от друга (информационные
> потоки в компиляторе тоже отслеживаются), разбиение
> информационных потоков на несколько и т.д.. И все это
> делается в несколько десятков итераций.

ерунда :-) да хоть одна итерация, хоть десятое поколение вируса - алгоритм остается тот же, и критерии пермутированиия - те же.


да я и не по статье ведь комментирую, а по пермутирующему движку :-)
Согласен, что можно обнаружить все при желании 13.02.03 15:47  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Кроме того математически доказано, что идеальных антивирусов не бывает, как впрочем и вирусов

Восстановить можно и сам алгоритм даже только по коду без эталона. Только не автоматизированно. Это наглядно продемонстрировали разработчики DVD и писатели всяких ripper-ов. А ведь шифрование в DVD разрабатывали люди, которые не вчера этим заниматься начали - кое-что знают.

> да я и не по статье ведь комментирую, а по пермутирующему
> движку :-)

Обнаружить-то можно, но вот ресурсы, которые для этого необходимы оказываются уже недоступными для обычных вирусов. Такой пермутирующий движок использовать в вирусе тоже проблематично - размеры вряд ли позволят. А вот движок для обнаружения будет еще в несколько раз больше. Так что защищаться от вирусов таким образом все-таки можно (имхо :-))) ). Имеется в виду не защита всей системы, а защита своего модуля, хотя сам модуль может использоваться и для защиты системы.

Опять-таки правила кодогенерации можно подобрать таким образом, что результирующий код будет максимально похож на сгенерированный VC к примеру. Если выполнять полный анализ всех модулей, скомпилированных в VC на предмет а не является ли данный модуль сгенерированным данным алгоритмом по данному дереву. Обращаю внимание на то, что обнаруживающий алгоритм будет тоже иметь некоторое дерево (вернее граф из-за goto, деревом я его называю, в честь структуры данных, которую я использовал) и при его анализе можно понять как сделать мутируемый код минимально подозрительным (вернее, чтобы максимальное подозрение в конце концов падало на все модули, и необходим полный анализ их всех). Даже с несколько примитивными полиморфиками и небольшим их количеством полный анализ системы сейчас занимает несколько часов (полиморфные вирусы вносят не решающий вклад в это - просто сигнатур много). Если модули будут проверяться на предмет эквивалентности не одному дереву, а нескольких (это реализовать легко - при смене версий например) это будет ОЧЕНЬ долго. Смену алгоритма даже рассматривать не буду - полностью переписать все - лень не позволит. Хотя если кто-либо напишет что-то подобное: вот уже несколько алгоритмов. Если опубликовать систему защиты, то появится не два и не десять исходных деревьев

Можно, конечно включать в рассмотрение только те модули, которые уже работают или включены в автозапуск тем или иным способом или запускаются вручную. Но запущенный процесс имеет гораздо больше возможностей для защиты. Многие вирусы после того как запущены хоть раз больше не обнаруживаются антивирусами. Подчеркну, что данная система защиты ограничена в ресурсах гораздо меньше, чем ее возможные противники и следовательно имеет гораздо больше возможностей спрятаться после запуска. Здесь встает чисто технический вопрос - запуститься как можно раньше.

При анализе только автозапускаемых программ велика вероятность пропустить что-то важное (даже если программа еще не запущена)
Ну а против мониторинга в момент запуска действительно сделать уже ничего не получится.

В общем спор получается какой-то странный (типа шкуру неубитого медведя). Реальную надежность такой системы может показать только практика (а я даже не уверен появится ли она когда нибудь:-)) ). А то что я думаю, что ее можно сделать ДОСТАТОЧНО надежной для практического применения (против вирусов), а Вы считаете, что нет - всего лишь размышления. :-))))
Я тоже когда-то пытался реализовать эту идею 04.02.03 18:22  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> ЗЫ: А с полиморфизмом АВ-ы так и не справились по
> человечески имхо. Полиморфизмы тоже бывают разные. И чаще
> всего в расшифровщике меняются от популяции к популяции
> только некоторые константы - с этим на раз справляются
> плавающие сигнатуры, но вот например, описанный выше
> алгоритм я с трудом представляю как обнаружить как в
> вирусе, так и в антивирусе (разве что в песочнице, но флаг
> в руки сканеру, если он будет пытаться сэмулировать поток
> исполнения команд так на 50000 для каждого исполняемого
> файла в системе, кроме того после этого он начнет
> материться даже на анекдоты про вовочку).
> Если кто еще не знает, сейчас полно вирусов, которые не
> только пытаются прятаться, но и тем или иным образом
> вывести из строя антивирус, так что ему тоже приходится
> защищаться всеми доступными способами.
> А изменчивость как фактор выживания как для вирусов, так и
> для честных прог - это действительно очень неплохой фактор.

Под тем, что антивирусы справляются, я имею в виду, что страшной эпидемии полиморфов, которой стращал Касперский (как раз перед тем как переключиться на сетевую безопасность :), вроде не наблюдается. То, что предлагается в статье, конечно, сильно проще, и на самом деле не такая уж проблема все это обойти. Но идея любопытная, и не исключено, что в эту сторону будут думать дальше.
И кстати по-мойму эта идея не имеет ничего общего с "Security by obscurity" 05.02.03 20:41  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Алгоритм злоумышленнику известен: код линкера на этапе инсталляции перед ним - так что рано или поздно реверсирует. А неизветсна некоторая ключевая информация, которая при этом генерируется случайно - если воспользоваться примером из статьи, то это место, откуда взялся объектник очередного блока.

Это ж прямая аналогия с классической криптографией - она вся базируется на подобной "obscurity" - потенциальному злоумышленнику неизвестен ключ.
с некоторой натяжкой 05.02.03 21:59  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> Алгоритм злоумышленнику известен: код линкера на этапе
> инсталляции перед ним - так что рано или поздно
> реверсирует. А неизветсна некоторая ключевая информация,
> которая при этом генерируется случайно - если
> воспользоваться примером из статьи, то это место, откуда
> взялся объектник очередного блока.
> Это ж прямая аналогия с классической криптографией - она
> вся базируется на подобной "obscurity" - потенциальному
> злоумышленнику неизвестен ключ.

Ну это уже на совести даже не автора, а его критика. Возможно, имеется в виду, что для ленивых вирусописателей алгоритм перетасовки таки неизвестен. Как только же находится желающий в нем покопаться, накрывается и вся безопасность. С криптоалгоритмами, основанными на принципе "security by obscurity" ситуация в принципе аналогичная - живут до первого неленивого исследователя.
Данный алгоритм, можно опубликовать в газетах или сделать OpenSource 06.02.03 15:27  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Ну это уже на совести даже не автора, а его критика.
> Возможно, имеется в виду, что для ленивых вирусописателей
> алгоритм перетасовки таки неизвестен. Как только же
> находится желающий в нем покопаться, накрывается и вся
> безопасность. С криптоалгоритмами, основанными на принципе
> "security by obscurity" ситуация в принципе аналогичная -
> живут до первого неленивого исследователя.
Я в общем то это понимаю. Но схема приведенная в статье жизнеспособна не из-за закрытости алгоритма перетасовки, а именно из-за случайности результирующего набора. Если выписать номера всех составляющих частей последовательно - то это будет ключ, который генерируется случайно во время запуска инсталлятора. А реальная предсказуемость этого ключа уже на совести ГСП - так же как и в реальных криптоалгоритмах.

Защищенность результирующего набора будет зависеть еще и от того, нужно ли злоумышленнику знать весь набор или достаточно знать только одну (или несколько, но не все) компоненту, которую и атаковать. Но здесь просто укорачивается ключ.
Данный алгоритм, можно опубликовать в газетах или сделать OpenSource 06.02.03 16:26  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> Я в общем то это понимаю. Но схема приведенная в статье
> жизнеспособна не из-за закрытости алгоритма перетасовки, а
> именно из-за случайности результирующего набора. Если
> выписать номера всех составляющих частей последовательно -
> то это будет ключ, который генерируется случайно во время
> запуска инсталлятора. А реальная предсказуемость этого
> ключа уже на совести ГСП - так же как и в реальных
> криптоалгоритмах.

Угу, только ключ тут, во-первых, коротковат, во-вторых, его отдельные элементы достаточно легко подбираются, например, сигнатурным поиском :)
Сигнатурный поиск это если на тачке УЖЕ что то работает 06.02.03 16:49  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Угу, только ключ тут, во-первых, коротковат, во-вторых, его
Ну длина регулируется :-), кроме того если есть, скажем 32 разных комбинации и если в среднем нужная комбинация угадывается с 16-го раза, а все остальные приводят к падению сервака. То админу, который не обратит внимания на десяток падений я бы отрывал руки :-)))
> отдельные элементы достаточно легко подбираются, например,
> сигнатурным поиском :)
это да :) 06.02.03 17:44  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach