CODE BLUE 2015に行ってきました(2日目:後半)

こんにちは、ひろかずです。

[2日目:前半](http://qiita.com/fnifni/items/0e9101bb37f7c352b16d)に続き、CODE BLUE 2015のレポートします。
ライブで書いているので、多少の誤字脱字、表記揺れはご容赦ください。

#お品書き
1.MS Office ファイル暗号化のマスター鍵を利用したバックドアとその対策
光成 滋生 & 竹迫 良範
[Encryption][MS Office]

2.過去10年間のセキュリティ業界の失敗 -‐‑‒ 数百のサイバースパイ侵害から学んだこと
スンティン・サイ(TT) & チーエン・シェン(Ashley)
[APT] [Community]

=== ここまで[前半](http://qiita.com/fnifni/items/0e9101bb37f7c352b16d) ===
=== ここから後半 ===

3.X-XSS-Nightmare: 1; mode=attack ～XSSフィルターを利用したXSS攻撃～
キヌガワ マサト
[short][Web][IE][XSS]

4.Windows 10 IoT Coreに対する脅威分析と実施するべきセキュリティ対策
和栗 直英
[short][Windows][IoT]

5.PANDEMONIUM: 動的バイナリ計測とファジーハッシュを使用した暗号アルゴリズムの⾃動識別
黒米 祐馬
[U-25][fuzzy hash][binary][dynamic analysis]

6.Master Canary Forging: 新しいスタックカナリア回避手法の提案
小池 悠生
[U-25][binary]

7.実⽤的な大規模ネットワークのディフェンスあるいは「Eierlegende Wollmichsau」の保護
トラヴィス・ケアロック
[Network][DevOps]


#3.X-XSS-Nightmare: 1; mode=attack ～XSSフィルターを利用したXSS攻撃～
キヌガワ マサト
[short][Web][IE][XSS]

WebApplicationの脆弱性(特にXSS)を探すことが好き。
バグハンターで生計を立てている。
2014年でも登壇

IEのXSSフィルターを使ってXSSする手法とバイパスする手法を話す予定だったが、MSから待ったがかかって自重することにしたとのこと。

IEのXSSフィルターとは何か

* IE8から導入2009年
* Chrome、firefoxにも同様の機能がある

XSSフィルターとは

* リクエストの値とレスポンスから、危険条件にマッチすれば書き換える
* 例えば、レスポンスにスクリプトタグが含まれていれば、#を挿入する
* 条件にマッチすればユーザの動的生成部分を書き換えるので、正規のコードが破壊されることもある

`#` の挿入を考える

* `<script>`タグが破壊されると、スクリプトタグ中のXSS防止措置を適切に施した文字リテラルがそのまま実行される...とか
* その他のタグも破壊されると動作が大きく異なってしまう。
* XSSのない普通の構造ページが、XSSの脆弱性を持つようになってしまう

##DEMO
`<a hr#f` の場合
`http://hoge.com/?<a hr#f`にすると、HTML内のリンク `<a hraf` が壊れてしまう。
`<meta ch#set` や `<li#n hraf` や `<script>`も同様

XSSフィルタは、誤動作し易い(最大限配慮はされているが)
ブラウザ側も承知の上で導入している。

##X-XSS-Protectionヘッダ
保護機能を制御できるレスポンスヘッダ

* 0：無効：対応ができているので、フィルタは不要
* 1：有効(部分書き換え)：推奨しない
* 1;mode=block：有効(表示させない)：念の為に保護を受けたい

1;mode=blockは安全？

* 内容が推測できる（スクリプトを使用しているページだと判る）
* が、直接スクリプトが実行されることはないので、有用

0にするのはどう?

* 製品動作を優先して不適切に切っていると思われてしまう可能性

1は危険箇所だけ直してくれるように見えるので、魅力的に考えられる

* が、それ自体が罠

##最後に
XSSフィルターの改善に期待するが、安全に倒す必要があるので、デフォルトで行くのは考えもの


#4.Windows 10 IoT Coreに対する脅威分析と実施するべきセキュリティ対策
株式会社FFRI 和栗 直英
[short][Windows][IoT]

現在は自動車Securityの研究を担当されてるとのこと。
強面にみえるが、紳士だそうです。

WIndowsはEmbeddedからIoT Coreへ

IoT Coreの標準的なSecurity

* メモリ破壊系は対応している
* Windows Update、Defenderは対応していない
* IEとedgeは入っていない
* .NET Frameworkのサブセットをサポートしているがデスクトップとは異なる
* タスク管理機能はあるが、デスクトップとアーキテクチャが違うので既存の影響を受けにくい

##ネットワークサービスの調査

21:FTP

* スタートアップファイルに記述。
* 認証不要。ftpd.exe内に認証ロジックそのものがない。後から認証させることもできない
* スタートアップに入っているので、起動時に必ず動く)

4020:tcp

* NMAPヴィジュアルスタジオ2015のリモートデバッグができるようになってる。
* デフォルトで認証不要

WebUI標準搭載

* ベーシック認証
* REST APIによる一部操作も可能
* アプリのデプロイやデバイスの一部設定はできるけど、Securityに関する設定はできない
* WebからOSコードが実行できない対策はなされている

##攻撃シナリオの調査
機密性

* 盗聴、パスワードクラック窃取
* WebUIはデフォルトでHTTPベーシック認証

完全性

* スタートアップファイルの改ざん
* FTPからアップができてしまう(事実上何でも実行できる)

可用性

* DoS攻撃
* 連続的なRESTAPIの実行

これらの脅威はワーム型のマルウェアの影響が高い
ポートスキャンやICMPによるネットワーク上のデバイス探索でデバイスを発見できる

##対策
脅威の相関から機密性と完全性を担保することで軽減できる。

* インストール後にパスワードを複雑なものに変更すること
* HTTPS通信の有効化(ネットワークに既に侵入されている場合、HTTP通信だとパスワードを窃取される)
* スタートアップファイルを編集し、FTPを起動させないようにするorルート・ディレクトリを変更する（デフォルトはCドライブ直下）
* リモートデバッグ時の認証を有効化する
* ファイアウォールのカスタムでインバウンド、アウトバウンドを設定する
* ファイアウォール設定はスタートアップにも書ける。
* ファイアウォール設定は、デスクトップ版WindowsのCLIと同じやり方で設定可能

##まとめ
IoTプラットフォームとして期待できるが、Security設定のカスタム対応が前提(ファイアウォールは手間がかかる)
現在はWindowsUpdateに対応してないので脆弱性の対応が大変

最低限のSecurityはプラットフォームで担保すべきでは？

* ラズパイはホビー用途。すべてのユーザがSecurityを理解しているか？
* 無償、ラズパイ2、Embeddedの後継なんだから

##質疑応答
パスワード変更を効率的に変更してデプロイするには？

* PowerShellに対応しているので、それを使うことになると思う。

ロギング(出方や転送)に癖はあるか？

* ロギング機能があることは判っているが、詳しくは調査していない。

#5.PANDEMONIUM: 動的バイナリ計測とファジーハッシュを使用した暗号アルゴリズムの⾃動識別
黒米 祐馬
[U-25][fuzzy hash][binary][dynamic analysis]

学生やってます
Securityキャンプの講師
ブラックハットパイソンの査読協力
AVTOKYOのスピーカー

マルウェアが用いる暗号アルゴリズム

* バンキングトロイ：設定ファイルが暗号化（鍵は本体にハードコード）今回の対象
* ランサムウェア：感染hostsのファイルを暗号化（鍵はサーバからDownload）

バンキングトロイによる暗号化の利用

* Zeus流出から亜種が発生。最近は別種も発生。

算術・ビット演算に着目して暗号化処理が含まれる箇所を抽出する
ループ構造に着目して暗号化処理が含まれる箇所を抽出する

LLVMを用いて解析妨害機能の回避する

解析妨害機能

* サンドボックス環境を検出して、停止・自己消滅する
* 難読化による隠蔽
* マルウェアの目的は限られているが、手段は多様化。計算爆発がやってくる。
* 既存の確認手法が使えなくなっていく。

解析プラットフォームPANDAはQEMU上で動作
OS~マルウェア間との1対1の中間LLVMを見ることができる。

* 難読化コードの除去：無意味なコードの羅列も、実際にやり取りされている内容をLLVMにて見ることができる。
* QEMU低速だが、仮想化環境なので微妙に変えることで、サンドボックス回避機能を回避する。
* 微妙に環境が異なることでの解析の揺れは、ファジーファッシュで吸収する。

解析妨害機能の回避

* マルウェアが期待する待ち時間をsleepで待つ等して、サンドボックス環境だと悟らせない。
* マルウェアが期待するクロックを消費しているように見せかけて、サンドボックス環境だと悟らせない。
* 条件分岐の際は、スナップショットを取って、作ったクローンでそれぞれの分岐を試す。

テイントタグ途切れによる解析妨害の回避

* LLVM最適化で回避

##課題
暗号鍵の抽出ができていない
未知のマルウェアに対応できていない
LLVMではcode virtualizerに対応できない(マルウェア自体が仮想環境で動いている)


#6.Master Canary Forging: 新しいスタックカナリア回避手法の提案
小池 悠生
[U-25][binary]

16歳。もっと凄い16歳もいるので驚かないで。
exploit大好き
CTFにハマってたが飽きてきたのでそろそろ引退

##動機
ROP大好きでStack based buffer over flow大好き
Stack canary大嫌い

Stack canary

* BOFに因る攻撃阻止が目的
* リターンアドレスがStack canary領域に書き込まれたことに反応してプロセスを殺す。

##種類
ランダムcanary

* 基となる値がわからないように、プロセス起動時に値をランダムに決める

Terminator

* \0等を含まれるようにすると、元の値が推測し辛い(null文字を使ったBOFに有効)

##これまでの回避手法
_stack_shk_failを避ける
canaryをリークする(canary値を知ってれば回避)

###回避方法の提案
そもそも、マスターcanaryを書き換えてしまう

攻撃手法は、講演資料を参照してください。

##評価
使いづらい(2つの脆弱性を使用する必要がある)
Heap Based BOFできるなら、これだけで攻撃可能
Stack canaryがまだ完全でないことを示すことができた。

##対策
ランダムXOR canary(Windowsで実装済み：乱数を使ってエントロピーを高めている)
ガードページを設けてしまう(書き込めない領域)

#7.実⽤的な大規模ネットワークのディフェンスあるいは「Eierlegende Wollmichsau」の保護
トラヴィス・ケアロック
[Network][DevOps]

SOUNDCLOUDのSecurityエンジニア
テクニックをポジティブに使うことを話したい
ネットワークディフェンスについて語る

万能の解決策はない。
組織のニーズによる。
どのように構築していくのかを考えていく

何がしたいのか？

* ハッカーの侵入を止めたい
* 現実的ではない

先ず、インフラをより詳しく理解することから始める。

* リスク分析を完全な形で行っていることが大事。

ノード同士がフラットにつながったネットワークを想定してみる。
ノードには何があるか

* PC、NW機器、クラウドコンポーネント、VPN、マイクロサービス、DBクラスタ、スケジュールタスククラスタ、DNS、LB...
* これらのノードは悪意があるものではない(ないものにしなければならない)

これまでは、サーバはペットのように手間がかかるもので、常に稼働させることを是としてきた。

* パッチを当てて動かなくなることを恐れてきた。

今のサーバは、家畜のように考えられている。

* 何か問題があっても切り捨ててビジネスを続けていけばいい。
* 家畜は表現として正しくない(「Eierlegende Wollmichsau」「羽毛を持ち・卵を生む豚」ものと表現が正しい) 
* 様々な処理を行う変化し続けるものということ。

##ゴール
ネットワークトラフィックの探索
フォレンジック敵祥子と長時間解析

##ネットワークトラフィックの探索
どういうIPがあり、どのポートが開いていて、どの程度のワークロードを流すか
トラフィック規制(必要な通信のみを通信許可するIN/Out)
DBはインターネットからアクセスできるべきではない

##フォレンジック的要素と長時間解析

様々なログがある

* ネットワークlog、IPS/IDSlog、ファイアウォールlog、DHCP・DNSlog
* ローカルlog、auditd等のアプリケーションログも必要
* cloudtrail,s3logも必要

データの完全性が求められる

* 矛盾はない？
* 独立性
* 簡単に壊せるか
* 信頼性
* 保持ポリシー：物によって異なる(個人データは一定期間しか持てない法律もある：ドイツ)

様々な形があるのでlogの正規化が必要

* タイムスタンプは重要だが、タイムゾーンとフォーマットが異なるので合わせる必要がある。
* 送信内容：どのような内容であるかを判るようにする
* タグ付け：送信元IP等が判るようにする
* タイプ分け：ポート番号は整数なので計算できる。演算できるもの、文字列とタイプ分けする

log→ElasticSearch(分散型データストレージ：形を変える)→kibanaで分析(ダッシュボードを作る)

* ElasticSearchは強力でパワフル
* ポイントは様々なソースをパイプラインの終端まで届ける事が必要
* 今はコーディングが必要だが、ライブラリがたくさん出てるので活用して欲しい。

何をtargetとするか

* 組織の中で最も大事なものを定めないといけない。(DBクラスタ,財務データ...)

正しい状態は、何が何につながって居るべきであるのかを知る必要がある

* DevOpsエンジン(Chef、Puppet、Ansible)から情報は集められる
* DNSを参照するクエリー
* ソースコードを管理するリポジトリ(Git)

スタートアップは、構成管理が難しい

* マニュフェストファイルを用いることで、それぞれの要素間でのマッピングができていく。
* はじめは、手動で見ていくことになるが、最終的には自動化していく。

logライン(IP:ポートのSource/Destinationの紐付け)が見えてくることで、その範囲から外れたものを異常と捉える。

* 誤検知・過剰検知：よりよいクエリをデザインすることを考える。(and,or,ホワイトリスト,チューニング)
* ポリシーとガイドライン(アクセス権限：Read/Write権)を整備して、クエリしやすいデータにしていく。

アラートアクションのガイドラインを作る必要がある（メールのみ、PD通知、電話かける）

* アラートはデータとして捉える。
* 5分以内に複数起きたら別のアラートにするような仕掛けが必要。
* 攻撃者のKillチェーンを考慮する。(データベースアクセス、深夜のアクセス、外国からのアクセス)
* 外部サービス(所在地情報)へアクセスすることで、アラートであるか否かの判定の助けにする。

アラートが多すぎるとoperatorはアクションが取れなくなる。

* どういうアラートをoperatorに出すかを検討することが大事。
* ダッシュボードをカスタムして見せるべきものを選定する必要がある。

何を異常とするかを定める

* アラート管理
* 調査を簡単にするクエリツール
* ヘルプの整備

これらがきちんと動作するのか、テストを自動化する。

* 異常を想定通りに検知するかのテストを行う必要がある。

システムそのものが堅牢であるか、再構築ができるのか

データの活用方法

* 次のステップは機械学習(異常を見つける。アノマリを見つける)
* ネットワークへの
* logは何が起こったのかを得ることができる。

##まとめ
防御するのは大変だが、環境をコントロールできるのはあなた自身である。
ハッカーが侵入してきても、あなたがゲームマスターである。
あなたの環境を構築するべきで、使われるものは新しいものであるほうがいい。

##質疑応答
logはデバッグからSecurityのよるような重要なものまで大量にある。
優先順位を付ける必要があると思うが、知見はあるか

* すべては必要ではない。何を入れるかを選別する必要がある。
* DNSログは、ノイズが多く扱いづらい。
* たくさんあることが望ましいが、大量に出るので処理しきれるようにする必要がある。

ログ収集分析基盤は、OSSを作るべきか、自分で作るべきであるか

* OSSには素晴らしいものglobe等のNW解析ツールや良いライブラリがたくさんあるので活用すべき。
* カスタムコードは、必要最低限にするべき

SOUNDCLOUD内でログ解析するにあたって、良い組み合わせはありますか

* 機械学習は、Scalaのカスタムコードを使っている。
* 現時点では、STPライブラリを勧めることはできない
* 機械学習は、まだ実用段階ではない。十分な信憑性はない。検証が必要
* 先ずは、守るべきものを特定することが必要。

内部犯行について早期検知、追跡はどのようにしていけばよいか

* Securityの人間は誰も信用しない。
* SSHアクセスは注目するべき。
* 実際のテクニック：一般的な転送量を把握しておき、閾値を超えることを検知する
* AWSではVPC Flow Logsをリリースした。これを使って先ほどのテクニックを使える
* EUではsafe haber条項がある(個人情報は、発生国から持ち出せない)
* 個人情報の取り扱いは国ごとに違う。クラウドサービスを使用するにあたっては、どのデータがどこにあるのかを把握して、法務部門と相談する必要がある。


#おわりに
事務所不在の間、フォローしてくれたメンバーと、快く行かせてくれた上司と会社・周辺チームの皆に感謝です！

2日目後半は以上です。
お疲れ様でした。