SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
事例から学ぶAndroidアプリのセ
キュアコーディング「SSL/TLS証
明書検証の現状と対策」
JPCERT/CC
情報流通対策グループ 脆弱性解析チーム
熊谷 裕志 (hiroshi.kumagai@jpcert.or.jp)
Copyright©2015 JPCERT/CC All rights reserved.
自己紹介
1
熊谷 裕志 (くまがい ひろし)
—情報流通対策グループ 解析チーム リードアナリスト
—2011年4月からJPCERT/CCで脆弱性情報の分析やセキュ
アコーディングの普及活動に携わる
Copyright©2015 JPCERT/CC All rights reserved.
目次
話題になったニュース
現状
—約5000件のアプリを簡易調査
—アプリをピックアップしてその実装を見てみる
対策方法
—修正されたアプリの実装を見てみる
アプリの解析
—ツール紹介
—デモ
参考情報
2
Copyright©2015 JPCERT/CC All rights reserved.
2014年 SSL/TLSサーバ証明書検
証不備の話題
3
Copyright©2015 JPCERT/CC All rights reserved.
9月 CERT/CC Androidアプリの脆弱性を調査公表
4
多くのAndroidアプリではSSL/TLSサーバ証明書を適切に
検証していないことがわかった
—https://www.cert.org/blogs/certcc/post.cfm?EntryID=204
検証したアプリのリストが公開されており、現在も更新
されている
—https://docs.google.com/spreadsheets/d/1t5GXwjw82Syun
ALVJb2w0zi3FoLRIkfGPc7AMjRF0r4/edit?usp=sharing
Copyright©2015 JPCERT/CC All rights reserved.
1月から12月までの間 国内では9件の脆弱性情報が公開
2014/10/23 JVN#27388160:
— Android 版 「スマ保」における SSL/TLS サーバ証明書の検証不備の脆弱性
2014/09/25 JVN#48270605:
— Yahoo!ボックス(Android版) における SSL サーバ証明書の検証不備の脆弱性
2014/09/22 JVN#04560253:
— Android 版アプリ「ゆこゆこ」における SSL サーバ証明書の検証不備の脆弱性
2014/08/29 JVN#17637243:
— Android 版アプリ Kindle における SSL サーバ証明書の検証不備の脆弱性
2014/08/14 JVN#27702217:
— Android 版 Ameba における SSL サーバ証明書の検証不備の脆弱性
2014/07/30 JVN#72950786:
— Android 版 Outlook.com における SSL サーバ証明書の検証不備の脆弱性
2014/06/18 JVN#10603428:
— Android 版アプリ「JR東日本アプリ」における SSL サーバ証明書の検証不備の脆弱性
2014/03/17 JVN#16263849:
— Android 版アプリ「出前館」における SSL サーバ証明書の検証不備の脆弱性
2014/02/26 JVN#48810179:
— Android 版アプリ「デニーズ」における SSL サーバ証明書の検証不備の脆弱性
5
Copyright©2015 JPCERT/CC All rights reserved.
現状
6
Copyright©2015 JPCERT/CC All rights reserved.
調査内容
日本のGooglePlayで公開されている5307件のアプリを簡
易調査
—2015/01/27時点
—次のカテゴリの無料トップからアプリをピックアップ
ビジネス、通信、ファイナンス、健康&フィットネス、ライ
フスタイル、医療、仕事効率化、ショッピング、ソーシャル
ネットワーク、ツール、交通
7
Copyright©2015 JPCERT/CC All rights reserved.
調査内容
証明書検証の実装に問題がある可能性の判断
—X509TrustManagerをチェック
checkServerTrustedメソッド等を空にしているか
—HostnameVerifierをチェック
verifyメソッドを常にtrueにしているか
—ALLOW_ALL_HOSTNAME_VERIFIERをチェック
8
JSSEC セキュアコーディングガイド 5.4.3.3. 証明書検証を無効化する危険なコード
(https://www.jssec.org/dl/android_securecoding.pdf)
Copyright©2015 JPCERT/CC All rights reserved.9
危険なコード例
Copyright©2015 JPCERT/CC All rights reserved.
調査結果
1930件のアプリに証明書検証不備の可能性
—ただし、あくまで簡易調査
証明書検証を無効にしているコードを含んでいるという意味
全てのアプリでこのコードが生きているかどうかは現時点で
未調査
10
Copyright©2015 JPCERT/CC All rights reserved.
カテゴリ別割合
11
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
各カテゴリにおける問題のコードを含むアプリの割合
Copyright©2015 JPCERT/CC All rights reserved.
アプリその1:実装その1
独自実装のTrustManagerを使用している
12
package xxxx.xxxx.xxxx.xxxx.xxxx.xxxx;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
class g implements X509TrustManager {
g(f arg1) {
this.a = arg1;
super();
}
public void checkClientTrusted(X509Certificate[] arg1, String arg2) {
}
public void checkServerTrusted(X509Certificate[] arg1, String arg2) {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
Copyright©2015 JPCERT/CC All rights reserved.
アプリその2:実装その2
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIE
Rを使用して、どんなホスト名でも受け付けるようにし
ている
13
h.a = new HttpPost(v0);
h.a.setHeader("Content-Type", "image/jpeg");
h.a.setHeader("Accept-Language", "ja-jp");
h.a.setHeader("Accept-Encoding", "gzip, deflate");
h.a.setHeader("Proxy-Connection", "keep-alive");
h.a.setHeader("User-Agent", v1);
KeyStore v0_1 = KeyStore.getInstance(KeyStore.getDefaultType());
v0_1.load(v2, ((char[])v2));
f v1_1 = new f(v0_1); ((SSLSocketFactory)v1_1).setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry v0_2 = new SchemeRegistry();
v0_2.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
v0_2.register(new Scheme("https", ((SocketFactory)v1_1), 443));
Copyright©2015 JPCERT/CC All rights reserved.
アプリその3:実装その1
このアプリも先ほど同様、独自実装のTrustManagerを使
用している
14
package xxxx.xxxx.xxxx.xxxx.xxxx;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
class xxxx.xxxx.xxxx.xxxx.xxxx.MySSLSocketFactory$1 implements X509TrustManager {
xxxx.xxxx.xxxx.xxxx.xxxx.MySSLSocketFactory$1(MySSLSocketFactory arg1) {
MySSLSocketFactory.this = arg1;
super();
}
public void checkClientTrusted(X509Certificate[] chain, String authType) throws
CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws
CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
Copyright©2015 JPCERT/CC All rights reserved.
アプリその4:実装その2
これも先ほどのアプリと同様に
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIE
Rを使用してどんなホスト名でも受け付けるようにして
いる
15
public HttpClient(StringBuilder _sb) throws Exception {
super();
this.httpClient = new DefaultHttpClient();
this.httpContext = new BasicHttpContext();
this.stringBuilder = _sb;
KeyStore v2 = KeyStore.getInstance(KeyStore.getDefaultType());
v2.load(null, null);
MySSLSocketFactory v1 = new MySSLSocketFactory(v2);
((SSLSocketFactory)v1).setHostnameVerifier(
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
this.httpClient.getConnectionManager().getSchemeRegistry().register(
new Scheme("https", ((SocketFactory) v1), 443));
Copyright©2015 JPCERT/CC All rights reserved.
その他
WebViewにおいて、SSL通信のエラーを無視してそのま
ま処理を実行するようにしている
16
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler
handler, SslError error) {
handler.proceed();
}
});
Copyright©2015 JPCERT/CC All rights reserved.
なぜ?
17
Copyright©2015 JPCERT/CC All rights reserved.
SSL/TLSサーバ証明書の検証をしていないと
中間者攻撃によって、HTTPS通信の
内容を盗聴や改ざんされてしまう
18
Copyright©2015 JPCERT/CC All rights reserved.
対策方法は?
19
Copyright©2015 JPCERT/CC All rights reserved.20
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その1
某ファイナンス系アプリA
—https://play.google.com/store/apps/details?id=xxx.xxxxx.xx
xxxxx.xxxxxx
すでに修正済み
古いバージョンではSSL/TLSサーバ証明書を検証してい
なかった
21
Copyright©2015 JPCERT/CC All rights reserved.22
xxx.xxxx.xxxxx.xxxx.ApiRequest$1 v12 = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
try {
SSLContext v18 = SSLContext.getInstance("TLS");
v18.init(null, new TrustManager[]{v12}, null);
((HttpsURLConnection)v8).setSSLSocketFactory(v18.getSocketFactory());
((HttpsURLConnection)v8).setSSLSocketFactory(v18.getSocketFactory());
((HttpsURLConnection)v8).setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String string, SSLSession ssls) {
return 1;
}
});
((HttpURLConnection)v8).setRequestMethod("POST");
((HttpURLConnection)v8).setDoOutput(true);
((HttpURLConnection)v8).setRequestProperty("Referer", ”xxx.xxx.xxxx.xxx");
((HttpURLConnection)v8).setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
((HttpURLConnection)v8).setRequestProperty("Content-Length", v16.length());
((HttpURLConnection)v8).setRequestProperty("User-Agent", this.mUserAgent);
((HttpURLConnection)v8).setRequestProperty("X-Requested-With", "xmlHttpRequest");
((HttpURLConnection)v8).setInstanceFollowRedirects(false);
((HttpURLConnection)v8).connect();
修正済みアプリ その1:修正前のコード
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その1:修正後のコード
独自実装のTrustManagerやHostnameVerifierがなくなっ
ている
23
try {
URL v14 = new URL(url.split("¥¥?")[0]);
String v12 = new URL(url).getQuery();
v5 = v14.openConnection();
((HttpURLConnection)v5).setRequestMethod("POST");
((HttpURLConnection)v5).setDoOutput(true);
((HttpURLConnection)v5).setRequestProperty("Referer", ”xxx.xxx.xxxx.xxx");
((HttpURLConnection)v5).setRequestProperty("Content-Type", "application/x-www-
form-urlencoded");
((HttpURLConnection)v5).setRequestProperty("Content-Length", v12.length());
((HttpURLConnection)v5).setRequestProperty("User-Agent", this.mUserAgent);
((HttpURLConnection)v5).setRequestProperty("X-Requested-With",
"xmlHttpRequest");
((HttpURLConnection)v5).setInstanceFollowRedirects(false);
((HttpURLConnection)v5).connect();
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その2
某ファイナンス系アプリB
https://play.google.com/store/apps/details?id=xx.xxx.xxxx.xxxxx
すでに修正済み
24
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その2:修正前のコード 1/3
SSLSocketFactoryを呼び出している
25
public class a extends b {
public a(Context arg1, h arg2, URI arg3, List arg4) {
super(arg1, arg2, arg3, arg4);
}
protected Void a(Void[] arg9) {
HttpResponse v1;
Void v2 = null;
HttpPost v0 = new HttpPost(this.b);
HttpClient v3 = k.a();
try {
if(this.h > 0) {
v0.getParams().setIntParameter("http.connection.timeout", this.h);
v0.getParams().setIntParameter("http.socket.timeout", this.h);
}
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その2:修正前のコード 2/3
SSLSocketFactoryを継承して独自のTrustManagerを使
用している
26
public class k {
class a extends SSLSocketFactory {
private SSLContext a;
public a(KeyStore arg6) throws NoSuchAlgorithmException,
KeyManagementException, KeyStoreException,
UnrecoverableKeyException {
super(arg6);
this.a = SSLContext.getInstance("TLS");
this.a.init(null, new TrustManager[]{new l(this)}, null);
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その2:修正前のコード 3/3
独自実装のTrustManagerを実装している
27
class l implements X509TrustManager {
l(a arg1) {
this.a = arg1;
super();
}
public void checkClientTrusted(X509Certificate[] arg1, String arg2) throws
CertificateException {
}
public void checkServerTrusted(X509Certificate[] arg1, String arg2) throws
CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
Copyright©2015 JPCERT/CC All rights reserved.
修正済みアプリ その2:修正後のコード
独自実装のTrustManagerは使用しなくなっている
28
private Void c() {
HttpResponse v2_1;
HttpResponse v1;
Void v2 = null;
HttpPost v0 = new HttpPost(this.b);
DefaultHttpClient v3 = new DefaultHttpClient();
try {
if(this.h > 0) {
v0.getParams().setIntParameter("http.connection.timeout", this.h);
v0.getParams().setIntParameter("http.socket.timeout", this.h);
}
Copyright©2015 JPCERT/CC All rights reserved.
まとめ
SSL/TLSサーバ証明書の検証はバイパスしない
デバッグのためなら、リリース時は元に戻す
不用意にサンプルをコピペしない
—Exceptionは無視しない
—TrustManagerやHostnameVerifierを独自実装するなら不用
意なバイバスはしない
29
Copyright©2015 JPCERT/CC All rights reserved.
アプリの解析方法
30
Copyright©2015 JPCERT/CC All rights reserved.
ツール紹介:mitmproxy
mitmproxy
—http://mitmproxy.org/
インストール方法は
—Windows環境の場合、別途Pythonが必要
https://www.python.org/
31
pip install mitmproxy
Copyright©2015 JPCERT/CC All rights reserved.
ツール紹介:Fiddler
Fiddler
—http://www.telerik.com/fiddler
Androidアプリの通信をキャプチャするために設定を変更
する
—[Tools] > [Fiddler Options]
[HTTPS] > [Decrypt HTTPS traffic]
[Connections] > [Allow remote computers to connect]
32
Copyright©2015 JPCERT/CC All rights reserved.
ツール紹介:apktool
apktool
—https://code.google.com/p/android-apktool/
—apkファイルを解析するためのツール
—機能
リソースファイルのデコード
apkファイルの再構築
その他…
33
Copyright©2015 JPCERT/CC All rights reserved.
ツール紹介:dex2jar
dex2jar
—https://code.google.com/p/dex2jar/
—DEXファイルをJavaクラスファイルに変換するツール
34
Copyright©2015 JPCERT/CC All rights reserved.
ツール紹介:JD-GUI
JD-GUI
—http://jd.benow.ca/
—Javaクラスファイルをデコンパイルするツール
35
Copyright©2015 JPCERT/CC All rights reserved.
MalloDroid
AndroidアプリのSSL/TLSサーバ証明書検証の実装に問題
があるかどうかチェックしてくれるツール
—https://github.com/sfahl/mallodroid
必要なもの
—androguard
https://github.com/androguard/androguard
インストールに必要なもの
—https://code.google.com/p/androguard/wiki/Installation
36
Copyright©2015 JPCERT/CC All rights reserved.
DEMO
37
Copyright©2015 JPCERT/CC All rights reserved.
大事なことなので、もう一度
約36%のアプリに問題がある可能性
SSL/TLSサーバ証明書の検証はバイパスしない
デバッグのためなら、リリース時は元に戻す
不用意にサンプルをコピペしない
—Exceptionは無視しない
—TrustManagerやHostnameVerifierを独自実装するなら不用
意なバイバスはしない
38
Copyright©2015 JPCERT/CC All rights reserved.
参考情報
39
Copyright©2015 JPCERT/CC All rights reserved.
Androidアプリのセキュア設計・セキュアコーディングガ
イド
—https://www.jssec.org/report/securecoding.html
Android Pinning by Moxie Marlinspike
—https://github.com/moxie0/AndroidPinning
Finding Android SSL Vulnerabilities with CERT Tapioca
—https://www.cert.org/blogs/certcc/post.cfm?EntryID=204
Android apps that fail to validate SSL
—https://docs.google.com/spreadsheets/d/1t5GXwjw82Syun
ALVJb2w0zi3FoLRIkfGPc7AMjRF0r4/edit?usp=sharing
40

Más contenido relacionado

La actualidad más candente

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
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)JPCERT Coordination Center
 
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性JPCERT Coordination Center
 
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)JPCERT Coordination Center
 
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性JPCERT Coordination Center
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JPCERT Coordination Center
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)JPCERT Coordination Center
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性JPCERT Coordination Center
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)JPCERT Coordination Center
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見Yosuke HASEGAWA
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)Sen Ueno
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012Hiroshi Tokumaru
 

La actualidad más candente (20)

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)
 
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
OWASP ASVS と Cheat Sheet シリーズ (日本語版) のご紹介 (OSC2016Hokkaido)
 
MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性MySQL Connector/J における SQL インジェクションの脆弱性
MySQL Connector/J における SQL インジェクションの脆弱性
 
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
Apache ActiveMQにおける認証処理不備の脆弱性(AMQ-1272)
 
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
Android Platform の URLConnection に HTTP ヘッダインジェクションの脆弱性
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
 
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
CERT コーディングスタンダードご紹介 (OSC2017@Osaka)
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
Apache Sling におけるサービス運用妨害(無限ループ)の脆弱性
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
 
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解くDLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
 
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
 
CEH(Certified Ethical Hacker:認定ホワイトハッカー)のご紹介
CEH(Certified Ethical Hacker:認定ホワイトハッカー)のご紹介CEH(Certified Ethical Hacker:認定ホワイトハッカー)のご紹介
CEH(Certified Ethical Hacker:認定ホワイトハッカー)のご紹介
 
なぜ今、セキュリティ人材の育成が叫ばれているのか
なぜ今、セキュリティ人材の育成が叫ばれているのかなぜ今、セキュリティ人材の育成が叫ばれているのか
なぜ今、セキュリティ人材の育成が叫ばれているのか
 
【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介
【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介
【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介
 
CEH(認定ホワイトハッカー)公式トレーニングのご紹介
CEH(認定ホワイトハッカー)公式トレーニングのご紹介CEH(認定ホワイトハッカー)公式トレーニングのご紹介
CEH(認定ホワイトハッカー)公式トレーニングのご紹介
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介
CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介
CND(Certified Network Defender:認定ネットワークディフェンダー)のご紹介
 
CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介
CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介
CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介
 

Destacado

Amazon CloudFront TLS/SSL Seminar 20160804
Amazon CloudFront TLS/SSL Seminar 20160804Amazon CloudFront TLS/SSL Seminar 20160804
Amazon CloudFront TLS/SSL Seminar 20160804Hayato Kiriyama
 
AndroidからWebサービスを使う
AndroidからWebサービスを使うAndroidからWebサービスを使う
AndroidからWebサービスを使うMasafumi Terazono
 
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)Kenji Urushima
 
【さくらインターネット】簡単解説 SSLサーバ証明書とは?
【さくらインターネット】簡単解説 SSLサーバ証明書とは?【さくらインターネット】簡単解説 SSLサーバ証明書とは?
【さくらインターネット】簡単解説 SSLサーバ証明書とは?さくらインターネット株式会社
 
御社WEBサイトの訪問者に安全・安心を提供する方法
御社WEBサイトの訪問者に安全・安心を提供する方法御社WEBサイトの訪問者に安全・安心を提供する方法
御社WEBサイトの訪問者に安全・安心を提供する方法Netforest Inc.
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JPCERT Coordination Center
 
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONOWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONJun Matsumoto
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性JPCERT Coordination Center
 
これから始めるssl対策
これから始めるssl対策これから始めるssl対策
これから始めるssl対策Shohei Kobayashi
 
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
 
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLSqpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLSKenji Urushima
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたことSuzuki Masayuki
 

Destacado (13)

Amazon CloudFront TLS/SSL Seminar 20160804
Amazon CloudFront TLS/SSL Seminar 20160804Amazon CloudFront TLS/SSL Seminar 20160804
Amazon CloudFront TLS/SSL Seminar 20160804
 
AndroidからWebサービスを使う
AndroidからWebサービスを使うAndroidからWebサービスを使う
AndroidからWebサービスを使う
 
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
 
【さくらインターネット】簡単解説 SSLサーバ証明書とは?
【さくらインターネット】簡単解説 SSLサーバ証明書とは?【さくらインターネット】簡単解説 SSLサーバ証明書とは?
【さくらインターネット】簡単解説 SSLサーバ証明書とは?
 
御社WEBサイトの訪問者に安全・安心を提供する方法
御社WEBサイトの訪問者に安全・安心を提供する方法御社WEBサイトの訪問者に安全・安心を提供する方法
御社WEBサイトの訪問者に安全・安心を提供する方法
 
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性JBoss Application Server におけるディレクトリトラバーサルの脆弱性
JBoss Application Server におけるディレクトリトラバーサルの脆弱性
 
OWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCONOWASP ZAP(など)で挑む SECCON
OWASP ZAP(など)で挑む SECCON
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
 
これから始めるssl対策
これから始めるssl対策これから始めるssl対策
これから始めるssl対策
 
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...
 
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
 
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLSqpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
 
自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと自分よりも技術力の高い会社に入社して感じたこと
自分よりも技術力の高い会社に入社して感じたこと
 

Similar a デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」

ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADAビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADARiotaro OKADA
 
Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例OSSラボ株式会社
 
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデルシスコシステムズ合同会社
 
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptxお客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptxmkoda
 
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築cloudconductor
 
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けてOpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けてTakashi Yahata
 
細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威
細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威
細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威Noriaki Hayashi
 
「今、ヨーロッパのオープンソースがアツい!」 クラウドの構成管理を自動化する基盤CMDBuild
「今、ヨーロッパのオープンソースがアツい!」クラウドの構成管理を自動化する基盤CMDBuild「今、ヨーロッパのオープンソースがアツい!」クラウドの構成管理を自動化する基盤CMDBuild
「今、ヨーロッパのオープンソースがアツい!」 クラウドの構成管理を自動化する基盤CMDBuildOSSラボ株式会社
 
あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方
あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方
あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方オラクルエンジニア通信
 
【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築
【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築
【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築cloudconductor
 
DRONE BORG 第一回ドローンビジネス勉強会資料
DRONE BORG 第一回ドローンビジネス勉強会資料DRONE BORG 第一回ドローンビジネス勉強会資料
DRONE BORG 第一回ドローンビジネス勉強会資料DRONE BORG
 
HTML5が創り出す新たな世界
HTML5が創り出す新たな世界HTML5が創り出す新たな世界
HTML5が創り出す新たな世界lpijapan
 
クロスプラットフォーム開発を可能にするMonaca
クロスプラットフォーム開発を可能にするMonacaクロスプラットフォーム開発を可能にするMonaca
クロスプラットフォーム開発を可能にするMonacaMonaca
 
Otrsによるシステム運用管理の導入事例
Otrsによるシステム運用管理の導入事例Otrsによるシステム運用管理の導入事例
Otrsによるシステム運用管理の導入事例IO Architect Inc.
 
Internet Explorer 11 概要
Internet Explorer 11 概要Internet Explorer 11 概要
Internet Explorer 11 概要Yoshihisa Ozaki
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
KongHQ Summit Japan 2021
KongHQ Summit Japan 2021KongHQ Summit Japan 2021
KongHQ Summit Japan 2021Arshal Ameen
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Yuji Kanemoto
 

Similar a デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」 (20)

150726cmdbuild jtf2015
150726cmdbuild jtf2015150726cmdbuild jtf2015
150726cmdbuild jtf2015
 
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADAビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
ビルトイン・セキュリティのススメ Dev Days 2015 Tokyo - Riotaro OKADA
 
Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例
 
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
【Interop tokyo 2014】 ビッグデータを活用し、被害を予見! シスコの新たなセキュリティ運用モデル
 
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptxお客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
お客様からのセキュリティチェックを乗り越えるための SaaS のアプローチ.pptx
 
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
【マジセミ】クラウドオーケストレーションが描く明日からのシステム構築
 
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けてOpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
OpenID ConnectとSCIMによるエンタープライズでのID連携活用に向けて
 
細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威
細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威
細工された製品が突然牙をむく「サプライチェーン攻撃」の脅威
 
「今、ヨーロッパのオープンソースがアツい!」 クラウドの構成管理を自動化する基盤CMDBuild
「今、ヨーロッパのオープンソースがアツい!」クラウドの構成管理を自動化する基盤CMDBuild「今、ヨーロッパのオープンソースがアツい!」クラウドの構成管理を自動化する基盤CMDBuild
「今、ヨーロッパのオープンソースがアツい!」 クラウドの構成管理を自動化する基盤CMDBuild
 
あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方
あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方
あなたはどうデータを守る?クラウド・AI・自動化を使った、みえない脅威との戦い方
 
Ietf95 http2
Ietf95 http2Ietf95 http2
Ietf95 http2
 
【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築
【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築
【Interop Tokyo 2015】クラウドオーケストレーションと仮想データセンターが描く、明日からのシステム構築
 
DRONE BORG 第一回ドローンビジネス勉強会資料
DRONE BORG 第一回ドローンビジネス勉強会資料DRONE BORG 第一回ドローンビジネス勉強会資料
DRONE BORG 第一回ドローンビジネス勉強会資料
 
HTML5が創り出す新たな世界
HTML5が創り出す新たな世界HTML5が創り出す新たな世界
HTML5が創り出す新たな世界
 
クロスプラットフォーム開発を可能にするMonaca
クロスプラットフォーム開発を可能にするMonacaクロスプラットフォーム開発を可能にするMonaca
クロスプラットフォーム開発を可能にするMonaca
 
Otrsによるシステム運用管理の導入事例
Otrsによるシステム運用管理の導入事例Otrsによるシステム運用管理の導入事例
Otrsによるシステム運用管理の導入事例
 
Internet Explorer 11 概要
Internet Explorer 11 概要Internet Explorer 11 概要
Internet Explorer 11 概要
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
KongHQ Summit Japan 2021
KongHQ Summit Japan 2021KongHQ Summit Japan 2021
KongHQ Summit Japan 2021
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
 

Más de JPCERT Coordination Center

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~JPCERT Coordination Center
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』JPCERT Coordination Center
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルJPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説JPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説JPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義JPCERT Coordination Center
 
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習JPCERT Coordination Center
 

Más de JPCERT Coordination Center (8)

いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
いま改めて製品開発者の脆弱性対応について考える ~情報セキュリティ早期警戒パートナーシップを運用する調整機関の視点から~
 
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
WordBench東京 7月勉強会「夏のLT大会!」『WordPress とバックアップの話』
 
ソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデルソフトウェアセキュリティ保証成熟度モデル
ソフトウェアセキュリティ保証成熟度モデル
 
Android Secure Coding
Android Secure CodingAndroid Secure Coding
Android Secure Coding
 
Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説Javaセキュアコーディングセミナー東京第2回演習の解説
Javaセキュアコーディングセミナー東京第2回演習の解説
 
Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説Javaセキュアコーディングセミナー東京第4回演習の解説
Javaセキュアコーディングセミナー東京第4回演習の解説
 
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
 
Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習Javaセキュアコーディングセミナー東京第3回演習
Javaセキュアコーディングセミナー東京第3回演習
 

デブサミ2015 事例から学ぶAndroidアプリのセキュアコーディング「SSL/TLS証明書検証の現状と対策」

  • 2. Copyright©2015 JPCERT/CC All rights reserved. 自己紹介 1 熊谷 裕志 (くまがい ひろし) —情報流通対策グループ 解析チーム リードアナリスト —2011年4月からJPCERT/CCで脆弱性情報の分析やセキュ アコーディングの普及活動に携わる
  • 3. Copyright©2015 JPCERT/CC All rights reserved. 目次 話題になったニュース 現状 —約5000件のアプリを簡易調査 —アプリをピックアップしてその実装を見てみる 対策方法 —修正されたアプリの実装を見てみる アプリの解析 —ツール紹介 —デモ 参考情報 2
  • 4. Copyright©2015 JPCERT/CC All rights reserved. 2014年 SSL/TLSサーバ証明書検 証不備の話題 3
  • 5. Copyright©2015 JPCERT/CC All rights reserved. 9月 CERT/CC Androidアプリの脆弱性を調査公表 4 多くのAndroidアプリではSSL/TLSサーバ証明書を適切に 検証していないことがわかった —https://www.cert.org/blogs/certcc/post.cfm?EntryID=204 検証したアプリのリストが公開されており、現在も更新 されている —https://docs.google.com/spreadsheets/d/1t5GXwjw82Syun ALVJb2w0zi3FoLRIkfGPc7AMjRF0r4/edit?usp=sharing
  • 6. Copyright©2015 JPCERT/CC All rights reserved. 1月から12月までの間 国内では9件の脆弱性情報が公開 2014/10/23 JVN#27388160: — Android 版 「スマ保」における SSL/TLS サーバ証明書の検証不備の脆弱性 2014/09/25 JVN#48270605: — Yahoo!ボックス(Android版) における SSL サーバ証明書の検証不備の脆弱性 2014/09/22 JVN#04560253: — Android 版アプリ「ゆこゆこ」における SSL サーバ証明書の検証不備の脆弱性 2014/08/29 JVN#17637243: — Android 版アプリ Kindle における SSL サーバ証明書の検証不備の脆弱性 2014/08/14 JVN#27702217: — Android 版 Ameba における SSL サーバ証明書の検証不備の脆弱性 2014/07/30 JVN#72950786: — Android 版 Outlook.com における SSL サーバ証明書の検証不備の脆弱性 2014/06/18 JVN#10603428: — Android 版アプリ「JR東日本アプリ」における SSL サーバ証明書の検証不備の脆弱性 2014/03/17 JVN#16263849: — Android 版アプリ「出前館」における SSL サーバ証明書の検証不備の脆弱性 2014/02/26 JVN#48810179: — Android 版アプリ「デニーズ」における SSL サーバ証明書の検証不備の脆弱性 5
  • 7. Copyright©2015 JPCERT/CC All rights reserved. 現状 6
  • 8. Copyright©2015 JPCERT/CC All rights reserved. 調査内容 日本のGooglePlayで公開されている5307件のアプリを簡 易調査 —2015/01/27時点 —次のカテゴリの無料トップからアプリをピックアップ ビジネス、通信、ファイナンス、健康&フィットネス、ライ フスタイル、医療、仕事効率化、ショッピング、ソーシャル ネットワーク、ツール、交通 7
  • 9. Copyright©2015 JPCERT/CC All rights reserved. 調査内容 証明書検証の実装に問題がある可能性の判断 —X509TrustManagerをチェック checkServerTrustedメソッド等を空にしているか —HostnameVerifierをチェック verifyメソッドを常にtrueにしているか —ALLOW_ALL_HOSTNAME_VERIFIERをチェック 8 JSSEC セキュアコーディングガイド 5.4.3.3. 証明書検証を無効化する危険なコード (https://www.jssec.org/dl/android_securecoding.pdf)
  • 10. Copyright©2015 JPCERT/CC All rights reserved.9 危険なコード例
  • 11. Copyright©2015 JPCERT/CC All rights reserved. 調査結果 1930件のアプリに証明書検証不備の可能性 —ただし、あくまで簡易調査 証明書検証を無効にしているコードを含んでいるという意味 全てのアプリでこのコードが生きているかどうかは現時点で 未調査 10
  • 12. Copyright©2015 JPCERT/CC All rights reserved. カテゴリ別割合 11 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 各カテゴリにおける問題のコードを含むアプリの割合
  • 13. Copyright©2015 JPCERT/CC All rights reserved. アプリその1:実装その1 独自実装のTrustManagerを使用している 12 package xxxx.xxxx.xxxx.xxxx.xxxx.xxxx; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; class g implements X509TrustManager { g(f arg1) { this.a = arg1; super(); } public void checkClientTrusted(X509Certificate[] arg1, String arg2) { } public void checkServerTrusted(X509Certificate[] arg1, String arg2) { } public X509Certificate[] getAcceptedIssuers() { return null; } }
  • 14. Copyright©2015 JPCERT/CC All rights reserved. アプリその2:実装その2 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIE Rを使用して、どんなホスト名でも受け付けるようにし ている 13 h.a = new HttpPost(v0); h.a.setHeader("Content-Type", "image/jpeg"); h.a.setHeader("Accept-Language", "ja-jp"); h.a.setHeader("Accept-Encoding", "gzip, deflate"); h.a.setHeader("Proxy-Connection", "keep-alive"); h.a.setHeader("User-Agent", v1); KeyStore v0_1 = KeyStore.getInstance(KeyStore.getDefaultType()); v0_1.load(v2, ((char[])v2)); f v1_1 = new f(v0_1); ((SSLSocketFactory)v1_1).setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); SchemeRegistry v0_2 = new SchemeRegistry(); v0_2.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); v0_2.register(new Scheme("https", ((SocketFactory)v1_1), 443));
  • 15. Copyright©2015 JPCERT/CC All rights reserved. アプリその3:実装その1 このアプリも先ほど同様、独自実装のTrustManagerを使 用している 14 package xxxx.xxxx.xxxx.xxxx.xxxx; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; class xxxx.xxxx.xxxx.xxxx.xxxx.MySSLSocketFactory$1 implements X509TrustManager { xxxx.xxxx.xxxx.xxxx.xxxx.MySSLSocketFactory$1(MySSLSocketFactory arg1) { MySSLSocketFactory.this = arg1; super(); } public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }
  • 16. Copyright©2015 JPCERT/CC All rights reserved. アプリその4:実装その2 これも先ほどのアプリと同様に SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIE Rを使用してどんなホスト名でも受け付けるようにして いる 15 public HttpClient(StringBuilder _sb) throws Exception { super(); this.httpClient = new DefaultHttpClient(); this.httpContext = new BasicHttpContext(); this.stringBuilder = _sb; KeyStore v2 = KeyStore.getInstance(KeyStore.getDefaultType()); v2.load(null, null); MySSLSocketFactory v1 = new MySSLSocketFactory(v2); ((SSLSocketFactory)v1).setHostnameVerifier( SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); this.httpClient.getConnectionManager().getSchemeRegistry().register( new Scheme("https", ((SocketFactory) v1), 443));
  • 17. Copyright©2015 JPCERT/CC All rights reserved. その他 WebViewにおいて、SSL通信のエラーを無視してそのま ま処理を実行するようにしている 16 mWebView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } });
  • 18. Copyright©2015 JPCERT/CC All rights reserved. なぜ? 17
  • 19. Copyright©2015 JPCERT/CC All rights reserved. SSL/TLSサーバ証明書の検証をしていないと 中間者攻撃によって、HTTPS通信の 内容を盗聴や改ざんされてしまう 18
  • 20. Copyright©2015 JPCERT/CC All rights reserved. 対策方法は? 19
  • 21. Copyright©2015 JPCERT/CC All rights reserved.20
  • 22. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その1 某ファイナンス系アプリA —https://play.google.com/store/apps/details?id=xxx.xxxxx.xx xxxxx.xxxxxx すでに修正済み 古いバージョンではSSL/TLSサーバ証明書を検証してい なかった 21
  • 23. Copyright©2015 JPCERT/CC All rights reserved.22 xxx.xxxx.xxxxx.xxxx.ApiRequest$1 v12 = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; try { SSLContext v18 = SSLContext.getInstance("TLS"); v18.init(null, new TrustManager[]{v12}, null); ((HttpsURLConnection)v8).setSSLSocketFactory(v18.getSocketFactory()); ((HttpsURLConnection)v8).setSSLSocketFactory(v18.getSocketFactory()); ((HttpsURLConnection)v8).setHostnameVerifier(new HostnameVerifier() { public boolean verify(String string, SSLSession ssls) { return 1; } }); ((HttpURLConnection)v8).setRequestMethod("POST"); ((HttpURLConnection)v8).setDoOutput(true); ((HttpURLConnection)v8).setRequestProperty("Referer", ”xxx.xxx.xxxx.xxx"); ((HttpURLConnection)v8).setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); ((HttpURLConnection)v8).setRequestProperty("Content-Length", v16.length()); ((HttpURLConnection)v8).setRequestProperty("User-Agent", this.mUserAgent); ((HttpURLConnection)v8).setRequestProperty("X-Requested-With", "xmlHttpRequest"); ((HttpURLConnection)v8).setInstanceFollowRedirects(false); ((HttpURLConnection)v8).connect(); 修正済みアプリ その1:修正前のコード
  • 24. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その1:修正後のコード 独自実装のTrustManagerやHostnameVerifierがなくなっ ている 23 try { URL v14 = new URL(url.split("¥¥?")[0]); String v12 = new URL(url).getQuery(); v5 = v14.openConnection(); ((HttpURLConnection)v5).setRequestMethod("POST"); ((HttpURLConnection)v5).setDoOutput(true); ((HttpURLConnection)v5).setRequestProperty("Referer", ”xxx.xxx.xxxx.xxx"); ((HttpURLConnection)v5).setRequestProperty("Content-Type", "application/x-www- form-urlencoded"); ((HttpURLConnection)v5).setRequestProperty("Content-Length", v12.length()); ((HttpURLConnection)v5).setRequestProperty("User-Agent", this.mUserAgent); ((HttpURLConnection)v5).setRequestProperty("X-Requested-With", "xmlHttpRequest"); ((HttpURLConnection)v5).setInstanceFollowRedirects(false); ((HttpURLConnection)v5).connect();
  • 25. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その2 某ファイナンス系アプリB https://play.google.com/store/apps/details?id=xx.xxx.xxxx.xxxxx すでに修正済み 24
  • 26. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その2:修正前のコード 1/3 SSLSocketFactoryを呼び出している 25 public class a extends b { public a(Context arg1, h arg2, URI arg3, List arg4) { super(arg1, arg2, arg3, arg4); } protected Void a(Void[] arg9) { HttpResponse v1; Void v2 = null; HttpPost v0 = new HttpPost(this.b); HttpClient v3 = k.a(); try { if(this.h > 0) { v0.getParams().setIntParameter("http.connection.timeout", this.h); v0.getParams().setIntParameter("http.socket.timeout", this.h); }
  • 27. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その2:修正前のコード 2/3 SSLSocketFactoryを継承して独自のTrustManagerを使 用している 26 public class k { class a extends SSLSocketFactory { private SSLContext a; public a(KeyStore arg6) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { super(arg6); this.a = SSLContext.getInstance("TLS"); this.a.init(null, new TrustManager[]{new l(this)}, null);
  • 28. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その2:修正前のコード 3/3 独自実装のTrustManagerを実装している 27 class l implements X509TrustManager { l(a arg1) { this.a = arg1; super(); } public void checkClientTrusted(X509Certificate[] arg1, String arg2) throws CertificateException { } public void checkServerTrusted(X509Certificate[] arg1, String arg2) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }
  • 29. Copyright©2015 JPCERT/CC All rights reserved. 修正済みアプリ その2:修正後のコード 独自実装のTrustManagerは使用しなくなっている 28 private Void c() { HttpResponse v2_1; HttpResponse v1; Void v2 = null; HttpPost v0 = new HttpPost(this.b); DefaultHttpClient v3 = new DefaultHttpClient(); try { if(this.h > 0) { v0.getParams().setIntParameter("http.connection.timeout", this.h); v0.getParams().setIntParameter("http.socket.timeout", this.h); }
  • 30. Copyright©2015 JPCERT/CC All rights reserved. まとめ SSL/TLSサーバ証明書の検証はバイパスしない デバッグのためなら、リリース時は元に戻す 不用意にサンプルをコピペしない —Exceptionは無視しない —TrustManagerやHostnameVerifierを独自実装するなら不用 意なバイバスはしない 29
  • 31. Copyright©2015 JPCERT/CC All rights reserved. アプリの解析方法 30
  • 32. Copyright©2015 JPCERT/CC All rights reserved. ツール紹介:mitmproxy mitmproxy —http://mitmproxy.org/ インストール方法は —Windows環境の場合、別途Pythonが必要 https://www.python.org/ 31 pip install mitmproxy
  • 33. Copyright©2015 JPCERT/CC All rights reserved. ツール紹介:Fiddler Fiddler —http://www.telerik.com/fiddler Androidアプリの通信をキャプチャするために設定を変更 する —[Tools] > [Fiddler Options] [HTTPS] > [Decrypt HTTPS traffic] [Connections] > [Allow remote computers to connect] 32
  • 34. Copyright©2015 JPCERT/CC All rights reserved. ツール紹介:apktool apktool —https://code.google.com/p/android-apktool/ —apkファイルを解析するためのツール —機能 リソースファイルのデコード apkファイルの再構築 その他… 33
  • 35. Copyright©2015 JPCERT/CC All rights reserved. ツール紹介:dex2jar dex2jar —https://code.google.com/p/dex2jar/ —DEXファイルをJavaクラスファイルに変換するツール 34
  • 36. Copyright©2015 JPCERT/CC All rights reserved. ツール紹介:JD-GUI JD-GUI —http://jd.benow.ca/ —Javaクラスファイルをデコンパイルするツール 35
  • 37. Copyright©2015 JPCERT/CC All rights reserved. MalloDroid AndroidアプリのSSL/TLSサーバ証明書検証の実装に問題 があるかどうかチェックしてくれるツール —https://github.com/sfahl/mallodroid 必要なもの —androguard https://github.com/androguard/androguard インストールに必要なもの —https://code.google.com/p/androguard/wiki/Installation 36
  • 38. Copyright©2015 JPCERT/CC All rights reserved. DEMO 37
  • 39. Copyright©2015 JPCERT/CC All rights reserved. 大事なことなので、もう一度 約36%のアプリに問題がある可能性 SSL/TLSサーバ証明書の検証はバイパスしない デバッグのためなら、リリース時は元に戻す 不用意にサンプルをコピペしない —Exceptionは無視しない —TrustManagerやHostnameVerifierを独自実装するなら不用 意なバイバスはしない 38
  • 40. Copyright©2015 JPCERT/CC All rights reserved. 参考情報 39
  • 41. Copyright©2015 JPCERT/CC All rights reserved. Androidアプリのセキュア設計・セキュアコーディングガ イド —https://www.jssec.org/report/securecoding.html Android Pinning by Moxie Marlinspike —https://github.com/moxie0/AndroidPinning Finding Android SSL Vulnerabilities with CERT Tapioca —https://www.cert.org/blogs/certcc/post.cfm?EntryID=204 Android apps that fail to validate SSL —https://docs.google.com/spreadsheets/d/1t5GXwjw82Syun ALVJb2w0zi3FoLRIkfGPc7AMjRF0r4/edit?usp=sharing 40