PDA

Просмотр полной версии : Криптоанонимная портативная система для работы с Internet



stayer
07.12.2012, 15:08
Наткнулся на неплохую статью (весна 2012) с рецептом создания портативноый защищенной анонимной системы для работы с Internet.

Предлагается использовать только продукты открытых свободных проектов, обладающие кроссплатформенностью. Получающаяся сборка должна обладать свойствами портативности. Большинство элементов сборки хорошо известны и описаны на форуме в этом разделе. Это система шифрования TrueCrypt (http://forum.dpni.org/showthread.php?t=6206), виртуальная машина VirtualBox, операционная система Ubuntu Linux (http://forum.dpni.org/showthread.php?t=14666) (которая будет работать в виртуальной машине), системы анонимизации Tor и I2P (http://forum.dpni.org/showthread.php?t=33274). Наличие виртуальной машины позволяет снять ряд угроз и ограничений при применении анонимизаторов, в т.ч. проблему наличия следов использования програм, настройка встроенного файервола iptables позволит исключить несанкционированный доступ в сеть минуя анонимизаторы, шифрование файлов виртуальной ОС позволяет сохранить приватность в случае утери носителя с системой. Наконец портативность позволяет использовать систему на чужих компьютерах с флэшки.

Сама статья к сожалению не очень подробная, но содержит вполне годные рецепты.



Строим защищённую систему на основе Tor и I2P

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

На провокации вида «при помощи такой системы можно слить гостайну врагу» я отвечаю сразу: при помощи ядерных ракет можно не только устроить конец света, но и отогнать или расколоть угрожающий нашей планете астероид.

Что нам потребуется?

Во-первых, это компьютер достаточной производительности с большим объёмом оперативной памяти. Его операционная система значения не имеет, поскольку устанавливаемое на него ПО кроссплатформенно. Ну, разве что, за исключением экзотических или совсем уж древних ОС.

Во-вторых, программное обеспечение. Я перечислю его в порядке, в котором оно потребуется в построении системы:


TrueCrypt (http://truecrypt.org/)
VirtualBox (качать с официального сайта пока не торопитесь)
Ubuntu (http://ubuntu.com/). Я делал на версии 11.10 x86, поскольку 12.04 на тот момент не было. Поставьте образ качаться прямо сейчас, чтобы не терять времени. На диск резать не надо.
TOR
I2P

Обращаю внимание, что всё вышеперечисленное ПО имеет открытый код. Это очень важно, поскольку эти программы — ядро нашей безопасности, и какая-нибудь проприетарная закладка могла бы очень дорого обойтись.

Начнём!

Для того, чтобы защитить данные от прямого захвата жёсткого диска, нам необходимо их зашифровать. Для этого мы будем использовать утилиту TrueCrypt.

Создадим с её помощью зашифрованный том, хранящийся в файле. Можно создать и на разделе, но, на мой взгляд, это менее удобно.

Создавать ли скрытый том? Вопрос неоднозначный. Эта фича предназначена для использования в Англии, где невыдача паролей при конфискации ПК сама по себе является преступлением. В то же время в России такой законодательной нормы нет, а использование скрытого раздела съедает полезный объём диска. Я создавать скрытый раздел не стал.

Размер раздела выберем на своё усмотрение. Лично я выбрал 50 ГБ.

Алгоритм шифрования — я выбрал AES. Во-первых, ему доверяют американские военные для защиты высших грифов секретности, а во-вторых, он аппаратно ускоряется новыми процессорами Intel и TrueCrypt имеет поддержку этого ускорения.

Далее всё стандартно: придумываем сложный и длинный пароль, генерируем энтропию хаотичными движениями мыши и создаём раздел. Тип раздела обязательно должен быть NTFS, поскольку в нём будут храниться большие файлы.

Далее нам потребуется виртуальная машина. Всё, что мы оберегаем — будет храниться в ней.
Связано это с тем, что:


работа в основной ОС оставляет в различных местах разнообразные следы;
если основная ОС проприетарна (не буду показывать пальцем) — в ней не исключено наличие закладок;
прикладное ПО в основной ОС тоже подпадает под предыдущее требование (вспомним PunkBuster, EULA которого позволяет сканировать жёсткий диск пользователя).

Мы будем использовать VirtualBox, но не основной дистрибутив, а портативный (http://www.vbox.me/). Скачаем инсталлятор на заранее примонтированный шифрованный диск, запустим и скачаем поддерживаемый дистрибутив Бокса посредством самой утилиты. Далее утилита распакует его и настроит на портативность.

Создадим в Боксе машинку с двумя жёсткими дисками: одним — на 8-10 ГБ и вторым на всё оставшееся место, разумеется, расположив оба на шифрованном диске. Пройдёмся по настройкам, поставим сеть в NAT и настроим остальное по своему вкусу — особо критичного там ничего нет. Подключим образ Убунты (который, надеюсь, уже скачался) в качестве дисковода.

Запускаем машину и начинаем установку ОС. При разбиении дисков поступим примерно так: разместим на первом, маленьком, корень и своп, а на большом — /home. Все данные мы будем хранить в /home. Таким образом, разделение системы и данных происходит между разными файлами жёстких дисков Бокса. Далее всё выполняем по своему вкусу.

Установилось! Теперь начинаем настройку.

Идея заключается в том, чтобы оставить прямой доступ в сеть только двоим избранным — маршрутизаторам TOR и I2P.

Сначала ставим TOR из их собственного репозитория (в официальном версия может быть устаревшей) по инструкции с официального сайта (https://www.torproject.org/docs/debian.html.en). Потом поставим и I2P, опять же из собственного PPA-репа разработчиков — инструкция (http://www.i2p2.de/debian.html).

Обратим внимание, что TOR сам по себе предоставляет только SOCKS5-прокси, и его поддержка есть не во всех программах. Поэтому установим Polipo — свободный HTTP-прокси:
sudo apt-get install polipo

Настроим его:
sudo nano /etc/polipo/config

Добавим в него строчку:
proxyPort = 8118

Ниже раскомментируем (или подправим, если что-то не так):
socksParentProxy = "localhost:9050"
socksProxyType = socks5

Сохраним. Перезапустим Полип:
sudo service polipo restart

Теперь настроим I2P:
sudo nano /etc/default/i2p

Включим запуск в качестве демона:
RUN_DAEMON="true"

Заодно видим в файле имя пользователя, от которого работает маршрутизатор — у меня это i2psvc
Сохраняем.
Запускаем: sudo service i2p start

Теперь узнаем пользователя, от которого работает TOR:
lsof -c tor

У меня это debian-tor.

И теперь — самое вкусное: рубим доступ в сеть всему, что не TOR и не I2P. Ещё раз — всему.
Вот готовый скрипт iptables-restore, только проверьте ещё раз имена пользователей.
Общая политика DROP, разрешён доступ всем на локалхост, I2P и TOR — во внешнюю сеть.
sudo nano /etc/iptables.up.rules

Содержимое:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A OUTPUT -d 127.0.0.1/32 -j ACCEPT
-A OUTPUT -m owner --uid-owner debian-tor -j ACCEPT
-A OUTPUT -m owner --uid-owner i2psvc -j ACCEPT
COMMIT

Откроем файл настройки сети:
sudo nano /etc/network/interfaces

Допишем команду загрузки правил:
pre-up iptables-restore < /etc/iptables.up.rules

У меня выглядит так:
auto lo
iface lo inet loopback
pre-up iptables-restore < /etc/iptables.up.rules

Поскольку управление сетью у меня идёт посредством network-manager — интерфейса eth0 в файле нет. Правила прописываются при поднятии лупбэка, но разницы нет, поскольку эти правила едины для всех интерфейсов.

Загрузим правила в iptables. Можно перезапустить сеть, но мы сделаем так:
sudo iptables-restore < /etc/iptables.up.rules

Готово! Крепость построена, ров вырыт, лучники на стенах выставлены. Но мы ещё не раздали пропуска её жителям! Исправим.
Для доступа во внешний интернет лучше применять TOR, HTTP-интерфейс которого у нас на 8118 порту.
nano ~/.bashrc

Допишем в конец:
export http_proxy="http://127.0.0.1:8118/"

Теперь в терминале просто
bash
При этом шелл перечитает свой конфиг. Однако apt, без которого в Убунте — как без воды (и ни туды, и ни сюды), чихать хотел на эту переменную окружения. Разъясним ему персонально внутриобъектный режим нашей крепости:
sudo nano /etc/apt/apt.conf.d/proxy

Там должно быть:
Acquire::http::Proxy "http://127.0.0.1:8118/";
Сохраняем, закрываем.

Ну вот вроде и всё. Теперь осталось поставить браузер (если чем-то не нравится установленный по умолчанию Фокси) и начинать пользоваться не очень быстрым, зато защищённым со всех сторон доступом. И повторюсь — программа внутри виртуалки может быть нашпигована хоть тысячей закладок — данные она, может, и сольёт, только они будут анонимными. Вычислить внешний IP не удастся никому.

Однако (спасибо amarao (http://habrahabr.ru/users/amarao/) за дополнение) смотрите внимательно, какие программы вы запускаете от рута! Поскольку вредоносная программа может обойти защиту двумя способами: прописав своё вредоносное правило в iptables или внедрив шпионский модуль ядра. Обе процедуры требуют рут.

Систему строил полностью своими силами, не опираясь на готовые How-To (если такие вообще существуют, я не нашёл). Поэтому буду рад принять от читателей возможные усовершенствования и указания на недочёты.

Спасибо за внимание! Надеюсь, хоть кому-нибудь я пользу принёс.

http://habrahabr.ru/post/143516/

Людота Коваль
07.12.2012, 15:59
А смысл какой заморачиваться ? Не проще ли скачать Tails (https://tails.boum.org/)на котором уже все настроено ? Записал CD и вперед. А данные можно хранить на примонтированном зашифрованным тем же TrueCrypt диске.

stayer
07.12.2012, 16:24
Tails не скрывает данные железа. Тут весь смысл в том, что настоящее железо подменяется виртуальным и даже если некий зловредный js-скрипт или флэш-код похитят некие идентификаторы, то никакой ценности для атакующего они иметь не будут. Потом для запуска Tails необходимо загрузиться с флэшки или CD и потом выйти сеть, а это не всегда возможно. Данный же рецепт должен работать в штатной ОС (не привлекая внимания, например, на работе), для запуска достаточно воткнуть флэшку и запустить виртуалку.