Перехоплюємо трафік за допомогою wpad

WPAD - це дуже простий протокол для автоматичної настройки проксі-сервера. У цій статті я розповім, як він улаштований, які можливості для експлуатації він надає з точки зору зловмисника, а також поділюся ідеями, як можна використовувати цю технологію для часткового перехоплення HTTPS-трафіку.

Про протоколі

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

Як працює WPAD

Припустимо, з налаштувань DHCP ми дізналися, що ім'я домену - msk.office.work. Тоді Windows XP спробує знайти його на wpad.msk.office.work (резолвінг домену буде відбуватися через DNS), а потім просто на wpad.office.work.

Windows 7 поводиться по-іншому: спочатку по DNS перевіряє повний домен, потім намагається зарезолвіть ім'я WPAD через Link-Local Multicast Name Resolution. а потім - за допомогою NetBIOS Name Service. Останні два є широкомовними протоколами, які підтримуються Windows починаючи з Vista.

Використання в локальній мережі

Уявімо себе на місці зловмисника, який хоче пустити весь локальний трафік через свій проксі-сервер. Якщо ми знаходимося в тому ж сегменті локальної мережі і можемо використовувати NetBIOS, то можна скористатися готовим NBNS-спуфером з Metasploit.

Перехоплюємо трафік за допомогою wpad
Мал. 3. NBNS-спуфинг в локальній мережі

Якщо ж ми перебуваємо в іншій підмережі, але в нашій мережі є WINS-сервер, ми можемо підняти Windows-хост з ім'ям WPAD, щоб WINS поширив інформацію про нас. Цей кейс цілком робочий: я тестував його в досить великої локальної мережі одного вузу, і на хост, що знаходиться в мережі навіть менше / 24, почали приходити запити з сотень різних IP.

Використання в інтернеті

В даний час існує 861 домен першого рівня. Крім звичних .com. net. ru. org, серед них зустрічаються і більш екзотичні - від .work і .school до .ninja і .vodka. Імена цих доменів цілком можуть бути прописані в опції domain-name DHCP-серверів. Таким чином, якщо в domain-name буде вказано домен .school і ми зареєструємо домен wpad.school, то всі запити за WPAD-файлом потраплять до нас. Причому, якщо подивитися на wpad.TLD доменів першого рівня, ми побачимо наступну картину (рис. 4).

Перехоплюємо трафік за допомогою wpad
Мал. 4. Вільні для реєстрації домени WPAD

Пару років тому я реєстрував домен wpad.co, на який дійсно почали приходити численні запити за файлом wpad.dat. Але є і більш свіжі свідоцтва можливості перехопити те, що нам не призначалося: місяць назад я зареєстрував домен wpad.work. За 11 днів до нього звернулися з 3901 унікального IP.

Перехоплюємо трафік за допомогою wpad
Мал. 5. Кількість звернень до wpad.work: динаміка по днях тижня

Отже, ми змусили користувачів ходити через підконтрольний нам проксі-сервер. Що це нам дає? У разі HTTP-запитів - повний контроль над трафіком: заголовками і тілом запиту і відповіді, всіма параметрами, cookies, дані сабміта форм і так далі.

Перехоплюємо трафік за допомогою wpad
Мал. 6. HTTP-запит через проксі-сервер

У випадку з HTTPS ми побачимо тільки метод CONNECT. Максимум доступної нам інформації - хост і user-agent. На жаль, найцікавіше, тобто дані обміну між клієнтом і сервером після handshake, для нас буде виглядати лише як набір бінарних даних.

Перехоплюємо трафік за допомогою wpad
Мал. 7. HTTPS-запит через проксі-сервер

Back to PAC

Перехоплюємо трафік за допомогою wpad
Мал. 9. Виклик FindProxyForURL в Chrome Рис. 10. Виклик FindProxyForURL в Firefox

Незалежно від того, який браузер використовується, у нас є повний URL. Спробуємо, використовуючи функцію isResolvable, перехопити URL. Для цього закодируем URL таким чином, щоб він був дійсним ім'ям хоста, і допишемо d.wpad.work, в NS-записи якого прописаний наш DNS-сервер, де ми ж відповідаємо на всі запити і логіруем їх.

Отже, за допомогою нехитрих перетворень:

echo 'https058047047example046ru047063token061123.hacker.com' \
| perl -lape 's / .hacker.com $ //; s /.// g; s / 0 (..) / chr ($ 1) / eg; '

Не секрет, що в фрагменті URL (location.hash) часто передаються OAuth-токени. Таким чином, в разі використання Firefox до нас в руки можуть потрапити і вони.

За допомогою WPAD можна, незважаючи на HTTPS, перехоплювати локальний трафік, токени OAuth і іншу інформацію з URL. Те ж можна зробити і в мережі Інтернет, зареєструвавши домен wpad.LTD і спробувавши зловити випадкових жертв на цю пастку.

Тепер, використовуючи наявні у нас знання, подивимося, як захиститися від потенційних атак за допомогою WPAD. Нижче - основні рекомендації, виконання яких дозволить убезпечити свій трафік:

Покажи цю статтю друзям:

Схожі статті