Категория > Новости > Все по песочницам! Запускаем приложения в отдельных виртуалках с помощью AppVM - «Новости»

Все по песочницам! Запускаем приложения в отдельных виртуалках с помощью AppVM - «Новости»


15-08-2018, 18:00. Автор: Полина
");
}else{
$('#mpu1-desktop').remove();
console.log('mpu1-desktop removed');
}
});

Содержание статьи

  • Из чего строим
  • Решаем вопрос с GUI
  • Скучный 0day с VM escape, который я так и не зарепортил
  • Подключаем libvirt и разбираемся с правами
  • Что получилось
Если ты действительно заботишься о безопасности, то некоторые приложения есть смысл запускать в виртуализации. Обычно это создает массу проблем: держать три десятка виртуалок неудобно и остается соблазн «по-быстрому» что-то запустить на хосте. Мне удалось обойти часть неудобств. Свое решение я назвал AppVM — оно работает в Linux и позволяет запускать приложения с GUI и шейрить файлы с основной системой; оверхеды при этом минимальны. Как я этого добился? Сейчас расскажу.

Я действительно люблю Qubes. Если ты с ним не сталкивался, поясню: это дистрибутив, построенный на базе гипервизора Xen, который позволяет создавать домены — честные виртуальные окружения, внутри которых приложения работают в изоляции. Ты можешь создавать домены на базе разных дистрибутивов (образов), и они смогут общаться между собой: например, шейрить файлы. В Qubes доменов может быть сколько угодно: work, persoanl, vault — создавай и называй как хочешь. Звучит неплохо, но есть ли альтернативы и нужны ли они?


Если бы не Xen (вместо гипервизора :)) и отсутствие возможности использовать созданные его разработчиками утилиты вне окружения дистрибутива, то я бы им даже пользовался. Но, на мой взгляд, Xen не подходит хотя бы тем, что в отличие от KVM он не в ядре в апстриме. Предлагать кому-то устанавливать Xen, только чтобы воспользоваться какой-то тулзой, — сомнительное удовольствие. В Qubes самом по себе тоже ничего плохого нет, но его нужно устанавливать и настраивать. Гораздо проще начать встраивать все хорошее из Qubes к себе в уютную Gentoo, чем ломать годами отлаженную систему.


Однако идея безопасности через виртуализацию (security through virtualization) меня по-прежнему привлекала, поэтому что-то нужно было с этим делать.



Зачем вообще использовать Qubes или запускать приложения в отдельных виртуальных машинах?


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



Я покажу, как запускать любые, даже GUI-приложения в виртуальной машине, а также шейрить между ними файлы и буфер обмена. Последнее — это, конечно, в теории потенциальная дыра, но жить без этого будет сложновато.


Чтобы реализовать такую схему работы, я написал AppVM и сейчас покажу, как с ним обращаться.



Запущенные в AppVM приложения с GUI. Удобный менеджер запущенных приложений с информацией о потребляемой памяти

Все по песочницам! Запускаем приложения в отдельных виртуалках с помощью AppVM - «Новости»
WWW

Если ты не знаком с Nix, то будет полезно прочитать cheatsheet, который поможет понять, каким образом ведется работа в системе. А для тех, кто хочет попробовать NixOS (дистрибутив) или Nix (пакетный менеджер, которым можно пользоваться на любом дистрибутиве), будет полезно прочитать другую статью на той же вики.



Из чего строим


Изначально я видел решение в том, чтобы «собрать виртуальную машину для каждого приложения». Обернувшись блогами, как теплым клетчатым пледом, я начал искать готовые скрипты. Но все они мне показались весьма непривлекательными - за исключением примера, в котором использовался NixOS. Так и появилась первая версия AppVM, которая, по сути, была набором скриптов для установочного диска.



А как же другие системы изоляции?


В чем преимущество по сравнению с использованием SELinux или AppArmor, а быть может, еще и Firejail или bubblewrap? В лени. Виртуальные машины не только дают безопасность, их еще и проще использовать. Тебе не нужно ограничивать доступ к определенным ресурсам системы, если их просто нет.



Предельно простой конфигурационный файл Nix определил систему:


{config, pkgs, ...}:
{
imports = [
];
environment.systemPackages = with pkgs; [
chromium
];
services.xserver = {
enable = true;
desktopManager.xterm.enable = false;
displayManager.slim = {
enable = true;
defaultUser = "user";
autoLogin = true;
};
displayManager.sessionCommands = "while [ 1 ]; do ${pkgs.chromium}/bin/chromium; done &";
windowManager.xmonad.enable = true;
windowManager.default = "xmonad";
};
users.extraUsers.user = {
isNormalUser = true;
extraGroups = [ "audio" ];
createHome = true;
};
}
[/code]

Решаем вопрос с GUI


Использовать виртуализацию для консольных приложений, конечно, здорово, но мне бы хотелось в первую очередь запускать GUI-приложения. Например, недоверенные PDF — ты же прекрасно знаешь, как дыряв формат PDF и сколько хитрых сплоитов можно через него провернуть, чтобы исполнить код на целевой системе. Без поддержки GUI смысл AppVM минимален.


Источник новостиgoogle.com
Перейти обратно к новости