Слабка випадковість
Випадковий вигляд – це не те саме, що непередбачуваний.
Що таке Слабка випадковість?
Слабка випадковість — це карбування значення, яке неможливо вгадати, за допомогою швидкого некриптографічного генератора. Статистична однорідність не є непередбачуваністю: стан малий, а функція переходу детермінована. Math.random() у V8 — це xorshift128+, 128 біт стану, які можна реконструювати з чотирьох спостережуваних виходів. Ви будете збирати маркери скидання з облікового запису, яким ви керуєте, вирішувати стан, прогнозувати наступний маркер і заволодіти ощадним рахунком незнайомця, не торкаючись його папки 'Вхідні'. Виправлення полягає в одному рядку, crypto.randomBytes(32).toString('hex') , і хешування слабких результатів нічого не змінює.
Що ви дізнаєтесь у Слабка випадковість
- Відрізнити PRNG (швидкий, статистично рівномірний) від CSPRNG (стійкий до відновлення стану за результатами спостереження)
- Визнайте, що хешування вихідних даних слабкого PRNG не робить його безпечним, хеш детермінований, а вхідні дані все ще передбачувані
- Застосуйте <code>crypto.randomBytes</code> / <code>crypto.randomUUID</code> (Node), <code>crypto.getRandomValues</code> (Web Crypto) або <code>os.urandom</code> (Python) для кожного чутливого до безпеки значення
- Аудит кодової бази для суміжних сайтів викликів, маркерів скидання, маркерів запрошень, резервних кодів MFA, стану OAuth, одноразових URL-адрес із підписом, генераторів паролів адміністратора — усі вони мають ту саму вразливість, коли походять від <code>Math.random</code>
- Інтерналізуйте правило: значення, передбачене зловмисником, має отримати користь від криптографічного джерела за замовчуванням, кожна мова робить це вибір для одного імпорту, тому неправильне значення за умовчанням не має виправдання
Слабка випадковість — Кроки навчання
-
Збільште розмір мішені
Боб заробляє на життя тим, що проникає в чужі рахунки та забирає гроші всередину. Сьогодні його метою є Nestward, ощадний додаток, де на одному рахунку можна зберігати реальні баланси. Він починає зі сторінки скидання пароля, передніх дверей, крізь які він планує пройти, щоб побачити, як працює відновлення, перш ніж торкнутися її.
-
Як відбувається відновлення
Одна деталь на цій сторінці — причина, чому Боб зацікавлений.
-
Вимагати скидання для себе
Боб починає з кодів, які йому дозволено бачити. Йому належить одноразовий обліковий запис bob.reeve@proton.me, тому він просить скинути його та відкриває електронний лист, який Nestward надсилає. Посилання для скидання в цьому електронному листі містить повний код.
-
Зберіть другий код
Одного коду недостатньо, щоб побачити шаблон, тому Боб запитує ще одне скидання для того самого облікового запису та читає другий електронний лист.
-
Ще один код
Третє скидання дає Бобу три коди, необхідні його розв’язувачу. Він читає останній електронний лист і вибудовує коди.
-
Передбачте наступний код
Nestward карбує ці коди за допомогою швидкого некриптографічного генератора, який має малий внутрішній стан. Боб передає три коди, які він прочитав зі своєї папки 'Вхідні', у розв’язувач, який реконструює цей стан і запускає його вперед. Інструмент друкує точний код, який додаток розмістить у наступному надісланому посиланні для скидання, незалежно від того, для якого облікового запису це скидання.
-
Запустити скидання жертви
Прогнозований код є наступним, який видасть генератор, тому Боб має змусити його випустити цей код зараз. Він запитує скидання для справжнього клієнта, renata.voss@gmail.com. Nestward карбує наступний код, вставляє його в посилання та надсилає електронною поштою Ренаті, яку Боб не може прочитати.
-
Активуйте передбачений код
Тепер Боб використовує передбачений ним код. Він надсилає його прямо до кінцевої точки скидання з новим паролем, і оскільки він збігається з кодом, який Nestward щойно надіслав Ренаті, сервер приймає його та встановлює його пароль для її облікового запису.
-
Рахунок його
Кінцева точка прийняла код і змінила пароль. Зараз Боб увійшов на чужий ощадний рахунок.
-
Перевірка знань
Ви щойно спостерігали, як зловмисник передбачив код скидання, який йому так і не показали. Зафіксуйте, чому це стало можливим.
Охоплення стандартів безпеки
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