Общие идеи о неуничтожимом сетевом черве
🕛 28.05.2007, 16:57
Однажды, когда я думал о своих будующих проектах, неожиданно вспомнились где-то услышанные несколько лет назад идеи. Тогда я даже начал применять их на практике, но закончив основную часть червя так и не довел его до релиза. Тем не менее я хочу поделиться этими мыслями с вами. Основная причина, покоторой не был завершен червь - это зависимость механизма распространения от наличия ошибок переполнения буфера в новых версиях IIS и Outlook, которые позволяют выполнять произвольный код на удаленной машине. Поскольку на тот момент подходящего бага найдено не было, то червь был отложен до обнаружения подходящей лазейки (и я обязательно закончу его, как только она появится)Конструкция неудаляемого червя
На первый взгляд моя идея выглядит очень странно. Проблема всех червей (кто бы мог подумать, да?) - это их физическое присутствие на компьютере. Если червь хранится где-то на диске, в памяти, в служебных областях операционной системы и т.д., то он всегда может быть обнаружен сканером. С другой стороны как только он будет обнружен он может быть удален. Итек, как же избежать обнаружения и удаления червя антивирусным сканером? Ответ напрашивается сам собой - избежав присутствия червя на машине.
Но как? Есть всего две области, которые могут содержать червя - диск и память (только если автор широко понимает память, включая в этот термин bios, flash память модема и т.д. видимо это и имеется в виду. прим. пер.) И АВ сканеры знают это.
Что мы имем? Червь
1) Не должен храниться в каком бы то ни было файле на дисках
2) Может содержаться в памяти процессов (например explorer.exe), но только до тех пор, пока это необходимо - распространился и вышел. Очень важно очищать память на выходе, червь действительно должнен исчезнуть при этом.
3) Должне уметь распространяться без какой бы то ни было помощи пользователя, используя эксплоиты или сетевые сервисы, которые позволят удаленно запускать код червя на выполнение.
4) Распространение должно проходить в максимально сжатые сроки - нашли уязвимый сетевой сервис, использовали дыру, закрылись. И как можно быстрее.
5) Должен изменять свой код от поколения к поколению, используя внешний полиморфный движок (мой BME32 или MetaPHOR MDriller'а, например).
Получается, что есть только одно место, где может храниться червь - соединяющая компьютеры в сеть среда. Из-за быстрого распространения и постоянного изменения кода будет невозможно обнаружить и остановить такоге создание обычным АВ сканером. Червь будет жить до тех пор, пока _все_ содержащие ошибку сетевые сервисы на _всех_ серверах не будут пропатчены. Вы можете представить сколько это займет времени? Получается, что если вы храните тело вируса в среде передачи данных (микроволновых коннекторах, спутниковых приемниках, телефонных линиях и т.д.), то единственный способ остановить червя без устранения всех дыр в ПО, которые он использует - это отключить все компьютеры от сети. Как видите, оба пути решения проблемы невозможны. Я должен обратить ваше внимание на то, что что если вирус будет использовать очень распространенный баг, то он может присести к коллапсу всей сети! Я уверен, что если алгоритм распространения будет в последтвии улучшен, то такой червь может нанести серьезный урон.
Возможно, альтернативный путь остановки такого червя, как ни парадоксально это может звучать, это запуск нового (я не думаю, что аверы пойдут на это) с одним добавочным модулем, который после успешного инфицирования пропатчит баг в сетевой утилите и тем самым закроет дверь в эту систему. Научная фантастика? (так раз автор говорит, что ядро написал, то это самая что ни на есть реальность. мы ему верим или как? прим.пер.) Вам решать...