Software Engineering Research Group Graduate School of Engineering

  • Slides: 21
Download presentation
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現 横森 励士 井上研究室 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering

オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現 横森 励士 井上研究室 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

情報フロー (Information Flow) プログラム中の変数間に存在するデータ授受関係 explicit flow 変数の定義・参照間に存在 implicit flow 分岐(繰り返し)命令の条件節と内部の文の間に存在 1: 2: 3: 4:

情報フロー (Information Flow) プログラム中の変数間に存在するデータ授受関係 explicit flow 変数の定義・参照間に存在 implicit flow 分岐(繰り返し)命令の条件節と内部の文の間に存在 1: 2: 3: 4: 5: b = 5; c = 5; if ( c > 0 ) { a = b; } 6 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

情報フロー解析の例 情報フローを元に、プログラムの各地点における SC を 求める 1: void method(int a , int b, int c)

情報フロー解析の例 情報フローを元に、プログラムの各地点における SC を 求める 1: void method(int a , int b, int c) { 2: int d = a + b + c; 3: if ( c > 0 ) { 4: a = b; 5: } 6: printf(“%sn”, a); 7: } 8 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

解析例 メソッドSample. Test()内の解析 解析前にクラスのメンバ変数、仮 実行順に従い解析 呼び出し先のメソッドを解析 引数からSCsetを構築 出力文では参照している変数の SCを求める SCset =={ (Y, high) }

解析例 メソッドSample. Test()内の解析 解析前にクラスのメンバ変数、仮 実行順に従い解析 呼び出し先のメソッドを解析 引数からSCsetを構築 出力文では参照している変数の SCを求める SCset =={ (Y, high) } SCset { (Y, high), SCset = { (Y, high) } (X, SCset { (value, })} = { low) (Y, high), SCset = { (Y, high), (X, { (value, high) } (value, } ) } low) } SCset(X, = {{ (v, high), low) (value, (文Base X(文X. m. A(); 解析前) = new Base(); 解析後) 文System. out. println(X. value); のSCはhigh class Base { public String value; public void m. A(String v) { v = value; } } class Sample { Y ← high public static void Test(String Y) { Base X = new Base(); X. m. A(Y);     System. out. println(X. value); } } 11 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

オーバーライドへの対応 メソッド呼び出し文単体では、 呼び出すメソッドを特定できない X. m. A(Y) を正しく解析するため には、Base クラスの派生クラス のメソッドについても考慮する必 要がある X. m. A()

オーバーライドへの対応 メソッド呼び出し文単体では、 呼び出すメソッドを特定できない X. m. A(Y) を正しく解析するため には、Base クラスの派生クラス のメソッドについても考慮する必 要がある X. m. A() の実体は? Base クラスの m. A() Derived クラスの m. A() class Base { protected String value; public void m. A(String v) { System. out. println(v); } } class Derived extends Base { public void m. A(String v) { value = v; System. out. println(v); } } class Sample { public static void Test() { String Y = “high”; ← high Base X = new Derived(); X. m. A(Y); } } 13 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

オーバーライドへの対応 参照変数の指すインスタンスの型を 特定する 参照変数ごとに、それが指すイ ンスタンスが取りうる型について の情報を保持する X は Derived クラスのイン スタンスを指している X. m. A()

オーバーライドへの対応 参照変数の指すインスタンスの型を 特定する 参照変数ごとに、それが指すイ ンスタンスが取りうる型について の情報を保持する X は Derived クラスのイン スタンスを指している X. m. A() の実体は Derived クラスの m. A() メソッド呼び出し文の解析対象 となるメソッドを限定可能 class Base { protected String value; public void m. A(String v) { System. out. println(v); } } class Derived extends Base { public void m. A(String v) { value = v; System. out. println(v); } } class Sample { public static void Test() { String Y = “high”; ← high Base X = new Derived(); X. m. A(Y); } } 14 修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University