백엔드

Secure Coding 메뉴얼 1편

CyberI 2019. 11. 4. 14:34

1. 개요

 

소프트웨어 개발 보안

 

[배경]

- 인터넷상 공격의 약 75%는 SW보안취약점을 악용하는 것으로, 특히 외부에 공개되어 불특정 다수를 대상으로 사용자 정보를처리하는 Web Application 취약점으로 인한 중요 정보가 유출되는 침해 사고가 빈번하게 발생하고 있음

- 미국의 경우 국토안보부를 중심으로 시큐어코딩을 포함한 SW개발 전 과정에 대한 보안 활동 연구를 활발히 진행

- 국내의 경우 행안부 시큐어코딩이 적용되는 대상 언어는 JAVA, C, 안드로이드 이며, 소프트웨어 업체는 SQL삽입, 크로스사이트스크립트 등 43개의 보안 취약점을 제거해야 함

- 2017년 정보 시스템 등급별 보안 관리 가이드라인을 개발하였으며 2018년 3월에는 정보 시스템 등급제 적용 근거를 행안부 고시인 ‘정보 시스템 구축.운영 지침’에 포함하였음

- 전자금융감독 규정에 의거하여 금융보안원에서 자동진단솔루션 및 수동 점검을 통해 반기별 공개용 웹 서비스 모의 해킹을 지원하고 있음

 

[보악 취약점 발생 원인]

- 보안 요구 사항이 정의되지 않음

- 논리적인 오류를 가지는 설계를 수행하여 개발됨

- 기술 취약점을 가지는 코딩 규칙을 적용

- 소프트웨어 배치가 적절하지 않음

- 발견된 취약점에 대해 적절한 관리 또는 패치를 하지 않은 경우

 

1.1 용어 정의

용어 설명
Secure Coding 개발하는 과정에서 코딩 시에 개발자의 실수나 오류, 취약점이 삽입되지 않도록 프로그래밍하여 사이버 공격을 차단하기 위한 작업
유효성 검증 포맷 또는 규칙의 일치 여부를 확인하는 작업
기밀성 인가된 사용자만 정보 자산에 접근할 수 있는 것을 의미
CAPTCHA HIP(Human Interaction Proof) 기술의 일종으로 어떠한 사용자가 실제 사람인지 컴퓨터 프로그램인지 구별하기 위해 사용되는 방법
LDAP TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜
평문전송 일반인 누구나 읽을 수 있는 문서로 암호화되지 않은 내용 또는 암호문에 해독된 내용
HTTPS HTTP의 Secure Socket 으로 공개키 암호화 방식이며 정보를 암호화 하는 SSL프로토콜을 이용하여 서버와 데이터를 주고 받는 통신 규약
DES 알고리즘 DES(Data Encryption Standard)암호는 암호화 키와 복호화 키가 같은 대칭키 암호로 64bit 블록의 암호화 알고리즘
AES AES(Advanced Encryption Standard) 미국 정부 표준으로 지정된 대칭 알고리즘. 암호 블록의 크기는 128bit 이며 알고리즘 변경 없이 256bit 까지 확장 가능하며 미국 표준 기술 연구소가 5년의 표준화 과정을 거쳐 연방 정보처리 표준으로 발표하였음
솔트 암호화 전에 문자열의 앞뒤로 난수를 생성하여 특정 문자열을 끼워 넣고, 해시를 돌려 원문을 변조하는 것
SHA 해시 알고리즘의 일종으로 MD5의 취약성을 대신하여 사용 (TLS, SSL, PGP, SSH, IPSec 등에서 사용)
Cross Site Scripting XSS라고 하며 검증되지 않은 값으로 인해 웹 브라우저에 의도하지 않은 스크립트가 실행되는 취약점
Format string 데이터의 형태와 길이에 대한 불명확한 정의로 인한 취약점

 

1.2 관련 법규

 

보안 식별의 내부 항목은 개인정보보호규정, 정보보안관련규정을 준수하고, 외부 환경 분석(법, 제도, 규정) 등을 통한 보안 식별은 개인정보보호법, 정보통신망법, 금융거래법 등, 법령, 관련지침 등을 기준으로 한다. 현재 시스템에서 처리하는 정보 중 중요 정보로 분류되어 있는 대부분은 개인정보이다.

 

개인정보보호법

조항 주요 내용
제 24조(고유식별정보의 처리제한) 3항 고유식별정보(주민번호, 여권번호, 운전면허번호, 외국인등록번호)를 처리하는 경우 그 정보가 분실, 도난, 유출, 변조 또는 훼손되지 않도록 암호화 등 안전성 확보에 필요한 조치를 해야 한다.
제 29조(안전조치의무화) 개인정보가 분실, 도난, 유출, 변조 또는 훼손되지 않도록 내부관리 계획 수립, 접속기록보관 등 안전성 확보에 필요한 기술적, 관리적, 물리적 조치를 해야 한다.
시행령 제 30조(개인정보의 안전성 확보조치) 1항 제 3호 및 제3항 개인정보를 안전하게 저장, 전송할 수 있는 암호화 기술의 적용 또는 이에 상응하는 조치를 해야 한다.

 

정보통신망 이용 촉진 및 정보보호 등에 관한 법률

조항 주요 내용
시행령 제 15조(개인정보의 보호조치)

-개인정보가 안전하게 저장, 전송될 수 있도록 다음과 같이 보안 조치를 하여야 한다.

-비밀번호 및 바이오정보(지문,홍채,음성,필적 등) 일방항 암호화 저징

-주민등록번호 및 계좌번호 등 금융정보의 암호화 저장

-개인정보 및 인증정보를 송.수신하는 경우 보안서버 구축 등의 조치

-그박의 암호화 기술을 이용한 보안 조치

법률 제 28조(개인정보의 보호조치)

-개인정보를 취급할 때에는 개인정보의 분실, 도난, 누출, 변조 또는 훼손을 방지하기 위해 기술적, 관리적 조치를 하여야 한다.

-개인정보를 안전하게 저장, 전송할 수 있는 암호화 기술 등을 이용한 보안조치

개인정보의 기술적, 관리적 보호조치 기준 제 6조(개인정보의 암호화)

-비밀번호, 바이오정보는 복호화되지 않도록 일바향 암호화하여 저장한다.

-주민등록번호, 신용카드번호 계좌번호에 대해서는 안전한 암호화 알고리즘 등으로 암호화하여 저장한다.

-웹서버에 SSL 인증서를 설치하여 전송하는 정보를 암호화하여 송.수신

-웹서버에 암호화 응용프로그램을 설치하여 전송하는 정보를 암호화하여 송.수신하는 기능

제 50조 1항(소프트웨어 개발 보안 원칙)

① 행정기관등이 영 제71조제1항에 해당하는 정보화 사업을 추진할 때에는 별표3의 소프트웨어 보안 약점이 없도록 소프트웨어를 개발
또는 변경  (이하 ‘소프트웨어 개발 보안’이라 한다) 하여야 한다.

② 제 1항에 따라 행정기관 등의 장이 정보화 사업 추진 시 적용해야 할 소프트웨어 개발 보안의 범위는 다음 각 호와 같다.

    1. 신규 개발의 경우 : 설계 단계 산출물 및 소스 코드 전체

    2. 유지 보수의 경우 : 유지 보수로 인해 변경된 설계 단계 산출물 및 소스 코드 전체

 

③ 제2항에 따라 소프트웨어 개발 보안 적용 시 상용 소프트웨어는 제외한다.

제 50조 2항(소프트웨어 개발 보안 업무의 위탁)

행정안전부장관은 보안 약점 진단, 이행 점검, 진단원 양성 등 소프트웨어 개발 보안 관련 업무의 일부를 한국인터넷진흥원 또는

한국전자통신연구원 부설 국가보안기술연구소 (이하 “국가보안기술연구소"라 한다)에 위탁할 수 있다.

제 51조(소프트웨어 개발 보안 활동)

① 행정기관 등의 장은 제안서 평가시 소프트웨어 개발보안을 위한 소프트웨어 보안 약점 진단도구 사용 여부, 개발  절차와 방법의 적절성, 제3항에 의한 교육 계획의 적정성 등을 확인하고 평가에 반영할 수 있다.

② 사업자는 제50조에 따라 소프트웨어 개발 보안을 적용하는 경우 행정안전부장관이 국가정보원장과 협의하여 공지하는 ‘소프트웨어
개발 보안 가이드‘를 참고할 수 있다.

③ 사업자는 정보화사업 착수 단계에서 ‘소프트웨어 개발 보안가이드'등 소프트웨어 개발보안 관련 교육을 실시하고 이후 투입되는 인력은 개발에 투입하기 전 소프트웨어 개발보안 관련 교육을 실시하여야 한다.

제 52조(보안 약점 진단 기준) 행정기관등 장은 소프트웨어 보안약점을 진단할 때 별표3의 소프트웨어 보안약점을 필수 진단 항목으로 포함하여야 한다.
제 53조(보안 약점 진단 절차)

① 행정 기관등의 장은 정보화사업 감리를 수행하는 경우, 감리법인으로 하여금 사업자가 별표3의 소프트웨어 보안약점을 제거하였는지
진단하도록 하여야 한다.

② 감리 법인은 제 1항에 따라 소프트웨어 보안약점을 진단할 경우 행정안전부장관이 고시한 “정보시스템 감리기준“ 제10조제1항의 세부
검사 항목에 소프트웨어 보안약점 제거 여부를 포함하여야 한다.

③ 감리법인은 소프트웨어 보안약점을 진단할 경우 행정안전부 장관이 고시한 “정보시스템 감리기준“ 제5조제3항에 따라 제54조의 진단원을 우선적으로 배치할 수 있다.

④ 감리 법인이 소프트웨어 보안약점 진단 과정에서 소프트웨어 보안 약점 진단 도구를 사용할 경우에는 과학 기술 정보통신부 장관이 고시한 “정보 보호시스템 평가 인증 지침"에 따라 국가보안기술연구소장이 인증한 보안약점 진단도구를 사용하여야 한다. 이 경우, 감리 법인은
보안 약점 진단 도구가 지원하는 진단 항목이 별표3의 소프트웨어 보안약점을 진단하는지 여부를 확인하여야 한다.

⑤ 행정 기관등 장은 영 제71조제1항에 해당하지 않는 정보화 사업에 소프트웨어 개발 보안을 적용할 경우에는 사업자로 하여금 진단 제거
토록하고 그 결과를 확인할 수 있다.

제 53조 2항(개발 보안 자료 요청 등)

행정안전부 장관은 개발 보안 제도 개선 및 적용 현황을 확인하기 위하여 행정기관 등의 장에게 자료 요청 및 현장 방문을 실시할 수 있다.

이 경우 행정 기관 등의 장은 특별한 사유가 없는 한 이에 응해야 한다.

제 54조(진단원)

① 행정안정부장관은 별표4 제1호 진단원의 자격 기준을 만족하고 별표4 제2호의 교육을 이수한 자에게 진단원 자격을 부여한다.

② 행정안정부장관은 제1항과 관련하여 진단원 및 행정 기관 등의 요청이 있을 경우 진단원 자격 유무를 확인해 줄 수 있다.

 

1.3 기타

 

국제 기준안 및 참고사이트

가이드명 설명 url
OWASP Top10 (Open Web Application Security Project) 국제 웹 보안 표준기구로 정기적으로 웹 해킹 위협의 동향을 발표

https://www.owasp.org

CWE/SANS 25 SANS와 미국방성 산하 MITRE 그리고 그 외 미국 및 유럽의 여러 소프트웨어 보안 전문가에 의해 CWE/SANS 25라는 이름으로 소프트웨어 개발자가 가장 범하기 쉬운 코드 취약점에 대해 발표 740여 가지의 다양한 언어에 대한 취약점을 권고하고 관리하고 있음

https://www.sans.org/top25-software-errors/

 CERT SecureCoding 미국 국토안보부 산하 컴퓨터 긴급대응팀, 국가 사이버 경보 시스템, 취약 정보 등 제공

https://www.securecoding.cert.org/

CWE (Common Weakness Enumeration) 발견된 정적분석 취약점을 CWE-ID로 넘버링 포맷이 되어 있는 DB 수록

http://cwe.mitre.org

 

2. 보안 항목

 

2.1 기능에 대한 보안 항목

 

분석·설계 단계에서 정보처리 시스템의 각 기능을 안정하게 서비스하기 위해 필요한 보안 요구 사항

 

  • 입력 데이터 검증 및 표현
번호 항목명 설명 비고
SR1-1 DBMS 조회 및 결과 검증 DBMS 조회를 위한 질의문 생성시 사용되는 입력값과 조회결과에 대한 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계 입·출력값 검증
SR1-2 XML 조회 및 결과 검증 XML 조회를 위한 질의문 생성시 사용되는 입력값과 조회결과에 대한 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
SR1-3 디렉터리 서비스 조회 및 결과 검증 디렉터리 서비스 조회시 사용되는 입력값과 조회결과에 대한 검증방법 설계 및 유효하지 않은 값에 대한 처리방법 설계
SR1-4 시스템 자원 접근 및 명령어 수행 입력값 검증 시스템 지원접근 및 명령어 수행을 위해 사용되는 입력 값에 대한 유효성 검증방법과 유효하지 않은 값에 대한 처리방법 설계
SR1-5 웹 서비스 요청 및 결과 검증 웹 서비스 요청과 응답결과에 대한 검증방법과 적절하지 않은 데이터에 대한 처리방법 설계
SR1-6 웹 기반 중요기능 수행요청 유효성 검증 사용자 권한확인이 필요한 중요기능에 대한 웹 서비스 요청에 대한 유효성 검증방법과 유효하지 않은 요청에 대한 처리방법 설계
SR1-7 HTTP 프로토콜 유효성 검증 비정상적인 HTTP 헤더, 자동연결 URL 링크 등 사용자가 원하지 않은 결과물 생성할 수 있는 HTTP 헤더 및 응답결과에 대한 유효성 검증방법과 유효하지 않은 값에 대한 처리방법 설계
SR1-8 허용된 범위내 메모리 접근 허용된 범위의 메모리 버퍼에만 접근하여 저장 또는 읽기가 수행되어 버퍼오버플로우가 발생하지 않도록 처리방법 설계
SR1-9 보안기능 동작에 사용되는 입력값 검증 보안 기능 동작을 위해 사용되는 입력값과 함수 의 외부입력값 및 수행결과에 대한 처리방법 설계
SR1-10 업로드 · 다운로드 파일 검증 업로드 · 다운로드 파일의 무결성, 실행권한 등에 관한 유효성 검사 방법을 설계하고, 검사 실패시 대응방안 설계 파일 관리

 

  • 보안기능

인증, 접근통제, 권한관리, 비밀번호 등의 정책이 적절하게 반영될 수 있도록 설계

 

번호 항목명 설명 비고
SR2-1 인증 대상 및 방식 중요정보 · 기능과 인증방식을 정의하고, 정의된 중요정보 접근 및 중요기능 수행 허용을 위해 인증 기능이 우회되지 않고 수행 될 수 있도록 설계 인증 관리
SR2-2 인증 수행 제한 인증 반복시도 제한 및 인증실패 등에 대한 인증제한 기능 설계
SR2-3 비밀번호 관리 안전한 비밀번호 조합규칙을 설정하고, 안전한 저장 정책, 재설정 및 변경 정책, 패스워드 관리 규칙이 적용 되도록 설계
SR2-4 중요자원접근통제 중요자원을 정의하고, 정의된 중요자원에 대한 접근을 통제하는 신뢰할 수 있는 방법 및 접근통제 실패시 대응방안 설계 권한 관리
SR2-5 암호키 관리 암호키 생성, 분배, 접근, 파기 등 안전하게 암호키 생명주기를 관리할 수 있는 방법 설계 암호화
SR2-6 암호 연산 국제표준 또는 검증필 프로토콜로 등재된 안전한 암호 알고리즘을 선정하여 충분한 암호키 길이, 솔트, 충분한 난수값을 기반으로 암호연산 수행방법 설계
SR2-7 중요정보 저장 중요정보 저장시 안전한 저장 및 관리 방법 설계 중요 정보 처리
SR2-8 중요정보 전송 중요정보 전송시 안전한 전송방법 설계

 

  • 에러 처리

에러 또는 오류상황을 처리하지 않거나 불충분하게 처리되어 중요 정보 유출 등 보안 약점이 발생하지 않도록 설계

번호 항목명 설명 비고
SR3-1 예외처리 오류메시지에 중요정보가 포함되어 출력되거나, 에러 및 오류가 부적절하게 처리되어 의도치 않은 상황이 발생하는 것을 막기 위한 안전한 방안 설계  

 

  • 세션통제

다른 세션간 데이터 공유 금지 등 세션을 안전하게 관리할 수 있도록 설계

 

번호 항목명 설명 비고
SR4-1 세션통제 다른 세션간 데이터 공유금지, 세션 ID 노출금지, 로그인시 세션ID 변경, 세션종료 처리 등 세션을 안전하게 관리할 수 있는 방안 설계  

 

[구현 단계 보안약점과 분석·설계 단계의 보안 요구 항목의 연관 관계]

구분 분석·설계 단계의 보안 요구 항목 구현 단계 보안 약점

입력 데이터

검증 및 표현

SR1-1 DBMS 조회 및 결과 검증 SQL
SR1-2 XML 조회 및 결과 검증 XQuery 삽입, XPath 삽입
SR1-3 디렉터리 서비스 조회 및 결과 검증 LDAP 삽입
SR1-4 시스템 자원 접근 및 명령어 수행 입력 값 검증 경로조작 및 자원삽입, 운영체제 명령어 삽입
SR1-5 웹 서비스 요청 및 결과 검증 크로스사이트 스크립트
SR1-6 웹 기반 중요 기능 수행 요청 유효성 검증 크로스사이트 요청 위조
SR1-7 HTTP프로토콜 유효성 검증 신뢰되지 않은 URL 주소로 자동접속 연결, HTTP 응답분할
SR1-8 허용된 범위 내 메모리 접근 검증 포멧스트링 삽입, 메모리 버퍼 오버플로우
SR1-9 보안기능 동작에 사용되는 입력값 보안기능 결정애 사용되는 부적절한 입력값, 정수형 오버플로우, Null Pointer 역참조
SR1-10 업로드 · 다운로드 파일 검증 위험한 형식 파일 업로드, 무결성 검사 없는 코드 다운로드
보안 기능 SR2-1 인증대상 및 방식 적절한 인증 없는 중요 기능 허용, DNS lookup에 의존한 보안 결정
SR2-2 인증수행 제한 반복된 인증 시도 제한 기능 부재
SR2-3 비밀번호 관리 하드 코드 된 비밀 번호, 취약한 비밀 번호 허용
SR2-4 중요자원 접근통제 부적절한 인가, 중요한 자원에 대한 잘못된 권한 설정
SR2-5 암호키 관리 하드 코드 된 암호화 키, 주석문 안에 포함된 시스템 주요 정보
SR2-6 암호연산 취약한 암호화 알고리즘 사용, 충분하지 않은 키 길이 사용, 적절하지 않은 난수 값 사용, 솔트 없이 일방향 해시 함수 사용
SR2-7 중요정보 저장 중요 정보 평문 저장, 사용자 하드 디스크에 저장되는 쿠키를 통한 정보 노출
SR2-8 중요정보 전송 중요 정보 평문 전송
에러처리 SR3-1 예외처리 오류 메시지를 통한 정보 노출, 시스템 데이터 정보 노출
세션통제 SR4-1 세션통제 잘못된 세션에 의한 데이터 정보 노출

 

 

아래 링크를 통해 Secure Coding 메뉴얼 2편의 내용을 확인하실 수 있습니다.

▶ Secure Coding 메뉴얼 2편

▶ Secure Coding 메뉴얼 3편