Троянские программы
Название этого типа атак происходит от известной легенды о статуе коня, которую греки использовали для проникновения в стены города Троя во время воспетой Гомером Троянской войны.
Троянские программы представляют очень большую опасность, потому что исполняются с привилегиями тех пользователей, которые их запустили, и имеют доступ ко всем данным этого пользователя. Вред, который может причинить троянская программа, ограничен только фантазией её разработчика. Из наиболее неприятных возможностей следует упомянуть полное уничтожение всех доступных данных или их анализ и пересылку результатов анализа автору или заказчику трояна. В некоторых случаях результат деятельности троянской программы может выглядеть как целенаправленная диверсия со стороны пользователя, что может повести расследование инцидента по ложному пути.
Пример троянской программы
Простой и элегантный пример троянской программы приводится во многих учебниках по командному языку систем семейства Unix, например, в работе [Керниган/Пайк 1992]. Эта программа приводится для объяснения того, почему в Unix путь поиска исполняемых программ по умолчанию не включает текущий каталог, и почему включение текущего каталога в этот путь крайне нежелательно.
Программа из примера 12.1 работает следующим образом:
- Вредитель помещает её в общедоступный каталог под именем
Is
. - Пользователь входит в этот каталог и исполняет команду
Is
(просмотр текущего каталога). - Вместо системной команды
/bin/Is
исполняется троянская программа. - Троянская программа совершает вредоносное действие и запускает настоящий
/bin/Is
, позаботившись о том, чтобы отфильтровать свою запись из листинга каталога.
Пример 12.1. Троянская программа на языке shell
#!/bin/sh
# Разместите эту программу в общедоступном каталоге и назовите её Is
# Скопировать себя в домашний каталог пользователя;
# На этом месте может стоять и другая вредоносная операция
/bin/Is $# | /home/badguy/filter_ls $#
Важная часть программы — модуль, который удаляет файл Is
из листинга текущего каталога, опущен из-за своей сложности, так как он должен анализировать параметры команды Is
и производить удаление своей записи различными способами в зависимости от требуемого формата вывода команды.
Троянская программа может быть реализована не только в виде самостоятельного загрузочного модуля, но и в виде разделяемой библиотеки. Например, в Windows NT 4.0 до выхода Service Pack 5 присутствовала ошибка, которая позволяла зарегистрировать DLL, совпадающую по имени с любой из системных, так что при разрешении ссылок из других модулей использовалась вновь зарегистрированная библиотека.
Аналогичный пример для Win32
Во время подготовки книги к печати началась пандемия вируса Nimda, один из приёмов распространения которого аналогичен приведённому в примере 12.1: обнаружив каталог, в котором лежат файлы данных MS Office, вирус помещает туда файл riched20.dll
. При сборке программы в момент запуска Windows просматривает текущий каталог до перечисленных в PATH
, поэтому вместо модуля Office загружается троянский код вируса. В отличие от систем семейства Unix, в Win32 порядок просмотра каталогов при сборке жёстко задан и не поддаётся контролю со стороны системного администратора, поэтому перекрыть данный путь распространения заразы можно лишь модификацией ядра Windows.
Многие троянские программы образуются модификацией присутствующих в системе загрузочных модулей, разделяемых библиотек и даже модулей ядра. Такая программа не обязательно должна представлять собой бинарный код — это может быть также интерпретируемый код или последовательность команд макропроцессора. Широко распространены макровирусы, распространяющиеся с файлами данных пакета Microsoft Office.
Наиболее известны два специальных типа троянских программ, часть вредоносных действий которых состоит в дальнейшем их распространении, а именно вирусы и черви. Вирусы предполагают целенаправленный запуск заражённой программы пользователем, в то время как черви, проникнув в систему, запускают собственный процесс размножения.
Широко распространённые в эпоху DOS бинарные вирусы просто добавляют свой код ко всем исполняемым модулям, которые так или иначе оказываются в сфере досягаемости запущенной копии вируса.
Промежуточное положение между вирусами и червями занимают загрузочные вирусы, которые размещаются в загрузочных секторах дисков. Эти вирусы регистрируют себя как драйверы дисков и остаются активными в системе, заражая все подключаемые к системе носители (дискеты, Zip-диски, CD-ROM). Загрузка системы с заражённой дискеты приводит к заражению новой системы. В современных ОС с многоэтапной загрузкой и сложными драйверами такие вирусы представляют меньшую опасность, чем в эпоху MS-DOS.
Черви способны размножаться без участия пользователей. Заражению червями подвержены многозадачные ОС с развитыми сетевыми сервисами. Заразив систему, червь запускает себя в качестве фонового процесса и начинает атаку других систем, используя известные уязвимости в их безопасности. Червь может заразить другие системы того же домена, используя общую базу учётных записей. Например, заразив одну систему в домене Windows NT от имени администратора, червь может автоматически установить себя на все остальные системы того же домена.
Вирусы и черви сами по себе доставляют много неприятностей, а их авторы часто не отличаются фантазией в выборе деструктивных действий, просто уничтожая все или важные данные в заражённых системах.
Важно подчеркнуть, что если ваша сеть подвержена вирусным атакам или если единственной защитой является антивирусный пакет, способный только находить известные вирусы, ваша система остаётся уязвимой и для троянских программ, специально разработанных для атаки на ваши данные. Следовательно, вашу систему безопасности следует признать абсолютно непригодной.