Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Процедуры подбора пароля Процедуры подбора пароля являются «мозгом» вируса. Cracksome – процедура, применяющая различные стратегии для проникновения в систему путем подбора паролей пользователей. Автором допускалось добавление новых стратегий при дальнейшем развитии вируса. Вирус последовательно пробует каждую стратегию.

Фаза 0

Это предварительный этап, на котором определяется список возможных мишеней атаки (имена и сетевые адреса компьютеров, имена и пароли пользователей).

На этом этапе читается файл /etc/hosts.equiv в поисках имен машин, которые могли быть заражены. Этот файл содержит информацию о том, какие машины «доверяют» данной. Логично предположить, что пользователи этой машины могут быть пользователями машин из этого списка.

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

для атаки. Часто системные администраторы запрещают доступ к этому файлу, из-за чего вирус не может его прочитать, хотя. rhosts очень часто является частью /etc/hosts.equiv.

В конце фазы 0 вирус читает файл паролей /etc/passwd. Информация из этого файла используется для нахождения персональных. forward-файлов, и те просматриваются с целью поиска имен машин, которые можно атаковать. Кроме того, из него извлекаются входные имена пользователей, их зашифрованные пароли и полные имена. После того как вирус просканирует весь файл, он перейдет к перебору стратегий.

Стратегия 1 Это самая простая стратегия, способная определить только примитивные пароли. Пусть файл etc/passwd содержит строчку

user:<хэш пароля>:100:5:John Smith:/usr/user:/bin/sh

Тогда в качестве пароля предлагаются следующие варианты:

• пароль вообще отсутствует;

• в качестве пароля берется входное имя пользователя (user);

• то же, но прочитанное справа налево (resu);

• пароль представляет собой двойной повтор имени пользователя (useruser);

• имя или фамилия пользователя (John, Smith);

• то же, но в нижнем регистре (john, smith).

Все эти атаки применялись к 50 паролям, накопленным во время фазы 0. Так как вирус пытался угадать пароли всех пользователей, он переходил к стратегии 2.

Стратегия 2

Стратегия 2 использует внутренний список из 432 возможных паролей, являющихся, с точки зрения автора вируса, наиболее подходящими кандидатами на эту роль. Список перемешивается в начале проверки для того, чтобы пароли подбирались в случайном порядке. Здесь же проверяется значение переменной pleasequit, но так, чтобы перед выходом вирус «просмотрел» не менее 10 вариантов.

Когда список слов исчерпан, вирус переходит к стратегии 3.

Стратегия 3 Эта стратегия использует для подбора пароля файл /usr/dict/words, содержащий около 24 000 слов и используемый в системе 4.3BSD (и других) как орфографический словарь. Если слово начинается с прописной буквы, то проверяется и вариант со строчной буквой.

Процедуры поиска удаленных машин

Это набор процедур с начинающимися на «h» именами, выполняющих задачу поиска имен и адресов удаленных машин.

Процедура hg вызывает процедуру rt_init, которая сканирует таблицу маршрутов и записывает все адреса доступных шлюзов (gateways) в специальный список. Затем процедура hg пытается применить процедуры атаки через rsh, finger и sendmail.

Процедура ha связывается с каждым шлюзом из списка, полученного процедурой hg, через TCP-порт номер 23, чтобы обнаружить те машины, которые поддерживают telnet. Список перемешивается случайным образом, после чего для каждой машины из этого списка вызывается процедура hn (то есть вирус пытается заразить все машины в подсетях этого шлюза).

Процедура hl извлекает номер сети – первый компонент сетевого адреса из всех адресов текущей машины, и для каждого полученного адреса вызывает процедуру hn с этим адресом в качестве аргумента (иначе говоря, атакуются все локально подключенные подсети).

Процедура hi пытается атаковать каждую машину из списка, находящегося в файле /etc/hosts.equiv, через rsh, finger и sendmail.

Процедура hn получает номер сети в качестве аргумента. Если этот номер совпадает с номером сети одной из машин, подключенных к данной, процедура завершается. Для остальных адресов она пытается угадать адреса шлюзов путем перебора всех возможных адресов (<номер сети>.[1–8].0.[1-255]). Этот список перемешивается случайным образом, после чего процедура пытается атаковать до 12 машин из списка, используя rsh, finger и SMTP. Если машина не поддерживает связь через TCP-порт 514 (rsh), то hn не пытается атаковать ее. После первой успешной атаки процедура завершается.

Порядок работы Все эти процедуры вызываются в главном цикле. Если первая процедура завершилась успешно, то остальные не вызываются. Каждая процедура возвращается после того, как она сумела атаковать одну машину. Затем вызывается hi, которая пытается заразить удаленные машины, найденные cracksome. Если hi терпит неудачу, то вызывается ha, которая старается проникнуть в удаленную машину по случайно угаданному адресу связи. Это демонстрирует, что вирус предпочитал поражать сначала шлюзовые машины, а затем распространяться на присоединенные к ним сети, вместо того чтобы заражать машины, минуя шлюзы. Если hg, hi и ha терпят неудачу, то вызывается hl, которая похожа на ha, но подбирает адрес с помощью сетевого адреса текущей машины. Анализ кода этих процедур также свидетельствует о наличии ошибок.

Процедура l1.c – «абордажный крюк»

Все процедуры атаки использовали эту короткую процедуру для пересылки основной части вируса.

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

также завершается). Процесс-родитель завершается, не оставляя никаких связей с порожденным процессом.

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

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

По окончании цикла пересылки файлов запускается Bourne Shell (sh), замещающий программу 11 и получающий команды с зараженной машины.

Может быть, после такого детального рассмотрения алгоритмы, применяемые червем Морриса, кажутся неуклюжими и запутанными, вероятно, что-то можно было сделать проще и эффективнее. Тем не менее они реализовывали все процедуры, необходимые настоящему сетевому вирусу, чего за 10 лет никому повторить не удалось – ни в рамках UNIX-архитектуры, ни в какой другой. Сегодня «троянские» программы, попадающие к незадачливому пользователю с электронной почтой и т. п., который сам их запускает и инициирует таким образом дальнейшее размножение, иногда называют «новыми сетевыми червями» (особенно в ОС семейства Windows). Но «троянцы» не могут размножаться без участия человека и не являются сетевыми червями по определению.

После червя

Подбор пароля

Вирус Морриса заставил по-новому взглянуть на вопросы компьютерной безопасности. Были предприняты шаги не только по закрытию тех брешей, которые он использовал, но и по поиску и классификации причин их появления в UNIX-системах. Также была выявлена необходимость создания некоторого координационного органа, в котором бы накапливалась и систематизировалась информация о различных компьютерных инцидентах, применяемых методах атак и способах защиты от них. Вскоре такой центр CERT (Computer Emergency Response Team) был создан, и первым появившимся в декабре 1988 года бюллетенем стало сообщение об уязвимостях, использованных червем.

Однако и компьютерные взломщики совершенствовали свои методы. Одной из наиболее популярных стала атака с подбором пароля другого пользователя. Ей активно пользовался и вирус Морриса, но, либо развив его идеи, либо создаваясь независимо, вскоре появилось множество программ, занимавшихся подбором пароля к UNIX-машине. И долгое время слова «взломать UNIX» означали запустить взломщик (cracker) паролей.

Как известно, в файле /etc/passwd лежит ключевая информация обо всех пользователях системы, включая входное имя, пароль, полное имя и т. п. Даже в 70-х годах, когда создавались первые версии UNIX, разработчикам было понятно, что пароль пользователя нельзя хранить в открытом виде. Они придумали схему, благодаря которой целенаправленные атаки на то, к чему всегда стремится не очень добропорядочный пользователь – завладеть паролем другого, смогли реализоваться лишь спустя 15 лет. Создатели не шифровали пароль по какому-то секретному алгоритму, так как рано или поздно он стал бы известен очередному не в меру любопытному, но в меру грамотному программисту, который смог бы расшифровать все пароли. Они выбрали путь необратимого преобразования пароля, когда из исходного пароля путем применения к нему специальной однонаправленной функции, называемой хэшированием, получалось значение, из которого никак нельзя получить исходный пароль. Более того, разработчики взяли математически криптостойкий алгоритм DES и на основе его создали функцию crypt, преобразующую пароль в строку, расположенную в файле /etc/passwd. Эту функцию написал, кстати, Роберт Моррис-старший.

Итак, рассмотрим немного подробнее алгоритм, применяемый UNIX для преобразования пароля пользователя. Кстати, этот алгоритм до сих пор используется в большинстве *IX.

Из исходного пароля берутся первые восемь байт. Также выбирается 12-битная случайная привязка (salt), используемая при операции хэширования. Она нужна для того, чтобы одинаковые пароли (возможно, у разных людей) не выглядели одинаково после хэширования. Затем к этим двум параметрам применяется специальная функция шифрования, состоящая из 25 повторений чуть измененного алгоритма DES (чтобы исключить использование аппаратных плат, реализующих классический DES; однако такие изменения могли стоить разработчикам ослабления криптостойкости их функции, но, к счастью, этого не случилось), которая дает на выходе 64-битное значение.

Наконец, сама привязка преобразуется в два читабельных ASCII-символа, а хэш – в 11 символов. Итак, функция char* crypt (char* passwd, char* salt) выдает 13-символьную строчку, которая и записывается в файл /etc/ passwd.

При входе пользователя в систему вызывается та же функция crypt с введенным паролем и привязкой, полученной из /etc/passwd. Если результат оказывается равным значению, хранящемуся в файле, то аутентификация считается состоявшейся.

После анализа этой схемы первое, что приходит в голову потенциальному взломщику (если он верит в невозможность обратного преобразования хэша в пароль), – перебор. Берется некоторый набор символов (например, прописные и строчные буквы, цифры и специальные символы типа знаков препинания – всего получается 94 символа), а затем из них по очереди составляются все комбинации вплоть до 8-символьной длины. К каждой из них применяется crypt, и результат сравнивается с имеющимся. Естественно, что в эти комбинации рано или поздно попадет любой пароль пользователя.

Поделиться:
Популярные книги

Наследница долины Рейн

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наследница долины Рейн

Отморозок 2

Поповский Андрей Владимирович
2. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 2

Релокант. Вестник

Ascold Flow
2. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. Вестник

Найденыш

Шмаков Алексей Семенович
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Найденыш

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Хозяйка поместья, или отвергнутая жена дракона

Рэйн Мона
2. Дом для дракона
Фантастика:
фэнтези
5.00
рейтинг книги
Хозяйка поместья, или отвергнутая жена дракона

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Оживший камень

Кас Маркус
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Оживший камень

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Трудовые будни барышни-попаданки 2

Дэвлин Джейд
2. Барышня-попаданка
Фантастика:
попаданцы
ироническое фэнтези
5.00
рейтинг книги
Трудовые будни барышни-попаданки 2

Мастер 9

Чащин Валерий
9. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 9

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Метка драконов. Княжеский отбор

Максименко Анастасия
Фантастика:
фэнтези
5.50
рейтинг книги
Метка драконов. Княжеский отбор