LINUX.ORG.RU

Tor browser в клетке

 , ,


3

1

В свете выхода tor browser 5.0 (Вышел Tor Browser 5.0) думаю попробовать доделать то, что когда-то начинал. Может, кому-то еще решение, если будет найдено, покажется полезным. Задача формулируется так:

Во в целом доверенной системе запускать tor browser (далее TB) изолированно, не давать ему никаким образом (в т.ч. из дополнений типа flash) открывать прямые соединения, читать пользовательские файлы. То есть не доверять TB, предполагать наличие в нем уязвимостей (чтение файлов, деанонимизация, выполнение кода и т.п.).

Решил, что нужно запускать TB от имени специально обученного пользователя (допустим, toruser). Этот пользователь имеет шелл /bin/false, не может читать файлы полноценного пользователя и на уровне пакетного фильтра ограничен открытием соединений только с локалхостом, с портами tor. Сам сервис tor запущен под другим пользователем (скажем, tor), чтобы на него не распространялись ограничения пакетного фильтра. Очевидно, в этом случае нужно настроить TB таким образом, чтобы он не запускал собственный сервис tor (по умолчанию он это делает), а подключался к системному. Чтобы TB запустился, ему нужно подключаться к xserver, т.е. необходимо куку авторизации на сервере ему при запуске передавать. Да, это своего рода слабое место, т.к. через уязвимость в TB можно грабить экран и логировать клавиатуру, и даже можно теоретически проэксплуатировать уязвимость в xserver и получить root (где там ваш wayland?). Но пока видимо это неизбежное зло, если не хочется прибегать к честной виртуализации (которая, впрочем, тоже может быть дырявой).

Я ниже выложу свои скрипты, которые такой сетап позволяют (кое-как) использовать, но скажу заранее, что он у меня не прижился, т.к. по непонятным причинам TB в песочнице вел себя неадекватно. В целом работал, но иконка управления сервисом tor показывала, что тор выключен, а при попытке открыть любое (!) меню, в т.ч. контекстное браузер зависал на минуту где-то, потом, правда, приходил в себя. Хочется отладить эти проблемы и заодно провести аудит безопасности силами лоровских спецов по всему.

скрипт запуска TB

#!/bin/sh
# start tor browser under user toruser
sudo cp $HOME/.Xauthority /home/toruser/.Xauthority
sudo chown toruser:root /home/toruser/.Xauthority
sudo -u toruser XAUTHORITY=/home/toruser/.Xauthority tor-browser-en
anonymous3 ()

/etc/iptables/torbrowser-in-jail.rules

# Generated by iptables-save v1.4.21 on Thu May 28 19:20:10 2015
*filter
:INPUT ACCEPT [136:24317]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [36:2396]
-A OUTPUT -d 127.0.0.0/8 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m owner --uid-owner toruser -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Thu May 28 19:20:10 2015
# Generated by iptables-save v1.4.21 on Thu May 28 19:20:10 2015
*nat
:PREROUTING ACCEPT [247:27862]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [19:1258]
:POSTROUTING ACCEPT [19:1258]
-A OUTPUT -o lo -j RETURN
-A OUTPUT -p udp -m udp --dport 53 -m owner --uid-owner 1002 -j REDIRECT --to-ports 9053
-A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m owner --uid-owner toruser -j REDIRECT --to-ports 9052
COMMIT
# Completed on Thu May 28 19:20:10 2015

Насчет конфига iptables у меня больше всего вопросов - я не уверен, что он в точности верный. Он должен не создавать никаких сложностей никому, кроме пользователя toruser, последнего должен редиректить с udp 53 на localhost 9053 а весь tcp на 9052. Соединения с любым хостом кроме локалхоста должен банить.

Что кстати значат странные числа в квадратных скобках в выхлопе iptables-save? Типа, [19:1258]

anonymous3 ()
Ответ на: /etc/iptables/torbrowser-in-jail.rules от anonymous3

Re: /etc/iptables/torbrowser-in-jail.rules

Что кстати значат странные числа в квадратных скобках в выхлопе iptables-save? Типа, [19:1258]

       -c, --counters
              include the current values of all packet and byte counters in the output
anonymous ()

честной виртуализации (которая, впрочем, тоже может быть дырявой

с этого места по подробней пожалуйста

snaf ★★★★★ ()
Ответ на: комментарий от snaf

Были новости о возможности выйти из песочницы виртуальной машины в qemu и других гипервизорах.

anonymous3 ()

Продолжим. Нам нужно настроить сам tor, а именно разрешить удаленное управление и установить для него пароль.

Открываем /etc/tor/torrc и раскомментируем там строчку

#ControlPort 9051
Для получения хэшированного пароля делаем
$ tor --hash-password <наш_пароль>

Сам пароль получаем с помощью pwgen -s 79 1

Хэшированный пароль записываем в torrc.

Еще нужно дописать строчки в torrc:

DNSPort 9053
TransPort 9052

Это включает dns-резолвинг через тор и прозрачное тунеллирование TCP.

anonymous3 ()
Ответ на: комментарий от anonymous3

Номера портов DNSPort и TransPort должны совпадать с таковыми в правилах iptables, без файрволла эти пляски ничего не дают.

Далее запускаем TB (с помощью скрипта Tor browser в клетке (комментарий)) и открываем about:config.

Там нужно поменять настройки, перечисленные в скрипте запуска TB (который появляется в $HOME/.tor-browser-en/INSTALL/Browser/start-tor-browser), но не все а только эти:

extensions.torbutton.banned_ports       [...],9050,9051
extensions.torbutton.socks_port          9050
extensions.torlauncher.control_port      9051
extensions.torlauncher.start_tor         false

network.proxy.socks_port                 9050
anonymous3 ()
Ответ на: комментарий от anonymous3

После этого скрипт запуска дополняем паролем управления tor (т.е. меняем скрипт из Tor browser в клетке (комментарий)) на такой:

#!/bin/sh
# start tor browser under user toruser
sudo cp $HOME/.Xauthority /home/toruser/.Xauthority
sudo chown toruser:root /home/toruser/.Xauthority
sudo -u toruser \
    XAUTHORITY=/home/toruser/.Xauthority \
    TOR_CONTROL_PASSWD="'нехэшированный_пароль'"
    tor-browser-en

Важен вид кавычек в переменной TOR_CONTROL_PASSWD, ни с какой другой комбинацией работать не будет.

anonymous3 ()
Ответ на: комментарий от anonymous3

Эх, забыл континуэйшн бэкслеш в предпоследней строке.

После этого скриптом можно запускать TB и наслаждаться зависанием интерфейса при попытках открыть меню :(

Однако, если не включать файрволл (iptables -F, iptables -F -t nat), то все работает примерно как должно.

anonymous3 ()
Ответ на: комментарий от anonymous3

Я пользовался статьей в https://wiki.archlinux.org/index.php/Tor#Transparent_Torification для настройки, хотя там и немного иную задачу решают.

В тред призываются специалисты по iptables, способные указать на ошибки в правилах. Требуется для конкретного пользователя прозрачно торифицировать весь трафик, включая dns.

anonymous3 ()
Ответ на: комментарий от ivlad

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

anonymous3 ()

Йоанна Рутковская предлагает тебе синюю и красную таблетку. Какую выберешь?

exception13 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.