JP5186443B2 - 文字列の妥当性を判定するシステム、方法及びプログラム - Google Patents
文字列の妥当性を判定するシステム、方法及びプログラム Download PDFInfo
- Publication number
- JP5186443B2 JP5186443B2 JP2009155705A JP2009155705A JP5186443B2 JP 5186443 B2 JP5186443 B2 JP 5186443B2 JP 2009155705 A JP2009155705 A JP 2009155705A JP 2009155705 A JP2009155705 A JP 2009155705A JP 5186443 B2 JP5186443 B2 JP 5186443B2
- Authority
- JP
- Japan
- Prior art keywords
- character string
- program
- storage means
- prog
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Description
MONAは、http://www.brics.dk/mona/download.htmlから入手可能である。
そのようなツールは例えば、http://wala.sourceforge.net/から入手可能である。チェックしようとするプログラミング言語のソースコードが、Java(商標)以外のC、C++、C#、その他の言語である場合でも、
まず、次のようなJava(商標)のプログラムを考える。
String a = "a";
String b = "b";
String s;
if (flag) { s = a + b; }
else { s = b + a; }
System.out.println(s);
Prog(Va,Vb,Vs) ≡
"a"(Va)∧"b"(Va)∧(concat(Vs,Va,Vb)∨concat(Vs,Vb,Va))
Spec(Vs) ≡ ∀P⊆Vs.¬"<"(P)
Prog(Va,Vb,Vs) ⇒ Spec(Vs)
ここで、Va,Vb,Vsは、自由変数である。
Prog'(Va,Vb,Vs) ≡
"a"(Va)∧(concat(Vs,Va,Vb)∨concat(Vs,Vb,Va))
"<"(Vb)のような反例を得ることができる。
文字列の値が未知のとき、仕様(制約)を満足させる変数bの値を見出すための式を生成することができる。
Prog'(Va,Vb,Vs) ∧ Spec(Vs)
M2Lにおいては、文字列の値の位置と、位置の部分集合はそれぞれ、1階変数と、2階変数によって直接記述することができる。本発明のエンコーディング技法においては、有限文字列をヒープと考える。これは、プログラムと仕様から生成されたM2L式を満たす。プログラム中で構築される文字列は、そのヒープの位置の集合によってあらわすことができる。例えば、"abcabc"というヒープ文字列があったとして、位置の集合{0,2}と{2,5}はそれぞれ、文字列"ac"と文字列"cc"をあらわす。ヒープ中の各キャラクタは、M2LにおけるM2L{Str}[5]をエンコーディングする方法の場合、ビット・ベクトルによってあらわすことができる。1バイト文字をあらわすために、8つの2階変数
B0,...,B7が必要である。ここで、Biは、i番目のビットが1である文字の位置を含む。
concat(R,P,Q) ≡ R = P∪Q
∧(∀p,q . p∈P∧q∈Q ⇒ p<q)
他の文字列演算もM2Lで同様に定義される。
次に、図3及び図4のフローチャートを参照して、本発明のアルゴリズムの概要を説明する。上述のように、本発明のこの実施例では、検証入力は、SSAプログラム入力Progと、ターゲット変数xtと、仕様Specである。そのような仕様は、可能的には解析対象変数xtに割り当てられる文字列の性質をあらわす。
ステップ416で、それを、宣言progx(R) ≡ ||f||(R,progx1,...,progxn)に変換する。
ここで、||f||(R,progx1,...,progxn)は、高階述語 ||f||を、変数Rと、述語progx1,...,progxnでインスタンス化することによって得られる。
宣言progx(R) ≡ progx1(R)∨...∨progxn(R)に変換する。
ステップ424で、もし定義が文字列の結合によってのみ影響されると判断したなら、ステップ426で、非循環変数を終端の変数と考え、非循環変数が対応するM2L述語に変換されるような正規文法をあらわすM2L述語宣言progxを構築することによって、その変数に関連する命令を正規文法(または、正規表現)に変換する。
そうでないなら、ステップ428で、循環的定義を固定回数だけアンロール(unroll)し、またはループ不変量を自動的に見出す技術を使用する。
<プログラム>
プログラムは、SSAの形式で表現される。SSAについては、下記の文献を参照されたい。
B. K. Rosen, M. N. Wegman, F. K. Zadeck, Global value numbers and redundant
computations,
Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of
programming, San Diego, California, United States
Pages: 12 - 27, 1988
Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman,
F. Kenneth Zadeck,
Efficiently computing static single assignment form and the control
dependence graph
Source ACM Transactions on Programming Languages and Systems (TOPLAS)
archive, Volume 13 , Issue 4 (October 1991)
x ∈ X
n ∈ N
v ∈ V
x' ::= x|¬x|⊥
s ::= x = v ステートメント
| x = undefined
| x = f(x1,...,xn)
| x = Φ(x1,...,xn)
b ::= (n,{s}) 基本ブロック
N ::= {b} 基本ブロックの集合
E ::= {(b,b,x')} エッジの集合
G ::= (N,E') プログラム(制御フロー・グラフ)
<組込み関数の抽象>
組込み関数の抽象は、M2L述語によって予め定義されている。すなわち、組込み関数fの抽象は、記号||f||であらわされる。組込み関数のパラメータは、黙示的には高階変数であらわされ、それは、述語で置き換えることができる。各高階変数は、述語によってインスタンス化されると想定され、その述語は、命令の抽象化の時点で、組込み関数のパラメータに割り当てられた文字列の値の特性をあらわす。
ここで、ww'は、有限文字列wとw'の連結をあらわし、下記の式は、式Ψが、有限の文字列wと、代入Iについて成立することを示す。
Lw,I(Ψ)は、Ψによってあらわされる文字列の集合であり、下記のとおり定義される。
http://www.brics.dk/mona/publications.htmlの6.6章の記載内容と同様であるが、異なるのは、この発明の方法では、終端記号として考えることができる、非循環変数のプログラム変数に対応する述語が使用できる、ということである。
<手続間解析>
今まで、手続内解析だけを述べてきたが、これは、容易に手続間解析に拡張することができる。そのアルゴリズムを説明するためにまず、コールグラフのシンタックスを次のように定義する。
m ∈ M
N' ::= {(m,g)}
E' ::= {((m,g),(m,g))}
D ::= {((x,m),{(x,m)})}
cg ::= {(N',E',D)}
ラベル付けされたストリングの解析は、ストリングの解析の変形であって、各文字が、汚染(taintedness)などの追加の情報をもっている。そのようなラベルは、追加のビットを使用することにより、あらわすことができる。例えば、汚染文字と非汚染文字をあらわしたいなら、1バイト文字を9ビットであらわす。
条件を考慮した解析の場合、下記に示す抽象化を行う。
ここでπは、変数と基本ブロックの対から制約へのマッピングである。その制約は、指定された基本ブロックで使用されている指定された変数をアサートし、それはM2L式であらわされると想定される。そのようなπは、本出願人に係る、米国特許第7530107号に記載されているのと同一の方法で、計算することができる。
もし循環変数xについてループ不変量invxがあるなら、関数呼び出しの抽象化に、progxの代わりにこの述語を使用することができる。そのようなループ不変量を見出すために割り当てられる文字列の値からなる全ての文字を含む文字集合をあらわすために、自由(位置集合)変数CSxを導入する。
invx ≡ construct(R,CSx)
ここで、construct(R,S) ≡ R ⊆ S
∀R . progx(R) ⇒ invx(R)
(∀R . progx(R) ⇒ invx(R))
⇒ (∀R . progy(R) ⇒ Specy(R))
(∨x∈X ∀R . progx(R) ⇒ invx(R))
⇒ (∀R . progy(R) ⇒ Specy(R))
http://www.brics.dk/mona/publications.htmlにあるようなM2Lの典型的な正規表現のエンコーディング方法と同様に、この発明の実施例でも、正規表現のパターンマッチングを使用して、それを正規表現の演算に使用することができる。エンコーディング方法は、数11にあるのと同様である。例えば、正規表現(ab)*は、次のようにあらわすことができる。
is_ab_star(V) ≡
∃R . min(V) ∈ R ∧ max(V) + 1 ∈ R ∧
∀r,r',S . consecutive(r,r',R) ∧ strr(S,V,r,r')
⇒ "ab"(S)
インデックスは、位置と、位置の集合の対でエンコードすることができる。例えば、プログラム定文字列"ace"が、M2Lで位置集合{0,2,4}でエンコードされるなら、文字列"ace"のインデックスは、対(2,{0,2,4})によってエンコードされる。
ここで、||indexOf||の第1のパラメータは位置であり、第2のパラメータは、その位置を含む文字列をあらわす。このように、文字列インデックスを扱う関数の呼び出しについては、僅かに異なる抽象化が使用される。
先ず下記は、文字列の値を出力するJava(商標)のプログラムである。
static public void main(String args[]){
String uname = args[0];
String group = args[1];
if (group.equals("IBM")) {
System.out.println(uname + "(IBM)");
} else {
uname = uname.replace("<","<");
System.out.println(uname);
}
}
G = (N, E)
N = {b1, b2, b3, b4}
E = {(b1,b2,v2), (b1,b3,¬ v2), (b2, b4), (b3, b4) }
b1 = (1, BB1)
b2 = (2, BB2)
b3 = (3, BB3)
b4 = (4, BB4)
BB1 =
uname = undefined;
group = undefined;
v1 = "(IBM)";
v2 = equals(group,v1)
BB2 =
v3 = uname + v1;
System.out.println(v3)
BB3 =
v4 = "<";
v5 = "lt;";
v6 = replace(uname,v4,v5);
System.out.println(v6)
BB4 = φ
pred prog_v1(var2 R) =
ex2 c1,c2,c3,c4,c5 where is_lparen(c1) & is_I(c2) & is_B(c3) & is_M(c4) & is_rparen(c5):
ex2 S1,S2,S3,S4,S5:
S1 = empty & concat(S2,c1,S1) & concat(S3,c2,S2) &
concat(S4,c3,S3) & concat(S5,c4,S4) & concat(R,c5,S5);
pred prog_v2(var2 R) =
ex2 P: prog_v1(P) & (R = P);
var2 uname;
var2 group;
pred prog_uname(var2 P) = P = uname;
pred prog_group(var2 P) = P = group;
pred prog_v3(var2 R) =
ex2 P,Q: prog_uname(P) & prog_v1(Q) & concat(R, P, Q);
pred prog_v4(var2 R) =
is_lt(R);
pred prog_v5(var2 R) =
ex2 c1,c2,c3,c4 where is_amp(c1) & is_l(c2) & is_t(c3) & is_semicolon(c4):
ex2 S1,S2,S3,S4:
concat(S2,c1,c2) & concat(S3,c2,S2) &
concat(S4,c3,S3) & concat(R,c4,S4);
pred prog_v6(var2 R) =
ex2 S,X',Y':
prog_uname(S) &
(all1 x : (x in X' <=> ex2 X : x in X substr(X, S) & prog_v4(X))) &
(all1 y : (y in Y' <=> ex2 Y : y in Y substr(Y, R) & prog_v5(Y))) &
R / Y' = S / X';
pred Spec(var2 P) =
all1 p where p in P: ~is_lt({p});
var2 S;
prog_v6(S) => Spec(S);
static public void main(String args[]){
String s = args[0];
s = s.replaceAll("(ab)+", "z")
System.out.println(s);
}
G = (N, E)
N = {b1,b2}
E = {(b1, b2)}
b1 = (1, BB1)
b2 = (2, BB2)
BB1 =
s = undefined;
v1 = "(ab)*";
v2 = "z";
v3 = replaceAll(s,v1,v2);
System.out.println(v3)
BB2 = φ
include "sa.mona";
pred prog_v1(var2 R) =
ex2 P: min(R) in P & max(R)+1 in P &
all1 r,r': all2 S: consecutive(r,r',P) & strr(S,R,r,r') => is_ab(S);
pred prog_v2(var2 R) = is_z(R);
var2 Xs;
pred prog_s(var2 R) = R = Xs;
pred prog_v3(var2 R) =
ex2 S,X',Y':
prog_args0(S) &
(all1 x : (x in X' <=> ex2 X : x in X & substr(X, S) & prog_v1(X))) &
(all1 y : (y in Y' <=> ex2 Y : y in Y & substr(Y, R) & prog_v2(Y))) &
R \ Y' = S \ X';
pred Spec(var2 P) =
~(ex2 S: substr(S,P) & is_ab(S));
var2 V3;
prog_v3(V3) => Spec(V3);
ここで、prog_v1が、正規表現"(ab)*"をあらわす述語である。
v0 = "ab"
v1 = "ab"
v2 = phi(v0,v3)
v3 = v2 + v1
v2 → v0|v2
v3 → v2 v1
pred prog_v0(var2 R) = is_ab(R);
pred prog_v1(var2 R) = is_ab(R);
pred prog_v2(var2 R) =
ex2 V0,V1Star:
prog_v1(V0) &
(ex2 P: min(V1Star) in P & max(V1Star)+1 in P &
all1 r,r': all2 S: consecutive(r,r',P) &
strr(S,V1Star,r,r') => prog_v1(S)) &
concat(R, V0, V1Star);
pred prog_v3(var2 R) =
ex2 V1,V2:
prog_v2(V2) & prog_v1(V1) & concat(R, V2, V1);
v0 = 0;
v1 = "ab";
v2 = "b";
v3 = indexOf(v1,v2);
v4 = substring(v1,v0,v3);
include "sa.mona";
pred prog_v0(var1 n, var2 S) = pos0(n,S);
pred prog_v1(var2 R) = is_ab(R);
pred prog_v2(var2 R) = is_b(R);
pred prog_v3(var1 n0, var2 S0) =
(ex2 S1: prog_v2(S1) & indexOf(n0, S0, S1)) &
(all2 S1: all1 m:
prog_v2(S1) & indexOf(m,S0,S1) => n0 <= m);
pred prog_v4(var2 R) =
ex2 V1: ex1 v0,v3:
prog_v0(v0,V1) & prog_v1(V1) & prog_v3(v3,V1) &
substrr(R, V1, v0, v3);
pred Spec(var2 R) =
all2 R': R' sub R => ~is_b(R');
var2 R;
prog_v4(R) => Spec(R);
v1 = ...
v2 = "a"
v3 = "b"
v4 = replace(v5,v2,v3)
v5 = phi(v1,v4)
include "sa.mona";
# R is a string constructed from a character
# set S by selecting positions.
# Ex.: Suppose w = "abc", S = {0,1,2}, then
# R = {0}|{1}|{2}|{0,1}|{0,2}|{1,2}|{0,1,2}
pred construct(var2 R, S) = R sub S | R = S;
var2 CSv5;
var2 args0;
pred inv_v5(var2 R) = construct(R, CSv5);
pred prog_v1(var2 R) = is_b(R);
pred prog_v2(var2 R) = is_a(R);
pred prog_v3(var2 R) = is_b(R);
pred prog_v4(var2 R) =
ex2 S,X',Y':
inv_v5(S) &
(all1 x :
(x in X' <=> ex2 X : x in X &
substr(X, S) & prog_v2(X))) &
(all1 y :
(y in Y' <=> ex2 Y : y in Y &
substr(Y, R) & prog_v3(Y))) &
(R \ Y' sub S \ X');
pred prog_v5(var2 R) =
prog_v1(R) | prog_v4(R);
pred SpecA(var2 P) =
all1 p where p in P: ~is_a({p});
(all2 R: prog_v5(R) => inv_v5(R))
=> all2 S: prog_v5(S) => SpecA(S);
204・・・SSAコンバータ
208・・・述語生成器
210・・・組込み関数の抽象集合
214・・・M2Lソルバ
216・・・M2Lで書かれた仕様
Claims (9)
- CPUと主記憶と記憶手段をもつコンピュータの処理により、プログラミング言語のプログラムが生成する文字列の妥当性を、該プログラムを実行せずに判定する方法であって、
前記CPUの処理により、前記記憶手段に保存されている、文字列の宣言を含む、各変数の定義が唯一となるようなプログラミング言語のソースコードを前記主記憶に読み込むステップと、
前記CPUの処理により、前記主記憶に読み込まれた前記ソースコードから、変数の間の制約を抽象化して、M2Lで記述し、記憶手段に格納するステップと、
前記CPUの処理により、前記M2Lで記述された変数の間の制約と、予め用意されて前記記憶手段に保存された文字列の安全/非安全のM2Lの記述を前記主記憶または前記記憶手段に格納するステップと、
前記CPUの処理により、M2Lソルバ上で、前記主記憶または前記記憶手段に格納された、前記M2Lで記述された変数の間の制約と、前記文字列の安全/非安全のM2Lの記述に基づき、文字列の妥当性を判断するステップとを有する、
プログラムが生成する文字列の妥当性を判定する方法。 - 前記各変数の定義が唯一となるようなプログラミング言語がSSA形式である、請求項1の方法。
- 前記プログラミング言語がJava(R)である、請求項1の方法。
- CPUと主記憶と記憶手段をもつコンピュータの処理により、プログラミング言語のプログラムが生成する文字列の妥当性を、該プログラムを実行せずに判定するプログラムであって、
前記CPUに、
前記記憶手段に保存されている、文字列の宣言を含む、各変数の定義が唯一となるようなプログラミング言語のソースコードを前記主記憶に読み込むステップと、
前記主記憶に読み込まれた前記ソースコードから、変数の間の制約を抽象化して、M2Lで記述し、前記主記憶または前記記憶手段に保存するステップと、
前記M2Lで記述された変数の間の制約と、予め用意されて前記記憶手段に保存された文字列の安全/非安全のM2Lの記述を前記主記憶または前記記憶手段に読み込むステップと、
M2Lソルバ上で、前記主記憶または前記記憶手段に格納された、前記M2Lで記述された変数の間の制約と、前記文字列の安全/非安全のM2Lの記述に基づき、文字列の妥当性を判断するステップを実行させる、
文字列の妥当性を判定する処理プログラム。 - 前記各変数の定義が唯一となるようなプログラミング言語がSSA形式である、請求項4の処理プログラム。
- 前記プログラミング言語がJava(R)である、請求項4の処理プログラム。
- CPUと主記憶と記憶手段をもつコンピュータの処理により、プログラミング言語のプログラムが生成する文字列の妥当性を、該プログラムを実行せずに判定するシステムであって、
前記記憶手段に保存された、文字列の宣言を含む、各変数の定義が唯一となるようなプログラミング言語のソースコードと、
前記記憶手段に保存された、M2Lソルバと、
前記記憶手段に保存された、文字列の安全/非安全のM2Lの記述の情報と、
前記CPUの処理により、前記記憶手段から、前記主記憶に読み込まれた前記ソースコードから、変数の間の制約を抽象化して、M2Lで記述し、前記主記憶または前記記憶手段に格納する手段と、
前記CPUの処理により、前記M2Lソルバを動作させ、前記M2Lで記述された変数の間の制約と、前記文字列の安全/非安全のM2Lの記述に基づき、文字列の妥当性を判断する手段を有する、
プログラムが生成する文字列の妥当性を判定するシステム。 - 前記各変数の定義が唯一となるようなプログラミング言語がSSA形式である、請求項7のシステム。
- 前記プログラミング言語がJava(R)である、請求項7のシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009155705A JP5186443B2 (ja) | 2009-06-30 | 2009-06-30 | 文字列の妥当性を判定するシステム、方法及びプログラム |
US12/825,610 US8365280B2 (en) | 2009-06-30 | 2010-06-29 | System, method, and program for determining validity of string |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009155705A JP5186443B2 (ja) | 2009-06-30 | 2009-06-30 | 文字列の妥当性を判定するシステム、方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011013810A JP2011013810A (ja) | 2011-01-20 |
JP5186443B2 true JP5186443B2 (ja) | 2013-04-17 |
Family
ID=43382282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009155705A Expired - Fee Related JP5186443B2 (ja) | 2009-06-30 | 2009-06-30 | 文字列の妥当性を判定するシステム、方法及びプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8365280B2 (ja) |
JP (1) | JP5186443B2 (ja) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8584246B2 (en) * | 2009-10-13 | 2013-11-12 | International Business Machines Corporation | Eliminating false reports of security vulnerabilities when testing computer software |
US8468605B2 (en) * | 2009-11-30 | 2013-06-18 | International Business Machines Corporation | Identifying security vulnerability in computer software |
US8528095B2 (en) | 2010-06-28 | 2013-09-03 | International Business Machines Corporation | Injection context based static analysis of computer software applications |
US8365281B2 (en) * | 2010-11-19 | 2013-01-29 | International Business Machines Corporation | Determining whether method of computer program is a validator |
US20120151592A1 (en) * | 2010-12-13 | 2012-06-14 | Microsoft Corporation | String operations with transducers |
US8667584B2 (en) | 2010-12-15 | 2014-03-04 | International Business Machines Corporation | Formal analysis of the quality and conformance of information flow downgraders |
US8726246B2 (en) * | 2011-05-17 | 2014-05-13 | International Business Machines Corporation | Static analysis of validator routines |
US8769696B2 (en) | 2011-09-29 | 2014-07-01 | International Business Machines Corporation | Automated detection of flaws and incompatibility problems in information flow downgraders |
US20130091197A1 (en) | 2011-10-11 | 2013-04-11 | Microsoft Corporation | Mobile device as a local server |
US9075672B2 (en) * | 2011-10-21 | 2015-07-07 | Microsoft Technology Licensing, Llc | Monadic evaluation of injected query compositions |
US8863292B2 (en) | 2011-12-07 | 2014-10-14 | International Business Machines Corporation | Interactive analysis of a security specification |
US8966635B2 (en) * | 2012-02-24 | 2015-02-24 | Hewlett-Packard Development Company, L.P. | Software module object analysis |
JP2013186647A (ja) * | 2012-03-07 | 2013-09-19 | Yokohama National Univ | 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード |
US9600351B2 (en) | 2012-12-14 | 2017-03-21 | Microsoft Technology Licensing, Llc | Inversion-of-control component service models for virtual environments |
US8984495B2 (en) | 2013-01-03 | 2015-03-17 | International Business Machines Corporation | Enhanced string analysis that improves accuracy of static analysis |
US9021450B2 (en) | 2013-03-11 | 2015-04-28 | International Business Machines Corporation | Scalable and precise string analysis using index-sensitive static string abstractions |
US8881293B1 (en) * | 2013-07-01 | 2014-11-04 | Sap Se | Static application security testing |
US10296737B2 (en) * | 2015-12-09 | 2019-05-21 | International Business Machines Corporation | Security enforcement in the presence of dynamic code loading |
US10095484B2 (en) * | 2015-12-15 | 2018-10-09 | International Business Machines Corporation | Automatic program synthesis using monadic second-order logic |
CN105868280A (zh) * | 2016-03-23 | 2016-08-17 | 沈文策 | 一种互联网信息数据处理系统及方法 |
WO2018092237A1 (ja) | 2016-11-17 | 2018-05-24 | 三菱電機株式会社 | プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム |
WO2020257973A1 (en) * | 2019-06-24 | 2020-12-30 | Citrix Systems, Inc. | Detecting hard-coded strings in source code |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7392545B1 (en) | 2002-01-18 | 2008-06-24 | Cigital, Inc. | Systems and methods for detecting software security vulnerabilities |
JP4248499B2 (ja) | 2003-02-21 | 2009-04-02 | テレコム・イタリア・エッセ・ピー・アー | スマートカードを用いたネットワークアクセス装置の管理方法及びシステム |
CN1809812A (zh) | 2003-04-18 | 2006-07-26 | 盎司实验室股份有限公司 | 用于源代码检测源代码中弱点的方法和装置 |
JP2006523898A (ja) | 2003-04-18 | 2006-10-19 | オンス ラブス,インク | ソースコードの脆弱点の検出法および検出システム |
US20050108562A1 (en) | 2003-06-18 | 2005-05-19 | Khazan Roger I. | Technique for detecting executable malicious code using a combination of static and dynamic analyses |
GB2405499A (en) | 2003-09-01 | 2005-03-02 | Isis Innovation | Information system development |
US20060150160A1 (en) | 2004-06-14 | 2006-07-06 | Sofcheck, Inc. | Software analyzer |
US7661097B2 (en) | 2005-04-05 | 2010-02-09 | Cisco Technology, Inc. | Method and system for analyzing source code |
WO2006118193A1 (ja) * | 2005-04-27 | 2006-11-09 | Matsushita Electric Industrial Co., Ltd. | エージェントおよび分散制約充足方法 |
US7945958B2 (en) | 2005-06-07 | 2011-05-17 | Vmware, Inc. | Constraint injection system for immunizing software programs against vulnerabilities and attacks |
US20070016894A1 (en) | 2005-07-15 | 2007-01-18 | Sreedhar Vugranam C | System and method for static analysis using fault paths |
JP4693044B2 (ja) | 2005-08-18 | 2011-06-01 | 株式会社日立ソリューションズ | ソースコード脆弱性検査装置 |
US7849509B2 (en) | 2005-10-07 | 2010-12-07 | Microsoft Corporation | Detection of security vulnerabilities in computer programs |
US7937692B2 (en) | 2005-11-30 | 2011-05-03 | Red Hat, Inc. | Methods and systems for complete static analysis of software for building a system |
US7844955B2 (en) | 2005-12-24 | 2010-11-30 | International Business Machines Corporation | Performance computer program testing after source code modification using execution conditions |
WO2007116490A1 (ja) * | 2006-03-31 | 2007-10-18 | Fujitsu Limited | ソースコード生成プログラム、ソースコード生成方法およびソースコード生成装置 |
US7975257B2 (en) | 2006-06-13 | 2011-07-05 | Microsoft Corporation | Iterative static and dynamic software analysis |
US7617489B2 (en) | 2006-09-15 | 2009-11-10 | Ounce Labs, Inc. | Method and system for detecting interprocedural vulnerability by analysis of source code |
US8166532B2 (en) * | 2006-10-10 | 2012-04-24 | Honeywell International Inc. | Decentralized access control framework |
US7853987B2 (en) * | 2006-10-10 | 2010-12-14 | Honeywell International Inc. | Policy language and state machine model for dynamic authorization in physical access control |
JP5042315B2 (ja) | 2006-10-19 | 2012-10-03 | チェックマークス リミテッド | ソースコード内のセキュリティ脆弱性の検出 |
US7987451B1 (en) | 2006-11-20 | 2011-07-26 | Mcafee, Inc. | System, method and computer program product for verifying invocations of interfaces |
US20080244536A1 (en) | 2007-03-27 | 2008-10-02 | Eitan Farchi | Evaluating static analysis results using code instrumentation |
US7530107B1 (en) * | 2007-12-19 | 2009-05-05 | International Business Machines Corporation | Systems, methods and computer program products for string analysis with security labels for vulnerability detection |
US8397300B2 (en) | 2009-09-22 | 2013-03-12 | International Business Machines Corporation | Detecting security vulnerabilities relating to cryptographically-sensitive information carriers when testing computer software |
US8584246B2 (en) | 2009-10-13 | 2013-11-12 | International Business Machines Corporation | Eliminating false reports of security vulnerabilities when testing computer software |
US8468605B2 (en) | 2009-11-30 | 2013-06-18 | International Business Machines Corporation | Identifying security vulnerability in computer software |
US8528095B2 (en) | 2010-06-28 | 2013-09-03 | International Business Machines Corporation | Injection context based static analysis of computer software applications |
-
2009
- 2009-06-30 JP JP2009155705A patent/JP5186443B2/ja not_active Expired - Fee Related
-
2010
- 2010-06-29 US US12/825,610 patent/US8365280B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2011013810A (ja) | 2011-01-20 |
US20100333201A1 (en) | 2010-12-30 |
US8365280B2 (en) | 2013-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5186443B2 (ja) | 文字列の妥当性を判定するシステム、方法及びプログラム | |
CN109375899B (zh) | 一种形式验证Solidity智能合约的方法 | |
Ford | Packet parsing: a practical linear-time algorithm with backtracking | |
Jensen et al. | Remedying the eval that men do | |
Tateishi et al. | Path-and index-sensitive string analysis based on monadic second-order logic | |
Brumley et al. | Creating vulnerability signatures using weakest preconditions | |
Mateescu et al. | XTL: A meta-language and tool for temporal logic model-checking | |
Appel et al. | A trustworthy proof checker | |
Yu et al. | Building certified libraries for PCC: Dynamic storage allocation | |
Bour et al. | Merlin: a language server for OCaml (experience report) | |
Ferles et al. | Verifying correct usage of context-free API protocols | |
Arenaz et al. | Xark: An extensible framework for automatic recognition of computational kernels | |
Doh et al. | Abstract parsing: Static analysis of dynamically generated string output using lr-parsing technology | |
D'antoni et al. | Fast: A transducer-based language for tree manipulation | |
Drape et al. | Transforming the. net intermediate language using path logic programming | |
Khoo | Decompilation as search | |
Kim et al. | String analysis as an abstract interpretation | |
Bonfante et al. | A computability perspective on self-modifying programs | |
Kurš et al. | Efficient parsing with parser combinators | |
He et al. | Termination analysis for evolving programs: An incremental approach by reusing certified modules | |
Chapman | Worst-case timing analysis via finding longest paths in SPARK Ada basic-path graphs | |
Carneiro | Metamath zero: The cartesian theorem prover | |
Mailund | Domain-Specific Languages in R: Advanced Statistical Programming | |
Watson et al. | Compilers and Interpreters | |
Shortt | A System for Bounding the Execution Cost of Web Assembly Functions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120710 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120711 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120820 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121127 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20121211 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130108 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130121 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5186443 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160125 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |