시큐어코딩(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(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
같이 보기[편집]
이 시큐어코딩 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
개발 : 프로그래밍, 소프트웨어, 데이터, 솔루션, 보안 □■⊕, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
보안
|
CVE • CWE • 관리자권한 • 관리적 보안 • 권한 • 권한관리 • 금융 분산원장기술 보안규범 • 기밀 • 기밀성 • 기술적 보안 • 누설 • 누출 • 누출금지정보 • 니모닉 • 데이터베이스 암호화 • 디지털 워터마킹 • 레인보우 테이블 • 루트킷 • 무결성 • 물리적 보안 • 백신 프로그램 • 버그 바운티 • 보안 • 봇 • 봇넷 • 블랙리스팅 • 블랙박스 • 블록체인 보안 • 비밀 • 비회원 권한 • 사고 • 사용자권한 • 사회공학 • 생체인증 • 시큐어코딩 • 신뢰실행환경 • 암호 • 암호키 • 예방 • 유출 • 이중인증(2FA) • 인증 • 일회용 비밀번호(OTP) • 잠금장치(시건장치) • 접근 • 접근권한 • 접근제어 • 접근차단 • 정보보호관리체계 • 침입방지시스템 • 침입탐지시스템 • 컴퓨터 바이러스 • 킬 스위치 • 통합위협관리(UTM) • 패치 • 페이로드 • 핀(PIN) • 해킹사고 • 화이트박스 • 회원권한 • 효율성
|
|
취약점 공격
|
51% 공격 • OWASP • 그라인딩 공격 • 네트워크 공격 • 누킹 • 디도스 • 디엔에스 스푸핑(DNS스푸핑) • 랜섬웨어 • 레베톤 • 레이스 공격 • 롱레인지 공격 • 리플레이 공격 • 리플레이 프로텍션 • 멀웨어(악성코드) • 모의해킹 • 무차별 대입 공격 • 미라이 봇넷 • 백도어 • 버그 • 버퍼 오버플로 • 벡터76 공격 • 부채널 공격 • 블랙해커 • 블록보류 공격 • 블록체인 해킹 • 사이트 간 스크립팅(XSS) • 사이트 간 요청 위조(CSRF) • 사전공격 • 셸쇼크 • 스누핑 • 스니퍼 • 스니핑 • 스미싱 • 스파이웨어 • 스푸핑 • 시빌공격 • 아이피 스푸핑(IP스푸핑) • 암호화폐 거래소 해킹 • 암호화폐 해킹 • 애드웨어 • 에스큐엘 인젝션(SQL인젝션) • 에이알피 스푸핑(ARP스푸핑) • 원격파일삽입 • 웜 • 웹셸 • 이클립스 공격 • 인젝션 • 제로데이 공격 • 중간자 공격 • 지능형 지속 공격(APT) • 취약점 • 침해사고 • 크래킹 • 크립토락커 • 크립토재킹 • 키로깅 • 트로이목마 • 패스워드 크래킹 • 페니스펜드 • 포맷스트링 공격 • 피니 공격 • 피싱 • 해커 • 해커원 • 해킹 • 혹스 • 화이트해커
|
|
개인정보보호
|
가명 • 개인정보 • 개인정보보호 • 개인정보보호법 • 성명 • 실명 • 유럽연합 일반개인정보보호법(GDPR) • 익명
|
|
양자보안
|
광자분리공격(PNS) • 복제 불가능성 원리 • 양자보안 • 측정 후 붕괴
|
|
보안 솔루션
|
V1 • V3 • ZAP • 내PC지키미 • 노턴안티바이러스 • 디아모 • 랩스플러스 • 레드마인 • 레드캐슬 • 맥아피 • 버그질라 • 빅룩 • 빅룩와스 • 빅룩퓨저 • 샤크라 • 소나큐브 • 스패로우 • 스팸스나이퍼 • 시큐브토스 • 시큐어디비 • 아베스트 • 야스카 • 엔스토커 • 엔프로텍트 • 와플즈 • 웹필터 • 제큐어디비 • 제큐어웹 • 지라 • 카스퍼스키 • 파인드벅스 • 피엠디(PMD)
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|
개발 : 프로그래밍 □■⊕, 소프트웨어, 데이터, 솔루션, 보안, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
프로그래밍 언어
|
ASP • C 언어 • C++ • C# • CSS • D 언어 • HTML • HTML5 • JSP • PHP • R • XHTML • XML • XSLT • 고(Go) • 고급언어 • 기계어 • 델파이 • 러스트 • 루비 • 루아 • 리액트 • 리퀴디티 • 무브 • 미켈슨 • 베이직 • 브이비스크립트 • 비주얼 C++ • 비주얼베이직(VB) • 비주얼베이직닷넷(VB.NET) • 솔리디티 • 스몰토크 • 스위프트 언어 • 스칼라 • 스크립트 언어 • 알골 • 어셈블리 • 언리얼스크립트 • 얼랭 • 에이잭스(Ajax) • 엠에프씨(MFC) • 오브젝티브-C • 오브젝트 파스칼 • 오카멜 • 웹어셈블리(WASM) • 이와즘(eWASM) • 자바 • 자바스크립트 • 저급언어 • 제이슨(JSON) • 제이쿼리(jQuery) • 카멜 • 코볼 • 코틀린 • 콜드퓨전 • 타입스크립트 • 파스칼 • 파워스크립트 • 파이썬 • 펄(Perl) • 포트란 • 프로씨(Pro-C) • 피엘에스큐엘(PL/SQL) • 피엘원(PL/I) • 하스켈
|
|
개발방법론
|
CBD 개발방법론 • EA • 구조적 개발방법론 • 객체지향 개발방법론 • 라이브러리 • 람다 아키텍처 • 모듈 • 모듈화 • 벤치마킹 • 소프트웨어 개발방법론 • 스크럼 • 스프린트 • 아키텍처 • 아키텍트 • 애자일 • 웹개발방법론 • 정보공학 개발방법론 • 컴포넌트 • 테일러링 • 템플릿 • 폭포수 모델 • 프로젝트 • 프로토타입 • 피드백
|
|
코딩
|
EUC-KR • UTF-8 • 값 • 글루웨어 • 노팔로우 링크 • 두팔로우 링크 • 디버깅 • 디코딩 • 마크업 • 버그 • 부트스트랩 • 세이브포인트 • 소스코드 • 시큐어코딩 • 아스키 • 액티브엑스 • 오픈소스 • 유니코드 • 인코딩 • 재컴파일 • 주석 • 컴파일 • 컴퓨터 프로그램 • 코드 • 코딩 • 태그 • 테스트 • 테이블 • 텍스트 • 파싱 • 퍼블리싱 • 퓨니코드 • 하드코딩 • 하이퍼링크 • 하이퍼텍스트
|
|
프로그래밍
|
C 명령어 • 객체 • 객체지향 • 객체지향 프로그래밍 • 거짓 • 관계연산자 • 기본형 변수 • 널 • 논리 • 논리연산 • 논리연산자 • 다중상속 • 다형성 • 대입 • 대입문 • 대입연산자 • 더블 • 도스 명령어 • 디폴트 • 레지스터변수 • 루프 • 리눅스 명령어 • 리턴 • 메모리 주소 • 메소드 • 멤버 • 명령문 • 명령어 • 무한루프 • 문자 • 문자열 • 바이트 • 반복문 • 배열 • 변수 • 분기 • 분기문 • 불린 • 브레이크 • 비교연산자 • 비트연산자 • 산술연산자 • 상속 • 상수 • 생성자 • 선언 • 선언문 • 설정자 • 속성 • 스위치 • 스태틱 • 시프트연산자 • 실행 • 실행문 • 어노테이션 • 에코 • 역참조 • 연산 • 연산문 • 연산자 • 오버로딩 • 오버라이딩 • 외부변수 • 윈도우 명령어 • 유닉스 명령어 • 인스턴스 • 인스트럭션 • 인클루드 • 인터페이스 • 임포트 • 입력 • 입력문 • 입출력 • 입출력문 • 자료형(데이터 타입) • 자바 명령어 • 자바 예약어 • 자바 컬렉션 • 전역변수 • 접근자 • 접근제어자 • 정보은닉 • 정수형 • 정적변수 • 제어 • 제어문 • 제어자 • 조건 • 조건문 • 조건연산자 • 주소 • 증감연산자 • 지역변수 • 참 • 참조 • 참조변수 • 초기화 • 추상메소드 • 추상클래스 • 추상화 • 출력 • 출력문 • 캡슐화 • 케이스 • 클래스 • 파라미터(매개변수) • 파이널 • 패키지 • 퍼블릭 • 포인터 • 프라이빗 • 프로텍티드 • 필드(멤버변수) • 함수 • 환경변수
|
|
명령어
|
abstract • array • boolean • break • byte • case • char • continue • default • double • do while • echo • elif • else • else if • false • final • float • for • gosub • goto • if • if else • import • include • int • join • long • long long • null • print • printf • println • private • protected • public • return • scanf • short • stdio.h • static • string • switch • temp • then • true • unsigned • void • while
|
|
디자인패턴
|
구조패턴 • 동시성패턴 • 동시실행패턴 • 모델-뷰-컨트롤러 패턴 • 상태패턴 • 생성패턴 • 싱글톤패턴 • 아키텍처패턴 • 전략패턴 • 커맨드패턴 • 행동패턴
|
|
프로그래밍 인물
|
귀도 반 로썸 • 그레이스 머레이 호퍼 • 니클라우스 비르트 • 댄 브릭클린 • 더그 커팅 • 데니스 리치 • 리누스 토르발스 • 리처드 그린블라트 • 마거릿 해밀턴 • 마크 앤드리슨 • 빈트 서프 • 빌 게이츠 • 빌 조이 • 스티브 잡스 • 에이다 러브레이스 • 제임스 고슬링 • 척 벤턴 • 켄 톰슨 • 팀 패터슨
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|