보안뉴스 창간 17주년을 축하합니다!!

Home > 전체기사

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

입력 : 2022-12-18 23:01
페이스북 보내기 트위터 보내기 네이버 밴드 보내기 카카오 스토리 보내기 네이버 블로그 보내기
소프트웨어 개발 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) 무단전재-재배포금지>

  •  
  • 0
  • 페이스북 보내기 트위터 보내기 네이버 밴드 보내기 카카오 스토리 보내기 네이버 블로그 보내기

  •  SNS에서도 보안뉴스를 받아보세요!! 
 하이젠 파워비즈 23년 11월 16일~2024년 11월 15일까지 아스트론시큐리티 파워비즈 2023년2월23일 시작 위즈디엔에스 2018 넷앤드 파워비즈 진행 2020년1월8일 시작~2021년 1월8일까지
설문조사
2023년 주요 보안 위협 가운데, 올해 말까지 가장 큰 피해를 끼칠 것으로 예상되는 위협은?
공급망 공격
다크웹 기반 랜섬웨어 조직
북한/중국/러시아 등 국가 지원 해킹그룹 활동
스마트폰을 노린 보안 위협
OT 타깃 공격
피싱 공격
기타(댓글로)