한국정보보호학회소프트웨어보안연구회 총괄책임자 취약점분석팀 안준선 ( 항공대 ) 도경구 ( 한양대 ) 도구개발팀도경구 ( 한양대 ) 시큐어코딩팀 오세만 ( 동국대 )
전체적인 그림 IL <O> Rules <XML> Flowgraph Generator Flowgraph Analyzer 흐름그래프 생성기 흐름그래프 분석기 O parser 중간언어 O 파서 RDL parser 규칙명세언어파서 중간언어 O Preprocessor & Vulnerabilityspecific Analyzer 전처리기 & 전용엔진 Results Pattern Matcher <XML> 패턴분석기 도형 의미 단일패턴규칙 단일패턴취약점 흐름패턴규칙 흐름패턴취약점 흐름그래프 전용패턴취약점 4
[($<STRING>,==,$<STRING>)] public class R31000597 { String STRING_CONSTANT = "CWE 597 TEST"; public void cwe_597(string[] args) { if (args[0] == STRING_CONSTANT) { System.out.println(STRING_CONSTANT); [ServerSocket(...)] public void ejb_function() throws IOException { //... ServerSocket s = new ServerSocket( ); //...
[EMPTY(CATCH(SSLHandshakeException))] try { URL url = new URL(urlString); URLConnection cnx = url.openconnection(); cnx.connect(); catch (SSLHandshakeException e) { [DEF(clone)] in-subclass-of Cloneable public class R31000491 implements Cloneable { //... protected Object clone() throws CloneNotSupportedException { //...
[getparameter(...)] -->df [setattribute(..., $0)] protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { usrname = request.getparameter("usrname"); if (session.getattribute(attr_usr) == null){ session.setattribute(attr_usr, usrname);
전체적인 그림 IL <O> Rules <XML> Flowgraph Generator Flowgraph Analyzer 흐름그래프 생성기 흐름그래프 분석기 O parser 중간언어 O 파서 RDL parser 규칙명세언어파서 중간언어 O Preprocessor & Vulnerabilityspecific Analyzer 전처리기 & 전용엔진 Results Pattern Matcher <XML> 패턴분석기 도형 의미 단일패턴규칙 단일패턴취약점 흐름패턴규칙 흐름패턴취약점 흐름그래프 전용패턴취약점 9
public class Test { void foo(string s) {... [foo($1)] -->df [bar($1)] -->df [zoo($0,$1)] String bar(string s) {... return s; void zoo(string s,string t) {... public static void main(string[] args) { Test test = new Test(); String s = "a string"; test.foo(s); String t = test.bar(s); test.zoo(t, s);
전체적인 그림 IL <O> Rules <XML> Flowgraph Generator Flowgraph Analyzer 흐름그래프 생성기 흐름그래프 분석기 O parser 중간언어 O 파서 RDL parser 규칙명세언어파서 중간언어 O Preprocessor & Vulnerabilityspecific Analyzer 전처리기 & 전용엔진 Results Pattern Matcher <XML> 패턴분석기 도형 의미 단일패턴규칙 단일패턴취약점 흐름패턴규칙 흐름패턴취약점 흐름그래프 전용패턴취약점 12
[#Ext()] -->df [excute($0)] [open($1)] -->df [close($1)] [#Ext2()] <--if [#LogCmd($0)]
el := ma op( e1, e2 ) :=. method(,,..., ) el eo e1 e2 en
x := 2 y ma := x + 2 t := foo( ma 1 ) z := s. method( x, t,..., y )
흐름그래프 만들기 17
흐름그래프 줄이기 날짜 18
[foo($1)] -->df [bar($1)] -->df [zoo($0,$1)]
curr:[foo($1)] [TestRule-00] find nexts of 27... 32 is ep, use alternative sp : 33 [27 df-> 33] ----- 27's nexts = {33:CF --> {32 next:[bar($1)]/32 **** chk bounding... ********************* $1 : [25 df-> 30] matched! ***************************************** O ************* goto next step ************** 32 is ep, use alternative sp : 33 [TestRule-00] find nexts of 33... [33 df-> 37] ----- 33's nexts = {37:CF --> {37 next:[zoo($0, $1)]/37 **** chk bounding... ********************* $1 : [30 df-> 35] matched! $0 : [32 df-> 34] matched! ***************************************** O ****************** hit! *******************