Използване на Docker за сигурно сърфиране в мрежата

Има няколко начина да защитите себе си и машината си, докато сърфирате в мрежата и изпълнявате други онлайн задачи. Най-простият е да създадете специален потребител в системата, от чието име да влизате в безопасни/опасни сайтове. Друг начин е да инсталирате виртуална машина, като инсталирате на нея например Hardened Gentoo. Можете също да инсталирате Qubes OS, но всичко това са твърде излишни конфигурации, които могат да бъдат заменени с виртуализация на контейнери.

През 2011 г. бяха открити 594 уязвимости във всички популярни браузъри, от които браузърът Chrome принадлежеше на 278, а Firefox - на 89. 197 уязвимости в класа на Chrome принадлежаха към висока степен на опасност плюс една критична уязвимост, докато уязвимостите на Firefox с висока степен на опасност се оказаха 65. На следващата година в Chrome бяха открити 125 уязвимости, от които 68 бяха с висока степен на опасност, във Firefox съотношението на уязвимостите стана 159/99.

Мога да продължа с този скучен списък дълго време, но картината вече трябва да е ясна. Браузърите са доста празни и нищо наистина не се променя с времето, а където има дупки, има и хора, които ги използват. Модерният браузър, който вече започна да се превръща в пълноценна операционна система, е огромна машина от милиони редове код и много от тях могат да бъдат потенциално опасни.

По едно време Джоана Рутковская, която получи неофициалния псевдоним Руткитовская, ясно показа, че сърфирането в мрежата може да бъде достатъчно сигурно само ако различни екземпляри на браузъра за различни видове сайтове се изпълняват в отделни виртуални среди, които не могат да взаимодействат помежду си. Идеята формира основата на операционната система Qubes OS, която е един вид комплект за разпространение на Linux,изграден по технологията Xen.

За съжаление, поради своята архитектура, Qubes OS се оказа малко полезна за обикновените потребители, които се нуждаят от машината не само от възможността да стартират браузър и офис пакет, но и от възможността да инсталират собствени драйвери, голямо софтуерно хранилище и куп други функции. Затова в рамките на тази статия искам да покажа как идеята за разделяне на браузъра и задачите може да бъде приложена във всяка дистрибуция на Linux без никакви сериозни ограничения.

сигурно
Същата операционна система Qubes

Хакер #182. Всичко за биткойн

Инструменти

В Qubes OS Rutkowska използва Xen, оправдавайки избора си с логично по-ниско ниво на изолация (под ядрото на Linux) и сравнително малко количество код на хипервизора, в който логично трябва да бъде много по-трудно да се намери грешка, отколкото в ядрото на Linux (ако говорим за KVM или, например, OpenVZ). За нас Xen не е много добро решение, което създава твърде много ограничения. KVM също не е много удобен, но виртуализацията на контейнер като OpenVZ или LXC ще работи много добре.

Виртуализацията от тип контейнер не е толкова сигурна, колкото Xen и дори KVM, но нейното ниво на изолация ще бъде повече от достатъчно за нашата задача. Аз лично предпочитам да използвам LXC, но изборът на инструмент и дистрибуция тук изобщо не е основен. Бих искал също така да насоча вниманието ви към добавка за LXC, наречена Docker, която значително опростява внедряването на виртуални среди.

Ще използваме Docker, за да видим как е най-бързият и лесен начин за внедряване на виртуална среда с браузър вътре. След това ще се опитаме да използваме LXC като по-гъвкаво решение, което ви позволява да създадете няколко логически разделени среди. Едната ще бъде за„развлекателно“ сърфиране в мрежата, за сайтове като YouTube, ivi.ru, Last.fm и посещение на различни блогове и новинарски сайтове. Втората среда ще работи (документи, електронни таблици, корпоративен уебсайт и т.н.). Третият е Интернет банкиране и финанси: WebMoney, PayPal, Yandex.Money.

Разделяйки задачите между различни виртуални среди, ще решим няколко проблема наведнъж:

Най-лесният начин за внедряване на среда, базирана на LXC, е да използвате Docker. Ubuntu, Arch Linux и много други дистрибуции имат Docker в главното хранилище, така че инсталирането му е толкова просто, колкото да въведете една команда:

След това стартирайте докер демона. В Arch/Fedora така:

На Debian/Ubuntu така:

Вече сме готови да внедрим новата среда. Това не е по-трудно да се направи от инсталирането на самия Docker:

Тази команда ще изтегли базовото изображение на средата на Ubuntu от сайта на проекта, ще създаде нов LXC контейнер, ще изведе виртуалния мрежов интерфейс и ще изпълни горната команда вътре в него. Размер на изображението - около 650 MB, вътре в системата минимум. Също така достъпни за изтегляне са Fedora, Debian, Minimal BusyBox и много други. Налични са и неофициални изображения, най-вече magglass1/docker-browser-over-ssh. Това е готова компилация на Ubuntu с предварително инсталиран Google Chrome, Firefox и X11 пренасочване през SSH.

Този път няма да стартираме веднага контейнера, а просто ще получим желаното изображение:

Когато изображението бъде получено, стартираме контейнера:

След кратка инициализация на екрана ще се появят следните редове:

docker
Вземете изображение на контейнер с Firefox и Chrome вътре

  • Благодарение на функциите на Docker всяко ново стартиране на браузъра ще се извършва "чисто". С други думи, не се нуждаем от различни опциисреди за различни задачи. За да влезете в потенциално опасен сайт или интернет банка, е достатъчно само да стартирате нова среда, да свършите работата и да я затворите.
  • Такава пясъчна среда е лесна за разполагане на всяка налична Linux машина. Основното нещо е наличието на интернет.
  • SSH пренасочването ви позволява напълно да отрежете контейнера от основната система.
  • Относително висока производителност на браузъра.

Сред недостатъците може да се отбележи липсата на мултимедийни възможности. Видеото няма да се възпроизвежда съвсем гладко и звукът не се поддържа.

docker
Стартиране на Firefox в контейнер чрез SSH

LXC и Xephyr

Сега нека се опитаме да създадем няколко среди от един и същи тип за различни цели. Този път ще използваме Ubuntu, чист LXC и Xephyr X сървър, като последният ще ни позволи да създадем виртуален X сървър в машината за гости, чието изображение ще се показва в работния плот на хост системата. Тази опция не е много по-добра от SSH препращането, просто е различна.

Вече имаме инсталиран LXC като зависимост от Docker, така че инсталираме debootstrap и bridge-utils:

Сега нека създадем нов контейнер. Нека го наречем уеб браузър:

Веднага след като изображението се изтегли през мрежата, стартираме контейнера:

Инсталирайте необходимия софтуер в контейнера:

Сега пишем малък скрипт, който ще ни помогне да стартираме Firefox в псевдодесктоп:

Не бързаме да стартираме контейнера, а вместо това го клонираме, за да получим няколко контейнера с браузър вътре:

Така ще получим няколко контейнера, всеки от които ще бъде предназначен за различни цели. Скриптът за стартиране също може да бъде копиран плюс запис на файлове на работния плот, за да създадете подходящите икони:

За да се появи икона на работния плот, тя трябва да бъде поставена в директорията

използване
Стартирайте контейнер в Docker

LXC и контейнери за потребителско пространство

Описаните методи за стартиране на браузър в контейнер имат един съществен недостатък: те работят с root права и се намират в основната файлова система. От гледна точка на сигурността и здравия разум това не е напълно правилно, така че е много по-добре контейнерите да се изпълняват в потребителското пространство.

И така, контейнерите за потребителско пространство използват така наречените потребителски пространства от имена, които се появиха в ядрото на Linux 3.0.12. Те ви позволяват да картографирате определени UID и GID диапазони от хост системата към произволни UID:GID диапазони вътре в контейнера, така че непривилегирован потребител на хост системата да може да стане root вътре в контейнера. Цялата тази функционалност се контролира от ядрото плюс няколко модифицирани помощни програми, като новия loginuid и помощните програми на shadow package. Помощната програма lxc-user-nic също се появи с бит setuid, който ви позволява да управлявате ограничен набор от мрежови настройки от името на непривилегирован потребител. Използва се главно за промяна на настройките на мрежовия мост.

Специално за създаване на контейнери за потребителско пространство, разработчиците на LXC са подготвили шаблон за изтегляне, който автоматично изтегля редовно актуализирана компилация на Debian или Ubuntu от мрежата и създава нова виртуална среда въз основа на нея. За да получите тази сборка (в този случай говорим за Ubuntu 12.04) и да създадете нов контейнер (нека го наречем отново уеб браузър), просто изпълнете една проста команда:

След това трябва да се уверите, че файловете на устройството, необходими за показване на изображението, както и гнездото X11, са препратени към контейнера. За да направите това, отворете конфигурацията на контейнера

/.local/share/lxc/web-browser/config и напишете следното в него:

След това намираме вконфигурирайте следните редове:

И ние ги заменяме с тези, замествайки 1000 с нашите собствени UID и GID в системата:

След това коригираме собственика на домашната директория вътре в контейнера към нашия UID:GID:

Инсталирайте Chrome вътре в контейнера:

Пишем скрипт за стартиране на chrome в контейнер:

Скриптът проверява дали контейнерът работи, ако не, той стартира и стартира Chrome в него. Основната същност на всички тези действия е да не стартирате вече работещ контейнер два пъти, а също така да получите възможност да създадете и стартирате няколко различни контейнера. За да направите това, просто клонирайте готовия контейнер, както е описано в предишния раздел, и заменете името уеб браузър с името на новия контейнер в началото на скрипта.

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

използване
Chrome в контейнер на потребителско пространство

Виртуализацията на контейнери е чудесна за стартиране на потенциално несигурен софтуер. Работи във всяка Linux дистрибуция, не изисква сглобяване на допълнителни инструменти и прилагане на кръпки към ядрото. Той е по-лек от пълноценната виртуализация, по-лесен за внедряване и ви позволява да работите прозрачно с командния ред и файловете в системата за гости. Браузърът е само един пример за приложения, които могат да се изпълняват в контейнер.