LINUX.ORG.RU

Недетектируемый вирус?

 , ,


0

1

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

Теперь по поводу самого синтеза.
Комбинаторный синтез занимает экспоненциальное время, поэтому смотреть стоит либо в сторону дедуктивного синтеза, либо на сочетание первого и второго. Самая примитивная форма дедуктивного синтеза выглядит примерно так:

  1. Спецификация на вход подается в виде программы, т.е. это трансформатор программ.
  2. Далее к ней применяются алгебраические законы. Например, для функциональных языков композиция ассоциативна, функция map дистрибутивна относительно композиции и т.д.
  3. Законы применяются в каком-то порядке, т.е. присутствует стратегия.

Чтобы подход работал на нашей задаче, нужно чтобы в нашей алгебре программ проблема эквивалентности двух термов была очень сложна. Буквами в такой алгебре будут обозначаться не примитивы языка, а какие-то сложные составные программы. Для них уже можно использовать комбинаторный синтез. Проблема здесь в том, что они сами могут быть легко детектированы. Здесь пока тоже затык.

Ну и для демонстрации схемы выше я тут написал псевдослучайный мультиквайн на языке Joy:
https://github.com/undetectablev/joytrain/

Работает все очень просто: сначала частично применяем список аксиом к паттерн матчеру, потом применяем остаточную программу к самой себе. Программы получаются не очень интересные, но в качестве прикола сойдет.

Есть какие-нибудь мысли?

Заголовок один, начало вроде как продолжает его, потом переход к определению, но определение не задалось, поэтому прыжок к какому-то синтезу, отсылки к «нашей задаче» (что за задача?) и закончил квайнами.

Мысль только одна, зачем я это прочитал и зачем написал этот комментарий?

Набор тегов - это отдельная каша. Попробуйте структурировать поток мыслей.

P.S. И, да, что это делает в разделе девелопмент?

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)

Есть какие-нибудь мысли?

идея прикольная

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

MKuznetsov ★★★★★
()

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

HE_KOT
()
Ответ на: комментарий от vvn_black

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

Про переход от вируса к квайну я не стал портянку писать, думал это и так очевидно. Если абстрагироваться от всего лишнего вроде взаимодействия с ОС, то вирус это и есть квайн. Об этом чуть ли не в википедии прочитать можно.

Что касается синтеза, то вирус, если его экземпляры хоть чем-то различаются, должен синтезировать их по какой-то спецификации. В идеале, детектирование это задача обращения функции синтезатора. Но на практике это может быть совсем не так. Например, если все экземпляры содержат какой-то неизменный фрагмент, то детектировать можно по нему, хотя и не со 100% вероятностью. Это и делает задачу сложной даже на этапе определения.

По поводу тегов и раздела, прошу прощения. Я первый раз на этом форуме.

undetectablev
() автор топика
Ответ на: комментарий от undetectablev

Тут есть серьезная гносеологическая? проблема. С одной стороны для доказательства наличия недетектируемого вируса достаточно этот самый вирус предъявить. С другой, предъявлен он может быть только после его детектирования а значит он становится детектируемым, таким образом попытка прямого физического обоснавания обречена на провал. Что делать? Прибегнуть к вероятностным оценкам. Поскольку вирусы это тоже программы, и если учесть, что работь они должны на реальном железе, то это множесто будет ограничено мощностью самого мощного домашнего компа. При стандарте харда в .5 терабайта мы получаем миллиарды миллиардов. При этом репы дебиана содержать всего лишь сотни пакетов, и это гарантированно не вирусы.

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

ya-betmen ★★★★★
()
Ответ на: комментарий от undetectablev

Если абстрагироваться от всего лишнего вроде взаимодействия с ОС, то вирус это и есть квайн.

Зачем абстрагироваться от взаимодействия с ОС, если цель избежать детектирования в рамках ОС? Так что вирус не есть квайн, как минимум потому что исходный код, который выдается квайном, сам себя не запустит. А всю вашу метаморфную братию отловит динамический анализатор антивируса.

mydibyje ★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

С другой, предъявлен он может быть только после его детектирования а значит он становится детектируемым, таким образом попытка прямого физического обоснавания обречена на провал.

Вам прислали программку которая печатает другие программки. Надо написать детектор, который отличает полученное от случайной программы. Вы пробуете, ничего не получается. Вероятность правильного ответа не сильно больше 50%.

undetectablev
() автор топика
Ответ на: комментарий от mydibyje

Абстрагироваться надо, чтобы не утонуть в бессмысленных деталях, очевидно.

И что такого интересного увидит динамический анализатор? То что программа-1 записала программу-2 на диск? Это что, преступление? Файл-менеджер и браузер это что, тоже вирусы?

undetectablev
() автор топика

Недетектируемый вирус это зловредный код, который не принято детектировать как вирус. Всякие зонды в проприетарщине, такое вот

alex1101
()
Ответ на: комментарий от undetectablev

Файл-менеджер и браузер проверены по хешам в облаке, а ваш вирус антивирус отправит в облако в песочницу на кластер компов и там с ним быстро разберутся, что программа-2 записывает программу-3, а та программу-4 и т.д.

mydibyje ★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от mydibyje

Это отдельный вопрос и он тоже очень интересен. Одно из возможных решений - заражать другие программы и «наследовать» таким образом их поведение. Но это именно отдельный вопрос. Поэтому от него и стоит абстрагироваться.

undetectablev
() автор топика

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

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от undetectablev

И что такого интересного увидит динамический анализатор? То что программа-1 записала программу-2 на диск? Это что, преступление? Файл-менеджер и браузер это что, тоже вирусы?

Если мы про вирусы, то программа-1 записала текст программы-2 в чужой бинарник. Такое действие отслеживается.

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

P.S. Недетектируемый вирус бывает: достаточно заменить достаточную часть ОС. Например, вирус внедрён в ядро линукса, на stat и read на файл ядра выдаёт оригинальную копию без вируса. Найти его можно только если загрузиться с другого носителя. Если же вирус сможет прописаться куда-то в Intel ME, то тогда только проверив диск и прошивку ME на другом компьютере.

monk ★★★★★
()
Ответ на: комментарий от monk

P.S. Недетектируемый вирус бывает: достаточно заменить достаточную часть ОС. Например, вирус внедрён в ядро линукса, на stat и read на файл ядра выдаёт оригинальную копию без вируса. Найти его можно только если загрузиться с другого носителя.

Конечно, скомпрометированную систему защитить нельзя, с этим не поспоришь. Но разговор то не об этом, а о возможности различения программы от случайной, что бы это не значило. ОС тут вообще не при чем.

undetectablev
() автор топика
Ответ на: комментарий от undetectablev

Тогда это не про вирус, а про математику.

Технически, можно написать программу, которая проверяет эквивалентность двух программ.

Фактически, любой оптимизирующий компилятор примерно это и делает.

нужно чтобы в нашей алгебре программ проблема эквивалентности двух термов была очень сложна

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

monk ★★★★★
()
Ответ на: комментарий от monk

Тогда это не про вирус, а про математику.

Любая задача про математику, если ее удается формализовать.

Фактически, любой оптимизирующий компилятор примерно это и делает.

Компиляцию можно рассматривать как частный случай синтеза, проблем нет.

Вирус обязан быть программой в машинных кодах.

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

Но там большую часть проблем эквивалентности уже решили.

А вот это невозможно в принципе из-за невычислимости. Но даже если рассматривать только программы с ограничением на размер, то и это ничего не даст. Допустим, есть 2 программы. Программа-1 пытается проверить большую булеву формулу методом перебора и печатает «1» если она выполнима. Программа-2 тупо печатает «1» и завершается. А теперь проверьте их эквивалентность))

undetectablev
() автор топика
Ответ на: комментарий от undetectablev

Если бы было про произвольные программы, согласен. Я помню про проблему останова.

Но у тебя «к ней применяются алгебраические законы. Например, для функциональных языков композиция ассоциативна, функция map дистрибутивна относительно композиции и т.д.». Таким образом детектор должен знать эти же законы и тогда сможет вывести эквивалентность.

Любая задача про математику, если ее удается формализовать.

Нет. Полиморфный вирус легко ловится по действиям (попытка модификации исполнимых файлов, попытка создания исполнимых файлов без команды пользователя).

Любая задача про математику

Вот контрпример: https://i06.fotocdn.net/s132/295a9458f8d61e60/public_pin_l/2973833759.jpg

monk ★★★★★
()
Ответ на: комментарий от monk

Но у тебя «к ней применяются алгебраические законы. Например, для функциональных языков композиция ассоциативна, функция map дистрибутивна относительно композиции и т.д.». Таким образом детектор должен знать эти же законы и тогда сможет вывести эквивалентность.

Разумеется, нет. Во-первых, trs может не быть конфлюентной, как в моем исходнике, что означает задачу эквивалентности в классе NP. Во-вторых, существуют алгебры, в которых задача распознавания эквивалентности термов относится к классу distNP-complete. Вот так.

Нет. Полиморфный вирус легко ловится по действиям (попытка модификации исполнимых файлов, попытка создания исполнимых файлов без команды пользователя).

Это абсолютно не релевантно. На это я уже ответил выше.

Вот контрпример: https://i06.fotocdn.net/s132/295a9458f8d61e60/public_pin_l/2973833759.jpg

Смешно, да. Уже надрываю животик. Почти как анекдоты про молдован выше в треде.

undetectablev
() автор топика
Ответ на: комментарий от undetectablev

Во-вторых, существуют алгебры, в которых задача распознавания эквивалентности термов относится к классу distNP-complete.

Вот ты на свой вопрос сам и ответил. Правда если мы про математику, то с точки зрения математики NP-полные задачи всё-таки являются решаемыми.

monk ★★★★★
()
Ответ на: комментарий от monk

Я ни на что не ответил, к сожалению, см. заглавный пост:

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

Почему не примитивы языка? Потому что в другом языке могут быть другие примитивы! Эти составные программы должны быть экстенсионально эквивалентны во всех экземплярах вируса, иначе его семантика будет нарушена. Что собственно и делает их детектируемыми.

undetectablev
() автор топика
Ответ на: комментарий от undetectablev

Хочешь спрятаться за проблемой останова? Она же тебя и выдаст.

Если вирус останавливается, то он может задетектить сам себя, а значит это можно повторить в антивирусе.

Если же вирус недетектируемый, то неизбежно повторное заражение. Как следствие, чрезмерное использование ресурсов и обнаружение.

ratvier ★★
()
Ответ на: комментарий от ratvier

зачем себя детектить?

Как много копий реально запускается одновременно из программ? Если мы говорим именно о вирусе.

классика, если тебя разбудили - заразил 2 новых файла, а сам выпилился нафиг.

Morin ★★★★
()
Ответ на: комментарий от monk

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

Но он же не обязан быть эквивалентен сам себе. Точнее мутированная копия оригиналу.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от Morin

классика, если тебя разбудили - заразил 2 новых файла, а сам выпилился нафиг.

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

ratvier ★★
()