2018년 12월 14일
시큐어코딩(Secure Coding)
I. SW 개발 보안, Secure Coding
가. Secure Coding의 개념
협의 개념 | 소프트웨어 보안성 강화를 위해 개발 중 소스코드 구현 단계에서 보안 취약점을 배제하기 위한 개발 방법 |
광의 개념 | 소프트웨어 보안성 강화를 위해 개발 생명주기(SDLC) 상의 단계별로 요구되는 모든 보안활동 |
나. Secure Coding의 목적
사이버 공격 예방 | – 사이버 공격의 대다수가 응용 프로그램의 취약점을 악용하여 정보를 침해 |
취약점 수정 비용 절감 | – 개발 완료 전 발견 및 조치하는 비용이 릴리즈 이후 조치 비용의 30배 이상 절감 |
안정성 및 신뢰성 확보 | – 정보시스템의 개발단계부터 보안을 고려하여 SW 안정성 및 신뢰성 확보 가능 |
II. Secure Coding의 적용 범위 및 사례
가. Secure Coding의 적용 범위
적용 범위 | 취약점 | 적용 방법 |
---|---|---|
입력 검증/표현 | – SQL Injection – XSS 취약점 | – 쿼리 예약어 필터링 – HTML 화이트리스트 |
보안 기능 | – 무인증 사용 – 취약한 암호화 | – 중요정보 재인증 – AES-384, SHA-512 |
시간 및 상태 | – 검사/사용 시점 – 반복/재귀문 | – 공유자원 동기화 – 호출 횟수 제한 |
에러 처리 | – 오류정보 노출 – 부적절한 예외 | – 오류 메시지는 최소한의 정보만 노출 |
코드 오류 | – Null Pointer – 자원 미반환 | – 참조 전 Null 검사 – 사용 후 자원 해제 |
캡슐화 | – 내부정보 노출 – 디버그 코드 | – 지역변수 선언 – 배포전 디버그삭제 |
API 오용 | – Lookup 의존 – 취약한 API | – 설계된 목적 사용 – 안전한 함수 사용 |
나. Secure Coding의 사례
취약한 C 코드 | 안전한 C 코드 |
---|---|
void copy_string(char*string){ char buf[10]; strcpy(buf, string); } | void copy_string(char*string){ char buf[10]; if(strlen(string < sizeof(buf)) strcpy(buf, string); } |
– 문자열의 크기가 buf변수보다 크면 버퍼 오버플로우가 발생하므로 사전에 크기 비교 필요
III. Secure Coding 활성화 방안
- 설계/구현 단계에서 Secure Coding 등 개발보안이 중요하나 현실적으로 실무에서 사용률은 저조
- 최소한의 개발보안 의무화 및 정부 주도 관리 필요
[참고]