SlideShare une entreprise Scribd logo
1  sur  17
1

スマホアプリのSSLサーバ
証明書の検証不備について

谷口 隼祐
2

自己紹介

最近行った、牛久大仏
がんばれ!茨城県
なぜ、今回OWASP Nightで話そうと
思ったのか?

3



とあるアプリの脆弱性がJVN公表された際のコメントがきっかけ



SSL通信周りの脆弱性判断は、判断のブレが大きい印象



現状では「SSLを使ってない=脆弱性」とは言い難い(個人見解)



ただし、スマホ周りを取り巻く環境の変化によって、脆弱性判断
も変わっていくかもしれない…



この発表が、脆弱性判断の議論の材料になればいいな
4

いざ勢いで申し込んだものの

_人人人人人人人人人人人_
> 大御所に挟まれてる! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

_人人人人人人人人人人人_
> まさかのギリギリ補欠!!
<
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
5

SSLで通信しないことは脆弱性か?



SSLは「お・も・て・な・し」



現状では、SSLで通信しないことだけを以って脆弱性とはいえない



SSLで通信の安全性を高めるか否かは、サービス提供者のポリシー
次第 ⇒ 脆弱性対策の実施とはまた別の話



利用者としては、より安全なサービスを使いたいので、サービス
提供者は積極的にセキュリティポリシーを公開するとよいと思う
ここでの脆弱性の定義は、「情報セキュリティ早期警戒パートナーシップガイド
ライン」に準拠することにします。
定義の詳細は、下記ガイドラインを参照ください。
http://www.ipa.go.jp/files/000002991.pdf
では、脆弱性と判断できる例って?
(ウェブサイト編)



セキュリティポリシーに違反している




6

ポリシーでSSLで通信するといいつつ、実際には平文通信

SSLが適切に使われていない


サーバ証明書の有効期限が切れている



オレオレ証明書を使っている



フォームの送信先はSSLを使っている(https)が、フォームの設置
ページにはSSLを使っていない(http)

[ご参考]
HTTPSを使う際に入力フォームのページからそうしないといけない理由はなんですか- QA@IT
http://qa.atmarkit.co.jp/q/2028
では、脆弱性と判断できる例って?
(ソフトウェア編)



セキュリティポリシーに違反している




7

ポリシーでSSLで通信するといいつつ、実際には平文通信

SSLが適切に使われていない


ソフトウェア側でSSLサーバ証明書を適切に検証していない


SSL通信に暗号化のみを求めて、当該処理を実装している可能性



開発時やデバッグ用に一時的にオレオレ証明書を許可していたのを忘
れてリリースしてしまった可能性

接続先のサーバの正当性を確認しなければ、安全な通信
は実現できない
8

SSLサーバ証明書の検証不備とは



不正な SSL サーバ証明書を使用
しているサーバであっても警告
を出さずに接続してしまう問題



中間者攻撃 による通信の盗聴や
改ざんなどが行なわれても、
ユーザが気づけない

出典:JVNDB-2012-000037 - JVN iPedia - 脆弱性対策情報データベー
ス
http://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000037.html
9

JVN公表されたアプリ
公開日

JVN番号

アプリ名

アプリ種類

2013/08/19

JVN#75084836

Yahoo!ショッピング

Androidアプリ

2013/08/19

JVN#68156832

ヤフオク!

iOS/Androidアプリ

2013/06/07

JVN#39218538

ピザハット公式アプリ Androidアプリ

2012/05/25

JVN#39707339

Opera

2012/04/26

JVN#82029095

spモードメールアプリ Androidアプリ

2008/04/23

JVN#76788395

mylo COM-2



ブラウザ

組み込みブラウザ

JVN公表されたアプリは対策済み


ベンダが対策してくれたからこそ、JVN公表できている



ベンダ自身が届出をしてくることもある


ベンダ自身が届出をしたのかどうかは、IPAからのメールで判別可能
10

検証環境



スマートフォン


Nexus7(Android4.3)



iPhone5s(iOS7.0.3)

プロキシ(ノートPC)経由で無線LAN接続する



ノートPC


Fiddler

リモートからのFiddlerへのアクセスを許可
HTTPSをキャプチャする
11

アプリの挙動(証明書検証不備)



キャプチャした通信に、HTTPS通信が混じっている



エラーが発生せずに、いつも通りにアプリが使える
12

アプリの挙動(証明書エラー)



証明書に関するエラーを表示する


アプリ起動時に証明書に関するエラー
メッセージを表示し、アプリを終了する



証明書に関するエラーメッセージを表示し、
アクセスするか否かを利用者に選択させる
13

アプリの挙動(その他エラー)


証明書に関するエラーではないものの、通信処理にエラーが発
生した旨をメッセージを表示する


アプリ起動時にエラーメッセージを表示し、アプリを終了する



SSL通信のページのみ表示されない
14

検証した結果



証明書の検証に不備のあるアプリ




約30アプリ中、2アプリに証明書の検証不備があった

証明書を検証するアプリ


証明書を検証し、問題があればエラーメッセージを出すアプリは多いものの、
証明書に問題があることを通知するアプリは少なかった



エラーメッセージの内容によっては、電波が悪かったり、サーバメンテナンス
等の問題と捉えられかねないものもあった

(攻撃は防ぐことはできているが)利用者は攻撃されている可能性に気
づけない。メッセージ内容はこれでいいのか?
15

スマホアプリを取り巻く状況



公衆無線LANサービスの利用が一般的になってきた




信用のおけない無線LANアクセスポイントに接続するリスクが増えた

スマホアプリにはアドレスバーがないものが多い





利用者が能動的に接続先や接続プロトコルを確かめることが困難である
利用しているスマホアプリを信用するしかない

常時SSLを提供するサービスが増えてきた


そのようなサービス用のクライアントアプリは対応が必須

冒頭で、SSLは「お・も・て・な・し」と言いましたが、こと
スマホアプリにおいては、必須になっていくかもしれません
16

ご参考

出典:ソニーデジタルネットワークアプリケーションズ株式会社
Android アプリ脆弱性調査レポート 2013年10月版(pdf)
http://www.sonydna.com/sdna/solution/android_vulnerability_report_201310.pdf
17

まとめ



SSLを使用するならば、適切に使用しましょう



スマホアプリを取り巻く状況を鑑み、積極的にSSLを使用してい
きましょう



証明書に関するエラーを表示する際には、どのようなメッセー
ジがよいのか意見募集中


利用者が安全でない環境でネットワーク接続している可能性を伝えるとよ
い?それとも、単純にエラーが出た旨だけ伝えるほうがよい?

って今日の話、1年以上前に徳丸さんが日記にほぼ書いてますやん
orz
スマートフォンアプリケーションでSSLを使わないのは脆弱性か | 徳丸浩
の日記
http://blog.tokumaru.org/2012/02/is-smartphone-application-without-ssl.html

Contenu connexe

Tendances

initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 

Tendances (20)

CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみた
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作
 
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
DynamoDBによるソーシャルゲーム実装 How To
DynamoDBによるソーシャルゲーム実装 How ToDynamoDBによるソーシャルゲーム実装 How To
DynamoDBによるソーシャルゲーム実装 How To
 
OAuth 2.0の概要とセキュリティ
OAuth 2.0の概要とセキュリティOAuth 2.0の概要とセキュリティ
OAuth 2.0の概要とセキュリティ
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 

En vedette

En vedette (9)

脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
 
OpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルOpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクル
 
Fiddler Scriptデモ
Fiddler ScriptデモFiddler Scriptデモ
Fiddler Scriptデモ
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
今から始めるFiddler script
今から始めるFiddler script今から始めるFiddler script
今から始めるFiddler script
 
今更聞けないOAuth2.0
今更聞けないOAuth2.0今更聞けないOAuth2.0
今更聞けないOAuth2.0
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
 

スマホアプリのSSLサーバ証明書の検証不備について