Kali linux. Подмена сертификата безопасности с помощью sslsplit.

Discussion in 'Песочница' started by tailer73, 23 Sep 2015.

  1. tailer73

    tailer73 New Member

    Joined:
    16 Sep 2015
    Messages:
    11
    Likes Received:
    4
    Reputations:
    0
    Доброго времени суток всем форумчанам!
    Не так давно столкнулся с достаточно распространенной задачей - понадобилось слушать трафик, идущий по защищенному соединению в моей сети. О мотивах сего, думаю, говорить не стоит - и так все понятно ;)

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

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

    1.Перед началом обмена данными с сервером - вы обмениваетесь с ним открытыми ключами(о том, что такое открытый и закрытый ключи можно прочитать в вики). Далее ваш компьютер проверяет подлинность пришедшего от сервера открытого ключа, дабы убедиться в том, что сервер - это сервер. Подлинность проверяется с помощью системы подписей.

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

    3.Как только подлинность проверена - начинается обмен данными, которые шифруются вами для сервера с помощью пришедшего ранее открытого ключа, а сервер шифрует данные для вас вашим открытым ключом.

    4.Идея подмены сертификата заключается в том, чтобы разбить соединения клиента с сервером на 2 отдельных соединения: клиенты-ВЫ и ВЫ-сервер. Естественно ВЫ будете общаться с сервером без каких либо нарушений, а вот с клиентом надо установить соединение по ВАШЕМУ сертификату.

    В теории все не сложно, собственно как и в практике!

    Начнем. Архитектура сети следующая - клиент в виде узла под управлением ОС windows подключен к интернету через мой сервер, под управлением ОС Linux(KALI 2.0).
    Будем считать, что продвижение пакетов между клиентом и интернет шлюзом, а также nat - настроены(об этом очень много статей). Тогда нам для начала работы осталось только перенаправить весь шифрованный трафик на свободный порт, например на порт 8443, который далее будет слушать наша утилита sslsplit.

    iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443

    таким же образом нужно поступить и с другими портами, если какое то приложение работает через него по защищенке.

    Так, трафик перенаправлен, теперь его можно ловить. Утилита sslsplit сделает все за нас, осталось ей только дать корневой сертификат, которым она будет подписывать все сгенерированные свои ключи. Это можно сделать с помощью утилиты openssl, инструкция есть вот здесь http://www.opennet.ru/base/dev/apache_mod_ssl.txt.html
    как только готов сертификат, можно запускать sslsplit.

    sslsplit -D -l con.log -L data.log -c mycert.crt -k mykey.key ssl 0.0.0.0 8443

    кратко поясню параметры запуска:
    -l указывается файл для лога соединений
    -L файл для лога всего трафика
    -c указываете путь к сгенерированному сертификату (openssl)
    -k путь к ключу (openssl)

    Вроде все готово, но почему вы, наверное, заметили, что на ПК клиента почему-то не открывается практически ни один сайт ;) Это потому, что вы пытаетесь заставить пользователя установить соединение с вами на основании ключа, в цепочке подписей которого нет доверенного сертификата.

    Выход - надо импортировать ваш сертификат на ПК клиента: я знаю 2 способа, как это сделать на ОС windows.
    1)с помощью консоли mmc
    2)c помощью утилиты certmgr.exe

    Оба этих способа описаны здесь http://argon.pro/blog/2010/07/ws-pki/

    я использовал второй способ: скачал утилиту и все получилось:

    certmgr.exe -add -c yourcert.crt -s -r localMachine root

    После выполнения данной команды ваш сертификат будет добавлен в хранилище доверенных корневых сертификатов, а на ПК клиента заработают все сайты. В файле date.log вы сможете лицезреть весь шифрованный трафик клиентов.

    конечно же очень интересный вопрос, как бы доставить свой сертификат на ПК клиента, если нет физического доступа к нему;D Если кто готов поделиться своими мыслями по этому поводу - жду в комментах к теме!

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

    Также, хотелось бы услышать здоровую критику по стилю изложения, полноте раскрытия темы и качеству понимания схемы от опытных товарищей:)

    Спасибо за внимание, надеюсь статья получилась полезная!
     
  2. xterminate

    xterminate New Member

    Joined:
    1 Jun 2017
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Интересно в sslstrip можно это сделать ?
     
  3. Veil

    Veil Banned

    Joined:
    21 May 2015
    Messages:
    2,025
    Likes Received:
    3,355
    Reputations:
    72
    Все это есть в Intercepter-NG и как впялить юзеру ушастому поддельный сертификат,тоже есть. Вопрос в другом нажмет ли жертва скачать сертификат?
    А статья хорошая, зачет.
     
  4. xterminate

    xterminate New Member

    Joined:
    1 Jun 2017
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    спасибо за ссылку о за ответ буду читать
    если есть еще что то связанное с вопросом
    по одной ссылке достаточно
     
  5. alt7

    alt7 New Member

    Joined:
    8 Feb 2020
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Как обойти, например, Касперского? Он видит подмену сертификата и блокирует загрузку страницы
     
Loading...