SlideShare a Scribd company logo
1 of 33
Androsia
一歩先のメモリ内Androidアプリケーションデータの保護
C:>whoami
• サミット・アンワル
• プロダクトセキュリティチーム @Citrix R&D India Pvt Ltd
• ウェブ/モバイルアプリケーションセキュリティの熱狂者
• 過去の講演
• AppSec USA (Orlando, USA),
• c0c0n (Cochin, India),
• IEEE Services (Anchorage, Alaska),
• ACM MobileSOFT, ICSE (Hyderabad, India),
• IEEE CloudCom (Bristol, UK)
• Email: samit.anwer@gmail.com, Twitter: @samitanwer1, LinkedIn
Agenda
• 概要
• 動機
• 背景
• 手法
• 現在取り組んでいること
概要
• 全プログラムレベルで最後に利用されたオブジェクトを特定するにはどうすれば
よいか?
• サマリを基にした相互プロセス的データフロー解析
概要
81 2 3 4 5 6 7 9 10
def x use xdef x use x
second
initialization
Img. ref: https://blog.fastthread.io/2016/07/06/troubleshoot-outofmemoryerror-unable-to-create-new-native-thread/
生存 生存
死亡
死亡
死亡
最初の
初期化
2回目の
初期化 最終利用
動機
• 認証クレデンシャル
• 認証トークン
• 暗号化・復号化鍵
• PIN
• ワンタイムパスワード (OTP)
• 個人情報(PII)
オブジェクトは機微情報を含み得る
“ガベージコレクタが何とかしてくれる”
Want to ensure object’s content gets cleared?
理想:
参照忘れ
 メモリリーク
非到達可能オブジェクト  ガベージ
到達可能オブジェクト
ガベージコレクタのルート
Ref: https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/
現実:
StringBuilder オブジェクトをリセット
• 未使用/到達可能な StringBuilder オブジェクトは機微情報を含んでいる可能性
が高い
• ヒープのダンプは機微情報を明らかにする
• ガベージコレクタが機微情報を消去してくれることに
期待してはならない
• 上書きによりすべての決定的な情報を破壊しよう
Ref: https://www.pentestpartners.com/security-blog/how-to-extract-sensitive-plaintext-data-from-android-memory/?doing_wp_cron=1500911283.6790690422058105468750
“参照したオブジェクトは
開発者自身の問題だ”
java.security.* の不足
Eclipse Memory Analyzer
ヒープダンプ
(挿入前)
ヒープダンプ
(挿入後)
背景
Sootによる静的コード解析
• Soot – Java(バイトコード)向けフレー
ムワーク。静的解析ツールの開発を
可能とする。
• Jimpleを呼び出す3番地コードを生成す
る
• データフロー解析の実装を支援する
• 内部プロセス的に
• 相互プロセス的に
• Sootには DalvikをJimpleに変換する
モジュールがなかった
そこで Dexpler
Soot のワークフロー
Dalvik
HTML
グラフ
エラー
メッセージ
Java
ソース
TamiFlex
出力
Java
ソース
Scala
ソース
Java
ソース
JastAddパーサー
最適化/変換されたクラスファイル+アトリビュート
クラスファイル
バイトコードの生成
解析、最適化、タグ付け
Java仮想マシン
Jimple 3-address IRを作成
Further reading:
Instrumenting Android Apps with Soot, http://www.bodden.de/2013/01/08/soot-
android-instrumentation/
Dexpler: Converting Android Dalvik Bytecode to Jimple for Static Analysis with Soot,
https://arxiv.org/pdf/1205.3576.pdf
• Androidアプリはメインメソッドを持たない
• FlowDroidはdummyMainMethod()を生成する
• Androidのライフサイクルメソッドやコールバック
の模型を作る
FlowDroid
Img. ref: https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
アクティビティ
開始
アクティビティ
実行状態
アクティビティ終了中または破棄中
アクティビティ
終了
アクティビティが不可視
ユーザーがアクティビティに
誘導
ユーザーがアクティビティに
誘導
ユーザーがアクティビティ
にリターン
他のアクティビティ
が最前面に移行
優先度が高い
アプリケーションが
メモリを要求
設計の概要
6. 再パックとAPKサイン
または
解析結果の供給
1. 共有ソースまたはAPK
2. アンパック
アプリの
開発者/
ユーザー
サーバー
3. 変換
Androsia
5. 変換
4. 変換/挿入 Jimple
コード
Dex
7. 変換されたAPK・解析結果
SB Objects – どのスコープに存在するか?
public void foo(){
SB x, y, z;
[x = new SB(“s3cr3t”);]1
[y = new SB(“p@55w0rd”);]2
[if(y.length() < x.length()){
[z = y;]4
} else{
[z = y.append(“007”);]5
}]3
class MyClass{
static SB x;
public static void foo(){
SB y, z;
[x = new SB(“s3cr3t”);]1
[y = new SB(“p@55w0rd”);]2
[if(y.length() < x.length()) {
[z = y;]4
} else{
bar();5
}]3
}}
public static void bar(){
System.out.println(MyClass.x);
}
ローカル変数 静的フィールド
Abbrev.
SB: StringBuilder
インスタンスフィールド
class MyClass
{
private SB x;
public SB getSBx(){
return x;
}
public SB setSBx(SB str){
x=str;
}
}
public static void foo(){
MyClass obj = new MyClass();
SB str= new SB();
obj.setSBx(str)
S.O.P(obj.getSBx());
}
public class MainActivity
{
protected void onCreate(Bundle b) {
User.static_secret= new SB("p@55w0rd");
CheckStatic cs= new CheckStatic();
cs.useStaticField();
}
}
デモ – 静的な SB
public class User {
public static SB static_secret;
}
public class CheckStatic {
public void useStaticField()
{
S.O.P(User.static_secret);
bar();
}
public void bar()
{
S.O.P(User.static_secret);
}
}
しかしライフサイクルはそんなに単純じゃない
- ループが発生することもある
デモ
手法
コードのラインに何が存在するか?
• どのデータに興味があるか?
この後のスライド:
• 生存変数解析とは何か?
• すべてのメソッドのサマリをどう計算するか?
e.g. Summary(foo) = ( x , if(y.length() < x.length()))
 Step 1: すべてのステートメントに対する def-use セットの計算
 Step 2: すべてのステートメントに対する LVentry および LVexit セットの計算
 LVentry と LVexit  メソッド内の ローカル/静的フィールドの参照 (SFR) に対する最終利用地点 (LUP)  サマリ
• SPR に対する LUP を全プログラムレベルで計算するためにサマリをどのように用いるか
データの
生存
• 生存変数解析は以下のことを決定する
• すべてのステートメントに対して、どの変数が次の変数の定義に先立っ
て後続の利用を必要とするのか
生存変数解析
x
y
z
public void foo(){
SB x, y, z;
[x = new SB(“s3cr3t”);]1
[y = new SB(“p@55w0rd”);]2
[x = new SB(“hello”);]3
[if(y.length() < x.length()) {
}]4
[z = y;]5
[z = y.append(“007”);]6
[x = z;]7
} else{
Abbrev.
SB: StringBuilder
変数を最後に用いた場所 ≅
変数が生存していた時の最後のステート
メント
}
1. def-use セットの計算
• def セット: ステートメントの中で定義された変数
• use セット: ステートメントの中で用いられた、または
見積もられた変数
public void foo(){
SB x, y, z;
[x = new SB(“s3cr3t”);]1
[y = new SB(“p@55w0rd”);]2
[x = new SB(“hello”);]3
[if(y.length() < x.length()) {
[z = y;]5
} else{
[z = y.append(“007”);]6
}]4
[x = z;]7
}
Abbrev.
SB: StringBuilder
1. def-use セットの計算 (cntd.)
SB x, y, z;
[x = new SB(“s3cr3t”);]1
[y = new SB(“p@55w0rd”);]2
[x = new SB(“hello”);]3
[if(y.length() < x.length()){
[z = y;]5
}
else{
[z = y.append(“007”);]6
}]4
[x = z;]7
I def(l) use(l)
1 { x } ∅
2 { y } ∅
3 { x } ∅
4 ∅ { x, y }
5 { z } { y }
6 { z } { y }
7 { x } { z }
LVentry(6)
LVexit(6)
LVexit(4)
LVentry(4)
LVentry(3)
LVexit(3)
1
3 4
5
6
LVentry(2)
LVentry(1)
LVentry(5)
2
LVexit(5)
LVexit(2)
LVexit(1)
LV データフローの方向
2. LVentry (l) & LVexit(l) の計算
• フロー等式は2つの関数によって表現できる:
LVexit (l) = ∅ , if l = blast
∪s ∈ succ [l] {LVentry (s)} , otherwise
LVentry (l) = ( LVexit (l) – def(l) ) ∪ use(l)
2. LVentry (l) & LVexit(l) の計算
public void foo(){
SB x;SB y;SB z;
[x = new SB(“s3cr3t”);]1
[y = new SB(“p@55w0rd”);]2
[x = new SB(“hello”);]3
[if(y.length() < x.length()) {
[z = y;]5
} else{
[z = y.append(“007”);]6
}]4
[x = z;]7
LVentry(7) { z }
LVexit(7) ∅
LVentry(6) { y }
LVexit(6) { z }
LVentry(5) { y }
LVexit(5) { z }
LVentry(4) { x, y }
LVexit(4) { y }
LVentry(3) { y }
LVexit(3) { x, y }
LVentry(2) { ∅ }
LVexit(2) { y }I def(l) use(l)
1 { x } ∅
2 { y } ∅
3 { x } ∅
4 ∅ { x, y }
5 { z } { y }
6 { z } { y }
7 { x } { z }
Summary(foo) = { Local, LUP( Local / Aliases ) }
または
{ StaticFieldRef, LUP( SFR / Aliases ) }
I LVentry(l) LVexit(l)
1 ∅ ∅
2 ∅ { y }
3 { x, y }
4 { x, y } { y }
5 { y } { z }
6 { y } { z }
7 { z } ∅
{ y }
LVentry(3) { y }
LVexit(3) { x, y }
LVentry (l) = ( LVexit (l) – def(l) ) ∪ use(l)
サマリは逆トポロジーオーダーで計算
public void foo(){
A1
A2
A3 bar();
A4
A5
}
public void bar(){
B1
B2
B3 baz();
B4
B5 sfr used
}
public void baz(){
C1
C2
C3
C4 sfr used
C5
C6
}
Summ(baz)
LVexit (B3) = LVentry(B4) = {sfr, B5}
Summ(bar)
LVexit (A3) = LVentry(A4) = {∅}
Summ(baz) = {sfr, C4}
{ baz, (sfr,C4) }
プログラムレベルでの “sfr” の最終利用は以下の時点で発生する:
Summ(bar) = {sfr, B5}
{ bar, (sfr,B5) }
Summ(bar) = {sfr, ∅}
LVentry(C4) = {sfr, C4}
LVentry(B5) = {sfr, B5}
• 生存変数解析とは何か?
• すべてのメソッドのサマリをどう計算するか?
e.g. Summary(foo) = ( x , if(y.length() < x.length()))
Step 1: すべてのステートメントに対する def-use セットの計算
Step 2: すべてのステートメントに対する LVentry および LVexit セットの計算
 LVentry と LVexit  メソッド内のローカル/静的フィールドの参照に対する最終利
用地点 (LUP)  サマリ
• SFRに対するLUPを全プログラムレベルで計算するためにサマリをどのように用いるか?
まとめ
インスタンスフィールド変数 - 手法
1. StringBuilderインスタンスフィールドを持つすべてのクラスをマーク
2. それらのオブジェクトインスタンスを探索
3. SBフィールドの代わりにオブジェクトインスタンスの最終利用とそれ
らのエイリアスを追跡
4. 各クラスにresetメソッドを追加
インスタンスフィールド
class MyClass
{
private SB a;
public SB setA(SB str){
a=str;
}
public void resetSb_A(){
……..
}
}
public class MainActivity{
public static void onCreate(){
SB my_secret= new SB(“S3cr3t”);
MyClass mc = new MyClass();
Wrapper w = new Wrapper();
w.callW(mc, my_secret);
resetSb_A();
}
}
DEMO
public class Wrapper {
public void callW( MyClass mc, SB my_secret ){
mc.setA(my_secret);
}
}
Last use of “mc”
Instrumented Code
1. StringBuilderインスタンスフィールドのすべてのクラス をマーク
2. それらのオブジェクトインスタンスを探索
3. オブジェクトインスタンスの最終利用を追跡
4. MyClassにresetメソッドを追加
• 試験用ソフトウェア集の開発
• 継続的統合および継続的デリバリーの採用
• 文書とコードはGitHubレポジトリに公開予定 -
https://github.com/samitanwer/Androsia (現在はプライベート設定)
現在取り組んでいること
参考文献
1. Implementing an intra procedural data flow analysis in Soot,
https://github.com/Sable/soot/wiki/Implementing-an-intra-procedural-data-flow-analysis-in-Soot
2. Instrumenting Android Apps with Soot, http://www.bodden.de/2013/01/08/soot-android-
instrumentation
3. Dexpler: Converting Android Dalvik Bytecode to Jimple for Static Analysis with Soot,
https://arxiv.org/pdf/1205.3576.pdf
4. Precise Interprocedural Dataflow Analysis via Graph Reachability,
https://courses.cs.washington.edu/courses/cse590md/01sp/w1l2.pdf
5. Slides by Matthew B. Dwyer and Robby, University of Nebraska-Lincoln, Kansas State University
Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル

More Related Content

What's hot

Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するshigeki_ohtsu
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークM Hagiwara
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイドEtsuji Nakai
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolateskoichik
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lispirix_jp
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなしMITSUNARI Shigeo
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」de:code 2017
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルKobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルtnoda
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewallM Hagiwara
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangTakeru INOUE
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 

What's hot (20)

Slide
SlideSlide
Slide
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
 
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
SystemV IPC
SystemV IPCSystemV IPC
SystemV IPC
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
OpenStack + Common Lisp
OpenStack + Common LispOpenStack + Common Lisp
OpenStack + Common Lisp
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルKobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテル
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 

Similar to Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル

genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターsohta
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CITDaiki Maekawa
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ京大 マイコンクラブ
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
Statically detecting vulnerability under memory pressure using exhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive searchStatically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure using exhaustive searchRuo Ando
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 

Similar to Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル (20)

Prosym2012
Prosym2012Prosym2012
Prosym2012
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Boost Tour 1.50.0 All
Boost Tour 1.50.0 AllBoost Tour 1.50.0 All
Boost Tour 1.50.0 All
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
Statically detecting vulnerability under memory pressure using exhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive searchStatically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure using exhaustive search
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Prelude to Halide
Prelude to HalidePrelude to Halide
Prelude to Halide
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 

More from CODE BLUE

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...CODE BLUE
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten NohlCODE BLUE
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo PupilloCODE BLUE
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫CODE BLUE
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...CODE BLUE
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka CODE BLUE
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...CODE BLUE
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...CODE BLUE
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...CODE BLUE
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...CODE BLUE
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也CODE BLUE
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...CODE BLUE
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...CODE BLUE
 

More from CODE BLUE (20)

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
 

Androsia:一歩先のメモリ内Androidアプリケーションデータの保護 by サミット・アンワル

  • 2. C:>whoami • サミット・アンワル • プロダクトセキュリティチーム @Citrix R&D India Pvt Ltd • ウェブ/モバイルアプリケーションセキュリティの熱狂者 • 過去の講演 • AppSec USA (Orlando, USA), • c0c0n (Cochin, India), • IEEE Services (Anchorage, Alaska), • ACM MobileSOFT, ICSE (Hyderabad, India), • IEEE CloudCom (Bristol, UK) • Email: samit.anwer@gmail.com, Twitter: @samitanwer1, LinkedIn
  • 3. Agenda • 概要 • 動機 • 背景 • 手法 • 現在取り組んでいること
  • 5. • 全プログラムレベルで最後に利用されたオブジェクトを特定するにはどうすれば よいか? • サマリを基にした相互プロセス的データフロー解析 概要 81 2 3 4 5 6 7 9 10 def x use xdef x use x second initialization Img. ref: https://blog.fastthread.io/2016/07/06/troubleshoot-outofmemoryerror-unable-to-create-new-native-thread/ 生存 生存 死亡 死亡 死亡 最初の 初期化 2回目の 初期化 最終利用
  • 7. • 認証クレデンシャル • 認証トークン • 暗号化・復号化鍵 • PIN • ワンタイムパスワード (OTP) • 個人情報(PII) オブジェクトは機微情報を含み得る
  • 8. “ガベージコレクタが何とかしてくれる” Want to ensure object’s content gets cleared? 理想: 参照忘れ  メモリリーク 非到達可能オブジェクト  ガベージ 到達可能オブジェクト ガベージコレクタのルート Ref: https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/ 現実:
  • 9. StringBuilder オブジェクトをリセット • 未使用/到達可能な StringBuilder オブジェクトは機微情報を含んでいる可能性 が高い • ヒープのダンプは機微情報を明らかにする • ガベージコレクタが機微情報を消去してくれることに 期待してはならない • 上書きによりすべての決定的な情報を破壊しよう Ref: https://www.pentestpartners.com/security-blog/how-to-extract-sensitive-plaintext-data-from-android-memory/?doing_wp_cron=1500911283.6790690422058105468750 “参照したオブジェクトは 開発者自身の問題だ”
  • 13. Sootによる静的コード解析 • Soot – Java(バイトコード)向けフレー ムワーク。静的解析ツールの開発を 可能とする。 • Jimpleを呼び出す3番地コードを生成す る • データフロー解析の実装を支援する • 内部プロセス的に • 相互プロセス的に • Sootには DalvikをJimpleに変換する モジュールがなかった そこで Dexpler Soot のワークフロー Dalvik HTML グラフ エラー メッセージ Java ソース TamiFlex 出力 Java ソース Scala ソース Java ソース JastAddパーサー 最適化/変換されたクラスファイル+アトリビュート クラスファイル バイトコードの生成 解析、最適化、タグ付け Java仮想マシン Jimple 3-address IRを作成
  • 14. Further reading: Instrumenting Android Apps with Soot, http://www.bodden.de/2013/01/08/soot- android-instrumentation/ Dexpler: Converting Android Dalvik Bytecode to Jimple for Static Analysis with Soot, https://arxiv.org/pdf/1205.3576.pdf • Androidアプリはメインメソッドを持たない • FlowDroidはdummyMainMethod()を生成する • Androidのライフサイクルメソッドやコールバック の模型を作る FlowDroid Img. ref: https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle アクティビティ 開始 アクティビティ 実行状態 アクティビティ終了中または破棄中 アクティビティ 終了 アクティビティが不可視 ユーザーがアクティビティに 誘導 ユーザーがアクティビティに 誘導 ユーザーがアクティビティ にリターン 他のアクティビティ が最前面に移行 優先度が高い アプリケーションが メモリを要求
  • 15. 設計の概要 6. 再パックとAPKサイン または 解析結果の供給 1. 共有ソースまたはAPK 2. アンパック アプリの 開発者/ ユーザー サーバー 3. 変換 Androsia 5. 変換 4. 変換/挿入 Jimple コード Dex 7. 変換されたAPK・解析結果
  • 16. SB Objects – どのスコープに存在するか? public void foo(){ SB x, y, z; [x = new SB(“s3cr3t”);]1 [y = new SB(“p@55w0rd”);]2 [if(y.length() < x.length()){ [z = y;]4 } else{ [z = y.append(“007”);]5 }]3 class MyClass{ static SB x; public static void foo(){ SB y, z; [x = new SB(“s3cr3t”);]1 [y = new SB(“p@55w0rd”);]2 [if(y.length() < x.length()) { [z = y;]4 } else{ bar();5 }]3 }} public static void bar(){ System.out.println(MyClass.x); } ローカル変数 静的フィールド Abbrev. SB: StringBuilder
  • 17. インスタンスフィールド class MyClass { private SB x; public SB getSBx(){ return x; } public SB setSBx(SB str){ x=str; } } public static void foo(){ MyClass obj = new MyClass(); SB str= new SB(); obj.setSBx(str) S.O.P(obj.getSBx()); }
  • 18. public class MainActivity { protected void onCreate(Bundle b) { User.static_secret= new SB("p@55w0rd"); CheckStatic cs= new CheckStatic(); cs.useStaticField(); } } デモ – 静的な SB public class User { public static SB static_secret; } public class CheckStatic { public void useStaticField() { S.O.P(User.static_secret); bar(); } public void bar() { S.O.P(User.static_secret); } } しかしライフサイクルはそんなに単純じゃない - ループが発生することもある デモ
  • 20. コードのラインに何が存在するか? • どのデータに興味があるか? この後のスライド: • 生存変数解析とは何か? • すべてのメソッドのサマリをどう計算するか? e.g. Summary(foo) = ( x , if(y.length() < x.length()))  Step 1: すべてのステートメントに対する def-use セットの計算  Step 2: すべてのステートメントに対する LVentry および LVexit セットの計算  LVentry と LVexit  メソッド内の ローカル/静的フィールドの参照 (SFR) に対する最終利用地点 (LUP)  サマリ • SPR に対する LUP を全プログラムレベルで計算するためにサマリをどのように用いるか データの 生存
  • 21. • 生存変数解析は以下のことを決定する • すべてのステートメントに対して、どの変数が次の変数の定義に先立っ て後続の利用を必要とするのか 生存変数解析 x y z public void foo(){ SB x, y, z; [x = new SB(“s3cr3t”);]1 [y = new SB(“p@55w0rd”);]2 [x = new SB(“hello”);]3 [if(y.length() < x.length()) { }]4 [z = y;]5 [z = y.append(“007”);]6 [x = z;]7 } else{ Abbrev. SB: StringBuilder 変数を最後に用いた場所 ≅ 変数が生存していた時の最後のステート メント }
  • 22. 1. def-use セットの計算 • def セット: ステートメントの中で定義された変数 • use セット: ステートメントの中で用いられた、または 見積もられた変数 public void foo(){ SB x, y, z; [x = new SB(“s3cr3t”);]1 [y = new SB(“p@55w0rd”);]2 [x = new SB(“hello”);]3 [if(y.length() < x.length()) { [z = y;]5 } else{ [z = y.append(“007”);]6 }]4 [x = z;]7 } Abbrev. SB: StringBuilder
  • 23. 1. def-use セットの計算 (cntd.) SB x, y, z; [x = new SB(“s3cr3t”);]1 [y = new SB(“p@55w0rd”);]2 [x = new SB(“hello”);]3 [if(y.length() < x.length()){ [z = y;]5 } else{ [z = y.append(“007”);]6 }]4 [x = z;]7 I def(l) use(l) 1 { x } ∅ 2 { y } ∅ 3 { x } ∅ 4 ∅ { x, y } 5 { z } { y } 6 { z } { y } 7 { x } { z }
  • 25. 2. LVentry (l) & LVexit(l) の計算 • フロー等式は2つの関数によって表現できる: LVexit (l) = ∅ , if l = blast ∪s ∈ succ [l] {LVentry (s)} , otherwise LVentry (l) = ( LVexit (l) – def(l) ) ∪ use(l)
  • 26. 2. LVentry (l) & LVexit(l) の計算 public void foo(){ SB x;SB y;SB z; [x = new SB(“s3cr3t”);]1 [y = new SB(“p@55w0rd”);]2 [x = new SB(“hello”);]3 [if(y.length() < x.length()) { [z = y;]5 } else{ [z = y.append(“007”);]6 }]4 [x = z;]7 LVentry(7) { z } LVexit(7) ∅ LVentry(6) { y } LVexit(6) { z } LVentry(5) { y } LVexit(5) { z } LVentry(4) { x, y } LVexit(4) { y } LVentry(3) { y } LVexit(3) { x, y } LVentry(2) { ∅ } LVexit(2) { y }I def(l) use(l) 1 { x } ∅ 2 { y } ∅ 3 { x } ∅ 4 ∅ { x, y } 5 { z } { y } 6 { z } { y } 7 { x } { z } Summary(foo) = { Local, LUP( Local / Aliases ) } または { StaticFieldRef, LUP( SFR / Aliases ) } I LVentry(l) LVexit(l) 1 ∅ ∅ 2 ∅ { y } 3 { x, y } 4 { x, y } { y } 5 { y } { z } 6 { y } { z } 7 { z } ∅ { y } LVentry(3) { y } LVexit(3) { x, y } LVentry (l) = ( LVexit (l) – def(l) ) ∪ use(l)
  • 27. サマリは逆トポロジーオーダーで計算 public void foo(){ A1 A2 A3 bar(); A4 A5 } public void bar(){ B1 B2 B3 baz(); B4 B5 sfr used } public void baz(){ C1 C2 C3 C4 sfr used C5 C6 } Summ(baz) LVexit (B3) = LVentry(B4) = {sfr, B5} Summ(bar) LVexit (A3) = LVentry(A4) = {∅} Summ(baz) = {sfr, C4} { baz, (sfr,C4) } プログラムレベルでの “sfr” の最終利用は以下の時点で発生する: Summ(bar) = {sfr, B5} { bar, (sfr,B5) } Summ(bar) = {sfr, ∅} LVentry(C4) = {sfr, C4} LVentry(B5) = {sfr, B5}
  • 28. • 生存変数解析とは何か? • すべてのメソッドのサマリをどう計算するか? e.g. Summary(foo) = ( x , if(y.length() < x.length())) Step 1: すべてのステートメントに対する def-use セットの計算 Step 2: すべてのステートメントに対する LVentry および LVexit セットの計算  LVentry と LVexit  メソッド内のローカル/静的フィールドの参照に対する最終利 用地点 (LUP)  サマリ • SFRに対するLUPを全プログラムレベルで計算するためにサマリをどのように用いるか? まとめ
  • 29. インスタンスフィールド変数 - 手法 1. StringBuilderインスタンスフィールドを持つすべてのクラスをマーク 2. それらのオブジェクトインスタンスを探索 3. SBフィールドの代わりにオブジェクトインスタンスの最終利用とそれ らのエイリアスを追跡 4. 各クラスにresetメソッドを追加
  • 30. インスタンスフィールド class MyClass { private SB a; public SB setA(SB str){ a=str; } public void resetSb_A(){ …….. } } public class MainActivity{ public static void onCreate(){ SB my_secret= new SB(“S3cr3t”); MyClass mc = new MyClass(); Wrapper w = new Wrapper(); w.callW(mc, my_secret); resetSb_A(); } } DEMO public class Wrapper { public void callW( MyClass mc, SB my_secret ){ mc.setA(my_secret); } } Last use of “mc” Instrumented Code 1. StringBuilderインスタンスフィールドのすべてのクラス をマーク 2. それらのオブジェクトインスタンスを探索 3. オブジェクトインスタンスの最終利用を追跡 4. MyClassにresetメソッドを追加
  • 31. • 試験用ソフトウェア集の開発 • 継続的統合および継続的デリバリーの採用 • 文書とコードはGitHubレポジトリに公開予定 - https://github.com/samitanwer/Androsia (現在はプライベート設定) 現在取り組んでいること
  • 32. 参考文献 1. Implementing an intra procedural data flow analysis in Soot, https://github.com/Sable/soot/wiki/Implementing-an-intra-procedural-data-flow-analysis-in-Soot 2. Instrumenting Android Apps with Soot, http://www.bodden.de/2013/01/08/soot-android- instrumentation 3. Dexpler: Converting Android Dalvik Bytecode to Jimple for Static Analysis with Soot, https://arxiv.org/pdf/1205.3576.pdf 4. Precise Interprocedural Dataflow Analysis via Graph Reachability, https://courses.cs.washington.edu/courses/cse590md/01sp/w1l2.pdf 5. Slides by Matthew B. Dwyer and Robby, University of Nebraska-Lincoln, Kansas State University