「最近のwebアプリケーションの脆弱性やそれを悪用する攻撃の動向」OWASP Kansai

「最近のwebアプリケーションの脆弱性やそれを悪用する攻撃の動向」OWASP Kansai

オワスプナイトカンサイ ~OWASPローカルチャプターミーティング in 関西 10th~でご発表いただいた
東京大学情報学環 特任研究員 藤本万里子さんの資料です

341ac9f717b3904d6674784c0fcd9cf2?s=128

OWASP Kansai

July 12, 2017
Tweet

Transcript

  1. 3.

    東京大学 情報学環 自己紹介 • 2004年~NECソリューションイノベータにて、ソフト 開発やSIなどに従事 • 2015年~JPCERTコーディネーションセンターに出向 し、脆弱性検証やログ分析に従事 •

    2017年~東京大学情報学環に出向し、セキュリティ人 材育成や研究に従事 • 対外活動・執筆物など – ISOG-J 脆弱性診断士(Web アプリケーション) – 講演や脆弱性情報の発信 Apache Commons Collectionsの脆弱性解説(CodeZine) https://codezine.jp/article/detail/9150 3
  2. 5.

    東京大学 情報学環 Struts 2の脆弱性(S2-045/046) • 今年3月に公開され、多くの日本組織が被害を受けた • 脆弱性悪用により、リモートから任意のコードを実行できる • 公式アップデートの公開前に攻撃コードが公開された

    • 類似のStruts 2の脆弱性が立て続けに公開されている ※Struts 2はWebアプリケーションの開発フレームワーク Web アプリケーション 細工した リクエスト Webサーバ Struts 2 攻撃者が指定した コードがサーバ上で 実行される 5 引用: https://www.lac.co.jp/lacwatch/alert/20170310_001246.html
  3. 7.

    東京大学 情報学環 Struts 2の脆弱性悪用の事例 • 国内組織で大規模な情報流出の被害が発生 – Webサイトにバックドアが設置され、クレジットカード情 報が流出 2017/3/06

    2017/3/07 2017/3/08 22:14 脆弱性情報 が開発者向け サイトに公開 15:21 攻撃コード公開 4:54 サーバへの攻撃を確認 夜 公式アップデート公開 Struts 2の脆弱性に関する、ある被害組織のタイムライン 2017/3/09 21:56 不審なリクエス トを遮断 ①脆弱性情報公開 ②攻撃を確認 ③回避策適用 2017/3/10 11:15 Webサイト停止 ④サービス停止 7
  4. 8.

    東京大学 情報学環 Struts 2について • MVC (Model/View/Controller) モデルにもとづくオープ ンソースのJavaの Web

    アプリケーションフレームワーク • Struts 2に脆弱性が見つかると、それを利用しているソフ トウエアやWebアプリが影響を受ける サーバ リクエストとActionの 関連付け Struts 2 Action1 ActionMapper JSP1 View Controller Model JSP2 /action1.action /action2.action Action2 APサーバ 8
  5. 9.

    東京大学 情報学環 S2-045の脆弱性を悪用する攻撃 • multipart/form-dataを処理するStruts 2標準のパーサ (JakartaMultiPartRequest)のエラー処理に関する脆弱性 • Content-TypeにOGNLを含めてリクエスト 9

    APサーバ Struts アプリケーション 細工した リクエスト ContentType: %{(#nike=‘multipa rt/form-data’).(#dm=@ognl. OgnlContext@DEFAULT_MEM BER_ACCESS).・・・} サーバ Struts 2 Content-Typeが不正な形 式の場合、エラーが発生 エラー処理でOGNLコード が評価され、任意のコード が実行される
  6. 10.

    東京大学 情報学環 OGNL(Object Graph Navigation Language) • JSPなどからJavaクラスのプロパティやメソッドに簡単にアク セスできるプログラミング言語 •

    Struts 2はOGNLをサポートしており、内部的にも使っている • 一方、リクエストを通じて任意の Java コードが実行できるた め、セキュリティ問題を引き起こすリスクもある <View (JSP with OGNL)> <s:property value="%{sampleList.size}"/> <s:property value="%{sampleList[0]}"/> <Action (Java Class)> public class SampleAction extends ActionSupport { private List<String> sampleList; public List<String> getSampleList() { return sampleList; } public void setSampleList(List<String> sampleList) { this.sampleList = sampleList; } public String execute() throws Exception { ・・・ } } 10 SampleActionクラスの sampleListプロパティにアクセス
  7. 11.

    東京大学 情報学環 S2-046の脆弱性を悪用する攻撃 • S2-045公開から10日後、新たな攻撃ベクトルが発覚し、追加のア ドバイザリが公開された • Struts 2標準の別のパーサ(JakartaStreamMultiPartRequest)のエラー 処理に同様の脆弱性

    • メッセージボディのContent-Disposition にOGNLを含む細工した 文字列を含める 11 APサーバ Struts アプリケーション 細工した リクエスト Content-Disposition: form-data; name="upload"; filename="%{#context[… サーバ Struts 2 Content-Lengthが超過し ている場合、エラーが発生 OGNLコードが評価され、 任意のコードが実行される
  8. 12.

    東京大学 情報学環 S2-045,46に対する回避策 • 不審なリクエストの遮断(WAF/サーブレットフィルタ) • WAF(Web Application Firewall) –

    Webアプリケーションに特化したファイアウォール – 通信の中身(ペイロード)をチェックすることが可能 • 不正なリクエストかどうかの判断例 – Content-TypeやリクエストボディにOGNL表現 (OgnlContext,OgnlUtil,#context など)が含まれないか • OGNLに起因するその他の脆弱性を狙う攻撃にも有効 だが、正規のリクエストを遮断しないように注意 12
  9. 13.

    東京大学 情報学環 サーブレットフィルタ • サーブレットを実行する前の処理を行うJavaプログラム – 処理の振り分け、リクエストのフィルタリング、共通の 処理など • サーブレットとは

    – Javaで実装されたサーバサイドプログラムのこと • 追加の製品導入が不要な反面、組み込みが難しい局面もある サーバ Struts 2 Action1 Servlet Filter1 JSP1 View Controller Model JSP2 /xx.action (正規のリクエスト) Action2 Servlet Filter2 不正なリクエストの フィルタリング 細工した リクエスト
  10. 15.

    東京大学 情報学環 任意のコード実行の脆弱性 15 脆弱性 CVE 時期 ソフトウエア PHP/Joomla! の脆弱性

    CVE-2015-6835, CVE-2015-8562 2015年8月, 12月 PHPライブラリ/CMS Apache Commons Collectionsの脆弱性 ― 2015年11月 Javaライブラリ Magento 2の脆弱性 CVE-2016-4010 2016年5月 PHPベースのCMS node-serialize の脆弱性 CVE-2017-5941 2017年3月 Javascriptライブラリ • 任意のコード実行が可能となる脆弱性とそれを悪用する攻撃 が多数確認されている • CMS、ライブラリなどWebアプリの開発を支援するソフトウ エアの脆弱性が多い • 「オブジェクトインジェクション」に起因する脆弱性が増え てきている
  11. 16.

    東京大学 情報学環 問題その① • Webアプリの開発を支援するためのソフトウエアの場合 – プログラムと密接に関係する – 様々なソフトやアプリで使われており、影響範囲が広い •

    アップデートが提供されても、速やかな適用が難しい場合も – 影響範囲の調査が大変 – 修正が微小でもテストが大変 16 ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ 調査とテスト工数が かさむ 修正箇所は 少ない場合でも・・ 影響範囲が広い
  12. 17.

    東京大学 情報学環 オブジェクトインジェクションとは • 意図しないオブジェクトが生成されること – オブジェクト:プログラミング言語で、ある機能に関連するプロパ ティと処理をまとめたもの • アンシリアライズ処理の検証不備が契機になることが多い

    – シリアライズ:オブジェクトの状態を保持したまま送受信したり、 ファイルへ読み書きを行うために特定のデータ形式に変換すること – アンシリアライズ:変換されたデータをプログラムで扱えるオブ ジェクトの形式に復元すること 17 Webアプリケーション ①不正なオブジェクトを シリアライズして送信 細工した リクエスト ②受信したデータを アンシリアライズ 意図しない オブジェクト ③意図しないオブジェ クトが生成される
  13. 18.

    東京大学 情報学環 問題その② • ライブラリやフレームワークの脆弱性を悪用する攻撃が成 立するのは、利用側(アプリ)の実装にも問題があるケースが 多い →単にパッチを適用するだけでは、根本的対処とならない 18 脆弱性

    ライブラリの問題 利用する側の問題 PHP/Joomla! の脆弱性 PHPの問題: 文字列のアンシリアライズが 正しく行われず、オブジェク トを復元してしまう Joomla!の問題: アンシリアライズ処理の延長 でリスクがある処理を行って いる Apache Commons Collectionsの脆弱性 アンシリアライズ時に動的に コードを実行できるクラスが 存在する APサーバなどの問題: アンシリアライズ対象オブ ジェクトに対する検証不備 Magento 2の脆弱性 アンシリアライズ処理の延長 でリスクがある処理を行って いる ― node-serialize の脆弱性 関数(処理)を含めたシリアラ イズが可能 信頼できないデータをアンシ リアライズしている
  14. 19.

    東京大学 情報学環 問題その② • PHP/Joomla!の脆弱性例 – PHP:セッションをデコードするライブラリに脆弱が存在(CVE- 2015-6835) – Joomla!:上記ライブラリを利用するCMS(CVE-2015-8562)

    19 Webサーバ ①細工したリクエスト Joomla! User-Agent PHP ②リクエストに含まれる値を シリアライズして保存 Serialized UA 不正なオブ ジェクト ④アンシリアライズ時に自動 的に実行される処理によって 任意のコードが実行される User- Agent 細工したリクエストの例: 脆弱な ライブ ラリ ③アンシリアライズすると、 意図しないオブジェクトが 生成される
  15. 20.

    東京大学 情報学環 Webアプリケーションの脆弱性を 悪用する攻撃から守るためには • Webアプリで使用するソフトウエアのアップデート • ライブラリの利用側の処理の見直し – 入力チェック

    ※入力チェックは様々な脆弱性への対策として有効 • アンシリアライズ時、対象が意図したクラス(データ型)で あるかをチェック • アンシリアライズしたオブジェクトの状態をチェック – アンシリアライズ時の処理に注意 • 自動的に実行される関数(Magic Method)に注意 20
  16. 21.

    東京大学 情報学環 注意すべきAPIの例 21 クラス名 メソッド名 説明 Serializableを実 装するクラス readObject

    ※ 本メソッドをオーバライドしている場 合、当該クラスのデシリアライズ時に 実行される Serializableを実 装するクラス readResolve ※ 本メソッドをオーバライドしている場 合、当該クラスのreadObject() の実行 後に呼び出され、デシリアライズする オブジェクトを置換できる Externalizableを 実装するクラス readExternal ※ 本メソッドをオーバライドしている場 合、当該クラスのデシリアライズ時に 実行される Javaのアンシリアライズに関連するAPIの例 ※アンシリアライズ時に自動的に実行される関数
  17. 22.

    東京大学 情報学環 注意すべきAPIの例 22 クラス名 関数名 説明 ― unserialize 保存用の文字列形式をオブジェクトに

    アンシリアライズする シリアライズ 対象のクラス __destruct()※ オブジェクトが破棄される際の処理を 定義する特殊関数であり、アンシリア ライズ時に実行される シリアライズ対 象のクラス __wakeup()※ アンシリアライズ時に自動的に実行さ れる シリアライズ対 象のクラス __toString() print(),echo()などを使用し、オブジェ クトの内容を表示した際に実行される。 PHPのアンシリアライズに関連するAPIの例 ※アンシリアライズ時に自動的に実行される関数
  18. 23.

    東京大学 情報学環 Webアプリケーションの脆弱性を 悪用する攻撃から守るためには • 速やかな修正が難しい場合の運用的回避策 – WAFの導入 – 適切なアクセス制御の実施

    • 信頼できない接続元の制限 • 認証の設定 – Webアプリが可能な動作を制限 • Webアプリの実行ユーザ権限 • プログラム実行環境のセキュリティ機能(Security Managerなど) • 攻撃を検知するための対策 – ログの設定と保存 • S2-045を検知するためにはContent-Typeの記録が必要 23
  19. 24.

    東京大学 情報学環 まとめ • リモートから任意のコード実行が可能となる脆弱性は脅 威度が高い • フレームワークやCMSは便利な反面、脆弱性が見つかっ た場合の調査が難しく、また影響範囲が広いというデメ リットもある

    • ライブラリやフレームワークのアップデートとあわせて、 利用側の実装を今一度見直すことが大切 • 速やかな修正が難しい場合の運用的回避策、攻撃を検 知・調査するためのログ取得も必要 24
  20. 25.

    東京大学 情報学環 (参考) S2-045の脆弱性(CVE-2017-5638) • multipart リクエストを処理するStruts 2標準のパーサ (JakartaMultiPartRequest)のエラー処理に関する脆弱性 –

    使用するパーサを標準から変更していない場合に影響を受ける – パーサの機能を使っていなくても影響を受ける – Content-Type が不正な形式の場合、エラーが発生し、脆弱性がある 処理が実行される 25 APサーバ Struts アプリケーション 細工した リクエスト サーバ Struts 2 エラー処理に脆弱性があり、 OGNLコードが実行される StrutsPrepareFilter JakartaMultiPartRequest content_typeに“multipart/form-data” があると、JakartaMultiPartRequest が実行される
  21. 26.

    東京大学 情報学環 (参考) S2-046の脆弱性(CVE-2017-5638) • multipart リクエストを処理するStruts 2組み込みのパーサ (JakartaStreamMultiPartRequest)のエラー処理に同様の脆弱性 –

    使用するパーサをjakarta-streamに設定している場合に影響を受ける – 標準のパーサ(JakartaMultiPartRequest)使用時の影響は明記されていない – Content-lengthが上限を超過している場合、エラーが発生し、脆弱性があ る処理が実行される 26 APサーバ Struts アプリケーション 細工した リクエスト サーバ Struts 2 エラー処理に脆弱性があり、 OGNLコードが実行される StrutsPrepareFilter JakartaStreamMultiPartRequest content_typeに“multipart/form-data”があ ると、設定に応じたパーサを実行 jakarta-streamの場合は JakartaStreamMultiPartRequestを実行
  22. 27.

    東京大学 情報学環 (参考) S2-045,46に対する回避策 • 不審なリクエストの遮断(WAF/サーブレットフィ ルタ) • 不正なリクエストかどうかの判断例 –

    Content-Type • multipart/form-dataが含まれるが、該当文字列で始まっていな い • OGNL表現 (OgnlContext,OgnlUtil,#context など)が含まれる – リクエストボディ(Content-Dispostion) • OGNL表現 (OgnlContext,OgnlUtil,#context など)が含まれる – Content-Length • 想定以上の値が指定されている 27
  23. 28.

    東京大学 情報学環 参考資料 • Javaのデシリアライズに関する問題への対策 http://codezine.jp/article/detail/9176 ・What Do WebLogic, WebSphere,

    JBoss, Jenkins, OpenNMS, and Your Application Have in Common? This Vulnerability. http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere- jboss-jenkins-opennms-and-your-application-have-in-common-this- vulnerability/ ・Sec Bug #70219 Use after free vulnerability in session deserializer https://bugs.php.net/bug.php?id=70219 ・[20151201] - Core - Remote Code Execution Vulnerability https://developer.joomla.org/security-centre/630-20151214-core- remote-code-execution-vulnerability.html ・Joomla!の「ゼロデイコード実行脆弱性」はPHPの既知の脆弱性が原因 http://blog.tokumaru.org/2015/12/joomla-zero-day-attack-caused-by- php.html 28