2019年8月 7日

脆弱性に対するヤフーの取り組みについて

  • このエントリーをはてなブックマークに追加

こんにちは、YJ-CSIRTの中村です。

皆さんはCSIRT(シーサート/Computer Security Incident Response Team)という組織名を耳にしたことがありますか。

CSIRTは、組織内の情報セキュリティインシデントを専門に扱う、インシデント対応チームです。
CSIRTについては、7/11のtechblog記事「守れサイバーセキュリティ~SOCとは? ヤフーにおけるその役割」でも紹介されています。
こちらの記事では、CSIRTと関わりが深いSOCについての説明をしていますので、ぜひご一読ください。

ヤフーの組織内CSIRTであるYJ-CSIRTでは、情報セキュリティインシデントが発生したときだけでは無く、脆弱性診断や対策、予防措置など、さまざまな活動をしています。
今回は、YJ-CSIRTの活動の一例として脆弱性に対する取り組みについてご紹介します。

脆弱性とは

脆弱性(Vulnerability)とは、開発者が意図しない動作をさせてしまう、攻撃者が利用できるシステムのバグであり、脅威に対して対策がとられていない状態です。

脆弱性が存在する状態でサービスを提供することは、悪意のある攻撃者・マルウェアなど情報システムに危害を与える脅威に対して、攻撃用の「穴」を提供しているに等しいと言えます。
このような脆弱性があるサービスを運用したことで、侵入・個人情報の漏洩・不正利用といったセキュリティインシデントを引き起こし、結果としてお客様の信用を失いサービスを継続できなくなる、という事例が国内でもあります。
脅威に備えて早期に脆弱性へ対応していくことは、安全なサービス提供を実現するために不可欠です。

ヤフーでの脆弱性への対応は、大まかに次のようなステップを回すことで実施されます。

  • 脆弱性検査
  • 脆弱性の認知、評価
  • 対応計画
  • 修正対応

ヤフーでは、脆弱性検査・情報収集を主にYJ-CSIRTが、認知後の対応計画から修正対応はサービスの開発者が、それぞれ分担して脆弱性への対応に取り組んでいます。

ヤフーの脆弱性検査に対する取り組み

脆弱性検査は、サービスの各アプリケーション、ネットワーク機器、OSやミドルウェアなどを対象に、脅威に対する対策が十分に取られているか・脆弱性が無いか検査するものです。

脆弱性診断とも呼ばれるこの行為は、ざっくりと次のような種類があります。

  • アプリケーション診断
  • プラットフォーム(ネットワーク)診断
  • スマートフォンアプリ診断

次に、各診断について紹介します。

アプリケーション診断では、提供するサービス・Webアプリケーションを対象に脆弱性の有無をチェックします。先に述べましたが、脆弱性は"開発者が意図しない動作をさせてしまう"システムのバグであるため、通常の開発工程にあるテストに似たアプローチが取られます。ちなみにWebアプリケーション診断については、さまざまなツールやドキュメントをOWASP(Open Web Application Security Project)と呼ばれる国際的な団体が提供しています。

アプリケーション診断には、以下のようなアプローチがあります。

  • SAST
    • 「Static Application Security Testing」の略
    • ソースコードなどを対象に解析を行う、静的なアプリケーションの解析手法
  • DAST
    • 「Dynamic Application Security Testing」の略
    • 稼働させたWebアプリケーションに対して解析を行う、動的なアプリケーションの解析手法
  • IAST
    • 「Interactive Application Security Testing」の略
    • アプリケーションの実⾏環境でエージェントを動作させる事で、実⾏環境の監視/検知をする解析⼿法

各アプローチに違いはありますが、共通する点として脆弱性検査の診断結果を元に、手動で発生原因を探り修正対応を実施する必要があります。現在ヤフーでは、DASTによる診断をYJ-CSIRTの診断担当者が実施して、SASTによる診断は開発フローの中で開発者が実施する、という形で運用されています。

プラットフォーム(ネットワーク)診断は、サーバOSやミドルウェア・ネットワーク構成など、システムのプラットフォームに対して脆弱性の有無をチェックします。この診断では、各環境で利用されているミドルウェアやライブラリの機知の脆弱性の検査も含まれています。⼀例としてヤフーでは、各ホストにインストールされているミドルウェアとそのバージョン情報を収集して、脆弱性の有るミドルウェアを検出するシステムを内製・運⽤しています。

スマートフォンアプリ診断は、名前の通りiOSアプリやAndroidアプリに対する診断です。アプリケーションのバイナリファイルや、元となるソースコード、バックエンドのWebAPI、設定の不備など、スマートフォンアプリを構成するシステムを対象に検査を実施します。

このような社内での診断の取り組み以外に、脆弱性診断ベンダーへ診断を委託を定期的に行い、第三者による診断を実施することで多角的に診断をしています。

これらの診断は、ある時点で "何の問題も見つからないセキュアな状態にある" と診断されたとしても、システム内で利用しているOSSやミドルウェアなどに新規の脆弱性が報告されて、診断結果が変わることが日常的に発生しています。そのため、定期的かつ継続的な診断を続けて、迅速に脆弱性対応を行う必要が有ります。

ヤフーにおける脆弱性検査の課題と対策

過去、ヤフーの開発フローは、企画、設計、開発、リリースと各ステップで責任者による承認があり、この際にセキュリティチェックも実施されていました。
チェック内容は、認証、個人情報の管理といった設計から、脆弱性検査ツールでの検査結果など、幅広い項目をサポートするモノです。
ヤフーは、多数のサービスを提供しています。サービスごとに「ヤフー特有」の個性的な構成のシステム・運用環境が存在しており、画一的な検査方法ではカバーが難しいことがあります。そのため、この開発フローで実施する共通のセキュリティチェック以外に、社内の担当者が手動で行う診断や、社外の診断ベンダーへの委託、といくつかの診断を組み合わせて運用されてきました。

しかし、近年アジャイル開発の導入など開発スタイルの変化に伴い、開発サイクルが高速化しています。そのため、ウォーターフォール型の開発フローのように各フェーズでセキュリティチェックをする、という運用は開発速度に追いつくことが難しくなっています。

現在ヤフーでは、開発フローでのセキュリティチェックを見直し、DevSecOpsの文脈に習いCI/CDパイプラインの各ステップに脆弱性検査を組み込み、SASTをはじめとした脆弱性検査の自動化を推進しています。

CI/CDパイプラインにおける脆弱性検査

CI/CDパイプラインへ脆弱性検査を組み込むことで、開発者自身が意識せずともビルド時に脆弱性検査を実施することができます。また、脆弱性が検出された際にビルドを止めることで、脆弱性が有る状態でサービスが公開されることを未然に防止しています。

おわりに

ヤフーが守るべきモノについては、2009年に公開された「ヤフーのセキュリティに対する取り組みについて 第1回目」というヤフーのセキュリティ対策の記事で言及されています。

ヤフーでは、さまざまなサービスを提供しています。その中には、プライバシーやお金にかかわるものもあります。そのため、お客様やパートナー企業に対して、安心・信頼してご利用いただける安全なサービスを提供する必要があります。

例えば、下記のものを守っていかなければなりません。

  • お客様の個人情報やプライバシーなど
  • パートナー企業との信頼関係やコンテンツ
  • ヤフー自身

この記事の公開から10年たっていますが、ヤフーのセキュリティ対策の根幹は変わっていません。
10年もたてば提供するサービスが移り変わり、開発のプロセスも変わり、社員の入れ替わりもあります。しかし、サービス提供者として守るべき点は、お客様にサービスを提供し続ける限り本質が変わることはありません。
みなさんに安心・信頼してご利用いただける安全なサービスの提供を続けるためにも、この取り組みは続いていきます。


【関連記事】ニアミスだった2人のペンテスターが語る「ここが変だよ、日本のセキュリティ」(外部サイト)
https://japan.zdnet.com/extra/yahoo_201907/35138904/

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加