Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Захист інформації на мережному рівні
Стандартним підходом для реалізації захисту інформації на мережному рівні стека протоколів TCP/IP є архітектура IPSec. Це набір протоколів, призначених для забезпечення наскрізного захисту пакетів, які передають між двома хостами. Розглянемо мережну взаємодію у разі використання IPSec. 1. Хост Аліси генерує ІР-дейтаграми для передавання мережею Бобові. Ці дейта-грами порівнюють із фільтрами IPSec, при цьому перевіряють, чи потрібно забезпечувати їхній захист. Фільтри IPSec задають у рамках політики безпеки IPSec, визначеної для хосту Аліси. 2. Якщо дейтаграма відповідає умові фільтра, хост Аліси починає взаємодіяти з хостом Боба із використанням протоколу обміну ключами Інтернету (Internet Key Exchange, IKE). При цьому відбувається взаємна аутентифікація сторін (на підставі сертифікатів або пароля), узгодження протоколу захисту пакетів і обмін ключами для шифрування інформації відповідно до протоколу роботи гібридної криптосистеми. 3. Програмне забезпечення хоста Аліси перетворює пакети відповідно до погодженого протоколу захисту пакетів і відсилає їх хосту Боба. У рамках IPSec є два протоколи захисту пакетів: ♦ заголовка аутентифікації (Authentication Header, АН), при використанні якого пакети супроводжують одностороннім хешем для забезпечення цілісності, але не шифрують; ♦ інкапсулюючого захищеного навантаження (Encapsulating Security Payload, ESP), який забезпечує наскрізне шифрування пакетів. Перетворені пакети - це звичайні ІР-дейтаграми, їхнє пересилання мережею відбувається стандартним способом. Додаткові дані, необхідні для протоколів AH і ESP1 інкапсулюють усередині дейтаграм. 4. Програмне забезпечення комп'ютера Боба перевіряє пакети на цілісність і дешифрує їхній вміст (для протоколу ESP). Далі ІР-пакети передають звичайним способом на верхні рівні реалізації стека протоколів (транспортний і прикладний). Оскільки протоколи IPSec визначені на мережному рівні, то у разі переходу на IPSec не потрібно змінювати наявне програмне забезпечення - усі дані, передані за допомогою TCP або UDP, будуть автоматично захищені.
Захист інформації на транспортному рівні Протокол SSL/TLS Найвідомішим протоколом захисту інформації на транспортному рівні був протокол захищених сокетів (Secure Socket Layer, SSL). Остання його версія (SSL 3.0) із невеликими змінами була прийнята як стандартний протокол безпеки транспорт-ногорівня (Transport Layer Security, TLS 1.0); цей протокол називатимемо SSLfiLS.
Його розташовують між протоколом транспортного рівня (TCP) і протоколами прикладного рівня (наприклад, HTTP), а реалізацію зазвичай постачають у вигляді бібліотеки користувача, інтерфейс якої можна використати у застосуваннях замість інтерфейсу сокетів. Найвідомішою реалізацією бібліотеки підтримки цього протоколу є OpenSSL. Застосування може реалізовувати протокол прикладного рівня поверх інтерфейсу SSL^LS. Є кілька реалізацій стандартних протоколів прикладного рівня, які базуються на SSL/TLS, серед них реалізація протоколу HTTP (HTTPS), підтримувана більшістю сучасних веб-серверів і веб-браузерів. Розглянемо послідовність кроків у разі використання SSL/TLS на прикладі HTTPS. Цей протокол ґрунтується на протоколі роботи гібридної криптосистеми. 1. Клієнт (веб-браузер) зв'язується із сервером із використанням протоколу HTTPS (наприклад, запросивши веб-документ, URL якого починається із https://). При цьому встановлюється TCP-з'єднання із портом 443 (стандартний порт HTTPS). 2. Клієнт і сервер погоджують алгоритми шифрування, які використовуватимуться під час обміну даними. 3. Сервер відсилає клієнтові свій відкритий ключ у складі сертифіката. 4. Клієнт верифікує сертифікат сервера за допомогою відкритого ключа довіреної сторони (центру сертифікації), що видала цей сертифікат. Сучасні веб-браузери постачають із ключами деяких центрів сертифікації, можна також встановлювати додаткові ключі. Якщо сертифікат вірний, аутентифікацію сервера вважають успішною. 5. Клієнт генерує сесійний ключ, шифрує його відкритим ключем сервера, шифрує HTTP-запит сесійним ключем і відсилає всю цю інформацію серверу. 6. Сервер розшифровує сесійний ключ своїм закритим ключем, НТТР-запит -сесійним ключем, формує HTTP-відповідь, шифрує її сесійним ключем, доповнює одностороннім хешем і відсилає клієнтові. 7. Клієнт дешифрує HTTP-відповідь сесійним ключем і перевіряє цілісність (для чого обчислює її односторонній хеш і порівнює із хешем, отриманим від сервера). Якщо цілісність дотримана, документ відобразиться.
Протокол SSH Ще одним важливим протоколом безпеки транспортного рівня є протокол безпечного командного інтерпретатора (Secure Shell, SSH). Він багато в чому подібний до SSL^LS, але використовується інакше. Найчастіше він застосовується для реалізації захищеного віддаленого доступу до системи. Після встановлення з'єднання між SSH-клієнтом і SSH-сервером (коли завершена аутентифікація сторін і обмін ключами) SSH-сервер на віддаленому комп'ютері запускає копію командного інтерпретатора, яка використовує псевдотермі-нал. SSH-клієнт може взаємодіяти із цим інтерпретатором, емулюючи термінал. Взаємодія користувача із системою фактично відбувається аналогічно до протоколу telnet, але при цьому весь канал зв'язку шифрують. Сьогодні у багатьох UNIX-системах використання SSH є обов'язковим (протокол telnet блокують із міркувань безпеки).
Атаки і боротьба з ними У цьому розділі ознайомимося із деякими підходами, які можна використати для атаки на систему безпеки OC Через брак місця виклад буде обмежено атаками переповнення буфера і найпростішими прикладами відмови в обслуговуванні. Як технології запобігання атакам буде розглянуто організацію квот на ресурси і зміну кореневого каталогу застосування.
Переповнення буфера Розповсюдженим типом атак на програмний код у сучасних OC є атаки переповнення буфера (buffer overflow attacks) [44]. Усі вони використовують некоректний програмний код (переважно мовою C), що не перевіряє довжину буфера, у який записують зовнішні дані, отримані від користувача. Ось приклад такого коду:
#include <stdio.h> void f() { char buf[128]: gets (buf); // небезпечне одержання рядка даних зі стандартного вводу }
Функція gets(), що входить у стандартну бібліотеку мови C, вводить рядок символів довільної довжини зі стандартного вводу і розміщує їх у буфері buf. При цьому сама функція не перевіряє, скільки символів насправді було введено і чи достатньо для них місця в буфері. У ситуації, коли користувач ввів більше ніж 128 символів, програма запише дані у пам'ять, розташовану за buf. Для того щоб зрозуміти, у чому тут полягає небезпека, розглянемо організацію пам'яті, у якій виконують застосування (рис. 18.3). Як бачимо, адреса повернення функції і локальні змінні (зокрема і буфер buf) розміщені у програмному стеку. Коли зловмисник введе значно більше символів, ніж може бути розміщено у buf, вони переповнять буфер і будуть записані поверх адреси повернення функції. У результаті після повернення із функції відбудеться перехід за адресою, взятою із введеного зловмисником рядка. При цьому вміст рядка може бути ретельно підібраний так, щоб цей його фрагмент містив адресу коду, який бажає виконати зловмисник. Згаданий код може перебувати в іншій частині цього самого рядка і, наприклад, запускати командний інтерпретатор. Якщо застосування виконувалося із правами суперкористувача, запущений інтерпретатор дасть зловмисникові повний контроль над системою. Для захисту від таких атак насамперед необхідно підвищувати якість розробки програмного забезпечення. Необхідно повністю відмовитися від використання функцій, які не перевіряють обсягу введених даних, замінивши їх варіантами, що роблять таку перевірку. Наприклад, замість функції gets() потрібно використати fgets():
char buf[128]; fgets(buf. sizeof(buf). stdin); // введення не більше 128 символів
Крім gets(), подібні проблеми виникають у разі використання таких функцій, як strcpy(), strcat() і sprintfC). Замість них потрібно використовувати відповідно strncpy(), strncat() і snprintf(). Захист від переповнення буфера на рівні OC може полягати в цілковитій забороні виконання коду, що перебуває у програмному стеку. Для Linux є виправлення до коду ядра, що реалізують це обмеження.
Відмова від обслуговування Найпростіший приклад атаки відмови в обслуговуванні для UNIX-систем - так звана fork-бомба»:
void main() { for (;:) forkO: }
Очевидно, що процес, завантажений у пам'ять внаслідок запуску такої «бомби», почне негайно створювати свої власні копії, те саме продовжать робити ці копії і т. д. У старих версіях UNIX це могло швидко привести систему до неробото-здатного стану, і навіть сьогодні запуск такого застосування у системі із малим обсягом ресурсів здатний значно понизити її продуктивність. Для боротьби із такими атаками необхідно встановлювати ліміти на ресурси. Зокрема, потрібно, щоб у системі було встановлено ліміт на максимальну кількість процесів, які можуть бути запущені під обліковим записом користувача. За замовчуванням ця кількість дорівнює 256, змінити її можна за допомогою системного виклику setrlimit():
#include <sys/resource.h> #include <unistd.h> struct rlimit plimit; plimit.rlim_max = 100; setrlі mi t (RLIMIT_N PROC. &plі mi t);
Для ліквідації наслідків такої атаки не можна намагатися негайно завершити всі процеси-бомби, виконавши, наприклад, команду вилучення всіх процесів із заданим ім'ям:
# killall -KILL bomb
Річ у тому, що після запуску «бомби» у системі швидко створюється стільки процесів, що ліміт на їхню кількість виявиться вичерпаним. Після цього всі процеси-бомби перестають створювати нащадків і залишаються у нескінченному циклі. Як тільки після виконання ki 1 la11 завершиться один із таких процесів (а вони всі не можуть завершитись одночасно), загальна кількість процесів стане менша за ліміт. У результаті якийсь інший процес набору відразу отримує можливість виконати fork() і встигає це зробити до свого завершення. Фактично після знищення поточного набору процесів його місце негайно займає новий. Правильним підходом буде спочатку призупинити всі процеси-бомби, а потім послати їм сигнал завершення:
# killall -STOP bomb # killall -KILL bomb
Системний виклик setrlimitO може також бути використаний для встановлення інших квот на ресурси, зокрема обмежень на кількість відкритих файлів (першим параметром потрібно задати RLIMIT_NOFILE), на частку процесорного часу, яку використовує процес (RLIMIT_CPU), на розмір процесу у пам'яті (RLIMIT_AS). Другим важливим засобом обмеження споживання ресурсів є квоти дискового простору.
Квоти дискового простору Дискову квоту — встановлюване адміністратором обмеження на використання різних ресурсів файлової системи — задають для кожного користувача. Зазвичай до таких ресурсів належать кількість виділених кластерів або кількість створюваних файлів. Операційна система гарантує, що користувачі не зможуть перевищити виділені їм квоти. Квоти звичайно реалізовують так. Ha диску організовують спеціальний файл (файл квот), що містить таблицю квот, куди заносять інформацію про квоти різних користувачів і те, які поточні обсяги ресурсів ними витрачені. Якщо користувач відкрив хоча б один файл, відповідний цьому користувачу елемент таблиці квот зчитують у пам'ять. Файловий дескриптор, відкритий процесом, містить покажчик на елемент таблиці квот, що відповідає користувачу, який створив процес. У разі зміни розміру якогось із відкритих файлів інформацію про нову сумарну витрату ресурсу зберігають в елементі таблиці у пам'яті. Після того як користувач закриє всі свої файли, елемент таблиці квот зберігають на диску у файлі квот. B елементі таблиці квот міститься така інформація: гнучкий і жорсткий ліміт на ресурс; поточний стан витрати ресурсу; максимально допустима і поточна кількість попереджень про перевищення гнучкого ліміту. Спроба перевищити жорсткий ліміт завжди спричиняє помилку. Гнучкий ліміт може бути перевищений користувачем, але він при цьому отримує попередження (для кожного користувача визначено скінчений запас таких попереджень). Якщо користувач витратить усі попередження про перевищення гнучкого ліміту, його більше не допускають у систему без дозволу адміністратора. Дискові квоти підтримують у Linux і в лінії Windows XP (для файлової системи NTFS).
|
||||||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 188; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.102.112 (0.031 с.) |