Представьте себе ситуацию: вы загрузили из Интернета новый двоичный файл под названием ls. Это приложение может быть вредоносным по замыслу. Бинарным файлам сложно доверять и запускать в системе. Это может привести к атаке на ОС, отправке ваших конфиденциальных файлов и информации из буфера обмена на вредоносный сервер или вмешательству в существующие процессы на вашем компьютере.
Было бы здорово, если бы у вас был инструмент для запуска и тестирования приложения в рамках заданных параметров безопасности. Все мы знаем, что команда ls
выводит список файлов в текущем рабочем каталоге. Так почему же для ее работы требуется сетевое подключение? Имеет ли это смысл?
Вот тут-то и приходит на помощь инструмент Pledge. Pledge ограничивает системные вызовы, которые может выполнять программа. Pledge поддерживается в системах OpenBSD. Хотя он официально не поддерживается в системах Linux, я покажу вам классный хак для использования Pledge в Linux.
Ограничение системных вызовов() с помощью Pledge
Возможно, вы удивитесь, узнав, что один бинарник может работать на 7 различных платформах – Windows, Linux, Mac, FreeBSD, OpenBSD, NetBSD и BIOS.
Эти двоичные файлы называются Actually Portable Executable (APE). Более подробную информацию вы можете найти в этом блоге. Эти двоичные файлы имеют суффикс .com, и он необходим для работы.
В этом руководстве мы расскажем, как использовать pledge.com
двоичные файлы в системе Linux для ограничения системных вызовов при запуске любых двоичных файлов или приложений.
Шаг 1: Скачайте pledge.com
Вы можете скачать pledge-1.8.com отсюда – justine.lol и переименовать файл pledge-1.8.com
в pledge.com
.
Шаг 2: Сделайте его исполняемым
Выполните эту команду, чтобы сделать его исполняемым.
chmod +x ./pledge.com
Шаг 3: Добавьте сайт pledge.com в путь
Быстрый способ сделать это – переместить двоичный файл в стандартное расположение /usr/local/bin/
.
sudo mv ./pledge.com /usr/local/bin
Шаг 4: Запуск и тестирование
pledge.com curl http://itsfoss.com
Я не назначил ему никаких разрешений (называемых promises), поэтому он не сработает, как и ожидалось. Но это дает нам подсказку о том, какие системные вызовы требуются двоичному curl при его запуске.
С помощью этой информации можно узнать, не запрашивает ли программа системные вызовы, которые ей не положены. Например, программа-проводник запрашивает dns. Нормально ли это?
Curl – это инструмент, который работает с URL-адресами и действительно требует этих системных вызовов.
Давайте назначим обещания с помощью флага -p
. Я объясню, что делает каждое из этих обещаний, в следующем разделе.
pledge.com -p 'stdio rpath inet dns tty sendfd recvfd' \ curl -s http://itsfoss.com
Он успешно перенаправляет на https-версию нашего сайта. Попробуем посмотреть, сможет ли он с тем же набором обещаний общаться с сайтами, поддерживающими https, или нет.
pledge.com -p 'stdio rpath inet dns tty sendfd recvfd' \ curl -s https://itsfoss.com
Да! Это сработало.
Беглый взгляд
В приведенном выше разделе мы использовали 7 обещаний, чтобы сделать наш запрос curl успешным. Вот краткий обзор того, для чего предназначено каждое обещание:
- stdio: Позволяет читать и писать на стандартный ввод/вывод (например, печатать в консоль).
- rpath: Позволяет читать файлы из файловой системы.
- inet: Позволяет выполнять операции, связанные с сетью (например, подключение к серверу).
- dns: Позволяет разрешать DNS-запросы.
- tty: Позволяет получить доступ к терминалу.
- sendfd: Разрешает отправку дескрипторов файлов.
- recvfd: Разрешить принимать дескрипторы файлов.
Чтобы узнать, какие еще обещания поддерживаются бинарным файлом, перейдите в этот блог.
Заключение
OpenBSD следует модели наименьших привилегий. Она не позволяет программам злоупотреблять системными ресурсами. Следуя этой модели безопасности, ущерб, наносимый вредоносным приложением, может быть весьма ограничен. Хотя в арсенале безопасности Linux есть seccomp
и apparmor
, я нахожу pledge более интуитивным и простым в использовании.
С помощью фактически переносимого исполняемого файла (APE) пользователи Linux теперь могут воспользоваться простотой залога, чтобы сделать свои системы более безопасными. Пользователи могут обеспечить более детальный контроль над тем, что процессы могут делать в этих средах, что добавит дополнительный уровень защиты.
Комментарии (0)