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.
Мал. 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).
Мал. 4. Вільні для реєстрації домени WPADПару років тому я реєстрував домен wpad.co, на який дійсно почали приходити численні запити за файлом wpad.dat. Але є і більш свіжі свідоцтва можливості перехопити те, що нам не призначалося: місяць назад я зареєстрував домен wpad.work. За 11 днів до нього звернулися з 3901 унікального IP.
Мал. 5. Кількість звернень до wpad.work: динаміка по днях тижняОтже, ми змусили користувачів ходити через підконтрольний нам проксі-сервер. Що це нам дає? У разі HTTP-запитів - повний контроль над трафіком: заголовками і тілом запиту і відповіді, всіма параметрами, cookies, дані сабміта форм і так далі.
Мал. 6. HTTP-запит через проксі-серверУ випадку з HTTPS ми побачимо тільки метод CONNECT. Максимум доступної нам інформації - хост і user-agent. На жаль, найцікавіше, тобто дані обміну між клієнтом і сервером після handshake, для нас буде виглядати лише як набір бінарних даних.
Мал. 7. HTTPS-запит через проксі-серверBack to PAC
Мал. 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. Нижче - основні рекомендації, виконання яких дозволить убезпечити свій трафік:
Покажи цю статтю друзям: