NTTコミュニケーションズ主催の攻撃分析ハッカソンに参加してきました.抽選でしたが当選しました.ハッカソンに参加するのは初めてで,ちょー疲れましたし結果も残せませんでしたが,とても楽しいイベントで良い経験になったので参加報告させていただきます.
開催概要
正確には,Tech Workshop 「攻撃分析ハッカソン~いま、何が起きている?~」というNTTコミュニケーションズの開催する技術ワークショップです.NTTコミュニケーションズさんとしてもハッカソンというのは初の試みのようです.
主な内容は以下になります.
- 午前 (10:30-11:45) : CTF入門
- 午後 (13:00-18:00): 攻撃分析ハッカソン,発表,投票
午前中は,実務にも使えるCTFの技術について,簡単な問題を解きながら解説していただきました.
午後から攻撃分析ハッカソンの開始で,5時間の制限時間の中で指示されたお題に関するハッカソンを行います.
午前中のCTFについては取り急ぎ割愛し,午後の攻撃分析ハッカソンについて書きたいと思います.
攻撃分析ハッカソン
攻撃分析ハッカソンは,ハニーポットのデータを使ったハッカソンです.ハニーポットのデータを使うということは当選前から知らされていました.
当日知らされたテーマは,「ハニーポットのアクセスデータ分析」です.最終目的は,「このデータから分かる攻撃や傾向についての分析結果を示す」ということですがその方法は自由で,可視化するもよし,シェル芸で解析するもよし,ハニーポットのデータを使っていれば何でもありみたいな感じでした.
また,事前にハニーポットのログ分析の例を解説していただいたり,競技中に度々アイディアのヒントみたいなものをいただけたりして,学びつつ・作りつつ・分析する,といった感じでした.
評価基準
明確な評価基準は明かされていませんでしたが,ハッカソンの解説をしてくださった社員さんの発言と,実際の審査結果から,以下の二つが評価されていたと考えます.
- データ分析における着眼点
- 分析で用いた技術力 (実装・理論・シェル芸)
と言っても評価するのは社員さんだけでなく参加者(社員さん6人くらい,参加者15人くらい)もなので,必ずしも上記2点だけとは限らないかもしれません.
しかし実際のところ,この2点による厳正な審査であったと感じています.それは結果を見れば明らかでした.一人2票,投票権を持っており,優秀な参加者が2人選ばれるという方式だったのですが,上位二人は上記2点において非常に優れており,納得の結果でした.1位の方は,UDP通信の多さとDistination Portの1900ポートの多さ(UPnP)から,SSDPリフレクション攻撃に着目し,見事な分析をしていました.
扱ったデータ
データは12月の1ヶ月間のデータで,受ける通信のみです.また,予めエフェメラルポートの通信を除去してあるという親切設計でした.形式はJSON形式でしたが,何のハニーポットを使っていたかは聞きそびれてしまいました.
競技中
5時間という時間をどう使うかが重要ですが,皆さん最初はデータを用いて何をするかを考えていたと思います.分析しなければいけないのは当たり前なのですが,分析をするにあたり「どこに着目しようか」,「とりあえず可視化してみて当たりをつけようか」などです.事実,社員さんが言うには,分析は大きく分けて,以下の二通りの進め方であり,私もそれに共感いたしました.
- セキュリティに関する知識を元に,事前にここが怪しいと仮説を立ててその仮説を証明できるよう分析を進める(ドメイン知識を元に仮説を立て分析)
- 可視化をして膨大なパケットや特徴的なパケットを見極め,そのデータをフィルタリングしたりして分析を進める(探索発見的データ分析)
前者であれば,「UPnP->SSDPリフレクションが怪しい」,「クリスマス,大晦日の通信には何か特徴があるのではないか」等を考え,後者は「22番ポートは多すぎるから省いたが,すると23番ポートも多いことがわかる(TelnetはMiraiが使う)」,「ウェルノウンポートを除いた中で,7547ポートへの通信が目立つ(こちらもMiraiが使うとされる)」などを考えるということです.なお,参加者の中には,「取りあえずJSON眺めてたらShellShockの攻撃コード見つけた」という強者もいました.
競技中は積極的に社員さんに質問することが許されていました.攻撃分析ハッカソンと言ってはいますが,参加者の中にはセキュリティを専門としない別領域の専門の方も多くいらっしゃいました.その方々はセキュリティの知見を社員さんに聞きながら,自然言語処理の技術・SQLによる文字列操作の経験,など自分の専門分野の知見も活かして分析を有利に進めていました.かくいう僕も質問をさせていただき,データのどこに注目すると分析を進めやすいかなど教えていただいて,とても勉強になりました.(普段私は電波を再帰反射してあれしてあれするみたいなことをしています)
73Spicaの成果物
私はハッカソンに参加を決めたときから,「可視化に力を入れたい」と決めていました.理由は単純で,ハニーポットのデータは扱ったことが無く,どんなデータがあるのか目で見てみたいという願望があったからです.また,ハニーポットのデータの扱いが未経験であるハンデを少しでも減らすため,見慣れていないデータの概要が一目で分かる可視化ツールを作ることで,上述した「探索発見的データ分析」を行おうと考えたからです.
有名な可視化のツールとしてKibanaがありますが,今回は使いませんでした.私はKibanaを使ったことが無かったため,「競技時間の5時間で環境構築を行い適切なデータ処理を行うのは困難ではないか?」と考えたからです.そこで私の得意なJavaScriptやHTML5のスキルを活かして,自分で可視化するツールを作ろうと思い立ちました.(せっかく「ハッカソン」と名の付くイベントなので何か作ってみたかったという考えもありました.ハッカソンというイベントは初参加だったのでワクワクしていました.)
以上の理由で,私は「WEBベースの可視化ツール」を作りました.ツールと言っても,時間の関係もありまして,「WEBのUIでファイルを読み込ませたら自動で解析!」というものではなく,Pythonで解析して得たデータをグラフ化していい感じに表示するUIを作った,という感じです.
下図がデモです.
この可視化データでは,
- 国別時間帯データより,自動で攻撃している可能性が高い
- 国別時間帯データより,1時間毎のデータが見えていることから,VNの通信は1時間毎に実行されるボットである可能性が高い
- Telnetの多さや7547ポートの通信から,Miraiやその亜種による通信がある可能性が高い
などの情報が分かりやすく可視化されていると思います.1位の方がおっしゃっていたUDPの1900ポートの通信の多さも伺えます.
使ってるものの簡単な説明や工夫した点は以下.UIはこのブログライクにしてみました.
- 解析 : Python2.7
- グラフ : Chart.js
- UI : JavaScript, HTML5(Canvas), CSS
- IPと国の対応 : GeoIP(Python)
- 見やすいことを心掛けた
- Chart.jsは動的にグラフを変えられるので,それが活かせるようなグラフを作った
- PythonでのJSON解析は,1ループでデータを取れるようにし,辞書やSetなどを用いるようにして高速化を図った.
発表
発表は一人3分の簡単なものでした.成果物が目に見える可視化ツールだったので,「スライドなどは作らず、ツールを見せながら説明すれば良さそう」と思っていたら,スライドの発表者ツールが使えないせいで時間のマネジメントができず、タイムオーバーで死にました.(学会発表では完全にツールに頼り切っています)
社員の方が時間ぴったりでプロジェクターのシャッターを閉じてしまうので、多少であれば話続けさせてくれる慈悲もありませんでした。
反省・改善点
今回の敗因は以下にあると考えます.
- ツールに力を入れすぎて肝心の攻撃分析が足りなかったこと
- その不足を補うような成果発表ができなかったこと
前者が大きい原因だと言えます.今回はあくまで「ハニーポットのデータから分かる攻撃や傾向についての分析結果を示す」ことが目的であり,可視化ツールは探索発見的データ分析の道具にすぎません.
また成果発表において,上述したような可視化から分かる事象(Miraiと思われる通信の多さ等)を指摘したり,このツールが分析において有用であるということをアピールできれば良かったのですが,それを上手く伝える発表ができませんでした.
今後は攻撃分析を行えるよう知識を付けると共に,上記のような点を改善できればと思います.
ツールの改善点としては,入力としてファイルを渡せば一気に最後まで解析をしてくれるような改善をすると使いやすくなると考えています.
感想
最初にも書きましたが,とても楽しく勉強になりました.最後には社員さんからの分析結果の発表もあり,最近のセキュリティの動向を知ることもできました.また社員さんとお話することもできたため,セキュリティ業務の内容について理解を深めることができました.個人的にはとても良いイベントだと感じました.
余談
1位,2位は共に有名CTFチーム「TomoriNao」のメンバーでした.さすがの知識と分析力でした。