Japan Computer Emergency Response TeamCoordination 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
日付 : 2014.04.10 13:42:33 +09'00'

KOF2013 version～ヒトの振り見て我が振り直せ～
脆弱性事例に学ぶJavaセキュアコーディング

JPCERT/CC 情報流通対策グループ
戸田 洋三 (yozo.toda@jpcert.or.jp)1

6/27に公開しました!

2

Copyright©2013 JPCERT/CC All rights reserved.

9/30に5件追加しました!

3

Copyright©2013 JPCERT/CC All rights reserved.

自己紹介

JPCERT/CC
情報流通対策グループ 解析チーム
リードアナリスト 戸田 洋三

http://www.tomo.gr.jp/root/e9706.html

4

Copyright©2013 JPCERT/CC All rights reserved.

脆弱性情報分析, セキュアコー
ディング普及啓発活動…… に努めてますJPCERT/CCとは

JPCERT Coordination Center
日本における情報セキュリ
ティ対策活動の向上に取り組んでいる組織5

Copyright©2013 JPCERT/CC All rights reserved.

JPCERT/CCの主な活動

6

Copyright©2013 JPCERT/CC All rights reserved.

本日の話題なぜこのような資料を作ったのか
どんな資料があるの?
どんなふうに使えるの?

7

Copyright©2013 JPCERT/CC All rights reserved.

なぜこのような資料をつくったのか8

Copyright©2013 JPCERT/CC All rights reserved.

いまどきの脆弱性
cve.mitre.org でキーワード検索してみました(total CVEs: 56609)—arbitrary code: 12525—denial of service: 11741—XSS: 7552
—buffer overflow: 6705
—SQL injection: 5943
—directory traversal: 2537

9

Copyright©2013 JPCERT/CC All rights reserved.

セキュアコーディングプロジェクトについて
セキュアなソフトウェア開発のための手法等の普及啓発— その結果として脆弱性の低減

Web やセミナーを通じた技術情報提供

10

2006

書籍『C/C++セキュアコーディング』出版

2007

国内メーカー向けセキュアコーディングセミナー事業開始

2008

CERT C セキュアコーディングスタンダードWeb公開、無償セミナー等年間32回開催

2009

書籍『CERT Cセキュアコーディングスタンダード』出版、タイ、インドネシア、べト
ナムにてセミナー

2010

地方セミナー、「OpenSAMM」翻訳、コードジン連載、静的解析ツール(rosechecker開発)、インド、べトナム、フィリピン

2011

書籍『Javaセキュアコーディングスタンダード』出版・Web公開、Java/Androidのセキュアコーディングセミナー開始

2012

タイ、インドネシアでJava/Androidセキュアコーディングセミナー

Copyright©2013 JPCERT/CC All rights reserved.

セキュアコーディングの普及啓発には…

具体的な事例紹介が有効—コーディングルールの根拠—被害につながることを実感—攻撃者の視点に興味を持つより多くのJavaアプリの脆弱性事例と、そこから得られる教訓を紹介する
11

Copyright©2013 JPCERT/CC All rights reserved.

配慮すべき(と考えた)ポイント
対象読者: セキュリティ方面に詳しくないJavaプログラマ— 興味をもって読めないネタ、理解できない技術解説はダメ— 専門家にしか受けないような内容ではダメ

事例解説の理解し易さ、説得力— セキュリティ屋の言葉は使わない
NG：「任意のコードが実行される可能性があります」— 実際の被害が分かり易く、プログラマの心を動かせること現場でいかにもやってしまいそうな脆弱性は優先度高— 図・グラフ・表などビジュアル表現を活用する「読んで分かる」ではなく「見て分かる」ことが重要— 事例が偏らないようにサーバ系、webアプリ系、デスクトップ系それぞれから取り上げたい12

Copyright©2013 JPCERT/CC All rights reserved.

どんな資料があるの?

13

Copyright©2013 JPCERT/CC All rights reserved.

Apache Sling におけるサービス運用妨害(無限ループ) の脆弱性

Apache Struts 2 における任意の Java メ
ソッド実行の脆弱性
Blojsom におけるクロスサイトスクリプ
ティングの脆弱性

MySQL Connector/J における SQL イン
ジェクションの脆弱性
JBoss Application Server におけるディレク
トリトラバーサルの脆弱性
14

Copyright©2013 JPCERT/CC All rights reserved.

Apache ActiveMQ における認証不備の脆弱性(AMQ-1272)

Apache Commons の HttpClient におけるSSLサーバ証明書検証不備(CVE-2012-5783)
Spacewalk におけるCSRFの脆弱性(CVE2009-4139)

Apache Tomcat におけるCSRF保護メカニ
ズム回避の脆弱性(CVE-2012-4431)
Apache Axis2 におけるXML署名検証不備(CVE-2012-4418)
15

Copyright©2013 JPCERT/CC All rights reserved.

Apache Sling におけるサービス運用妨害(無限ループ) の脆弱性
•Webサイトのコンテンツ管理を目的としたオープ
ンソースのWebフレームワーク•コンテンツのコピー機能にサービス運用妨害(DoS)攻撃を受ける脆弱性•コピー元とコピー先に同一のファイルパスを指定すると、無限ループが発生する•再帰的な処理であるコピー機能の実行前に, コ
ピー対象が無限ループを起こさないことを確認する必要があった

16

Copyright©2013 JPCERT/CC All rights reserved.

Apache Struts 2 における任意の Java メ
ソッド実行の脆弱性•Java のWebアプリケーションを開発するためのオープンソースのフレームワーク•数値型の変数に対して文字列が送信されてきた際に発生する変換エラー処理に不備•送信する文字列を細工することで、任意のJavaメソッドが実行可能となる•エラー処理で扱うデータを, OGNL式と解釈されないよう無害化する必要があった

17

Copyright©2013 JPCERT/CC All rights reserved.

Blojsom におけるクロスサイトスクリプ
ティングの脆弱性•Java で書かれたブログシステム•入力文字列の処理に不備があり、クロスサイトスクリプティング攻撃が可能•処理結果(HTML形式)の出力時にHTMLエンコーディングを施すべきだった

18

Copyright©2013 JPCERT/CC All rights reserved.

MySQL Connector/J における SQL イン
ジェクションの脆弱性•MySQLデータベースにアクセスするためのドライバソフトウェア•SQLクエリ文字列の処理に不備があり、SQLインジェクションが可能•SQLのメタ文字に対するエスケープ処理を行った後で文字エンコーディングの変換を行っていた•最初に文字エンコーディングの変換を行うべき

19

Copyright©2013 JPCERT/CC All rights reserved.

JBoss Application Server におけるディレク
トリトラバーサルの脆弱性•Java で書かれた web アプリを動作させるためのアプリケーションサーバ
•JMXコンソール経由のファイル操作処理にディレクトリトラバーサルの脆弱性•引数として受け取ったパスを正規化すること, および, 適切な場所を指すパスであることを検証すべきだった

20

Copyright©2013 JPCERT/CC All rights reserved.

Apache ActiveMQ における認証不備の脆弱性(AMQ-1272)•サーバへの処理要求を非同期処理するためのミドルウェア•ID/パスワードによる認証処理が正しく行われていなかったため, 誰でもログインできる状態になってしまっていた•認証失敗時の処理が欠如•機能/動作テストの重要性

21

Copyright©2013 JPCERT/CC All rights reserved.

Apache Commons の HttpClient におけるSSLサーバ証明書検証不備(CVE-2012-5783)•http 通信機能に関する各種Javaコンポーネントのライブラリ•https通信の際、サーバ証明書の検証が行われていなかった•機能/動作テストの重要性

22Copyright©2013 JPCERT/CC All rights reserved.

Spacewalk におけるCSRFの脆弱性(CVE2009-4139)•Linux システム管理のための web ベースのツール•クロスサイトリクエストフォージェリ(CSRF)対策の欠如•CSRF対策としてセッショントークンを使ったリクエストの正当性確認

23

Copyright©2013 JPCERT/CC All rights reserved.

Apache Tomcat におけるCSRF保護メカニズ
ム回避の脆弱性(CVE-2012-4431)•Java サーブレットや JSP のためのアプリケーションサーバ
•セッショントークンの確認処理に欠陥•ユーザ認証の仕組みとの組み合わせ方を考慮してコーディングすべきだった

24

Copyright©2013 JPCERT/CC All rights reserved.

Apache Axis2 におけるXML署名検証不備(CVE-2012-4418)•メッセージ交換プロトコルSOAPを実装したwebアプリケーションフレームワーク•XML署名検証処理に欠陥•署名検証処理とメッセージ処理が独立に行われていたことが問題•メッセージ処理に応じて署名検証処理の内容を強化

25

Copyright©2013 JPCERT/CC All rights reserved.

Apache Sling におけるサービス運用妨害(無限ループ) の脆弱性

Apache Struts 2 における任意の Java メ
ソッド実行の脆弱性

中身をBlojsom におけるクロスサイトスクリプ
見てみよう!!
ティングの脆弱性

MySQL Connector/J における SQL イン
ジェクションの脆弱性
JBoss Application Server におけるディレク
トリトラバーサルの脆弱性
26

Copyright©2013 JPCERT/CC All rights reserved.

どんなふうに使えるの?

27

Copyright©2013 JPCERT/CC All rights reserved.

自習用教材•Java アプリを作れるようになったら次のステップとして•Javaセミナ資料も公開してるのでこちらもぜひ

https://www.jpcert.or.jp/securecoding/materials-java.html

28

Copyright©2013 JPCERT/CC All rights reserved.

仲間内の勉強会資料•教材のひとつとしてどうぞ•Javaセミナ資料も活用してね•講師役がいちばん勉強になります29

Copyright©2013 JPCERT/CC All rights reserved.

セミナの参考資料に•ご活用ください•引用や二次利用に関するお願いも確認してね30

Copyright©2013 JPCERT/CC All rights reserved.

セミナの参考資料に: 引用や二次利用について各資料の最後のページに入れてあるよ.

31

Copyright©2013 JPCERT/CC All rights reserved.

最後に…

ご意見ちょうだい—内容についてコメント—どのような資料があるとうれしいですか?
How
about …

32

Copyright©2013 JPCERT/CC All rights reserved.

付録
セキュアコーディングスタンダード

33

Copyright©2013 JPCERT/CC All rights reserved.

セキュアコーディングスタンダード
米国 CMU/SEI の the CERT Secure Coding Initiativeによるコーディングスタンダードシリーズ
https://www.securecoding.cert.org/

いまのところ,4種類公開されています.

34

Copyright©2013 JPCERT/CC All rights reserved.

C セキュアコーディングスタンダード

JPCERT/CC で日本語公開中!!
https://www.jpcert.or.jp/sc-rules/

CERT C セキュアコーディングスタンダード紹介
https://www.jpcert.or.jp/research/materials.html#secure

35

Copyright©2013 JPCERT/CC All rights reserved.

Java セキュアコーディングスタンダード

JPCERT/CC で日本語公開中!!
https://www.jpcert.or.jp/java-rules/

OSC2011@Nagoya でも紹介してます
http://www.ospn.jp/osc2011-nagoya/pdf/
osc2011nagoya-JPCERT_CC.pdf

36

Copyright©2013 JPCERT/CC All rights reserved.

セキュアコーディングスタンダード(C++, Perl)“under development”
(開発中)
37

Copyright©2013 JPCERT/CC All rights reserved.

一般社団法人JPCERTコーディネーションセンター(https://www.jpcert.or.jp/)
セキュアコーディング(https://www.jpcert.or.jp/securecoding/)
お問い合わせはこちらにどうぞ…
(secure-coding@jpcert.or.jp)

38

Copyright©2013 JPCERT/CC All rights reserved.