LAC 株式会社ラック

セキュリティ2016/02/02

SECCON 2015 決勝大会が開催されました!

  • ツイート
 
セキュリティ診断スペシャリスト山崎 圭吾

システムアセスメント部の山崎です。

2016年1月30日(土) と 31日(日)に、セキュリティコンテスト SECCON 2015 決勝大会が開催されました。
この大会は、サイバー攻撃とその対策に必要なセキュリティ技術などを競う競技会で、国内さまざまな地方や、オンラインでおこなわれた予選を勝ち抜いてきた強豪チームが参加しました。
今年度は、1日目に「学生大会」が、2日目に「国際大会」がそれぞれおこなわれました。私は、国際大会の、6問の問題群のうちの1問を出題しました。(まさか、あんなことになるとは思わずに・・・。)

img1-1.jpg
会場の様子

1日目におこなわれた「学生大会」では、地方予選と連携大会を勝ち抜いてきた学生18チームが出場しました。中学生から大学院生までのメンバーが、1チーム4人で参戦しました。
競技は、「Attack&Defense形式」という、お互いに弱点を持つサーバを運営し、自分のサーバを守り、相手のサーバからフラグを奪うという攻防戦の形となっていました。4時間の熱戦を征した、筑波大学の学生がリーダーのチーム「dodododo」には、文部科学大臣賞が贈られました。

img2.jpg
学生大会で優勝したチーム「dodododo」

2日目におこなわれた「国際大会」では、65ヶ国、累計3,343人の中から、予選大会を勝ち進んだ18チームが出場しました。18チームのうち、日本からは8チームが出場し、残りの10チームは海外から、米国・韓国・台湾・ロシア・ルーマニア・ベトナム・タイのチームが出場しました。競技は、「King of the Hill形式」という、サーバを征して所定のページに自チームのフラグを掲示する時間が長いチームが勝利という形式でした。開会式には、遠藤利明 東京オリンピック競技大会・東京パラリンピック競技大会担当大臣にご臨席いただき、参加者にエールを贈っていただきました。

 5時間半の攻防を終えた結果、優勝は、韓国のチーム「Cykorkinesis」。準優勝は、台湾のチーム「217」。3位は、米国のチーム「Shellphish」という結果でした。さすがの強さを見せた海外チームでしたが、国内チームも健闘し、文部科学大臣賞をチーム「TomoriNao」のTomoriNao氏が、審査員特別賞をチーム「katagaitai」のaskn氏が受賞しました。また、8チームに経済産業大臣激励文が手渡されました。

img_winner.jpg

優勝チーム

さて、国際大会に私が出した問題ですが・・・、今、申し訳ない気持ちでいっぱいです。解くのがとても面倒くさい(面白くない)問題を出題してしまいました。18チーム中1チームのみがフラグ獲得という結果に、反省しています。どのような(クソ)問題だったのか、紹介をさせてください。

私の問題は、Webアプリに存在する、「クロスサイトスクリプティング」、「SQLインジェクション」、「ディレクトリトラバーサル」、「OSコマンドインジェクション」の脆弱性を探しだして、どのパラメータにそれが存在しているかを回答してもらう、という内容でした。以下に画面の写真を載せます。

3.finals-1.png
攻略対象のWebアプリの画面

真ん中の「Value for Audit」のテキストボックスに脆弱性が存在しているので、それを見つけて、該当する脆弱性のチェックボックスにチェックを付けて「SEND」ボタンを押します。その結果、すべてのチェックの状況が正しければ、ポイントが加算されるという仕組みです。 例えば、「クロスサイトスクリプティング」の有無を判定する場合は、「">'><s>XSS</s> style=background-color:red x」を送信して、打ち消し線か、赤背景が表示されたら脆弱性があると判断できる状況でした。(値が「"」で囲まれていたり、「'」で囲まれていたり。HTMLタグが挿入できたり、属性値のみ挿入できたりという様々なパターンがありました。)

3.finals-xss.png

「クロスサイトスクリプティング」の存在有無を確認する例

他にも、「SQLインジェクション」は「'」を送信するとエラーが出る、「ディレクトリトラバーサル」は「../../../etc/passwd」や「../../../etc/passwd%00」でパスワードファイルが見える、「OSコマンドインジェクション」は「';uname -a;'」や「";uname -a;"」などでコマンド実行結果が見える・・・といった、典型的なチェック手法で見つかるものばかりでした。(なお、そのチェックの道筋に「攻撃ポイント」というオマケが隠されていまして、1.ディレクトリトラバーサルでWebアプリ自身のソースコードを閲覧、2.OSコマンドインジェクションで/home/ymzkei5/のファイルを閲覧、3.OSコマンドインジェクションで環境変数を閲覧、4.SQLインジェクションでフラグテーブルを閲覧すると、それぞれポイントが得られるようになっていました。)

・・・どこが難しいんだ?と思われた読者の方、いらっしゃると思います。 実は、このWebアプリですが、自動で生成されていて、5分ごとにすべて置き換わる仕組みでした。5分経つと、ファイル名も、パラメータ名も、パラメータの数も、どの脆弱性がどのパラメータに存在するかも、すべてランダムに変わってしまいます。このため、脆弱性の有無のチェックを、ある程度、自動化しないと解けません。

・・・それでも、頑張れば解けそう!と思われた方、いますよね。 すみません、さらに面倒くさいことになっていまして・・・、先ほどの写真、よく見ていただくとURLが「http://127.0.0.1:81/」になっていることが分かると思います。実は、この攻略対象のWebアプリには外から直接ブラウザでアクセスすることはできません。どうやってアクセスするかと言いますと、私の問題サーバにPerl、Python、Ruby、シェルスクリプト等で書いたスクリプトをアップロードし、そのスクリプトを通じてローカルのWebサーバにアクセスしてもらう形となっていました。

例えば、

#!/bin/sh
id;pwd
curl -s http://127.0.0.1:81/ | head -10

を、問題サーバにアップロードして、「Upload&Run」ボタンを押すと、以下のようにサーバ上でスクリプトが実行され、攻略Webアプリにアクセスした結果が画面に表示されます。

3.finals-2.jpg

外側のWebサイトでスクリプトを実行した画面の例

このように、外側のhttp://3.finals.seccon.jp/ から、その内部の http://127.0.0.1:81/ を攻略するスクリプトを書くという、なかなか不自由な環境でした。ちょうど診断や解析の自動化やAIがトレンドとして聞こえてきていたので、何かを勘違いした作者(私だ)がこんなものを作ってしまいました。

参加者の皆さんには、このような困難な状況下で、しかも限られた時間で果敢にトライしていただいて、本当にご苦労をかけました。無理ゲーと言われても仕方がありません。そんな中、1チームにフラグを獲得してもらい、ほんの少し安心しました。もしも、まったく0点だったらどうしようかと、ゲームの後半は祈るような気持ちでした。私の問題を解いてくれた、チーム友利奈緒のみなさん、本当にありがとうございました!!  

img_tomorinao.jpg

文部科学大臣賞受賞のTomoriNaoチームのTomoriNao氏

次回こそは・・・、陰口を叩かれない良問の作成を目指します!!! m(_ _)m

  • ツイート