Могу ли я захватить URL-адреса https (CONNECT) с помощью winpkfilter?

Я пытаюсь определить, какие URL-адреса https открываются на моем локальном компьютере. Я установил winpkfilter и пытаюсь использовать C# для захвата трафика.

Я могу нормально перехватывать пакеты и даже могу видеть запросы GET и POST в трафике, который не зашифрован (стандартные запросы к сайтам по HTTP)

Мой вопрос:

Можно ли определить, какие URL-адреса HTTP-S (CONNECT) открываются? например, https://facebook.com

Подскажите, пожалуйста, если это возможно. Я не могу использовать fiddler или любой другой прокси-инструмент и для этого должен использовать сетевой драйвер. Скажите, пожалуйста, возможно ли это, и если нет, то какое альтернативное решение?

Спасибо

РЕДАКТИРОВАТЬ

Я должен сделать это на локальном компьютере, где я запускаю свое примерное приложение с правами администратора. Мне просто интересно, смогу ли я добиться этого без прокси. Если пользователь открывает URL-адрес https://www.google.com, я хочу зафиксировать только это. Нужна ли мне по-прежнему реализация посредника, чтобы получить этот URL-адрес CONNECT HTTPS? Пожалуйста, уточните. Очень признателен.


person Steve Johnson    schedule 04.08.2013    source источник
comment
CONNECT — это метод для прокси-серверов HTTPS для создания непрозрачного туннеля. Это вообще не относится к вашему вопросу. Ресурсы HTTPS запрашиваются с помощью обычных GET, POST и т. д.   -  person Eugene Mayevski 'Callback    schedule 05.08.2013
comment
Меня интересует определение того, какой ресурс https был запрошен, и нужно ли отбрасывать этот пакет или нет... Итак, вы говорите, что невозможно определить по самому пакету, какой ресурс https был запрошен?   -  person Steve Johnson    schedule 06.08.2013
comment
Да, я говорил именно об этом в комментарии к моему ответу ниже.   -  person Eugene Mayevski 'Callback    schedule 06.08.2013


Ответы (2)


Да, это верно, невозможно извлечь полный URL-адрес без MITM. Чтобы организовать это, вам нужно будет использовать WinpkFilter для перенаправления исходящего сеанса HTTPS на локальный прокси-сервер HTTPS и реализовать некоторую проксификацию SSL.

Однако существует ограниченная, но альтернатива. С помощью WinpkFilter вы можете перехватывать DNS-запросы/ответы, и обычно перед любой HTTPS-сессией отправляется DNS-запрос для преобразования доменного имени в IP-адрес. Вы можете использовать сопоставление IP-адреса с доменным именем из ответов DNS, чтобы выяснить, к какому доменному имени пытается подключиться сеанс HTTPS. Например, вы перехватываете исходящий пакет TCP SYN на порт 443 104.16.35.249, но до этого вы видели ответ DNS для www.stackoverflow.com, где 104.16.35.249 был среди IP-адресов, возвращенных для доменного имени. Таким образом, вы можете легко понять, что сеанс HTTPS устанавливается на https://www.stackoverflow.com. Конечно, этот подход не предоставит вам полный URL-адрес, а только доменное имя, например. https://www.stackoverflow.com вместо https://www.stackoverflow.com/questions/18045764/can-i-capture-https-connect-urls-using-winpkfilter.But для некоторых задач может быть достаточно.

person vadim    schedule 06.05.2016

HTTPS используется для предотвращения любого подслушивания (которое вы пытаетесь сделать). Следовательно, когда HTTPS настроен правильно, вы ничего не можете сделать. Если у вас есть контроль над клиентским компьютером и программным обеспечением, вы можете установить фальшивый доверенный корневой сертификат в систему пользователя, а затем перехватывать HTTPS-запросы, генерировать сертификат сервера на лету, подписывать его доверенным корневым сертификатом и действовать как посредник. -середина.

Кстати, найдите информацию об атаках посредника и прочитайте их. - это именно то, что вы хотите сделать.

person Eugene Mayevski 'Callback    schedule 04.08.2013
comment
Спасибо за ваш ответ. Я отредактировал свой вопрос, включив в него дополнительную информацию. Мне не нужно расшифровывать https-трафик, просто нужно определить URL-адрес https, на который хочет перейти пользователь, и ничего более... Нужен ли мне для этого человек в средней реализации? - person Steve Johnson; 04.08.2013
comment
Например, меня интересует определение того, пытался ли пользователь открыть [h.t.t.p.s://]facebook.com или [h.t.t.p://]facebook.com и предпринять соответствующие действия. Необходимо иметь возможность определить этот URL-адрес и тип трафика (http/https) из пакетных данных и без использования прокси-решения. - person Steve Johnson; 04.08.2013
comment
@SteveJohnson, вы можете проанализировать трафик, чтобы узнать, является ли он HTTP-запросом. И если это так, извлеките URI. А вот с HTTPS вам не повезло — все спрятано за SSL/TLS. - person Eugene Mayevski 'Callback; 05.08.2013