43
Сергей Щербель Positive Technologies

Типовые уязвимости систем ДБО

Embed Size (px)

Citation preview

Page 1: Типовые уязвимости систем ДБО

Сергей ЩербельPositive Technologies

Page 2: Типовые уязвимости систем ДБО

Future NowУязвимости ДБО на примере PHDays I-Bank

PHDays I-Bank НЕ ЯВЛЯЕТСЯ системой ДБО, которая действительно работает в каком-либо из существующих банков.

Система разрабатывалась специально для конкурса

на PHDays 2012

PHDays I-Bank содержит уязвимости, которые мы

находили в реальных системах ДБО

Причем, многие из уязвимостей встречаются очень

и очень часто

Page 3: Типовые уязвимости систем ДБО

Future NowИдентификация

Предсказуемые идентификаторы пользователей – куда более опасная проблема, чем может показаться на первый взгляд!

В PHDays I-Bank, как и почти во всех реальных ДБО, идентификатор пользователя состоит из цифр.

Примеры идентификаторов: 1000001, 1000002, …

В чем проблема? Об этом чуточку позже

Page 4: Типовые уязвимости систем ДБО

Future NowПарольная политика

Слабая парольная политика – извечная проблема!

Пароль по умолчанию сложный, но при этом

пользователь может установить простой пароль

И даже, состоящий из 1 цифры!

Проверяется только длина пароля

В таком случае, обязательно можно будет встретить пароли:

1234567 и 12345678

Проверка по регулярному выражениюПроблема – словарные пароли, например P@ssw0rd

Page 5: Типовые уязвимости систем ДБО

Future NowBrute Force?

Brute Force в интернет-банке? А как же защита?

Защита от атак, направленных на подбор:

Блокирование учетной записи

Блокирование IP-адреса

Использование технологии CAPTCHA

Page 6: Типовые уязвимости систем ДБО

Future NowБлокирование – не решение!

Обойти такую защиту совсем не сложно

Учетная запись или IP-адрес блокируются после

нескольких (обычно 3 или 5) неудачных попыток

аутентификации.

Предсказуемые идентификаторы

Слабая парольная политика

???????

Profit!!!!111

Page 7: Типовые уязвимости систем ДБО

Future NowБлокирование – не решение!

Собираются идентификаторы

Выбирается 1 или 2 пароля

Подбирается не пароль к

идентификатору, а идентификаторы к

паролю

100000110000021000003

12345678

P@ssw0rd

1234567

qwerty

1001421:123456781002236:123456781002313:12345678

Page 8: Типовые уязвимости систем ДБО

Future NowБлокирование – причина отказа в обслуживании!

После нескольких неудачных попыток аутентификации учетная запись блокируется.

Можно осуществлять атаки на целевого пользователя

А если известны все идентификаторы…

Можно реализовать масштабную DOS-атаку

И как правило, чтобы учетная запись была

разблокирована нужно позвонить в офис банка.

У кого-то день может получиться не легким

Page 9: Типовые уязвимости систем ДБО

Future NowБлокирование IP-адреса

Блокирование IP-адреса не менее опрометчивое решение.

Во многих фирмах все сотрудники сидят за одним внешний

IP-адресом

Множественные попытки аутентификации могут выглядеть

как попытка подбора пароля, и как итог – блокирование

внешнего IP-адреса

Page 10: Типовые уязвимости систем ДБО

Future NowПроблемы реализации CAPTCHA

Возможна повторная отправка одного и того же

значения

Значение передается в скрытом поле HTML-формы

Можно передавать пусто значение

Некорректная проверка – достаточно чтобы совпала

длина или присутствовали некоторые символы

CAPTCHA не проверяется при передача

определенного заголовка

Page 11: Типовые уязвимости систем ДБО

Future NowПроблемы реализации CAPTCHA у PHDays I-BANK

Значение передается в скрытом поле HTML-формы

public function encodeCaptchaCode($code) {

return @base64_encode(@strrev(@base64_encode($code)));

}

Для шифрования не используются временные значения –

расшифровать строку проще простого.

PUlUTndVVE0= =ITNwUTM MTUwNTI= 15052

Page 12: Типовые уязвимости систем ДБО

Future NowПроблемы реализации CAPTCHA у PHDays I-BANK

Кроме того, можно повторно отправлять одно и тоже

значение

А значит, возможно проведение

атаки, направленной на подбор

пароля к учетной записи!

Page 13: Типовые уязвимости систем ДБО

Future NowВосстановление пароля

Возможность восстановления забытого пароля

присутствует почти в каждом веб-приложении, PHDays

I-Bank не исключение.

Page 14: Типовые уязвимости систем ДБО

Future NowВосстановление пароля, проблемы

Если для восстановления пароля нужно ввести

идентификатор, а не email-адрес, то можно узнать

существующие с системе идентификаторы

Page 15: Типовые уязвимости систем ДБО

Future NowВосстановление пароля, проблемы

Для некоторых пользователей I-Bank предусмотрена

возможность восстановления пароля через веб-

форму

Остальные пользователи по замыслу могут

восстановить пароль только обратившись в

отделение банка

«Please contact any office of the PHDays bank for

password recovery.»

Page 16: Типовые уязвимости систем ДБО

Future NowВосстановление пароля, проблемы

Ключ, который необходимо ввести для

восстановления пароля, генерируется с

недостаточной энтропией

private function addDataInTable($login) {

$key = md5($login.rand(1, 250));

Чтобы подобрать ключ, необходимо перебрать не более

250 значений!

После чего будет установлен новый пароль.

Page 17: Типовые уязвимости систем ДБО

Future NowСлабая энтропия идентификатора сессии

В случаях, когда используются собственные механизмы

сессии, надежность идентификатора играет важную

роль

В PHDays I-Bank идентификаторы ключевых

клиентов генерируются по специальному алгоритму

private function getSpecialHash($password) {

$hash = sprintf("%u", crc32($password));

if(strlen($hash) > 4) {

$hash = substr($hash, 0, 4);

Page 18: Типовые уязвимости систем ДБО

Future NowСлабая энтропия идентификатора сессии

Как видно, идентификатор сессии состоит всего из 4

символов

Все символы – цифровые, что значительно

уменьшает энтропию

Кроме того, идентификатор сессии статичный, и

изменяется только если пользователь меняет пароль

Page 19: Типовые уязвимости систем ДБО

Future NowСлабая энтропия идентификатора сессии

Cookie: auth=1000001|2|3016

Page 20: Типовые уязвимости систем ДБО

Future NowПроблемы с разграничением привилегий

Если возможность переводить деньги с чужих счетов -

совсем редкое явление, то возможность обращаться к

другим пользовательским данным еще можно

встретить.

Встречалась возможность отправки сообщений в

тех. поддержку от лица любого пользователя ДБО

Возможность редактирования шаблонов платежей

других пользователей ДБО

Такие уязвимости в PHDays I-Bank включены не были.

Page 21: Типовые уязвимости систем ДБО

Future NowOne-time password

Одноразовые пароли используются для защиты от

несанкционированных пользователем действий

(выполнение транзакций, изменение пароля,

редактирование личных данных).

OTP может запрашиваться или после первичной

аутентификации (логин и пароль)

Или перед выполнением каждой транзакции (или

другом действии)

Page 22: Типовые уязвимости систем ДБО

Future NowOne-time password в PHDays I-Bank

В PHDays I-Bank было реализовано 2 типа OTP:

Эмуляция использования внешнего устройства

OTP на скретч-картах:

В коде это было реализовано в классе TransactionA

В коде это было реализовано в классе TransactionB

Page 23: Типовые уязвимости систем ДБО

Future NowOne-time password, проблемы

OTP не запрашивается при переводе небольших

сумм (например, до 100$)

Возможна повторная отправка одного и того же OTP

Возможность предугадать OTP

Некоторые пользователи отключают OTP

В PHDays I-Bank за выполнение транзакций без OTP отвечал класс TransactionC.

Можно обойти шаг проверки OTP и сразу выполнить

транзакцию

Page 24: Типовые уязвимости систем ДБО

Future NowOne-time password, TransactionA

Предугадать OTP невозможно

Но при этом можно обойти шаг проверки и

выполнить транзакцию напрямую!

Page 25: Типовые уязвимости систем ДБО

Future NowOne-time password, TransactionA

Заменяем step3 на step4

Page 26: Типовые уязвимости систем ДБО

Future NowOne-time password, TransactionA

Profit!!11

Как видно из сообщения, транзакция успешно

выполнена. Простой обход надежной защиты.

Page 27: Типовые уязвимости систем ДБО

Future NowOne-time password, TransactionB

Алгоритм генерации OTP ненадежный

protected function generateOTP() {

$OTPs = array();

$s = 44553 + $this->userInfo["id"]; // переменная зависит только

// от номера пользователя

for($n = 10; $n < 24; $n++) { // генерируется 14 OTP

$OTP = "";

$j = rand(20,39); // переменная $s может принимать

$j = substr($j, 0, 1); // только два значения – 2 или 3

$OTP = $n*$s*$j;

$OTP = substr($OTP, 0, 5); // OTP состоит из 5 символов

$OTPs[] = $OTP;

Page 28: Типовые уязвимости систем ДБО

Future NowOne-time password, TransactionB

OTP может принимать только 2 значения

Page 29: Типовые уязвимости систем ДБО

Future NowOne-time password, TransactionC

OTP не запрашивается – можно выполнять

транзакции без каких-либо препятствий и

ограничений

В PHDays I-Bank пользователей для который OTP не

запрашивался было не много

Но кому-то из участников конкурса повезло

Page 30: Типовые уязвимости систем ДБО

Future NowДействия без OTP

Бывает так, что OTP запрашивается только при

проведении транзакций, но другие действия можно

сделать без ввода OTP:

Отправить сообщение в тех. поддержку

Изменить пароль

Изменить шаблон платежа

Создать шаблон платежа

Открыть новый счет

Page 31: Типовые уязвимости систем ДБО

Future NowИзменение шаблона платежа

Использование шаблонов платежей позволяет

сократить время на ввод однотипных данных:

Номер счета получателя

ФИО получателя

Если у злоумышленника есть возможность изменять

данные шаблона, то он без труда сможет заменить счет

получателя, указав свой.

Пользователь скорее всего не заметит и подтвердит

выполнение транзакции.

Page 32: Типовые уязвимости систем ДБО

Future NowКак все было

Призовой фонд 20.000 рублей

За сутки участникам конкурса был дан исходный

код систем, а так же виртуальная машина с

установленным PHDays I-Bank

За 20-30 минут участники должны были

воспользоваться найденными уязвимостями

Ключ к победе – автоматизация!

Многопоточность играла решающую роль!

Page 33: Типовые уязвимости систем ДБО

Future Now2 задачи на пути к успеху

По сути прохождение конкурса можно было разделить

на 2 задачи:

Получить доступ к учетной записи

Простые и словарные пароли

Слабая энтропия ключа, используемого для восстановления пароля

Слабая энтропия идентификатора сессии

Обойти OTP

OTP не запрашивался

Можно пропустить шаг проверки OTP

Предугадываемый OTP

Page 34: Типовые уязвимости систем ДБО

Future NowРаспределение уязвимостей

30

18

52

100

Распределение уязвимостей

Простой парольСловарный парольИдентификатор сессииКлюч восстановления

Page 35: Типовые уязвимости систем ДБО

Future NowРаспределение уязвимостей

Деньги были распределены по принципу – чем

сложнее получить доступ, тем больше денег

Учетные записи, с которых осуществлялась

демонстрация имели слабые пароли – 1234567 и

password

Учетные записи участников тоже были уязвимыми –

идентификатор сессии обладал слабой энтропией

Оптимальная стратегия – ближе к завершению конкурса

перевести деньги со счетов других участников.

Page 36: Типовые уязвимости систем ДБО

Future NowРаспределение уязвимостей

Деньги были распределены по принципу – чем

сложнее получить доступ, тем больше денег

Учетные записи, с которых осуществлялась

демонстрация имели слабые пароли – 1234567 и

password

Учетные записи участников тоже были уязвимыми –

идентификатор сессии обладал слабой энтропией

Оптимальная стратегия – ближе к завершению конкурса

перевести деньги со счетов других участников.

Page 37: Типовые уязвимости систем ДБО

Future NowHelpDesk

Помимо системы ДБО был реализован примитивный

HelpDesk:

HelpDesk – система для сотрудников банка

Основная мысль – попав в систему «не для всех»,

можно получить достаточное количество

информации, которая значительно упростит взлом

целевой системы

На практике: парольная политика, информация о

механизмах защиты и даже пароли пользователя

Page 38: Типовые уязвимости систем ДБО

Future NowHelpDesk в PHDays I-Bank

Обсуждения, которые намекали на что нужно

обратить внимание

Ссылка на систему, которая отображала

пользователей с простыми паролями

Page 39: Типовые уязвимости систем ДБО

Future NowHelpDesk, обход аутентификации

Уязвимость системы HelpDesk – обход аутентификации:

Знать логин или пароль не нужно

Достаточно передавать в каждом HTTP-запросе

заголовок

if(isset($_SERVER["HTTP_BANKOFFICEUSER"])) {

$userId = base64_decode($_SERVER["HTTP_BANKOFFICEUSER"]);

$userInfo = $this->user->getUserInfoById($userId);

$this->user->setupUserInfo($userInfo);

return $this->user;

}

Page 40: Типовые уязвимости систем ДБО

Future NowHelpDesk, обход аутентификации

Для эксплуатации удобно использовать Modify Headers:

Page 41: Типовые уязвимости систем ДБО

Future NowRace condition

Если отправлять много запросов, то возможна ситуация,

когда запросы будут выполняться одновременно:

Запрос N Запрос N + 1

Проверка наличия

необходимой суммы

Проверка наличия

необходимой суммы

Зачисление денег

Зачисление денег

Profit! $$$

Page 42: Типовые уязвимости систем ДБО

Future NowRace condition, nginx

Чтобы защититься от Race condition и исключить

ситуацию появления денег из неоткуда, nginx был

настроен на блокирование слишком частых обращений.

А именно – не более 3-х запросов в секунду к сценарию,

осуществляющему транзакции.

На виртуальных машинах nginx установлен не был, и

один из участников нашел проблему Race condition.