웹응용프로그램보안취약성 분석기구현 소프트웨어무결점센터 Workshop 2010. 8. 25 한국항공대학교, 안준선 1
소개 관련연구 Outline Input Validation Vulnerability 연구내용 Abstract Domain for Input Validation Implementation of Vulnerability Analyzer 기존연구 결론 & 향후연구 2
소개 기구현 입력언어 : PHP 대상보안취약성 : Improper Input Validation SQL 삽입 Cross Site Scripting(XSS) PHP 파일삽입 OS 명령어삽입 practical false positives/false negatives 3
부적절한입력값검증 위험한외부의입력값을적절한검사없이내부의보안에민감한연산에사용 SQL 삽입 : SQL 쿼리생성 Cross Site Scripting(XSS): 동적웹페이지생성 PHP 파일삽입 : 파일삽입경로생성에사용 OS 명령어삽입 : 외부명령어생성에사용 예 :SQL 삽입 $id = $_Request( name ); mysql_query( SELECT MessageID,Subject FROM. messages WHERE MessageID= $id ); = name OR 1=1; SELECT MessageID,Subject FROM messages WHERE MessageID = ; DROP TABLE( messages ); 4
기 특징 요약해석기반분석 Context non-sensitive 함수간 /file간분석사용 전체구조 분석대상 PHP 코드 PHP 전단부 AST 분석결과 GUI 방정식생성 Worklist 취약성검출 취약성분석 5
PHP 언어고려사항 문자열자료값의사용 Variable Variables $x = b ; if (...) $x = a ; $$x = 1; // $a = 1 or $b = 1; Array Indexing $x = x ; if (...) $x = 1 $y = array($x=> a, b ); // $y: ( x -> a, 1-> b ) or // (1-> a,2-> b ) String Conversion $x = 12bac +3; // $x == 15 6
PHP 언어고려사항 Reference Assignments $x = array(11,12,13); $x[0] =& x[1]; $y =& $x[1]; $y = 0; // $y == $x[0] == $x[1] == 0 Copy on Assignments $x = array(11,12,13); $y = array(21,22,23); $z = array($x, $y); $x[0] = 1; // $x : (0,12,13) // $z : ((11,12,13), (21,22,23)) 7
요약공간 요약공간 : 외부의위험문자열의제거를추적 S E(r) E(r) r Regexp E(r) E(r ) = E(r&r ) I Top Value : E(#) 2 Num k 2 String k 8
요약공간 함수정의예 : preg_replace(pat, rep, sub) preg_replace(r,s,e(r )) = E(c 1... c n ) where s= and c i s are single character in L(r r) E(r r ) if s cannot be a substring of any s L(r r) and r and r cannot produce a substring of s E(r) if s cannot be a substring of any s L(r) and r cannot produce a substring of s E(r ) if s cannot be a substring of any s L(r ) and r cannot produce a substring of s E(#) otherwise ex) preg_replace( <!,, E(ab x)) = E(x) preg_replace( bc*, de, E(d ef)) = E(bc*) 9
메모리상태 요약공간 State : SymbolTable * Memory SymbolTable : (Loc -> Addr)*Addr Memory : (Addr -> Value)*Value Value := E(r) S I {s1,..., sk} ArrayValue 10
취약성의검출 민감한작업에외부의입력값 E(r) 이사용되고, r 에위험문자열이포함되지않으면취약한것으로판단 위험문자열 SQL 삽입 :,, -- Cross Site Scripting(XSS): &, <, >,,, /,... PHP 파일삽입 : /, //, \, \\,.,.. OS 명령어삽입 : /, //, \, \\,.,.. * OWASP Prevention Cheat Sheet 11
실행화면 12
실행화면 13
SQL 삽입취약성 True positives... 프로그램파일라인수검출갯수시간 EVE Activity Tracker(1.0) PHP 파일삽입취약성 프로그램파일라인수검출갯수시간 PHPGEDVIE W -2.65 Member.php 510 4 3.156 User.php 136 1 0.032 config_gedcom.php 132 2 0.417 functions.php, 1856 1 0.843 authentication_index.php 418 1 0.422 config_gedcom.php 132 2 0.417 1.0.0rc2 bug_sponsorship_list_ view_inc.php 155 2 0.427 Mantis- PhpDig-1.8.9- rc1 config.php 472 6 1.099 14
향후연구 File Inclusion 결론... include($libpath.$command..php );... Direct File Access 성능향상 memory state 최적화 copying on assignment worklist algorithm 언어지원확장 Domain 수정 (prefix, postfix) 15
관련연구 Minamide, WWW 05 결론 PHP 문자열데이터분석 (CFG 분석 ) Z. Su and Wasserman, PLDI 07 SQL Injection 취약성분석 Z. Su and Wasserman, ICSE 08 XSS 취약성분석 Doh et al, SAS 09 Abstract Parsing 16