Средства взлома Web-приложений Hacking Tools
Inetd не единственный метод запуска службы. У него есть преимущество, т.к. он способен применять TCPWrappers, метод, позволяющий или запрещающий доступ к порту на основе IP-адреса. Не все операционные системы используют inetd , а операционная система Windows определенно не имеет данной функции.
Cygwin. Если ваши друзья по-прежнему дразнят вас, потому что вы пользуетесь какой-либо версией Windows, не мучайтесь. В среде Cygwin есть демон inetd и программа OpenSSL , которая позволяет запускать SSL proxy. Cygwin жалуется на использование 80 в качестве имени службы. Файл /etc/inetd.conf должен содержать следующее.
# /etc/inetd.conf Cygwin SSL proxy example www stream tcp nowait root /home/ssl_proxy.sh ssl_proxy.sh
Затем вы можете запустить inetd в командной строке. Мы обычно запускаем его с -d , отладочной опцией, чтобы все работало корректно.
$ /usr/sbin/inetd.exe -d /etc/inetd.conf
Теперь proxy ожидает на порте 80 и направляет соединения к цели, обозначенной в сценарии ssl_proxy.sh.
stunnel trad
Инсталляция inetd в качестве родной для Windows службы требует больше манипуляций. Есть два метода создания этой службы. Предпосылкой для каждого является переменная среды Windows PATH, содержащая C:cygwinbin или любое место, где находится директория cygwinbin. Inetd может установить себя как службу.
$ /usr/sbin/inetd.exe -install-as-service /etc/inetd.conf
Чтобы удалить его, используйте опцию -remove-as-service .
Встроенные утилиты Cygwin также инсталлируют и запускают службу inetd.
cygrunsrv -I inetd -d «CYGWIN inetd» -p /usr/sbin/inetd -a -d -e CYGWIN=ntsec cygrunsrv -S inetd
Опция -R удаляет службу inetd.
Xinetd. Xinetd добавляет еще немного к демону inetd . Он улучшает регистрацию, управление соединениями и администрирование. В системах, которые поддерживают xinetd , дефиниции служб обычно находятся в директории /etc/xinetd.d. Создайте службу SSL proxy, используя синтаксис xinetd.
#default: off #description: OpenSSL s_client proxy to www.victim.com service 80 < socket_type = stream wait = no protocol = tcp user = root server = /root/ssl_proxy.sh only_from = 127.0.0.1 disable = no >
Как всегда, опасайтесь запускать службы с root-привилегиями и службы, к которым должны иметь доступ только вы.
Netcat (sort of). Для одноразовых соединений, таких как запуск компилированного взлома, который обычно работает на порте 80, Netcat экономит день. Возможно, вы не сможете запустить сканирование whisker корректно, но одноразовое соединение будет успешно достигнуто. У Whisker есть преимущество работы с системами Unix и Windows, обеспеченное, если установлен комплект OpenSSL . Netcat pseudo-proxy подходит для одной команды:
$ nc -w -L -p 80 -e «openssl s_client -quiet -connect www.victim.com:443»
Опция -L («слушай внимательнее») дает инструкцию Netcat продолжать прослушивание, даже если клиент закрыл соединение. Опция -e содержит команду s_client для соединения с целью. Затем присоединяйтесь к порту 80 ожидающего хоста, чтобы получить доступ к SSL-серверу вашей цели (например, www.victim.com ).
Настройка КриптоТуннеля для автоматического обмена данными через API
Для этого вам придется использовать оригинальную версию Netcat . Например, на OpenBSD опция -L заменена на -k , а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).
Команда OpenBSD выглядит следующим образом.
$ nc -w -k -l 80 | openssl s_client -quiet -connect www.victim.com:443
Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat . У вас должно получиться провести отчет о взломе непосредственно в команду s_client , пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.
Stunnel
OpenSSL — великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.
Вы можете также использовать Stunnel , чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями ( Internet Message Access Protocol ) для обеспечения шифрованного доступа к электронной почте (вам также может понадобиться stunnel для управления клиентом).
Реализация
SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный PEM -файл, который содержит ключи шифрования для использования в процессе взаимодействия. Stunnel поставляется с файлом по умолчанию, который называется stunnel. pem , но вы можете создать и свой собственный с использованием команды openssl .
$ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 > -days 365 . follow prompts. $ openssl dhparam 512 >> custom.pem
Теперь файл custom. pem готов к использованию. Stunnel ищет по умолчанию файл stunnel. pem , или вы можете использовать свой собственный с помощью параметра -p .
Замечания о компиляции под Cygwin. Вам может понадобиться отредактировать файл stunnel.c для компиляции stunnel под Cygwin . Закомментируйте следующие строки, которые располагаются в районе 391 строки.
/* if(setgroups(1, gr_list)) < sockerror(«setgroups»); exit(1); >*/
Смысл в том, что вы не сможете использовать параметр -g для определения альтернативной группы привилегий, с которыми выполняется stunnel , но вам не понравится ситуация, в которой это могло бы понадобиться.
Обезьяна в центре поля. Как быть, если вам необходимо просматривать данные, передаваемые поверх SSL-соединения? Вам может понадобиться проверять данные, передаваемые между клиентом, основанным на Web-приложении, и сервером, но клиент передает HTTPS, и сервер принимает только HTTPS. В таком случае, вам понадобится заморозить stunnel между клиентом и сервером, переведя соединение в HTTP, чтобы иметь возможность его читать, а затем вернуть трафик обратно в HTTPS, чтобы сервер мог его получить. Для этого понадобится две команды stunnel .
Запустите stunnel в обычном режиме демона ( -d ). В таком режиме stunnel принимает SSL-трафик и выдает простой текст. Параметр -f заставляет stunnel оставаться в диалоговом режиме. Обычно это используется для просмотра информации о соединении и чтобы убедиться, что программа работает. Stunnel — не программа с конечной точкой. Другими словами, вы должны задать порт, который будет прослушиваться ( -d ), а также хост и порт, на которые будет перенаправляться трафик ( -r ). Ниже приведена команда, по которой прослушивается SSL-трафик по 443 порту и перенаправляется в виде не SSL-трафика на порт 80. Если вы всего лишь хотите изображать обезьяну в центре поля, параметр -r адресует к другой команде stunnel .
$ stunnel -p custom.pem -f -d 443 -r host:80 2002.04.15 16:56:16 LOG5[464:1916]: Using ’80’ as tcpwrapper service name 2002.04.15 16:56:16 LOG5[464:1916]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 16:56:16 LOG5[464:1916]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) — 2000 clients allowed
Другая команда stunnel точно такая же, но использует клиентский режим ( -c ) для получения трафика в виде простого текста и вывода трафика, зашифрованного с помощью SSL. В данном примере, команда прослушивает порт 80 и затем посылает трафик на конечный порт 443.
$ stunnel -p custom.pem -f -d 80 -r www.victim.com:443 -c 2002.04.15 17:00:10 LOG5[1916:1416]: Using ’80’ as tcpwrapper service name 2002.04.15 17:00:10 LOG5[1916:1416]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 17:00:10 LOG5[1916:1416]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) — 2000 clients allowed
Если мы запустим эти команды на разных компьютерах (или между компьютером и сессией VMware ), то сможем прослеживать трафик, который переадресовывается через 80 порт.
SSL for a Service. Stunnel обеспечивает ту же функциональность, что и inetd , с дополнительным SSL-шифрованием. Stunnel поддерживает TCP-оболочку, что означает, что он проверяет файлы /etc/hosts.allow и /etc/hosts.deny сразу после запуска. Это дает возможность применить шифрование для любой службы. Например, IMAP — протокол для удаленного доступа к почтовому ящику.
Недостаток IMAP состоит в том, что может быть перехвачен пароль.
Примерно так выглядит конфигурирование службы IMAP, когда она определяется с помощью файла /etc/ inetd.conf.
imap stream tcp nowait root /usr/sbin/tcpd imapd
Имя службы imap (TCP порт 143); демон TCPWrappers выполняет демон IMAP.
Теперь посмотрим аналогичную конфигурацию под stunnel . Следующая команда может быть выполнена из командной строки, а не как часть файла /etc/inetd.conf.
# stunnel -p imapd.pem -d 143 -l /usr/sbin/imapd.exe -N imapd 2002.04.15 17:08:38 LOG5[1820:1680]: Using ‘imapd’ as tcpwrapper service name 2002.04.15 17:08:38 LOG5[1820:1680]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 17:08:38 LOG5[1820:1680]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) — 2000 clients allowed
Вы уже знакомы с параметром -d , но здесь мы вводим параметры -l и -N . Параметр -l запускает специальную программу для входящего соединения. В данном случае, мы запускаем демона imapd . Параметр -N применяется специально для Cygwin-систем, чтобы подставить имя службы для проверки TCPWrapper . Имя службы можно найти в файле /etc/services, и оно должно присутствовать в файлах /etc/hosts.allow и /etc/hosts.deny.
Источник: intuit.ru
Создание SSL-туннеля при помощи Stunnel в Ubuntu
Программа Stunnel предназначена для развертывания шифрования SSL между удаленным клиентом и локальным или удаленным сервером. Stunnel добавляет функциональность SSL к наиболее часто используемым демонам Inetd (например, POP2, POP3) и IMAP-серверам без каких-либо изменений в коде программы.
Stunnel превращает любой небезопасный TCP-порт в зашифрованный с помощью криптографического пакета OpenSSL. Это похоже на небольшую безопасную VPN, которая работает на определенных портах.
Примечание: данное руководство было протестировано на виртуальных выделенных серверах Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04.
1: Подготовка системы
При помощи нижеприведенных команд обновите список пакетов и сами пакеты:
apt-get update
apt-get upgrade
2: Установка Stunnel
Программу Stunnel можно установить при помощи стандартного менеджера пакетов:
apt-get install stunnel4 -y
3: Настройка Stunnel
Настройки Stunnel хранятся в файле stunnel.conf, который по умолчанию находится в /etc/stunnel. Чтобы создать этот файл, используйте:
Чтобы идентифицировать себя на сервере, нужно использовать сертификат SSL; для этого необходимо задать путь к этому сертификату в файле stunnel.conf Используйте следующую строку (сам файл сертификата будет создан далее):
Затем нужно указать сервис для взаимодействия с Stunnel. Это может быть любой сервис, который использует сеть (почтовый сервер, прокси-сервер и т.д.).
В данном руководстве для примера будет показано, как защитить трафик между прокси-сервером Squid и клиентом, использующим Stunnel. Инструкции по установке Squid можно найти в разделе 6.
Указав название сервиса, взаимодействующего с Stunnel, нужно указать Stunnel, на каком порте нужно прослушивать данный сервис. Это может быть любой из 65535 портов, если только он не заблокирован другим сервисом или фаерволом.
[squid] accept = 8888
Далее нужно указать в конфигурационном файле порт и IP-адрес сервиса, для которого создается безопасный туннель. В основном Stunnel принимает пакеты от безопасного порта, а затем пересылает их на порт и IP-адрес указанного сервиса.
По умолчанию Squid-прокси запускается на локальном хосте и использует порт 3128; следовательно, чтобы программа Stunnel могла принимать соединения с этим сервисом, в данном случае в конфигурационный файл нужно внести следующую строку:
В целом конфигурационный файл stunnel.conf должен иметь такой вид:
client = no
[squid] accept = 8888
connect = 127.0.0.1:3128
cert = /etc/stunnel/stunnel.pem
Примечание: параметр client = no не является обязательным, поскольку Stunnel по умолчанию работает в режиме сервера.
4: Создание SSL-сертификата
Stunnel использует сертификат SSL для защиты соединений. Такой сертификат можно легко создать с помощью пакета OpenSSL:
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
Вышеприведенные команды генерируют закрытый ключ, создают сертификат при помощи этого ключа, а затем объединяют эти файлы в один файл по имени stunnel.pem, который и будет использовать Stunnel.
Примечание: при создании сертификата нужно указать некоторую информацию; обратите внимание на поле Common Name – в нем нужно указать имя хоста или IP-адрес сервера.
Затем настройте автоматический запуск Stunnel. Для этого откройте файл /etc/default/stunnel4 в текстовом редакторе:
и измените значение параметра ENABLED на 1:
В завершение перезапустите Stunnel, чтобы обновить настройки.
5: Установка прокси-сервера Squid
Чтобы установить Squid, используйте:
apt-get install squid3 -y
6: Настройка Stunnel как клиента
Примечание: данный раздел демонстрирует установку и настройку Stunnel в качестве клиента в Windows, но настройки и инструкции по установке программы в Linux или даже Android останутся такими же. Единственное отличие – местонахождение конфигурационного файла stunnel.conf.
Для того, чтобы Stunnel мог взаимодействовать с сервером, сертификат SSL (см. раздел 4) должен находиться на клиенте. Существует множество способов перемещение файла stunnel.pem с сервера, но в данном случае для этого используется протокол SFTP – одновременно достаточно простой и безопасный.
При помощи SFTP-клиента (например, Filezilla) подключитесь к серверу и загрузите файл stunnel.pem из каталога /etc/stunnel/ на клиент.
Примечание: чтобы получить больше информации о работе SFTP, читайте руководство «Использование SFTP для безопасного обмена файлами с удаленным сервером».
Скачайте Stunnel с сайта проекта.
Установите Stunnel в любой удобной точке системы. Затем перейдите в папку Stunnel и переместите в нее файл сертификата stunnel.pem.
Создайте в папке Stunnel файл stunnel.conf (если такого файла еще нет). Откройте файл при помощи текстового редактора (например, Notepad).
Для начала нужно указать путь к сертификату, который в Windows находится в каталоге Stunnel.
Примечание: в Ubuntu этот файл находится в каталоге /etc/stunnel/.
В данном случае нужно перевести Stunnel в режим клиента. Поместите следующую строку в файл:
Далее нужно указать конфигурации сервиса, который нужно использовать.
Сначала укажите имя сервиса, затем его IP и порт, который должна прослушивать программа Stunnel на клиенте.
[squid] accept = 127.0.0.1:8080
Для этого подойдет любой порт на клиентском компьютере, если он не занят другим сервисом и не блокируется брандмауэром.
Затем нужно настроить Stunnel для передачи пакетов, поступающих на данный порт, серверу Stunnel; для этого укажите IP-адрес виртуального сервера и порт, заданный при настройке сервера Stunnel (в данном случае это порт 8888):
connect = [внешний IP-адрес]:8888
В итоге файл stunnel.conf будет иметь такой вид:
cert = stunnel.pem
client = yes
[squid] accept = 127.0.0.1:8080
connect = [Server’s Public IP]:8888
Сохраните и закройте файл.
Готово! Взаимодействие клиента и сервера надежно защищено SSL-туннелем. Теперь для подключения к любому сервису VPS нужно вводить не только IP, но также и порт, заданный в параметре accept конфигурационного файла Stunnel.
Например, чтобы подключиться к прокси-серверу Squid на облачном сервере, нужно указать 127.0.0.1:8080, и Stunnel автоматически подключится к сервису, запущенному на указанном порте. Чтобы защитить трафик, настройте браузер использовать порт 8080 в качестве прокси.
Источник: www.8host.com
Экономим бюджет компании, или как построить криптотуннель по ГОСТу с минимальными затратами
Обеспечение безопасности при помощи средств криптографической защиты информации (СКЗИ) — не очень сложная задача, если все технологические участки находятся на хост-машине. Однако для того чтобы передавать и шифровать информацию одновременно, необходимо построить грамотный технологический процесс программного обеспечения. Мы расскажем, как это сделать.
Введение
Для любого системного администратора или DevOps построить VPN или «пробросить» нестандартный метод инкапсуляции пакетов (туннелирование) — не очень сложная задача. Часто для этого применяют OpenVPN, если планируется постоянное использование, либо SSH-туннелирование, если защищённое соединение нужно на один-два раза. Однако есть предприятия и ведомства, которые должны соблюдать строгие условия передачи данных, установленные законодательством. Под такие требования подпадают, например, многие структуры, которые так или иначе имеют отношение к денежным операциям: банки, микрофинансовые организации и т.п. Персональные данные тоже являются «защищаемой информацией» во всех законах и положениях.
В результате оказывается, что при шифровании необходимо использовать СКЗИ со всеми необходимыми сертификатами и лицензиями, соответствующие нормативным требованиям. Одним из примеров таких программных средств является «КриптоПро CSP». В данной статье мы будем разбирать задачу о том, как «прокинуть» средствами stunnel сетевой туннель, который будет шифроваться «КриптоПро CSP», заодно получив хоть и тестовый (на 3 месяца), но полностью валидный сертификат по ГОСТ Р 34.10-2012.
Задача
Для начала необходимо разобраться в том, как всё описанное будет работать, и поставить конкретные задачи.
К примеру, есть две машины. Для демонстрации настройки двух операционных систем одна из них будет работать под управлением ОС семейства Linux (Ubuntu, версия не важна, но желательно — не ниже 16), вторая — под Windows 10. На win-системе будет запускаться Netcat на прослушивание какого-то определённого порта, а с nix-системы будут передаваться пакеты. Таким образом, Windows-машина будет сервером (в том числе — в отношении настроек stunnel).
Что должно получиться в итоге? При подключении с Linux к Windows через программу Netcat все пакеты будут шифроваться сертификатом GOST_2012 и сертифицированным программным обеспечением. Задача тривиальна и ставится для того, чтобы показать возможность такого манёвра. Поскольку stunnel передаёт любой протокол внутри себя, можно, к примеру, подписывать XML-файлы секретной подписью другой организации или передавать персональные данные в хранилище через интернет.
Тестовый стенд
Linux
Начнём с того, что система готова к настройке. Как работает «КриптоПро CSP», читатели, скорее всего, уже знают. Небольшое уточнение относительно stunnel: эта программа изначально создавалась как прокси-сервер с функцией шифрования трафика. Другими словами, она берёт, к примеру, HTTP и превращает его в своего рода HTTPS (если не вдаваться в подробности протоколирования).
Работает stunnel следующим образом: при запуске на локальной машине открывается определённый порт, указанный в конфигурационном файле, и в тот же момент приложение соединяется со своей копией на другой машине. Таким образом все пакеты, попавшие на порт localhost, шифруются, затем проксируются на другую систему и там расшифровываются. Удобство схемы состоит в том, что это — просто шлюз, которому неважно, какой протокол шифровать и передавать.
Рисунок 1. Схема работы stunnel
Изначально загружаем необходимый продукт «КриптоПро» отсюда. В скачанном архиве будет примерно такой набор файлов, как на скриншоте.
Рисунок 2. «КриптоПро CSP» на Linux
Для установки необходимо запустить install.sh. Этот скрипт добавит нужные компоненты: certmgr, cpverify, cryptcp, csptest, csptestf, curl, der2xer, genkpim, inittst, wipefile. У каждой из этих программ — своя зона ответственности, свои ключи и задачи. Для нашего сценария нужны будут только certmgr и cryptcp.
Бинарные файлы попадают в /opt/cprocsp/bin/, а не в /bin, поэтому запустить их просто командой не удастся. Необходимо либо выполнить запуск напрямую оттуда, либо сделать символьные ссылки. Не стоит только создавать ссылку с помощью curl, так как работает он «криво»: не видит список удостоверяющих центров из операционной системы и, как следствие, завершает любой запрос с ошибкой, из-за чего приходится использовать ключ -k, который отменяет проверку сертификата на валидность.
Сама по себе stunnel шифрует трафик с помощью OpenSSL, но в компании «КриптоПро» её переписали под свои нужды, так что теперь она использует утилиты для un- и de- шифрования и называется stunnel-msspi. Поставляется она в архиве вместе с CSP; также её можно скачать отдельно. Для старых версий «КриптоПро CSP» есть вероятность, что программа уже установлена, но это необходимо проверить.
Как было сказано выше, для stunnel Linux-система будет клиентом, а Windows — сервером. IP-адреса: Linux – 172.22.1.65, Windows – 172.22.1.121.
Следующий шаг — ключи и сертификаты. Для сервера нам необходимо и то, и другое, причём все это — в контейнере «КриптоПро». Для клиента требуется только сертификат, нужный для того, чтобы к туннелю не мог подключиться любой желающий. Забегая немного вперёд, отметим, что в конфигурационном файле stunnel есть опция verify, и вот её параметры:
0. Не проверять сертификат сервера
1. Проверять сертификат при его наличии
2. Проверять сертификат всегда
3. Проверять наличие данного сертификата в хранилище TrustedUsers
Начиная с параметра 1, собственно, и нужен сертификат клиента для защиты подключения.
Итак, чтобы сгенерировать контейнер для сервера, необходимо воспользоваться утилитой cryptcp:
cryptcp -creatcert -provtype 81 -dn «C=RU, L=Rostov-na-Donu, CN=srv, 1.2.643.100.5=305867501589415» -exprt -ex -cont «\\.\HDIMAGE\srv» -ku -certusage «1.3.6.1.5.5.7.3.1» -hashAlg «1.2.643.7.1.1.2.3» -ca http://www.cryptopro.ru/certsrv
Интересные моменты относительно ключей:
- provtype — указывает тип криптопровайдера. По умолчанию подставляется 75. Значение этих цифр можно узнать так: в каталоге /opt/cprocsp/sbin/amd64 лежит программа cpconfig, нужно запустить её с ключами -defprov -view_type.
Рисунок 3. Вывод программы cpconfig
На скриншоте выше видно, что значение 75 устарело и соответствует ГОСТу версии 2001. ГОСТ версии 2012 на 256 и 512 бит задаётся значениями 80 и 81 соответственно.
- certusage — идентификатор назначения. Для выполнения задачи необходимы два модуля: проверка подлинности клиента (1.3.6.1.5.5.7.3.2) и проверка подлинности сервера (1.3.6.1.5.5.7.3.1).
- hashAlg — алгоритм, который будет применяться при шифровании. Список вариантов можно найти здесь.
- ca — центр сертификации, который подпишет всё содержимое, чтобы оно было валидным. Важно, что сертификаты и ключи будут действовать только в течение 3 месяцев (точнее, данный конкретный УЦ, который указан в команде, выдаёт их именно на этот срок).
- cont — контейнер, который будет создан; в нём сохранятся файлы. Если контейнер с таким именем уже есть, то, естественно, команда не отработает. Проверить можно командой certmgr -list; в её выводе отобразится исчерпывающая информация о контейнерах системы и пользователя.
Выше описаны самые «пикантные» моменты, которые могут отнять много времени. Остальные ключи и другие пояснения можно найти в документации.
Переходим к генерации сертификата для клиента. Команда аналогична, меняется только имя контейнера и идентификатор назначения сертификата.
cryptcp -creatcert -provtype 81 -dn «C=RU, L=Rostov-na-Donu, CN=srv, 1.2.643.100.5=305867501589415» -exprt -ex -cont «\\.\HDIMAGE\srv» -ku -certusage «1.3.6.1.5.5.7.3.2» -hashAlg «1.2.643.7.1.1.2.3» -ca http://www.cryptopro.ru/certsrv
Теперь с ключами и сертификатами всё готово. На всякий случай приведём команду экспорта из контейнера:
certmgr -export -provtype 81 -dest /куда экспортировать сертификат/имя сертификата -cont «\\.\HDIMAGE\имя контейнера»
Таким образом можно получить «на руки» сертификат в формате DER.
Далее нужно приниматься за настройку stunnel, а именно — его конфигурационного файла. Создаём в удобном месте файл stunnel.conf. Содержимое будет следующим:
setuid = root
setgid = root
pid = /var/opt/cprocsp/tmp/stunnel.pid
socket = l_TCP_NODELAY=1
socket = r_TCP_NODELAY=1
debug = 7
output = /home/bit/stunnel.log
[TestStunnel]
client = yes
accept = 0.0.0.0:13501
connect = 172.22.1.121:13500
verify = 2
cert = 0xb26305dgbhq47316f4fb80d4877383c4493b3g4d
- Client — указатель на то, является ли программа сервером или клиентом;
- Accept — локальный порт, к которому будет подключаться программа;
- Connect — IP-адрес и порт сервера, с которым мы будем соединяться;
- Verify — параметр, который мы уже описывали выше;
- Cert — клиентский сертификат. На этом пункте необходимо задержаться.
Можно указать параметр двумя способами: либо импортировать сертификат из контейнера и прописать путь к файлу, либо воспользоваться отпечатком сертификата. Извлечь отпечаток можно всё той же командой certmgr -list. Идентификатор указан как SHA1 Hash.
Рисунок 4. Отпечаток в Linux
На этом настройка Linux закончена, можно запускать stunnel с указанием соответствующего файла конфигурации stunnel.conf.
Windows
После установки «КриптоПро CSP» необходимо скопировать контейнер с серверным ключом и сертификатом с nix-машины.
Все контейнеры попадают в /var/opt/cprocsp/keys/username и состоят из 6 файлов с расширением .key. Копируем все, хотя здесь будет небольшая проблема с импортом. «КриптоПро CSP» считает, что хранить контейнер на жёстком диске небезопасно, и поэтому необходим токен. Указанное препятствие можно обойти создав эмулятор контейнера.
Для этого необходимо скачать и установить ImDisk. Затем при помощи ImDisk Virtual Disk Driver следует создать эмулятор токена (именно так его и увидит CSP, по-русски это — просто контейнер HDD) и подключить его к системе.
Рисунок 5. Псевдотокен
В итоге рядом с жёстким диском должен появиться ещё один носитель — это и есть токен. Туда понадобится скопировать папку с контейнером. После этих манипуляций сертификат нормально установится в «КриптоПро CSP».
Дополнительно стоит скопировать клиентский сертификат на сервер и тоже его установить.
Конфигурационный файл для stunnel-msspi:
output= C:stunnelstun.log
socket = l_TCP_NODELAY=1
socket = r_TCP_NODELAY=1
debug = 7
[https]
client = no
accept = 13500
connect = 13501
#cert =E:srv1.000srv.cer
cert = 60e26867b649ec6401a42892fa9ab752e51c7e1f
CApath = TrustedPeople
verify=2
Здесь всё устроено по аналогии с конфигурационным файлом клиента: accept — порт, к которому подключается клиентская копия stunnel (должен быть разблокирован в брандмауэре и «проброшен» во все места до наружного выхода), connect — порт для приложения (в данном случае — Netcat).
Повторяется история и в отношении сертификата: либо импорт из контейнера, что совсем не рекомендуется, либо указание отпечатка. Отпечаток можно найти в составе сертификата.
Рисунок 6. Отпечаток сертификата в Windows
Журнал для отладки можно будет отключить тогда, когда всё будет настроено как часы.
Теперь пора скачать Netcat для Windows.
Следующий шаг — запустить сервер stunnel, заодно перезапустив и клиент. Для отладки и тестирования в Windows лучше делать это из командной строки.
nc -nvlp 13501
nc 127.0.0.1 13501
В командной строке сервера побежит протокол, который расскажет, что кто-то успешно подключился. Пишем в одном окне набор символов; он появляется в другом окне. Всё настроено верно.
Рисунок 7. Результат
Выводы
В статье мы разобрали задачу о том, как получить криптотуннель с валидным ключом, подписанным самим «КриптоПро», и с алгоритмом шифрования GOST_2012, 512 бит. Сделано это с минимальными затратами — две лицензии на «КриптоПро CSP».
Можно, конечно, написать что-то своё, но лицензии JСP, к примеру, стоят намного больше. Готовые решения тоже будут значительно дороже.
Источник: www.anti-malware.ru
Шифрование TLS-трафика по алгоритмам ГОСТ-2012 c Stunnel
Listen to this article
В этой статье я хочу показать, как настроить Stunnel на использование российских криптографических алгоритмов в протоколе TLS. В качестве бонуса покажу, как шифровать TLS-канал, используя алгоритмы ГОСТ, реализованные в криптоядре Рутокен ЭЦП 2.0. Но для начала давайте вообще разберёмся для чего нужен Stunnel.
В двух словах — это программа, на которую можно переложить всю логику шифрования трафика между сервером и клиентом. Делается это следующем образом: допустим у вас есть клиент и сервер, которые общаются между собой без использования шифрования, аутентификации и проверки целостности. Вы могли бы переписать клиент и сервер так, чтобы все исходящие и входящие сообщения передавались между собой с учётом всех этих моментов, но для чего такие сложности, если можно это просто переложить на плечи другому приложения? Для решения такой задачи как раз подойдёт Stunnel.
Вам нужно просто настроить клиент таким образом, чтобы весь свой трафик он передавал на клиентский Stunnel, в свою очередь, он устанавливает безопасное соединение с сервером, отправляя данные на серверный Stunnel. Stunnel на сервере расшифровывает пришедший трафик и перенаправляет данные на вход серверу. Вышесказанное проще осознать глядя на эту диаграмму
Стоит заметить, что на сервере не обязательно должен стоять именно Stunnel, для работы с криптографическими алгоритмами. Здорово, что есть готовые демонстрационные стенды, которые поддерживают российскую криптографию, список которых есть в презентации с РусКрипто’2019.
Нам нужны стабильно работающие серверы, осуществляющие двухстороннюю аутентификацию.
Мы выбрали серверы КриптоПро как наиболее надёжные с полной реализацией стандарта ГОСТ TLS. Спасибо им за это
Звучит достаточно просто, давайте попробуем организовать этот процесс.
Подготовительный шаг
- OpenSSL
- Stunnel
- rtengine
- Доступ к тестовым серверам КриптоПро, для проверки соединения по TLS
OpenSSL для Windows можно взять отсюда, а для пользователей линукса — из репозиториев или собрать самому, скачав свежую версию отсюда. Также его можно взять из Rutoken SDK, из директории opensslopenssl-tool-1.1, этот архив нам будет полезен и дальше, т.к. в нём находится интересующий нас rtengine. Stunnel можно найти здесь. Для работы необходима версия >= 5.56.
Скачать rtengine можно из Rutoken SDK, он лежит в директории opensslrtenginebin. Закинуть его нужно туда, где хранятся все движки openssl. Узнать путь до них можно с помощью
openssl.exe version -a
Но просто переместить движок в нужную папку — мало, нужно ещё сконфигурировать сам openssl для работы с ним. Узнаём где лежит файл с конфигурацией openssl.cnf с помощью той же команды, что указана выше (под виндой stunnel идёт с собственной версией openssl, поэтому файл с конфигурацией лежит в pathtostunnelconfigopenssl.cnf
# В начале напишем: openssl_conf = openssl_def . # В конце файла: # OpenSSL default section [openssl_def] engines = engine_section [engine_section] rtengine = rtengine_section [rtengine_section] engine_id = rtengine dynamic_path = /path/to/rtengine.so MODULE_PATH = /usr/lib/librtpkcs11ecp.so default_algorithms = CIPHERS, DIGEST, PKEY, RAND
Давайте проверим, что rtengine подключился, для этого подключим токен и выведем список всех алгоритмов шифрования:
openssl ciphers -v
Напомню, что в Windows нужно проверять на openssl, который лежит рядом с stunnel
Если среди них будут присутствовать наши ГОСТы, значит всё настроено верно.
Настало время самого интересного: проверка установки соединения по ГОСТу с тестовыми серверами КриптоПро. Список данных серверов описан здесь (//www.cryptopro.ru/products/csp/tc26tls). Каждый из этих серверов работает со своими алгоритмами для аутентификации и шифрования. Более того на портах 443, 1443, 2443,… запущены сервисы, которые воспринимают только определённые парамсеты.
Так, например, по адресу //tlsgost-256auth.cryptopro.ru происходит шифрование с аутентификацией с использованием алгоритмов GOST2012-GOST8912-GOST8912 и 256-битным ключом. Так же на порту 443 используется XchA-ParamSet, на порту 1443 — XchB-ParamSet, на порту 2443 — A-ParamSet и т.д.
Теперь, когда мы знаем, какой ключ нам нужен, давайте получим корневой сертификат от тестового сервера, выработаем ключи для работы и подпишем запрос на наш сертификат.
Простой способ (работает под Windows и Linux)
- Для того, чтобы получить корневой сертификат, зайдём на сайт тестового УЦ ООО «КРИПТО-ПРО». И нажмём на кнопку для получения сертификата. Отобразится новая вкладка, на которой нужно будет выбрать метод шифрования Base64 и нажать на кнопку «Загрузка сертификата ЦС». Полученный файл certnew.cer сохраняем.
- Переходим по ссылке. Устанавливаем все плагины, которые от нас просят. Нажимаем на кнопку ”Создать ключ”, и выбираем для генерации алгоритм «ГОСТ Р 34.10-2012 256-бит». Далее создаём запрос на сертификат, в графе «Применение» можно выбрать все. В графе Дополнительное применение: Аутентификация клиента и Пользователь центра регистрации КриптоПро.
- Опять открываем сайт тестового УЦ, но на этот раз нажимаем на кнопку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64». Вставляем в поле содержимое нашего запроса, нажимаем на клавишу “Выдать” и загружаем сертификат user.crt в формате Base64. Полученный файл сохраняем.
Через командную строку
- Для того, чтобы получить корневой сертификат, зайдём на сайт тестового УЦ ООО «КРИПТО-ПРО». И нажмём на кнопку для получения сертификата. Отобразится новая вкладка, в которой нужно будет выбрать метод шифрования Base64 и нажать на кнопку «Загрузка сертификата ЦС». Полученный файл certnew.cer сохраняем.
2. Теперь генерируем ключи.
pkcs11-tool – module /usr/lib/librtpkcs11ecp.so – keypairgen – key-type GOSTR3410-2012-256:B -l – id 45 # 45 – код символа ASСII id ключа (E)
Стоит заметить, что сгенерированные на токене ключи не могут быть скопированы с токена. В этом состоит одно из основных преимуществ их использования.
3. Создадим запрос на сертификат:
openssl req -engine rtengine -new -key=»pkcs11:id=E» -keyform engine -out client.req
4. Опять открываем сайт тестового УЦ, но на этот раз нажимаем на кнопку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64». Вставляем в поле содержимое нашего запроса, нажимаем на кнопку Выдать и загружаем сертификат user.crt в формате Base64. Полученный файл сохраняем
Остался последний вопрос: Для чего всё это. Зачем мы получали все эти сертификаты, ключи и запросы?
Дело в том, что они нужны протоколу TLS для двусторонней аутентификации. Работает это очень просто.
У нас есть сертификат сервера, и мы считаем его доверенным.
Наш клиент проверяет, что сервер, с которым мы работаем имеет аналогичный сертификат.
Сервер же хочет убедиться, что работает с пользователем, который ему известен. Для этого мы и создавали запрос на сертификат для работы через наши ключи.
Мы отправили этот запрос и сервер подписал её своей ЭЦП. Теперь мы можем каждый раз предъявлять этот сертификат, подписанный корневым УЦ, тем самым подтверждая, что мы — это мы.
Конфигурирование Stunnel
Осталось только правильно настроить наш туннель. Для этого создадим файл stunnel.conf с настройками Stunnel по умолчанию и напишем туда следующее:
; уровень логирования и путь до лог-файла debug = 7 output = /path/to/stunnel.log ; устанавливаем протокол защиты TLSv1 sslVersion=TLSv1 ; подгружаем движок. engine=rtengine ; настраиваем туннель на клиенте [remote system] client=yes ; указываем engine, необходимый для подгрузки ключей engineId=rtengine ; устанавливаем верификацию 2 (принудительную проверку сертификата) verify = 2 ; путь до корневого сертификата CAFile = /path/to/certnew.cer ; путь до сертификата клиента cert=/path/to/user.crt ; путь до ключа на токене. key=pkcs11:model=Rutoken%20ECP;manufacturer=Aktiv%20Co.;id=E ; указываем откуда Stunnel принимает соединение и куда посылает accept = localhost:8080 connect = tlsgost-256auth.cryptopro.ru:2443
Теперь, если всё сделано правильно, можно запустить Stunnel с нашей конфигурацией и подключиться к серверу:
stunnel.exe /path/to/stunnel.conf
Откроем браузер и зайдём по адресу localhost:8080. Если всё верно, то отобразится следующее:
Если же нет, то смотрим логи и используем отладчик, чтобы понять в чём же всё-таки проблема.
Источник: rucore.net