Secure Coding 을위한 Semantic 분석엔진 SPARROW SCE PA 사업부개발 2 팀장 정영범박사
사이버해킹 55 억 보안취약점 75% 보안약점의조기제거 30 배
Secure Coding Mandatory 2012.12 40억이상 2014. 20억이상 2015. 감리대상사업전체
행정기관 제안요청서에 SW 개발보안적용명시 계약시 SW개발보안을위한적절한개발절차및진단도구사용여부확인 SW보안약점제거여부자체진단 사업자 개발인력대상 SW 개발보안관련교육실시 SW 개발보안가이드참조하여개발 감리기관 SW 보안약점제거여부진단 부적합사항조치여부확인
7 가지보안약점유형 입력데이터검증및표현 시간및상태 코드오류 보안기능 에러처리 캡슐화 API 오용 43 가지보안약점
웹페이지로그인 admin SparrowFly SELECT * FROM Users WHERE user=admin AND passwd=sparrowfly
SQL Injection 공격자 1 조작된 request Data Base 2 DB 열람 웹서버 조작된 SQL query 실행 3 공격결과
SQL Injection attacker OR 1=1 /* */-- SELECT * FROM Users WHERE user=attacker OR 1=1 /* AND passwd= */
SQL Injection try { String user = input.getusername(); String password = input.getpassword(); String query = SELECT * FROM Users WHERE Name= + user + AND Password= + password; stmt = con.preparestatement(query); rs = stmt.executequery(); } catch (SQLException sqle) {... } 취약한코드
SQL Injection try { String user = input.getusername(); String password = input.getpassword(); String query = SELECT * FROM Users WHERE Name=? AND Password=? ; stmt = con.preparestatement(query); stmt.setstring(1,user); stmt.setstring(2,password); rs = stmt.executequery(); } catch (SQLException sqle) {... } 안전한코드
7 가지보안약점유형 입력데이터검증및표현 시간및상태 코드오류 보안기능에러처리캡슐화 API 오용 정적분석도구
시큐어코딩진단을위한 정적분석 프로그램개발중적용 소스코드상결함위치표시 프로그래머교육효과
정적분석의장점 오류 작동을위한 오류한계치 개발일정지연에따른 QA 시점지연 시간 일반적테스트방법론적용 개발초기구현단계적용 초기개발완료 QA 시작예정일 출시
소스코드의위험을검출하는 정적분석 보안약점 코딩표준 실행오류 분석의깊이
정적분석엔진 Syntactic Analysis 프로그램의생김새나구조만관찰하는분석 간단한구문검사만으로쉬운패턴의오류검출가능 Semantic Analysis 실제프로그램이실행될때의실행의미를이해하는분석기술 어려운오류를찾아낼수있고, 허위경보가적은정교한분석이가능
패턴매칭 ( 오탐 ) zoo True Return *x x = NULL y = foo() y > 0 False foo int foo() { return -1; } Return -1 int zoo() { int* x = NULL; int y = foo(); if( y > 0) { return *x; } return 0; } Return 0
패턴매칭 ( 오탐 ) zoo x = NULL y = foo() foo int foo() { return -1; } True Return *x y > 0 False Return -1 int zoo() { int* x = NULL; int y = foo(); if( y > 0) { return *x; } return 0; } Return 0
패턴매칭 ( 미탐 ) zoo int foo() { foo x = NULL return -1; } True Return *x y = foo() y < 0 return False Return -1 여기서무슨일이일어나는지모름 int zoo() { int* x = NULL; int y = foo(); if( y < 0) { return *x; } return 0; }
실행의미기반 메모리상태 zoo int foo() { foo x = NULL x : NULL x : NULL y : -1 True Return *x y = foo() y < 0 return False Return -1 y 가 -1 이란걸알고분기문의참경로로프로그램이실행됨 } return -1; int zoo() { int* x = NULL; int y = foo(); if( y < 0) { return *x; } return 0; }
Semantic 정적분석 값이안전한범위내에서만쓰이는가 Buffer overrun, divide by zero 등을검출할때 값이안전하게할당된주소인가 Null dereference, double free, use after free 등을검출할때 값이초기화되었는가 Uninitialized variable 등을검출할때 값이외부로부터들어온위험한값인가 SQL Injection, Information Leak 등을검출할때
의미분석의어려움 프로그램루프포인터의사용함수호출동적으로결정되는값사용규모가큰프로그램
학계가선도하는분야
SPARROW SCE 시큐어코딩가이드 100% 지원 Semantic 분석엔진적용으로정확한오류진단상세한분석레포트개발환경통합지원다양한개발플랫폼과언어환경지원
SPARROW SCE 시큐어코딩가이드 100% 지원 Semantic 분석엔진적용으로정확한오류진단상세한분석레포트개발환경통합지원다양한개발플랫폼과언어환경지원
- 오류가발생한위치와원인을편리하게확인할수있는웹기반오류분석결과보고서
소스네비게이터 Click - 소스네비게이터를통한결함발생장소및원인제공으로데이터흐름에따른쉽고직관적인분석가능
결함원인제공지점 - Memory Leak 와연관되어있는리소스지점표시
링크결함분할모드 변수하이라이트 - 변수하이라이트, 링크결함분할모드등다양한부가기능제공
- 결함의자세한설명및예시를통한해결책제시 - CWE, CERT, OWASP 등의공인기관에서제공하는오류가이드링크
SPARROW SCE 시큐어코딩가이드 100% 지원 Semantic 분석엔진적용으로정확한오류진단상세한분석레포트개발환경통합지원다양한개발플랫폼과언어환경지원
개발자 어플리케이션개발서버 Sparrow Engine 결함발견시반려 결재의뢰 보안관리자 정책설정 형상관리서버 Sparrow Engine Compile 및진단 어플리케이션운영서버
- 일괄관리를위한 CERT, CWE, OWASP, SC 등체커그룹제공 - 분석항목선택, 위험도조절가능
- NEST 의접속권한및프로젝트마스터의권한설정기능
개발자 어플리케이션개발서버 Sparrow Engine 결함발견시반려 결재의뢰 보안관리자 정책설정 형상관리서버 Sparrow Engine Compile 및진단 어플리케이션운영서버
SPARROW SCE 시큐어코딩가이드 100% 지원 Semantic 분석엔진적용으로정확한오류진단상세한분석레포트개발환경통합지원다양한개발플랫폼과언어환경지원
SPARROW SCE 시큐어코딩가이드 100% 지원 Semantic 분석엔진적용으로정확한오류진단상세한분석레포트개발환경통합지원다양한개발플랫폼과언어환경지원
Secure Coding 을위한 Semantic 분석엔진 SPARROW SCE