시큐어코딩
시큐어코딩(Secure Coding)이란 소프트웨어 개발 보안이라고도 부르며 설계 및 구현(개발) 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법이다. 보안 취약점을 줄이기 위해서 소프트웨어 개발 초기 단계에 수정하는 것이 가장 손쉽고 비용 효율성 측면에서 가장 좋기 때문에 이 시큐어 코딩 기법을 적용하고자 한다. [1]
목차
개요
시큐어 코딩(Seccure 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]
Seven Touchpoints
실무적으로 검증된 개발 보안 방법론 중 하나로 소프트웨어 보안 모범 사례를 SDLC에 통합한 방법론이다.[2]
CLASP(Comprehensive, Lightweight Application Security Process)
실무적으로 검증된 방법론 중 하나로 보안 강화 기법을 지원하는 프로세스이다. 소프트웨어 개발 생명주기 초기 단계에 보안 강화를 목적으로 하는 정형화된 프로세스로써, 활동중심ㆍ역할 기반의 프로세스로 구성된 집합체이다. 이미 운영중인 시스템에 적용하기 좋다.[2]
- 요구사항과 유즈케이스(use cases) 단계 : 오용 사례와 위험분석을 통해서 보안 요구 사항에 대한 정의와ㅣ 명세를 하고, 오용 사례에 대한 정의 및 케이스 예를 작성한다.
- 구조설계 단계 단계 : 공격저항 분석(Attack Resistance Analysis), 모호성 분석, 허점 분석 등을 통해 위험 요소를 분석한다.
- 테스트 계획 단계 : 공격 패턴, 위험 분석 결과, 악용 사례를 기반으로 위험기반 보안테스트를 수행한다.
- 코드 단계 : 구현 오휴에 중점을 두고 특히 소스코드에 존재하는 취약성을 발견할 목적으로 수행되는 코드 정적 분석에 중심을 둔다.
- 테스트ㆍ테스트 결과 단계 : 위험 분석 및 침투 테스팅을 수행한다. 침투 시험을 통해 실제 작동 환경에서의 필드 소프트웨어에 대한 좋은 이해를 제공한다.
- 현장과의 피드백 단계 : 보안 운영을 통해 얻은 공격자와 공격 도구에 대한 경험과 지식은 개발자에게 다시 피드백 한다. [5]
각주
- ↑ 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
- ↑ 〈'소프트웨어 개발보안 방법론' SECENT TOUCHPOINT〉, 《openeg》, 2015-05-25
참고 자료
- 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
같이 보기