SigPL Secure Coding Workshop 웹어플리케이션취약점대응을위한 시큐어코딩소개 2013. 06. 28 Korea Chapter 조민재이사 johnny.cho@owasp.org Copyright The Korea Permission is granted to copy, distribute and/or modify this document under the terms of the License. The Korea Chapter http://www.owasp.or.kr 발표자소개 Korea 챕터이사 (Board Member) Yahoo! Korea, NHN, 펜타시큐리티등기업체경력 13 년 SW 개발보안및인프라보안전문가 Top10 2010 번역참여 2 1
발표내용 1. 소개 2. 시큐어코딩규칙소개 3. Q&A 3 4 2
(www.owasp.org) The Open Web Application Security Project 응용소프트웨어보안을연구하는비영리단체 2001.12 : 온라인조직으로미국에서처음시작 2004.04 : 정식비영리법인출범 웹소프트웨어보안에관련된연구프로젝트수행 시험도구및표준문서발간 서적발간 : 시험, 안전한코드개발, 보안코드검토 표준보안통제와라이브러리 전세계챕터 ( 지부 ) 운영및교류 보안컨퍼런스 (AppSec) 개최 5 핵심가치 OPEN( 개방 ) : 모든것이투명하게 INNOVATION( 혁신 ) : 혁신과경험을존중 GLOBAL( 세계적 ) : 누구든지참여 INTEGRITY( 진실 ) : 진실되고, 성실하게 운영원칙 Free & Open Governed by rough consensus & running code Abide by a code of ethics Not-for-profit Not driven by commercial interests Risk based approach 미션 응용소프트웨어보안성향상을목표로활동 상용제품과서비스에대한지지하거나추천하기않고, 대신다양한지식을모아서응용소프트웨어보안기술을생성 6 3
Korea Chapter 2011.01 : 온라인으로이사진구성시작 2011.06 : 시큐어코딩규칙참고가이드번역 2011.10 : 제 1 회 Korea 챕터세미나 2013.02 : AppSec ASIAPAC 2013 2013.02.19~23, 하얏트리젠시제주 7 Top Ten (2013 Edition) https://owasp.org/index.php/category:_top_ten_project 8 4
Top10 http://owasp.org/index.php/category:_top_ten_project 9 시큐어코딩규칙 10 5
문서에대한배경 Secure Coding Practices Quick Reference Guide 웹어플리케이션개발자들이 시큐어코딩규칙 을빨리이해할수있도록개발 보잉社내부에서사용하기위해최초개발 2010.07 : 보잉사가 에저작권을양도 2010.08 : 프로젝트로시작 (v1) 2010.10 : v2 개정 11 시큐어코딩규칙개요 기술에종속적이지않은코딩규칙 무엇을할것인가에초점 ( 어떻게할것인가는아님 ) 집약적이면서도포괄적인체크리스트형식 취약점보다는시큐어코딩요구사항에중심 개발자와보안담당자간에동일한용어로의사소통하기위한기술용어정의 12 6
구성 체크리스트형식으로되어있으며, 아래내용이포함 목차 소개 소프트웨어보안과위험원칙개요 시큐어코딩규칙체크리스트 참고자료 중요한기술용어 13 체크리스트규칙 간단하고, 핵심위주 해야할것 과 하지말아야할것 을직설적으로표현 규칙을서열화하지말자 일부규칙은시스템또는정보의중요도에따라조건적으로권고 어플리케이션에적용된보안사항은확실히이해할수있어야한다. 14 7
시큐어코딩규칙체크리스트 입력값검증 출력값인코딩 인증과패스워드관리 세션관리 접근통제 암호규칙 에러처리와감사기록 데이터보호 통신보안 시스템설정 데이터베이스보안 파일관리 메모리관리 일반코딩규칙 15 체크리스트부분 입력값검증 신뢰시스템의모든데이터유효성을검증 ( 예 : 서버 ) 모든데이터의출처를확인하고신뢰 / 비신뢰로구분하라. 출처를신뢰하지못하는모든데이터를검증 ( 예 : 데이터베이스, 파일스트림등 ) 잠재적으로위험한문자가반드시입력되어야한다면, 출력값인코딩, 안전한작업을위한 API, 그리고애플리케이션전체에대한데이터가활용되는감사기능과같은추가적인통제기능구현. 일반적으로위험한문자의예는다음과같다 : <>"'%()&+ \ \' \" 16 8
체크리스트부분 출력값인코딩 신뢰시스템의모든인코딩을적용 ( 예 : 서버 ) 외부로나가는인코딩에대해표준적이고, 시험이된루틴이용 애플리케이션의신뢰범위 (trust boundary) 외부로부터클라이언트로반환된모든데이터는상황에맞는출력값인코딩. HTML 엔터티인코딩이예가될수있지만, 모든경우에그런것은아니다. 사용하는인터프리터에서안전하다고알려진문자이외의모든문자를인코딩 SQL, XML, 그리고 LDAP 에쿼리하는신뢰받지못하는데이터의모든출력값을상황에맞게필터링 17 체크리스트부분 인증과패스워드관리 의도적으로공개하는경우를제외한모든페이지와자원은인증실시 모든인증통제는반드시신뢰시스템에서수행 ( 예 : 서버 ) 특수한경우를제외하곤, 표준화되고검증된인증서비스를확립하고이용 외부인증서비스를호출하는라이브러리를포함한모든인증통제는중앙집중화하여사용하라 요청된자원과인증로직을구분하고중앙집중화된인증통제정보를주고받는데는리다이렉트를사용하라 모든인증통제는안전하게인증실패처리 인증정보를전송할때에는반드시 HTTP POST 요청을사용 GET method : 정보가 URL에적혀서전달 POST method : 정보가 request 본문에전달됨 18 9
데이터베이스보안 반드시사전준비된쿼리 (prepared queries) 를사용 입력값검증과출력인코딩을활용하고메타문자 (*,?, [ ],~,!, +) 를확실히처리. 만약이작업이실패한다면, 데이터베이스명령어를실행시켜선안됨 반드시변수가제대로입력되었는지검증 데이터베이스에접속했을때애플리케이션은가장낮은수준의권한을사용 데이터베이스접속을위해안전한인증정보를사용 접속정보는애플리케이션내에하드코딩되어선안됨. 접속정보는신뢰된시스템의별도설정파일로저장및암호화 데이터에직접접근하지못하도록저장프로시저 (stored procedure) 를사용하고, 데이터베이스에존재하는기본테이블에대한권한제거 데이터베이스접속은가능한빨리종료 기본으로제공되는데이터베이스관리계정을제거하거나패스워드를변경. 강력한패스워드 / 비밀문구를활용하거나다중인증을구현 불필요한모든데이터베이스기능을비활성화 ( 예 : 불필요한저장프로시저또는서비스, 유틸리티패키지, 필요한최소한의기능과옵션만을설치하라 ( 공격노출범위축소 )) 불필요한벤더기본콘텐츠제거 ( 예 : 샘플스키마 ) 비즈니스요구사항에필요하지않은모든기본계정비활성화 애플리케이션은데이터베이스에접속할때개별기능 ( 권한 ) 에대해다른인증정보를사용 ( 예 : 사용자, 읽기전용사용자, 방문자, 관리자 ) 19 활용방법 시나리오 #1: 가이던스문서개발 시큐어코딩규칙 Guiding Principles What to do How to do it 보안정책 어플리케이션보안절차서 어플리케이션보안코딩표준 20 10
활용방법 continued 시나리오 #2: SDLC(Secure Development Lifecycle) 지원 What to do How you should do it What you did Did it work 어플리케이션보안요구사항 시큐어개발절차 표준화된라이브러리 솔루션검토 테스트솔루션구축 라이브러리에없는솔루션에대한표준가이던스 시큐어코딩규칙 21 가이드활용방법 continued 시나리오 #3: 개발위탁 소프트웨어외주개발을할때보안요구사항을확인 RFP 및계약서에포함 ( 가격에도꼭포함!) How do I make it work We can build anything 시큐어코딩규칙 I need cool Software RFP Contract Best Software Best Ever Software Ever Programmer Salesman Customer 22 11
안전한개발프레임워크 안전한소프트웨어개발프레임워크가이드는시큐어코딩규칙범위는아니지만 프로젝트에다양한프로젝트가있음 Implement a secure software development lifecycle CLASP Project Establish secure coding standards Development Guide Project Build a re-usable object library Enterprise Security API (ESAPI) Project Verify the effectiveness of security controls Application Security Verification Standard (ASVS) Project) Establish secure outsourced development practices including defining security requirements and verification methodologies in both the RFP and contract Legal Project 23 Q & A Suggestion 12