[보.알.남] 시큐어 코딩, 안전한 소프트웨어 개발 위한 나침반

2022-12-18 23:01
  • 카카오톡
  • 네이버 블로그
  • url
소프트웨어 개발 A to Z 내 일련의 보안 활동
설계단계 보안설계 20개 항목, 구현단계 보안약점 제거 49개 항목 제시


[보안뉴스 김영명 기자] 소프트웨어 개발 보안 또는 시큐어 코딩(Secure Coding)이란 안전한 소프트웨어 개발을 위해 소스코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려한 기능을 구현하는 등 소프트웨어 개발과정에서 지켜야 할 일련의 보안 활동이다. 홈페이지나 소프트웨어 개발 시 취약점 공격으로부터 시스템을 안전하게 방어하도록 코딩하는 것을 의미한다.


[이미지=utoimage]

미국은 2002년 연방정보보안관리법을 제정해 시큐어 코딩을 의무화했고, 마이크로소프트는 윈도 비스타(Windows Vista) 개발 때 이를 도입했다. 우리나라는 2009~2011년 소프트웨어 보안약점 진단 시범사업을 했으며, 2012년 12월부터 ‘소프트웨어 개발보안 의무제’가 시행됐다.

행정안전부와 한국인터넷진흥원(KISA)이 지난해 말 공동 발표한 ‘전자정부 SW 개발·운영자를 위한 소프트웨어 개발보안 가이드’에 따르면 시큐어 코딩의 △대상은 정보시스템 감리대상 사업으로 △범위는 신규개발에서 설계단계 산출물 및 소스코드 전체에 해당한다. 보안약점 진단기준은 △설계단계 보안설계 20개 항목을, △구현단계 보안약점 제거는 49개 항목을 제시하고 있다.

시큐어 코딩을 사용하면 설계 단계에서 크로스사이트 스크립트(XSS)와 같은 보안 취약점들은 XSS를 방지하기 위한 공통 입력값 검증 모듈을 정의해 사용하도록 세팅하거나, 시스템 설정을 통해 방어가 가능하다. 설계 단계에서 개발보안 항목을 명확하게 기술하지 않으면, 구현에서 개발 보안을 적용할 때 보안이 모호하거나 개발자 임의로 처리할 수 있다. 인증이나 인가와 같이 사전에 명확한 보안사항이 정의돼 있지 않으면 구현할 때 추가로 수정이 필요하거나 또는 보안 취약점을 내재한 채 소프트웨어가 배포될 위험도 있다. 다음으로 KISA의 ‘전자정부 SW 개발·운영자를 위한 소프트웨어 개발보안 가이드’에 따른 각 단계별 시큐어 코딩 적용절차 등에 대해 소개한다.


▲시큐어 코딩의 설계단계 보안 설계 기준[자료=KISA]

설계 단계 : 데이터 검증·표현, 예외처리, 세션통제 등 단계별 구성 중요
보안설계 단계의 기준은 크게 △입력 데이터 검증 및 표현 △보안 기능 △예외처리 △세션 통제 등으로 구분할 수 있다. 먼저, 입력 데이터 검증 및 표현에서 ‘DBMS 조회 및 결과 검증’은 DBMS 조회시 질의문(SQL) 내 입력값과 그 조회결과에 대한 유효성 검증방법(필터링 등) 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.

‘XML 조회 및 결과 검증’은 XML 질의문 구조를 임의로 변경해 비허가 데이터 조회 또는 인증절차를 우회하는 취약점이다. XML 질의문용 파라미터는 질의문 조작을 막도록 필터링한다.

‘디렉토리 서비스 조회 및 결과 검증’은 외부입력값이 LDAP 조회를 위한 필터 생성에 사용될 때 입력값 검증이 없으면 공격자가 의도하는 LDAP 조회가 수행되는 취약점이다. 이때는 외부입력값은 LDAP 삽입 취약점을 필터링해야 한다. ‘시스템 자원 접근 및 명령어 수행 입력값 검증’은 허가되지 않은 시스템자원의 사용을 차단하고, 악의적인 명령어의 실행을 차단한다.

‘웹 서비스 요청 및 결과 검증’은 입력된 값을 응답 페이지에 사용할 때 크로스사이트 스크립트(XSS)를 필터링한 뒤 사용한다. ‘웹 기반 중요 기능 수행 요청 유효성 검증’은 비밀번호 변경, 결제 등 중요기능을 수행할 때 시스템 전송 요청이 정상적인 요청인지를 판별한다.

‘HTTP 프로토콜 유효성 검증’은 외부 입력값을 HTTP 헤더정보로 사용할 때 응답분할 취약점이 없도록 필터링하거나 입력값이 URL로 사용될 때 URL 목록의 선택자로 사용하게 한다.

‘허용된 범위 내 메모리 접근’에서 프로세스에 허용된 범위의 메모리 버퍼에만 접근하는 검증방법과 메모리 접근요청이 허용범위를 벗어났을 때 처리방법을 설계해야 한다. ‘보안기능 입력값 검증’에서 사용자 정보는 서버에서 관리하고, 입력값을 검증하며, 중요정보는 쿠키 전송을 차단하고, 전송 시에는 해당 정보를 암호화한다.

마지막으로 ‘업로드·다운로드 파일 검증’은 파일의 무결성, 실행권한 등에 관한 유효성 검증방법과 부적합한 파일에 대한 처리방법 설계 시 업로드 파일의 타입, 크기, 개수, 실행권한 제한, 외부 식별 차단, 다운로드 요청파일명에 대한 검증 및 무결성 검사 실행 등이 있다.

설계 단계에서의 보안 기능 적용 : 인증 우회 차단 및 실패 추적 필요
설계 단계의 ‘보안 기능’에서 ‘인증 대상 및 방식’으로는 중요정보·기능의 특성에 따라 인증방식을 정의하고 정의된 인증방식을 우회하지 못하게 설계해야 하며, ‘인증 수행 제한’은 반복된 인증 시도를 제한하고 인증 실패한 이력을 추적하도록 설계해야 한다.

‘비밀번호 관리’는 비밀번호 관리 정책별 안전한 적용방법을 설계해야 한다. ‘중요자원 접근통제’는 중요자원을 정의하고, 정의된 중요자원에 대한 접근을 통제하는 신뢰 가능한 방법 및 접근통제 실패 시 대응방안을 수립해야 하며, ‘암호키 관리’는 생명주기별 암호키 관리방법을 설계해야 한다.

‘암호연산’은 국제표준 또는 검증필 프로토콜로 등재된 안전한 암호 알고리즘을 선정과 안전한 암호연산 방법을, ‘중요정보 저장’은 중요정보 저장 시 안전한 저장 및 보관 방법을 설계해야 한다. 또한, ‘중요정보 전송’은 중요정보 전송 시 안전한 전송방법의 설계를 의미한다.

‘에러처리’는 ‘예외처리’의 취약점이 있다. 예외처리는 오류 메시지에 개인정보, 시스템 정보 등 중요정보 노출, 부적절한 에러와 오류처리로 의도치 않은 상황을 막도록 설계해야 한다. ‘세션통제’에서는 다른 세션 간 데이터 공유금지, 세션 ID 노출금지, 로그인 시 세션ID 변경, 세션 종료 처리 등 세션을 안전하게 관리할 수 있는 방안을 설계해야 한다.


▲시큐어 코딩의 구현단계 보안 약점 제거 기준[자료=KISA]

구현 단계 내 시큐어 코딩 : 꼼꼼한 인증 및 인가 거쳐야
인증, 접근제어, 기밀성, 암호화, 권한관리 등 보안기능을 부적절하게 구현 시 발생하는 보안약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다.

먼저 ‘적절한 인증 없는 중요기능 허용’은 적절한 인증과정 없이 중요정보를 열람할 때 생기는 보안약점으로 검증된 라이브러리나 보안 프레임워크를 사용해야 한다. ‘부적절한 인가’에서는 공격 노출면을 최소화하고 사용자의 권한별 ACL을 관리한다. ‘중요한 자원에 대한 잘못된 권한 설정’에서 설정·실행파일, 라이브러리 등은 관리자만이 수정하도록 설정한다. ‘취약한 암호화 알고리즘 사용’에서 인코딩 함수는 IT보안인증 검증필 암호모듈을 사용해야 한다.

‘암호화되지 않은 중요정보’는 중요정보는 암호화하며, 적합한 권한자만 접근하게 한다. ‘하드코드된 중요정보’는 패스워드는 암호화하고, 중요정보도 암호화 키를 사용한다. ‘충분하지 않은 키 길이 사용’에서 RSA 알고리즘은 최소 2,048비트, 대칭암호화 알고리즘은 128비트 이상을 사용한다.

‘적절하지 않은 난수값 사용’에서 Java와 C 언어는 모두 매번 변경되는 시드(Seed)값을, ‘취약한 비밀번호 허용’에서 비밀번호는 숫자와 영문자, 기호 등을 혼합해 사용한다. ‘부적절한 전자서명 확인’에서 전자서명 사용 시 검증절차를 유지하고, 파일 출처를 확인해야 한다.

‘부적절한 인증서 유효성 검증’에서 인증서 사용 전 유효성을 확인하고, ‘주석문 안에 포함된 시스템 주요정보’는 소프트웨어 완성 후 제거가 어려워 주석에는 보안 내용을 넣지 않는 게 좋다. ‘하드디스크에 저장되는 쿠키를 통한 정보노출’에서 프로그래머가 쿠키를 저장할 때 공격자는 이를 이용해 시스템에 접근한다.

‘솔트 없이 일방향 해쉬함수 사용’에서는 패스워드 저장 시 패스워드와 솔트는 해쉬함수 입력으로 얻은 해쉬값을 저장한다. ‘무결성 검사 없는 코드 다운로드’는 호스트 서버 변조 등으로 악의적인 코드를 실행할 수 있어 주의해야 한다. ‘반복된 인증시도 제한 기능 부재’에서 인증시도 횟수를 제한하고 인증실패 횟수 초과 시 계정 잠금이나 추가 인증을 요구해야 한다.
[김영명 기자(boan@boannews.com)]

<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>

연관 뉴스

헤드라인 뉴스

TOP 뉴스

이전 스크랩하기


과월호 eBook List 정기구독 신청하기

    • 지인테크

    • 인콘

    • 엔텍디바이스코리아

    • 핀텔

    • KCL

    • 아이디스

    • 씨프로

    • 웹게이트

    • 엔토스정보통신

    • 하이크비전

    • 한화비전

    • ZKTeco

    • 비엔에스테크

    • 지오멕스소프트

    • 원우이엔지

    • HS효성인포메이션시스템

    • TVT코리아

    • 이화트론

    • 다누시스

    • 테크스피어

    • 홍석

    • 슈프리마

    • 인텔리빅스

    • 시큐인포

    • 미래정보기술(주)

    • 유니뷰

    • 비전정보통신

    • 아이원코리아

    • 인터엠

    • 위트콘

    • 성현시스템

    • 한국씨텍

    • 투윈스컴

    • 스피어AX

    • 다후아테크놀로지코리아

    • 한결피아이에프

    • 경인씨엔에스

    • 디비시스

    • 트루엔

    • 세연테크

    • 프로브디지털

    • 동양유니텍

    • 포엠아이텍

    • 넥스트림

    • 핀텔

    • 위즈코리아

    • 삼오씨엔에스

    • 벨로크

    • 피앤피시큐어

    • 신우테크
      팬틸드 / 하우징

    • 에프에스네트워크

    • 네이즈

    • 케이제이테크

    • 셀링스시스템

    • (주)일산정밀

    • 아이엔아이

    • 새눈

    • 미래시그널

    • 인빅

    • 유투에스알

    • 에이티앤넷

    • 케비스전자

    • 한국아이티에스

    • 엣지디엑스

    • 네티마시스템

    • 에이앤티글로벌

    • 이엘피케이뉴

    • 와이즈콘

    • 현대틸스
      팬틸트 / 카메라

    • 제네텍

    • 구네보코리아주식회사

    • 창성에이스산업

    • 에이앤티코리아

    • 지에스티엔지니어링
      게이트 / 스피드게이트

    • 티에스아이솔루션

    • 엔에스티정보통신

    • 엔시드

    • 포커스에이아이

    • 넥스텝

    • 엘림광통신

    • 메트로게이트
      시큐리티 게이트

    • 레이어스

    • 주식회사 에스카

    • 엠스톤

    • 글로넥스

    • 유진시스템코리아

    • 카티스

    • 세환엠에스(주)

Copyright thebn Co., Ltd. All Rights Reserved.

MENU

회원가입

Passwordless 설정

PC버전

닫기