Электронная библиотека
Библиотека .орг.уа
Поиск по сайту
Наука. Техника. Медицина
   Документальная
      Моисеенков И.. Суета вокруг Роберта или Моррис-сын и все, все, все... -
Страницы: - 1  - 2  - 3  - 4  - 5  - 6  - 7  - 8  -
у вирус распространялся в среде сети с использованием соответствующих сетевых средств и полностью обеспечивал свою работу сам, то бесспорным является утверждение, что вирус Морриса является полноправным представителем крайне редко встречающегося вирусного семейства сетевых червей. ______________________________ [D1] Мне кажется более правильным называть этот вирус по имени его автора, хотя, как я уже говорил, вирус имеет массу других названий. Однако в нашей стране, имеющей весьма отдаленное представление об Arpanet, Milnet, Internet, Корнеллском университете и т.д. прижилось и получило определенное распространение именно это название - "вирус Морриса". В дальнейшем будем так называть его и мы. стр. 21 Компьютерные эксперты, дезассемблировавшие вирус, единодушно отметили, что программа была написана с выдающимся мастерством и расчетом на три недостатка в системе безопасности поражаемых операционных систем. Вирусная программа включала компоненты, позволявшие раскрывать пароли, существующие в инфицируемой системе, что в свою очередь позволяло программе маскироваться под задачу легальных пользователей системы, на самом деле занимаясь размножением и рассылкой собственных копий. Вирус не остался скрытым и полностью безопасным, как задумывал автор, в силу незначительных ошибок, допущенных при разработке, которые привели к стремительному неуправляемому саморазмножению вируса. Теперь давайте рассмотрим вирус несколько подробнее, насколько, конечно, позволяет имеющаяся у нас информация о нем. Прежде всего интересен вопрос, каким образом распространялся вирус? Суббота, 5 ноября 1988 года. 18:31 RISKS Предупреждение против ссылок на "ошибки в операционной системе UNIX". Указывается, что "вирус не использует каких-либо ошибок в UNIX", ошибки содержит "программа пересылки Sendmail". Первой лазейкой была утилита электронной почты Sendmail, входившая в состав инфицируемых систем. Недостаток утилиты Sendmail, позволивший Моррису обходить подсистему безопасности вычислительной системы атакуемого узла сети, имеет, если можно так выразиться, классический характер и относится к такому довольно часто встречающемуся явлению в программировании как "люки". По большому счету люк - это не описанная в документации на программный продукт возможность работы с этим программным продуктом. Люки чаще всего являются результатом забывчивости разработчиков: в процессе разработки программы разработчики часто создают временные механизмы, облегчающие ведение отладки за счет прямого доступа к отлаживаемым частям продукта. Например, для начала работы с продуктом требуется выполнить некоторую последовательность действий, предусмотренных алгоритмом - ввести пароль, установить значения некоторых переменных и т.п. При нормальной работе продукта эти действия имеют определенный смысл, но во время отладки, когда разработчику необходимо тестировать некоторые внутренние части программы и волей-неволей приходится выполнять ту же операцию входа добрый десяток - а то и более - раз на дню, безобидные в общем-то правила, затрудняющие тем не менее доступ к отлаживаемым частям, начинают не на шутку раздражать. Что делает программист? Правильно: в течение получаса он программирует некоторый дополнительный механизм, не предусмотренный изначальным алгоритмом программы, но позволяющий не выполнять надоевших действий или выполнять их автоматически - например, при нажатии определенной клавиши (группы клавиш) или при вводе определенной последовательности символов. Все - люк готов! [D2] Такая избирательность вируса послужила причиной того, что ряд экспертов высказали мысль, что инцидент, связанный с вирусом Морриса, вполне мог быть тщательно подготовленной акцией корпорации IBM по подрыву позиций своих конкурентов. стр. 22 Если сравнивать с промышленным производством, то люк - это технологическое отверстие, не имеющее никакого отношения к основному предназначению изготовляемого изделия, но значительно облегчающее процесс производства. По окончании отладки большинство люков убирается из программы; но люди есть люди - зачастую они забывают о существовании каких-то мелких "лючков". Автор программы Sendmail, Эрик Олмен (Eric Allman) тоже создал в своей программе "черный ход". [D5] Вообще программа Sendmail была весьма сложной и могла работать в нескольких режимах, что позволяло решать весьма сложные задачи распределенной обработки данных. Один из режимов предполагал работу утилиты в виде демона - фонового процесса: при этом программа постоянно опрашивала порт TCP на предмет обнаружения попыток передачи сообщений с использованием подпротокола SMTP. При обнаружении такой попытки демон устанавливал связь с удаленным абонентом и принимал адрес отправителя, адрес получателя, инструкции по обработке сообщения и собственно сообщение. Так вот, червь в качестве инструкций обработки посылал команду DEBUG, а вместо адреса получателя передавал набор команд. При нормальной работе такого делать нельзя, однако такая возможность в режиме отладки существовала, поскольку при этом можно было удостовериться в срабатывании почты, не указывая дальнейшую программу обработки, что, как вы понимаете, значительно облегчило Олмену отладку Sendmail. Однако эта возможность продолжала весьма активно использоваться и другими пользователями, поскольку этот метод позволял избежать сложной процедуры конфигурации утилиты Sendmail для выполнения частных задач. Теперь будет понятен первый механизм распространения вируса Морриса: обосновавшись на инфицированном узле, вирус рассылал с помощью Sendmail по обнаруженным в пораженной системе адресам соседних узлов "невинное" сообщение, состоящее из 99 строк текста на языке C. Переданное сообщение - текст программы - компилировалось на узле-получателе и полученный модуль начинал работать, избежав выполнения требуемой процедуры входа в систему. Работа этого модуля заключалась в установлении контакта с сервером червя (т.е. атакующей программой-червем, работающей на уже инфицированном узле) и копировании с атакующего узла трех файлов: двух файлов объектного кода (отдельно для VAX и для Sun) и файла с упоминавшимся 99-строчным исходным текстом. Уже упоминавшийся пользователь из университета Делавэр описал это следующим образом: "Червь проник через Sendmail. Предполагая получение обычного сообщения, Дэви открыл порт электронной почты и позволил разместиться в нем сообщению, являвшемуся на самом деле первым сегментом червя. Этот сегмент затребовал у Дэви запуска программы (так называемой оболочки) в отладочном режиме, как если бы законный пользователь отлаживал обычную программу." При этом, во-первых, копирование выполнялось только в случае передачи серверу случайного числа, которое было ранее послано этим же ______________________________ [D5] Впоследствии он сказал, что создал этот "черный ход" с целью облегчения работы в системе, доступ к которой закрывал ему чрезмерно усердный администратор. стр. 23 сервером в ходе попытки заражения. Если сервер не получал такого числа, он отсоединялся от модуля захвата, а сам модуль захвата самоуничтожался. Это должно было предотвратить "поимку" кем-либо файлов червя. Во-вторых, если копирование в результате чего-либо было неудачным, то сервер также отсоединялся, а модуль захвата уничтожал все уже переданные файлы и самого себя. И, наконец, в-третьих, модуль захвата в случае удачного копирования поочередно пытался запустить полученные файлы. Если ни один из файлов запустить не удавалось, сервер отсоединялся, а все файлы и сам модуль захвата уничтожались; если же какой-либо файл начинал работать (т.е. попытка заражения увенчалась успехом!), уже эта копия червя разрывала связь с сервером и уничтожала все следы атаки (т.е. все созданные файлы) на диске. Немалые подозрения вызвал тот факт, что в теле программы были обнаружены структуры данных, обеспечивающие передачу 20 файлов, тогда как на самом деле передавались лишь три. Это послужило источником утверждений, что Моррис задумывал распространять таким образом некоторые опасные для систем подпрограммы. Однако доказать эти намерения не удалось, впрочем, как не удалось выяснить и истинное предназначение обнаруженных структур. Другим - вторым! - недостатком, использованным вирусом Морриса для собственного распространения, была непродуманность работы другой утилиты, также входящей в состав атакуемых систем - Finger. Программа Finger также работала в режиме фонового процесса - демона - и предоставляла пользователям возможность опрашивать удаленный узел о текущем состоянии системы или активности конкретного пользователя. В случае обнаружения попытки установить связь со стороны удаленного демона, демон Finger данного узла устанавливал связь, считывал одну строку запроса и посылал в ответ информацию, определяемую полученным запросом. Вся беда заключалась в том, что для считывания строки ввода в свой внутренний буфер программа Finger использовала программу gets языка C, а эта программа - как, впрочем, и целый ряд других программ ввода/вывода в C - в процессе размещения информации не проверяла границы буфера ввода, что делало возможным переполнение буфера и, соответственно, затирание данных, размещенных следом за буфером. Червь передавал демону Finger точно расчитанную строку ввода длиной 536 байтов, которая переполняла буфер ввода и затирала верхний кадр системного стэка таким образом, что в этом кадре оказывались команды, осуществлявшие установление связи с атакующим сервером червя через порт TCP. После установления связи происходила передача на атакуемый узел и запуск программы захвата и происходил процесс, описанный несколько выше. В данном случае интересно то, что этот метод срабатывал только для систем, работающих на машинах VAX, хотя, как утверждают специалисты, разработать необходимую строку ввода для машин Sun было делом одного часа. Работающий вирус открывал связь TCP и в директории /tmp создавал файл с именем $$,11.c, где $$ заменялось идентификатором текущего процесса, куда копировался код для расширения программы listener либо helper. По завершению работы Finger вирусная программа, содержащаяся в переданных данных (все тот же первый сегмент червя), поступала на выполнение. стр. 24 Более понятно об этой лазейке расскажет очевидец событий: "Второй червь UNIX, принадлежащий тому же автору, также поступил через электронную почту, но использовал другую схему атаки. В большинстве систем электронной почты UNIX есть утилита Finger, которая позволяет получить информацию о пользователях другого узла. Червь с помощью утилиты Finger запрашивал информацию о пользователях, работавших в UNIX. При выполнении запроса Finger размещала в памяти опрашиваемого узла свои данные. Но червь изменял эту память таким образом, что вызов адресовался на его точку входа, в результате чего он начинал работу." Теперь вам понятно, почему пользователям показалось, что работают два червя? Все дело в том, что вирус Морриса использовал для распространения своих копий два независимых друг от друга пути - через Sendmail и через Finger. Итак, червь благополучно попал в систему и приступил к работе. Что же он делает? Слово - нашему знакомому делавэрцу. "По логике первого сегмента, выполнявшегося как обычная программа, через тот же самый порт электронной почты в систему Дэви поступила вторая часть червя. Эта часть состояла из серии сообщений, содержащих объектный код, добавлявшийся к работающей оболочке червя. Первой группой команд производилось обращение к списку адресов других машин, с которыми был связан Дэви, с последующей посылкой по этим адресам через сеть копий первого сегмента червя... ...При нормальной работе каждый узел сети имеет список адресов других компьютеров (обычно около десятка), с которыми данный узел непосредственно связан линиями связи. С помощью таких списков адресов червь стал распространяться по сети от одного узла к другому; заражение при этом росло по экспоненте." Логично? Вполне: заразился сам - помоги товарищу. И еще - вирус стремился размножиться и разослать свои копии по обнаруженным адресам сопредельных узлов раньше, чем его успеют обнаружить и остановить. Это логика доброй половины всех известных вирусов [D2]. Обнаружение адресов доступных узлов производилось вирусом за счет выполнения программ Ioctl и Netstat с различными аргументами, а также за счет считывания и анализа ряда специальных системных и пользовательских файлов, используемых для обеспечения работы в сети. Выделяемая таким образом информация заносилась в создаваемый червем внутренний список доступных узлов. По окончании формирования списка ______________________________ [D2] Вторая половина придерживается другой тактики - затаиться, выждать некоторое время, а уже затем начать размножаться и пакостить. Но для всех вирусов характерна крайняя озабоченность судьбой своих копий: существуют вирусы, которые не начинают пакостить всерьез до тех пор, пока не создадут заранее определенное количество копий, что гарантирует пользователям гораздо более интересную жизнь. стр. 25 червь начинал процесс рассылки копий по выявленным адресам. При этом описанные выше способы начинали отрабатываться только в том случае, когда червь устанавливал достижимость конкретного узла в данный момент за счет попыток установления связи с данным узлом через порт telnet. После рассылки копий по обнаруженным адресам червь считывал системные файлы /etc/hosts.equiv и /.rhosts с целью обнаружения так называемых "эквивалентных" или "доверенных" узлов, а также пользовательские файлы .forward, используемые для автоматической рассылки сообщений "электронной почты". Термин "доверенных" узлов связан с механизмом "доверенного доступа". Смысл его в том, что для облегчения выполнения операций на удаленном узле пользователь имеет возможность создать файл с определенным именем, куда он может занести пары <имяузла/имявхода>. При работе с удаленным узлом система проверяет наличие у пользователя такого файла и, если работа ведется с узлом, указанным в одной из пар, с использованием указанного в той же паре имени входа, система автоматически разрешает доступ без запроса пароля. Именно в отсутствии запроса пароля и заключается "доверие". Считав указанные файлы, червь предпринимал попытку атаки "в лоб", т.е пытался, используя механизм доверенного доступа, создать путем вызова программы Rsh на удаленном узле работающую оболочку, маскируясь под пользователя. Если попытка лобовой атаки не удавалась, червь считывал в память системный учетный файл /etc/passwd и предпринимал ряд не лишенных остроумия попыток раскрыть пользовательские пароли. Надо сказать, что в системе UNIX пользовательские пароли хранятся в шифрованном виде, но в общедоступном для чтения файле, где хранится и другая нешифрованная информация. Крупным недостатком - помимо общедоступности учетного файла - было также то, что используемый для шифрования паролей DES-алгоритм [D4] был значительно ослаблен за счет использования при шифровании в качестве ключа последовательности нулевых битов. Кроме этого, Моррис умело сыграл на человеческой слабости многих пользователей, которые, не придавая серьезного значения вопросам безопасности своих данных, использовали в качестве паролей общеупотребляемые смысловые слова, что при серьезном подходе к делу просто недопустимо. Для начала червь пытался опробовать в качестве паролей учетные имена пользователей. Делалось это путем шифрования учетных имен ______________________________ [D4] DES - Data Encryption Standart - стандарт шифрования данных, определяющий алгоритм, который реализуется в виде электронных устройств и используется для криптографической защиты данных в ЭВМ. Описанный в стандарте алгоритм определяет операции преобразования данных в непонятную непосредственно форму - шифрование, и наоборот - расшифрование. Обе операции опираются на некоторое двоичное число, называемое ключом. Ключ состоит из 64 двоичных цифр, из которых 56 битов используются самим алгоритмом, а оставшиеся 8 битов служат для обнаружения ошибок. Сам алгоритм известен всем его пользователям. Уникальность алгоритму придает использование в каждом приложении уникального ключа. Тот, кто не знает ключа, зная сам алгоритм, не сможет получить скрытые таким образом данные. стр. 26 пользователей, найденных в учетном файле, и сравнения полученного шаблона с шифрованным паролем данного пользователя - в случае совпадения червь производил попытку запуска оболочки на всех удаленных узлах, где данный пользователь мог работать (что устанавливалось за счет просмотра внутреннего списка доступных узлов и анализа упомянутых выше файлов). Если пользователь был чуть более искушен, и пароль не совпадал с учетным именем в чистом виде, то производилась аналогичная попытка с использованием учетного имени, преобразованного самым тривиальным образом: например, опробовалось учетное имя, написанное в обратном порядке. Если и это не давало результата, в качестве шаблонов опробовались зашифрованные 432 общеизвестных слова (типа "cretin", "batman" и т.д.), составлявшие внутренний словарь червя. Этот вариант дал, кстати, наибольший процент раскрытия паролей. После всех этих шагов в качестве паролей опробовались слова из имевшегося в системе словаря. Как видите, ничего особенного в примененном методе вскрытия паролей нет, как нет и оправдания халатности пользователей, послужившей причиной того, что червю в отдельных системах удавалось вскрыть пароли более половины пользователей. А ведь каждый новый пароль червь использовал для атаки новых жертв! "Следующая группа команд содержала список общеиспользуемых в качестве паролей слов, зашифрованных по DES-алгоритму [D4], которые сравнивались в таком виде с системным файлом паролей Дэви, также зашифрованным по DES-алгоритму. Каждый зашифрованный пароль-шаблон сравнивался с паролями всех законных пользователей Деви, и каждое полное совпадение запоминалось вирусом. В Деви червь таким образом смог получить около 20 из 300 паролей, причем один из раскрытых паролей обе

Страницы: 1  - 2  - 3  - 4  - 5  - 6  - 7  - 8  -


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