せきゅりてぃ侍

Similar documents
<4D F736F F F696E74202D2091E63389F15F8FEE95F1835A834C A CC B5A8F FD E835A835890A78CE C CC835A834C A A2E >

1. SQL インジェクションの問題と脅威 2

安全な Web サイトの作り方 7 版 と Android アプリの脆弱性対策 独立行政法人情報処理推進機構 (IPA) 技術本部セキュリティセンター Copyright 2015 独立行政法人情報処理推進機構

Microsoft Word - Android_SQLite講座_画面800×1280

WEBシステムのセキュリティ技術

CloudEdgeあんしんプラス月次レポート解説書(1_0版) _docx

目次 1. AOS ユーザー登録サイト AOS ユーザー登録 AOS ライセンスキー登録 ios 版アプリ インストール 起動と新規登録 初期設定とバックアップ Andro

ドコモメール連携アプリ開発ガイド(新IF対応)

マルウェアレポート 2017年9月度版

利用いただけます 利用登録後は都度振込取引時にワンタイムパスワード入力画面が表示さ れますので スマートフォンのトークンに表示される 6 桁のワンタイムパスワードを入力し てください ( ご利用方法の詳細は下記 5~7 をご覧ください ) (5) トークンの利用単位お客さまの運用に合わせて以下のよう

感染条件感染経路タイプウイルス概要 Authplay.dll (aka AuthPlayLib.bundle) を利用する Adobe Reader 9.x ~ より前のバージョンと 10.x から 上記動作環境に一致した環境下で当該 PDF タイプウイルスを実行することで

マルウェアレポート 2018年1月度版

データベースからデータの 読 み 込 み Cursorクラス

ESET Mobile Security V4.1 リリースノート (Build )

Microsoft PowerPoint - Skype for business の概要.pptx

Trend Micro Cloud App Security ご紹介資料

Web Gateway資料(EWS比較付)

目次 既存アカウントにモバイルライセンスキーコードを追加 ライセンスキーコードを追加 ポータルへモバイルデバイスを追加 電話番号の入力ルール /AU 端末の制限 ( 留意事項 ) ダウンロードリンクの通知 (SMS 配信 )/ 子デバイスキー生成 モバイルデバイスへのソフトウェアダウンロード ダウン

日 力力 生 行行 入 入 力力 生 用 方

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

1 ワンタイムパスワードの説明... 2 (1) ワンタイムパスワードのサービス概要... 2 (2) 個人インターネットバンキングとワンタイムパスワード... 2 (3) ワンタイムパスワード生成機 ( トークン ) について... 2 (4) ソフトウェアトークンの特徴 導入までの

マルウェアレポート 2017年12月度版

マルウェアレポート 2017年10月度版

ESET Internet Security V10 モニター版プログラム インストール / アンインストール手順

Microsoft Word - _Intent.doc

目次 1.1. AOS ユーザー登録 AOS ライセンスキー登録 ios 版アプリ インストール 起動と新規登録 初期設定とバックアップ Android 版アプリ インストール...

KDDI Smart Mobile Safety Manager ( 基本プラン /4G LTE ケータイプラン ) オプション機能説明 2018 年 2 月 27 日現在 KDDI 株式会社 ver Copyright 2018 KDDI Corporation. All Rights

目次 1. ユーザー登録 ( 初期セットアップ ) を行う Office365 の基本的な動作を確認する... 6 Office365 にログインする ( サインイン )... 6 Office365 からサインアウトする ( ログアウト )... 6 パスワードを変更する... 7

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

2. インストール完了画面の 開く をタップするか ホーム画面 AnyConnect のアイコン をタップし アプリケーションを起動してください or 3. OK をタップし 順に従い 接続 をタップしてください AnyConnect は デバイスに関する情報 (IMEI など ) にアクセスする必

目次 管理 PCの設定パソコンURLにアクセスする 3 グループ設定をする 4 ステータス設定をする 5 端末の設定提供元不明のアプリにチェックを れる 7 位置情報サービスをオンにする 7 提供元不明のアプリにチェックを れる (OS8.0 以降 ) 8 9 位置情報サービスをオンにする (OS8

○○○信用金庫

安全なウェブサイトの作り方 7 版 の内容と資料活用例 2

ごあいさつ 貴社益々ご清栄のこととお喜び申し上げます この度は 弊社の総合 IT サポートツール Optimal Biz ご提案の機会を賜りまして誠にありがとうございます スマートデバイス等の有効活 および管理について 改めて 提案書 としてまとめさせていただきました 本提案が貴社のますますのご発展

目次 1. はじめに ログイン方法 (PC の場合 ) メール送信方法 (PC の場合 )... 6 からのアドレス帳の移行方法 (PC の場合 ) メール転送方法 (PC の場合 ) Gmail アプリの設

Microsoft PowerPoint - ã…Šã…¬ã…fiㅥㅼ盋_MVISONCloud製åfi†ç´¹ä»‰.pptx

アプリケーションの使い方 ios 対応バージョン ios : 6.0 以降 準備 事前に液晶モニター本体のネットワークパスワード及びネットワークアドレスの設定を行う ( 取扱説明書 7ページ ) 液晶モニター上でインターネットの接続状況を確認する メインメニューの システム ネットワーク ネットワー

safetyaccess.pdf

あんしんフィルターfor au(iOS)設定ガイド

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

Microsoft PowerPoint 高専フォーラム_改訂0.6版.pptx

中小企業向け サイバーセキュリティ対策の極意

MP:eMeeting インストールマニュアル Version /06/30 株式会社デジタル ウント メア

LINE WORKS 管理者トレーニング 4. セキュリティ管理 Ver 年 6 月版

1 DRM 付きファイルの閲覧方法 DLmarket をご利用いただき ありがとうございます お買い上げいただきました商品は デジタルコンテンツの不正利用を防ぐために DRM ( 著作権管理機能 ) がついております ファイルをご覧いただくには ライセンス管理ソフト (PDF OwnerGuard

Android アプリケーションの脆弱性発生ポイントとその傾向 株式会社ユビテックソフト評価 検証室 発表者氏名 : 田久保順 共著者氏名 : 八丁勝利 1

基本プラン向け ( インターネット接続管理 バックアップ メッセージ通知 ウイルス対策 Web フィルター ) 2

Mobile Access IPSec VPN設定ガイド

FAQ案(Linkup Manager)

APEX Spreadsheet ATP HOL JA - Read-Only

_ワイヤレスカメラアプリ取説.indd

PowerPoint Presentation

スライド 1

目次 1 はじめに アンインストール前の注意点 Sophos アンインストール手順 アンインストーラの場所を確認する アンインストーラの実行 F-Secure Client Security for Mac インストー

Technical Report 年 8 月 31 日 株式会社セキュアソフト 注意喚起 : バンキングトロージャンに感染させるマルウェア付きメール拡散について 1. 概要最近インターネットバンキングなど金融機関関連情報の窃取を目的としたマルウェア付きメールが 日本国内で多数配

タイトル位置

目次 1 サービス概要 3 for UQ mobile とは 4 動作環境 6 2 利用開始 7 アプリをダウンロードする 8 サービスを開始する 9 3 設定変更 10 管理者を登録する 11 管理者画面を表示する 12 管理するスマートフォンに名前をつける 12 for UQ mobile が正

ZoomMeeting_BusinessEnterpriseユーザーマニュアル(Android編)

1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar

f-secure 2006 インストールガイド

OneDrive for Businessのご紹介

SQL インジェクションの脆弱性

Transcription:

Bee-Team 株式会金社融 OpenTone Solution 事業部 セキュリティの傾向と対策 事例から学ぶ Android せきゅりてぃ侍

BeeTeam とは 玉侍 根侍 野侍 菱侍 川侍 大侍の 6 人の侍 ( ギーグ ) 衆 おぷとんらぼにコラムを掲載中 http://labs.opentone.co.jp/ 2

自己紹介 名前 : 大羽久知 ( おおばひさし ) 大侍 年齢 :20 歳と240ヶ月 将来は憲兵団に入って内地勤務が夢 連絡先 :hisashi.ohba@opentone.co.jp 3

Android の情勢 - 成長する Android 市場 スマートフォン市場 特に Android ユーザ数が急成長 アプリダウンロード数 4

Android の情勢 - 脅威 不正アプリ数が急増 PC の約 4 倍の速度で増加 出典 : トレンドマイクロ 2012 年世界の脅威動向レポートセキュリティ ラウンドアップ 5

モバイルマルウェアの Android が標的 出典 : F-Secure Mobile Threat Report Q4 2012 6

本プレゼンテーションの流れ 前半 情報流出の脅威 代表的なセキュリティインシデント ( マルウェア ) 利用者側の対策 代表的なセキュリティインシデント ( 脆弱性 ) 脆弱性に対する対策 セキュアプログラミングの必要性 後半 Android にも潜む 脆弱性を産むコード 攻撃とセキュアプログラミング 脆弱性の原因 7

情報流出の脅威 200 万個以上のアプリを解析 29 万 3091 個が 明らかに悪意のあるアプリ 高リスク に分類 51% GooglePlay で公開 23% ユーザの情報を不適切に流出 22% 出典 : トレンドマイクロ モバイル脅威の現状 :Android 向け不正アプリの 23% が Google Play 経由で提供 8

代表的なセキュリティインシデント ( マルウェア ) Droid09 (2010.1) Geinimi (2010.12) DroidDreamLight (2011.6) the Movie/ 動画まとめ (2012.4) 9

Droid09 2010.1 発生 オンラインバンキングアプリを偽装 ユーザ名やパスワードなどが流出 Android Market( 当時 ) で公開 出典 : F-Secure 10

Geinimi 2010.12 発生 Android 初のボット型ウィルス 意図しない電話発信やメールの送受信 個人情報の漏えいなどが起こる 出典 : IPA Android OS を標的としたウイルスに関する注意喚起 11

DroidDreamLight 2011.6 発生 トロイの木馬 ユーザ端末から個人情報等が流出 Google Play で公開 DroidDreamLight の感染フロー 出典 : ITpro Androidを狙う DroidDreamLight を知る 12

the Movie/ 動画まとめ 2012.4 発生 the Movie 動画まとめ アプリで 数万件 数百万件の個人情報が大量流出 Google Play で公開 出典 : シマンテック 日本の Android ユーザーから個人情報を盗み出す "The Movie" マルウェア 13

利用者側の対策 信頼できる公式アプリマーケットから入手する 携帯キャリアの公式サイト 審査が厳しい Google Play トップデベロッパー Google Play チームが選んだトップレベルの Google Play デベロッパー 14

利用者側の対策 パーミッション の確認 Android 特有のセキュリティ機構 ユーザーがインストールの可否を判断 ( アプリが必要とする権限を開発者が明示 ) 出典 :@IT Security & Trust - Android セキュリティの今 これから 15

マルウェアによく使われるパーミッション 利用者側の対策 ラベル名 SMSの送信 SMSの受信連絡先データの読み取り パーミッション名 SEND_SMS RECEIVE_SMS READ_CONTACTS 起動時に自動的に開始 完全なインターネットアクセス 携帯のステータスと ID の読み取り おおよその位置情報 ( ネットワーク基地局 ) 精細な位置情報 (GPS) RECEIVE_BOOT_COMPLE TED INTERNET READ_PHONE_STATE ACCESS_COARSE_LOCAT ION ACCESS_FINE_LOCATION 出典 :@IT Security & Trust - Android セキュリティの今 これから @IT Android を取り巻く脅威 ユーザーにできることは? 16

利用者側の対策 セキュリティアプリの導入 有料 無料問わず多くのベンダーからリリース ただし PC 向けほど効果に期待はできない ( 一定の効果はあるが 機能に限界があると理解した上で利用 ) メールの添付ファイルに用心 怪しいサイトには行かない パーミッション を確認する 出典 :ITmedia ホント? PC 並みには期待できない Android のウイルス対策アプリ 17

代表的なセキュリティインシデント ( 脆弱性 ) Skype (2011.4) Dropbox (2011.8) 18

Skype の脆弱性 2011.4 発生 情報流出の恐れ キャッシュされたプロファイル インスタントメッセージ 原因 独自の場所にデータを保存 アクセス許可が未設定 出典 : Think IT Android Security 安全なアプリケーションを作成するために 19

Skype の脆弱性 ( 図解 ) 20

Dropbox の脆弱性 2011.8 発生 Dropbox のデータを別アプリから自由に読み書き 意図せず個人情報を流出させてしまう可能性 ContentProvider のアクセス制限が未設定 21

ContentProvider アプリケーション間でデータを共有するための仕組みの一つ 通常 アプリケーションで保存されるデータは 他のアプリケーションからアクセスできない アクセス制限設定が出来る 22

ContentProvider のアクセス制限設定 公開 <provider android:name="xxx" android:authorities="xxx" /> 非公開 <provider android:name="xxx" android:authorities="xxx" android:exported="false" /> 23

セキュアプログラミングの必要性 Android アプリは比較的容易に作成できる セキュアプログラミングの知識は重要! 意図せずセキュリティ被害の加害者に!! 24

本プレゼンテーションの流れ 前半 情報流出の脅威 代表的なセキュリティインシデント ( マルウェア ) 利用者側の対策 代表的なセキュリティインシデント ( 脆弱性 ) 脆弱性に対する対策 セキュアプログラミングの必要性 後半 Android にも潜む 脆弱性を産むコード 攻撃とセキュアプログラミング 脆弱性の原因 25

サンプルアプリ概要

サンプルアプリ詳細

BeeDBHelper.java データベースを指定 public class BeeDBHelper extends SQLiteOpenHelper { } public BeeDBHelper(Context context) { super(context, "fsol-bee.db", null, 1); }

BeeProvider.java public class BeeProvider extends ContentProvider { BeeDBHelper databasehelper; テーブルを指定 @Override public Cursor query(uri uri, String[] projection, String selection, String[] selectionargs, String sortorder) { SQLiteDatabase db = databasehelper.getreadabledatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.settables("schedule_tbl"); Cursor c = qb.query(db, projection, selection, selectionargs, null, null, sortorder); } return c;

AndroidManifest.xml ContentProvider の定義を追加 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.co.opentone.fsol" android:versioncode="1" android:versionname="1.0" > : <provider android:name="beeprovider" android:authorities="jp.co.opentone.fsol.beeprovider" android:exported="true" /> : </manifest>

title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = " 会議 "; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beeprovider"); try { Cursor cur = getcontentresolver().query(contenturi, new String[] { "title", "content", "date" }, "content LIKE?", new String[] { "%" + keyword + "%" }, null); : title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = " 会議 A"; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beenormalprovider"); try { Cursor cur = getcontentresolver().query(contenturi, new String[] { "place" }, "title =? ", new String[] { keyword }, null); : title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

public class BeeProvider extends ContentProvider { BeeDBHelper databasehelper; 取得できるカラムおよび条件を ContentProvide 側で指定 @Override public Cursor query(uri uri, String[] projection, String selection, String[] selectionargs, String sortorder) { SQLiteDatabase db = databasehelper.getreadabledatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.settables("schedule_tbl"); projection = new String[] { "title", "content", "date" }; selection = "content LIKE '%" + selectionargs[0] + "%'"; selectionargs = null; Cursor c = qb.query(db, projection, selection, selectionargs, null, null, null); } return c;

title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = " 会議 "; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beeprovider"); 呼び出し側では条件のみ指定 try { Cursor cur = getcontentresolver().query(contenturi, null, null, new String[] { keyword }, null); : title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

このコードの 脆弱性はなんだろう???

title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = "a%' OR '%' = '"; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beeprovider"); try { Cursor cur = getcontentresolver().query(contenturi, null, null, new String[] { keyword }, null); : title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

実際に発行された Query SELECT title, content, date FROM schedule_tbl WHERE (content LIKE '% 会議 %') SELECT title, content, date FROM schedule_tbl WHERE (content LIKE '%a%' OR '%' = '%')

SQL インジェクション データベースへの問い合わせや操作を行うプログラムに不正なキーワードを与える データベースを改ざん 不正に情報を入手

title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = "a%' OR '%' = '%') UNION ALL SELECT * FROM xxx_tbl WHERE ('%' = '"; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beeprovider"); try { Cursor cur = getcontentresolver().query(contenturi, null, null, new String[] { keyword }, null); : title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = "a%' or 'a' = 'a') UNION ALL select name, phone, email from user_tbl where ('%' = '"; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beeprovider"); try { Cursor cur = getcontentresolver().query(contenturi, null, null, new String[] { keyword }, null); : title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

String keyword = "a%' or 'a' = 'a') UNION ALL select name, phone, email from user_tbl where ('%' = '"; Uri contenturi = Uri.parse( "content://jp.co.opentone.fsol.beeprovider"); try { Cursor cur = getcontentresolver().query(contenturi, null, null, new String[] { keyword }, null); : name phone email 武藤敬司 090-0000- xxxx 蝶野正洋 090-0001- xxxx 橋本真也 090-0002- xxxx keiji.muto@three.musketeers.com masahiro.chono@three.musketeers.com shinya.hashimoto@three.musketeers.co m

対応 プレースホルダーの利用 エラーメッセージの制御 条件キーワードのエスケープ

try { SQLiteDatabase db = databasehelper.getreadabledatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.settables("schedule_tbl"); projection = new String[] { "title", "content", "date" }; String condition = selectionargs[0].replaceall("'", "''"); selection = "content LIKE '%" + condition + "%'"; selectionargs = null; Cursor c = qb.query(db, projection, selection, selectionargs, null, null, null); return c; } catch (Exception e) { Log.e(e.getClass().getName(), e.getmessage()); return null; } title content date place 会議 A 超重要な会議 2013-04-29 会議室 A 会議 B 定例会 2013-04-30 大会議室 会議 C グダグダな会議 2013-05-01 給湯室

事例アプリ ( 其ノ二 ) 50

脆弱性のある箇所 アクセスを許可した APP だけに呼び出されたい 予期せぬ APP から呼び出されてしまう Intent に関するアクセス制限の不備が原因!! 51

Intent Android 特有のアプリケーション間通信手段 独立したアプリケーション間での連携が可能となる 明示的 Intent と暗黙的 Intent 特性を正しく理解しないと セキュリティインシデントを引き起こしてしまう 52

発生する被害 悪意のある APP が 公開したくないプライベートな写真までアップロードしてしまう 画像ファイルの流出!! 53

対策 Intent のアクセス制御を許可したい APP のみにする activity がどのように利用されるかにより activity が抱えるリスクや適切な防御手段が異なる 54

出典 : Android アプリのセキュア設計 セキュアコーディングガイド http://www.jssec.org/dl/android_securecoding.pdf 55

インテントを使用するときの注意点 指定したアクションどおりに処理されない可能性 インテントのエクストラ情報が解析される可能性 アクティビティマネージャのログからインテントが解析される可能性 アンドロイドの標準アプリケーションと連携するときの注意点 56

最後に 57

マルウェアを防ぐには 信頼のおける所からインストール パーミッションを理解する アプリ作成時の脆弱性を回避するには ContentProvider や Intent の設定を正しく行う 通常の APP と同様な脆弱性も留意する 58

かたじけない 59