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

More Related Content

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

XSSの評価基準とRIPSプラグイン的なものを作った
XSSの評価基準とRIPSプラグイン的なものを作ったXSSの評価基準とRIPSプラグイン的なものを作った
XSSの評価基準とRIPSプラグイン的なものを作ったyamaguchi_2048
 
河野ゼミガイダンス資料2016
河野ゼミガイダンス資料2016河野ゼミガイダンス資料2016
河野ゼミガイダンス資料2016義広 河野
 
20160208 power cms_cloud_public
20160208 power cms_cloud_public20160208 power cms_cloud_public
20160208 power cms_cloud_publicSix Apart
 
20160125 power cms_cloud_public
20160125 power cms_cloud_public20160125 power cms_cloud_public
20160125 power cms_cloud_publicSix Apart
 
第34回サイバーワールド研究会20161216
第34回サイバーワールド研究会20161216第34回サイバーワールド研究会20161216
第34回サイバーワールド研究会20161216義広 河野
 
Webシステムプログラミング概要20150630
Webシステムプログラミング概要20150630Webシステムプログラミング概要20150630
Webシステムプログラミング概要20150630義広 河野
 
20161102 cms security
20161102 cms  security20161102 cms  security
20161102 cms securitySix Apart
 
20160209 power cms_cloud_public
20160209 power cms_cloud_public20160209 power cms_cloud_public
20160209 power cms_cloud_publicSix Apart
 
デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)
デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)
デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)Developers Summit
 
2017年度 河野ゼミ スタートアップ資料
2017年度 河野ゼミ スタートアップ資料2017年度 河野ゼミ スタートアップ資料
2017年度 河野ゼミ スタートアップ資料義広 河野
 
ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎Takahisa Kishiya
 
Webシステムプログラミング20150413
Webシステムプログラミング20150413Webシステムプログラミング20150413
Webシステムプログラミング20150413義広 河野
 
脆弱性スキャナVuls(入門編)
脆弱性スキャナVuls(入門編)脆弱性スキャナVuls(入門編)
脆弱性スキャナVuls(入門編)Takayuki Ushida
 
2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットと SNS上での構築とその課題
2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットとSNS上での構築とその課題2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットとSNS上での構築とその課題
2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットと SNS上での構築とその課題Ruo Ando
 
Webシステムのためのエンドユーザ向け公開鍵認証機能の開発
Webシステムのためのエンドユーザ向け公開鍵認証機能の開発Webシステムのためのエンドユーザ向け公開鍵認証機能の開発
Webシステムのためのエンドユーザ向け公開鍵認証機能の開発Tetsuo Sakaguchi
 
セキュア開発の&lt;s>3つの&lt;/s>敵
セキュア開発の&lt;s>3つの&lt;/s>敵セキュア開発の&lt;s>3つの&lt;/s>敵
セキュア開発の&lt;s>3つの&lt;/s>敵Riotaro OKADA
 
~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由
~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由
~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由グローバルセキュリティエキスパート株式会社(GSX)
 
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデルシスコシステムズ合同会社
 
Monacaエンタープライズのご紹介
Monacaエンタープライズのご紹介Monacaエンタープライズのご紹介
Monacaエンタープライズのご紹介アシアル株式会社
 

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

XSSの評価基準とRIPSプラグイン的なものを作った
XSSの評価基準とRIPSプラグイン的なものを作ったXSSの評価基準とRIPSプラグイン的なものを作った
XSSの評価基準とRIPSプラグイン的なものを作った
 
河野ゼミガイダンス資料2016
河野ゼミガイダンス資料2016河野ゼミガイダンス資料2016
河野ゼミガイダンス資料2016
 
20160208 power cms_cloud_public
20160208 power cms_cloud_public20160208 power cms_cloud_public
20160208 power cms_cloud_public
 
20160125 power cms_cloud_public
20160125 power cms_cloud_public20160125 power cms_cloud_public
20160125 power cms_cloud_public
 
第34回サイバーワールド研究会20161216
第34回サイバーワールド研究会20161216第34回サイバーワールド研究会20161216
第34回サイバーワールド研究会20161216
 
Webシステムプログラミング概要20150630
Webシステムプログラミング概要20150630Webシステムプログラミング概要20150630
Webシステムプログラミング概要20150630
 
20161102 cms security
20161102 cms  security20161102 cms  security
20161102 cms security
 
20160209 power cms_cloud_public
20160209 power cms_cloud_public20160209 power cms_cloud_public
20160209 power cms_cloud_public
 
デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)
デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)
デブサミ2013【15-C-8】セキュリティ要求仕様モデルプランで日本は変わるか?(百瀬昌幸氏)
 
2017年度 河野ゼミ スタートアップ資料
2017年度 河野ゼミ スタートアップ資料2017年度 河野ゼミ スタートアップ資料
2017年度 河野ゼミ スタートアップ資料
 
ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎
 
Webシステムプログラミング20150413
Webシステムプログラミング20150413Webシステムプログラミング20150413
Webシステムプログラミング20150413
 
脆弱性スキャナVuls(入門編)
脆弱性スキャナVuls(入門編)脆弱性スキャナVuls(入門編)
脆弱性スキャナVuls(入門編)
 
2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットと SNS上での構築とその課題
2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットとSNS上での構築とその課題2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットとSNS上での構築とその課題
2013年度enPiT特設講義-iisec-2013-11-09-セキュアシステムのインターネットと SNS上での構築とその課題
 
Webシステムのためのエンドユーザ向け公開鍵認証機能の開発
Webシステムのためのエンドユーザ向け公開鍵認証機能の開発Webシステムのためのエンドユーザ向け公開鍵認証機能の開発
Webシステムのためのエンドユーザ向け公開鍵認証機能の開発
 
セキュア開発の&lt;s>3つの&lt;/s>敵
セキュア開発の&lt;s>3つの&lt;/s>敵セキュア開発の&lt;s>3つの&lt;/s>敵
セキュア開発の&lt;s>3つの&lt;/s>敵
 
~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由
~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由
~2018年Webセキュリティ最前線セミナー~ 今や従来通りの対策ではWebセキュリティが万全ではないこれだけの理由
 
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
 
PBL as a Service
PBL as a ServicePBL as a Service
PBL as a Service
 
Monacaエンタープライズのご紹介
Monacaエンタープライズのご紹介Monacaエンタープライズのご紹介
Monacaエンタープライズのご紹介
 

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

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