Content
- КриптоПро ЭЦП Browser plug-in
- Версия 2.0
- Порядок установки
- PKCS11
- Linux
- Отключение окон о необходимости перехода на ГОСТ Р 34.10-2012
- Ссылки
- Как подготовиться к установке ЭЦП на компьютер
- Оглавление
- Начнем с основ
- Давайте углубляться
- Компоненты WS
- Длина полезной нагрузки (Payload len)
- Masking-key
- Данные полезной нагрузки (Payload data)
- Как работает это рукопожатие ?
- Основы есть, теперь к теме "а как с ним работать?"
- SocketSleuth
- Возможности SocketSleuth
- WebSocket Connection Manager
- Перехват сообщений WebSocket с помощью функции match & replace
- WebSocket AutoRepeater
- WebSocket Intruder
- А что там есть у Бурпа ?
- Вспомним и про Owasp Zap
- Уязвимости WebSocket
- Манипулирование сообщениями WebSocket
- Манипулирование рукопожатием WebSocket
- Использование межсайтовых WebSockets
- Как находить ?
- CSWSH
- Как обнаружить?
- Эксплуатация
- "Bypass protection"
- Инструменты для автоматизированного тестирования
- Заключение
- Глоссарий
- Новичок в крипте и web3?
- В этой статье:
- Другая модель безопасности аккаунта
КриптоПро ЭЦП Browser plug-in
КриптоПро ЭЦП Browser plug-in предназначен для создания и проверки электронной подписи (ЭП) на веб-страницах с использованием СКЗИ КриптоПро CSP.
Версия 2.0
- Актуальная, развивающаяся версия, находится в процессе сертификации.
- Поддерживает работу с алгоритмами ГОСТ Р 34.10/11-2012 (при использовании с КриптоПро CSP 4.0 и выше).
- Для Microsoft Windows совместима с КриптоПро CSP версии 3.6 R4 и выше, для других ОС – с КриптоРо CSP версии 4.0 и выше.
- Компоненты КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0, входящие в эту версию, не принимают лицензию от версий 1.x.
- Минимальная поддерживаемая версия Microsoft Windows — Windows XP.
Порядок установки
- Установить пакет alien, необходимый для конвертации rpm-пакетов в deb-формат.
apt alien
- Загрузить архив cades_linux_amd64.tar.gz отсюда.
- Распаковать архив cades_linux_amd64.tar.gz.
- Перейти в папку с распакованными файлами и выполнить преобразование пакетов:
alien .rpm
- Установить deb-пакеты:
lsb-cprocsp-devel_.deb cprocsp-pki-.deb
- Установить расширение.
- Создать символические ссылки на библиотеки:
optcprocsplibamd64libnpcades.so usrlibmozillapluginsliblibnpcades.so
optcprocsplibamd64libcppkcs11.so.4.0.4 usrlibmozillapluginsliblibcppkcs11.so
PKCS11
Для корректной работы pkcs11, настройку слотов следует сделать явной, для этого в файл /etc/opt/cprocsp/config64.ini в разделе PKCS11 после необходимо добавить:
Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Linux
optcprocspbinamd64csptest -enum_cont
optcprocspbinamd64csptest -enum_cont
Как посмотреть список закрытых ключей?
Отключение окон о необходимости перехода на ГОСТ Р 34.10-2012
Для отключения данных предупреждений в КриптоПро CSP, нужно добавить два ключа в конфигурационный файл /etc/opt/cprocsp/config64.ini в существующую секцию Parameters.
Ссылки
crypto_pro_csp/crypto_pro_csp.txt
Как подготовиться к установке ЭЦП на компьютер
В статьях об электронной подписи мы используем аббревиатуры ЭП и ЭЦП. ЭЦП — это электронная цифровая подпись. Это старое название электронной подписи (ЭП).
Для получения электронной подписи необходимо обратиться в удостоверяющий центр (УЦ). Руководители юрлиц, индивидуальные предприниматели и нотариусы получают квалифицированные сертификаты ЭП в Удостоверяющем центре ФНС России или в офисах доверенных лиц УЦ ФНС. Квалифицированные электронные подписи для физических лиц выпускают в УЦ, которые аккредитованы Министерством цифрового развития, связи и массовых коммуникаций Российской Федерации (Минцифры).
Строго говоря, в УЦ клиенту передают не электронную подпись, а средства для её создания: сертификат ЭП и закрытый ключ (который чаще всего владельцы ЭП создают сами на своём рабочем месте). С их помощью пользователь формирует подпись самостоятельно при подписании электронного документа.
Зачастую владельцу ЭП нужно подготовить своё рабочее место не только к применению подписи, но и к созданию закрытого ключа перед получением квалифицированного сертификата в коммерческом удостоверяющем центре:
- Установить на компьютер, который будет использован для подписания документов, криптографическую программу — криптопровайдер.
- Настроить веб-браузер: установить и настроить браузерный плагин. Это позволит не только использовать ЭП для подписания документов на компьютере, но и применять подпись на различных государственных порталах, торговых площадках и в системах ЭДО.
- Установить драйверы для работы с USB-токеном.
После этого можно начать установку сертификата электронной подписи на компьютер.
## Зачем нужен криптопровайдер
Средство криптографической защиты информации (СКЗИ) или программный криптопровайдер — это программа, которая выполняет криптографические операции и вычисляет ЭП. Чтобы пользователь мог генерировать и хранить ЭП, сертификат электронной подписи нужно установить в систему. Сделать это можно как с помощью стандартных средств операционной системы (если она поддерживает такие функции), так и с помощью криптопровайдера.
Для работы с квалифицированной электронной подписью чаще всего используются два криптопровайдера: КриптоПро CSP и ViPNet CSP.
Не рекомендуется использовать на одном компьютере два и более программных криптопровайдера. В этом случае они могут конфликтовать, что приведёт к трудноустранимым ошибкам при работе с ЭП.
В этой статье мы рассмотрим только принцип установки сертификата электронной подписи при помощи КриптоПро CSP.
## Системные требования для КриптоПро CSP
Последние версии КриптоПро CSP работают почти со всеми операционными системами: с Windows, macOS, Linux и другими. Уточнить, какая версия криптопровайдера подойдёт для вашей ОС, можно на сайте производителя.
## Где скачать КриптоПро CSP
У КриптоПро CSP есть бесплатная 90-дневная лицензия. Пока она действует, программный криптопровайдер работает в полнофункциональном режиме. После того как срок действия бесплатной лицензии закончится, пользователю нужно купить новую лицензию на криптопровайдер.
1. Зарегистрироваться на сайте. Если пользователь уже зарегистрирован, ему потребуется пройти авторизацию.
## Установка КриптоПро CSP на компьютер
1. В меню на главной странице сайта перейдите по пути Продукты → КриптоПро CSP → Загрузка файлов и примите условия лицензионного соглашения.
2. На открывшейся странице выберите и скачайте версию программы, подходящую для операционной системы на вашем компьютере.
Чтобы установить КриптоПро CSP на компьютер, запустите скачанный файл и нажмите кнопку Установить в открывшемся окне. После завершения установки перезагрузите ПК.
## Приобретение лицензии КриптоПро CSP
Для получения лицензии КриптоПро CSP для дальнейшего использования, посетите сайт компании Астрал и заполните форму обратной связи. Наш менеджер свяжется с вами и поможет выбрать подходящую версию криптопровайдера.
## Установка сертификата ЭП с помощью КриптоПро CSP
Для установки сертификата электронной подписи на компьютер с помощью КриптоПро CSP, выполните следующие шаги:
1. Откройте меню Пуск, затем раздел Все программы и запустите КриптоПро CSP.
2. Перейдите на вкладку Сервис и нажмите кнопку Просмотреть сертификат в контейнере.
3. Нажмите кнопку Обзор, чтобы найти ключевой контейнер.
4. Выберите контейнер и нажмите ОК.
5. Нажмите Установить после заполнения информации о сертификате.
6. После успешной установки, программа укажет в какое хранилище был установлен сертификат. Нажмите ОК для завершения процесса.
Если возникли трудности при установке сертификата ЭП, вы всегда можете обратиться за помощью к сотрудникам компании Астрал, которые оказывают услуги по удаленной настройке рабочего места.
Чтобы оказать услугу, наш сотрудник должен получить удалённый доступ к вашему компьютеру. После подключения к вашему рабочему месту специалист подготовит его к применению ЭП:
Настроит работу криптопровайдера.
Проверит настройки защищённого носителя ЭП.
Скорректирует настройки браузера.
Удостоверится в том, что плагин для использования электронной подписи в браузере работает так, как нужно.
Вместе с сотрудником вы сможете проверить электронную подпись на любой электронной торговой площадке.
Минимальная стоимость услуги составляет 1 тысячу рублей. , и наш менеджер свяжется с вами, чтобы ответить на дополнительные вопросы и уточнить детали заказа.
Время на прочтение
Закрытый ключ КриптоПро CSP представляет из себя флеш-накопитель, на котором в директории ххххх.000 лежат файлы primary.key, primary2.key, masks.key, masks2.key, name.key и header.key.

Такие ключи читаются только программой CryptoProJCP, серверная лицензия которой стоит на данный момент 120 тыс рублей.
Но наша задача – получить .p12 контейнер с наименьшими затратами.
C контейнером .p12 можно работать из java например с помощью библиотеки bouncycastle.
Но это уже тема следующей статьи.
Для экспорта ключа нам поможет замечательная утилита P12FromGostCSP, которая позволяет конвертировать ключ в формат .pfx
Мы вставляем флешку, запускаем утилиту и выбираем ключ для преобразования. Далее указываем пароль на хранилище и на выходе получим хранилище формата .pfx
Впрочем, это только начало, так как после конвертации контейнер все еще недоступен для чтения из java.
Далее нам потребуется с помощью OpenSSL извлечь закрытый ключ и сертификат и поместить их в .p12 хранилище.
Но есть проблема – OpenSSL из коробки не работает с алгоритмом ГОСТ 2012
Для этого нам потребуется программа openssl с поставленным на нее дополнением gost engine (ссылка тут). Нам необходимо установить это дополнение, следуя инструкциям, скомпилировав его из исходников.
Мы можем воспользоваться докер-контейнером, в котором уже установлен OpenSSL вместе с дополнением для корректной работы с алгоритмом ГОСТ 2012.
Ссылка на статью с описанием работы с данным докер-образом: Docker-образы с поддержкой ГОСТ-сертификатов в openssl, curl, php, nginx
В самом простом варианте нам требуется запустить этот докер-контейнер, подключиться к нему пробросив volume и выполнить пару консольных команд для извлечения закрытого ключа и сертификата из .pfx и помещения их в .p12
Запустим контейнер, пробросив папку tmp. В ней будем выполнять преобразования.
docker run -v "c:/tmp:/usr/tmp" --rm -i -t rnix/openssl-gost bash
#Достаем ключ
openssl pkcs12 -in gost.pfx -out gost.key -nocerts
#После команды задаем пароль для ключа.
#Достаем сертификат
openssl pkcs12 -in gost.pfx -out gost.cer -nokeys
#Объединяем их в хранилище p12, задавая ключу имя prod, его нужно будет прописать в application.properties как key.alias
openssl pkcs12 -export -inkey gost.key -in gost.cer -out gost.p12 -name prod
P.S. Если тема интересна, напишу статью как сделать сервис на spring boot, который будет подписывать файлы и сообщения с помощью ключа и сертификата в .p12 контейнере по алгоритму ГОСТ 2012.
Спасибо за внимание 🙂
|
CyberWatcher | #1 Оставлено : 17 апреля 2023 г. 17:44:10(UTC) |
| —————————————————————————————————————————————————————————————————————————————————————————————————————————— | ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————– |
|
Статус: Активный участникГруппы: УчастникиЗарегистрирован: 13.04.2023(UTC)Сообщений: 39
Откуда: МоскваСказал(а) «Спасибо»: 12 раз | Добрый день!Установил КриптоПро 5 в Ubuntu 22.04Команда csptest -keyset -enum_cont -fqcn -verifycТо есть нет контейнера куда размещать сертификаты.Так же в каталоге /var/opt/cprocsp нет каталога keys, где по идее должны размещаться закрыте ключиПоэтому есть несколько вопросов:1. Надо ли создавать контейнер чтобы поместить туда сертификат? Если надо то как?2. Где лежит сам сертификат (.cer)?3. Как на целевом компьюетре связать сертификат с закрытыми ключами?4. Как правильно создавать каталог keys в каталоге /var/opt/cprocsp? Может ли он создваться автоматически каколй либо командой криптопро CLI?Собственно все это нужно сделать через CLI, так как GUI на сервер не устанавливал.P.S. По форуму искал, но к соажлению не нашел, ответа на эти вопросы. |
|
| |
| | | |
| | |
|
nickm | #2 Оставлено : 17 апреля 2023 г. 19:12:05(UTC) |
| ————————————————————————————————————————————————————————————————————————————————————————————————————- | —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————– |
|
Статус: Активный участникГруппы: УчастникиЗарегистрирован: 31.05.2016(UTC)Сообщений: 1,746Сказал(а) «Спасибо»: 426 разПоблагодарили: 291 раз в 276 постах | 1. Надо ли создавать контейнер чтобы поместить туда сертификат? Если надо то как?Так Вы же выше написали, что:Я хочу перетащить сертификат и ключи к нему на сервер., поэтому копируйте контейнер;2. Где лежит сам сертификат (.cer)?Сертификат может быть как отдельным файлом, так и помещён в контейнер;3. Как на целевом компьютере связать сертификат с закрытыми ключами?Если сертификат отдельным файлом, то так, например:/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -file ~/cert.cer -cont ‘\\.\HDIMAGE\HDIMAGE\\username\0000’ -pin <если_есть> полный путь к контейнеру можно узнать следующей командой:/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn -unique Еcли сертификат в контейнере, то так, например:/opt/cprocsp/bin/amd64/csptestf -absorb -certs |
|
| |
|
1 пользователь поблагодарил nickm за этот пост. | CyberWatcher |
| | |
|
CyberWatcher | #3 Оставлено : 17 апреля 2023 г. 19:28:51(UTC) |
| —————————————————————————————————————————————————————————————————————————————————————————————————————————— | ————————————————————————————————————————————————— |
|
Статус: Активный участникГруппы: УчастникиЗарегистрирован: 13.04.2023(UTC)Сообщений: 39
Откуда: МоскваСказал(а) «Спасибо»: 12 раз | Команда csptestf -absorb -certsТо есть нет контейнеров.Вопрос прежний как создать контейнер содержащий закрытые ключи и связать его с сертификатом? |
|
| |
| | | |
| | |
|
Андрей * | #4 Оставлено : 17 апреля 2023 г. 19:34:22(UTC) |
| ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————- | —————————————————————— |
|
Группы: УчастникиЗарегистрирован: 26.07.2011(UTC)Сообщений: 12,583
Сказал «Спасибо»: 487 разПоблагодарили: 2024 раз в 1569 постах | Команда csptestf -absorb -certsпосле этого csptestf -absorb -certs |
| Техническую поддержку оказываем тут Наша база знаний | |
|
| |
| | | |
| | |
|
CyberWatcher | #5 Оставлено : 17 апреля 2023 г. 19:45:10(UTC) |
| —————————————————————————————————————————————————————————————————————————————————————————————————————————— | ——————————————————————————————————————————————————————————————————————————————————————————————————– |
|
Статус: Активный участникГруппы: УчастникиЗарегистрирован: 13.04.2023(UTC)Сообщений: 39
Откуда: МоскваСказал(а) «Спасибо»: 12 раз | Если сертификат отдельным файлом, то так, например:/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -file ~/cert.cer -cont ‘\\.\HDIMAGE\HDIMAGE\\username\0000’ -pin <если_есть> это сработает в случае если контейнер уже есть, но у меня как я писал выше контейнера нетКак создать контейнер? |
|
| |
| | | |
| | |
|
CyberWatcher | #6 Оставлено : 17 апреля 2023 г. 19:56:37(UTC) |
| —————————————————————————————————————————————————————————————————————————————————————————————————————————— | ————————————————————————- |
|
Статус: Активный участникГруппы: УчастникиЗарегистрирован: 13.04.2023(UTC)Сообщений: 39
Откуда: МоскваСказал(а) «Спасибо»: 12 раз | после этого csptestf -absorb -certsсделал такую структуруГде я накосячил? |
|
| |
| | | |
| | |
|
Андрей * | #7 Оставлено : 17 апреля 2023 г. 20:03:40(UTC) |
| ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————- | ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————– |
|
Группы: УчастникиЗарегистрирован: 26.07.2011(UTC)Сообщений: 12,583
Сказал «Спасибо»: 487 разПоблагодарили: 2024 раз в 1569 постах | Если сертификат отдельным файлом, то так, например:/opt/cprocsp/bin/amd64/certmgr -inst -store uMy -file ~/cert.cer -cont ‘\\.\HDIMAGE\HDIMAGE\\username\0000’ -pin <если_есть> это сработает в случае если контейнер уже есть, но у меня как я писал выше контейнера нетКак создать контейнер?1) сгенерировать запрос на сертификат:2) отправить запрос в base64 и получить тестовый сертификат: http://testgost2012.cryptopro.ru/certsrv/предварительно установив в корневое хранилище сертификат тестового УЦ. |
| Техническую поддержку оказываем тут Наша база знаний | |
|
| |
| | | |
| | |
|
CyberWatcher | #8 Оставлено : 17 апреля 2023 г. 20:09:22(UTC) |
| —————————————————————————————————————————————————————————————————————————————————————————————————————————— | ——————————————————– |
|
Статус: Активный участникГруппы: УчастникиЗарегистрирован: 13.04.2023(UTC)Сообщений: 39
Откуда: МоскваСказал(а) «Спасибо»: 12 раз | А зачем мне запрашивать сертификат, если он у меня есть? |
|
| |
| | | |
| | |
|
Андрей * | #9 Оставлено : 17 апреля 2023 г. 20:15:11(UTC) |
| ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————- | ——————————————————————————————————————————————————————————————————————————————————– |
|
Группы: УчастникиЗарегистрирован: 26.07.2011(UTC)Сообщений: 12,583
Сказал «Спасибо»: 487 разПоблагодарили: 2024 раз в 1569 постах | А зачем мне запрашивать сертификат, если он у меня есть?это для тех, кому нужно создать контейнер.А если уже есть – то перенести, как ранее сообщалось.+ есть вариант, там где GUI – сделать экспорт в pfx, а там, где нет GUI – сделать импорт из pfx. |
| Техническую поддержку оказываем тут Наша база знаний | |
|
| |
| | | |
| | |
|
Андрей * | #10 Оставлено : 17 апреля 2023 г. 20:16:44(UTC) |
| ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————- | ————————————————————————- |
|
Группы: УчастникиЗарегистрирован: 26.07.2011(UTC)Сообщений: 12,583
Сказал «Спасибо»: 487 разПоблагодарили: 2024 раз в 1569 постах | после этого csptestf -absorb -certsсделал такую структуруГде я накосячил? |
| Техническую поддержку оказываем тут Наша база знаний | |
|
| |
|
1 пользователь поблагодарил Андрей * за этот пост. | CyberWatcher |
| | |
| Пользователи, просматривающие эту тему |
| ————————————– |
| |
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
"Краткость – сестра таланта" – именно так сказал Антон Павлович Чехов, и теперь говорю я. Сегодня, завтра и до конца дней площадки речь пойдет о WebSocket-ах: "Что это?", "Как работает?" и главное – "Как это взламывать?" (в целях этичного хакинга конечно). Начнем с простого и будем идти к более сложному, пробираясь через тернии к звёздам. Приятного чтения.
Помните, что использование полученных знаний и навыков должно быть ограничено законными и этическими рамками, и вмешательство в чужие сети без разрешения является неприемлемым и незаконным действием.
Оглавление
Начнем с основ
WebSocket (веб-сокет) – это протокол для двусторонней связи между клиентом и сервером через веб-соединение. Он предоставляет возможность передавать данные в режиме реального времени без необходимости постоянного запроса к серверу. WebSocket обеспечивает более эффективное соединение и не такие накладные расходы на его организацию, чем традиционные методы – например, HTTP-запросы и ответы.
Протокол имеет две схемы URI:
Вот основные характеристики и особенности WebSocket:
Установка соединения: WebSocket начинается с установки соединения через HTTP (обычно используется стандартный порт 80 или защищенный порт 443). После успешной установки соединения клиент и сервер могут обмениваться данными в реальном времени;
Двусторонняя связь: WebSocket поддерживает как отправку данных от клиента к серверу, так и от сервера к клиенту. Это позволяет строить интерактивные веб-приложения, где клиент и сервер могут обмениваться информацией без задержек;
Низкая задержка: WebSocket обеспечивает низкую задержку (лаг) по сравнению с традиционными методами долгого опроса (long polling) или периодическими запросами;
Протокол на основе кадров (frame-based protocol): Данные в WebSocket упаковываются в кадры (frames), что делает их эффективными для передачи и обработки;
Поддержка защиты (Security): WebSocket может использовать шифрование для обеспечения безопасности передаваемых данных, используя
wss://вместоws://в URL;Поддержка разных типов данных: WebSocket позволяет передавать различные типы данных, включая текст, бинарные данные и даже произвольные объекты;
Событийная модель: WebSocket использует событийную модель для обработки входящих данных. Это означает, что Вы можете реагировать на события, такие как открытие соединения, получение сообщения или закрытие соединения.
Пример использования WebSocket:
Клиент отправляет HTTP-запрос на сервер с заголовком "Upgrade: websocket".
Если сервер поддерживает WebSocket, он возвращает HTTP-ответ с заголовком
Upgrade: websocket, и соединение переключается на WebSocket.
- Клиент и сервер могут отправлять друг другу текстовые или бинарные кадры через установленное соединение.
- Клиент или сервер могут закрыть соединение по желанию, отправив специальный кадр.
Для лучшего понимания, представьте настольный теннис. Сервер периодически присылает ответ по WS с просьбой о действии – послать запрос на сервер. Если клиент отвечает до истечения тайм-аута — он подключен, если нет, то происходит разрыв соединения до следующего рукопожатия.
Давайте углубляться
Для детального понимания протокола WebSocket крайне важно знать его "строительный блок". Наиболее важные моменты упомянуты ниже.
Fin Bit – это фундаментальный бит WebSocket. Он автоматически генерируется при начале соединения.
RSV1, RSV2, RSV3 Bits – биты, зарезервированные для дальнейших возможностей.
Opcode является частью каждого кадра и объясняет процесс интерпретации данных полезной нагрузки конкретного кадра. Некоторые из распространенных значений Opcode – 0x00, 0x0, 0x02, 0x0a, 0x08 и многие другие.
Mask bit активизируется, когда один из битов установлен в 1.
WebSocket требует использования подобранного клиентом случайного ключа для всех данных полезной нагрузки. Маскирующий ключ, совмещенный с данными полезной нагрузки, помогает разделить данные полезной нагрузки в операции XOR. Это имеет большое значение с точки зрения безопасности прикладного API, поскольку маскирование позволяет предотвратить неправильную интерпретацию или отравление кэша.
Компоненты WS
Давайте подробнее разберемся в его важнейших компонентах:
Длина полезной нагрузки (Payload len)
Используется для кодирования общей длины данных полезной нагрузки в WebSocket. Payload len отображается, когда длина кодируемых данных меньше 126 байт. Если длина данных полезной нагрузки превышает 126 байт, то для описания длины полезной нагрузки используются дополнительные поля.
Masking-key
Каждый кадр, отправляемый клиентом на сервер, маскируется 32-битным значением. Маскирующий ключ отображается, когда бит маски равен 1. В случае если бит маски равен 0, маскирующий ключ будет равен нулю.
Данные полезной нагрузки (Payload data)
Всевозможные произвольные данные приложения и данные расширения называются данными полезной нагрузки. Эти данные используются клиентом и сервером для переговоров и применяются в ранних рукопожатиях WebSocket. Тут же, возникает вопрос – "А какие данные можно передавать?". WebSockets могут передавать любые типы данных, которые могут быть сериализованы в строковый или двоичный формат, включая текст, изображения и мультимедиа. Это делает их пригодными для широкого круга приложений, требующих обмена данными в реальном времени.
Как работает это рукопожатие ?
Рукопожатие — это первый шаг в общении между клиентом и сервером. Клиент и сервер для рукопожатия используют протокол HTTP, однако формат доставляемых сообщений немного различается. Не все критерии HTTP-сообщения соблюдены. Например, отсутствует заголовок Content-Length.
Сначала клиент устанавливает соединение с сервером и отправляет следующий запрос:
GET /echo HTTP/1.1
Host: localhost:8081
Sec-WebSocket-Version: 13
Origin: http://localhost:8081
Sec-WebSocket-Key: SWxvdmVjYXRzdmVyeW11Y2g=
Connection: keep-alive, Upgrade
Upgrade: websocket
Мы также можем спросить какая версия используется, указав любую цифру
Sec-WebSocket-Version: 16
Если сервер не может обмениваться данными с использованием указанной версии протокола WebSocket, он ответит ошибкой (например, 426 Требуется обновление), которая включает в свои заголовки заголовок Sec-WebSocket-Version со списком поддерживаемых версий, разделенных запятыми. версии протокола. Если сервер поддерживает запрошенную версию протокола, в ответ не включается заголовок Sec-WebSocket-Version.
Версия протокола WebSocket, которую клиент желает использовать при обмене данными с сервером. Этот номер должен быть самой последней версией, указанной в реестре номеров версий IANA WebSocket. Самая последняя версия протокола WebSocket — версия 13.
Соединение: Sec-WebSocket-Version, Sec-WebSocket-Key Upgrade и Upgrade: необходимы заголовки WebSocket; в противном случае сервер ответит HTTP/1.1 400 Bad Request. Вот как сервер отвечает на запрос клиента:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ3oYGazhZRuK+xOo=
Клиент генерирует заголовок Sec-WebSocket-Key как случайное 16-байтовое значение, закодированное в Base64.
Заголовки Sec-WebSocket-Key и Sec-WebSocket-Accept не используются для авторизации или поддержки сеансов; вместо этого они проверяют, что и запрос, и ответ используют протокол WebSocket. Это гарантирует, что сервер не будет принимать запросы от клиентов, не использующих WebSockets.
Если вы хотите углубиться ещё, то можете почитать Base Framing Protocol
Все сообщения клиента должны быть замаскированы. Пример сообщения «Привет, мир!» текстовое сообщение, отправленное клиенту (данные из tcpdump):
Fin: True
Reserved: 0x0
Opcode: Text (1)
Mask: True
Payload length: 14
Masking-Key: a9292b01
Payload: eaf7f76dcdb2ac6ed0fefx2021
Маскирование осуществляется обычным XOR с mask key. Клиент должен менять ключ для каждого передаваемого кадра. Сервер не должен маскировать свои сообщения. Пример передачи текстового сообщения "Hello world!" серверу:
Fin: True
Reserved: 0x0
Opcode: Text (1)
Mask: False
Payload length: 14
Payload: 98658c6c7f20776f726c642021
Поскольку маскировка передаваемых сообщений не является криптографической, для сохранения конфиденциальности с WebSocket следует использовать протокол TLS и схему WSS.
Основы есть, теперь к теме "а как с ним работать?"
Я мог бы начать говорить что вот у postman есть возможность работать с WebSocket (как неожиданно 😂), но я хочу рассказать про то, чем сам пользуюсь в последнее время и при написании этой статьи.
SocketSleuth
На моём телеграмм канале уже вышел краткий обзор инструмента SocketSleuth, но сейчас мы разберём его более детально.
Референс – Ссылка
Возможности SocketSleuth
Ниже приведена краткая информация о ключевых возможностях, включенных в начальную бета-версию.
WebSocket Connection Manager
Просмотр всех различных WebSocket-соединений, запросов на установление соединения и сообщений в Burp Suite может быть несколько утомительным. Вкладка SocketSleuth WebSocket history облегчает просмотр этой информации и позволяет сосредоточиться на соответствующих WebSocket для конкретной задачи.
Перехват сообщений WebSocket с помощью функции match & replace
Простая, но мощная функция, которой нам не хватало, – это возможность задавать правила перехвата и подбора и замены для сообщений WebSocket. Бывает очень полезно автоматически заменять заданное значение в сообщении, и SocketSleuth позволяет это делать для сообщений WebSocket.
WebSocket AutoRepeater
Такие расширения в Burp-е, как Autorize и AutoRepeater, значительно упростили автоматизированное тестирование на проблемы авторизации. Функция WebSocket AutoRepeater основана на этих расширениях и позволяет указать сокет-источник и сокет-получатель, а также направление сообщения.
Когда AutoRepeater запущен, он принимает все сообщения от сокета-источника и, если направление совпадает с конфигурацией, автоматически воспроизводит сообщение в сокете назначения.
Если AutoRepeater сконфигурирован с двумя WebSockets, связанными с двумя различными уровнями привилегий, он может обеспечить простой способ тестирования авторизации для компонентов, использующих WebSockets.
WebSocket Intruder
Последней функцией, включенной в бета-версию, является WebSocket Intruder. Как и его аналог, работающий с HTTP-запросами, он призван обеспечить некоторые возможности автоматизации, которые могут быть использованы в различных сценариях, таких как перечисление скрытых методов, перебор параметров и другие необходимые действия. В начальном запуске присутствуют два типа атак злоумышленников: JSON RPC method discovery и Sniper.
А что там есть у Бурпа ?
Из коробки он тоже умеет с ними работать, хоть и не так полно, как хотелось бы.
Перехватывать и модифицировать сообщения WebSocket;
Воспроизводить и генерировать новые сообщения WebSocket;
Манипулировать соединениями WebSocket.
Вспомним и про Owasp Zap
Owasp ZAP может проводить автоматизированное сканирование (самое главное для нас, если он используется в пайплайне):
перехватывать и показывать сообщения WebSocket;
Устанавливать breakpoint на определенные типы сообщений WebSocket;
Пассивно сканировать WebSocket-сообщений и выдавать предупреждения с помощью скриптов.
Уязвимости WebSocket
Прекрасная диаграмма по уязвимостям от portswigger
В принципе, практически любая уязвимость веб-безопасности может быть связана с WebSockets:
Пользовательский ввод, передаваемый на сервер, может быть обработан небезопасным образом, что приведет к таким уязвимостям, как SQL-инъекция или инъекция внешней сущности XML;
Некоторые "слепые" уязвимости, достигаемые через WebSockets, могут быть обнаружены только с Out-of-band Application Security Testing (OAST);
Если данные, контролируемые злоумышленником, передаются через WebSockets другим пользователям приложения, то это может привести к XSS или другим уязвимостям на стороне клиента.
Манипулирование сообщениями WebSocket
Большинство уязвимостей WebSocket, связанных с вводом данных, могут быть найдены и использованы путем подмены содержимого сообщений WebSocket.
Например, предположим, что чат-приложение использует WebSockets для передачи чат-сообщений между браузером и сервером. Когда пользователь набирает сообщение в чате, на сервер отправляется WebSocket-сообщение следующего вида:
{"message":"Hello Cat"}
Содержимое сообщения передается (опять же через WebSockets) другому пользователю чата и отображается в его браузере следующим образом:
<td>Hello Cat</td>
В этой ситуации, при условии отсутствия других средств обработки входных данных или защиты, злоумышленник может осуществить XSS-атаку, передав следующее WebSocket-сообщение:
{"message":"<img src=1 onerror='alert(document.cookie)'>"}
Манипулирование рукопожатием WebSocket
Некоторые уязвимости WebSockets могут быть найдены и использованы только путем манипулирования рукопожатием WebSocket. Эти уязвимости, как правило, связаны с недостатками проектирования, такими как:
Неправильное доверие к HTTP-заголовкам для принятия решений о безопасности, например, к заголовку
X-Forwarded-For;Недостатки в механизмах обработки сеансов, поскольку контекст сеанса, в котором обрабатываются сообщения WebSocket, обычно определяется контекстом сеанса в сообщении квитирования;
Поверхность атаки, создаваемая пользовательскими HTTP-заголовками, используемыми приложением.
Использование межсайтовых WebSockets
Некоторые уязвимости в безопасности WebSockets возникают, когда злоумышленник устанавливает междоменное WebSocket‑соединение с сайта, который он контролирует. Такая атака называется межсайтовой WebSocket hijacking и предполагает использование уязвимости подделки межсайтового запроса (CSRF) в рукопожатии WebSocket. Атака часто имеет серьезные последствия, позволяя злоумышленнику выполнять привилегированные действия от имени пользователя‑жертвы или перехватывать конфиденциальные данные, к которым он имеет доступ.
Как находить ?
Для выявления уязвимости WebSocket в приложении можно выполнить следующие действия:
Позволяет ли приложение осуществлять обмен данными с использованием ws вместо wss?;
Осуществляется ли проверка ввода отправляемого сообщения?;
Проверяется ли заголовок Origin или там можно прописать свой собственный домен? (попробуйте использовать его, если в GET-запросе нет рандомизированного CSRF-токена);
Возможна ли неограниченная отправка междоменных вызовов, приводящая к DoS-атакам?
Используя WebSocket-клиент, попытайтесь подключиться к удаленному WebSocket-серверу. Если соединение установлено, возможно, сервер не проверяет заголовок origin в рукопожатии WebSocket.
Ниже перечислены наиболее распространенные слабые места в системе безопасности ws:
Cross-Site WebSocket Hijacking (CSRF with WebSockets);
Sensitive information disclosure over network;
Denial of Service;
CSWSH
Начнем немного из далека. Впервые проблема была описана Кристианом Шнайдером в его блоге. Поскольку WebSockets не ограничены политикой SOP (Same Origin Policy) браузера, при отсутствии защитных механизмов злоумышленник может инициировать WebSocket-коммуникацию с вредоносной страницы, нацеленной на уязвимую конечную точку wss, и в итоге получить возможность двустороннего взаимодействия с сервером.
Как обнаружить?
Метод тестирования практически идентичен JSON Hacking. Просто проверьте, можете ли вы установить WebSocket-соединение с сайта, отличного от сервиса, путем манипулирования заголовком Origin в веб-запросе Upgrade.
GET /connect HTTP/1.1
Upgrade:WebSocket
Origin: attacker.site.com
Connection: keep-alive, Upgrade
Upgrade:WebSocket
Эксплуатация
После успешного установления произвольного WebSocket-соединения необходимо проверить его воздействие. Для этого можно определить, что можно сделать, чтобы повлиять на пользователя во время WebSocket-соединения, а затем провести атаку на сессию пользователя, чтобы выполнить действия, которые он не планировал, получить информацию и т.д.
function editProfile(cswshSocket) {
var msg = {
type: "editProfile",
name: "attacked",
profile_image: "https://~~~",
};
cswshSocket.send(JSON.stringify(msg));
}
function getUserInfo(cswshSocket) {
var msg = {
type: "userInfo"
};
cswshSocket.send(JSON.stringify(msg));
}
cswshSocket.onopen = function (event) {
// Отредактируйте информацию о пользователе или воспользуйтесь кнопкой
editProfile(cswshSocket)
// Импорт данных или использование
getUserInfo()
};
cswshSocket.onmessage = function(event) {
console.log(JSON.parse(event.data))
}
"Bypass protection"
Конечно, ваш сервис может проверять заголовок Origin. Однако его можно обойти, используя те же доверенные домены, строки и т.д., что и при обычном перехвате JSON.
Origin: attacker.site.com
Origin: trust_domain.site.com
Origin: *
Инструменты для автоматизированного тестирования
Заключение
заработать денег
сделать интернет немножечко безопаснее. ^-^
P.S. Больше подобной информации и хороших мемов Вы сможете найти тут
Глоссарий
OLE-объект
Файл, присоединенный или встроенный в другой файл. Программы "Лаборатории Касперского" позволяют проверять на присутствие вирусов OLE-объекты. Например, если вы вставите какую-либо таблицу Microsoft Office Excel® в документ Microsoft Office Word, данная таблица будет проверяться как OLE-объект.
Агент администрирования
Компонент программы Kaspersky Security Center, осуществляющий взаимодействие между Сервером администрирования и программами "Лаборатории Касперского", установленными на конкретном сетевом узле (рабочей станции или сервере). Данный компонент является единым для всех программ "Лаборатории Касперского", работающих в операционной системе Windows. Для программ, работающих в других операционных системах, предназначены отдельные версии Агента администрирования.
Агент аутентификации
Интерфейс, позволяющий после шифрования загрузочного жесткого диска пройти процедуру аутентификации для доступа к зашифрованным жестким дискам и для загрузки операционной системы.
Активный ключ
Ключ, используемый в текущий момент для работы программы.
Антивирусные базы
Базы данных, которые содержат информацию об угрозах компьютерной безопасности, известных "Лаборатории Касперского" на момент выпуска антивирусных баз. Записи в антивирусных базах позволяют обнаруживать в проверяемых объектах вредоносный код. Антивирусные базы формируются специалистами "Лаборатории Касперского" и обновляются каждый час.
Архив
Один или несколько файлов, упакованных в один файл в сжатом виде. Для архивирования и разархивирования данных требуется специальная программа – архиватор.
База вредоносных веб-адресов
Список адресов веб-ресурсов, содержимое которых может быть расценено как опасное. Список сформирован специалистами "Лаборатории Касперского", регулярно обновляется и входит в поставку программы "Лаборатории Касперского".
База фишинговых веб-адресов
Список адресов веб-ресурсов, которые определены специалистами "Лаборатории Касперского" как фишинговые. База регулярно обновляется и входит в поставку программы "Лаборатории Касперского".
Группа администрирования
Набор устройств, объединенных в соответствии с выполняемыми функциями и устанавливаемым на них набором программ "Лаборатории Касперского". Устройства группируются для удобства управления ими как единым целым. В состав группы могут входить другие группы. Для каждой из установленных в группе программ могут быть созданы групповые политики и сформированы групповые задачи.
Доверенный платформенный модуль
Микрочип, разработанный для предоставления основных функций, связанных с безопасностью (например, для хранения ключей шифрования). Доверенный платформенный модуль обычно устанавливается на материнской плате компьютера и взаимодействует с остальными компонентами системы при помощи аппаратной шины.
Дополнительный ключ
Ключ, подтверждающий право на использование программы, но не используемый в текущий момент.
Задача
Функции, выполняемые программой "Лаборатории Касперского", реализованы в виде задач, например: Постоянная защита файлов, Полная проверка устройства, Обновление баз.
Зараженный файл
Файл, внутри которого содержится вредоносный код (при проверке файла был обнаружен код известной программы, представляющей угрозу). Специалисты "Лаборатории Касперского" не рекомендуют вам работать с такими файлами, поскольку это может привести к заражению вашего компьютера.
Издатель сертификата
Центр сертификации, выдавший сертификат.
Лечение объектов
Способ обработки зараженных объектов, в результате применения которого происходит полное или частичное восстановление данных. Не все зараженные объекты можно вылечить.
Лицензионный сертификат
Документ, который передает вам вместе с файлом ключа или кодом активации "Лаборатория Касперского". Документ содержит информацию о предоставляемой лицензии.
Ложное срабатывание
Ситуация, когда незараженный файл определяется программой "Лаборатории Касперского" как зараженный ввиду того, что его код напоминает код вируса.
Маска
Представление названия и расширения файла общими символами.
Для формирования маски файла можно использовать любые символы, допустимые в названиях файлов, в том числе специальные:
Символ
*, который заменяет любой набор символов, в том числе пустой, кроме символов\и/(разделители имен файлов и папок в путях к файлам и папкам). Например, маскаC:\*\*.txtбудет включать все пути к файлам с расширением txt, расположенным в папках на диске (C:), но не в подпапках.Два введенных подряд символа
*заменяют любой набор символов, в том числе пустой, в имени файла или папки, включая символы\и/(разделители имен файлов и папок в путях к файлам и папкам). Например, маскаC:\Folder\**\*.txtбудет включать все пути к файлам с расширением txt в папкеFolderи вложенных папках. Маска должна включать хотя бы один уровень вложенности. МаскаC:\**\*.txtне работает. Маска ** доступна только для создания исключений из проверки.Символ
?, который заменяет любой один символ, кроме символов\и/(разделители имен файлов и папок в путях к файлам и папкам). Например, маскаC:\Folder\???.txtбудет включать пути ко всем расположенным в папкеFolderфайлам с расширением txt и именем, состоящим из трех символов.
Нормализованная форма адреса веб-ресурса
Нормализованной формой адреса веб-ресурса называется текстовое представление адреса веб-ресурса, полученное в результате применения нормализации. Нормализация – процесс, в результате которого текстовое представление адреса веб-ресурса изменяется в соответствии с определенными правилами (например, исключение из текстового представления адреса веб-ресурса имени пользователя, пароля и порта соединения, понижение верхнего регистра символов адреса веб-ресурса до нижнего регистра).
В контексте работы компонентов защиты цель нормализации адресов веб-ресурсов заключается в том, чтобы проверять синтаксически различные, но физически эквивалентные адреса веб-ресурсов один раз.
Ненормализованная форма адреса: www.Example.com\.
Нормализованная форма адреса: www.example.com.
Область защиты
Объекты, которые компонент базовой защиты постоянно проверяет во время своей работы. Область защиты разных компонентов имеет разные свойства.
Область проверки
Объекты, которые Kaspersky Endpoint Security проверяет во время выполнения задачи проверки.
Портативный файловый менеджер
Программа, предоставляющая интерфейс для работы с зашифрованными файлами на съемных дисках при недоступности функциональности шифрования на компьютере.
Потенциально заражаемый файл
Файл, который в силу своей структуры или формата может быть использован злоумышленниками в качестве "контейнера" для размещения и распространения вредоносного кода. Как правило, это исполняемые файлы, например, с расширением com, exe, dll и др. Риск внедрения в такие файлы вредоносного кода достаточно высок.
Новичок в крипте и web3?
Направляйтесь в MetaMask Learn, где специально для новичков простым языком объясняются основы web3. Платформа совершенно бесплатна, доступна на нескольких языках и включает такие полезные инструменты, как симуляторы, которые помогут вам освоиться в MetaMask.
В этой статье:
Другая модель безопасности аккаунта
Технология публичного блокчейна использует совершенно другой набор инструментов для защиты данных пользователей по сравнению с традиционными онлайн-технологиями. Большинство из нас привыкли к тому, что, создав учетную запись в приложении или сервисе, мы можем, например, написать в службу поддержки, чтобы сбросить пароль или имя пользователя. Мы привыкли, что приложение хранит наши данные, предположительно на каком-то компьютере, принадлежащем компании.
