セッション
カンファレンスでのセッション発表は、なんと40件もありました。複数のトラックに分かれていたことからその全部を見て回ることができませんでしたが、私が関心を持って参加したセッションを2つ紹介します。
Securing your application using Docker(Diogo Monica, Docker)
Dockerを用いることでマイクロサービスをセキュアにできることを解説したセッションです。マイクロサービスとは、ステートレスで独立したサービスがHTTP(S)やJSONなどの既存の共通技術によってそれぞれのサービス/コンポーネント間の連携によって構成されるサービスです。
このようなサービス指向のアーキテクチャは以下の特徴を有しています。
- 構築が即座にできる
- それぞれのコンポーネントが疎結合であり、容易にスケールすることができる
- 多様なプログラミング言語やフレームワークが用いられている
Dockerはコンテナ型仮想化技術であることから1つのコンテナが1つのプロセスになります。コンテナに載せたアプリケーションは独立したレイヤで提供されデフォルトで安全性を保つことができることを解説し、マイクロサービスの構築との相性が良いことを示していました。
また、アプリケーションのパッチ管理におけるライフサイクルは迅速かつ容易に行え、リスクを軽減することができるそうです。加えて、アプリケーションの振る舞いが可視化され、さまざまなレベルでのセキュリティコントロールが可能であることを示し、実際にデモが行われました。
デモ環境は、フロントエンドサーバ(PHP)とバックエンドサーバ(MySQL)の2つのコンテナから構成されていました。
まず、フロントエンドサーバに対して、HTTP GETリクエストを用いたコマンドインジェクション(※1)が行われ、フロントエンドサーバのトップページにフロントエンドサーバのプロセスが表示されました。その後、フロントエンドサーバのトップページがコマンドインジェクションにより書き換えられます。そこで、起動する際にdockerコマンドの引数にreadonlyを用いて実行することでファイルの書き換えが行われないことを示し、dockerコマンドを用いて書き換えられたファイルの確認や書き換えられる前へのロールバックも容易であることを実演していました。
コンテナに乗ったそれぞれのアプリケーションが最小権限で実行されることやロールバックが容易なことに加え、セキュリティのベンチマークやベストプラクティスもあることで、サーバを立ち上げるときにはDockerを用いることが今後ますます増えていきそうです。
以下に本セッションの参考資料を示します。
- 「Understanding Docker Security and Best Practices」(Docker Blog)
- docker-bench-security(GitHub)
※1 コマンドインジェクション
コマンドインジェクションとは、ユーザからデータ入力や操作を受け付けるWebサーバにおいて、入力パラメータに悪意のある文字列を挿入することで意図しないコマンドを実行させる攻撃手法です。Webアプリケーションの脆弱性トップ10をまとめた「OWASP Top 10」において、1位のインジェクションに位置づけられています。
Building your own large scale web security scanning infrastructure in 40 minutes(Bishan Kochar&Albert Yu, Yahoo)
Yahooが社内で活用しているセキュリティスキャンプラットフォームについて紹介するセッションです。
大規模なWebサービスを提供している多くの企業と同様に、Yahooでも多くの時間を掛けてリリースするWebサービスに対してセキュリティスキャンを行っているそうです。これまでWebサービス向けのセキュリティスキャンプラットフォームはPythonを用いて内製、社内利用していたそうですが、利用を通じて課題が明確になったため、課題解決を機にプログラミング言語Goで2か月掛けて書き換えたそうです。現在このプラットフォームは、Gryffinとして公開されています。
PythonからGoで書き換えるにあたり、セキュリティスキャン時にWebサイトが含んでいる関連Webサイトへのクロールが延々と続くことの回避、似通ったWebサイトや重複したWebサイトへのクロールをなくす、Webサイトの変更を考慮してクロールするなどのいくつかの改善がなされました。一例として、重複したWebサイトを除外するためにMoses Charikar氏の論文からSimhashをHTMLに適用し、異なるWebサイト同士の類似点を"HTML距離"として数値化して、HTML距離のスコアが高い場合には重複したクロールを行わないようにしたそうです。
具体的には、写真共有サービスのFlickerでは、ユーザが異なっていてもHTML距離は100.00%であるため、以降のクロールはFlickr内の1ユーザだけで済ませることができます。
一方、https://www.yahoo.com/とhttps://www.flickr.com/の場合は、HTML距離は89.06%となるため、それぞれクロールする必要があるといった具合です。
また、DOMのクローラの改良としてPhantomJSを用いたDOMのレンダリングなどを行うことで効率的にWebサイトのクローラを実施できるようになり、スケーラビリティも向上したとのことでした。改良が加えられて効率的になったクローラによって集められた情報は、セキュリティスキャナーに掛けられて脆弱性の有無を判定します。スキャナーには既存のスキャナーやカスタマイズしたスキャナーを利用できるとのことでした。また、ログの可視化には、KibanaとElasticsearch を利用できるとのことです。Webサイト向けのセキュリティスキャンプラットフォームを導入する際には、Mozilla Minionと併せて検討してみたいと思います。
以下に本セッションの参考資料を示します。
- 「Building your own large scale web security scanning infrastructure in 40 minutes - AppSecUSA 2015」(YouTube)
- 「Similarity Estimation Techniques from Rounding Algorithms」
まとめ
その他、SalesforceやAdobeでの社内事例紹介のセッションやビットコイン取引所を運営しているCoinbaseによるセッションなど、日本国内では知る機会が少ない貴重な情報が多数ありました。本カンファレンスのセッションのいくつかは、すでにYouTubeのOWASPチャンネルで公開されています。興味のあるセッションがありましたら、視聴してみてください。
次回のOWASP AppSecは2016年6月27日からヨーロッパで開催される「OWASP AppSec Europe 2016」です。有償トレーニングやセッションから得られる情報に加え、プロジェクトサミットなどOWASPコミュニティに関わるWebセキュリティの専門家と活発にコミュニケーションを図れる素晴らしい機会です。筆者も参加する予定なので、参加をご検討ください。
次回のイベントレポートは12月21日に六本木のSuper Deluxeで開催されるイベント、WASNight 2015 Year Endに関する報告を予定しています。これはOWASP JapanとWASForumが半年に1回程度の頻度で共催しているビアバッシュ形式のカジュアルなイベントです。Webセキュリティの勉強をしつつ、来場される方々とコミュニケーションもとれる有意義な場であり、日本においてもThe OWASP Foundationが開催する国際カンファレンスと同様の雰囲気を味わえること間違いなしです。
イベントへの参加登録および詳細内容は12月中旬頃にOWASP JapanのメーリングリストやTwitter、Facebookページから告知することを予定しています。OWASP AppSec Europe 2016への参加検討のインプットとするためにぜひご参加ください。