SlideShare a Scribd company logo
1 of 54
Download to read offline
~誰かの失敗を他山の石に~
脆弱性事例に学ぶセキュアコーディング
「SSL/TLS証明書検証」編
JPCERT/CC 情報流通対策グループ
戸田 洋三 (yozo.toda@jpcert.or.jp)
1
JavaDayTokyo2015 version
Copyright©2015 JPCERT/CC All rights reserved.
自己紹介
http://www.tomo.gr.jp/root/e9706.html
JPCERT/CC
情報流通対策グループ 解析チーム
リードアナリスト 戸田 洋三
脆弱性情報分析, セキュアコー
ディング普及啓発活動……
に努めてます
2
Copyright©2015 JPCERT/CC All rights reserved.
JPCERT/CCとは
JPCERT Coordination Center
日本における情報セキュリ
ティ対策活動の向上に取り組
んでいる組織
3
Copyright©2015 JPCERT/CC All rights reserved.
JPCERT/CCの主な活動
4
Copyright©2015 JPCERT/CC All rights reserved.
JPCERT/CC セキュアコーディングのコンテンツ
5
www.jpcert.or.jp/securecoding/
Copyright©2015 JPCERT/CC All rights reserved.
slideshare にも講演資料やセミナコンテンツ置いてます
6
www.slideshare.net/jpcert_securecoding/presentations
Copyright©2015 JPCERT/CC All rights reserved.
セキュアコーディングスタンダード
7
米国 CMU/SEI の the CERT Secure Coding Initiative
によるコーディングスタンダードシリーズ
https://www.securecoding.cert.org/
現状, 4種類公開さ
れています.
Copyright©2015 JPCERT/CC All rights reserved.8
CERT C コーディングスタンダード
CERT C セキュアコーディングスタンダード紹介
https://www.jpcert.or.jp/research/materials.html#secure
JPCERT/CC で日本語公開中!!
https://www.jpcert.or.jp/sc-rules/
Copyright©2015 JPCERT/CC All rights reserved.9
CERT Oracle Java コーディングスタンダード
OSC2011@Nagoya でも紹介してます
http://www.ospn.jp/osc2011-nagoya/pdf/
osc2011nagoya-JPCERT_CC.pdf
JPCERT/CC で日本語公開中!!
https://www.jpcert.or.jp/java-rules/
Copyright©2015 JPCERT/CC All rights reserved.10
セキュアコーディングスタンダード(C++, Perl)
“under development” (開発中)
Copyright©2015 JPCERT/CC All rights reserved.
コーディングスタンダードの協力者募集中!
セキュアコーディングスタンダード日本
語版の整備に協力してくれる方を求めて
います。
—Java, Android, C, C++, ……
—既存の日本語へのコメント、改善案
—英語原文へのコメント、改善案
—さらに編集も…
11
興味のある方、ご連絡ください!
Copyright©2015 JPCERT/CC All rights reserved.
本日の話題
 SSL/TLS証明書検証って?
 証明書検証に関連する脆弱性事例紹介
 脆弱性事例のポイントおさらい
 参考情報など
12
Copyright©2015 JPCERT/CC All rights reserved.13
脆弱性事例ポイントおさらい
脆弱性事例
SSL/TLS証明書検証って?
参考情報など
Copyright©2015 JPCERT/CC All rights reserved.
SSL/TLS通信手順
14
参考: http://ja.wikipedia.org/wiki/Transport_Layer_Security
SSL/TLS
Transport層の上で暗号化通信路を実現する仕組み
SSL 3.0 - RFC6101
TLS 1.0 - RFC2246
TLS 1.1 - RFC4346
TLS 1.2 - RFC5246
……….
攻撃手法への対策や
新たな暗号化スイー
ト追加など, 現在も進
化中…
Copyright©2015 JPCERT/CC All rights reserved.
SSL/TLS通信手順
15
参考: http://ja.wikipedia.org/wiki/Transport_Layer_Security
SSL/TLS
Transport層の上で暗号化通信路を実現する仕組み
SSL 3.0 - RFC6101
TLS 1.0 - RFC2246
TLS 1.1 - RFC4346
TLS 1.2 - RFC5246
……….
攻撃手法への対策や
新たな暗号化スイー
ト追加など, 現在も進
化中…
今日はここだけに
注目します.
Copyright©2015 JPCERT/CC All rights reserved.
サーバ証明書って?
16
•サーバの公開鍵とサーバのドメイン名がはいっ
ている (https で使う場合)
•とある CA (認証局)が, ドメイン名と公開鍵の関
係を確認してくれたもの
•ITU-T規格 X.509 で決められているものを流用
•RFC5280, RFC6818
•Web ブラウザなどでは, 信頼する CA のオレオレ証明書
をあらかじめ持っておく
Copyright©2015 JPCERT/CC All rights reserved.
証明書の検証には2つの処理が含まれている
17
•受け取ったサーバ証明書が, 信頼する CA を起点として
正しく作られたものであることを確認する
•⇒証明書検証 (証明書および証明書チェーンの検証)
•信頼できるサーバ証明書が持っているサーバ名
がアクセスしようとしているサーバ名と一致する
ことを確認する
•⇒ホスト名検証
Copyright©2015 JPCERT/CC All rights reserved.
X.509 v3 証明書の構造
18
https://www.ipa.go.jp/security/pki/033.html
Copyright©2015 JPCERT/CC All rights reserved.
X.509 v3 証明書の構造
19
https://www.ipa.go.jp/security/pki/033.html
この証明書をつくった CA
の情報
Copyright©2015 JPCERT/CC All rights reserved.
X.509 v3 証明書の構造
20
https://www.ipa.go.jp/security/pki/033.html
サーバのドメイン名が収められてい
る場所
(拡張フィールドのsubjectAltNameと
必須フィールドのsubject)
Copyright©2015 JPCERT/CC All rights reserved.
サーバ証明書の例: www.jpcert.or.jp.
21
• Issuer:
•C=US
•O=Symantec Corporation
•OU=Symantec Trust Network
•CN=Symantec Class 3 EV SSL CA - G3
•Subject:
•serialNumber=0100-05-006504
•C=JP
•postalCode=101-0054
•ST=Tokyo
•L=Chiyoda-ku
•streetAddress=“Hirose Bldg. 11F, 3-17 Kanda-nishikicho”
•O=“Japan Computer Emergency Response Team Coordination Center”
•OU=“System Administration Group”
•CN=www.jpcert.or.jp
• X509v3 extensions:
•X509v3 Subject Alternative Name:
•DNS:www.jpcert.or.jp
•X509v3 Basic Constraints:
•CA:FALSE
主要な項目を抜き出したもの
Copyright©2015 JPCERT/CC All rights reserved.
サーバ証明書の例: www.google.com.
22
• Issuer:
•C=US
•O=Google Inc
•CN=Google Internet Authority G2
•Subject:
•C=US
•ST=California
•L=Mountain View
•O=Google Inc
•CN=google.com
• X509v3 extensions:
•X509v3 Subject Alternative Name:
•DNS:google.com
•DNS:*.2mdn.net
•DNS:*.android.com
•DNS:*.appengine.google.com
•…….. (省略) ……..
•X509v3 Basic Constraints:
•CA:FALSE
主要な項目を抜き出したもの
Copyright©2015 JPCERT/CC All rights reserved.
X.509 証明書検証
23
Certification path validation algorithm
http://en.wikipedia.org/wiki/Certification_path_validation_algorithm
証明書自体が持っている情報は信頼できるか?
ASN.1 データ構造として正しく読めるか?
CAによる署名は正しくなされているか?
有効期限は切れていないか?
失効されていないか?
証明書チェーンをたどって信頼している(CAの)
証明書に辿りつけるか?
RFC5280: Internet X.509 Public Key Infrastructure Certificate and
Certificate Revocation List (CRL) Profile
6. Certification Path Validation
http://tools.ietf.org/html/rfc5280#section-6
Copyright©2015 JPCERT/CC All rights reserved.
証明書チェーンの検証処理
24
https://security.stackexchange.com/questions/56389/ssl-certificate-
framework-101-how-does-the-browser-actually-verify-the-validity
Copyright©2015 JPCERT/CC All rights reserved.
ホスト名検証
25
アクセスしようとしているサーバ名(ドメイン名)とサー
バ証明書に示されているサーバ名が一致するか?
サーバ証明書に subjectAltName が含まれている場合はそ
れを使うこと
一致するかどうかの検証アルゴリズムは証明書検証で使
うアルゴリズムと同じ
RFC2818: HTTP Over TLS
3.1. Server Identity
http://tools.ietf.org/html/rfc2818#section-3.1
RFC5280: Internet X.509 Public Key Infrastructure Certificate and
Certificate Revocation List (CRL) Profile
7. Processing Rules for Internationalized Names
http://tools.ietf.org/html/rfc5280#section-7
Copyright©2015 JPCERT/CC All rights reserved.26
脆弱性事例ポイントおさらい
脆弱性事例
SSL/TLS証明書検証って?
参考情報など
Copyright©2015 JPCERT/CC All rights reserved.
脆弱性事例: パターン1
27
なにも検証していない
Copyright©2015 JPCERT/CC All rights reserved.
証明書の検証不備
28
jvn.jp の掲載事例で「証明書の検証不備」を拾い出して
みると… (2013年以降)
JVN#27388160: Android 版 「スマ保」における SSL/TLS サーバ証明書の検証不備の脆弱性
JVN#48270605: Yahoo!ボックス(Android版) における SSL サーバ証明書の検証不備の脆弱性
JVN#04560253: Android 版アプリ「ゆこゆこ」における SSL サーバ証明書の検証不備の脆弱性
JVN#17637243: Android 版アプリ Kindle における SSL サーバ証明書の検証不備の脆弱性
JVN#27702217: Android 版 Ameba における SSL サーバ証明書の検証不備の脆弱性
JVN#72950786: Android 版 Outlook.com における SSL サーバ証明書の検証不備の脆弱性
JVN#10603428: Android 版アプリ「JR東日本アプリ」における SSL サーバ証明書の検証不備の脆弱性
JVN#16263849: Android 版アプリ「出前館」における SSL サーバ証明書の検証不備の脆弱性
JVN#48810179: Android 版アプリ「デニーズ」における SSL サーバ証明書の検証不備の脆弱性
JVN#97810280: KDrive個人版 PCクライアントソフトにおける SSL サーバ証明書の検証不備の脆弱性
JVN#75084836: Android 版 Yahoo!ショッピングにおける SSL サーバ証明書の検証不備の脆弱性
JVN#68156832: ヤフオク! における SSL サーバ証明書の検証不備の脆弱性
JVN#39218538: Android 版 ピザハット公式アプリ 宅配ピザのPizzaHut における SSL サーバ証明書の検証不備の脆弱性
JVN#85812843: FileMaker Pro における SSL サーバ証明書の検証不備の脆弱性
JVNVU#389795: Windows Phone 7 に SSL サーバ証明書の検証不備の脆弱性
JVN#39707339: Opera における SSL サーバ証明書の検証不備の脆弱性
JVN#82029095: spモードメールアプリにおける SSL サーバ証明書の検証不備の脆弱性
Android アプリでよく報告されてます.
(もちろん他の実行環境の例もあり)
参考
SSL/TLS ではなく IPsec での例もあり: CVE-2013-1028
Apple OS X v10.8.5 and Security Update 2013-004
Copyright©2015 JPCERT/CC All rights reserved.
脆弱性の原因
29
public static HttpClient getNewHttpClient() {
DefaultHttpClient v6;
try {
KeyStore v5 = KeyStore.getInstance(KeyStore.getDefaultType());
v5.load(null, null);
MySSLSocketFactory mySSLScoket = new MySSLSocketFactory(v5);
if(ApplicationDefineRelease.sAllowAllSSL) {
((SSLSocketFactory)mySSLScoket).setHostnameVerifier
(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
}
BasicHttpParams v2 = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(((HttpParams)v2), 30000);
...
}
catch(Exception v1) {
v6 = new DefaultHttpClient();
}
return ((HttpClient)v6);
}
Copyright©2015 JPCERT/CC All rights reserved.
脆弱性の原因
30
public static HttpClient getNewHttpClient() {
DefaultHttpClient v6;
try {
KeyStore v5 = KeyStore.getInstance(KeyStore.getDefaultType());
v5.load(null, null);
MySSLSocketFactory mySSLScoket = new MySSLSocketFactory(v5);
if(ApplicationDefineRelease.sAllowAllSSL) {
((SSLSocketFactory)mySSLScoket).setHostnameVerifier
(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
}
BasicHttpParams v2 = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(((HttpParams)v2), 30000);
...
}
catch(Exception v1) {
v6 = new DefaultHttpClient();
}
return ((HttpClient)v6);
}
jp/pizzahut/aorder/data/DataUtil.java
ホスト名検証を無効にしている!
Copyright©2015 JPCERT/CC All rights reserved.
他の脆弱なパターン
31
TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
// 何もしない → どんな証明書でも受付ける
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
// 何もしない → どんな証明書でも受付ける
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
// 常に true を返す → どんなホスト名でも受付ける
return true;
}
};
空っぽの TrustManager
空っぽの HostnameVerifier
Copyright©2015 JPCERT/CC All rights reserved.
脆弱なHTTPS実装の原因
32
Androidアプリ脆弱性調査レポート 2013年10月版
http://www.sonydna.com/sdna/solution/android_vulnerability_report_201310.pdf
Copyright©2015 JPCERT/CC All rights reserved.
ACM CCS 2012
Why Eve and Mallory Love Android: An Analysis of
Android SSL (In)Security
http://www2.dcsec.uni-hannover.de/files/android/p50-fahl.pdf
The Most Dangerous Code in the World: Validating SSL
Certificates in Non-Browser Software
https://crypto.stanford.edu/~dabo/pubs/abstracts/ssl-client-bugs.html
多くのアプリが SSL/TLS ライブラリを
誤用している!!
- 証明書検証を無効にしてしまう
- ホスト名検証を無効にしてしまう
-……
33
Copyright©2015 JPCERT/CC All rights reserved.
ACM CCS 2013
Rethinking SSL Development in an Appified World
http://android-ssl.org/files/p49.pdf
SSL/TLS関連の脆弱性の発生原因を探る
- 開発者の理解不足
- 開発中の一時的な設定のままリリース
- ユーザからの要望
34
Copyright©2015 JPCERT/CC All rights reserved.
脆弱性事例: パターン2
35
証明書チェーンの検証に問題
Copyright©2015 JPCERT/CC All rights reserved.
証明書チェーン検証不備: Apple iOS
36
TWSL2011-007: iOS SSL Implementation Does Not
Validate Certificate Chain
http://blog.spiderlabs.com/2011/07/twsl2011-007-ios-ssl-implementation-
does-not-validate-certificate-chain.html
https://www3.trustwave.com/spiderlabs/advisories/TWSL2011-007.txt
“iOS's SSL certificate parsing contains a flaw where it fails
to check the basicConstraints parameter of certificates
in the chain.”
証明書チェーンのなかに「CA ではない」という属
性の証明書があっても, エラーにしていなかった
Copyright©2015 JPCERT/CC All rights reserved.
証明書チェーン検証不備: Fake ID
37
https://bluebox.com/technical/android-fake-id-vulnerability/
Android Fake ID Vulnerability Lets Malware
Impersonate Trusted Applications, Puts All
Android Users Since January 2010 At Risk
Presented at BlackHat 2014 USA
ANDROID FAKEID VULNERABILITY WALKTHROUGH
https://www.blackhat.com/us-14/archives.html#android-fakeid-vulnerability-walkthrough
Android OS のアプリ署名に関する脆弱性
Copyright©2015 JPCERT/CC All rights reserved.
証明書チェーン検証不備: Fake ID
38
Android アプリには電子署名がつけられている
Android OS はアプリインストール時に電子署名を確認
SSL/TLSにおけるサーバ証明書検証と同等の処理
電子署名を確認するコードは Apache Harmony 由来のもの
証明書チェーンの確認に問題あり
Subject/Issuer の文字列としての一致のみを
確認し, 署名の確認を行っていなかった!!
“there is a conspicuous absence of cryptographic
verification of any issuer cert claims, instead defaulting
to simple subjectDN to issuerDN string matching.”
Copyright©2015 JPCERT/CC All rights reserved.39
BlackHat2014での発表資料から
Copyright©2015 JPCERT/CC All rights reserved.
脆弱性事例: パターン3
40
ホスト名の検証に問題
Copyright©2015 JPCERT/CC All rights reserved.
ホスト名検証不備: CVE-2013-4073 Ruby
41
OpenSSL クライアントにおけるホスト名検証バイパス脆
弱性 (CVE-2013-4073)
https://www.ruby-lang.org/ja/news/2013/06/27/hostname-check-bypassing-vulnerability-in-openssl-client-cve-2013-
4073/
“Rubyの SSL クライアントはホストネームが
一意であることをチェックする機構を持って
いますが、 その機構は null バイト文字が含
まれている証明書のホストネームを適切に処
理することができません。”
Copyright©2015 JPCERT/CC All rights reserved.
“a (crafted) DN with a O field such as
O="foo,CN=www.apache.org”
and ...... ordered such that the O appears prior to the CN
field would incorrectly match on the <www.apache.org> ..."
ホスト名検証不備: Apache HttpClient, Axis, …
42
CVE-2014-3577 Apache HttpComponents client:
Hostname verification susceptible to MITM attack
http://seclists.org/fulldisclosure/2014/Aug/48
類似事例: Apache Commons HttpClient (CVE-2012-6153,CVE-2012-5783)
“Apache HttpComponents … may be susceptible
to a 'Man in the Middle Attack' due to a flaw in the default
hostname verification during SSL/TLS when a specially
crafted server side certificate is used.”
Copyright©2015 JPCERT/CC All rights reserved.
ホスト名検証不備: CVE-2014-3596: Apache Axis
43
The getCN function in Apache Axis 1.4 and earlier does not properly verify that
the server hostname matches a domain name in the subject's Common Name
(CN) or subjectAltName field of the X.509 certificate, which allows man-in-the-
middle attackers to spoof SSL servers via a certificate with a subject that
specifies a common name in a field that is not the CN field.
NOTE: this issue exists because of an incomplete fix for CVE-2012-5784.
(from http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3596)
さらに類似事例: Apache Axis 1 (CVE-2012-5784, CVE-2014-3596)
Axis 1.x
Hostname 検証し
てない!
Axis 1.x
CVE-2012-5784 patch
Axis 1.x
CVE-2014-3596 patch
Hostname 検証ダ
マせるよ!
細工した証明書でも
騙されないように
なったよ
Copyright©2015 JPCERT/CC All rights reserved.
CVE-2012-5784 fix
44
private static void verifyHostName(final String host, X509Certificate cert)
throws SSLException {
String cn = getCN(cert);
String[] subjectAlts = getDNSSubjectAlts(cert);
verifyHostName(host, cn.toLowerCase(Locale.US), subjectAlts);
}
private static String getCN(X509Certificate cert) {
String subjectPrincipal = cert.getSubjectX500Principal().toString();
return getCN(subjectPrincipal);
}
private static String getCN(String subjectPrincipal) {
StringTokenizer st = new StringTokenizer(subjectPrincipal, ",");
while(st.hasMoreTokens()) {
String tok = st.nextToken().trim();
if (tok.length() > 3) {
if (tok.substring(0, 3).equalsIgnoreCase("CN=")) {
return tok.substring(3);
}
}
}
return null;
}
単純にカンマ区切りで “CN=“ を探し出して
いたため, 他のフィールドに “CN=“ が含ま
れていると拾ってしまう.
Copyright©2015 JPCERT/CC All rights reserved.
CVE-2014-3596 fix(1)
45
private static void verifyHostName(final String host, X509Certificate cert)
throws SSLException {
String[] cns = getCNs(cert);
String[] subjectAlts = getDNSSubjectAlts(cert);
verifyHostName(host, cns, subjectAlts);
}
private static String[] getCNs(X509Certificate cert) {
String subjectPrincipal = cert.getSubjectX500Principal().toString();
return getCNs(subjectPrincipal);
}
private static String[] getCNs(String subjectPrincipal) {
……..
}
Copyright©2015 JPCERT/CC All rights reserved.
CVE-2014-3596 fix(2)
46
private static void verifyHostName(final String host, X509Certificate cert) throws SSLException { …….. }
private static String[] getCNs(X509Certificate cert) { …….. }
private static String[] getCNs(String subjectPrincipal) {
if (subjectPrincipal == null) {
return null;
}
final List cns = new ArrayList();
try {
final LdapName subjectDN = new LdapName(subjectPrincipal);
final List rdns = subjectDN.getRdns();
for (int i = rdns.size() - 1; i >= 0; i--) {
final Rdn rds = (Rdn) rdns.get(i);
final Attributes attributes = rds.toAttributes();
final Attribute cn = attributes.get("cn");
if (cn != null) {
try {
final Object value = cn.get();
if (value != null) {
cns.add(value.toString());
}
}
catch (NamingException ignore) {}
}
}
}
catch (InvalidNameException ignore) { }
return cns.isEmpty() ? null : (String[]) cns.toArray(new String[ cns.size() ]);
}
LdapName クラスを使って適切に
CN 属性を拾い出す.
Copyright©2015 JPCERT/CC All rights reserved.47
脆弱性事例ポイントおさらい
脆弱性事例
SSL/TLS証明書検証って?
参考情報など
Copyright©2015 JPCERT/CC All rights reserved.
ポイント1: 証明書を検証する
SSL/TLS 通信を行うならきちんと証明書を検証しましょう
動作テストで検証を無効にしたのをそのまま公開、なんて
ダメよ
Java/Androidの場合
—SSLException を無視しない
—TrustManager の処理をスルーしない
—HostnameVerifier の処理をスルーしない
48
Copyright©2015 JPCERT/CC All rights reserved.
ポイント2: 証明書チェーンとホスト名の検証
ライブラリなどで提供されている場合には下手にカスタマ
イズせずにそのまま使おう
自前で実装しなければならない場合は…
—仕様をしっかり読み込む
—動作テストもしっかりとね
—既存の脆弱性事例を参考にして細工された証明書でも正しく
動作するように注意する
49
Copyright©2015 JPCERT/CC All rights reserved.51
脆弱性事例ポイントおさらい
脆弱性事例
SSL/TLS証明書検証って?
参考情報など
Copyright©2015 JPCERT/CC All rights reserved.
参考書籍
52
マスタリングTCP/IP SSL/TLS編
http://shop.ohmsha.co.jp/shop/shopdetail.html?bra
ndcode=000000001666&search=4-274-06542-1
Bulletproof SSL and TLS
https://www.feistyduck.com/books/bulletproof-ssl-
and-tls/
Copyright©2015 JPCERT/CC All rights reserved.
参考情報
53
IPA: PKI 関連技術情報 (https://www.ipa.go.jp/security/pki/)
Introduction to Public-Key Cryptography
https://developer.mozilla.org/en-US/docs/Introduction_to_Public-Key_Cryptography
Exciting Updates to Certificate Verification in Gecko
https://blog.mozilla.org/security/2014/04/24/exciting-updates-to-certificate-verification-in-gecko/
JNSA PKI Day (http://www.jnsa.org/seminar/pki-day/)
PKI Day 2015 (http://www.jnsa.org/seminar/pki-day/2015/)
一般社団法人日本スマートフォンセキュリティ協会『Androidアプリの
セキュア設計・セキュアコーディングガイド』
https://www.jssec.org/report/securecoding.html
SSL/TLSライブラリの正しい使い方(もしくは、コモンネー
ムの検証について)
http://blog.kazuhooku.com/2014/01/ssltls.html
Android Pinning by Moxie Marlinspike
https://github.com/moxie0/AndroidPinning
Copyright©2015 JPCERT/CC All rights reserved.
References
SSL Vulnerabilities: Who listens when Android applications
talk?
—http://www.fireeye.com/blog/technical/2014/08/ssl-vulnerabilities-
who-listens-when-android-applications-talk.html
Defeating SSL Certificate Validation for Android
Applications
—https://secure.mcafee.com/us/resources/white-papers/wp-
defeating-ssl-cert-validation.pdf
OnionKit by Android Library Project for Multi-Layer
Network Connections (Better TLS/SSL and Tor)
—https://github.com/guardianproject/OnionKit
CERT/CC Vulnerability Note VU#582497: Multiple Android
applications fail to properly validate SSL certificates
—https://www.kb.cert.org/vuls/id/582497
54
Copyright©2015 JPCERT/CC All rights reserved.55
一般社団法人JPCERTコーディネーションセンター
(https://www.jpcert.or.jp/)
セキュアコーディング
(https://www.jpcert.or.jp/securecoding/)
お問い合わせはこちらにどうぞ…
(secure-coding@jpcert.or.jp)

More Related Content

What's hot

HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Masahito Zembutsu
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Masahito Zembutsu
 
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)NTT DATA Technology & Innovation
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクションzaki4649
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 zaki4649
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践日本マイクロソフト株式会社
 
バグハンターの哀しみ
バグハンターの哀しみバグハンターの哀しみ
バグハンターの哀しみMasato Kinugawa
 
Open Policy Agent (OPA) 入門
Open Policy Agent (OPA) 入門Open Policy Agent (OPA) 入門
Open Policy Agent (OPA) 入門Motonori Shindo
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Masahito Zembutsu
 

What's hot (20)

HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
 
バグハンターの哀しみ
バグハンターの哀しみバグハンターの哀しみ
バグハンターの哀しみ
 
Open Policy Agent (OPA) 入門
Open Policy Agent (OPA) 入門Open Policy Agent (OPA) 入門
Open Policy Agent (OPA) 入門
 
Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解Docker道場オンライン#1 Docker基礎概念と用語の理解
Docker道場オンライン#1 Docker基礎概念と用語の理解
 

Similar to 脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)

脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)JPCERT Coordination Center
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)JPCERT Coordination Center
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight KeycloakHiroyuki Wada
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性JPCERT Coordination Center
 
認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入TakashiTsukamoto4
 
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」JPCERT Coordination Center
 
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)JPCERT Coordination Center
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのことNTT DATA OSS Professional Services
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015ichikaway
 
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptxお客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptxmkoda
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介
ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介
ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介Kazuya Yokogawa
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギMasaki Yamakawa
 
Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例OSSラボ株式会社
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤Masahiro Kiura
 

Similar to 脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015) (20)

脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight Keycloak
 
Etnet2015.slide
Etnet2015.slideEtnet2015.slide
Etnet2015.slide
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
 
認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入認証サービスへのWebAuthnの導入
認証サービスへのWebAuthnの導入
 
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」
 
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptxお客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介
ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介
ライブドア様xKLab合同勉強会 システムモニタリングツール「Ganglia」の紹介
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 
Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤
 

More from JPCERT Coordination Center

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~JPCERT Coordination Center
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)JPCERT Coordination Center
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』JPCERT Coordination Center
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)JPCERT Coordination Center
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)JPCERT Coordination Center
 
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性JPCERT Coordination Center
 
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...JPCERT Coordination Center
 
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策JPCERT Coordination Center
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルJPCERT Coordination Center
 
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL VulnerabilitiesLessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL VulnerabilitiesJPCERT Coordination Center
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JPCERT Coordination Center
 
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性JPCERT Coordination Center
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JPCERT Coordination Center
 
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性JPCERT Coordination Center
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性JPCERT Coordination Center
 
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性JPCERT Coordination Center
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性JPCERT Coordination Center
 

More from JPCERT Coordination Center (20)

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
 
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解くDLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
 
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
 
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
 
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
Case Studies and Lessons Learned from SSL/TLS Certificate Verification Vulner...
 
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
 
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL VulnerabilitiesLessons (to be) Learned from Handling OpenSSL Vulnerabilities
Lessons (to be) Learned from Handling OpenSSL Vulnerabilities
 
Android Secure Coding
Android Secure CodingAndroid Secure Coding
Android Secure Coding
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
 
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
Apache Tomcat における クロスサイトリクエストフォージェリ (CSRF) 保護メカニズム回避の脆弱性
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
 
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
 
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
 

脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)

  • 2. Copyright©2015 JPCERT/CC All rights reserved. 自己紹介 http://www.tomo.gr.jp/root/e9706.html JPCERT/CC 情報流通対策グループ 解析チーム リードアナリスト 戸田 洋三 脆弱性情報分析, セキュアコー ディング普及啓発活動…… に努めてます 2
  • 3. Copyright©2015 JPCERT/CC All rights reserved. JPCERT/CCとは JPCERT Coordination Center 日本における情報セキュリ ティ対策活動の向上に取り組 んでいる組織 3
  • 4. Copyright©2015 JPCERT/CC All rights reserved. JPCERT/CCの主な活動 4
  • 5. Copyright©2015 JPCERT/CC All rights reserved. JPCERT/CC セキュアコーディングのコンテンツ 5 www.jpcert.or.jp/securecoding/
  • 6. Copyright©2015 JPCERT/CC All rights reserved. slideshare にも講演資料やセミナコンテンツ置いてます 6 www.slideshare.net/jpcert_securecoding/presentations
  • 7. Copyright©2015 JPCERT/CC All rights reserved. セキュアコーディングスタンダード 7 米国 CMU/SEI の the CERT Secure Coding Initiative によるコーディングスタンダードシリーズ https://www.securecoding.cert.org/ 現状, 4種類公開さ れています.
  • 8. Copyright©2015 JPCERT/CC All rights reserved.8 CERT C コーディングスタンダード CERT C セキュアコーディングスタンダード紹介 https://www.jpcert.or.jp/research/materials.html#secure JPCERT/CC で日本語公開中!! https://www.jpcert.or.jp/sc-rules/
  • 9. Copyright©2015 JPCERT/CC All rights reserved.9 CERT Oracle Java コーディングスタンダード OSC2011@Nagoya でも紹介してます http://www.ospn.jp/osc2011-nagoya/pdf/ osc2011nagoya-JPCERT_CC.pdf JPCERT/CC で日本語公開中!! https://www.jpcert.or.jp/java-rules/
  • 10. Copyright©2015 JPCERT/CC All rights reserved.10 セキュアコーディングスタンダード(C++, Perl) “under development” (開発中)
  • 11. Copyright©2015 JPCERT/CC All rights reserved. コーディングスタンダードの協力者募集中! セキュアコーディングスタンダード日本 語版の整備に協力してくれる方を求めて います。 —Java, Android, C, C++, …… —既存の日本語へのコメント、改善案 —英語原文へのコメント、改善案 —さらに編集も… 11 興味のある方、ご連絡ください!
  • 12. Copyright©2015 JPCERT/CC All rights reserved. 本日の話題  SSL/TLS証明書検証って?  証明書検証に関連する脆弱性事例紹介  脆弱性事例のポイントおさらい  参考情報など 12
  • 13. Copyright©2015 JPCERT/CC All rights reserved.13 脆弱性事例ポイントおさらい 脆弱性事例 SSL/TLS証明書検証って? 参考情報など
  • 14. Copyright©2015 JPCERT/CC All rights reserved. SSL/TLS通信手順 14 参考: http://ja.wikipedia.org/wiki/Transport_Layer_Security SSL/TLS Transport層の上で暗号化通信路を実現する仕組み SSL 3.0 - RFC6101 TLS 1.0 - RFC2246 TLS 1.1 - RFC4346 TLS 1.2 - RFC5246 ………. 攻撃手法への対策や 新たな暗号化スイー ト追加など, 現在も進 化中…
  • 15. Copyright©2015 JPCERT/CC All rights reserved. SSL/TLS通信手順 15 参考: http://ja.wikipedia.org/wiki/Transport_Layer_Security SSL/TLS Transport層の上で暗号化通信路を実現する仕組み SSL 3.0 - RFC6101 TLS 1.0 - RFC2246 TLS 1.1 - RFC4346 TLS 1.2 - RFC5246 ………. 攻撃手法への対策や 新たな暗号化スイー ト追加など, 現在も進 化中… 今日はここだけに 注目します.
  • 16. Copyright©2015 JPCERT/CC All rights reserved. サーバ証明書って? 16 •サーバの公開鍵とサーバのドメイン名がはいっ ている (https で使う場合) •とある CA (認証局)が, ドメイン名と公開鍵の関 係を確認してくれたもの •ITU-T規格 X.509 で決められているものを流用 •RFC5280, RFC6818 •Web ブラウザなどでは, 信頼する CA のオレオレ証明書 をあらかじめ持っておく
  • 17. Copyright©2015 JPCERT/CC All rights reserved. 証明書の検証には2つの処理が含まれている 17 •受け取ったサーバ証明書が, 信頼する CA を起点として 正しく作られたものであることを確認する •⇒証明書検証 (証明書および証明書チェーンの検証) •信頼できるサーバ証明書が持っているサーバ名 がアクセスしようとしているサーバ名と一致する ことを確認する •⇒ホスト名検証
  • 18. Copyright©2015 JPCERT/CC All rights reserved. X.509 v3 証明書の構造 18 https://www.ipa.go.jp/security/pki/033.html
  • 19. Copyright©2015 JPCERT/CC All rights reserved. X.509 v3 証明書の構造 19 https://www.ipa.go.jp/security/pki/033.html この証明書をつくった CA の情報
  • 20. Copyright©2015 JPCERT/CC All rights reserved. X.509 v3 証明書の構造 20 https://www.ipa.go.jp/security/pki/033.html サーバのドメイン名が収められてい る場所 (拡張フィールドのsubjectAltNameと 必須フィールドのsubject)
  • 21. Copyright©2015 JPCERT/CC All rights reserved. サーバ証明書の例: www.jpcert.or.jp. 21 • Issuer: •C=US •O=Symantec Corporation •OU=Symantec Trust Network •CN=Symantec Class 3 EV SSL CA - G3 •Subject: •serialNumber=0100-05-006504 •C=JP •postalCode=101-0054 •ST=Tokyo •L=Chiyoda-ku •streetAddress=“Hirose Bldg. 11F, 3-17 Kanda-nishikicho” •O=“Japan Computer Emergency Response Team Coordination Center” •OU=“System Administration Group” •CN=www.jpcert.or.jp • X509v3 extensions: •X509v3 Subject Alternative Name: •DNS:www.jpcert.or.jp •X509v3 Basic Constraints: •CA:FALSE 主要な項目を抜き出したもの
  • 22. Copyright©2015 JPCERT/CC All rights reserved. サーバ証明書の例: www.google.com. 22 • Issuer: •C=US •O=Google Inc •CN=Google Internet Authority G2 •Subject: •C=US •ST=California •L=Mountain View •O=Google Inc •CN=google.com • X509v3 extensions: •X509v3 Subject Alternative Name: •DNS:google.com •DNS:*.2mdn.net •DNS:*.android.com •DNS:*.appengine.google.com •…….. (省略) …….. •X509v3 Basic Constraints: •CA:FALSE 主要な項目を抜き出したもの
  • 23. Copyright©2015 JPCERT/CC All rights reserved. X.509 証明書検証 23 Certification path validation algorithm http://en.wikipedia.org/wiki/Certification_path_validation_algorithm 証明書自体が持っている情報は信頼できるか? ASN.1 データ構造として正しく読めるか? CAによる署名は正しくなされているか? 有効期限は切れていないか? 失効されていないか? 証明書チェーンをたどって信頼している(CAの) 証明書に辿りつけるか? RFC5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile 6. Certification Path Validation http://tools.ietf.org/html/rfc5280#section-6
  • 24. Copyright©2015 JPCERT/CC All rights reserved. 証明書チェーンの検証処理 24 https://security.stackexchange.com/questions/56389/ssl-certificate- framework-101-how-does-the-browser-actually-verify-the-validity
  • 25. Copyright©2015 JPCERT/CC All rights reserved. ホスト名検証 25 アクセスしようとしているサーバ名(ドメイン名)とサー バ証明書に示されているサーバ名が一致するか? サーバ証明書に subjectAltName が含まれている場合はそ れを使うこと 一致するかどうかの検証アルゴリズムは証明書検証で使 うアルゴリズムと同じ RFC2818: HTTP Over TLS 3.1. Server Identity http://tools.ietf.org/html/rfc2818#section-3.1 RFC5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile 7. Processing Rules for Internationalized Names http://tools.ietf.org/html/rfc5280#section-7
  • 26. Copyright©2015 JPCERT/CC All rights reserved.26 脆弱性事例ポイントおさらい 脆弱性事例 SSL/TLS証明書検証って? 参考情報など
  • 27. Copyright©2015 JPCERT/CC All rights reserved. 脆弱性事例: パターン1 27 なにも検証していない
  • 28. Copyright©2015 JPCERT/CC All rights reserved. 証明書の検証不備 28 jvn.jp の掲載事例で「証明書の検証不備」を拾い出して みると… (2013年以降) JVN#27388160: Android 版 「スマ保」における SSL/TLS サーバ証明書の検証不備の脆弱性 JVN#48270605: Yahoo!ボックス(Android版) における SSL サーバ証明書の検証不備の脆弱性 JVN#04560253: Android 版アプリ「ゆこゆこ」における SSL サーバ証明書の検証不備の脆弱性 JVN#17637243: Android 版アプリ Kindle における SSL サーバ証明書の検証不備の脆弱性 JVN#27702217: Android 版 Ameba における SSL サーバ証明書の検証不備の脆弱性 JVN#72950786: Android 版 Outlook.com における SSL サーバ証明書の検証不備の脆弱性 JVN#10603428: Android 版アプリ「JR東日本アプリ」における SSL サーバ証明書の検証不備の脆弱性 JVN#16263849: Android 版アプリ「出前館」における SSL サーバ証明書の検証不備の脆弱性 JVN#48810179: Android 版アプリ「デニーズ」における SSL サーバ証明書の検証不備の脆弱性 JVN#97810280: KDrive個人版 PCクライアントソフトにおける SSL サーバ証明書の検証不備の脆弱性 JVN#75084836: Android 版 Yahoo!ショッピングにおける SSL サーバ証明書の検証不備の脆弱性 JVN#68156832: ヤフオク! における SSL サーバ証明書の検証不備の脆弱性 JVN#39218538: Android 版 ピザハット公式アプリ 宅配ピザのPizzaHut における SSL サーバ証明書の検証不備の脆弱性 JVN#85812843: FileMaker Pro における SSL サーバ証明書の検証不備の脆弱性 JVNVU#389795: Windows Phone 7 に SSL サーバ証明書の検証不備の脆弱性 JVN#39707339: Opera における SSL サーバ証明書の検証不備の脆弱性 JVN#82029095: spモードメールアプリにおける SSL サーバ証明書の検証不備の脆弱性 Android アプリでよく報告されてます. (もちろん他の実行環境の例もあり) 参考 SSL/TLS ではなく IPsec での例もあり: CVE-2013-1028 Apple OS X v10.8.5 and Security Update 2013-004
  • 29. Copyright©2015 JPCERT/CC All rights reserved. 脆弱性の原因 29 public static HttpClient getNewHttpClient() { DefaultHttpClient v6; try { KeyStore v5 = KeyStore.getInstance(KeyStore.getDefaultType()); v5.load(null, null); MySSLSocketFactory mySSLScoket = new MySSLSocketFactory(v5); if(ApplicationDefineRelease.sAllowAllSSL) { ((SSLSocketFactory)mySSLScoket).setHostnameVerifier (SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); } BasicHttpParams v2 = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(((HttpParams)v2), 30000); ... } catch(Exception v1) { v6 = new DefaultHttpClient(); } return ((HttpClient)v6); }
  • 30. Copyright©2015 JPCERT/CC All rights reserved. 脆弱性の原因 30 public static HttpClient getNewHttpClient() { DefaultHttpClient v6; try { KeyStore v5 = KeyStore.getInstance(KeyStore.getDefaultType()); v5.load(null, null); MySSLSocketFactory mySSLScoket = new MySSLSocketFactory(v5); if(ApplicationDefineRelease.sAllowAllSSL) { ((SSLSocketFactory)mySSLScoket).setHostnameVerifier (SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); } BasicHttpParams v2 = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(((HttpParams)v2), 30000); ... } catch(Exception v1) { v6 = new DefaultHttpClient(); } return ((HttpClient)v6); } jp/pizzahut/aorder/data/DataUtil.java ホスト名検証を無効にしている!
  • 31. Copyright©2015 JPCERT/CC All rights reserved. 他の脆弱なパターン 31 TrustManager tm = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { // 何もしない → どんな証明書でも受付ける } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { // 何もしない → どんな証明書でも受付ける } @Override public X509Certificate[] getAcceptedIssuers() { return null; } }; HostnameVerifier hv = new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { // 常に true を返す → どんなホスト名でも受付ける return true; } }; 空っぽの TrustManager 空っぽの HostnameVerifier
  • 32. Copyright©2015 JPCERT/CC All rights reserved. 脆弱なHTTPS実装の原因 32 Androidアプリ脆弱性調査レポート 2013年10月版 http://www.sonydna.com/sdna/solution/android_vulnerability_report_201310.pdf
  • 33. Copyright©2015 JPCERT/CC All rights reserved. ACM CCS 2012 Why Eve and Mallory Love Android: An Analysis of Android SSL (In)Security http://www2.dcsec.uni-hannover.de/files/android/p50-fahl.pdf The Most Dangerous Code in the World: Validating SSL Certificates in Non-Browser Software https://crypto.stanford.edu/~dabo/pubs/abstracts/ssl-client-bugs.html 多くのアプリが SSL/TLS ライブラリを 誤用している!! - 証明書検証を無効にしてしまう - ホスト名検証を無効にしてしまう -…… 33
  • 34. Copyright©2015 JPCERT/CC All rights reserved. ACM CCS 2013 Rethinking SSL Development in an Appified World http://android-ssl.org/files/p49.pdf SSL/TLS関連の脆弱性の発生原因を探る - 開発者の理解不足 - 開発中の一時的な設定のままリリース - ユーザからの要望 34
  • 35. Copyright©2015 JPCERT/CC All rights reserved. 脆弱性事例: パターン2 35 証明書チェーンの検証に問題
  • 36. Copyright©2015 JPCERT/CC All rights reserved. 証明書チェーン検証不備: Apple iOS 36 TWSL2011-007: iOS SSL Implementation Does Not Validate Certificate Chain http://blog.spiderlabs.com/2011/07/twsl2011-007-ios-ssl-implementation- does-not-validate-certificate-chain.html https://www3.trustwave.com/spiderlabs/advisories/TWSL2011-007.txt “iOS's SSL certificate parsing contains a flaw where it fails to check the basicConstraints parameter of certificates in the chain.” 証明書チェーンのなかに「CA ではない」という属 性の証明書があっても, エラーにしていなかった
  • 37. Copyright©2015 JPCERT/CC All rights reserved. 証明書チェーン検証不備: Fake ID 37 https://bluebox.com/technical/android-fake-id-vulnerability/ Android Fake ID Vulnerability Lets Malware Impersonate Trusted Applications, Puts All Android Users Since January 2010 At Risk Presented at BlackHat 2014 USA ANDROID FAKEID VULNERABILITY WALKTHROUGH https://www.blackhat.com/us-14/archives.html#android-fakeid-vulnerability-walkthrough Android OS のアプリ署名に関する脆弱性
  • 38. Copyright©2015 JPCERT/CC All rights reserved. 証明書チェーン検証不備: Fake ID 38 Android アプリには電子署名がつけられている Android OS はアプリインストール時に電子署名を確認 SSL/TLSにおけるサーバ証明書検証と同等の処理 電子署名を確認するコードは Apache Harmony 由来のもの 証明書チェーンの確認に問題あり Subject/Issuer の文字列としての一致のみを 確認し, 署名の確認を行っていなかった!! “there is a conspicuous absence of cryptographic verification of any issuer cert claims, instead defaulting to simple subjectDN to issuerDN string matching.”
  • 39. Copyright©2015 JPCERT/CC All rights reserved.39 BlackHat2014での発表資料から
  • 40. Copyright©2015 JPCERT/CC All rights reserved. 脆弱性事例: パターン3 40 ホスト名の検証に問題
  • 41. Copyright©2015 JPCERT/CC All rights reserved. ホスト名検証不備: CVE-2013-4073 Ruby 41 OpenSSL クライアントにおけるホスト名検証バイパス脆 弱性 (CVE-2013-4073) https://www.ruby-lang.org/ja/news/2013/06/27/hostname-check-bypassing-vulnerability-in-openssl-client-cve-2013- 4073/ “Rubyの SSL クライアントはホストネームが 一意であることをチェックする機構を持って いますが、 その機構は null バイト文字が含 まれている証明書のホストネームを適切に処 理することができません。”
  • 42. Copyright©2015 JPCERT/CC All rights reserved. “a (crafted) DN with a O field such as O="foo,CN=www.apache.org” and ...... ordered such that the O appears prior to the CN field would incorrectly match on the <www.apache.org> ..." ホスト名検証不備: Apache HttpClient, Axis, … 42 CVE-2014-3577 Apache HttpComponents client: Hostname verification susceptible to MITM attack http://seclists.org/fulldisclosure/2014/Aug/48 類似事例: Apache Commons HttpClient (CVE-2012-6153,CVE-2012-5783) “Apache HttpComponents … may be susceptible to a 'Man in the Middle Attack' due to a flaw in the default hostname verification during SSL/TLS when a specially crafted server side certificate is used.”
  • 43. Copyright©2015 JPCERT/CC All rights reserved. ホスト名検証不備: CVE-2014-3596: Apache Axis 43 The getCN function in Apache Axis 1.4 and earlier does not properly verify that the server hostname matches a domain name in the subject's Common Name (CN) or subjectAltName field of the X.509 certificate, which allows man-in-the- middle attackers to spoof SSL servers via a certificate with a subject that specifies a common name in a field that is not the CN field. NOTE: this issue exists because of an incomplete fix for CVE-2012-5784. (from http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3596) さらに類似事例: Apache Axis 1 (CVE-2012-5784, CVE-2014-3596) Axis 1.x Hostname 検証し てない! Axis 1.x CVE-2012-5784 patch Axis 1.x CVE-2014-3596 patch Hostname 検証ダ マせるよ! 細工した証明書でも 騙されないように なったよ
  • 44. Copyright©2015 JPCERT/CC All rights reserved. CVE-2012-5784 fix 44 private static void verifyHostName(final String host, X509Certificate cert) throws SSLException { String cn = getCN(cert); String[] subjectAlts = getDNSSubjectAlts(cert); verifyHostName(host, cn.toLowerCase(Locale.US), subjectAlts); } private static String getCN(X509Certificate cert) { String subjectPrincipal = cert.getSubjectX500Principal().toString(); return getCN(subjectPrincipal); } private static String getCN(String subjectPrincipal) { StringTokenizer st = new StringTokenizer(subjectPrincipal, ","); while(st.hasMoreTokens()) { String tok = st.nextToken().trim(); if (tok.length() > 3) { if (tok.substring(0, 3).equalsIgnoreCase("CN=")) { return tok.substring(3); } } } return null; } 単純にカンマ区切りで “CN=“ を探し出して いたため, 他のフィールドに “CN=“ が含ま れていると拾ってしまう.
  • 45. Copyright©2015 JPCERT/CC All rights reserved. CVE-2014-3596 fix(1) 45 private static void verifyHostName(final String host, X509Certificate cert) throws SSLException { String[] cns = getCNs(cert); String[] subjectAlts = getDNSSubjectAlts(cert); verifyHostName(host, cns, subjectAlts); } private static String[] getCNs(X509Certificate cert) { String subjectPrincipal = cert.getSubjectX500Principal().toString(); return getCNs(subjectPrincipal); } private static String[] getCNs(String subjectPrincipal) { …….. }
  • 46. Copyright©2015 JPCERT/CC All rights reserved. CVE-2014-3596 fix(2) 46 private static void verifyHostName(final String host, X509Certificate cert) throws SSLException { …….. } private static String[] getCNs(X509Certificate cert) { …….. } private static String[] getCNs(String subjectPrincipal) { if (subjectPrincipal == null) { return null; } final List cns = new ArrayList(); try { final LdapName subjectDN = new LdapName(subjectPrincipal); final List rdns = subjectDN.getRdns(); for (int i = rdns.size() - 1; i >= 0; i--) { final Rdn rds = (Rdn) rdns.get(i); final Attributes attributes = rds.toAttributes(); final Attribute cn = attributes.get("cn"); if (cn != null) { try { final Object value = cn.get(); if (value != null) { cns.add(value.toString()); } } catch (NamingException ignore) {} } } } catch (InvalidNameException ignore) { } return cns.isEmpty() ? null : (String[]) cns.toArray(new String[ cns.size() ]); } LdapName クラスを使って適切に CN 属性を拾い出す.
  • 47. Copyright©2015 JPCERT/CC All rights reserved.47 脆弱性事例ポイントおさらい 脆弱性事例 SSL/TLS証明書検証って? 参考情報など
  • 48. Copyright©2015 JPCERT/CC All rights reserved. ポイント1: 証明書を検証する SSL/TLS 通信を行うならきちんと証明書を検証しましょう 動作テストで検証を無効にしたのをそのまま公開、なんて ダメよ Java/Androidの場合 —SSLException を無視しない —TrustManager の処理をスルーしない —HostnameVerifier の処理をスルーしない 48
  • 49. Copyright©2015 JPCERT/CC All rights reserved. ポイント2: 証明書チェーンとホスト名の検証 ライブラリなどで提供されている場合には下手にカスタマ イズせずにそのまま使おう 自前で実装しなければならない場合は… —仕様をしっかり読み込む —動作テストもしっかりとね —既存の脆弱性事例を参考にして細工された証明書でも正しく 動作するように注意する 49
  • 50. Copyright©2015 JPCERT/CC All rights reserved.51 脆弱性事例ポイントおさらい 脆弱性事例 SSL/TLS証明書検証って? 参考情報など
  • 51. Copyright©2015 JPCERT/CC All rights reserved. 参考書籍 52 マスタリングTCP/IP SSL/TLS編 http://shop.ohmsha.co.jp/shop/shopdetail.html?bra ndcode=000000001666&search=4-274-06542-1 Bulletproof SSL and TLS https://www.feistyduck.com/books/bulletproof-ssl- and-tls/
  • 52. Copyright©2015 JPCERT/CC All rights reserved. 参考情報 53 IPA: PKI 関連技術情報 (https://www.ipa.go.jp/security/pki/) Introduction to Public-Key Cryptography https://developer.mozilla.org/en-US/docs/Introduction_to_Public-Key_Cryptography Exciting Updates to Certificate Verification in Gecko https://blog.mozilla.org/security/2014/04/24/exciting-updates-to-certificate-verification-in-gecko/ JNSA PKI Day (http://www.jnsa.org/seminar/pki-day/) PKI Day 2015 (http://www.jnsa.org/seminar/pki-day/2015/) 一般社団法人日本スマートフォンセキュリティ協会『Androidアプリの セキュア設計・セキュアコーディングガイド』 https://www.jssec.org/report/securecoding.html SSL/TLSライブラリの正しい使い方(もしくは、コモンネー ムの検証について) http://blog.kazuhooku.com/2014/01/ssltls.html Android Pinning by Moxie Marlinspike https://github.com/moxie0/AndroidPinning
  • 53. Copyright©2015 JPCERT/CC All rights reserved. References SSL Vulnerabilities: Who listens when Android applications talk? —http://www.fireeye.com/blog/technical/2014/08/ssl-vulnerabilities- who-listens-when-android-applications-talk.html Defeating SSL Certificate Validation for Android Applications —https://secure.mcafee.com/us/resources/white-papers/wp- defeating-ssl-cert-validation.pdf OnionKit by Android Library Project for Multi-Layer Network Connections (Better TLS/SSL and Tor) —https://github.com/guardianproject/OnionKit CERT/CC Vulnerability Note VU#582497: Multiple Android applications fail to properly validate SSL certificates —https://www.kb.cert.org/vuls/id/582497 54
  • 54. Copyright©2015 JPCERT/CC All rights reserved.55 一般社団法人JPCERTコーディネーションセンター (https://www.jpcert.or.jp/) セキュアコーディング (https://www.jpcert.or.jp/securecoding/) お問い合わせはこちらにどうぞ… (secure-coding@jpcert.or.jp)