"시큐어코딩"의 두 판 사이의 차이
yueun970422 (토론 | 기여) (→사례) |
잔글 |
||
(사용자 4명의 중간 판 14개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''시큐어코딩'''( | + | '''시큐어코딩'''(secure coding)이란 '''소프트웨어 개발 보안'''이라고도 부르며 설계 및 구현(개발) 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법이다. 보안 취약점을 줄이기 위해서 소프트웨어 개발 초기 단계에 수정하는 것이 가장 손쉽고 비용 효율성 측면에서 가장 좋기 때문에 이 시큐어 코딩 기법을 적용한다. <ref> Wisedog, 〈[http://story.wisedog.net/%EC%8B%9C%ED%81%90%EC%96%B4-%EC%BD%94%EB%94%A9%EC%9D%B4%EB%9E%80/ 시큐어 코딩이란?]〉, 《wisedog》, 2013-12-09</ref> |
== 개요 == | == 개요 == | ||
− | 시큐어 코딩( | + | 시큐어 코딩(Secure Coding)이란 서비스의 안정성과 신뢰성 확보를 위해 IT 시스템 개발 단계에서 주요 보안 취약점을 고려해 소스 코드 레벨에서 사전에 제거하여 안전한 소프트웨어를 개발하는 기법이다. 즉, 해킹의 기법들을 기도조차 못 하게 만드는 코딩 기법이다.<ref name ="스틸스타크"> 스틸스타크, 〈[https://needjarvis.tistory.com/174 시큐어 코딩(SECURE CODING)]〉, 《티스토리》, 2017-05-02</ref> 흔히 시큐어 코딩이라는 용어 때문에 발생하는 오해는 코딩하는 개발자만 알아서 안전하게 하면 된다는 책임을 가져야 한다는 생각이다. 하지만 시큐어 코딩은 '지켜야 할 일련의 보안 활동'을 의미한다. 즉, 소프트웨어를 개발하는 데 있어서 코드를 안전하게 하는 절차상의 다양한 보안 활동들 전부 포함한다.<ref name = "lg"> LG CNS 보안컨설팅팀, 〈[https://blog.lgcns.com/1381 '시큐어코딩' 해킹당했다. 어디서부터 잘못된 거지?]〉, 《LG CNS》, 2017-04-12</ref> |
== 배경 == | == 배경 == | ||
8번째 줄: | 8번째 줄: | ||
== 필요성 == | == 필요성 == | ||
− | 수많은 과정을 거쳐 소프트웨어를 개발하는데 그만큼의 비용이 발생한다. 추가적인 노력은 흔히 말하는 MM(Man Month)를 증가시켜 비용 상승의 주범이 된다. 따라서 우리는 '서둘러 개발을 완료하고 제품 출시를 하고 유지 보수를 하면서 수정하는 것이 더 효과적이지 않을까'라고 생각할 수 있다. 하지만 아래 연구 결과를 보면 소프트웨어의 결함을 수정하는데 소요되는 비용은 해당 결함을 개발 초기 단계에서 발견할수록 미미하고, 제품이 | + | 수많은 과정을 거쳐 소프트웨어를 개발하는데 그만큼의 비용이 발생한다. 추가적인 노력은 흔히 말하는 MM(Man Month)를 증가시켜 비용 상승의 주범이 된다. 따라서 우리는 '서둘러 개발을 완료하고 제품 출시를 하고 유지 보수를 하면서 수정하는 것이 더 효과적이지 않을까'라고 생각할 수 있다. 하지만 아래 연구 결과를 보면 소프트웨어의 결함을 수정하는데 소요되는 비용은 해당 결함을 개발 초기 단계에서 발견할수록 미미하고, 제품이 출시 된 이후에 발견하게 될 경우 약 30배의 비용이 지급된다. 계발 초기 단계에서부터 안전한 소프트웨어를 위해 투자하는 비용은 전체적으로 봤을 때 오히려 비용을 절감하는 효과를 불러온다.<ref name = "lg"></ref> |
:{|border=2 width=600 | :{|border=2 width=600 | ||
43번째 줄: | 43번째 줄: | ||
== 개발 단계별 보안 활동 == | == 개발 단계별 보안 활동 == | ||
* 요구사항 분석 단계 : 요구사항 중 보안 항목 식별, 요구사항 명세서 | * 요구사항 분석 단계 : 요구사항 중 보안 항목 식별, 요구사항 명세서 | ||
− | * 설계 : 위협원 도출을 위한 위협 모델링, | + | * 설계 : 위협원 도출을 위한 위협 모델링, 보안 설계 검토 및 보안설계서 작성, 보안 통제 수립 |
* 구현 : 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수해 개발, 소스 코드 보안 약점 진단 및 개선 | * 구현 : 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수해 개발, 소스 코드 보안 약점 진단 및 개선 | ||
* 테스트 : 모의 침투 테스트 또는 동적 분석을 통한 보안취약점 진단 및 개선 | * 테스트 : 모의 침투 테스트 또는 동적 분석을 통한 보안취약점 진단 및 개선 | ||
49번째 줄: | 49번째 줄: | ||
== 사례 == | == 사례 == | ||
+ | [[파일:MS-SDL.png|썸네일|500픽셀|'''MS-SDL'''(MicroSoft-Secure Development Lifecycle)]] | ||
=== MS-SDL(MicroSoft-Secure Development Lifecycle) === | === MS-SDL(MicroSoft-Secure Development Lifecycle) === | ||
− | + | MS에서 보안 수준이 높은 안전한 소프트웨어를 개발하기 위해 자체 수립한 SDL이며, 방법론이 적용되기 전 버전보다 50% 이상 취약점 감소했다.<ref name ="스틸스타크"></ref> 기존의 소프트웨어 개발 주기인 SDLC(Software Development Lifecycle)에 보안을 고려한 SDL 모델을 별도로 구성해 기존 개발 주기에 소프트웨어 보안 및 개인정보 보호 기능을 통합시켰다. 소프트웨어 개발 보안의 중요성을 뒷받침하는 대표적인 사례이며, 자체적으로 개발한 개발 생명주기를 제품 개발 전 과정에 적용하도록 하여 보안 취약점의 원인을 제거하도록 했다.<ref>GREEN초록,〈[https://diaryofgreen.tistory.com/155 Etc :: 마이크로소프트(Microsoft)의 개발생명주기(MS-SDL)]〉, 《티스토리》, 2017-06-25</ref> | |
− | MS에서 | ||
=== Seven Touchpoints === | === Seven Touchpoints === | ||
− | 실무적으로 검증된 개발 보안 방법론 중 하나로 소프트웨어 보안 모범 사례를 SDLC에 | + | 실무적으로 검증된 방법론 중 하나로 보안 강화 기법을 지원하는 프로세스이다. 실무적으로 검증된 개발 보안 방법론 중 하나로 소프트웨어 보안 모범 사례를 SDLC에 통합한다.<ref name ="스틸스타크"></ref> |
+ | * 요구사항과 유즈케이스(use cases) 단계 : 오용 사례와 위험분석을 통해서 보안 요구 사항에 대한 정의와ㅣ 명세를 하고, 오용 사례에 대한 정의 및 케이스 예를 작성한다. | ||
+ | * 구조설계 단계 : 공격 저항 분석(Attack Resistance Analysis), 모호성 분석, 허점 분석 등을 통해 위험 요소를 분석한다. | ||
+ | * 테스트 계획 단계 : 공격 패턴, 위험 분석 결과, 악용 사례를 기반으로 위험기반 보안 테스트를 수행한다. | ||
+ | * 코드 단계 : 구현 오류에 중점을 두고 특히 소스 코드에 존재하는 취약성을 발견할 목적으로 수행되는 코드 정적 분석에 중심을 둔다. | ||
+ | * 테스트ㆍ테스트 결과 단계 : 위험 분석 및 침투 테스팅을 수행한다. 침투 시험을 통해 실제 작동 환경에서의 필드 소프트웨어에 대한 좋은 이해를 제공한다. | ||
+ | * 현장과의 피드백 단계 : 보안 운영을 통해 얻은 공격자와 공격 도구에 대한 경험과 지식은 개발자에게 다시 피드백한다. <ref>〈[https://openeg.co.kr/585 '소프트웨어 개발보안 방법론' SECENT TOUCHPOINT]〉, 《openeg》, 2015-05-25</ref> | ||
=== CLASP(Comprehensive, Lightweight Application Security Process) === | === CLASP(Comprehensive, Lightweight Application Security Process) === | ||
− | 소프트웨어 개발 생명주기 초기 단계에 보안 강화를 목적으로 하는 정형화된 프로세스로써, | + | 소프트웨어 개발 생명주기 초기 단계에 보안 강화를 목적으로 하는 정형화된 프로세스로써, 활동 중심ㆍ역할 기반의 프로세스로 구성된 집합체이다.<ref name ="스틸스타크"></ref> CLASP는 보안 관련 활동을 기존 애플리케이션 개발 프로세스에 쉽게 통합할 수 있도록 설계되었다. 각 CLASP 활동은 개별 프로세스 구성 요소로 나누어지고 하나 이상의 특정 프로젝트 역할에 연결된다. CLASP는 이런 방식으로 프로젝트 참여자에게 자신의 업무수행 방식에 쉽게 적용할 수 있는 지침을 제공한다. 이로 인해 쉽게 성취되고 반복 가능하며 측정 가능한 보안이 점차 향상된다. <ref>〈[https://www.owasp.org/index.php/CLASP_Concepts CLASP 개념]〉, 《OWASP》</ref> |
{{각주}} | {{각주}} | ||
− | == | + | == 참고자료 == |
* Wisedog, 〈[http://story.wisedog.net/%EC%8B%9C%ED%81%90%EC%96%B4-%EC%BD%94%EB%94%A9%EC%9D%B4%EB%9E%80/ 시큐어 코딩이란?]〉, 《wisedog》, 2013-12-09 | * Wisedog, 〈[http://story.wisedog.net/%EC%8B%9C%ED%81%90%EC%96%B4-%EC%BD%94%EB%94%A9%EC%9D%B4%EB%9E%80/ 시큐어 코딩이란?]〉, 《wisedog》, 2013-12-09 | ||
* 스틸스타크, 〈[https://needjarvis.tistory.com/174 시큐어 코딩(SECURE CODING)]〉, 《티스토리》, 2017-05-02 | * 스틸스타크, 〈[https://needjarvis.tistory.com/174 시큐어 코딩(SECURE CODING)]〉, 《티스토리》, 2017-05-02 | ||
* LG CNS 보안컨설팅팀, 〈[https://blog.lgcns.com/1381 '시큐어코딩' 해킹당했다. 어디서부터 잘못된 거지?]〉, 《LG CNS》, 2017-04-12 | * LG CNS 보안컨설팅팀, 〈[https://blog.lgcns.com/1381 '시큐어코딩' 해킹당했다. 어디서부터 잘못된 거지?]〉, 《LG CNS》, 2017-04-12 | ||
* owgno6, 〈[https://codelib.tistory.com/18]〉, 《티스토리》, 2018-08-11 | * owgno6, 〈[https://codelib.tistory.com/18]〉, 《티스토리》, 2018-08-11 | ||
+ | * 〈[https://openeg.co.kr/585 '소프트웨어 개발보안 방법론' SECENT TOUCHPOINT]〉, 《openeg》, 2015-05-25 | ||
+ | * 〈[https://www.owasp.org/index.php/CLASP_Concepts CLASP 개념]〉, 《OWASP》 | ||
+ | * GREEN초록,〈[https://diaryofgreen.tistory.com/155 Etc :: 마이크로소프트(Microsoft)의 개발생명주기(MS-SDL)]〉, 《티스토리》, 2017-06-25 | ||
== 같이 보기 == | == 같이 보기 == | ||
72번째 줄: | 81번째 줄: | ||
{{보안|검토 필요}} | {{보안|검토 필요}} | ||
+ | {{프로그래밍}} |
2020년 8월 5일 (수) 10:58 기준 최신판
시큐어코딩(secure coding)이란 소프트웨어 개발 보안이라고도 부르며 설계 및 구현(개발) 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법이다. 보안 취약점을 줄이기 위해서 소프트웨어 개발 초기 단계에 수정하는 것이 가장 손쉽고 비용 효율성 측면에서 가장 좋기 때문에 이 시큐어 코딩 기법을 적용한다. [1]
목차
개요[편집]
시큐어 코딩(Secure Coding)이란 서비스의 안정성과 신뢰성 확보를 위해 IT 시스템 개발 단계에서 주요 보안 취약점을 고려해 소스 코드 레벨에서 사전에 제거하여 안전한 소프트웨어를 개발하는 기법이다. 즉, 해킹의 기법들을 기도조차 못 하게 만드는 코딩 기법이다.[2] 흔히 시큐어 코딩이라는 용어 때문에 발생하는 오해는 코딩하는 개발자만 알아서 안전하게 하면 된다는 책임을 가져야 한다는 생각이다. 하지만 시큐어 코딩은 '지켜야 할 일련의 보안 활동'을 의미한다. 즉, 소프트웨어를 개발하는 데 있어서 코드를 안전하게 하는 절차상의 다양한 보안 활동들 전부 포함한다.[3]
배경[편집]
소프트웨어 개발 보안의 중요성을 인식한 미국의 경우, 국토안보부(DHS)를 중심으로 시큐어코딩을 포함한 소프트웨어 개발 모든 과정(설계, 구현, 시험 등)에 대한 보안활동 연구를 활발히 진행하고 있다. 국내의 경우 2009년부터 전자정부 서비스 개발 단계에서 소프트웨어 보안 약점을 진단하여 제거하는 시큐어 코딩 관련 연구를 진행하면서, 2012년까지 전자정부지원사업 등을 대상으로 소프트웨어 보안약점 시범 진단을 수행했다. 또한, 2012냔 6월부터 행정안전부 '정보시스템 구축ㆍ운영 지침(행안부고시 제2012-25호)'이 개정ㆍ고시됨에 따라 전자정부서비스 개발시 적용되도록 의무화 되었다.[4]
필요성[편집]
수많은 과정을 거쳐 소프트웨어를 개발하는데 그만큼의 비용이 발생한다. 추가적인 노력은 흔히 말하는 MM(Man Month)를 증가시켜 비용 상승의 주범이 된다. 따라서 우리는 '서둘러 개발을 완료하고 제품 출시를 하고 유지 보수를 하면서 수정하는 것이 더 효과적이지 않을까'라고 생각할 수 있다. 하지만 아래 연구 결과를 보면 소프트웨어의 결함을 수정하는데 소요되는 비용은 해당 결함을 개발 초기 단계에서 발견할수록 미미하고, 제품이 출시 된 이후에 발견하게 될 경우 약 30배의 비용이 지급된다. 계발 초기 단계에서부터 안전한 소프트웨어를 위해 투자하는 비용은 전체적으로 봤을 때 오히려 비용을 절감하는 효과를 불러온다.[3]
소프트웨어 개발 단계 별 결함 수정 비용 분석 구분 설계 단계 구현 단계 통합 단계 베타 제품 제품 출시 설계 과정 결함 1배 5배 10배 15배 30배 구현 과정 결함 - 1배 10배 20배 30배 통합 과정 결함 - - 1배 10배 20배
개발 단계별 보안 활동[편집]
- 요구사항 분석 단계 : 요구사항 중 보안 항목 식별, 요구사항 명세서
- 설계 : 위협원 도출을 위한 위협 모델링, 보안 설계 검토 및 보안설계서 작성, 보안 통제 수립
- 구현 : 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수해 개발, 소스 코드 보안 약점 진단 및 개선
- 테스트 : 모의 침투 테스트 또는 동적 분석을 통한 보안취약점 진단 및 개선
- 유지보수 : 지속적인 개선 및 보안 패치[2]
사례[편집]
MS-SDL(MicroSoft-Secure Development Lifecycle)[편집]
MS에서 보안 수준이 높은 안전한 소프트웨어를 개발하기 위해 자체 수립한 SDL이며, 방법론이 적용되기 전 버전보다 50% 이상 취약점 감소했다.[2] 기존의 소프트웨어 개발 주기인 SDLC(Software Development Lifecycle)에 보안을 고려한 SDL 모델을 별도로 구성해 기존 개발 주기에 소프트웨어 보안 및 개인정보 보호 기능을 통합시켰다. 소프트웨어 개발 보안의 중요성을 뒷받침하는 대표적인 사례이며, 자체적으로 개발한 개발 생명주기를 제품 개발 전 과정에 적용하도록 하여 보안 취약점의 원인을 제거하도록 했다.[5]
Seven Touchpoints[편집]
실무적으로 검증된 방법론 중 하나로 보안 강화 기법을 지원하는 프로세스이다. 실무적으로 검증된 개발 보안 방법론 중 하나로 소프트웨어 보안 모범 사례를 SDLC에 통합한다.[2]
- 요구사항과 유즈케이스(use cases) 단계 : 오용 사례와 위험분석을 통해서 보안 요구 사항에 대한 정의와ㅣ 명세를 하고, 오용 사례에 대한 정의 및 케이스 예를 작성한다.
- 구조설계 단계 : 공격 저항 분석(Attack Resistance Analysis), 모호성 분석, 허점 분석 등을 통해 위험 요소를 분석한다.
- 테스트 계획 단계 : 공격 패턴, 위험 분석 결과, 악용 사례를 기반으로 위험기반 보안 테스트를 수행한다.
- 코드 단계 : 구현 오류에 중점을 두고 특히 소스 코드에 존재하는 취약성을 발견할 목적으로 수행되는 코드 정적 분석에 중심을 둔다.
- 테스트ㆍ테스트 결과 단계 : 위험 분석 및 침투 테스팅을 수행한다. 침투 시험을 통해 실제 작동 환경에서의 필드 소프트웨어에 대한 좋은 이해를 제공한다.
- 현장과의 피드백 단계 : 보안 운영을 통해 얻은 공격자와 공격 도구에 대한 경험과 지식은 개발자에게 다시 피드백한다. [6]
CLASP(Comprehensive, Lightweight Application Security Process)[편집]
소프트웨어 개발 생명주기 초기 단계에 보안 강화를 목적으로 하는 정형화된 프로세스로써, 활동 중심ㆍ역할 기반의 프로세스로 구성된 집합체이다.[2] CLASP는 보안 관련 활동을 기존 애플리케이션 개발 프로세스에 쉽게 통합할 수 있도록 설계되었다. 각 CLASP 활동은 개별 프로세스 구성 요소로 나누어지고 하나 이상의 특정 프로젝트 역할에 연결된다. CLASP는 이런 방식으로 프로젝트 참여자에게 자신의 업무수행 방식에 쉽게 적용할 수 있는 지침을 제공한다. 이로 인해 쉽게 성취되고 반복 가능하며 측정 가능한 보안이 점차 향상된다. [7]
각주[편집]
- ↑ Wisedog, 〈시큐어 코딩이란?〉, 《wisedog》, 2013-12-09
- ↑ 2.0 2.1 2.2 2.3 2.4 스틸스타크, 〈시큐어 코딩(SECURE CODING)〉, 《티스토리》, 2017-05-02
- ↑ 3.0 3.1 LG CNS 보안컨설팅팀, 〈'시큐어코딩' 해킹당했다. 어디서부터 잘못된 거지?〉, 《LG CNS》, 2017-04-12
- ↑ owgno6, 〈[1]〉, 《티스토리》, 2018-08-11
- ↑ GREEN초록,〈Etc :: 마이크로소프트(Microsoft)의 개발생명주기(MS-SDL)〉, 《티스토리》, 2017-06-25
- ↑ 〈'소프트웨어 개발보안 방법론' SECENT TOUCHPOINT〉, 《openeg》, 2015-05-25
- ↑ 〈CLASP 개념〉, 《OWASP》
참고자료[편집]
- Wisedog, 〈시큐어 코딩이란?〉, 《wisedog》, 2013-12-09
- 스틸스타크, 〈시큐어 코딩(SECURE CODING)〉, 《티스토리》, 2017-05-02
- LG CNS 보안컨설팅팀, 〈'시큐어코딩' 해킹당했다. 어디서부터 잘못된 거지?〉, 《LG CNS》, 2017-04-12
- owgno6, 〈[2]〉, 《티스토리》, 2018-08-11
- 〈'소프트웨어 개발보안 방법론' SECENT TOUCHPOINT〉, 《openeg》, 2015-05-25
- 〈CLASP 개념〉, 《OWASP》
- GREEN초록,〈Etc :: 마이크로소프트(Microsoft)의 개발생명주기(MS-SDL)〉, 《티스토리》, 2017-06-25
같이 보기[편집]
|