23.11.2018

Генерирование случайного трафика для сокрытия персональных данных от интернет-провайдера

image

Никакого сетевого нейтралитета не существует, и ваш интернет-провайдер может собирать любую информацию, какую захочет

Автор: Hoid

Никакого сетевого нейтралитета не существует, и ваш интернет-провайдер может собирать любую информацию, какую захочет. Частично конфиденциальность можно защитить при помощи VPN, но этот метод не является совершенным. Альтернативный вариант: утилита Noisy, разработанная Итаем Хари, которая позволяет закидать вашего провайдера случайными HTTP/DNS-запросами так, что даже если информация будет перехвачена, то не будет представлять особой ценности.

Если за последний год вы не вылезали из своей берлоги и не знакомы с понятием сетевого нейтралитета, попробую ввести вас быстро в курс дела.

Недавно в США вышел закон, который аннулирует сетевой нейтралитет. То есть теперь провайдер на законных основаниях может собирать информацию о вашей деятельности в интернете без вашего ведома и согласия. На практике сей факт означает, что будут собираться IP-адреса, которые легко могут быть преобразованы в физическое местонахождение, история посещения сайтов и содержимое страниц, просмотренных вне протокола HTTPS, включая информацию, отправленную через веб-формы. В фонде электронных рубежей (Electronic Frontier Foundation; EFF) полагают, что провайдеры могут пойти еще дальше и начать продавать собранные сведения на сторону.

Для защиты от этого произвола нам поможет утилита Noisy, представляющая собой простой скрипт, написанный на Python, который генерирует случайный HTTP/DNS-трафик в фоновом режиме, пока вы просматриваете сайты. Таким образом, ваша информация теряет уникальность становится бесполезной для маркетологов и компаний, занимающихся анализом подобного рода сведений.

Идеи, реализованные в Noisy, не являются чем-то новым, и были подчерпнуты из Squawk, представляющим собой скрипт, внедряемый на веб-страницах для отсылки дополнительных случайных запросов. Однако Noisy проще использовать и модифицировать.

Рассмотрим пошагово, как настроить и запустить этот инструмент.

https://www.youtube.com/watch?v=iCKj0La4Grg

Шаг 1: Установка зависимостей

У вас должен быть установлен Python. В Kali Linux все необходимое уже есть по умолчанию. Noisy совместим с версиями 2.7 и 3.6. Для проверки версии Python в вашей системе введите следующую команду:

python -V

В Noisy используется модуль Requests, который можно установить при помощи следующей команды:

pip install requests

Кроме того, еще большую пользу от Noisy можно получить, если установить Docker, поскольку в этом случае вы сможете изолировать трафик в ограниченной среде как отдельный канал. Однако использование Docker не является обязательным.

Шаг 2: Клонирование Noisy из GitHub

После того как Python и все нужные зависимости установлены, загружаем Noisy из репозитория при помощи команды git:

git clone https://github.com/1tayH/noisy.git

Альтернативный вариант: зайти в репозиторий и загрузить .zip файл. Вначале нажмите на кнопку «Clone or download» и в открывшемся контекстном меню выберите пункт «Download ZIP». После загрузки распакуйте содержимое архива.

Рисунок 1: Загрузка архива из репозитория

Шаг 3: Знакомство с конфигурационным файлом

Теперь нужно отредактировать конфигурационный файл. Несмотря на то, что для корректной работы Noisy изменять настройки не требуется, попутно мы сможем разобраться, как работает программа. Вначале переходим в директорию с распакованным архивом при помощи команды cd:

cd noisy

Затем откройте файл config.json в вашем любимом текстовом редакторе. В качестве примера используем Vim:

vim config.json

Альтернативный вариант: на рабочем столе зайти папку «Files», а затем в директорию «noisy» и открыть файл config.json в редакторе Notepad++.

Информация в файле хранится в формате JSON. Noisy берет первый адрес из списка «root_urls» и ждет случайное время в диапазоне между «min_sleep» и «max_sleep» (в секундах) перед тем, как кликнуть на случайную ссылку на странице. Глубина просмотра указана в параметре «max_depth». После завершения просмотров страниц на текущем сайте, берется следующий адрес из списка и так далее.

{
    "max_depth": 25,
    "min_sleep": 3,
    "max_sleep": 6,
    "timeout": false,
    "root_urls": [
        "http://4chan.org",
        "https://www.reddit.com",
        "https://www.yahoo.com",
        "http://www.cnn.com",
        "https://p---hub.com",
        "https://www.ebay.com",
        "https://wikipedia.org",
        "https://youtube.com",
        "https://github.com",
        "https://medium.com",
        "https://thep-----bay.org",
    ],
    "blacklisted_urls": [
        "https://t.co",
        "t.umblr.com",
        "messenger.com",
        "itunes.apple.com",
        "l.facebook.com",
        "bit.ly",
        "mediawiki",
        ".css",
        ".ico",
        ".xml",
        "intent/tweet",
        "twitter.com/share",
        "dialog/feed?",
        ".json",
        "zendesk",
        "clickserve",
        ".png"
    ],
    "user agents": [
        "there are many user agents here!"
    ]
}

Как вы могли заметить, есть некоторые особенности, связанные с настройками. Во-первых, в списке «root_urls» всего 11 адресов. Во-вторых, при посещении некоторых сайтов в вышеуказанном списке могут возникнуть проблемы.

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

Поскольку в файле config.json мало адресов, весь список будет пройден за не очень большое время. Как итог, потенциально может появиться опознаваемый кусок информации, который легко будет отфильтрован.

Шаг 4: Добавление сайтов в конфигурационный файл

Чтобы избежать вышеупомянутой проблемы, я создал альтернативный конфигурационный файл. Я решил, что миллиона адресов будет вполне достаточно, загрузил первый миллион сайтов из рейтинга Alexa и прогнал этот список более пяти раз через простейший скрипт-рандомизатор, написанный на Python. Полученный перечень был скопирован в файл config.json. Теперь трафик, генерируемый утилитой Noisy, будет более случайным.

Мой конфигурационный файл размером более 25 Мб можно загрузить, если зайти на GitHub-страницу и либо кликнуть правой кнопкой мыши на кнопку «Download» и в контекстном меню выбрать «Save Link As», либо нажать на кнопку «Download», после чего содержимое файла загрузится в браузере, и вы сможете сохранить страницу. После загрузки не забудьте заменить оригинальный конфигурационный файл в папке «noisy».

Если вы решите сделать свой собственный список сайтов, помните, что информация хранится в формате JSON, и каждый адрес должен быть заключен в двойные кавычки с запятой на конце. Кроме того, я всегда добавляю префикс https://, чтобы вначале попробовать зайти на сайт через протокол HTTPS. Пример:

"https://website.com",

Шаг 5: Рандомизация трафика

После обновления файла config.json все готово для рандомизации трафика. При помощи команды cd зайдите в директорию noisy и запустите скрипт noisy.py с аргументом в виде конфигурационного файла:

cd noisy
python noisy.py --config config.json

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

INFO:root:Visiting https://azerbaijantourism.az/about
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): azerbaijantourism.az
INFO:root:Visiting https://azerbaijantourism.az/
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): azerbaijantourism.az
INFO:root:Visiting https://azerbaijantourism.az/booking-conditions
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): azerbaijantourism.az

Чтобы остановить скрипт, нажмите комбинацию клавиш Ctrl-C.

Шаг 6: Другие параметры в Noisy

Когда Noisy не запущен, используйте аргумент h или help для ознакомления с другими опциями, как, например, установка таймаута.

python noisy.pyhelp

Полный перечень аргументов:

noisy.py [-h] [--log -l] --config -c [--timeout -t]
 
опциональные аргументы:
  -h, --help    справка
  --log -l      уровень журналирования событий
  --config -c   конфигурационный файл
  --timeout -t  продолжительность работы паука в секундах

Шаг 7: Запуск Noisy через Docker (необязательно)

Как говорилось выше, можно поместить Noisy в контейнер на базе Docker при помощи следующей команды (но вначале нужно установить Docker):

docker build -t noisy .

Вы даже можете сделать сборку для устройства Raspberry Pi с операционной системой Raspbian, если хотите вынести рандомизатор трафика в отдельное место.

docker build -f Dockerfile.pi -t noisy .

После того как сборка выполнена, запуск осуществляется при помощи следующей команды:

docker run -it noisy --config config.json

Шаг 8: Увеличение объемов случайного трафика (необязательно)

Изучая конфигурационный файл, вы могли заметить, что задержка устанавливается в секундах. Сей факт означает, что наименьшая задержка может быть равна одной секунде, если настроить конфигурацию так:

"min_sleep": 0,
"max_sleep": 1,

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

Используя Docker-compose, мы можем запустить одновременно несколько контейнеров для генерации неограниченных объемов трафика. Нужно зайти в папку examples, собрать новый образ и запустить сборку на том количестве контейнеров, которое вам необходимо:

cd examples/docker-compose
docker-compose build
docker-compose up --scale noisy=<number-of-containers>

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

Как вы могли убедиться, Noisy – чрезвычайно простая утилита, и после некоторых настроек, вы получаете невероятно мощный инструмент, который должен стать вашим повседневным инструментом, если вы заботитесь о своей конфиденциальности.

Спасибо за внимание. Вы всегда можете связаться со мной через твиттер @The_Hoid.