Вскрытие червяка Крис Касперски aka мыщъх Спецвыпуск Xakep, номер #045, стр. 045-044-5 С определением версии сервера дела обстоят значительно сложнее, и универсальными решениями здесь и не пахнет. Некоторые протоколы поддерживают специальную команду или возвращают версию сервера в строке приветствия, но чаще всего информацию приходится добывать по косвенным признакам. Различные операционные системы и сервера по-разному реагируют на нестандартные пакеты или проявляют себя специфическими портами, что позволяет осуществить грубую идентификацию жертвы. А точность червю нужна, как зайцу панталоны, а собаке пятая нога, ведь главное – отсеять заведомо неподходящих кандидатов. Если забросить голову червя на неподходящий укрепительный район, ничего не произойдет. Голова, точнее, копия головы погибнет, только и всего. На завершающей стадии разведывательной операции червь посылает удаленному узлу условный знак, например, выпускает две зеленые ракеты (отправляет TCP-пакет с кодовым посланием внутри). Если узел уже захвачен другим червем, он должен выпустить в ответ три фиолетовых. Это наиболее уязвимая часть операции, ведь если противник, то есть администратор, пронюхает об этом, вражеский узел без труда сможет прикинуться своим, предотвращая вторжение. Такая техника антивирусной защиты называется вакцинацией. Для борьбы с ней черви раз в несколько поколений игнорируют признак заражения и захватывают узел повторно, чем и приводят свою популяцию к гибели, ибо все узлы инфицируются многократно и через некоторое время начинают кишеть червями, сжирающими все системные ресурсы со всеми вытекающими последствиями. Выбрав жертву для вторжения, червь посылает серверу запрос, переполняющий буфер и передающий бразды правления shell-коду, который может быть передан как вместе с переполняющимся запросом, так и отдельно. Такая стратегия вторжения называется многостадийной, и ее реализует, в частности, червь Slapper. При подготовке shell-кода следует помнить о брандмауэрах, анализирующих содержимое запросов и отсекающих все подозрительные пакеты. Этим занимаются, в том числе, фильтры уровня приложений. Чтобы избежать расстрела, shell-код должен соответствовать всем требованиям спецификации протокола и быть синтаксически неотличимым от нормальных команд. Ведь фильтр анализирует отнюдь не содержимое (на это у него кишка тонка), а лишь форму запроса. Если захват управления пройдет успешно, shell-код должен будет найти дескриптор TCP/IP-соединения, через которое он был заслан, и подтянуть оставшийся хвост. Проще, конечно, было бы затащить хвост через отдельное TCP/IP-соединение, но, если противник окружил себя грамотно настроенным брандмауэром, вряд ли вы через него пробьетесь. А вот использовать уже установленные TCP/IP-соединения никакой брандмауэр не запрещает. И вот вся группа в сборе. Роем окопы от забора и до обеда! Самое глупое, что только может предпринять спецназ, это сгрузить свою тушу в исполняемый файл, затерявшийся в густонаселенных трущобах Windows\System32 и автоматически загружающийся при каждом старте системы по ключу HKLM\Software\Microsoft\Windows\CurrentVersion\Run. Хорошее место для засады, нечего сказать! Стоит дотянуться администратору до клавиатуры, как от червя и мокрого места не останется. А вот если червь внедряется в исполняемые файлы на манер файловых вирусов, то его удаление потребует намного больше времени и усилий. |