Linux Host + Windows VM = Isolation

TL;DR: Linux, FDE, Whonix, Stream Isolation

Зачем нам Linux?

Большинство хакерских инструментов заточено под Windows, но сама система имеет критический недостаток.

Телеметрия - это сбор и отправка данных о вашей машине. Они могут быть довольно чувствительными, вплоть до списка файлов и ввода с клавиатуры. Службу телеметрии можно отключить, но есть сомнения, что этого будет достаточно.

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

Как оставить достоинства Windows, убрав его недостатки? Установить его на виртуальную машину под управлением Linux! Это позволит изолировать Windows, пустив её в сеть через виртуальный роутер, заодно спрятав выходной IP в Tor.

Если вычислительные мощности вашей машины этого не позволяют, вместо виртуального роутера, можно использовать физический. Это выходит за рамки данной статьи, но вполне реально схожим образом настроить обычный роутер с OpenWrt или самодельный на Raspberry. Но, обо всём по порядку.

Выбор дистрибутива

Дистры различаются окружением рабочего стола, пакетным менеджером и набором программ. Мне нравится Ubuntu и сделанные на её базе форки с другим окружением. Выбор сделан из-за наличия проприетарных драйверов и количества информации по настройке. Некоторые предпочитают Fedora. Но вы можете выбрать что-то своё, оценив live-cd на виртуальной машине.

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

Full Disk Encryption

Большинство дистров поддерживает шифрование диска из коробки. Для этого, при установке, необходимо выбрать расширенные опции разметки диска. Система называется LUKS и работает на базе AES-256.

luks

При хорошем пароле, перебор будет нерентабелен. Однако его реально украсть, подменив bootloader, установив аппаратный кейлогер или прочитав из оперативной памяти. Защиту от подобных вещей обсудим позже.

Whonix

В качестве виртуального роутера используем Whonix. Скачаем консольную версию, она требует меньше оперативной памяти. После импорта ova-файла, видим две новые виртуальные машины Whonix-Gateway-CLI и Whonix-Workstation-CLI. Они уже настроены, к первой подключено два сетевых адаптера: NAT и внутренняя сеть. Ведомые машины подключатся только к внутренней сети. Gateway выступает в качестве виртуального роутера, который заворачивает все подключения в Tor.

Стандартные логин и пароль для Whonix - user:changeme

Workstation несет программы, настроенные на работу через uwtwrapper: набор скриптов, вызывающих torsocks и timeprivacy до основного приложения. Они перехватывают системные api в приложении, проксируя подключения через Tor и слегка меняя системное время.

Зачем нужен torsocks, если все подключения на роутер идут через Tor? Stream Isolation. Представьте, что при старте ведомой машины, она обращается к ntp-серверу за актуальным временем, проверяет почту и обновляет браузер. Это может быть уникальной сигнатурой. Все три подключения идут через одну и ту же выходную ноду. Даже при смене маршрута внутри сети, характер трафика укажет на вас. По этой причине не рекомендуется использовать VPN за выходной нодой. Ваша анонимность падает до анонимности VPN-сервера.

Проблема решается выбором отдельного SocksPort для каждого приложения. Tor позволяет открывать любое количество локальных сокс-портов, каждый из которых поведет трафик по новому маршруту. Полистаем их список (q для выхода):

less /etc/torrc.d/65_gateway.conf 

Некоторые имеют опции IsolateDestPort и IsolateDestAddr, принуждающие менять маршрут при смене IP или порта назначения.

Настройка VirtualBox

Для ускорения гостевой машины, стоит включить поддержку виртуализации на уровне физического процессора: VT-X/AVD-V, но надо понимать, что исполнение инструкций на реальном железе открывает путь к атакам уровня Spectre.

Если зажать shift при запуске виртуальной машины, VirtualBox не будет отображать её на экране, что довольно удобно после первичной настройки Gateway

При общих тормозах, добавим логических ядер и оперативной памяти. При фризах графики, имеет смысл добавить видеопамяти и включить 3d acceleration.

Настройка Workstation - Network

Если мы захотим добавить свою виртуалку под Windows, необходимо правильно сконфигурировать сеть. В настройках виртуальной машины выбираем подключение только к Internal Network с тем же именем, которое назначено у второго адаптера Gateway, обычно это “Whonix”. В операционной системе ставим настройки подключения:

  • IP: 10.152.152.50
  • SUBNET: 255.255.192.0
  • GATEWAY: 10.152.152.10
  • DNS: 10.152.152.10

Откуда взялись эти цифры? Выведем список адаптеров на Gateway:

whonix_gateway_ifconfig

Первый адаптер это NAT, подключенный к сети хоста, второй - внутренняя сеть, IP адрес Gateway забит в настройках Whonix и меняться не будет. Для каждой ведомой машины необходимо выбрать свой уникальный IP из той же подсети, как это сделано у родной Workstation:

whonix_gateway_ifconfig

Не спешите использовать машину, осталась пара деталей.

Настройка Gateway - Isolated Proxy

По умолчанию, все пакеты отправленные на gateway переадресуются на TransPort. Это специальный порт для transparent proxy, заворачивающий все подключения в Tor, используя один маршрут для всех приложений.

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

sudo nano /usr/local/etc/whonix_firewall.d/50_user.conf

Дописываем пару строчек:

WORKSTATION_TRANSPARENT_TCP=0  
WORKSTATION_TRANSPARENT_DNS=0

Нажимаем ctrl+o, ctrl+x для сохранения и выхода из редактора.

Настройка Gateway - TorRC

Настроим Tor под себя, ограничив список выходных нод:

sudo nano /usr/local/etc/torrc.d/50_user.conf

Добавим следующий текст:

ExcludeExitNodes {ru},{??}  
GeoIPExcludeUnknown 1  
StrictNodes 1  

Перезагружаем Gateway.

Настройка Workstation - Socks5

Под Linux достаточно воспользоваться услугами uwtwrapper, на Windows выставляем уникальные socks5 или http-proxy необходимым приложениям. Выбираем порт из вышеупомянутого 65_gateway.conf. Для примера, поставим в качестве socks-proxy: 10.152.152.10:9101.

По умолчанию в torrc включены опции IsolateSOCKSAuth и IsolateClientAddr, таким образом можно назначать один и тот же порт разным приложениям, меняя данные авторизации. Так же, обращения к одному порту из под разных виртуальных машин (с разных локальных IP) приведет к изоляции их маршрутов.

Если всё правильно, Windows должна показывать что интернет не подключен, а настроенные приложения будут работать через Tor.

Тестируем

Установим curl под Windows или через пакетный менеджер на Linux. Воспользуемся тем фактом, что сервисы отображающие IP, при определённом User-Agent, отдают IP прямым текстом. При текущих настройках, напрямую DNS работать не будет, но socks5 позволяет делать DNS-запросы через себя:

curl -x socks5h://10.152.152.10:9101 ip.me  
curl -x socks5h://10.152.152.10:9102 ip.me  
curl -x socks5h://user:pass@10.152.152.10:9101 ip.me  
curl ip.me

Последний запрос работать не должен, в остальных видим разные выходные адреса!