Слабка випадковість

Слабка випадковість

Випадкове на вигляд — не те саме, що непередбачуване.

Що таке Слабка випадковість?

Слабка випадковість — це генерування значення, яке не можна вгадати, швидким некриптографічним генератором. Статистична рівномірність не означає непередбачуваності: стан малий, а функція переходу детермінована. Math.random() у V8 — це xorshift128+, 128 бітів стану, які можна відновити за чотирма спостережуваними значеннями. Ви зберете токени скидання для облікового запису, який контролюєте, розв'яжете задачу відновлення стану, передбачите наступний токен і викрадете чужий обліковий запис в ощадному застосунку, не заглядаючи до поштової скриньки її власника. Виправлення — один рядок, crypto.randomBytes(32).toString('hex') , а хешування слабкого результату нічого не змінює.

Що ви дізнаєтесь у Слабка випадковість

Слабка випадковість — Кроки навчання

  1. Оцініть ціль

    Боб заробляє на життя тим, що проникає в чужі облікові записи й забирає гроші, які на них лежать. Сьогодні його ціль — Nestward, застосунок для заощаджень, де на одному обліковому записі можуть лежати значні суми. Він починає зі сторінки скидання пароля — вхідних дверей, якими збирається зайти, — щоб побачити, як працює відновлення доступу, перш ніж щось робити.

  2. Як працює відновлення доступу

    Боба ця сторінка цікавить через одну деталь.

  3. Запросіть скидання пароля для себе

    Боб починає з кодів, які має право бачити. Йому належить одноразовий обліковий запис bob.reeve@proton.me, тому він запитує для нього скидання пароля й відкриває лист, який надсилає Nestward. Посилання для скидання в цьому листі містить код повністю.

  4. Зберіть другий код

    Одного коду замало, щоб помітити закономірність, тож Боб запитує ще одне скидання для того самого облікового запису й читає другий лист.

  5. Ще один код

    Третє скидання дає Бобові три коди, потрібні його розв'язувачу. Він читає останній лист і складає коди докупи.

  6. Передбачте наступний код

    Nestward генерує ці коди швидким некриптографічним генератором із малим внутрішнім станом. Боб подає розв'язувачу три коди, які прочитав у своїй поштовій скриньці; розв'язувач відновлює цей стан і проганяє генератор уперед. Інструмент виводить точний код, який застосунок поставить у наступне ж посилання для скидання, незалежно від того, для якого облікового запису запитують скидання.

  7. Ініціюйте скидання пароля жертви

    Передбачений код — наступний, який видасть генератор, тож Бобові треба змусити генератор видати цей код зараз. Він запитує скидання для справжньої клієнтки, renata.voss@gmail.com. Nestward генерує наступний код, вставляє його в посилання й надсилає листом Ренаті, до чиєї поштової скриньки Боб доступу не має.

  8. Використайте передбачений код

    Тепер Боб використовує код, який передбачив. Він надсилає код безпосередньо на ендпоінт скидання пароля разом із новим паролем, і, оскільки код збігається з тим, який Nestward щойно надіслав Ренаті, сервер приймає його й встановлює для її облікового запису пароль, який задав Боб.

  9. Обліковий запис тепер у Боба

    Ендпоінт прийняв код і змінив пароль. Тепер Боб увійшов в обліковий запис ощадного застосунку, який йому не належить.

  10. Перевірка знань

Охоплення стандартів безпеки

OWASP Top 10

  • A04:2025 Cryptographic Failures
  • A02:2021 Cryptographic Failures

CWE

  • CWE-330 Use of Insufficiently Random Values
  • CWE-338 Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security