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などを使わなかったのは,(使ったことがないというのもありますが)せっかく「ハッカソン」と名の付くイベントなので何か作ってみたかったという考えがありました(ハッカソンというイベントは初参加だったのでワクワクしていました).
話が逸れましたが,私は「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分の簡単なものでした.結構真面目に可視化したので,スライドなどは作らずにこれ見せて話せばいいかなーと思っていたら,スライドの発表者ツール不在のせいで時間が全くマネジメントできず死にました(学会発表では完全にあれに頼り切っている…)
鬼畜な社員さんが時間ぴったりでプロジェクターのシャッターを閉じてしまうのでごり押しも許されませんでした(当たり前)
感想
最初にも書きましたが,とても楽しく勉強になりました.最後には社員さんからの分析結果の発表もあり,最近のセキュリティの動向を知ることもできました.また社員さんとお話することもできたため,セキュリティ業務の内容について理解を深めることができました.個人的にはとても良いイベントだと感じました.
余談
ハッカソンの説明の最初に「今日の参加者には強者が多い」というような話をされとてもビビっていました.そして,1位,2位は共にTomoriNaoのメンバーでした.社員の人に慰められました….
これはあれですね.よく社会人の人とかが言う,「このアカウントの発言は〇〇の所属する株式会社〇〇とは一切関係のない,個人の発言です」みたいな感じです.個人での参加なんですそういうことにしておいてください.