Oniux: изоляция Tor на уровне ядра для любого приложения Linux.

При запуске приложений и сервисов, критически важных для конфиденциальности, важно что бы каждый пакет действительно проходил только через Tor. Одна опечатка в настройке прокси-сервера или один системный вызов за пределами оболочки SOCKS — и ваши данные внезапно оказываются скомпрометированы.
Вот почему сегодня разработчики рады представить oniux: небольшую утилиту командной строки, обеспечивающую изоляцию сети Tor для сторонних приложений, использующих пространства имен Linux. Построенный на Arti и onionmasq, oniux сбрасывает любую программу Linux в свое собственное сетевое пространство имен, чтобы направить ее через Tor и устранить возможность утечки данных. Если ваша работа, активизм или исследования требуют надежной изоляции дорожного движения, oniux предоставляет ее.
Что такое пространства имен Linux? 🐧.
Пространства имен — это функция изоляции в ядре Linux, которая была представлена примерно в 2000 году. Она обеспечивает безопасный способ изоляции определенной части приложений от остальной системы. Пространства имен бывают разных форм и видов. Некоторые к примеру включают сетевые пространства имен, пространства имен для монтирования, пространства имен процессов и другие. Каждое из них изолирует определенное количество системных ресурсов от приложения.
Что мы подразумеваем под системными ресурсами? В Linux системные ресурсы доступны глобально для всех приложений в системе. Наиболее заметным примером этого, вероятно, являются часы вашей операционной системы, но есть и много других областей, таких как список всех процессов, файловая система и список пользователей.
Пространства имен контейнеризируют определенную часть приложения из остальной части операционной системы; это именно то, что в Docker используется для того, чтобы обеспечить изоляцию.
Tor+Пространства имен=❤️.
Как было сказано выше, пространства имен являются мощной функцией, которая дает возможность изолировать доступ к сети Tor для произвольного приложения. Каждое приложение помещается в сетевое пространство имен, которое не предоставляет доступ к общесистемным сетевым интерфейсам (таким как eth0), а вместо этого оно предоставляет пользовательский сетевой интерфейс onion0.
Это позволяет изолировать произвольное приложение через Tor наиболее безопасным с точки зрения программного обеспечения способом, предлагаемым ядром операционной системы. В отличие от SOCKS, из приложения не могут случайно утечь данные, т.к. оно не сумеет установить какое-либо соединение через настроенный SOCKS, что может произойти из-за ошибки разработчика.
Oniux против Torsocks.
Возможно, вы также слышали об инструменте с аналогичной целью, известном как torsocks, который работает путем перезаписи всех связанных с сетью функций libc таким образом, чтобы направлять трафик через SOCKS-прокси, предлагаемый Tor. Хотя этот подход является более кроссплатформенным, у него есть заметный недостаток, заключающийся в том, что приложения, выполняющие системные вызовы не через динамически связанную библиотеку, будь то со злым умыслом или нет, будут допускать утечку данных. В частности, это исключает поддержку чисто статических двоичных файлов и приложений из экосистемы Zig.
Ниже приведено базовое сравнение oniux и torsocks:
oniux Автономное приложение
Использует пространства имен Linux
Работает только со всеми приложениями
Вредоносное приложение не может утечь
Только Linux
Новые и экспериментальные
Использует Arti
Написано на Rust
torsocks Требуется запуск демона Tor
Использует хак предварительной загрузки ld.so
Работает только с приложениями, выполняющими системные вызовы через libc
Вредоносное приложение может утечь, выполнив системный вызов через необработанную сборку
Кроссплатформенность
Проверенное более 15 лет
Использует CTor
Написано на C
Как можно использовать oniux? 🧅
Во-первых, вам нужна система Linux с установленным набором инструментов Rust. После этого вы можете установить oniux с помощью следующей команды:
$ cargo install --git https://gitlab.torproject.org/tpo/core/oniux oniux@0.4.0
Как только это будет сделано, вы готовы приступить к использованию oniux! 🙂
Использовать oniux очень просто:
# Выполните простой HTTPS-запрос с помощью oniux!
$ oniux curl https://icanhazip.com
<A TOR EXIT NODE IP ADDRESS>
# oniux также поддерживает IPv6, конечно!
$ oniux curl -6 https://ipv6.icanhazip.com
<A TOR EXIT NODE IPv6 ADDRESS>
# Тор без .onion доменов это как автомобиль без двигателя…
$ oniux curl https://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/index.html
# Вы также можете включить ведение журнала, если вам он необходим. 🤓
$ RUST_LOG=debug oniux curl https://icanhazip.com
# При желании вы можете «торифицировать» всю свою оболочку, изолировав все процессы внутри!
$ oniux bash
# Если вы работаете в среде рабочего стола, вы также можете изолировать графические приложения!
$ oniux hexchat
Как это работает внутри системы? ⚙️
Oniux работает путем запуска дочернего процесса с помощью системного вызова clone(2), который изолирован в своей собственной сети, монтировании, PID и пользовательском пространстве имен. Затем этот процесс монтирует свою собственную копию /proc, за которой следуют сопоставления UID и GID с соответствующими UID и GID родительского процесса.
После этого он создает временный файл с записями сервера имен, который затем будет привязан к /etc/resolv.conf
, так что приложения, работающие внутри, будут использовать пользовательский резольвер, поддерживающий разрешение через Tor.
Далее, дочерний процесс использует onionmasq для создания интерфейса TUN с именем onion0
, за которым следуют некоторые операции rtnetlink(7)
, необходимые для настройки интерфейса, такие как назначение IP-адресов.
Затем дочерний процесс отправляет файловый дескриптор интерфейса TUN через сокет Unix Domain родительскому процессу, который ждал этого сообщения с момента выполнения первоначального clone(2)
.
Как только это будет сделано, дочерний процесс утрачивает все свои возможности, которые были предоставлены как часть корневого процесса в пользовательском пространстве имен.
Наконец, команда, предоставленная пользователем, выполняется с использованием средств, предоставляемых стандартной библиотекой Rust.
Oniux является экспериментальным. ⚠️
Хотя этот раздел не должен отговаривать вас от использования oniux, вы должны иметь в виду, что это относительно новая функция, которая использует новое программное обеспечение Tor, такое как Arti и onionmasq.
Хотя на данный момент все уже работает так, как ожидалось, такие инструменты, как torsocks, существуют уже более 15 лет, что делает их более предсказуемыми.
Но мы хотим достичь аналогичного состояния с oniux, поэтому, пожалуйста, проверьте это!