Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Безпека.docx
Скачиваний:
164
Добавлен:
31.08.2019
Размер:
6.2 Mб
Скачать

5.5.2. Переспрямування введення-виведення

Переспрямування введення-виведення даних покладено в основу більш досконалих механізмів, на кшталт конвеєрів. Типова конструкція переспрямуванняя введення-виведення має такий вигляд:

< file

Якщо в текстове поле ввести file, то програмі буде передано ім'я файлу, а як

що < file — його вміст. Права доступу до такого файлу визначаються не права ми користувача, який вводить цю конструкцію, а правами програми (або того користувача, від імені якого вона діє). Як і в ситуації з конвеєром, рекомендують проводити тестування поведінки програмних продуктів після введення таких конструкцій у будь-які поля введення.

5.5.3. Спеціальні символи

Широке поняття «спеціальні символи» у цьому підрозділі буде розглянуто відносно використання таких символів у специфікаціях або шаблонах імен файлів. Здебільшого проблеми, пов'язані з неправильним використанням спеціальних символів, створюють не програмісти, а користувачі. Утім наслідки таких помилок можуть бути досить серйозними.

З огляду на це ще раз нагадаємо всім відомі угоди щодо побудови шаблонів імен файлів, які діють у командних інтерпретаторах різних ОС. Спеціальний сим вол «?» означає будь-який один символ, а символ «*» — будь-який набір допустимих символів, тобто «m*» означає «всі файли, що починаються з літери т». Тоді користувач може припустити, що «.*» означає «всі файли, імена яких починають ся з символу крапки». У системі UNIX файли, імена яких починаються із символу крапки, вважаються прихованими, тобто команда ls їх не показує (щоб не заважали). За допомогою команди ls -а можна відобразити все, що міститься в каталозі. У прихованих каталогах (і файлах), як правило, розміщують командні файли, настроювання різних програм тощо. Якщо користувач спробує скопіювати всі ці файли до спеціально створеного каталогу, щоб потім без поспіху їх роздивитися,

і використає для цього команду

ср . * ~/tmp/interesting_files

то помітить, що вона виконується несподівано довго. Крім того, він побачить безліч повідомлень про помилки (на кшталт «немає доступу до файлу» ) і те, що обсяг щойно створеного каталогу tmp/interesting_files чомусь швидко зростає. Річ у тім, що користувач припускав, що за допомогою заданого ним шаблону «.*»

копіюються лише ті файли, імена яких починаються із символу крапки (.) і які розташовані в поточному каталозі. Насправді це зовсім не так. Символ крапки це посилання на поточний каталог. Тому, наприклад, шаблон «./*» означає «всі файли та підкаталоги поточного каталогу». Дві крапки поспіль — це посилання па батьківський каталог. Тобто «../*» означає «всі файли та підкаталоги батьківського каталогу, зокрема й поточний каталог з усіма його підкаталогами». Для того щоб перейти в ієрархії каталогів ще на один рівень вище, потрібно скористатися

шаблоном «../../*». Очевидно, що всі наведені тут шаблони відповідають задано­му шаблону «.*». Відтак окрім бажаних файлів, користувач скопіює до свого ката­логу майже всю локальну файлову систему, і добре, коли там немає змонтованих мережних ресурсів, оскільки їх також буде скопійовано.

Якщо користувач дасть команду

rm . *

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

Багато помилок оброблення рядків знаходили у серверах різних мережних протоколів. Наведемо приклади неправильного оброблення спеціальних симво­лів. Зауважимо, що веб-адреси в наведених далі прикладах — лише ілюстрації, які жодним чином не стосуються реальних ресурсів в Інтернеті.

Існувала відома помилка — після додавання символу крапки до URL сценарію замість результату його роботи відображався вихідний текст цього сценарію [15].

Використання замість символу крапки його шістнадцяткового подання (%2е) давало той самий результат.

Потім (в інших серверах) абсолютно аналогічну помилку було знайдено після додавання до URL шістнадцяткового подання символу пробілу (%20).

Використавши в URL додатковий символ скісної риски (/), можна обійти об­меження доступу до каталогу (http://www.target.eom//top_secret/index.html).

В деяких серверах використання посилання на батьківський каталог (..) дава­ло можливість вийти за межі частини файлової системи, відведеної для доступу з Інтернету (http://www.target.com/../).

Наведений перелік не є повним. І хоча всі зазначені помилки вже давно ви­правлено, не можна гарантувати, що помилки такого типу в подальшому ніколи не виникатимуть.