Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

670 views

Published on

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

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. 東京大学 情報学環 最近のWebアプリケーションの脆弱性や それを悪用する攻撃の動向 1 東京大学大学院情報学環 セキュア情報化社会研究寄付講座 特任研究員 藤本万里子
  2. 2. 東京大学 情報学環 アジェンダ 2 • Struts 2(S2-045/046)の脆弱性について • 最近のWebアプリケーションに対する攻撃動向 • Webアプリケーションの脆弱性を悪用する攻撃 から守るためには • まとめ
  3. 3. 東京大学 情報学環 自己紹介 • 2004年~NECソリューションイノベータにて、ソフト 開発やSIなどに従事 • 2015年~JPCERTコーディネーションセンターに出向 し、脆弱性検証やログ分析に従事 • 2017年~東京大学情報学環に出向し、セキュリティ人 材育成や研究に従事 • 対外活動・執筆物など – ISOG-J 脆弱性診断士(Web アプリケーション) – 講演や脆弱性情報の発信 Apache Commons Collectionsの脆弱性解説(CodeZine) https://codezine.jp/article/detail/9150 3
  4. 4. 東京大学 情報学環 Struts 2(S2-045/046)の脆弱性について 4
  5. 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
  6. 6. 東京大学 情報学環 S2-045の脆弱性を悪用する攻撃のデモ 6
  7. 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
  8. 8. 東京大学 情報学環 Struts 2について • MVC (Model/View/Controller) モデルにもとづくオープ ンソースのJavaの Web アプリケーションフレームワーク • Struts 2に脆弱性が見つかると、それを利用しているソフ トウエアやWebアプリが影響を受ける サーバ リクエストとActionの 関連付け Struts 2 Action1ActionMapper JSP1 ViewController Model JSP2 /action1.action /action2.action Action2 APサーバ 8
  9. 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コード が評価され、任意のコード が実行される
  10. 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プロパティにアクセス
  11. 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コードが評価され、 任意のコードが実行される
  12. 12. 東京大学 情報学環 S2-045,46に対する回避策 • 不審なリクエストの遮断(WAF/サーブレットフィルタ) • WAF(Web Application Firewall) – Webアプリケーションに特化したファイアウォール – 通信の中身(ペイロード)をチェックすることが可能 • 不正なリクエストかどうかの判断例 – Content-TypeやリクエストボディにOGNL表現 (OgnlContext,OgnlUtil,#context など)が含まれないか • OGNLに起因するその他の脆弱性を狙う攻撃にも有効 だが、正規のリクエストを遮断しないように注意 12
  13. 13. 東京大学 情報学環 サーブレットフィルタ • サーブレットを実行する前の処理を行うJavaプログラム – 処理の振り分け、リクエストのフィルタリング、共通の 処理など • サーブレットとは – Javaで実装されたサーバサイドプログラムのこと • 追加の製品導入が不要な反面、組み込みが難しい局面もある サーバ Struts 2 Action1 Servlet Filter1 JSP1 ViewController Model JSP2 /xx.action (正規のリクエスト) Action2 Servlet Filter2 不正なリクエストの フィルタリング 細工した リクエスト
  14. 14. 東京大学 情報学環 Webアプリケーションに対する 最近の攻撃動向 14
  15. 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アプリの開発を支援するソフトウ エアの脆弱性が多い • 「オブジェクトインジェクション」に起因する脆弱性が増え てきている
  16. 16. 東京大学 情報学環 問題その① • Webアプリの開発を支援するためのソフトウエアの場合 – プログラムと密接に関係する – 様々なソフトやアプリで使われており、影響範囲が広い • アップデートが提供されても、速やかな適用が難しい場合も – 影響範囲の調査が大変 – 修正が微小でもテストが大変 16 ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・・・・・ 調査とテスト工数が かさむ 修正箇所は 少ない場合でも・・ 影響範囲が広い
  17. 17. 東京大学 情報学環 オブジェクトインジェクションとは • 意図しないオブジェクトが生成されること – オブジェクト:プログラミング言語で、ある機能に関連するプロパ ティと処理をまとめたもの • アンシリアライズ処理の検証不備が契機になることが多い – シリアライズ:オブジェクトの状態を保持したまま送受信したり、 ファイルへ読み書きを行うために特定のデータ形式に変換すること – アンシリアライズ:変換されたデータをプログラムで扱えるオブ ジェクトの形式に復元すること 17Webアプリケーション ①不正なオブジェクトを シリアライズして送信 細工した リクエスト ②受信したデータを アンシリアライズ 意図しない オブジェクト ③意図しないオブジェ クトが生成される
  18. 18. 東京大学 情報学環 問題その② • ライブラリやフレームワークの脆弱性を悪用する攻撃が成 立するのは、利用側(アプリ)の実装にも問題があるケースが 多い →単にパッチを適用するだけでは、根本的対処とならない 18 脆弱性 ライブラリの問題 利用する側の問題 PHP/Joomla! の脆弱性 PHPの問題: 文字列のアンシリアライズが 正しく行われず、オブジェク トを復元してしまう Joomla!の問題: アンシリアライズ処理の延長 でリスクがある処理を行って いる Apache Commons Collectionsの脆弱性 アンシリアライズ時に動的に コードを実行できるクラスが 存在する APサーバなどの問題: アンシリアライズ対象オブ ジェクトに対する検証不備 Magento 2の脆弱性 アンシリアライズ処理の延長 でリスクがある処理を行って いる ― node-serialize の脆弱性 関数(処理)を含めたシリアラ イズが可能 信頼できないデータをアンシ リアライズしている
  19. 19. 東京大学 情報学環 問題その② • PHP/Joomla!の脆弱性例 – PHP:セッションをデコードするライブラリに脆弱が存在(CVE- 2015-6835) – Joomla!:上記ライブラリを利用するCMS(CVE-2015-8562) 19 Webサーバ ①細工したリクエスト Joomla!User-Agent PHP ②リクエストに含まれる値を シリアライズして保存 Serialized UA 不正なオブ ジェクト ④アンシリアライズ時に自動 的に実行される処理によって 任意のコードが実行される User- Agent 細工したリクエストの例: 脆弱な ライブ ラリ ③アンシリアライズすると、 意図しないオブジェクトが 生成される
  20. 20. 東京大学 情報学環 Webアプリケーションの脆弱性を 悪用する攻撃から守るためには • Webアプリで使用するソフトウエアのアップデート • ライブラリの利用側の処理の見直し – 入力チェック ※入力チェックは様々な脆弱性への対策として有効 • アンシリアライズ時、対象が意図したクラス(データ型)で あるかをチェック • アンシリアライズしたオブジェクトの状態をチェック – アンシリアライズ時の処理に注意 • 自動的に実行される関数(Magic Method)に注意 20
  21. 21. 東京大学 情報学環 注意すべきAPIの例 21 クラス名 メソッド名 説明 Serializableを実 装するクラス readObject ※ 本メソッドをオーバライドしている場 合、当該クラスのデシリアライズ時に 実行される Serializableを実 装するクラス readResolve ※ 本メソッドをオーバライドしている場 合、当該クラスのreadObject() の実行 後に呼び出され、デシリアライズする オブジェクトを置換できる Externalizableを 実装するクラス readExternal ※ 本メソッドをオーバライドしている場 合、当該クラスのデシリアライズ時に 実行される Javaのアンシリアライズに関連するAPIの例 ※アンシリアライズ時に自動的に実行される関数
  22. 22. 東京大学 情報学環 注意すべきAPIの例 22 クラス名 関数名 説明 ― unserialize 保存用の文字列形式をオブジェクトに アンシリアライズする シリアライズ 対象のクラス __destruct()※ オブジェクトが破棄される際の処理を 定義する特殊関数であり、アンシリア ライズ時に実行される シリアライズ対 象のクラス __wakeup()※ アンシリアライズ時に自動的に実行さ れる シリアライズ対 象のクラス __toString() print(),echo()などを使用し、オブジェ クトの内容を表示した際に実行される。 PHPのアンシリアライズに関連するAPIの例 ※アンシリアライズ時に自動的に実行される関数
  23. 23. 東京大学 情報学環 Webアプリケーションの脆弱性を 悪用する攻撃から守るためには • 速やかな修正が難しい場合の運用的回避策 – WAFの導入 – 適切なアクセス制御の実施 • 信頼できない接続元の制限 • 認証の設定 – Webアプリが可能な動作を制限 • Webアプリの実行ユーザ権限 • プログラム実行環境のセキュリティ機能(Security Managerなど) • 攻撃を検知するための対策 – ログの設定と保存 • S2-045を検知するためにはContent-Typeの記録が必要 23
  24. 24. 東京大学 情報学環 まとめ • リモートから任意のコード実行が可能となる脆弱性は脅 威度が高い • フレームワークやCMSは便利な反面、脆弱性が見つかっ た場合の調査が難しく、また影響範囲が広いというデメ リットもある • ライブラリやフレームワークのアップデートとあわせて、 利用側の実装を今一度見直すことが大切 • 速やかな修正が難しい場合の運用的回避策、攻撃を検 知・調査するためのログ取得も必要 24
  25. 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 が実行される
  26. 26. 東京大学 情報学環 (参考) S2-046の脆弱性(CVE-2017-5638) • multipart リクエストを処理するStruts 2組み込みのパーサ (JakartaStreamMultiPartRequest)のエラー処理に同様の脆弱性 – 使用するパーサをjakarta-streamに設定している場合に影響を受ける – 標準のパーサ(JakartaMultiPartRequest)使用時の影響は明記されていない – Content-lengthが上限を超過している場合、エラーが発生し、脆弱性があ る処理が実行される 26 APサーバ Struts アプリケーション 細工した リクエスト サーバ Struts 2 エラー処理に脆弱性があり、 OGNLコードが実行される StrutsPrepareFilter JakartaStreamMultiPartRequestcontent_typeに“multipart/form-data”があ ると、設定に応じたパーサを実行 jakarta-streamの場合は JakartaStreamMultiPartRequestを実行
  27. 27. 東京大学 情報学環 (参考) S2-045,46に対する回避策 • 不審なリクエストの遮断(WAF/サーブレットフィ ルタ) • 不正なリクエストかどうかの判断例 – Content-Type • multipart/form-dataが含まれるが、該当文字列で始まっていな い • OGNL表現 (OgnlContext,OgnlUtil,#context など)が含まれる – リクエストボディ(Content-Dispostion) • OGNL表現 (OgnlContext,OgnlUtil,#context など)が含まれる – Content-Length • 想定以上の値が指定されている 27
  28. 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

×