Когда-то давно я делал 🔗 пост про сертификаты и замочек в браузере слева от адресной строки. В комментариях был вопрос про виды защит браузера от mitm-атак. Не прошло и года
Стенд состоит из двух машин - Windows 10 и управляемый роутер из линукса:
[Windows10] - (ens37)[Linux](ens33) - [Интернет] # роутер используется для MITM-атак.
На счет роутера я преувеличил. В данном случае это сетевой мост (перенаправляет трафик с одного интерфейса на другой) превратить linux в сетевой мост очень просто:
# Включаем редирект
echo 1 > /proc/sys/net/ipv4/ip_forward
# Чистим таблицы
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
# Создаем NAT и перенаправление трафика между интерфейсами
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
iptables -A FORWARD -i ens37 -o ens33 -j ACCEPT
iptables -A FORWARD -i ens33 -o ens37 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Ставим ip-адрес на ens37. ens33 Получает его по dhcp
ip addr add 10.13.37.10/24 dev ens37
# Примечание. NetworkManager может сбрасывать заданный адрес, поэтому
# на время эксперимента его лучше отключить
Мост готов, на винде тоже ставим адрес 10.13.37.11/24 и будет выход и интернет.
Теперь можно перехватывать https:
# Редиректим любой 443 порт на 127.0.0.1:443
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 443 -j REDIRECT --to-port 443
# Запускаем mitmproxy на прослушку и редирект трафика на read.pyfffe.site и смотрим на вывод
# 212.67.10.54 это ip read.pyfffe.site
mitmproxy -p 443 --mode reverse:https://212.67.10.54:443 --showhost --ssl-insecure
Как показано на гифке, перезагрузки страницы работает mitm-прокси, из-за чего браузер на уже посещенную страницу выдает ошибку net::ERR_CERT_AUTHORITY_INVALID и не даёт более ничего сделать, а вот на непосещенную ранее страницу алертит на самоподписанный сертификат, и ничего более.
В 9 случаев из 10 пользователь скорее всего проигнорирует это предупреждение. А если это какой-то внутренний ресурс, у которого тоже самоподписанный сертификат, то тут соответствие никто и проверить не будет 😏