Анонимная виртульная машина. Устанавливаем VirtualBox в Tails

НОВОСТИ
2018-01-03 13:57:08
1
12.1K

хвосты

Tails - лучшая операционная система, если вы хотите сделать ваше присутствие в сети максимально анонимным. Но она имеет некоторые особенности, которые мешают использовать её как полноценный десктоп. Одна из них - отсутствие возможности установить VirtualBox.

Вот несколько причин, которые мешают установить VirtualBox в Tails так же, как в любой дистрибутив Linux:

1) Tails — это дистрибутив «без памяти». Любые сделанные тобой модификации системы (в том числе установка пакетов) будут сброшены при выключении машины. Обойти эту проблему можно, создав Persistent-раздел и внеся нужные пакеты в список для сохранения. При следующей загрузке Tails установит эти пакеты заново. Но это только начало.

2) У Tails есть одна дурацкая особенность: 64-битное ядро и 32-битное окружение иcполнения. Все пакеты этого дистрибутива 32-битные, а это значит, что стандартными методами можно установить только 32-битную версию VirtualBox, которая будет иметь ограничение в три гигабайта для каждой виртуальной машины. Более того, запустить эту версию на 64-битном ядре будет невозможно: 32-битной VirtualBox нужны 32-битные модули ядра и соответствующее ядро.

3) Даже если вы смогли решить две предыдущие проблемы, ваша виртуальная машина не сможет выйти в Интернет. Это связано с тем, что Tails имеет ограничение на подключение к сетевым хостам только через Tor. Поэтому придется менять правила брандмауэра и несколько других конфигов, чтобы направить пакеты виртуальной машины в Tor. Причем делать это придется после каждой перезагрузки.

Уже кипит ?) Разберем решение всех этих проблем.

Шаг 1. Подключение Presistent-раздела.

Для выполнения следующих шагов нам понадобится так называемый Persistent-раздел. Это специальный раздел с файловой системой ext4, который можно создать на флешке рядом с основным. Его задача — хранение пользовательских данных, конфигураций приложeний и кеша пакетов, который нужен для быстрой установки «сохраненных» пакетов при следующей загрузке.

Чтобы создать Persistent-раздел, необходимо установить Tails, то есть не просто записать ISO-файл на флешку, а загрузиться с этой флешки и установить Tails на другую флешку с помощью инсталлятора: Меню > Tails > Tails Installer. После этого необходимо загрузиться со второй флешки и создать раздел: Меню > Tails > Configure persistent volume. Когда Tails предложит выбрать, что следует хранить на этом разделе,выбираем все пункты.

Можно провести установку и без двух флешек, просто запустив ISO-образ внутри виртуальной машины, а затем установить её на USB-накопитель.

После заверешения операции в каталоге /home/amnesia/ появится подкаталог Persistent, в который можно копировать любые данные с целью сохранить их между перезагрузками.

Шаг 2. Установка 64-битной VirtualBox в chroot

Версия VirtualBox 64-bit не будет работать в 32-битном окружении, но мы можем создать 64-битное окружение, которое будет отделено от основной системы и распoлагаться в разделе Persistent. Для этого в Debian (и, как следствие, Tails) есть инструмент debootstrap, позволяющий развернуть полноценный дистрибутив Debian в выделенном каталоге.

Создаем окружение 6

Итак, загружаемся в Tails. В окне приветствия (More options?) нажимаем Yes и устанавливаем пароль root (любой). Далее открываем терминал и переходим в каталог Persistent:

$ cd ~/Persistent


Устанавливаем debootstrap:

$ sudo apt-get update


$ sudo apt-get install debootstrap

Отключаем брандмауэр, чтобы он не заворачивал весь трафик в Tor и не мешал нам в дальнейшей рабoте:

$ sudo iptables -F


Создаем каталог vbox для нашего 64-битного окружения и разворачиваем его:

$ sudo mkdir vbox


$ sudo debootstrap --arch amd64 jessie vbox http://ftp.ru.debian.org/debian/

Так мы получим скелет 64-битного Debian, в котором пока, кроме базовой системы, нет ничего. Следующий шаг — установка VirtualBox, но сначала нам нужно закинуть в окружение необходимые модули ядра.

Устанавливаем модули ядра для VirtualBox

Ядерные модули VirtualBox распространяются в форме исходников, которые собираются под конкретное ядро на этапе установки. Самый простой способ установить их внутрь виртуального окpужения — это инсталлировать официальную версию VirtualBox в сам Tails, а затем скопировать скомпилированные модули в 64-битное окружение.

Для начала установим компилятор и хидеры ядра, необходимые для сборки модулей:

$ sudo apt-get install linux-headers-4.8.0-0.bpo.2-common linux-kbuild-4.8 linux-compiler-gcc-4.9-x86 gcc make


Также нам понадобятся хидеры ядра для архитектуры AMD64. Apt-get их не найдет, поэтому скачаем их с сервера Debian, а затем установим с помощью dpkg:

$ wget http://ftp.us.debian.org/debian/poo...4.8.0-0.bpo.2-amd64_4.8.15-2~bpo8+2_amd64.deb


$ sudo dpkg -i linux-headers-4.8.0-0.bpo.2-amd64_4.8.15-2~bpo8+2_amd64.deb

В ходе установки появится ошибка конфигурации пакета linux-headers-4.8.0-0.bpo.2-amd64. Она же будет возникать при следующих вызовах apt-get. Не обращайте на это внимание, на самом деле пакет установлен.

Приступаем к установке VirtualBox. Добавим нужный репозиторий в /etc/apt/sources.list:

deb tor+http://download.virtualbox.org/virtualbox/debian jessie contrib


Импортируем ключи Oracle:

$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -


$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

Опять же не обращаем внимания на ошибки Wget. Наконец устанавливаем VirtualBox:

$ sudo apt-get update


$ sudo apt-get install virtualbox-5.1

Эта команда установит 32-битную VirtualBox, но собeрет модули для 64-битного ядра. Работать такая связка в основной системе, как я уже говорил ранее, не будет. Но нам это и не нужно, нам необходимы модули. Скопируем их в 64-битное окружение:

$ sudo cp -R /lib/modules ~/Persistent/vbox/lib/


После этого VirtualBox можно удалить. Или не делать ничего, после перезагрузки она исчезнет.

Установка VirtualBox в 64-битное окружение.

Чтобы установить VirtualBox в полученное окружение, надо сделать chroot (сменить корневой каталог) в каталог /Persistent/vbox и проделать те же шаги установки. Но сначала нужно прокинуть в окружение необходимые для его работы виртуальные файловые системы. Для этого создадим в каталоге /Persistent файл fstab-vbox следующего содержания:

/sys /home/amnesia/Persistent/vbox/sys none bind 0 0


/proc /home/amnesia/Persistent/vbox/proc none bind 0 0
/dev /home/amnesia/Persistent/vbox/dev none bind 0 0
/home /home/amnesia/Persistent/vbox/home none bind 0 0
/tmp /home/amnesia/Persistent/vbox/tmp none bind 0 0
/var/tmp /home/amnesia/Persistent/vbox/var/tmp none bind 0 0
/usr/src /home/amnesia/Persistent/vbox/usr/src none bind 0 0

И подключим все перечислeнные в нем файловые системы с помощью такой команды:

$ sudo mount -T ~/Persistent/vbox-fstab -a


Переключаемся в окружение с помощью chroot:

$ sudo chroot vbox /bin/bash


Настраиваем DNS и устанавливаем корневые сертификаты для корректной работы Wget и apt-get:

# echo nameserver 8.8.8.8 > /etc/resolv.conf


# apt-get install ca-certificates

Добавляем репозиторий VirtualBox в /etc/apt/sources.list:

deb http://download.virtualbox.org/virtualbox/debian xenial contrib


Импортируем ключи Oracle:

# wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | apt-key add -


# wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | apt-key add -

Устанавливаем VirtualBox:

# apt-get update


# apt-get install virtualbox-5.1

И наконец запускаем ее:

# modprobe vboxdrv


# modprobe vboxnetflt
# modprobe vboxnetadp
# modprobe vboxpci
# virtualbox

Готово! Мы имеем рабочую 64-битную версию VirtualBox в Tails. Но теперь необходимо сделать так, чтобы виртуальные машины могли выходить в Интернет через Tor. Выход в Интернет будет доступен благодаря отключенному брандмауэеру, но после перезагрузки Tails снова его переконфигурирует, и доступ будет закрыт.

Шаг 3. Организуем выход в Сеть через Tor

Чтобы у виртуальных машин была возможность подключатся к хостам через Tor, воспользуемся функцией прозразчного проксирования трафика Tor в сочетании правилами брандмауэра, перенаправляющими трафик виртуальных машина на 127.0.0.1 и порт прозрачного прокси (9040).

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

$ sudo chroot vbox /usr/bin/vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0


Не спешите выполнять данную команду. Дело в том, что в Tails есть специальный скрипт, который активируется в момент появления в системе нового сетевого интерфейса (например, при подключении USB Wi-Fi адаптера) и рандомизирует его MAC-адрес.

А самое интересное здесь в том, что, если рандомизировать MAC не получится, Tails полностью отключит доступ в Интернет вообще всем приложениям. Нельзя этого допустить, поэтому модифицируем скрипт таким образом, чтобы в случае обнаружения сетевого моста он завершался.

Делается это достаточно просто. Добавляем всего одну строку в начало скрипта (/usr/local/lib/tails-spoof-mac):

if [ "$1" = "vboxnet0" ]; then exit; fi


Теперь надо заставить систему прозрачного проксирования Tor слушать на адресе сетевого моста. Сам прозрачный прокси уже активен в настройках Tor (Tails иcпользует его, чтобы перенаправлять в Tor обращения к доменам .onion), поэтому нужно всего лишь добавить в конфигурацию Tor (/etc/tor/torrc) две строки:

DNSListenAddress 192.168.56.1


TransListenAddress 192.168.56.1

Остается только завернуть трафик сетевого моста в Tor. Для этого можно использовать iptables:

$ sudo iptables -A INPUT -i vboxnet0 -j ACCEPT


$ sudo iptables -A FORWARD -i vboxnet0 -j ACCEPT
$ sudo iptables -t nat -A PREROUTING -i vboxnet0 -p udp --dport 53 -j REDIRECT --to-ports 5353
$ sudo iptables -t nat -A PREROUTING -i vboxnet0 -p tcp --syn -j REDIRECT --to-ports 9040
$ sudo iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE

Однако, так как при обнаружении нового сетевого устройства Tails сбрасывает настройки iptables, надежнее добавить правила в файл /etc/ferm/ferm.conf, который как раз и используется для сброса правил.

Сама конфигурация ferm.conf принадлежит утилите ferm, эдакой надстройке над iptables, которая позволяет задавать правила в более читаемой и удобной форме, чем сам iptables. Добавляем строки в следующие секции:

Секция chain INPUT. Строка:

interface vboxnet0 ACCEPT;


Секция chain FORWARD. Строка:

interface vboxnet0 ACCEPT;


Секция chain PREROUTING. Строки:

interface vboxnet0 proto udp dport 53 REDIRECT to-ports 5353;


interface vboxnet0 proto tcp syn REDIRECT to-ports 9040;

Секция chain POSTROUTING. Строка:

saddr 192.168.56.0/24 MASQUERADE;


Все. Теперь мы гoтовы создать виртуальный сетевой интерфейс и перезапустить Tor:

$ sudo chroot vbox /usr/bin/vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0


$ sudo systemctl restart tor

В результате создания сетевого интерфейса Tails перечитает правила ferm и сам применит наши настройки редиректа. Но это еще не все. Чтобы запущенные в VirtualBox машины могли автоматически настроить сеть (то есть получить информацию о своем IP и адресах DNS-серверов), нам нужен локальный DNS-сервер.

Самый простой вариант получить DNS-сервер на локальной машине — это dnsmasq. Установим его:

$ sudo apt-get install dnsmasq


Внесем в конфиг /etc/dnsmasq.conf необходимые правки:

port=53


interface=vboxnet0
bind-interfaces
dhcp-range=192.168.56.2,192.168.56.254,1h

Перезапустим:

$ sudo systemctl restart dnsmasq


Теперь точно все. Можно запускать VirtualBox:

$ sudo chroot vbox /usr/bin/virtualbox


Но вы должны иметь в виду, что каждую виртуальную машину придется перестраивать на выход в Интернет через интерфейс vboxnet0. Чтобы это сделать, необходимо открыть настройки виртуальной машины и во вкладке Network первого адаптера выбрать "Host-only Adapter", Name: vboxnet0.

Виртуальные машины и ISO-образы необходимо сохранять в каталоге /Persistent/vbox/root, иначе VirtualBox их просто не увидит.

Шаг 4. Автоматизируем запуск VirtualBox

Теперь имеется корректно настроенная VirtualBox для работы в Tails. Но как было сказано выше, остается проблема утери настроек после перезагрузки. VirtualBox и модули ядра останутся на месте, а вот правки спуфера MAC-адресов, ferm и прочее будут утрачены, что вызывает мягко говоря неудобство.

Чтобы решить данную проблему, напишем скрипт, который будет изменять настройки системы автоматически:

#!/bin/bash



copy_spoofer() {
cp tails-spoof-mac /usr/local/lib/tails-spoof-mac
chown root:root /usr/local/lib/tails-spoof-mac
}

copy_ferm() {
cp ferm.conf /etc/ferm/ferm.conf
chown root:root /etc/ferm/ferm.conf
}

setup_chroot() {
mount | grep vbox > /dev/null && return
mount -T vbox-fstab -a
chroot vbox /sbin/modprobe vboxdrv
chroot vbox /sbin/modprobe vboxnetflt
chroot vbox /sbin/modprobe vboxnetadp
chroot vbox /sbin/modprobe vboxpci
}

setup_bridge() {
ifconfig | grep vboxnet0 > /dev/null && return

chroot vbox /usr/bin/vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
}

configure_tor() {
cat /etc/tor/torrc | grep 192.168.56.1 > /dev/null && return

echo DNSListenAddress 192.168.56.1 >> /etc/tor/torrc
echo TransListenAddress 192.168.56.1 >> /etc/tor/torrc
systemctl restart tor
}

configure_dhcpd() {
cat /etc/dnsmasq.conf | grep vboxnet0 > /dev/null 2>&1 && return

apt-get -y install dnsmasq
echo >> /etc/dnsmasq.conf
echo port=53 >> /etc/dnsmasq.conf
echo interface=vboxnet0 >> /etc/dnsmasq.conf
echo bind-interfaces >> /etc/dnsmasq.conf
echo dhcp-range=192.168.56.2,192.168.56.254,1h >> /etc/dnsmasq.conf
systemctl restart dnsmasq
}

copy_spoofer
copy_ferm
setup_chroot
setup_bridge
configure_tor
configure_dhcpd

chroot vbox /usr/bin/virtualbox

Назовем этот скрипт start.sh, разместим в каталоге /Persistent рядом с каталогом vbox и дадим права на исполнение:

$ chmod +x ~/Persistent/start.sh


Скопируем уже исправленные версии /usr/local/lib/tails-spoof-mac и /etc/ferm/ferm.conf в каталог /Persistent:

$ sudo cp /usr/local/lib/tails-spoof-mac ~/Persistent


$ sudo cp /etc/ferm/ferm.conf ~/Persistent

Теперь можно спокойно перезагружать систему, а затем после загрузки запустить VirtualBox командой:

$ cd ~/Persistent


$ sudo ./start.sh

Запустить VirtualBox в Tails оказалось не так просто, но возможно. Это кажется немного странной конфигурацией, но она дает возможность иметь флешку, с помощью которой можно запустить практически любую настольную ОС в полностью анонимизурующей среде, благодаря Tails.

1
12.1K
Написать комментарий

Добавить комментарий

Комментарии 1
avatar
2018-06-29 22:03:22
Проблема на стадии создания каталога vbox, у нас тупо нет выхода в инет для скачивания конфигов и их разворачивания командой $ sudo debootstrap --arch amd64 jessie vbox http://ftp.ru.debian.org/debian Причем не важно, отключали мы брандмауэр или нет
Ответить