こんにちは、R&D統括本部 開発推進室 セキュリティプラットフォーム技術の戸田 薫です。
セキュリティプラットフォーム技術の取り組みについてご紹介します。
「ヤフーのセキュリティに対する取り組みについて 第1回目」で「アプリケーションを開発するときには、既知の脆弱性を意識して行わなければなりません。」と述べたことについて、ヤフーがどのように取り組んでいるかについてご紹介いたします。
◆セキュアなシステムを構築するために
安全に利用できるシステムを構築するためには、知識や技術がなければなりません。
そのためにヤフーでは
- 1:教育
- 2:アプリケーションのセキュリティ対策
- 3:ソースコードレビュー
- 4:脆弱性テスト
- 5:セキュリティチェック
【1】教育
どのようなことでも同じことが言えますが、知らないものに対する対策を考えるのは非常に難しいです。セキュリティについて何も知らなければ、意識することなく、開発をしてしまうこともあるでしょう。
まずは、セキュリティの意識を持つこと、そして、セキュリティの問題を理解し、セキュリティの対策を知った上で、その対策を開発時に応用することで、はじめて製品の安全性が確保されます。
そのため、セキュリティへの意識や理解をエンジニアに持ってもらうために、毎年、新入社員が入社し、人事主催の研修が終了し、配属された時期に、全社向けに技術寄りのセキュリティのセミナーを行っています。
このセミナーでは、「なぜ、セキュリティが必要なのか?」や既知の脆弱性や事例などを説明し、実際にデモを行い、ヤフーにおける脆弱性対策について解説しています。
【2】アプリケーションのセキュリティ対策
デフォルトで堅牢な設定
ヤフーで利用している yApache(Yahoo!バージョンのApache web server。パフォーマンスとより簡単なコンフィグレーションマネージメントのための変更がされています)やYahoo! PHP(Yahoo! バージョンのPHP)は、インストールしたデフォルトの設定で、セキュアな設定になっています。
デフォルトが安全な設定になっていることで、安全対策の設定し忘れを防止することができる点がメリットです。
ヤフーでは、Yahoo! PHPの5系から、ヤフー版のfilter拡張モジュールがYahoo! PHPの依存関係として設定され、PHPアプリケーションは、XSS 対策のためにデフォルトでfilter 拡張モジュールによってフィルタリングされるようになっています。
基本となるyApacheのパッケージは、最低限のモジュールだけが組み込まれており、余計なものは含まれていません。
ヤフーで利用されるcookieは、yApache のcookie 用モジュールで自動的にチェックされ、壊れているcookieの破棄や修正が行われます。そのためエンジニアは、cookie の整合性を意識する必要はありません。
入力チェック
ヤフーのウェブアプリケーションの多くはいろいろなパラメータを受け取り、そのデータに基づいて振る舞いを決定し、データの格納や取り出しを行います。
受け取ったパラメータの取扱方によっては、予期せぬ振る舞いを行ってしまうことがあるかもしれません。
その対策として、プログラムで入力されたデータを検証しなければなりません。ウェブアプリケーションにおいては、この入力チェックが非常に重要です。入力された値のチェックを行わない場合、悪意のあるJavaScriptがウェブページに混入されたり、データベースのデータ盗難や改ざんといったことが起こるかもしれません。
ヤフーでは、入力値のチェックにヤフーの入力チェックライブラリを使用しています。 このライブラリでは、数値が入力されるべきところで数値が入力されているかを確認したり、XSS対策としてHTMLをエスケープやHTMLのタグを削除などの処理を行います。すべてのサービスで入力のチェックはこのライブラリで行うことになっています。このライブラリが PHP の filter拡張モジュールの起源とも言えるライブラリです。
PHPアプリケーションの場合、「デフォルトで堅牢な設定」で書いた通り、Yahoo! バージョンのPHPパッケージをインストールした時にYahoo! PHPの依存関係でヤフーのfilter拡張モジュールがインストールされ、入力からHTMLタグが除去される設定がデフォルトです。このため仮に入力チェックを行わないアプリケーションを書いたとしても自動的にフィルタリングされます。こうして、XSSといった問題が起きないようになっているのです。
「ぼくはまちちゃん」で有名になったCSRFの対策には、ヤフー標準の対策 API が社内向けに提供されています。 フォームやリンク、AjaxやFlashの通信、jsonを返すエントリーポイントで、必要に応じてCSRF対策が行われています。
【3】ソースコードレビュー
セキュリティ教育だけに頼らず、実際に開発されたコードを評価して、安全であることを確認する必要があります。 ソースコードレビューをしているチームも多くありますが、セキュリティプラットフォームでは、ヤフー独自のソースコードスキャナーと脆弱性スキャナーを提供しています。人手でレビューを行うためのヤフー独自のソースコードレビューツールも提供されています。
社内には、全社で利用するソースコード管理ツール(CVSやSubversion)があり、ソースコードは、そこにコミットされます。 コミットされたソースコードは、自動的に上述のソースコードスキャナーによってスキャンされます。そのため人手を使わずに、単純なソースコードレビューを行えます。
ソースコードスキャナーは、使うべきではない関数やフラグの利用、設定ファイルの不適切な設定などを検出でき、スキャンのためのテストケースも簡単に追加できるようになっています。
ソースコードに問題と思われる部分が発見されると、コミットしたエンジニアへ通知されます。 ソースコードスキャナーは、完全ではなく、人手によるチェックも必要ではありますが、ツールでチェックするメリットとして、チェックの品質が一定であり、網羅的であること、人手が掛からないことなどが挙げられます。
また、セキュリティプラットフォームでは、サービス開発側の依頼でシステムのレビューを行ったり、PCI DSS(Payment Card Industry Data Security Standardの略でクレジット業界におけるグローバルセキュリティ基準)を取得しているサービスに対して、実際にソースコードのレビューを行っています。
【4】脆弱性テスト
書いたコードは、実際に動作させて確認しなければなりません。
ヤフーでは、独自のセキュリティスキャナーを利用し、単純なレベルでの脆弱性チェックを行っています。
エンジニアは、開発したアプリケーションを任意のタイミングで、セキュリティスキャナーでスキャンすることが可能です。このほか、エンジニアによるオンデマンドのテストとは別に、外部に公開しているサービスを定期的にスキャンし、ヤフーのサービスに既知の問題がないことも確認しています。
【5】セキュリティチェック
ヤフーでは、開発フローのうちの企画、外部仕様書承認前、リリース前のフェーズにおいて、セキュリティチェックを行っています。
このチェックでは、セキュリティ問題に関連する特に守るべき項目が適切に行われているかを確認することができます。たとえば、OSやDBのアカウント管理、入力チェック方法、セッション管理など、幅広い項目があり、設計などの見落としを失くすための補助的なツールとして利用しています。
◆まとめ
以上のことが、教育、開発、テストにおけるヤフーのセキュリティ対策の概要になります。 ヤフーは、多くのお客様を抱えており、セキュリティ問題が発生した場合には、お客様や社会へ非常に大きなインパクトを与えかねません。
サービスの規模にかかわらず、あるヤフーのサービスがセキュリティの問題を抱えいる場合、その穴からヤフー全体を脅かす問題へ発展する可能性があります。
そのため、ヤフーでは、個々のサービスのセキュリティに細心の注意を払って、開発・運営しています。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました