SlideShare a Scribd company logo
1 of 19
Download to read offline
Apache RandomStringUtils hacking
By Taras Tatarinov
Jun 30, 2013
WhoamI
• Wannabe IRL
Применение генератора случайных чисел
• -Ключи
• -Токены
• -Идентификаторы
• -Генератор паролей
• -Капчи
Немного истории
• Уязвимости ГПСЧ находили в:
• Windows XP
• Windows server 2003
• Ранние версии SSL(v1)
• PHP (дада, PHPSESSID) функции mt_rand(),
rand(), uniqid(), shuffle(), lcg_value()
Как это выглядит
Генераторы случайных и псевдослучайных чисел
• Генераторы случайных чисел аппаратные
• Идеальный источник энтропии- белый шум
• Генераторы псевдослучайных чисел
алгоритмические
• Проблема генераторов псевдослучайных
чисел- последовательность и
зацикленность.
• ГСЧ= ГПСЧ+ источник энтропии
Предпосылки для «взлома» ГПСЧ
• Значения генерируются исходя из текущего
внутреннего состояния ГПСЧ
• Для генерации случайных значений
используются однонаправленные свертки.
• При одном и том же исходном значении Seed
и равном количестве переходов, значения
случайных величин будут одинаковы.
• Вывод. Если станет известно текущее
состояние ГСПЧ все последующие состояния и
генерируемые значения можно предсказать.
int
Иллюстрация работы алгоритмического ГСПЧ
double
byte
boolean
В качестве источника энтропии часто используется системное время
Чем больше энтропия генерируемой величины, тем проще
определить состояние ГПСЧ
Java.Util.Random
-Seed получается из системного времени:
System.currentTimeMillis()
-Значение Seed (long, 64 bit) хранит текущее состояния ГПСЧ
-При каждом получении случайного значения выполняется следующее:
int next(int bits)
{
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int) (seed >>> (48 - bits));
}
-Преобразователь seed- детерминированный конечный автомат.
-Получение случайного int:
bits = next(31);
val = bits % n;
-Сдвиг на 17 позиций вправо.
Получаем Seed
-Берем два созданных int value1 и value2
-Сдвигаем биты value1 обратно влево, перебираем все
варианты оставшихся 17 неизвестных бит:
seed = (value1 << 17) + i;
-Когда условие value2 == nextInt(seed) выполнится мы нашли
seed!
-Возможных комбинаций 131072 (2^17)
-Проблема: свертка получением остатка. (val = bits % n;)
-Ничего не поделаешь, придется перебирать все варианты =((
Все любят котов
int nextInt()
{
int bits, val;
do
{
bits = next();
val = bits % rand;
}
while (bits - val + (rand - 1) < 0);
return val;
}
void unrand()
{
boolean circle = true;
for(long j = start; j < end && !found;
j++)
{
long srclocal = src1 + rand*j;
circle = true;
Итак, мы знаем seed
• Теперь мы можем предсказать все
последующие и производные значения
• Сессионные ключи, идентификаторы, все
случайные значения созданные ГПСЧ итд
все наше =))
apache.commons.RandomStringUtils
• -Объект java.util.Random статичен
• -Все объекты RandomStringUtils используют один
и тот же объект java.util.Random, который сидится
один раз.
• -Принцип работы: задается выбор случайной
позиции из заданного charset.
• -Необходимо 7 символов для подбора при
использовании alphanumeric charset.
• -Время на подбор для Intel core i7 2.5GHZ ~30мин
Как это работает
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
H
A
C
K
E
R
Int = 17
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Int = 10
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Int = 12
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Int = 20
HACKER
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Int = 14
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
Int = 27
Что делать?
Или криптографически стойкие ГПСЧ
• java.security.SecureRandom
• Наследуется от java.util.Random,
оверрайдит методы
• Не обеспечивает полной
непредсказуемости, так как использует
хеширование для свертки. (по умолчанию-
sha-1)
• Множество состояний ГПСЧ все равно long,
переходы- все еще однозначны
Что делать (часть 2, суровая)
• Аппаратная энтропия (дробовой шум итд)
• /dev/random (суровый, но медленный)
• /dev/urandom on Linux (менее суровый, но
побыстрее)
• Проблемы с производительностью
(накопление энтропии)
Цена вопроса
Manufacturer Model
Intro
Date
Interface OS
Price
(USD)
Price Throughput
Simtec
Electronics
Entropy Key 2009 USB
Windows[1]
/Linux/BSD
60< £36 32 kbit/s[2]
ID Quantique
SA
Quantis-USB 2006 USB
Windows/L
inux
1,310 990€ 4 Mbit/s[3]
ID Quantique
SA
Quantis-PCI-4 2006 PCI
Windows/L
inux
2,952 2,230€ 16 Mbit/s[3]
Comscire R2000KU 2006 USB
Linux/Wind
ows
895 738€ 2 Mbit/s[4]
Comscire R32MU 2012 USB
Linux/Wind
ows
1,495 1,232€ 32 Mbit/s[5]
LETech GRANG
2008-
2012
PCI/USB3/
SATA
Linux/Wind
ows
6,800 5,500€ 400 Mbit/s[6]
TRNG98 TRNG9803 2009 SERIAL
Linux/Wind
ows/Solaris
/BSD
230 179€ 72 kbit/s[7]
TRNG98 TRNG9815 2009 USB
Linux/Wind
ows/Solaris
/BSD
830 620€ 550 kbit/s[8]
Заключение
• Любые алгоритмические генераторы
случайных чисел- псевдослучайны.
• При необходимости создания
«непредсказуемой» случайной величины
необходимо использовать физический
источник энтропии
• Человек- хороший физический источник
энтропии.
Y.O.B.A. hacking
The end.

More Related Content

What's hot

ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаSergey Platonov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеPython Meetup
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
Сергей Жгировский — С++11/14 в STL
Сергей Жгировский — С++11/14 в STLСергей Жгировский — С++11/14 в STL
Сергей Жгировский — С++11/14 в STLYandex
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Введение в Clojure (Никита Прокопов)
Введение в Clojure (Никита Прокопов)Введение в Clojure (Никита Прокопов)
Введение в Clojure (Никита Прокопов)mainstreamless
 
Методы поиска уязвимостей
Методы поиска уязвимостейМетоды поиска уязвимостей
Методы поиска уязвимостейsolertia
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программахVasiliy Shapovalov
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05Computer Science Club
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Pythonru_Parallels
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...DevGAMM Conference
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 

What's hot (19)

ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
Сергей Жгировский — С++11/14 в STL
Сергей Жгировский — С++11/14 в STLСергей Жгировский — С++11/14 в STL
Сергей Жгировский — С++11/14 в STL
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Введение в Clojure (Никита Прокопов)
Введение в Clojure (Никита Прокопов)Введение в Clojure (Никита Прокопов)
Введение в Clojure (Никита Прокопов)
 
Методы поиска уязвимостей
Методы поиска уязвимостейМетоды поиска уязвимостей
Методы поиска уязвимостей
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программах
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Bytecode
BytecodeBytecode
Bytecode
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 

Similar to 2.3. Java cracking random_utils

Криптология в анализе защищённости
Криптология в анализе защищённостиКриптология в анализе защищённости
Криптология в анализе защищённостиbeched
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorFedor Lavrentyev
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаPositive Hack Days
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1m2rus
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-pythonAndrey Smirnov
 
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Andrey Karpov
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Yandex
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARMPositive Hack Days
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основыAlex Chistyakov
 

Similar to 2.3. Java cracking random_utils (20)

Криптология в анализе защищённости
Криптология в анализе защищённостиКриптология в анализе защищённости
Криптология в анализе защищённости
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
Platov
PlatovPlatov
Platov
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
 
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARM
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основы
 

More from defconmoscow

7.5. Pwnie express IRL
7.5. Pwnie express IRL7.5. Pwnie express IRL
7.5. Pwnie express IRLdefconmoscow
 
7.4. Show impact [bug bounties]
7.4. Show impact [bug bounties]7.4. Show impact [bug bounties]
7.4. Show impact [bug bounties]defconmoscow
 
7.3. iCloud keychain-2
7.3. iCloud keychain-27.3. iCloud keychain-2
7.3. iCloud keychain-2defconmoscow
 
7.2. Alternative sharepoint hacking
7.2. Alternative sharepoint hacking7.2. Alternative sharepoint hacking
7.2. Alternative sharepoint hackingdefconmoscow
 
7.1. SDLC try me to implenment
7.1. SDLC try me to implenment7.1. SDLC try me to implenment
7.1. SDLC try me to implenmentdefconmoscow
 
6.4. PHD IV CTF final
6.4. PHD IV CTF final6.4. PHD IV CTF final
6.4. PHD IV CTF finaldefconmoscow
 
6.3. How to get out of an inprivacy jail
6.3. How to get out of an inprivacy jail6.3. How to get out of an inprivacy jail
6.3. How to get out of an inprivacy jaildefconmoscow
 
6.2. Hacking most popular websites
6.2. Hacking most popular websites6.2. Hacking most popular websites
6.2. Hacking most popular websitesdefconmoscow
 
6.1. iCloud keychain and iOS 7 data protection
6.1. iCloud keychain and iOS 7 data protection6.1. iCloud keychain and iOS 7 data protection
6.1. iCloud keychain and iOS 7 data protectiondefconmoscow
 
6. [Bonus] DCM MI6
6. [Bonus] DCM MI66. [Bonus] DCM MI6
6. [Bonus] DCM MI6defconmoscow
 
5.3. Undercover communications
5.3. Undercover communications5.3. Undercover communications
5.3. Undercover communicationsdefconmoscow
 
5.2. Digital forensics
5.2. Digital forensics5.2. Digital forensics
5.2. Digital forensicsdefconmoscow
 
5.1. Flashback [hacking AD]
5.1. Flashback [hacking AD]5.1. Flashback [hacking AD]
5.1. Flashback [hacking AD]defconmoscow
 
5. [Daily hack] Truecrypt
5. [Daily hack] Truecrypt5. [Daily hack] Truecrypt
5. [Daily hack] Truecryptdefconmoscow
 
4.5. Contests [extras]
4.5. Contests [extras]4.5. Contests [extras]
4.5. Contests [extras]defconmoscow
 
4.4. Hashcracking server on generic hardware
4.4. Hashcracking server on generic hardware4.4. Hashcracking server on generic hardware
4.4. Hashcracking server on generic hardwaredefconmoscow
 
4.3. Rat races conditions
4.3. Rat races conditions4.3. Rat races conditions
4.3. Rat races conditionsdefconmoscow
 
4.2. Web analyst fiddler
4.2. Web analyst fiddler4.2. Web analyst fiddler
4.2. Web analyst fiddlerdefconmoscow
 
4.1. Path traversal post_exploitation
4.1. Path traversal post_exploitation4.1. Path traversal post_exploitation
4.1. Path traversal post_exploitationdefconmoscow
 
3.3. Database honeypot
3.3. Database honeypot3.3. Database honeypot
3.3. Database honeypotdefconmoscow
 

More from defconmoscow (20)

7.5. Pwnie express IRL
7.5. Pwnie express IRL7.5. Pwnie express IRL
7.5. Pwnie express IRL
 
7.4. Show impact [bug bounties]
7.4. Show impact [bug bounties]7.4. Show impact [bug bounties]
7.4. Show impact [bug bounties]
 
7.3. iCloud keychain-2
7.3. iCloud keychain-27.3. iCloud keychain-2
7.3. iCloud keychain-2
 
7.2. Alternative sharepoint hacking
7.2. Alternative sharepoint hacking7.2. Alternative sharepoint hacking
7.2. Alternative sharepoint hacking
 
7.1. SDLC try me to implenment
7.1. SDLC try me to implenment7.1. SDLC try me to implenment
7.1. SDLC try me to implenment
 
6.4. PHD IV CTF final
6.4. PHD IV CTF final6.4. PHD IV CTF final
6.4. PHD IV CTF final
 
6.3. How to get out of an inprivacy jail
6.3. How to get out of an inprivacy jail6.3. How to get out of an inprivacy jail
6.3. How to get out of an inprivacy jail
 
6.2. Hacking most popular websites
6.2. Hacking most popular websites6.2. Hacking most popular websites
6.2. Hacking most popular websites
 
6.1. iCloud keychain and iOS 7 data protection
6.1. iCloud keychain and iOS 7 data protection6.1. iCloud keychain and iOS 7 data protection
6.1. iCloud keychain and iOS 7 data protection
 
6. [Bonus] DCM MI6
6. [Bonus] DCM MI66. [Bonus] DCM MI6
6. [Bonus] DCM MI6
 
5.3. Undercover communications
5.3. Undercover communications5.3. Undercover communications
5.3. Undercover communications
 
5.2. Digital forensics
5.2. Digital forensics5.2. Digital forensics
5.2. Digital forensics
 
5.1. Flashback [hacking AD]
5.1. Flashback [hacking AD]5.1. Flashback [hacking AD]
5.1. Flashback [hacking AD]
 
5. [Daily hack] Truecrypt
5. [Daily hack] Truecrypt5. [Daily hack] Truecrypt
5. [Daily hack] Truecrypt
 
4.5. Contests [extras]
4.5. Contests [extras]4.5. Contests [extras]
4.5. Contests [extras]
 
4.4. Hashcracking server on generic hardware
4.4. Hashcracking server on generic hardware4.4. Hashcracking server on generic hardware
4.4. Hashcracking server on generic hardware
 
4.3. Rat races conditions
4.3. Rat races conditions4.3. Rat races conditions
4.3. Rat races conditions
 
4.2. Web analyst fiddler
4.2. Web analyst fiddler4.2. Web analyst fiddler
4.2. Web analyst fiddler
 
4.1. Path traversal post_exploitation
4.1. Path traversal post_exploitation4.1. Path traversal post_exploitation
4.1. Path traversal post_exploitation
 
3.3. Database honeypot
3.3. Database honeypot3.3. Database honeypot
3.3. Database honeypot
 

2.3. Java cracking random_utils

  • 1. Apache RandomStringUtils hacking By Taras Tatarinov Jun 30, 2013
  • 3. Применение генератора случайных чисел • -Ключи • -Токены • -Идентификаторы • -Генератор паролей • -Капчи
  • 4. Немного истории • Уязвимости ГПСЧ находили в: • Windows XP • Windows server 2003 • Ранние версии SSL(v1) • PHP (дада, PHPSESSID) функции mt_rand(), rand(), uniqid(), shuffle(), lcg_value()
  • 6. Генераторы случайных и псевдослучайных чисел • Генераторы случайных чисел аппаратные • Идеальный источник энтропии- белый шум • Генераторы псевдослучайных чисел алгоритмические • Проблема генераторов псевдослучайных чисел- последовательность и зацикленность. • ГСЧ= ГПСЧ+ источник энтропии
  • 7. Предпосылки для «взлома» ГПСЧ • Значения генерируются исходя из текущего внутреннего состояния ГПСЧ • Для генерации случайных значений используются однонаправленные свертки. • При одном и том же исходном значении Seed и равном количестве переходов, значения случайных величин будут одинаковы. • Вывод. Если станет известно текущее состояние ГСПЧ все последующие состояния и генерируемые значения можно предсказать.
  • 8. int Иллюстрация работы алгоритмического ГСПЧ double byte boolean В качестве источника энтропии часто используется системное время Чем больше энтропия генерируемой величины, тем проще определить состояние ГПСЧ
  • 9. Java.Util.Random -Seed получается из системного времени: System.currentTimeMillis() -Значение Seed (long, 64 bit) хранит текущее состояния ГПСЧ -При каждом получении случайного значения выполняется следующее: int next(int bits) { seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); return (int) (seed >>> (48 - bits)); } -Преобразователь seed- детерминированный конечный автомат. -Получение случайного int: bits = next(31); val = bits % n; -Сдвиг на 17 позиций вправо.
  • 10. Получаем Seed -Берем два созданных int value1 и value2 -Сдвигаем биты value1 обратно влево, перебираем все варианты оставшихся 17 неизвестных бит: seed = (value1 << 17) + i; -Когда условие value2 == nextInt(seed) выполнится мы нашли seed! -Возможных комбинаций 131072 (2^17) -Проблема: свертка получением остатка. (val = bits % n;) -Ничего не поделаешь, придется перебирать все варианты =((
  • 11. Все любят котов int nextInt() { int bits, val; do { bits = next(); val = bits % rand; } while (bits - val + (rand - 1) < 0); return val; } void unrand() { boolean circle = true; for(long j = start; j < end && !found; j++) { long srclocal = src1 + rand*j; circle = true;
  • 12. Итак, мы знаем seed • Теперь мы можем предсказать все последующие и производные значения • Сессионные ключи, идентификаторы, все случайные значения созданные ГПСЧ итд все наше =))
  • 13. apache.commons.RandomStringUtils • -Объект java.util.Random статичен • -Все объекты RandomStringUtils используют один и тот же объект java.util.Random, который сидится один раз. • -Принцип работы: задается выбор случайной позиции из заданного charset. • -Необходимо 7 символов для подбора при использовании alphanumeric charset. • -Время на подбор для Intel core i7 2.5GHZ ~30мин
  • 14. Как это работает 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ H A C K E R Int = 17 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ Int = 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ Int = 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ Int = 20 HACKER 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ Int = 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ Int = 27
  • 15. Что делать? Или криптографически стойкие ГПСЧ • java.security.SecureRandom • Наследуется от java.util.Random, оверрайдит методы • Не обеспечивает полной непредсказуемости, так как использует хеширование для свертки. (по умолчанию- sha-1) • Множество состояний ГПСЧ все равно long, переходы- все еще однозначны
  • 16. Что делать (часть 2, суровая) • Аппаратная энтропия (дробовой шум итд) • /dev/random (суровый, но медленный) • /dev/urandom on Linux (менее суровый, но побыстрее) • Проблемы с производительностью (накопление энтропии)
  • 17. Цена вопроса Manufacturer Model Intro Date Interface OS Price (USD) Price Throughput Simtec Electronics Entropy Key 2009 USB Windows[1] /Linux/BSD 60< £36 32 kbit/s[2] ID Quantique SA Quantis-USB 2006 USB Windows/L inux 1,310 990€ 4 Mbit/s[3] ID Quantique SA Quantis-PCI-4 2006 PCI Windows/L inux 2,952 2,230€ 16 Mbit/s[3] Comscire R2000KU 2006 USB Linux/Wind ows 895 738€ 2 Mbit/s[4] Comscire R32MU 2012 USB Linux/Wind ows 1,495 1,232€ 32 Mbit/s[5] LETech GRANG 2008- 2012 PCI/USB3/ SATA Linux/Wind ows 6,800 5,500€ 400 Mbit/s[6] TRNG98 TRNG9803 2009 SERIAL Linux/Wind ows/Solaris /BSD 230 179€ 72 kbit/s[7] TRNG98 TRNG9815 2009 USB Linux/Wind ows/Solaris /BSD 830 620€ 550 kbit/s[8]
  • 18. Заключение • Любые алгоритмические генераторы случайных чисел- псевдослучайны. • При необходимости создания «непредсказуемой» случайной величины необходимо использовать физический источник энтропии • Человек- хороший физический источник энтропии.