ハッキングソンを開催しました

2022年06月17日

本記事は、5月27日(金)にソニックガーデン社内で開催されたイベント「ハッキングソン」について、新卒入社1年目の私、新田見の目線から執筆いたします。

ハッキングソンとは?その狙い

ハッカソンならぬハッキングソンと名付けた本イベントは、事前に準備された専用のサーバに対して、どこまで情報を抜き出せるかということを競うイベントです。
社内で行われた第1回ハッキングソン開催の狙いは主に2つありました。

  • ネットワークやインフラの勉強をする上で、ただ勉強だけするのではなく、楽しみながら学ぶ。
  • セキュリティの攻撃者視点に立ってもらうことで、更にセキュアなサービス開発/運用に役立てる。

ネットワーク知識の浅い私ですが、参加することで楽しみながら知識や知見を得られました。本記事では、イベントの狙いや、実際のイベント内容をご紹介します。

※ 無許可でのハッキングは違法です!

イベント内容 ~遊びながら学ぶ~

今回の課題文

攻撃対象の情報

  • 稼働環境
  • 攻撃対象サーバのIP
  • 攻撃対象サーバのホスト

課題文

遊びながら学ぶ

今回のハッキングソンの発端は、ある若手プログラマから、ネットワークやインフラの勉強方法について、本イベント出題者となる安達さんの元へ相談が寄せられたことでした。

そして、「ただ勉強するよりも、手を動かしてゲーム感覚の方が楽しいよね」という考えのもと、普段のWebアプリケーション開発業務とは異なる「ハッキング」という題材が選ばれることとなりました。

そのように遊び感覚で取り組める今回のハッキングソンには、若手からベテランまで、全社員の半数、総勢28名ものソニックガーデンメンバーが参加しました。

もちろん、ハッキングに自信がない人達はペアで取り組んだり、ヒントを貰ったりしながら課題クリアを目指しました。27日の夕方に予定された発表会に向けて、1週間のうち仕事の隙間時間を使って取り組んだ人もいれば、発表会の日に集中して取り組んだ人も。

本ハッキングソンの全問正解者は10名でしたが、イベントの1位の方はなんと70分で完答。課題3をスッと解けるかどうかが、合計が短時間で済むか、長時間になるかの分かれ目でした。

ちなみに、今回準備された攻撃対象のアプリは下図のようなものでした。
Google認証機能付きで、意外と凝った作りに見えますね。

怪しい点に気付いたでしょうか?
パスワードを入力して「次へ」を押すと、メールアドレス入力画面へリダイレクトされています。
実は、これはGoogle認証の手作りダミー画面。信じて本物のメールアドレスやパスワードを入力してしまうと、フィッシング詐欺の被害に遭ってしまいます。
パソコンやインターネットに慣れ親しんだ世代になると、フィッシング詐欺になんて騙されるはずがないと考えてしまいますが、気を抜けばベテランプログラマでも引っかかってしまうのです。 ハッキングソンの裏では課題出題者の方も攻撃者自身のセキュリティ意識を試す攻撃を行っていた、ということです。

※ 発表会では皆の前で、入力されたログは無事消去され、パスワード変更も促されました。
※ ソニックガーデンでは二要素認証を必須としているため、パスワード漏洩のみでは不正ログインは出来ません。

学んだことを共有する

課題を全て解けた人も、解けなかった人も、夕方から1時間半の発表会兼解説会へ参加しました。 発表会では最初に全問正解したと思う人に挙手を求める場面がありましたが、時間が足りずに解ききれなかった人も多く、手を挙げられた人はちらほら見られるくらいでした。たとえ全問回答しても、間違っていないか不安に思った人もいたようです。

実際、上の表の通り、課題3のサーバOS情報の入手に大きな壁があり、発表会でもどのように考えたか、どういうシェルスクリプトを使ったかで議論が膨らみました。

今回のサーバにはパストラバーサルの脆弱性があり、最も手軽にハッキングする方法はGitHubからコードを拾ってきて適用するというものでした。それは、CVEという共通脆弱性識別子に対するPoC(攻撃検証)コードをGitHubで探し当て、Pythonのインタラクティブシェルで各種リクエストを送るという方法です。

exploit.pyがGitHubで見つけたコードファイル

上図の通り、ほんのわずかな手間でサーバ内部へ侵入してコマンド操作が出来てしまっています。
近年のサイバー攻撃者はPoCコードを簡単に入手できてしまうので、普段からのセキュリティ対策の重要性がますます高まっていくのでしょう。

その一方、今回の脆弱性を突くためにはPOSTリクエストが有効であるということに気付けなかった人達は苦戦を強いられることとなりました。打つ手がなくなった参加者の中には、(ルール上禁止の)DDoS攻撃を仕掛けてしまって、怒られた人も。
参加者一同、英文も含めて、ドキュメントをしっかり探して読むことの重要性を学べたのではないかと思います。

続く課題4は、サーバに侵入出来てしまえば、touchコマンドで簡単にサーバ内にファイルを配置出来てしまうという内容です。全問正解者のうちの一名は、唯一ファイルの中身を記入し、遊び心をみせて一同の笑いを誘いました。

ラクガキのような侵入痕跡

課題5、6はRuby on Rails製アプリ内のファイルを探していく課題です。普段の業務でRailsを扱っているソニックガーデンメンバーはファイル構造を勘によって特定していましたが、「勘がなかったらどう調べるか」という問いに対し、方々からfindコマンド、psコマンド、設定ファイルの場所を順々に探す等、さまざまな声が上がりました。

また、課題5は他にも解法があり、Railsのscaffoldの穴をついて、SQLインジェクションでクリアした人や、/users.json のURLからデータを丸ごと見た人もいました。便利なscaffoldにも注意すべき危険性が潜んでいるということですね。

ハッキングソンに参加して

イベントの最後は集合写真の撮影です。多くの人が楽しんでイベントに取り組むことが出来ました。

後日、見事に全問正解した10名のハッカー達には、ご褒美にCookieが贈られました。

出題者の意図

ネットワークに関して、手を動かして楽しみながら学べるハッキングソンの課題はそれぞれどのような狙いで設定されたのか、出題者である安達さんにお話を聞きました。

全体を通して

ネットワーク関係の勉強をする際に、いきなりサーバに侵入しろというのはハードルが高く、何から勉強したら良いかという手掛かりもないので、攻撃のプロセスを分割して課題を設定しました。

課題1&2:サーバで稼働しているプロセスを把握せよ!Webサーバの情報を入手せよ!

課題1と2を通して、攻撃対象の概要を知る手段について理解してもらいたいと考えました。
どこのポートが空いているのかや、それらのポートでどんなミドルウェアが稼働しているのか。また、ミドルウェアのバージョンは何なのかということ等をしっかり把握してもらいたいと思って設定しています。
実際にnmapのコマンドなどを使うことや、オプション指定によってミドルウェアの情報を入手することもできるので、そのあたりのことを触って理解してもらいたいと考えました。

課題3:サーバのOS情報を入手せよ!

課題1と2で得た概要をベースに、実際に侵入経路を探してもらう課題です。侵入経路を考えるためには、まず共通脆弱性識別子 (CVE)の情報を探すことになります。
CVEについて学び、日々多くの脆弱性情報が登録されていることを学んでもらいたいと考えて課題設定しました。
[参考] 脆弱性対策データベースHP

課題4:サーバにファイルを配置せよ!

パストラバーサルの脆弱性と聞くと、ファイルの中身を閲覧されるだけだろうと思われがちです。
しかし、権限管理の設定を疎かにすると、ファイルの書き込みなどもできてしまうような、非常に恐ろしい脆弱性であるということを学んでほしいと考えて課題設定しました。

課題5:データベースの情報を入手せよ!

Railsのscaffoldはとても便利な機能ですが、セキュリティの穴を作ってしまうこともあるということを体験して学んでもらうための課題です。
SQLインジェクションも実際に試してみることで、開発時にも注意するようにしてほしいと考えました。

課題6:rubyのバージョンを特定せよ!

最後には、パストラバーサルの脆弱性によって「こんなところまでサーバ内部情報を抜き出せるのか!?」ということを、色々試しながら知ってもらいたいと考えて課題設定しました。

おわりに

ハッキングソン、ハッキング企画はソニックガーデンでも初めての試みでしたが、参加して面白く、ネットワークやセキュリティに関して興味も学びも深まるという良い機会になりました。
噂では、もう少しレベルを上げた第2回ハッキングソンも開催されるそうです。新米の私も、今度はもう少し勉強してから臨みたいと思います。
皆さんも機会があればハッキングソンに挑戦してみてはいかがでしょうか?

絶望を知っている。だから目指せる『優しい世界』
前の記事 絶望を知っている。だから目指せる『優しい世界』