Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
BEAST-PoC — :muscle: Доказательство концепции атаки BEAST против SSL/TLS CVE-2011-3389 :muscle: | Kitploit
Инструменты/GitHubGitHub/mpgn/beast-poc
Анализ уязвимостейЭксплуатацияВеб-безопасностьКриптографияТестирование на ПроникновениеОбучение и Образование
GitHubmpgn/beast-poc

BEAST-PoC

💪 Доказательство концепции атаки BEAST против SSL/TLS CVE-2011-3389 💪

Репозиторий
80317 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

BEAST-PoC (атака с выбранным открытым текстом)

Этот PoC посвящён криптографии, лежащей в основе атаки BEAST (Browser Exploit Against SSL/TLS), представленной Тай Дуонгом и Джулиано Риццо 23 сентября 2011 года. Это атака с выбранным открытым текстом, и она позволяет извлекать конфиденциальную информацию, если используется протокол Transport Layer Security версии TLS1.0 или SSLv3. Оригинальный PoC можно найти здесь: Here come the Ninjas

Примечание: Это также реализация уязвимости, изначально обнаруженной Филлипом Рогавеем. Уязвимость была обнаружена в 2002 году, но до BEAST в 2011 году не было выпущено ни одного эксплойта. OpenSSL уже знал о проблеме, и именно поэтому в апреле 2006 года они обновили TLS1.0 до TLS1.1.

2 CBC IV для каждой записи, кроме первой, является последним блоком шифротекста предыдущей записи. Таким образом, шифрование не является безопасным для противников, которые могут адаптивно выбирать открытые тексты;

Будь BEAST

1. SSLv3/TLS1.0 и режим шифрования CBC

SSLv3/TLS1.0 — это протоколы для шифрования/дешифрования и защиты ваших данных. В нашем случае оба используют режим сцепления блоков CBC. Открытый текст делится на блоки в зависимости от алгоритма шифрования (AES, DES, 3DES), а длина кратна 8 или 16. Если открытый текст не заполняет длину, в конец добавляется padding для заполнения недостающего места. Я настоятельно рекомендую открыть изображения шифрования и дешифрования, чтобы читать этот readme.

По сути, это простое XOR, вы также можете посмотреть это видео (не моё) https://www.youtube.com/watch?v=0D7OwYp6ZEc.

Я расскажу об IV в следующем пункте. Помните, что все эти свойства помогут нам провести нашу атаку.

2. Криптология

При использовании CBC нам нужен вектор инициализации, называемый IV. Этот IV случаен (или фиксирован), но в любом случае он не должен быть предсказуем для кого-либо. В TLS1.0 и SSLv3 первый IV запроса случаен, это хорошо. Но чтобы сэкономить время и не генерировать каждый раз новый случайный IV, реализация TLS1.0 и SSLv3 использовала последний блок предыдущего шифротекста в качестве IV. Другими словами, теперь IV можно угадать. Будем считать, что длина каждого блока равна 8 (DES), а у атакующего есть MiTM, чтобы перехватывать весь шифротекст.

Пример :

C0 | C... | Ci-1 | Ci | Ci+1 |Cn

Теперь самое интересное: вот различные криптографические шаги атаки для получения одного байта:

  • сначала мы отправляем запрос, называемый C², чтобы получить последний блок шифра, то есть следующий IV второго запроса
  • это атака с выбранным открытым текстом, поэтому атакующий может отправить это сообщение bbbbbbbTHIS_IS_A_SECRET_COOKIE через жертву.

Вы можете заметить семь b перед секретным cookie. Если длина блока равна 8, нам нужно поместить 7 известных байт. Эта информация очень важна: атакующий знает первые 7 байт первого блока.

Но зачем? Это позволяет нам иметь всего 256 вариантов, чтобы найти один байт, а не 256^8, чтобы найти 8 байт!

Теперь жертва отправляет запрос, и он будет зашифрован так:

C0 | C1 | C2 | C3 | C4

Где C0 = Ek(IV ⊕ bbbbbbbT) = Ek(C²n ⊕ bbbbbbbT)

  • атакующий хочет получить информацию из блоков C0, C1, C2 ... ему всегда нужен предыдущий блок
  • третий запрос отправляется после создания специального блока P'0. Первый блок будет зашифрован так: C'0 = Ek(P'0 ⊕ IV') Поскольку это атака с выбранным открытым текстом, атакующий может сконструировать блок P'0 следующим образом:

P'0 = C²n ⊕ C4 ⊕ bbbbbbbX

Единственный неизвестный элемент — X, есть 256 возможностей, поэтому он переберёт максимум 256 символов. Запрос отправляется и шифруется так:

C'0 = Ek(P'0 ⊕ IV')
C'0 = Ek(C²n ⊕ C4 ⊕ bbbbbbbX ⊕ IV') или C4 ⊕ IV' = 0
C'0 = Ek(C²n ⊕ bbbbbbbX)
C'0 = Ek(IV ⊕ bbbbbbbX)

Теперь он сравнивает C'0 и C0: если они равны, значит, он только что нашёл байт X в позиции 8. Если не совпадает, он пробует другой символ и снова сравнивает, и т. д.

Теперь, когда у нас есть один байт, мы можем получить следующий, сдвинув предыдущий запрос на один влево: bbbbbbTHIS_IS_A_SECRET_COOKIE. Теперь у него шесть b, и мы также знаем T, так что у нас есть один неизвестный символ. Мы строим новый P'0 = C0 ⊕ C4 ⊕ bbbbbbTX и т. д.

Примечание: другой способ всего с двумя запросами — установить первый блок открытого текста и использовать эту информацию для трёх XOR. Нам больше не нужен последний блок C². C1 = Ek(C0 ⊕ bbbbbbbT), а затем P'0 = C0 ⊕ C4 ⊕ bbbbbbbX. Ему также нужно сравнить C'0 и C1. Это ещё один способ сделать это; вы можете заметить, что в PoC я закодировал оба варианта :)

Теперь мы можем получить все символы!

Запуск

root@kitploit:~
python BEAST-poc.py

asciicast

Атака

Атакующий не может использовать HTTP-протокол, потому что первый блок будет заполнен строкой GET / HTTP/1.1\r\n.

... не может контролировать первые несколько байт каждого запроса, потому что они всегда задаются как фиксированная строка, такая как GET /, POST / и т. д. Вместо этого он может использовать сокет.

Ему также нужно внедрить некий javascript на вредоносную страницу. Жертва должна быть подключена к этой странице и оставаться на ней, пока атака не будет завершена. Это атака с выбранным открытым текстом, поэтому атакующий может отправлять через javascript-код любой открытый текст, какой захочет, и перехватывать результат с помощью Man in The Middle. Вот диаграмма атаки:

beast

Для успешности этой атаки необходимо соблюдение важных условий (TLS1.0 или ниже, режим шифрования CBC, MiTM, вредоносный javascript). Но Тай Дуонг и Джулиано Риццо доказали, что это возможно, и продемонстрировали свой эксплойт, украв cookie на сайте Paypal.

Всё уже исправлено, и вероятность реализации этой атаки мала.

Автор

mpgn

Лицензии

лицензия MIT

Ссылки

  • http://netifera.com/research/beast/beast_DRAFT_0621.pdf
  • http://www.bortzmeyer.org/beast-tls.html
  • http://fr.slideshare.net/danrlde/20120418-luedtke-ssltlscbcbeast
  • http://crypto.stackexchange.com/questions/5094/is-aes-in-cbc-mode-secure-if-a-known-and-or-fixed-iv-is-used
  • http://security.stackexchange.com/questions/18505/is-beast-really-fixed-in-all-modern-browsers
  • https://defuse.ca/cbcmodeiv.htm
  • http://stackoverflow.com/questions/22644392/chrome-websockets-cors-policy
Скачать инструмент
ШифрованиеДешифрование
Ci = Ek(Pi ⊕ Ci-1), и C0 = IVPi = Dk(Ci) ⊕ Ci-1, и C0 = IV