Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Аутентифікація

  Петлі дверні
Багатьом скриплять, багатьом співають:
"КТО ви такі
Вас тут не чекають!"
В. Висоцкий

Зрозуміло, що якщо права доступу виділяються на основі машинного ідентифікатора користувача, то виникає окрема проблема встановлення відповідності між цим машинним ідентифікатором і реальною людиною. Така відповідність не зобов'язана бути взаємно однозначним: одна людина може мати декілька ідентифікаторів або навпаки, декілька чоловік можуть користуватися одним ідентифікатором. Проте, спосіб встановлення такої відповідності необхідний.
По-англійськи процес входу в систему називається login (log in) і походить від слова log, яке позначає реєстраційний журнал або процес запису в такий журнал. У звичайній англійській мові такого слова немає, але в комп'ютерній лексиці слова login і logout прижилися дуже міцно.
Найбільш точним перекладом слова login є реєстрація. Відповідно, процес виходу називається logout. Його точна російськомовна калька — разрегистрация — на жаль, дуже немилозвучна.
Теоретично можна придумати багато різних способів ідентифікації, наприклад, з використанням механічних або електронних ключів або навіть тих або інших біологічних параметрів, наприклад, малюнка очного дна. Проте подібні способи вимагають спеціальної і частенько досить дорогої апаратури. Найбільш широкого поширення набув простіший метод, заснований на символьних паролях.
Пароль є послідовністю символів. Передбачається, що користувач запам'ятовує її і нікого не повідомляє. Цей метод хороший тим, що для його вживання не потрібно жодного додаткового устаткування — лише клавіатура, яка може використовуватися і для інших цілей. Але цей метод має і ряд недоліків.
Використання паролів засноване на наступних трьох припущеннях:

  • користувач може запам'ятати пароль;
  • ніхто не зможе здогадатися, який пароль був вибраний;
  • користувач нікому не повідомить свій пароль.

Останнє припущення видається розумним: якщо людина може добровільно комусь повідомити свій пароль, з приблизно тією ж вірогідністю ця людина може сама зробити капость. Втім, людину можна змусити "видати" пароль. Проте зашита від таких ситуацій вимагає заходів, які не можуть бути забезпечені на рівні операційної системи.
Якщо вдуматися, перші дві вимоги частково протіворечат один одному. Кількість паролів, що легко запам'ятовуються, обмежена і перебрати всі такі паролі виявляється не так вже складно. Цей вигляд атаки на систему безпеки відомий як словарна атака (dictionary attack) і при недбалому відношенні користувачів до вибору паролів і у ряді інших ситуацій, які обговорюватимуться далі, представляє велику небезпеку.

Словарна атака у виконанні черв'яка Моріса
Можливості словарної атаки вперше були продемонстровані в 1987 році молодим тоді студентом Робертом Морісом [Компьютерпресс 1991]. Розроблена ним програма — "черв'як Моріса" — використовувала словарну атаку і подальший вхід в систему з підібраним паролем як один з основних способів розмноження. Черв'як використовував для поширення і інші прийоми, що продемонстрували не лише специфічні вади тодішніх ОС сімейства Unix, але і декілька фундаментальних проблем комп'ютерної безпеки, тому ми ще кілька разів повертатимемося до обговорення цієї програми.

Черв'як Моріса використовував при підборі паролів наступні варіанти:

  • вхідне ім'я користувача;
  • вхідне ім'я з символами в зворотному порядку — "задом наперед";
  • компоненти повного імені користувача — ім'я (first name), прізвище (last name) і інші елементи, якщо вони є;
  • ті ж компоненти, але задом наперед;
  • слова із заздалегідь визначеної таблиці, що містить 400 елементів.

Велика частина успішно підібраних паролів була узята з таблиці. Після упіймання червя таблиця була опублікована з тим, щоб користувачі не повторювали старих помилок. Ця таблиця приводиться в [Компьютерпресс 1991]. На думку автора, включення її в дане видання недоцільно, оскільки вона розрахована на англомовних користувачів і не дуже актуальна в Росії.

З першого погляду видно, що такі варіантів, що "легко запам'ятовуються", досить багато — ніяк не менше декількох сотень. Набор їх уручну зайняв би дуже багато часу, але для комп'ютера декілька сотень варіантів — це долі секунди. Перший шар захисту від підбору пароля полягає саме в тому, щоб збільшити час підбору. Виявивши неправильний пароль, навчені гірким досвідом сучасні системи роблять паузу, перш ніж дозволять повторну спробу входу з того ж термінального пристрою. Така пауза може тривати всього одну секунду, але навіть це вистачає, щоб збільшити час підбору пароля від доль секунди до десятків хвилин.
Другий шар зашиті полягає в тому, щоб ускладнити пароль і тим самим збільшити кількість варіантів. Навіть дуже прості ускладнення сильно збільшують перебір. Так, проста вимога використовувати в паролі букви і верхнього, і нижнього регістрів збільшує перебір в 2n раз де n — довжина пароля. У більшості сучасних систем пароль зобов'язаний мати довжину не менше шести символів, тобто кількість варіантів збільшується в 64 рази. Вимога використовувати в паролі хоч би один символ, що не є буквою, збільшує число варіантів в 6x43 = 258 разів (у наборі ASCII 43 небуквених графічних символу). Замість десятків хвилин підбір пароля, який містить букви різних регістрів і хоч би один спецсимвол, займе багато днів.
Але якщо зломщикові дійсно потрібно попасти в систему, він може почекати і декілька днів, тому необхідний третій шар захисту — обмеження числа спроб. Всі сучасні системи дозволяють задати число невдало набраних паролів, після якого ім'я блокується. Це число завжди більше одиниці, бо користувач — це людина, а людям властиво помилятися, але в більшості випадків така межа задається не дуже великою — звичайні 5—7 спроб. Проте, цей метод має і оборотну сторону — його можна використовувати для блокування користувачів.
Цікавий варіант того ж методу полягає в збільшенні паузи між послідовними невдалими спробами хоч би в арифметичній прогресії.
Нарешті, останній шар захисту — це сповіщення користувача (а інколи і адміністратора системи) про невдалі спроби входу. Якщо користувач сам тільки що натискував не ту кнопку, він при вході побачить, що була одна невдала спроба, і не хвилюватиметься; проте, якщо є повідомлення про додаткові невдалі спроби, час потурбуватися і розібратися, що ж відбувається.
Сучасна техніка вибору паролів забезпечує досить високу для більшості практичних цілей безпека. У тих випадках, коли ця безпека представляється недостатньою — наприклад, якщо слід серйозно розглядати небезпеку примусу користувача до розкриття пароля — можна застосовувати альтернативні методи ідентифікації, перераховані раніше, тобто засновані на механічних або електронних ключах або біометричних параметрах. Втім, як вже говорилося, такі методи вимагають вживання спеціальної апаратури.
При використанні паролів виникає окрема проблема безпечного зберігання бази даних із значеннями паролів. Як правило, навіть адміністратор системи не може безпосередньо набути значення паролів користувачів. Можна привести декілька міркувань на користь такого обмеження.

  • Якби адміністратор системи знав призначені для користувача паролі, то зломщик, що зумів видати себе за адміністратора, так само діставав би доступ до цих паролів. Після цього зломщик міг би легко маскуватися під інших користувачів, що сильно ускладнило б виявлення злому.
  • Якщо адміністратор знає лише адміністративний пароль, для позбавлення його адміністративних привілеїв досить змінити цей пароль. Якщо ж колишній адміністратор мав доступ до всієї бази даних про паролі, він як і раніше матиме можливість доступу до системи, що може виявитися небажаним.

Для забезпечення секретності паролів зазвичай використовують однобічне шифрування, або хешуванняпри якому по зашифрованому значенню не можна відновити вихідне слово. При цьому програма аутентифікації кодує введений пароль і порівнює набутого значення (хеш) з тим, що зберігається в базі даних. Існує багато алгоритмів хешування, при використанні яких взнати реальне значення пароля можна лише шляхом повного перебору всіх можливих варіантів і порівняння зашифрованого рядка із значенням в базі даних.
У старих системах сімейства Unix пароль використовувався як ключ шифрування фіксованого рядка алгоритмом DES (див. главу 1). Цей алгоритм обмежує довжину ключа 64 бітами, відповідно паролі в таких системах можуть містити не більше 8 символів. Сучасні системи використовують алгоритм Md5 [RFC 1321], який допускає паролі практично необмеженої довжини. Цей алгоритм спеціально розроблявся з метою максимального ускладнення завдання побудови повідомлення із заданим значенням хеша.
Отцам-основателям Unix такий механізм забезпечення секретності здався настільки надійним, що вони навіть не почали обмежувати доступ звичайних користувачів до хешам чужих паролів, і виділили для їх зберігання поле в загальнодоступному для читання файлі /etc/passwd.
Проте "черв'як Моріса" продемонстрував, що для підбору паролів не потрібно перебирати всі можливі комбінації символів, оскільки користувачі схильні вибирати лише обмежену підмножину з них. Процес, що має можливість безпосередньо читати закодовані значення паролів, може здійснювати підбір, не звертаючись до системних механізмів аутентифікації, тобто робити це дуже швидко і практично непомітно для адміністратора.
Після усвідомлення небезпеки словарних атак розробники систем сімейства Unix перенесли значення паролів в недоступний для читання файл /etc/shadow, де паролі також зберігаються в однобічно зашифрованому вигляді. Це значно ускладнює реалізацію словарної атаки, оскільки перед тим, як почати атаку, зломщик повинен дістати доступ до системи з привілеями адміністратора. У наш час всі способи діставання не санкціонованого доступу до парольної бази даних вважаються "дірами" в системі безпеки.
Практично всі сучасні системи зберігають дані про паролі в однобічно зашифрованому вигляді у файлі, недоступному для читання звичайним користувачам. Постачальники деяких систем, наприклад Windows Nt/2000/xp, навіть відмовляються публікувати інформацію про формат цієї бази даних, хоча це само по собі навряд чи здатне перешкодити кваліфікованому зломщикові.

 

:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017