Sandbox linux ��� ���

Linux Sandbox

Для будущих студентов курса «Administrator Linux. Professional» и всех интересующихся подготовили статью, автором которой является Александр Колесников.

Цель данной статьи показать какие проекты существуют на сегодняшний день для автоматического анализа исполняемых файлов для ОС Linux. Предоставленная информация может быть использована для развертывания тестового стенда для анализа вредоносного кода. Тема может быть актуальна для администраторов и исследователей вредоносного программного обеспечения.

Linux особенности песочниц

Основная проблема песочниц ОС Linux для анализа приложений это ограниченная поддержка процессоров, на которых работает операционная система. Так как использовать для каждой архитектуры свою физическую машину весьма дорого. То как компромисс используют виртуализированные решения типа Hyper-V, VMWare или VBox. Эти решения достаточно хорошо справляются со своей задачей, но они позволяют проводить виртуализацию только на той архитектуре, на которой работает основной хост. Чтобы запустить код для ARM, MIPS и других архитектур, придется обращаться к другим продуктам, которые могут эмулировать необходимые команды процессора. Попробуем собрать как можно больше проектов и посмотреть какие архитектуры процессоров поддерживаются.

Cuckoo Sandbox

Абсолютным лидером среди бесплатных автоматизированных песочниц долгое время была песочница Cuckoo. Эта песочница позволяет настроить любую популярную платформу для запуска приложений. Песочница оснащена веб интерфейсом, который используется для управления песочницей и для получения результатов работы приложений. Архитектура этой песочницы позволяет писать собственные плагины, которые могут изменять характеристики и поведение песочницы в зависимости от запускаемого файла или установленных дополнительных настроек. Общую схему архитектуры можно найти ниже:

Эта песочница очень популярна для анализа вредоносного программного обеспечения для ОС Windows. Разработчики утверждают, что она так же может работать и с ОС Linux. Разница только будет заключаться в том, что вместо виртуальной машины на Windows, должна быть настроена виртуальная машина на Linux. Попробуем найти еще аналоги.

LiSA Sandbox

Opensource песочница для анализа кода под ОС Linux. Найти репозиторий песочницы можно тут. Документация гласит, что эта песочница может анализировать исполняемые файлы с платформ:

Подобная эмуляция возможна из-за использования эмулятора Qemu. Также песочница предлагает статический и динамический анализ исполняемого файла. Статический анализ производится за счёт инструмента radare2, а динамический за счет специального расширения ядра, которое собирает события взаимодействия с ОС: файловые операции, сетевые взаимодействия, запуск команд и процессов. В документации описывается, что поддержка такого большого количества процессоров позволяет работать с прошивками устройств. То есть можно просмотреть что выполняет программное обеспечение, которое будет записано на IoT устройства. Весьма полезная фича, учитывая, что вредоносы могут быть записаны в образ прошивки устройств и работать там на постоянной основе.

Из особенностей — использование контейнеров Docker. Это качественно ускоряет настройку песочницы. Интерфейс песочницы:

Limon Sandbox

Относительно простой набор скриптов, который используется для анализа приложений. Не имеет возможностей для расширения.(Кроме написания новой логики). Может анализировать приложения теоретически на любом процессоре, так как полностью функционал записан на Python. Найти репозиторий можно здесь. Песочница оперирует следующими инструментами:

Похоже, что данная песочница это просто автоматизированная часть работы аналитика вредоносного программного обеспечения. Вывод скриптов можно увидеть ниже:

drakvuf Sandbox

Найти репозиторий можно тут. Единственный набор инструментов, который не направлен специально на исследование вредоносного кода. Этот набор используется для изучения программного обеспечения в целом. Записываемые артефакты выполнения приложений настолько подробны, что можно анализировать и вредоносное программное обеспечение. Документация гласит, что этот набор инструментов может работать практически со всеми популярными ОС. Единственное условие, которое нужно выполнить на устройстве — вложенная виртуализация. Все действия песочницы реализуются за счет перехвата системных функций ОС, которая используется в качестве хостовой для исследуемого приложения. К сожалению, для просмотра данных песочницы необходимо самостоятельно парсить данные из json.

Читайте также:  Soundwire для windows 10

Detux

Репозиторий песочницы можно найти здесь. Песочница для анализа вредоносного кода. Умеет анализировать следующие архитектуры:

В качестве базового гипервизора используется проект Qemu. Песочница автоматически собирает трафик и идентификаторы компрометации. Вся информация помещается в отчет. В отличии от аналогов не предоставляет красивого интерфейса, а записывает всё в отчет в формате json.

Как видно из списка выше, выбор хоть и небольшой среди песочниц все-таки есть. Однако, набор инструментов практически везде одинаковый:

кастомный перехватчик для системных вызовов.

Поэтому пользователю придется сделать выбор, будет ли он анализировать данные, которые производит песочница или нет.

Также приглашаем всех желающих посетить открытый вебинар на тему «Практикум по написанию Ansible роли». В ходе занятия мы научимся писать, тестировать и отлаживать ansible роли. Это важно для тех, кто хочет автоматизировать настройку инфраструктуры, т.к. это один из инструментов, который это позволяет сделать. Присоединяйтесь!

Источник

Песочница программ Linux

Даже в операционной системе Linux мы можем доверять не всем программам. Иногда нужно понаблюдать за тем, как они будут вести себя в системе. Также в некоторых случаях нужно больше безопасности, например, когда вы хотите открыть подозрительный сайт, зайти на сайт, где не нужно разглашать ваши конфиденциальные данные или воспользоваться своим банковским счетом в интернете.

В каждом из перечисленных случаев будет полезной песочница linux. Конечно, идеальное решение для изоляции программ в Linux — это виртуальные машины или контейнеры, но не всегда есть время и знания их настраивать, а простая песочница предоставляет легкое и быстрое решение. Идея заключается в том, чтобы ограничить приложению доступ к вашей системе, личным данным, файлам и другой информации. Программа будет работать только в изолированном окружении. В операционной системе Windows есть утилита Sandboxie, которая реализует такую функциональность. Но в Linux есть альтернатива Sandboxie — FireJail.

Принцип работы FireJail в использовании отдельных пространств имен для процессов, фильтрации системных вызовов ядра и использование отдельных ресурсов ядра, таких как таблицы и сетевой стек. В этой статье мы рассмотрим как выполняется установка и настройка песочницы firejail в Linux. А также поговорим о том, как использовать программу.

Установка FireJail

Утилита есть в официальных репозиториях большинства дистрибутивов, поэтому для установки вам будет достаточно выполнить несколько команд. Нам надо установить два пакета firejail — непосредственно песочница с интерфейсом командной строки и firetools — графический интерфейс для неё. Если вы используете Debian или Ubuntu просто выполните:

sudo apt install firejail firetools

После завершения установки утилита будет готова к работе. В дистрибутивах Fedora, CentOS или других из семейства Red Hat команда установки будет выглядеть вот так:

sudo yum install firejail firetools

После этого утилита firetools для управления песочницей Linux будет доступна в главном меню системы.

Использование песочницы Linux

Чтобы запустить любую программу в песочнице достаточно просто передать имя исполняемого файла утилите firejail. Например, для запуска Firefox выполните:

Но перед тем как запускать программу таким способом нужно закрыть все открытые сейчас вкладки, иначе программа не запустится, а только откроется новая вкладка. Для веб-браузера Chromium команда похожая:

Читайте также:  Linux security and hardening

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

Как видите, здесь нет многих файлов и папок, которые на самом деле есть в домашней папке. Если вы попытаетесь получить доступ к запрещенному файлу, то получите сообщение, что его нет:

Настройка прав доступа

Иногда нужно дать приложениям минимум возможностей в системе, например, полностью запретить доступ к домашней папке. Для этого можно использовать опцию —private:

firejail chromium-browser —private

Эта команда полностью ограничит приложение, программа запустится с чистым профилем и не сможет писать файлы в домашнюю папку из-за приватного режима sandbox linux.

Использование графического интерфейса

Если вам больше нравиться использовать графический интерфейс вместо командной строки, вы можете использовать графический фортэнд для FireJail — Firetools. Вы можете запустить утилиту через главное меню или терминал:

Дальше достаточно выполнить двойной клик по любому уже настроенному приложению в окне песочницы и оно будет запущено. По умолчанию доступны Firefox и VLC. Если вы хотите добавить программу вызовите контекстное меню и нажмите Edit:

В открывшемся окне нужно указать имя, описание и команду запуска программы. Команда может быть такой же какую вы выполняете из консоли. Например, для Firefox в ограниченном режиме:

Затем просто кликните по только что добавленной иконке. После этого программа откроется в sandbox Linux.

Выводы

В этой небольшой статье мы рассмотрели как настраивается песочница программ linux FireJail, а также как ее использовать для изоляции программ. Несмотря на ее простоту, я рекомендовал бы вам использовать более сложные и надежные решения если безопасность критически важна, например, контейнеры linux или виртуальные машины. А вы используете песочницу в своей системе? Или все-таки контейнеры? Что по-вашему лучше? Напишите в комментариях!

Небольшое видео с демонстрацией работы утилиты на английском:

Источник

Linux-vserver или каждому сервису по песочнице

Недавно на хабре публиковались статьи о openvz и lxc. Это напомнило мне, что эта статья всё еще валяется в sandbox’е…

Для целей размещения проектов я применяю такую схему: каждый сервис запускается в изолированной среде: боевой — отдельно, тестовый — отдельно, телефония — отдельно, веб — отдельно. Это снижает риски взлома систем, позволяет бакапить всё и вся одним rsync’ом на соседний сервер по крону, а в случае слёта железа просто поднять на соседнем железе. (А использование drbd + corosync позволяет это делать еще и автоматически)

Для создания изолированной среды есть два подхода, именуемые VDS (виртуализация аппаратуры) и VPS/jail (виртуализация процессного пространства).

Для создания VDS изоляций применяют XEN, VirtualBox, VMWare и прочие виртуальные машины.
Для создания VPS на linux используется либо linux-vserver, либо openvz, либо lxc.

Плюсы VDS: система внутри может быть совершенно любой, можно держать разные версии ядер, можно ставить другую ОС.
Минусы VDS: высокие потери производительности на IO, избыточное потребление CPU и RAM на сервисы, дублирующие запущенные на серверной ОС.

Плюсы VPS: крайне низкая потеря производительности, только на изоляцию, запускаются только те сервисы, которые реально необходимы.
Минусы VPS: можно запустить только linux и ядро будет только той версии, что уже запущено.

Так как мне не нужны разные ОС, то всюду применяю linux-vserver (так уж сложилось исторически, применяю с 2004го года, а openvz вышел в открытый доступ в 2005м), а lxc в моём понимании еще не дорос до продакшена (хотя и очень близок уже).

Читайте также:  Не показывает дисковод windows 10

Приведу цитату из FAQ:
«What is the status of Linux-VServer?
Linux-VServer has more than a decade of maturity and is actively developed. Two projects are similar to Linux-VServer, [LXC], and [OpenVZ]. Of the two, OpenVZ is the more mature and offers some similar functionality to Linux-VServer. LXC is solely based on the kernel mechanisms such as cgroups that are present in modern kernels. These kernel mechanisms will continue to be refined and isolation will mature. As that occurs, Linux-VServer will take advantage of those new features separately from LXC and continue to provide the same robust user interface that it does currently. Currently, LXC offers significantly less functionality and isolation than Linux-vserver. LXC will eventually be a robust wrapper around kernel mechanisms but is still under heavy development and not considered ready for production use.»

Ниже я опишу базовые операции по запуску LAMP сервера в изолированном окружении.

ОС: debian-stable, 64bit
Начиная с Wheezy поддержка vserver командой debian убрана, поэтому использую ядра с repo.psand.net/info

Настройка корневой системы для запуска linux-vserver

После установки — ребут в новое ядро.

Что мы сделали:

  • Установили ядро с поддержкой linux-vserver, установили утилиты для создания/управления vserver’ами.
  • Установили мой модуль nss_vserver[1] и vslogin, который позволяет логиниться по ssh напрямую внутрь vserver’а
  • Настроили интерфейс dummy0, чтобы создать «приватную» сеть для виртуальных машин.

Это позволяет использовать один IP сервера для запуска различных сервисов, разделяя их по логину (например, чтобы войти рутом в виртуальную машину web надо просто логиниться как web-root либо как root@web).

После этого на сервере можно запускать новые сервера, привязывая их к dummy0 интерфейсу.
Всё хорошо, но созданные сервера отвечают на 192.168.1.x, а надо чтобы он был доступен извне.

Для решения этого, на руте нам понадобится еще nginx:

Это позволяет все приходящие запросы на 80й порт раскидывать по разным виртуальным машинам в зависимости от имени.
При необходимости, можно использовать proxy_pass на другой внешний IP, что позволяет перемещать виртуальные сервера по разным машинам без необходимости ожидать полного обновления DNS записей, но это тема для отдельного разговора.

Теперь нам надо создать новую виртуальную машину (номер 57, имя web) в которой установим LAMP.

Создание нового vserver’а

Это устанавливает базовую систему, делает её автозапускаемой при ребуте корневой системы.

Теперь виртуалка готова к установке в неё необходимого софта. Например, обычный LAMP:

Всё! Теперь у вас на сервере работает апач в совершенно изолированной среде.

К проблемам этого подхода относятся:

1. Прямой вход внутрь виртуальных серверов возможен только по паролю.
2. На корневой системе никому нельзя давать доступа, поэтому на корневой системе должен стоять только проверенный минимум софта (ssh, nginx, iptables и больше ничего).
3. При необходимости прямого доступа до каких-либо портов внутри виртуальных машин, проброс нужно делать с помощью iptables.

Моменты, оставленные за кадром для простоты статьи

1. /var/lib/vservers/* желательно размещать на lvm, чтобы иметь возможность управлять выделением места для виртуальных машин независимо.
2. Управление ресурсами: просто созданная виртуальная машина может съесть все ресурсы машины. Подробнее о настройке лимитов linux-vserver.org/Resource_Limits
3. /tmp/. Внутри виртуалок по умолчанию /tmp/ создаётся как ramdisk в 16m размером. Либо сразу перед «vserver $NAME start» исправить /etc/vservers/$NAME/fstab
4. Полезные сведения, информацию и прочее про linux-vserver можно найти на linux-vserver.org

Если будут полезные вопросы, развернутые ответы на них буду выносить в топик.

Источник

Оцените статью