Журнал » Угрозы » Угроза доступа к локальным файлам сервера при помощи URL
Угроза доступа к локальным файлам сервера при помощи URL
Угрозы

Угроза доступа к локальным файлам сервера при помощи URL

3 0

Угроза заключается в возможности передачи нарушителем дискредитируемому браузеру запроса на доступ к файловой системе пользователя вместо URL-запроса. При этом браузер выполнит этот запрос с правами, которыми он был наделён при запуске, и передаст данные, полученные в результате выполнения этой операции, нарушителю. Данная угроза обусловлена слабостями механизма проверки вводимых пользователем запросов, который не делает различий между запросами на доступ к файловой системе и URL-запросами. Реализация данной угрозы возможна в случае наличия у нарушителя привилегий на отправку запросов браузеру, функционирующему в дискредитируемой системе.


ID угрозы: УБИ.016

Источник угрозы:
  • Внешний нарушитель со средним потенциалом

Последствия реализации угрозы:
  • Нарушение конфиденциальности

Необходимые меры:

Угроза доступа к локальным файлам сервера при помощи URL (Local File Inclusion - LFI) – это уязвимость, которая позволяет злоумышленнику включить и выполнить локальные файлы на сервере, используя URL-адрес. Это происходит, когда веб-приложение принимает пользовательский ввод (например, имя файла) через URL-параметр и использует его для включения файла с помощью таких функций, как include(), require(), include_once(), require_once() в PHP или аналогичных функций в других языках программирования.

Успешная атака LFI может привести к различным последствиям, включая:

  • Раскрытие конфиденциальной информации: Злоумышленник может получить доступ к файлам конфигурации, файлам журналов, исходному коду приложения и другим конфиденциальным данным.
  • Удаленное выполнение кода (RCE): Если злоумышленник может загрузить вредоносный код на сервер, он может использовать LFI для его выполнения.
  • Несанкционированный доступ к системе: Злоумышленник может использовать LFI для получения доступа к учетным записям пользователей или другим ресурсам системы.
  • Отказ в обслуживании (DoS): Злоумышленник может использовать LFI для перегрузки сервера, что приведет к отказу в обслуживании.

Для минимизации угрозы доступа к локальным файлам сервера при помощи URL необходимо принять следующие меры:

1. Валидация и санитаризация входных данных:

  • Строгая проверка входных данных: Тщательно проверять все входные данные, которые используются для формирования путей к файлам, на соответствие ожидаемому формату и диапазону значений.
  • Использовать “белые списки” (allowlists): Вместо того, чтобы пытаться заблокировать все известные вредоносные шаблоны (например, “..”, “/”, “"), лучше разрешать только те данные, которые соответствуют определенным критериям безопасности (например, разрешенные имена файлов из предопределенного списка).
  • Ограничить доступ к файловой системе: Не разрешать пользователям указывать произвольные пути к файлам. Предоставлять доступ только к ограниченному набору файлов или директорий.
  • Нормализация путей: Прежде чем использовать входные данные, нормализуйте пути к файлам, чтобы убедиться, что они находятся в пределах разрешенной директории. Удалите все относительные ссылки (например, “..”) и убедитесь, что путь является абсолютным или находится в пределах разрешенной директории.
  • Экранирование и кодирование данных: Экранировать или кодировать специальные символы, которые могут быть использованы для внедрения кода.

2. Безопасное включение файлов:

  • Не использовать входные данные напрямую для включения файлов: Никогда не использовать входные данные, полученные от пользователей, напрямую для включения файлов.
  • Использовать предопределенные пути и имена файлов: Если необходимо включать файлы, используйте предопределенные пути и имена файлов, а не позволяйте пользователям указывать их напрямую.
  • Использовать include/require только для доверенных файлов: Включайте файлы только из доверенных источников.
  • Защита от многократного включения (include_once/require_once): Использовать include_once() или require_once() вместо include() или require(), чтобы предотвратить многократное включение одного и того же файла.

3. Ограничение прав доступа к файловой системе:

  • Принцип наименьших привилегий (Least Privilege Principle): Предоставлять процессу веб-сервера только те права доступа к файловой системе, которые необходимы для выполнения его задач.
  • Ограничение доступа к каталогам: Ограничить доступ к каталогам, которые не должны быть доступны из веб-интерфейса.
  • Использовать chroot или контейнеры: Использовать chroot (в Unix-подобных системах) или контейнеры (например, Docker) для создания изолированной среды, в которой приложение имеет доступ только к определенному подмножеству файловой системы.

4. Конфигурация веб-сервера:

  • Отключить директиву allow_url_include (PHP): Отключить директиву allow_url_include в конфигурации PHP, чтобы запретить включение файлов по URL.
  • Запретить доступ к чувствительным файлам и директориям: Настроить веб-сервер (например, Apache, Nginx) для запрета доступа к чувствительным файлам и директориям, таким как файлы конфигурации, системные файлы и директории с исходным кодом.

5. Мониторинг и аудит:

  • Мониторинг доступа к файлам: Мониторить доступ к файлам и регистрировать все попытки доступа к защищаемым файлам.
  • Системы обнаружения вторжений (IDS): Использовать IDS для обнаружения атак LFI.
  • Анализ журналов: Регулярно анализировать журналы веб-сервера и операционной системы для выявления подозрительной активности.

6. Безопасное кодирование:

  • Проверять входные данные: Всегда проверять входные данные.
  • Использовать параметризованные запросы: Использовать параметризованные запросы для защиты от SQL-инъекций, которые часто используются в сочетании с LFI.
  • Использовать безопасные библиотеки: Использовать безопасные библиотеки для работы с файлами.
  • Проводить аудит кода: Регулярно проводить аудит кода для выявления уязвимостей.
  • Тестирование безопасности: Проводить тестирование безопасности, включая ручные и автоматические тесты, чтобы проверить защиту от LFI.

7. Обновления безопасности:

  • Своевременное обновление программного обеспечения: Своевременно устанавливать обновления безопасности для операционных систем, веб-серверов, интерпретаторов PHP и других компонентов системы.

8. Образование и осведомленность:

  • Обучение разработчиков: Обучать разработчиков основам безопасного кодирования и мерам защиты от уязвимостей LFI.
  • Обучение персонала: Обучать персонал основам безопасности и правилам защиты системы от атак.

Пример (PHP):

Уязвимый код:

php
<?php    $file = $_GET['page'];    include($file . ".php");?>

Злоумышленник может использовать URL:

?page=../../../../etc/passwd

Чтобы включить файл /etc/passwd.

Защищенный код (пример):

php
<?php    $allowed_pages = array('home', 'about', 'contact');    $page = $_GET['page'];    if (in_array($page, $allowed_pages)) {        include('pages/' . $page . '.php');    } else {        echo "Page not found.";    }?>

Внедрение этих мер позволит значительно снизить риск доступа к локальным файлам сервера при помощи URL и обеспечить более безопасную работу вашего веб-приложения.

Нет комментариев

Оставить комментарий

Оставить комментарий

Новости Новости Угрозы Угрозы Персональные данные Персональные данные