Apache Axis2 におけるXML署名検証不備

Similar documents
Apache ActiveMQ における認証処理不備の脆弱性

JBoss Application Server におけるディレクトリトラバーサルの脆弱性

Spacewalkにおけるクロスサイトフォージェリ(CSRF)の脆弱性

MySQL Connector/J における SQL インジェクションの脆弱性

ログを活用したActive Directoryに対する攻撃の検知と対策

サイボウズ Office8 API マニュアル API 概要 第 1 版 サイボウズ株式会社

Apache Tomcatにおけるクロスサイトリクエストフォージェリ(CSRF)保護メカニズム回避の脆弱性

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

はじめての暗号化メール(Thunderbird編)

Oracle Java 標準ライブラリ AtomicReferenceArray クラスにおけるデシリアライズに関する脆弱性

制御システムセキュリティアセスメントサービス

Himawari の異常な暗号

JEB Plugin 開発チュートリアル 第4回

JEB Plugin 開発チュートリアル 第3回

SpringSecurity

Microsoft PowerPoint - DNSSECとは.ppt

JPCERT/CCインシデント報告対応レポート[2015年4月1日 ~ 2015年6月30日]

metis ami サービス仕様書

intra-mart Accel Platform

Adobe Reader 署名検証設定手順書

CloudEdgeあんしんプラス月次レポート解説書(1_0版) _docx

SQLインジェクション・ワームに関する現状と推奨する対策案

OSSTechプレゼンテーション

Blojsom におけるクロスサイトスクリプティングの脆弱性

正誤表(FPT0417)

intra-mart Accel Platform — OAuth認証モジュール 仕様書   初版  

WTM2019SingleSignOn

Microsoft IISのWebDAV認証回避の脆弱性に関する検証レポート

本章では サービス参加機関の利用管理者に配付するサーバ証明書の発行 更新 失効及び管理を行う登録担当者の操作方法について記述します サービス参加機関の利用管理者からサーバ証明書の発行要求があり サーバ証明書の新規発行が必要な場合は 1-1. サーバ証明書新規発行 を行ってください 既にサーバ証明書を

スライド 1

CA Federation ご紹介資料

IPsec徹底入門

JPCERT/CCインシデント報告対応レポート[2018年4月1日 ~ 2018年6月30日]

Javaセキュアコーディングセミナー東京 第4回 メソッドとセキュリティ 演習解説

HULFT Series 製品における Javaの脆弱性(CVE )に対する報告

FIDO技術のさらなる広がり

企業ネットワークにおける 認証基盤の構築に関する研究

Microsoft Word - XOOPS インストールマニュアルv12.doc

SAML認証

1. クライアント証明書管理手順 本章では サービス参加機関の利用管理者に配付するクライアント証明書の発行 更新 失効及び管理を行う登録担当者の操作方法について記述します サービス参加機関の利用管理者からクライアント証明書の発行要求があり クライアント証明書の新規発行が必要な場合は 1-2. クライ

よくある質問 Q1. 署名付きメールを受信後 署名アイコンをクリックしてメッセージの作成者から正常に送信されていることを確認しましたが 取り消し状態 に デジタル ID の確認が無効になっています と表示されました (Outlook Express6 Windows Mail) 初期設定では 証明書

ENMA とは 送信ドメイン認証の ( 受信側 ) 検証をおこなう milter Sendmail Postfix と連携動作 認証結果をヘッダとして挿入 認証結果ヘッダの例 Authentication-Results: mx.example.jp; spf=pass smtp.mailfrom=

Microsoft PowerPoint - IPsec徹底入門.ppt

JPCERT/CC インターネット定点観測レポート[2014年7月1日~9月30日]

■POP3の廃止について

— intra-martで運用する場合のセキュリティの考え方    

Cisco CSS HTTP キープアライブと ColdFusion サーバの連携

自己紹介 名前 : 一ノ瀬太樹 所属 : HASH コンサルティング株式会社 OWASP Japan プロモーションチーム OWASP ZAP ユーザーグループ脆弱性診断研究会 ( 管理者その 3) Perl 入学式 ( サポーター ) HASH Consult

ISE の BYOD に使用する Windows サーバ AD 2012 の SCEP RA 証明書を更新する

WL-RA1Xユーザーズマニュアル

HDC-EDI Base Web/deTradeII送受信機能起動時におけるJava8のセキュリティ警告とその回避策について

Active Directory フェデレーションサービスとの認証連携

Microsoft PowerPoint pptx

FUJITSU Cloud Service K5 認証サービス サービス仕様書

JPNICプライマリルート認証局の電子証明書の入手と確認の手順

FUJITSU Cloud Service for OSS 認証サービス サービス仕様書

<4D F736F F F696E74202D208C928D4E95DB8CAF81458CFA90B6944E8BE095DB8CAF94ED95DB8CAF8ED28E918A698EE693BE93CD81698EA58B43947D91CC93CD8F918DEC90AC D834F A82F097E182C682B582BD652D476F E71905C90B

SeciossLink クイックスタートガイド

べきでない悪意のあるSQL 文が攻撃者から入力された場合 データベースで実行される前にSQL 文として処理されないよう無効化する必要がありますが ( 図 1 1) 無効化されずにデータベースで実行された場合 データベースの操作が可能となります ( 図 1 2) 本脆弱性を悪用するとデータベース接続ユ

スライド 1

図 2: パスワードリスト攻撃の概要 インターネットサービスの安全な利用は 利用者が適切にパスワードを管理することを前提に成り立っており 利用者はパスワードを使い回さず 適切に管理する責任があります 以下はパスワードリスト攻撃を受けたことを 2013 年 4 月以降に発表した企業のうち 試行件数 と

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Japan Computer Emergency Response Team Coordination Center インシデントレスポンス概論 JPCERT コーディネーションセンター山賀正人 2003/11/ JPCERT/CC

Web ( ) [1] Web Shibboleth SSO Web SSO Web Web Shibboleth SAML IdP(Identity Provider) Web Web (SP:ServiceProvider) ( ) IdP Web Web MRA(Mail Retrieval

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

6-2- 応ネットワークセキュリティに関する知識 1 独立行政法人情報処理推進機構

UMIN INDICE Lower level data communication protocol for CDISC ODM規約

目次 1. 既存ワンタイムパスワード方式の課題 2.IOTP の特徴 3.IOTP の仕様 4. 安全性 可用性評価 5. 実施例 6. 知的所有権情報 7. まとめ 1 All Rights Reserved,Copyright 日本ユニシス株式会社

技術レポート 1)QuiX 端末認証と HP IceWall SSO の連携 2)QuiX 端末認証と XenApp の連携 3)QuiX 端末認証 RADIUS オプションと APRESIA の連携 Ver 1.1 Copyright (C) 2012 Base Technology, Inc.

SILAND.JP テンプレート集

HDC-EDI Base deTradeII送受信機能起動時におけるJava8のセキュリティ警告とその回避策について

POWER EGG 3.0 Office365連携

Web のしくみと応用 ('15) 回テーマ 1 身近なWeb 2 Webの基礎 3 ハイパーメディアとHTML 4 HTMLとCSS 5 HTTP (1) 6 HTTP (2) 7 動的なWebサイト 8 クライアントサイドの技術 回 テーマ 9 リレーショナルデータベース 10 SQL とデータ

使ってみよう! 平成 30 年 9 月国税庁

Delphi/400を使用したWebサービスアプリケーション

JPCERT/CC インシデント報告対応レポート[2017年1月1日-2017年3月31日]

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

<4D F736F F F696E74202D208C928D4E95DB8CAF81458CFA90B6944E8BE095DB8CAF94ED95DB8CAF8ED28E918A698EE693BE93CD81698EA58B43947D91CC93CD8F918DEC90AC D834F A82F097E182C682B582BD652D476F E71905C90B

脆弱性を狙った脅威の分析と対策について Vol 年 7 月 21 日独立行政法人情報処理推進機構セキュリティセンター (IPA/ISEC) 独立行政法人情報処理推進機構 ( 略称 IPA 理事長 : 西垣浩司 ) は 2008 年度におけ る脆弱性を狙った脅威の一例を分析し 対策をまと

ServerView Resource Orchestrator V3.0 ネットワーク構成情報ファイルツール(Excel形式)の利用方法

使用する前に

2015 年 4 月 15 日に発表された HTTP.sys の脆弱性 ( ) へ の対応について 製品名 : バージョン : 対象プラットフォーム : カテゴリ : iautolaymagic すべてすべて Web アプリ この度 マイクロソフト社製品において緊急度の高い脆弱性 (CV

勉強会の流れ Google API の概要 デモ curl で実際に体験 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 2

あなたも狙われている!?インターネットバンキングの不正送金とマルウエアの脅威

本文中の記号の意味 本文中で使用している記号の意味について以下に示します システムの操作上または処理の手続き上において 特に注意していただきたい事項を記載しています 記載内容を必ずお読みください システムの操作上または処理の手続き上において 参考にしていただきたい事項を記載しています 必要に応じてお

リバースプロキシー (シングル構成) 構築手順

付録 2 システムログ一覧 () 攻撃経路 1. ファイアウォール (FW) ネットワーク型 IPS/IDS Web サーバ AP サーバ DB サーバ プロキシサーバ エラーログ SSL ログ AP ログ ホストログ 非 日時 ファイアウォールホスト名 ファイアウォールルール名及び番号 インバウン

WEBシステムのセキュリティ技術

(1) 鍵の更改 に追従するために 1 のソフトウェア ( 一般に BIND 又は Windows Server を利用 ) を最新版に更新する ( 今回の対策だけでなく 脆弱性への対応のためにも 最新版への更新は必須 ) 2 において DNSSEC のトラストアンカーの自動更新 の設定を行う 3

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

ムの共有アドレス帳 インスタント メッセージングの宛先に活用することも考えられる 統合アカウント管理 認証 認可 ( アクセス制御 ) の機能 サービス機能 サービス定義統合アカウント管理利用者の認証情報 ( ユーザ ID パスワード) と属性情報 ( グループ 所属部門等 ) を一元的に管理する機

JPCERT/CCインシデント報告対応レポート[2018年7月1日~ 2018年9月30日]

iNFUSE インフューズ

サブスクライバー / 署名者 Subscriber 側 ( アリス ) の要件 セキュアな署名 なりすましをいかに防ぐか 署名に使用する私有鍵をいかに保護私有鍵をいかに保護するか?? セキュアなハードウェアトークンなどが有効 セキュアな装置のセキュリティ基準 欧州の電子署名では SSCD (Secu

<4D F736F F D E FD8936F8B4C8F8A82CC936F8B4C8AAF82CC93648E718FD896BE8F9182CC936F985E8EE88F872E646F63>

Apache-Tomcat と 冗長な UTF-8 表現 (CVE 検証レポート ) 2008 年 08 月 26 日 Ver. 0.1

Oracle SALTを使用してTuxedoサービスをSOAP Webサービスとして公開する方法

Apache Commons の HttpClient におけるSSLサーバ証明書検証不備


2 目次 1. 実証事業の全体概要 1.1 Androidスマートフォンへの利用者証明機能ダウンロード ( 仕組み ) 1.2 iosスマートフォンへの利用者証明機能ダウンロード ( 仕組み ) 1.3 システム検証と安全性対策検討 2. 利用者証明機能ダウンロードに関するシステム検証 2.1 An

Transcription:

Japan Computer Emergency Response Team Coordination Center 電子署名者 : Japan Computer Emergency Response Team Coordination Center DN : c=jp, st=tokyo, l=chiyoda-ku, email=office@jpcert.or.jp, o=japan Computer Emergency Response Team Coordination Center, cn=japan Computer Emergency Response Team Coordination Center 日付 : 2013.09.30 16:19:35 +09'00' Javaアプリケーション脆弱性事例調査資料 について この資料は Javaプログラマである皆様に 脆弱性を身 近な問題として感じてもらい セキュアコーディングの 重要性を認識していただくことを目指して作成していま す Javaセキュアコーディングスタンダード CERT/Oracle版 と合わせて セキュアコーディングに 関する理解を深めるためにご利用ください JPCERTコーディネーションセンター セキュアコーディングプロジェクト secure-coding@jpcert.or.jp 1

Apache Axis2 における XML 署名検証不備 CVE-2012-4418 JVNDB-2012-004882 2

Apache Axis2 とは XML をベースとしたメッセージ交換プロトコル SOAP を実装した Web アプリケーションフレームワーク SOAP にセキュリティ機能を追加する WS-Security は Axis2 では Rampart モジュールで実装されている トークン Axis2 フレームワーク 暗号化 デジタル 署名 Rampart WS-Security Axis2 SOAP SOAP XML Secure Servlet (tomcat) 等 Java VM 3

SOAP(XML)とは SOAP(Simple Object Access Protocol) ネットワーク経由で情報を交換するためのプロトコル XML形式によるシンプルな構造 Header部とBody部から構成される WS-Security を用いて安全な交換が可能 SOAPメッセージ <soap:envelope > < soap:header> </soap:header> < soap:body> </soap:body> 4 Header 部 メッセージの処理方法等 の付加情報を定義する Body 部 メッセージ本文

WS-Security とは WS-Security(Web Services Security) SOAP メッセージ交換に対してセキュリティを提供するための仕様 OASIS *1 の Web Service Security TC によって仕様策定された WS-Security のセキュリティ機能 1. セキュリティトークン ( 認証および認可に利用 ) 2. デジタル署名 3. 暗号化 *1 OASIS オープン規格標準を策定 推進する非営利団体 https://www.oasis-open.org/ 5

デジタル署名とは デジタル署名 ネットワーク上での印鑑やサインに相当するもの以下のような効果がある なり済ましを検出 改ざんを検出 否認防止 送信事実の否定を防止すること 6

デジタル署名の仕組み 公開鍵暗号系の性質を利用 秘密鍵とそれに対応する公開鍵が存在 秘密鍵で暗号化したものは対応する公開鍵でしか復号できない 公開鍵で暗号化したものは対応する秘密鍵でしか復号できない 秘密鍵は本人だけが持つ 公開鍵は相手に持ってもらう 送信者の秘密鍵 予め取得しておいた送信者の公開鍵で復号 送信者 送信者は自分の秘密鍵で署名する 受信者 秘密鍵は本人しか持たないため 送信者の公開鍵で復号できることが本人が暗号化したことの証明になる 送信者本人が送信したものである (= 改ざんされていない ) ことを検証する場合 7

XML 署名とは : XML 署名の構文 XML 署名とは XML に対しデジタル署名を付与すること XML の文書全体だけでなく XML の部分的な要素に対して署名が可能 XML 署名として SOAP に埋め込まれる構文 XML のどの部分に署名が付与されているのかを示す <Signature > <SignedInfo> : <Reference URI= > : <DigestValue> </Reference> </SignedInfo> < SignatureValue> : </SignatureValue> </Signature> XML 署名要素署名情報要素 : 参照要素 (URI は署名対象の識別子 ) : 署名対象のダイジェスト値要素 署名値要素 署名データを付与する 8

XML 署名とは : Reference 値による署名対象の指定 <soap:envelope > < soap:header> <Signature> Body 部の id=123 を指している < Reference URI= #123 > < DigestValue > <SignatureValue> 署名値 < soap:body id= 123 > 署名対象 署名対象 (Body) の数だけ参照要素 (Reference) も存在する 署名 署名対象そのものではなく 署名対象のメッセージダイジェストに対して署名し その署名値を SignatureValue に設定する メッセージダイジェスト ( ハッシュ値 ) 9

メッセージダイジェストとは メッセージの指紋のようなもの 固定長のバイト数で構成される メッセージが1ビットでも異なればメッセージダイジェスト値も異 なる メッセージダイジェスト値が同一となる異なるメッセージの作成は 困難 同一メッセージからは常に同じ値が生成される Hello world 7b502c3a1f48c8609ae212cdfb639dee39673f5e メッセージダイジェスト (ハッシュ値) attack world 不一致 d4018309b7da546c8ba030b01cefcd85a1a0dfc0 SOAPメッセージ全体の暗号化は時間的なコストが高いことから 全体ではなくメッセージのダイジェスト値に対して処理をおこなう 10

脆弱性の概要 デジタル署名された XML メッセージの署名検証処理に不備 XML 署名を偽装したメッセージに対し 署名が不正であることを検出できず 正しく署名されたものとして扱ってしまう なりすまし行為などの脅威 11

脆弱性が悪用された場合のリスク 偽装したメッセージによる サービスの不正利用送信メッセージが認証や認可に利用されている場合は 認証回避につながる 改ざんに気付かない 通常の送信 サービス利用者 送信ユーザのメッセージを横取り 攻撃者 横取りしたメッセージを改ざんして送信 サービス提供者 12

SOAP メッセージの処理フロー クライアント側 2ポリシーファイル読み込み 3SOAPメッセージを組み立て ポリシーに従い署名し送信する署名 送信 サーバ側 1ポリシーファイル読み込み 4メッセージを受信 解析し 署名を検証する受信 署名検証 5ポリシーに違反していないか検証 ポリシーに従い検証 6 メッセージからデータを取得する 13

12 ポリシーファイル読み込み (1/2) SOAP メッセージに適用するセキュリティポリシーが定義されている クライアント側とサーバ側の両方に署名される要素のパスが同じ内容のポリシーファイルを持つ policy.xml client.jks 付加情報 ポリシーファイルクライアント / サーバに署名される要素のパスが同じ内容で記載されている 署名用データ client.jks : 送信者の秘密鍵 service.jks : 送信者の公開鍵 Axis サービスファイル WEB-INF service.xml service.jks 付加情報 事前に deploy SOAP XML Secure Axis2 Rampart ポリシーに従い署名 ポリシーに従い検証 14

12 ポリシーファイル読み込み (2/2) 署名方法や署名個所が記載されているファイル policy.xml <sp:body /> = Body 要素配下への署名 <wsp:policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy wsu:id="sigonly" > <wsp:exactlyone> <wsp:all> : <sp:signedparts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" > <sp:body /> </sp:signedparts> <ramp:rampartconfig xmlns:ramp="http://ws.apache.org/rampart/policy" > <ramp:user>client</ramp:user> <ramp:encryptionuser>service</ramp:encryptionuser> SigOnly = 署名のみ <ramp:passwordcallbackclass>org.apache.rampart.samples.policy.sample02.pwcbhandler</ramp:passwordcallbackclass> <ramp:signaturecrypto> <ramp:crypto provider="org.apache.ws.security.components.crypto.merlin" > <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type" >JKS</ramp:property> <ramp:property name="org.apache.ws.security.crypto.merlin.file" >client.jks</ramp:property> <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password" >apache</ramp:property> </ramp:crypto> </ramp:signaturecrypto> </ramp:rampartconfig> </wsp:all> </wsp:exactlyone> 15

3SOAP メッセージを組み立て署名し送信する Envelope Header Signature SignatureInfo メッセージのハッシュ値が秘密鍵で暗号化され署名に埋め込まれる Reference URI="#123" SignatureValue RA4Ydrc0h/KfvnKWVIFJZsUqs6aXjx2i4OkLufbOgv1 MvFrqDnMIHsAl1KLqrb+G4QPCLWiQDPt4 Body Id="123" 署名 echo param Hello world ポリシーファイルに従って署名される 16

④メッセージを受信し署名を検証する Envelope Header 署名を公開鍵で復号化しメッセー ジのハッシュ値を取り出す Signature ハッシュ値 が異なれば 改ざんされ ている SignatureInfo Reference URI="#123" RA4Ydrc0h/KfvnKWVIFJZsUqs6aXjx2i4OkLufbOgv1 MvFrqDnMIHsAl1KLqrb+G4QPCLWiQDPt4 SignatureValue Body Id="123" 検証 参照個所はここ echo attack world param メッセージが改ざんされている メッセージを改ざんした場合 メッセージ部分は異なる ハッシュ値となるため改ざんを検知することができる 17 署名の検証結果を保持しておき PolicyBasedResultsValidatorにてポ リシーに違反してないか検証する

5 ポリシーに違反していないか検証する ポリシーファイルのデフォルトの検証処理は PolicyBasedResultsValidator クラスで行われている 4 メッセージを受信し署名を検証する の検証結果を元にポリシーに違反していないか検証する メッセージに対する署名検証時の処理フロー (PolicyBasedResultsValidator) 1. セキュリティトークン ( ユーザ認証等 ) でエラーが発生している場合は Exception 生成 2. 暗号化要素でエラーが発生している場合は Exception 生成 3. 署名要素でエラーが発生している場合は Exception 生成 4. 要求されている要素がいずれか存在しない場合は Exception 生成 5. 信頼されていない署名エラーがある場合は Exception 生成 6. soapヘッダのタイムスタンプが期限切れ等の場合は Exception 生成 18

6 メッセージからデータを取得する Axis サーバ上で稼働するアプリケーションがデータを取得 Envelope 取得対象のデータ位置 : /Envelope/Body/echo/param Header Signature SignatureInfo Reference URI="#123" SignatureValue Body Id="123" echo Param エレメントのコンテンツ Hello world が取得される param Hello world 署名の検証が OK となったデータ部 19

Axis の処理の問題点 署名 / 署名検証機能は SOAP メッセージを扱う Axis 本体に対する付加機能 (rampart モジュール ) 署名要素の位置とアプリケーションが処理するデータの格納位置は独立に設定される 検証すべき署名データが本来想定している位置にあるかどうかを検証していない 20

攻撃リクエストフロー ユーザとサーバの間に攻撃者が入り SOAP メッセージを改ざんされた場合に 検出できない問題がある 操作 改ざんが検出できない 中継 中継 送信者 攻撃者 サーバ ( 本来の送信先 ) 改ざん操作 SOAP メッセージを改ざん レスポンスを偽装 21

SOAPメッセージの改ざん Envelope Header Signature SignatureInfo Reference URI="#123" SignatureValue 改ざん 挿入 された Body 部 Body Id= 999" 改ざん前の位置には 存在し ないID 999 を挿入して 改ざん対象のメッセージを追 加する echo param attack world wrapper 正規の Body 部 Body Id="123" echo param 22 Hello world オリジナルのXML要素 を<wrapper>タグ配下 に移動

③改ざんされたSOAPメッセージを送信する Envelope URIの値と一致する 個所を参照するた め <wrapper>で ラッピングされた 部分を参照する Header Signature SignatureInfo Reference URI="#123" SignatureValue 改ざん 挿入 された Body 部 Body Id= 999" echo param attack world wrapper 正規の Body 部 Body Id="123" echo param 23 Hello world <wrapper>以下のxml要素は 元のままなので メッセー ジのハッシュ値が一致し 検証処理に成功する

⑥メッセージからデータを取得する Envelope 署名検証 参照要素(Reference URI)の先を検証 メッセージ取得 Body直下のメッセージを取得 Header Signature SignatureInfo Reference URI="#123" SignatureValue メッセージの取得処理では /Envelope/Body/echo/param の値が使用されため 改ざんされ ているメッセージが取得されてし まう 改ざん 挿入 された Body 部 Body Id= 999" echo param attack world wrapper 正規の Body 部 Body Id="123" echo param 24 Hello world 検証処理を行ったのは こちらのXML要素のみ

正常なリクエストと改ざんされたリクエストの比較 正常なリクエスト <soap:envelope > <soap:header> <Signature> < Reference URI= #123 > 正常時の署名はあくまで 正規のメッセージ 部分に対してのもの 改ざんされたリクエスト <soap:envelope > <soap:header> <Signature> < Reference URI= #123 > <soap:body Id= 123 > 正規のメッセージ 追加されたメッセージは検証されない 同一 署名部分は改ざんされていないのでハッシュ値は同一 <soap:body Id= 999 > 追加されたメッセージ <soap:wrapper> <soap:body Id= 123 > 正規のメッセージ 25

Axis2 の XML 署名検証処理の問題点 署名時の XML 要素位置と検証時の XML 要素位置が異なっていても検知しない 署名検証時に XML 要素位置の検証をしていない W3C の Best Practices ドキュメントに違反している!! W3C XML Signature Best Practices http://www.w3.org/tr/xmldsig-bestpractices/ Best Practice 14: 検証者は XML 署名検証の過程で名前と位置の両方をチェックする必要があります 26

XML 署名検証処理の修正 : 対策前 署名された要素の位置の比較なし 正常なリクエストのパス /Envelope/ Body 一致 改ざん後のリクエストのパス /Envelope/wrapper/ Body 27

XML 署名検証処理の修正 : 対策後 署名された要素の名前と位置を比較 正常なリクエストのパス 署名要素位置はポリシーファイルに記載されている /Envelope/Body 改ざん後のリクエストのパス 不一致 パスが異なっていた場合エラー処理をする /Envelope/wrapper/Body 名前と要素位置の比較は署名検証が完了した後のタイミングで行う 28

XML 署名検証処理の修正 : 対策コード作成 ポリシーファイルの記載内容に基づく検証処理に要素のパスの検証処理を追加する ポリシーファイルのデフォルトの検証処理をおこなっている PolicyBasedResultsValidator クラスを修正する XML 形式の妥当性検証や XML 署名の検証結果についてはすでに完了しているタイミング検証結果を元にポリシー違反をしていないかを検証する工程となっている 29

XML 署名検証処理の修正 : 対策コード作成 正常リクエストの 6ポリシーファイルに従いポリシーに違反していないかを検証する の処理を修正する 要素の位置チェック を追加する必要がある メッセージに対する署名検証時の処理フロー (PolicyBasedResultsValidator) 1. セキュリティトークン ( ユーザ認証等 ) でエラーが発生している場合は Exception 生成 2. 暗号化要素でエラーが発生している場合は Exception 生成 3. 署名要素でエラーが発生している場合は Exception 生成 署名要素に対するチェック方法を修正 4. 要求されている要素がいずれか存在しない場合は Exception 生成 5. 信頼されていない署名エラーがある場合は Exception 生成 6. soapヘッダのタイムスタンプが期限切れ等の場合は Exception 生成 30

XML 署名検証処理の修正 : 対策コード ( 参考 ) PolicyBasedResultsValidator protected void validatesignedpartsheaders(validatordata data, List<WSEncryptionPart> signatureparts, List<WSSecurityEngineResult> results) throws RampartException { : 署名された参照 URIを取得 for (final WSSecurityEngineResult actionresult : actionresults) { List wsdatarefs = (List) actionresult.get(wssecurityengineresult.tag_data_ref_uris); : for (final Object objectdatareference : wsdatarefs) { } : WSDataRef wsdataref = (WSDataRef) objectdatareference; List<WSEncryptionPart> signedparts = rpd.getsignedparts(); boolean find = false; for (final WSEncryptionPart encparts : signedparts) { if (encparts.getxpath().equals(wsdataref.getxpath())) { find = true; break; } } 署名位置が一致しなければ例外生成 本脆弱性は現時点で未修正 (Apache Axis2/Java 1.6.2) ここでは独自に作成した修正コードを示す ポリシーファイル記載の署名すべき要素 実際の XML 署名とポリシーファイル記載の Xpath 比較 31

参考情報 XML Signature Wrapping Attack ここで紹介した攻撃手法は XML Signature Wrapping Attack という名称で呼ばれている Apache Axis2 の実装の問題は USENIX Security 2012 で発表された論文において指摘されている On Breaking SAML: Be Whoever You Want to Be, USENIX Security Symposium 2012 https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf 32

まとめ XML 署名検証処理における注意点 XML 署名の検証では 署名データの検証だけではなく XML 特有の要素位置に関する検証も必要 上記への対策署名データの検証と署名データの要素位置の検証を行う 33

著作権 引用や二次利用について本資料の著作権は JPCERT/CC に帰属します 本資料あるいはその一部を引用 転載 再配布する際は 引用元名 資料名および URL の明示をお願いします 記載例引用元 : 一般社団法人 JPCERT コーディネーションセンター Java アプリケーション脆弱性事例解説資料 Apache Axis2 における XML 署名検証不備 https://www.jpcert.or.jp/securecoding/2012/no.10_apache_axis.pdf 本資料を引用 転載 再配布をする際は 引用先文書 時期 内容等の情報を JPCERT コーディネーションセンター広報 (office@jpcert.or.jp) までメールにてお知らせください なお この連絡により取得した個人情報は 別途定める JPCERT コーディネーションセンターの プライバシーポリシー に則って取り扱います 本資料の利用方法等に関するお問い合わせ JPCERT コーディネーションセンター広報担当 E-mail:office@jpcert.or.jp 本資料の技術的な内容に関するお問い合わせ JPCERT コーディネーションセンターセキュアコーディング担当 E-mail:secure-coding@jpcert.or.jp 34