3月23日JSSEC セキュアコーディングデイに行ってきた!その内容をメモメモ
ちなみに会場では、
Android アプリのセキュア設計・セキュアコーディングガイド
https://www.jssec.org/dl/android_securecoding.pdf
の本が配られた
■あいさつ
・内容紹介
■Windows10MobileのセキュリティとAzure連携アプリにおけるセキュリティ
・自己紹介
・アジェンダ
マイクロソフトのミッションと日本市場におけるコミットメント
Mobile
Azure
・マイクロソフトのミッションと日本市場におけるコミットメント
ビルゲイツが掲げたミッション家庭にコンピューターはもう達成した
クラウド
Windows10
日本マイクロソフト
喜んで→Wordpressを使ってもらうハンズオンセミナー
プロダクティビティ
機械学習
Windows10
→あとで公開
・Windows10+モバイル
プラットフォームでセキュリティを確保する
Windows10強化ポイント4つ
1.Windows as a Service(10分の1くらい)
XP,7,8,10いままでは1つのOSを時間をかけて
Windowsもクラウドのように:メジャーを1回、マイナー2回バージョンアップ
WaaSと呼んでいる
Windows10・・・ワンコア
2.3.セキュリティとマネジメント
ポイント:Azure Active Directory
4.UWP
あらゆるデバイス、1つの開発プラットフォーム
セキュリティ
さよならパスワード!持ち出し禁止はもう古い!
次世代型認証
Hello,passport
盗まれたデータも安心
レッドストーンの中にエンタープライズデータプロテクション
マルウェアの侵入を許さない
Microsoft Passport
Azure Active Directory:Office365の認証基盤
→TPM
Windows Hello:生体認証
顔認証によるモバイル
乱数による本人確認
虹彩、指紋も
エンタープライズデータ保護
EDPで暗号化
端末から出て行ったデータも
モバイル&クラウドのデバイス管理が充実
MDMの機構
Azure Active Directoryに参加するとオンプレミスと併合して管理できる
ストアで配信
→企業内で配布:Business Store
要件が2つあるらしい(ごめん、メモれなかった)
ユニバーサル ウィンドウズ プラットフォーム(UWP)
・すべてのクライアントOSを共通化
ほろれんず、XBOXも
・Windows One Core
・ほろれんず 3000ドルとかするが、エミュレーターが出る
・れすぽんしぶる、あだぷてぃぶ、てーらーど
れすぽんしぶる:変わる
あだぷてぃぶ:IF文で切り替える→UWPはこれXAMLも
てーらーど:デバイスにかすたまいず
・こんてぃにゅー(Continuum)
Microsoft Azureとの連携におけるセキュリティ
・世界最大のインフラ
・コンピューティング Webサービス、PHP
・IaaS:Linux30%
基盤として使える
・Mobile Apps:MBaaS
・Azureのポータルサイト
→アクセスすると、電話かかってくるってこともできる
・データセキュリティ
ソーシャルID,Active Directory
Microsoft Azure Active Directoryとの連携
・UWPプッシュ通知アーキテクチャ
まとめ
・Windows10モバイルはプラットフォームでセキュリティ確保
・アプリのコーディングはシンプルにセキュア可が可能
ホワイトペーパー
■Androidアプリと鍵管理―これからの鍵管理の話をしよう
・自己紹介
・あじゃんだ
鍵管理のおさらい
Android6.0の鍵管理
そのさき
・鍵管理のおさらい
暗号技術って何のために必要
暗号技術使ってますか?
・使い際には、どんなことに気をつける
正しいアルゴリズムを使用する
鍵を安全に扱う
・参考:正しいアルゴリズムを使用する
→政府機関;推奨するアルゴリズムのリストを出している
・鍵を安全に扱う
ライフサイクル:各フェーズで安全に
・どこで使用するか(暗号処理)
ソフトウェア耐タンパ
ハードウェア耐たんぱ:TEE,TPM
・誰が使用するか(使用制限)
アプリ単位
機能単位
ユーザー単位
・どこに保存するか
記憶による保護(ユーザーさんに覚えてもらう)
APKファイルに埋め込み
ファイルに保存:アクセス権
ハードウェアによる保護
・暗号処理、保存
費用もきになる
使用制限
やっぱパスワード?実装大丈夫
・こんなニュースも
ルート化マルウェアのリスクもゼロではない!!
・安心してください
Android Key Storeがありますよ!
・Android Key Store
鍵の管理
対応アルゴリズムの拡張
ライフサイクルにあてはめると・・
・特徴
鍵ごとの使用方法期限制限
暗号ライブラリとして使用可能
鍵使用時のユーザー認証
ハードウェアによる保護:注意必要
・鍵ごとの使用方法・制限・期限
keyProtection/KeyGenParameterSpec
・暗号ライブラリとして使用可能
AES,HMAC、RSA(強度高い)
→アルゴリズムの充実
・鍵使用時のユーザー認証
鍵を使用する毎に毎回認証する
一定時間
・指紋認証による鍵の使用制限
ログインに使用
前提条件
指紋認証機能が付いている
画面ロックが設定されている
指紋が登録されている
処理の流れ
準備
さいふぁーおぶいぇくとにキー
認証の開始
暗号処理
・FingerPrint Architecture
プロセス3段階
・注意事項
鍵の無効化 結びついたものにあらたに追加、むすびつき0
→考慮して実装
指紋認証の弱い点を考慮する
指紋認証だけに頼らない
・画面ロックによる鍵の使用制限
プログラム 指紋認証との違い
前提
有効時間指定
認証処理との開始
GateKeeper Architecture
AndroidKeyStoreにおける鍵のハードウェア保護
・ハードウェア保護TEE
・可用性は
Android Nの追加機能
・Key Attestation
生成した鍵がハードウェアで守られていることを、第三者が検証できる仕組み
証明書で検証
ふぁいど
・On-body detectiom
ユーザーが端末を携帯している間は、鍵の仕様を有効に保つ
・鍵の有効性の制限(指紋認証)
・おわりに
鍵管理、暗号処理はAndroidKeyStoreで行うことが一般的になるかもしれません。
■iosアプリのセキュアコーディング入門
・自己紹介(SRAのひと)
・iosの安全神話
ほん:ほとんど見当たらない。セキュア開発の話題も
背景
iosは安全というイメージ
Androidが悪目立ちしていた(している)
→「Androidは危ない」というニュース
Androidのシェア多い→攻撃ターゲットになること多い
→Appleが審査してるから安全なんでしょ?
→AppStoreの審査は脆弱性診断ではない
・AppStoreの審査は脆弱性診断ではない
迷惑アプリ、既知のウィルスは積極的に排除
App Store Review Guideline
脆弱性についての記載はない
・iosの脆弱性報告数は増加傾向
プラットフォーム別でMacOSとiosでわんつーふにっしゅ
Charlie Miller事件
わざと脆弱性を持つアプリを作って提出したら審査通った
XcodeGhost
改造版Xcodeがいきわたった。コアサービスの一部がバックドア
→iosは安全というイメージは捨てたほうがいい
・アプリの安全性は開発者の責任
appleおセキュアコーディングガイド
appleのSecure Cording Guide
iosだけではないが。日本語版もある
→iosのAPには落とし穴がたくさんある
iosアプリのぜい弱性の多くは
APIの適切でない選択
APIの危険な使い方
に原因
→APIの特性を理解したうえで、安全を意識した開発が不可欠
・iosアプリのセキュアコーディング
本日のトピックス
アプリ間連携
HTTPS通信のサーバ証明書検証
・アプリ間連携
iosでのアプリ間連携
Custom URL Scheme
Pasteboard
の2つを今日は取り上げる(ほかもある)
・Custom URL Scheme
URLの文字列を相手方アプリに渡す
URLスキームをOSに登録
URLを書いてコールする
注意点1:
どんなアプリから呼び出される可能性もある
→わるいやつからも!
呼び出した人チェック
引数チェック→場合によれば無効化
handleOpenURLは使わないほうがよい→自分を呼び出した人が分からないから
注意点2:
URLスキームハイジャッキング
同じ名前で登録された時、なにを呼び出すかわからない(定義されていない)
→他のアプリが横取り!
・Pasteboard
コピー&ペーストで使われる、あれ!
System PasteBoardとApp pasteboard
うっかり、systempasteboardのインスタンスを作って。みんなで共有してしまう
自作のアプリ間でデータ共有するときはAppPasteboardを使うべき
→ただし、7より前では仕様違う
他人のアプリとの共有はpasteboard以外を使うこと考える
ユーザーにコピー、切り通りされたくない箇所では、コンテキストメニューから項目を消してしまおう
HTTPS通信時のサーバー証明書検証
・中間者攻撃(Man-in-the-middle attack)
Wifiルーターが乗っ取られた場合
・ios sdkで用意されている代表的な通信系
NSURLConnection
NSURLSession
Webview
→バイパスするコードがある
チャレンジを呼ぶ前に、バイパスするようによんでしまう
リクエストにYES
→非公開なので使わない(ググると見つかるけど)
NSURLSession
通信を確立:ちゃれんじ:くれでんしゃるを自分で作る→送られたの無視
webView
おなじものとおる
wkwebview
やはりおなじことできる
・なぜバイパスコードを書いてしまうのか
デバッグにおれおれ証明書を使うこと多い
→回避のため
→検証用のコードがリリース版に入らないように
この際、買ってしまう。無料の証明書など
・しかし、こんなケースも
サードパーティ製広告モジュールの脆弱性
・iosセキュリティ関連書籍の紹介
Hacking and securing iOS Applications
マニアック?ペネトレーションテスト
ios Application Security
せんげつでた。9まで対応
■事例で学ぶセキュアコーディング
・自己紹介
・脆弱性診断とは
セキュリティ上の問題個所があるかどうかを調べること
・スマートフォンアプリの診断
Androidアプリ
iosアプリ
ゲームチート診断
→ゲームアプリ多い
最近のゲーム:ネットワーク使う→チートされると、金銭的影響、DOS攻撃
→チート診断重要
Android
WebView
クロスサイト、ローカルファイル、jS
SSL
デバッグログ
SDカード
データ共有機能アクセス制御
iosも基本はAndroidと同じ
SDカードは対象外だけど
ゲームチート
ゲームを優位に進めたりバランスを崩してしまう問題
課金回避
レアアイテムの取得
ステータス、スコア、データ改ざん
制約の回避
なりすまし
・診断環境
プロキシ
Burp Suite
端末とサーバー感の通信内容を確認するために使用
root化した端末
iptables等を使用して端末の通信をburpに飛ばす
JEB Androidアプリ でこんぱいら
apkファイルの静的解析のために使用
APIが公開されている
Javaやpythonでextension作成可能
dec2jar
にこらすさんが作ってる
apktool
apkファイルをでコードしたり再ビルドするために使用
IDA(あいだ)デバッガ
androidアプリの動的解析をするために使用
ILSpy(あいえるすぱい)
.netアプリでこんぱいら
unityアプリ→最近のゲーム
情報漏えい
事例1:恋愛ゲーム
悪意あるアプリにより情報漏えい
webViewを使用
intentで受け取ったURLをWebViewに読み込ませる機能
intentを受け取るアクティビティは公開されている
→ローカルファイルにアクセスできないようにした・・・
SSLサーバー証明書検証不備
事例2:
Unityで作られている
API通信でサーバーとデータやり取り
通信部分は.NETで実装
どんなサーバー証明書でもtrueという実装
ショッピング系アプリ
一部の通信でサーバー証明書の検証無視
→サードパーティ製のライブラリの中で
→Githubで公開:先週確認したら、まだそのまま(無視)
他の部分では、検証をちゃんとしている
パラメータ改ざん
事例3:
ゲーム優位に
スコア変更など→リクエストを改ざん
アイテム使用時の処理の流れ→レスポンスのOK,NGを変える
改ざんチェックのバイパス
事例:
リクエストにハッシュを付加して改ざん防止
ハッシュはsha256
簡単にロジックが判明(ヒント存在)
root化検知のバイパス
事例:
root化した端末では起動できないように制限をかけているが
分かりやすいクラス名、メソッド名
→これらクラス、メソッドをバイパスするだけで制限を無効化
addJavascriptinterface
サーバー証明書検証不備とおないくらい
まとめ
・いまだに作りこむことが多い英訳性
サーバー証明書検証不備
セキュアコーディングガイドを熟読しよう!
ちなみに会場では、
Android アプリのセキュア設計・セキュアコーディングガイド
https://www.jssec.org/dl/android_securecoding.pdf
の本が配られた
■あいさつ
・内容紹介
■Windows10MobileのセキュリティとAzure連携アプリにおけるセキュリティ
・自己紹介
・アジェンダ
マイクロソフトのミッションと日本市場におけるコミットメント
Mobile
Azure
・マイクロソフトのミッションと日本市場におけるコミットメント
ビルゲイツが掲げたミッション家庭にコンピューターはもう達成した
クラウド
Windows10
日本マイクロソフト
喜んで→Wordpressを使ってもらうハンズオンセミナー
プロダクティビティ
機械学習
Windows10
→あとで公開
・Windows10+モバイル
プラットフォームでセキュリティを確保する
Windows10強化ポイント4つ
1.Windows as a Service(10分の1くらい)
XP,7,8,10いままでは1つのOSを時間をかけて
Windowsもクラウドのように:メジャーを1回、マイナー2回バージョンアップ
WaaSと呼んでいる
Windows10・・・ワンコア
2.3.セキュリティとマネジメント
ポイント:Azure Active Directory
4.UWP
あらゆるデバイス、1つの開発プラットフォーム
セキュリティ
さよならパスワード!持ち出し禁止はもう古い!
次世代型認証
Hello,passport
盗まれたデータも安心
レッドストーンの中にエンタープライズデータプロテクション
マルウェアの侵入を許さない
Microsoft Passport
Azure Active Directory:Office365の認証基盤
→TPM
Windows Hello:生体認証
顔認証によるモバイル
乱数による本人確認
虹彩、指紋も
エンタープライズデータ保護
EDPで暗号化
端末から出て行ったデータも
モバイル&クラウドのデバイス管理が充実
MDMの機構
Azure Active Directoryに参加するとオンプレミスと併合して管理できる
ストアで配信
→企業内で配布:Business Store
要件が2つあるらしい(ごめん、メモれなかった)
ユニバーサル ウィンドウズ プラットフォーム(UWP)
・すべてのクライアントOSを共通化
ほろれんず、XBOXも
・Windows One Core
・ほろれんず 3000ドルとかするが、エミュレーターが出る
・れすぽんしぶる、あだぷてぃぶ、てーらーど
れすぽんしぶる:変わる
あだぷてぃぶ:IF文で切り替える→UWPはこれXAMLも
てーらーど:デバイスにかすたまいず
・こんてぃにゅー(Continuum)
Microsoft Azureとの連携におけるセキュリティ
・世界最大のインフラ
・コンピューティング Webサービス、PHP
・IaaS:Linux30%
基盤として使える
・Mobile Apps:MBaaS
・Azureのポータルサイト
→アクセスすると、電話かかってくるってこともできる
・データセキュリティ
ソーシャルID,Active Directory
Microsoft Azure Active Directoryとの連携
・UWPプッシュ通知アーキテクチャ
まとめ
・Windows10モバイルはプラットフォームでセキュリティ確保
・アプリのコーディングはシンプルにセキュア可が可能
ホワイトペーパー
■Androidアプリと鍵管理―これからの鍵管理の話をしよう
・自己紹介
・あじゃんだ
鍵管理のおさらい
Android6.0の鍵管理
そのさき
・鍵管理のおさらい
暗号技術って何のために必要
暗号技術使ってますか?
・使い際には、どんなことに気をつける
正しいアルゴリズムを使用する
鍵を安全に扱う
・参考:正しいアルゴリズムを使用する
→政府機関;推奨するアルゴリズムのリストを出している
・鍵を安全に扱う
ライフサイクル:各フェーズで安全に
・どこで使用するか(暗号処理)
ソフトウェア耐タンパ
ハードウェア耐たんぱ:TEE,TPM
・誰が使用するか(使用制限)
アプリ単位
機能単位
ユーザー単位
・どこに保存するか
記憶による保護(ユーザーさんに覚えてもらう)
APKファイルに埋め込み
ファイルに保存:アクセス権
ハードウェアによる保護
・暗号処理、保存
費用もきになる
使用制限
やっぱパスワード?実装大丈夫
・こんなニュースも
ルート化マルウェアのリスクもゼロではない!!
・安心してください
Android Key Storeがありますよ!
・Android Key Store
鍵の管理
対応アルゴリズムの拡張
ライフサイクルにあてはめると・・
・特徴
鍵ごとの使用方法期限制限
暗号ライブラリとして使用可能
鍵使用時のユーザー認証
ハードウェアによる保護:注意必要
・鍵ごとの使用方法・制限・期限
keyProtection/KeyGenParameterSpec
・暗号ライブラリとして使用可能
AES,HMAC、RSA(強度高い)
→アルゴリズムの充実
・鍵使用時のユーザー認証
鍵を使用する毎に毎回認証する
一定時間
・指紋認証による鍵の使用制限
ログインに使用
前提条件
指紋認証機能が付いている
画面ロックが設定されている
指紋が登録されている
処理の流れ
準備
さいふぁーおぶいぇくとにキー
認証の開始
暗号処理
・FingerPrint Architecture
プロセス3段階
・注意事項
鍵の無効化 結びついたものにあらたに追加、むすびつき0
→考慮して実装
指紋認証の弱い点を考慮する
指紋認証だけに頼らない
・画面ロックによる鍵の使用制限
プログラム 指紋認証との違い
前提
有効時間指定
認証処理との開始
GateKeeper Architecture
AndroidKeyStoreにおける鍵のハードウェア保護
・ハードウェア保護TEE
・可用性は
Android Nの追加機能
・Key Attestation
生成した鍵がハードウェアで守られていることを、第三者が検証できる仕組み
証明書で検証
ふぁいど
・On-body detectiom
ユーザーが端末を携帯している間は、鍵の仕様を有効に保つ
・鍵の有効性の制限(指紋認証)
・おわりに
鍵管理、暗号処理はAndroidKeyStoreで行うことが一般的になるかもしれません。
■iosアプリのセキュアコーディング入門
・自己紹介(SRAのひと)
・iosの安全神話
ほん:ほとんど見当たらない。セキュア開発の話題も
背景
iosは安全というイメージ
Androidが悪目立ちしていた(している)
→「Androidは危ない」というニュース
Androidのシェア多い→攻撃ターゲットになること多い
→Appleが審査してるから安全なんでしょ?
→AppStoreの審査は脆弱性診断ではない
・AppStoreの審査は脆弱性診断ではない
迷惑アプリ、既知のウィルスは積極的に排除
App Store Review Guideline
脆弱性についての記載はない
・iosの脆弱性報告数は増加傾向
プラットフォーム別でMacOSとiosでわんつーふにっしゅ
Charlie Miller事件
わざと脆弱性を持つアプリを作って提出したら審査通った
XcodeGhost
改造版Xcodeがいきわたった。コアサービスの一部がバックドア
→iosは安全というイメージは捨てたほうがいい
・アプリの安全性は開発者の責任
appleおセキュアコーディングガイド
appleのSecure Cording Guide
iosだけではないが。日本語版もある
→iosのAPには落とし穴がたくさんある
iosアプリのぜい弱性の多くは
APIの適切でない選択
APIの危険な使い方
に原因
→APIの特性を理解したうえで、安全を意識した開発が不可欠
・iosアプリのセキュアコーディング
本日のトピックス
アプリ間連携
HTTPS通信のサーバ証明書検証
・アプリ間連携
iosでのアプリ間連携
Custom URL Scheme
Pasteboard
の2つを今日は取り上げる(ほかもある)
・Custom URL Scheme
URLの文字列を相手方アプリに渡す
URLスキームをOSに登録
URLを書いてコールする
注意点1:
どんなアプリから呼び出される可能性もある
→わるいやつからも!
呼び出した人チェック
引数チェック→場合によれば無効化
handleOpenURLは使わないほうがよい→自分を呼び出した人が分からないから
注意点2:
URLスキームハイジャッキング
同じ名前で登録された時、なにを呼び出すかわからない(定義されていない)
→他のアプリが横取り!
・Pasteboard
コピー&ペーストで使われる、あれ!
System PasteBoardとApp pasteboard
うっかり、systempasteboardのインスタンスを作って。みんなで共有してしまう
自作のアプリ間でデータ共有するときはAppPasteboardを使うべき
→ただし、7より前では仕様違う
他人のアプリとの共有はpasteboard以外を使うこと考える
ユーザーにコピー、切り通りされたくない箇所では、コンテキストメニューから項目を消してしまおう
HTTPS通信時のサーバー証明書検証
・中間者攻撃(Man-in-the-middle attack)
Wifiルーターが乗っ取られた場合
・ios sdkで用意されている代表的な通信系
NSURLConnection
NSURLSession
Webview
→バイパスするコードがある
チャレンジを呼ぶ前に、バイパスするようによんでしまう
リクエストにYES
→非公開なので使わない(ググると見つかるけど)
NSURLSession
通信を確立:ちゃれんじ:くれでんしゃるを自分で作る→送られたの無視
webView
おなじものとおる
wkwebview
やはりおなじことできる
・なぜバイパスコードを書いてしまうのか
デバッグにおれおれ証明書を使うこと多い
→回避のため
→検証用のコードがリリース版に入らないように
この際、買ってしまう。無料の証明書など
・しかし、こんなケースも
サードパーティ製広告モジュールの脆弱性
・iosセキュリティ関連書籍の紹介
Hacking and securing iOS Applications
マニアック?ペネトレーションテスト
ios Application Security
せんげつでた。9まで対応
■事例で学ぶセキュアコーディング
・自己紹介
・脆弱性診断とは
セキュリティ上の問題個所があるかどうかを調べること
・スマートフォンアプリの診断
Androidアプリ
iosアプリ
ゲームチート診断
→ゲームアプリ多い
最近のゲーム:ネットワーク使う→チートされると、金銭的影響、DOS攻撃
→チート診断重要
Android
WebView
クロスサイト、ローカルファイル、jS
SSL
デバッグログ
SDカード
データ共有機能アクセス制御
iosも基本はAndroidと同じ
SDカードは対象外だけど
ゲームチート
ゲームを優位に進めたりバランスを崩してしまう問題
課金回避
レアアイテムの取得
ステータス、スコア、データ改ざん
制約の回避
なりすまし
・診断環境
プロキシ
Burp Suite
端末とサーバー感の通信内容を確認するために使用
root化した端末
iptables等を使用して端末の通信をburpに飛ばす
JEB Androidアプリ でこんぱいら
apkファイルの静的解析のために使用
APIが公開されている
Javaやpythonでextension作成可能
dec2jar
にこらすさんが作ってる
apktool
apkファイルをでコードしたり再ビルドするために使用
IDA(あいだ)デバッガ
androidアプリの動的解析をするために使用
ILSpy(あいえるすぱい)
.netアプリでこんぱいら
unityアプリ→最近のゲーム
情報漏えい
事例1:恋愛ゲーム
悪意あるアプリにより情報漏えい
webViewを使用
intentで受け取ったURLをWebViewに読み込ませる機能
intentを受け取るアクティビティは公開されている
→ローカルファイルにアクセスできないようにした・・・
SSLサーバー証明書検証不備
事例2:
Unityで作られている
API通信でサーバーとデータやり取り
通信部分は.NETで実装
どんなサーバー証明書でもtrueという実装
ショッピング系アプリ
一部の通信でサーバー証明書の検証無視
→サードパーティ製のライブラリの中で
→Githubで公開:先週確認したら、まだそのまま(無視)
他の部分では、検証をちゃんとしている
パラメータ改ざん
事例3:
ゲーム優位に
スコア変更など→リクエストを改ざん
アイテム使用時の処理の流れ→レスポンスのOK,NGを変える
改ざんチェックのバイパス
事例:
リクエストにハッシュを付加して改ざん防止
ハッシュはsha256
簡単にロジックが判明(ヒント存在)
root化検知のバイパス
事例:
root化した端末では起動できないように制限をかけているが
分かりやすいクラス名、メソッド名
→これらクラス、メソッドをバイパスするだけで制限を無効化
addJavascriptinterface
サーバー証明書検証不備とおないくらい
まとめ
・いまだに作りこむことが多い英訳性
サーバー証明書検証不備
セキュアコーディングガイドを熟読しよう!