断片

です・ます調が記事によって違ったりするブログ

セキュリティ・キャンプ in 福岡 2016 に参加してきた

はじめに
9月17〜19日にLINE Fukuoka株式会社で開催されたセキュリティキャンプ九州大会に参加してきた. 大会の概要や詳しい情報はこちらを参照して頂きたい. 今回の記事では講義で教わった技術的な内容について書いていきたい(とはいえ公開可能な部分のみではあるが)

1日目1講義目「セキュリティ・キャンプ九州 オープニング」
グループでチーム名,キャンプを通しての目標などを決めた.

1日目2講義目「機械学習とセキュリティ:特徴抽出講座」
攻撃*1機械学習で学習・検知するにあたって,「何を特徴とするか」という点についてグループで話し合った. 自分達のグループは,VBA/VBS型の悪性マクロ/スクリプトの特徴について考えた.結論として「コード中に通信(HTTP,FTP)やファイル操作を行うメソッド名」を特徴とする,という意見にまとまった.しかし,ファイル操作を行う正常なマクロ/スクリプトは存在するだろうし,難読化問題もあり,実際に実装するとすれば,まだ問題が沢山ありそうである.
ちなみに,攻撃の学習・検知のためのアルゴリズムサポートベクターマシンやランダムフォレストがよく用いられているらしい.とはいえ,どのアルゴリズムが良いという議論云々より,良質なデータの採取と検知したい物の性質を的確に把握することの方が大事らしい.自分は機械学習の専門家でも専攻する学生でもなく,不用意な知識をばら撒いてもいけないので,話はこれくらいにしておく.

興味を持った方は以下の文献を参照して頂きたい(講義で紹介されていたもの)
悪意を持った攻撃からウェブサイトを守るセキュリティ新技術
CiNii 論文 -  SVMを用いたWAFの検知機能の提案

1日目3,4講義目「情報セキュリティ技術者のための法律講座」
企業のWebサイトの情報流出問題について,模擬裁判を行った.私自身,法律に関する知識は本当に未熟で,上手く文章に書き起こせないので,この講義の内容を詳しく知りたい方は他の参加者のブログ記事を参照して頂きたい.下らない感想を言うと,講師の弁護士の方は会場の参加者や講師とはかなり雰囲気が違った.

2日目1,2講義目「Webプログラミング基礎講座」
この講義は午前の部と午後の部に分かれていた.

午前の講義
午前はローカル環境に存在する掲示板サイトから脆弱性を探す演習を行った.このWebサイト,実は意図的に大量の脆弱性が存在しており,Webセキュリティに詳しくない私でも簡単に脆弱性を発見することができた.私の発見した脆弱性は掲示板の検索フォームに存在したSQLインジェクションであり,union selectを使って,掲示板のユーザID/パスワードを表示させた.やはり,FiddlerやBurp Suiteが使えると調査が圧倒的に捗る.

午後の講義
午後はOWASP BWA*2を使った演習を行った.この演習では「検査の自動化」をテーマにしており,簡易診断スクリプトの作成を行った.このスクリプトはBeautiful Soup*3を使用しており,事前課題ではこのライブラリを使用して(必ずしも使用しなくても良いが),Webページのタイトルを表示するプログラムを作成した.以下にソースコードを示す.

gist.github.com 見てお分かりの通り,結構簡単にページの取得とHTMLの解析ができる.講義では,このライブラリを使用して自動ログインを行うプログラム(CSRFTokenありの場合 となしの場合)を書いた.Webセキュリティに詳しくない私が言うのも何だが,このOWASP BWAはかなり面白く勉強になるので,ぜひダウンロードして遊んでみて頂きたい.

2日目3講義目「いじって壊して遊んでハッカーになろう」
RaspberryPiを使った赤外線観測と操作を行った.流れとしては,赤外線リモコンを押して何らかの操作をした際に,RasPiのGPIOと接続している赤外線リモコン受信モジュール*4によって信号を観測するというものである.私の環境では残念ながら観測はできなかった.もしかすると,リモコン信号の学習の際に会場の他の信号が干渉したのかもしれない.モジュールとRasPiのイメージは貰ってきたので,自宅でもう一度再現しようと思っている.講師の先生曰く,この講義は本来であれば8時間近く掛けるべきものであるらしい.実際,今回の講義は2時間だったので8時間版も受けてみたい.

3日目1,2講義目「ハニーポットマルウェア解析講座」
午前はハニーポッド,午後はマルウェア解析に関する講義だった.

ハニーポットの講義
まず午前は実際に攻撃が観測されたマシン(ハニーポッド)にログインし,ログを通じて,攻撃者による実行したコマンドや変更箇所の確認を行った.調査の結果,今回の攻撃者はかなり意識が甘く,/home/攻撃者ユーザ名/.bash_history を削除していなかった.ここから,/var/tmp辺り(記憶が曖昧で申し訳ない)にRootKitを展開させ,実行させていることがわかった.大体の攻撃者は普通に一通りのログや侵入痕跡は削除するはずなので,今回のようにスムーズには解析できないと思うが,侵入解析の初歩を学ぶことができ,かなり良い経験になった.

マルウェアの講義
Windows7VM*5上で検体*6を動作させ,Process MonitorとProcess Exploerを使って検体の動作を観察した.ちなみにセキュリティキャンプ全国大会2016では,"動かしたら負け"の静的解析を行ったが,今回の講義はそれとは対照的に動的解析を行った.また,hybird-analysis・virus-total・malwrといったWebサイトを利用したオンラインスキャンも行い,グループで検体の特徴について話し合った.

ハニーポッド/マルウエア解析(というかディジタルフォレンジック全般)に言えることだが,解析の前にデータのバックアップを取ることやVMのスナップショットを作成することは必須といえる.
面白い講義であった分,自分の知識のなさを実感させられたので現在勉強中だが,以下の本が大変勉強になっており,とても面白い.
実践サイバーセキュリティモニタリング|コロナ社

その他
福岡には前泊で行ったが,もっと早くこれを見ておけばよかった.
明日から某キャン 九州なので博多駅の周りに住む僕がよく行くオススメの食事どころを紹介しておく - じゃあ、おうちで学べる

さいごに
今回のセキュリティ・キャンプ福岡大会開催にあたって,企画して下さった方,当日運営を進めて下さった方,講師・チュータ等,全ての方々に感謝申し上げます.本当にありがとうございました.

セキュリティ・キャンプ全国大会2016に参加してきた

8月9日~13日にかけてクロスウェーブ幕張で行われたセキュリティ・キャンプ全国大会に参加してきました.昨年,地方版のセキュリティ・キャンプであるミニキャンプ in 新潟に参加したので,セキュキャン関連のイベントへの参加は今回で2回目となります.

参加理由
現在所属している大学や,昨年度まで所属していた高校は技術的に優秀な人は多いものの,情報セキュリティについて話し合える人が案外少なかったので,そういった人に会い,関係を広げていきたいという思いが参加理由です.とはいえ,昨年の全国大会に落選したことからの執着心も大きいです.

応募用紙
文章の量で熱意を見せようとしました.この考えが既に醜いですね.三万字くらい書いた気がします(ソースコード除く).とにかく書けば良いという問題ではありませんが,来年以降参加希望の方へのアドバイスとして,とりあえず思ったことや調べたことはどんなに簡単なことでも書いていくべきだと思います.

事前課題
私の選択した講義はほとんど事前課題というものはなかったので,特に準備はしていませんでした.やったことといえば,私の持っているハリネズミ本が第一版だったので買い直し(&読み直し)たことくらいです.(とはいえ,選択した講義はCTFに直結するような形のものではなかったのであまり関係なかった気がしますが)

講義
■1-D Dissecting Malware - x86 Windows malware analysis -
マルウェアの検体をIDA(Free)を用いて静的解析する講義でした.解析した検体の形式は実行ファイルではなくIDAデータベースファイル(.idb)でしたが,ELINKSやNyMain等,実際の事件で使用されているものでした.正直,この講義を通じて静的解析はつらいものしか感じられなかったので私には向いていないのかもしれません.しかし,実際の解析では今回のように静的解析縛りではない(表層解析や動的解析もある)ことや,マルウェア解析におけるいくつかの重要なポイントを教わったので決して無意味な講義ではありませんでした.

■2-C 人工知能とセキュリティ
近年は爆発的な人工知能ブームといえますが,セキュリティ分野ではどのように応用できるかに焦点が当てられた講義でした.講義の中では,既存のSQLインジェクション検知システムのルールを観察,破る仕組みを考えたり,Rを用いた簡単なニューラルネットの実装,TensorFlowを用いて実装された文字認識プログラムの実行と考察などを行いました.また,人工知能にはどういった脅威があるかといった倫理的な話題の討論も行いました.

■3・4・5F OS/VMレイヤで実現する圧倒的に高速なパケットフィルタ/サンドボックス
Intel DPDKというユーザランドドライバを用いて特定のDNS要求をブロックする透過型ブリッジの作成を行いました.DNSというプロトコルは大体UDPパケットなので手間がかかりませんが,もう一つの課題として出されていた特定のhttpリクエストをブロックするブリッジはTCPプロトコルをブロックかつ切断パケットを送信する必要があるので実装が大変そうでした(自分はDNSの方に時間がかかりできなかった).この講義は本当に面白かったので,そのうち別の記事にまとめられればと思っています.しゅうう先生,slankさん,おりさのさん,色々助けていただきありがとうございました.

■6-B AVRマイコンで作るBadUSB自作
USBメモリをキーボードとして認識させるBadUSBをAVRマイコンを用いて実現させ,実際にPCに対して操作を行うプログラムを作成しました.私は昔のブラクラサイトに誘導するものや無限にロック(Windows+L)をかけるもの等,くだらないものばかり作っていましたが,参加者の中にはリバースシェルを張るプログラムやプロキシを書き換えるプログラムを作成されていた方もいたので,BadUSBは攻撃者次第で本当に恐ろしいツールになるという感想を持ちました.

■7-C 遠隔操作マルウェアと標的型攻撃からの防衛
ShinoBot(ShinoBot Suite)を用いた遠隔操作マルウェアの体験,またVBScriptでRATの開発を行いました.RATの開発はグループで分担して行いましたが,RAT自体は案外簡単に実装できるという感想を持ちました.しかし実際にはシグネチャ検知回避等を行う必要があり,攻撃側と防御側は常にイタチごっこの現状だそうです.ShinoBotの技術は昨年のAVTokyo以来,興味を持っていたので本当に楽しい講義でした.あと,同じグループにプロがいたので凄く頼もしかったです.

その他
グループワークやCTF等いろいろ書きたいことはありますが,割愛します(気が向いたら追記します).全体での反省としてもっと様々な参加者・チュータ・講師の方に積極的に話しに行くべきだったと思っています.来月参加するミニキャンプ in 九州(博多)ではこの反省を生かしていきたいです.また,今回のセキュキャンを通じて沢山のもの(物理的なものや精神的なもの)を頂きました.もらったもののうち,書籍は特に高額なので宣伝しておきます.現在2冊とも読み進めていますが,とても面白いです.
Webセキュリティ担当者のための脆弱性診断スタートガイド 上野宣が教える情報漏えいを防ぐ技術
Bugハンター日記

さいごに
セキュリティにあまり詳しくない方でも興味さえあればセキュリティ・キャンプ全国大会に参加できる可能性は十分にありますので,来年以降の応募をお勧めします.また,敷居が高いと感じる方は地方大会(ミニキャンプ)に参加してみてはいかがでしょうか.本当に最後になりますが,今年のセキュリティ・キャンプ全国大会に携わって下さった全ての方々に感謝申し上げます.本当にありがとうございました.

CVE-2015-5477の検証(&DNSに関する基礎知識)

本記事はCVE-2015-5477(BIND9.xの脆弱性)の検証に関するものです.

CVE-2015-5477の概要
攻撃者がサーバに不正なTKEYクエリを送信することでサーバのクラッシュ(正確にはnamedデーモンが落ちる)が発生する脆弱性です.調べたところ,世界中に存在する13のルートサーバの殆どがBINDを使用しているそうです.その点を考えるとこの脆弱性の危険性がおわかりいただけると思います.これは2015年7月に発見された脆弱性なので,2016年5月現在ではどのサーバも対策や修正がなされているでしょう.


DNSに関する基礎知識
DNSには「スタブリゾルバ・フルサービスリゾルバ(キャッシュサーバ)・コンテンツサーバ」という3種類の機能があります.

スタブリゾルバ
DNSの要求を始めに行うクライアントです.この要求を生成するコマンドとして「dig」等があります.

フルサービスリゾルバ
スタブリゾルバからの要求に対して自身のデータベース内に対応する答えがあればそれを返信し,なければ他のサーバに要求を行うサーバです.なおこの要求結果はスタブリゾルバに返信すると共に自身のデータベースにも格納するので「キャッシュサーバ」とも呼ばれます.この役割を行うサーバとしてISPのリゾルバ等があります.

コンテンツサーバ
自身の管理するゾーンにだけ応答し,自身のデータベースに要求の答えが存在しない場合,要求元に「存在しない」という返信を行うことです(つまり,他のサーバへ名前解決の要求を行いません).この役割を行うサーバとして各ゾーンの権威サーバがあります.

CVE-2015-5477では,BINDのフルサービスリゾルバとコンテンツサーバ双方が被害を受けます.


検証する
検証方法については,次の記事を参考にさせていただきました.
BIND9の脆弱性 (CVE-2015-5477)のPoCを書いて検証してみた - Qiita
仮想環境にサーバ(攻撃を受ける)とクライアント(攻撃を行う)を用意し,検証を行いました.

サーバ側でBINDを起動します.
f:id:epcnt19:20160528225329p:plain

起動されていることを確認します.今回はeth0(NAT)とeth1(Bridge)の2つが存在しているので,2つのアドレス(10.0.2.15,192.168.0.7)が対応しています. f:id:epcnt19:20160528225225p:plain f:id:epcnt19:20160528225614p:plain

では実際にサーバ(192.168.0.7)に向かって攻撃を行います.実際の攻撃コードについて深くは書きませんが,scapyを使えば非常に簡単に実現できます.クエリレコードタイプ249,クエリレコードと同じ名前を持つ追加レコード,これらを満たすDNSクエリをサーバへ送信します.
送信後,サーバ上でプロセスを確認すると,namedデーモンが落ちていることが確認できます.メッセージログ(/var/log/messages)からもrunning状態から異常終了していることがわかります.
f:id:epcnt19:20160528234110p:plainf:id:epcnt19:20160528234941p:plain


おわりに
本記事では,ひとまず検証のみを目的としているので,対策方法や検知方法についてはまた別の機会に書きたいと思います(色々諸事情がありまして...)