» » 4 варіанти атак якщо PHP встановлений як CGI

4 варіанти атак якщо PHP встановлений як CGI

4 варіанти атак якщо PHP встановлений як CGI
Можливі атаки
Застосування PHP як бінарного CGI-програми - це одним з варіантів, коли з деяких причин небажано інтегрувати PHP в веб-сервер (наприклад Apache) в якості модуля, або потрібно використовувати такі утиліти, як chroot і setuid для організації безпечного оточення під час роботи скриптів . Така установка зазвичай супроводжується копіюванням виконуваного файлу PHP в директорію cgi-bin веб-сервера. CERT (організація, що стежить за погрозами безпеки) рекомендує не поміщати будь інтерпретатори в каталог cgi-bin. Навіть якщо PHP реалізується як самостійний інтерпретатор, він спроектований так, щоб запобігти можливості наступних атак:
Доступ до системних файлів: http://web.if.ua/cgi-bin/php?/etc/passwd

Дані, введені в рядку запиту (URL) після знаку питання, передаються інтерпретатору як змінні командного рядка згідно CGI протоколу . Зазвичай інтерпретатори відкривають і виконують файл, вказаний в якості першої змінної .

У тому випадку якщо PHP використовується допомогою CGI-протоколу він не буде інтерпретувати аргументи командного рядка.

Доступ до довільного документа на сервері: http://web.if.ua/cgi-bin/php/secret/doc.html

Згідно з прийнятим угодою частину шляху в запитуваної сторінки, яка знаходиться після імені виконуваного модуля PHP, / secret / doc.html , використовується для вказівки файлу, який буде інтерпретований як CGI-програма Зазвичай, деякі конфігураційні налаштування веб-сервера (наприклад, Action для сервера Apache) використовуються для редиректу документа, наприклад, для перенаправлення запитів виду http:// PHP-hack.ru / secret / script.php інтерпретатору PHP. У такому випадку веб-сервер спочатку перевіряє права доступу до директорії / secret , і після цього створює перенаправлений запит http:// PHP-hack.ru / cgi-bin/php/secret/script.php . До нещастя, якщо запит спочатку заданий у повному вигляді, перевірка на наявність прав для файлу / secret / script.php не виконується, вона відбувається тільки для файлу / cgi-bin/php . Тим самим, користувач може звернутися до / cgi-bin/php , і, як наслідок, до будь-якого захищеного документу на сервері.

У PHP, вказуючи під час компіляції опцію - enable-force-cgi-redirect , а таке опції doc_root і user_dir під час виконання скрипта, можна запобігти подібні атаки для директорій з обмеженим доступом. Більш детально наведені опції, а також їх комбінації будуть розглянуті нижче.

1) Виконуються тільки загальнодоступні файли
У разі, якщо на вашому сервері відсутні файли, доступ до яких обмежений паролем, або доступ до якого очранічен списком ip адрес, немає ніякої потреби використовувати дані опції. Якщо ваш веб-сервер не дозволяє виконувати перенаправлення або не має можливості взаємодіяти з виконуваним PHP-модулем на конкретному рівні безпеки, ви можете використовувати опцію - enable-force-cgi-redirect під час складання PHP. Але при цьому ви повинні переконатися, що інші способи виконання скрипта, такі як безпосередньо виклик http://web.if.ua/cgi-bin/php/dir/script.php або з переадресацією http://web.if.ua / dir / script.php , недоступні.

У веб-сервері Apache перенаправлення може бути налаштоване за допомогою директив AddHandler і Action (описано нижче).

2) Apache - Використання - enable-force-cgi-redirect
Ця опція, устанавлваемая під час складання PHP, запобігає виклик скриптів безпосередньо за адресою виду http://php-hack.ru/cgi-bin/php/secretdir/script.php . Замість цього, PHP буде обробляти прийшов запит тільки в тому випадку, якщо він був перенаправлений веб-сервером.

Зазвичай перенаправлення в веб-сервері Apache налаштовується за допомогою наступних установок:

Action php-script / cgi-bin/php
AddHandler php-script. Php

Ця опція перевірена тільки для веб-сервера Apache , її робота грунтується на встановленні в разі перенаправлення нестандартної змінної REDIRECT_STATUS , що знаходиться в CGI-оточенні. У випадку, якщо ваш веб-сервер не дає можливості однозначно визначити, чи є даний запит перенаправлення, ви не можете використовувати описувану в даному розділі опцію і повинні застосувати будь-який інший метод роботи з CGI-додатками.


3) Apache - використання опцій doc_root і user_dir
Розміщення змінюваного контенту, такого як скрипти або будь-які інші виконувані файли, в директорії веб-сервера робить його потенційно небезпечним. У тому випадку, якщо в налаштуванні сервера допущена помилка, можлива ситуація, коли скрипти не виконуються, а відображаються в браузері, як звичайні HTML-документи, що може призвести до розкриття конфіденційної інформації (наприклад, паролів), або інформації, що є інтелектуальною власністю. Виходячи з таких міркувань, багато системних адміністраторів вважають за краще використовувати для зберігання скриптів окрему директорію, працюючи з усіма розміщеними в ній файлами по CGI-інтерфейсу.

У тому випадку, якщо неможливо гарантувати, що запит не перенаправляються, як було показано в попередньому розділі, необхідно вказувати змінну doc_root, яка відрізняється від кореневої директорії веб-документів.

Ви можете встановити кореневу директорію для PHP-скриптів, налаштувавши параметр doc_root в конфігураційному файлі, або встановивши змінну оточення PHP_DOCUMENT_ROOT . У разі, якщо PHP використовується допомогою CGI, повний шлях до виконуваного файлу буде побудований на підставі значення змінної doc_root та зазначеного в запиті шляху. Таким чином, ви будете впевнені в тому, що скрипти будуть виконуватися тільки всередині вказаної вами директорії (крім директорії user_dir , яка описана нижче).

Ще одна використовувана при налаштуванні безпеки опція - user_dir. У разі, якщо змінна user_dir не встановлена, шлях до файлу, що відкривається будується щодо doc_root . Запит виду http://php-hack.ru/ ~ user / doc.php призводить до виконання скрипта, що знаходиться не в домашньому каталозі відповідного користувача, а що знаходиться в підкаталозі doc_root скрипта ~ user / doc.php (так, ім'я директорії починається з символу ~ ).

Але якщо змінної public_php присвоєно значення, наприклад, http://php-hack.ru/ ~ user / doc.php , тоді у наведеному вище прикладі буде виконаний скрипт doc.php , що знаходиться в домашньому каталозі користувача, в директорії public_php . Наприклад, якщо домашній каталог користувача / home / user , буде виконаний файл / home / user / public_php / doc.php .

Установка налаштування user_dir відбувається незалежно від установки doc_root , таким чином ви можете контролювати кореневу директорію веб-сервера і призначені для користувача директорії незалежно один від одного.

4) PHP поза дерева веб-документів
Один із способів значтельно підвищити рівень безпеки - помістити виконуваний модуль PHP поза дерева веб-документів, наприклад в / usr / local / bin . Недоліком такого підходу є те, що перша рядок кожного скрипта повинна мати вигляд:

#! / Usr / local / bin / php

Також необхідно зробити всі файли скриптів виконуваними. Тим самим, скрипт буде розглядатися так само, як і будь-яке інше CGI-додаток, написаний на Perl, sh або будь-якому іншому скриптовій мовою, який використовує дописування #! в початок файлу для запуску самого себе.

Що б всередині скрипта ви могли отримати коректні значення змінних PATH_INFO і PATH_TRANSLATED , PHP повинен бути налаштований з опцією - enable-discard-path .


576 24.11.13



Напівжирний Нахилений текст Підкреслений текст Перекреслений текст | Вирівнювання по лівому краю По центру Вирівнювання по правому краю | Вставка смайликів Вибір кольору | Прихований текст Вставка цитати Перетворити вибраний текст з транслітерації в кирилицю Вставка спойлеру