기타/정처기

정보처리기사 실기 시나공 9장 소프트웨어 개발 보안 구축

TheWing 2020. 12. 31. 18:13

소프트웨어 개발 보안

소프트웨어 개발 보안의 개요

  • 소프트웨어 개발 보안은 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동을 의미
    • 소프트웨어 개발 보안은 데이터의 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability)을 유지하는 것을 목표로 한다.
    • 소프트웨어 보안 취약점이 발생하는 경우
      • 보안요구사항이 정의 되지 않은 경우
      • 소프트웨어 설계 시 논리적 오류가 포함된 경우
      • 소프트웨어의 배치가 적절하지 않은 경우
    • 안전한 소프트웨어 개발을 위한 수행 작업
      • 소프트웨어 개발 프로젝트에 참여하는 관련자들의 역할과 책임을 명확히 정의하고, 충분한 보안 교육을 실시한다.
      • 재사용이 가능한 보안 모듈을 만들어 유사한 소프트웨어 개발에 사용될 수 있도록 한다.

소프트웨어 개발 보안 관련 기관

  • 행정안전부
    • 소프트웨어 개발 보안 정책을 총괄한다.
    • 소프트웨어 개발 보안 관련 법규, 지침, 제도를 정비한다
  • 한국인터넷 진흥원(KISA)
    • 소프트웨어 개발 보안 정책 및 가이드를 개발한다.
    • 소프트웨어 개발 보안에 대한 기술을 지원하고, 교육과정 및 자격제도를 운영한다
  • 발주기관
    • 소프트웨어 개발 보안의 계획을 수립한다.
    • 소프트웨어 개발 보안 사업자 및 감리법인을 선정한다
  • 사업자
    • 소프트웨어 개발 보안 관련 기술 수준 및 적용 계획을 명시한다.
    • 소프트웨어 개발 보안 관련 인력을 대상으로 교육을 실시한다.

소프트웨어 개발 보안 활동 관련 법령

  • 개인정보 보호법
    • 개인정보의 처리 및 보호에 관한 사항을 정함으로써 개인의 자유와 권리를 보호한다.
  • 정보통신망 이용촉진 및 정보보호 등에 관한 법률
    • 정보통신망의 이용 촉진 및 정보통신 서비스를 이용하는 이용자들의 개인정보를 보호한다.

소프트웨어 개발 보안 활동 관련 기타 규정

  • RFID 프라이버시 보호 가이드라인
    • RFID 시스템의 이용자들의 프라이버시를 보호하고 안전한 RFID 이용 환경을 조성하기 위한 가이드라인
  • 위치정보의 보호 및 이용 등에 관한 법률
    • 개인 위치정보의 유출 및 오남용을 방지하기 위한 법률

Secure SDLC

Secure SDLC의 개요

  • Secure SDLC는 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보한강화를 위한 프로세스를 포함한 것을 의미한다.
    • Secure SDLC는 소프트웨어의 유지 보수 단계에서 보안 이슈를 해결하기 위해 소모되는 많은 비용을 최소화 하기 위해 등장하였다.
    • Secure SDLC는 요구사항 분석, 설계, 구현, 테스트, 유지 보수 등 SDLC 전체 단계에서 걸쳐 수행되어야 할 보안활동을 제시한다

요구사항 분석 단계에서 보안 활동

  • 요구사항 분석 단계에서는 보안 항목에 해당하는 요구사항을 식별하는 작업을 수행한다
    • 전산화되는 정보가 가지고 있는 보안 수준을 보안 요소별로 등급을 구분하여 분류한다.

보안요소

  • 기밀성
    • 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용된다.
    • 정보가 전송 중에 노출되더라도 데이터를 읽을 수 없습니다.
  • 무결성
    • 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있습니다.
  • 가용성
    • 인가받은 사용자는 언제라도 사용할 수 있습니다.

설계 단계에서의 보안 활동

  • 설계 단계에서는 식별된 보안 요구사항들을 소프트웨어 설계서에 반영하고, 보안 설계서를 작성한다.
    • 소프트웨어에서 발생할 수 있는 위협을 식별하여 보안대책, 소요예산 사고 발생 시 영향 범위와 대응책 등을 수립한다.

구현 단계에서의 보안 활동

  • 구현 단계에서는 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하며, 설계서에 따라 보안 요구사항들을 구현한다.
    • 개발 과정 중에서는 지속적인 단위 테스트를 통해 소프트웨어에 발생할 수 있는 보안 취약점을 최소화해야한다.

시큐어코딩(Secure Coding)

  • 시큐어 코딩은 소프트웨어의 구현 단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것을 의미합니다.
    • 보안 취약점을 사전에 대응하여 안정성과 신뢰성을 확보하기 위해 사용됩니다.
    • 보안 정책을 바탕으로 시큐어 코딩 가이드를 작성하고, 개발 참여자에게는 시큐어 코딩 교육을 실시해야 합니다.

테스트 단계에서의 보안 활동

  • 테스트 단계에서는 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검한다.
    • 정적 분석 도구, 동적 분석 도구 또는 모의 침투테스트를 통해 설계 단계에서 식별된 위협들의 해결여부를 검증

유지보수 단계에서 보안 활동

  • 유지보수 단계에서는 이전 과정을 모두 수행하였음에도 발생할 수 있는 보안 사고들을 식별하고, 사고 발생 시 이를 해결하고 보안 패치를 실시한다.

세션 통제

세션 통제의 개요

  • 세션은 서버와 클라이언트의 연결을 의미하고, 세션 통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것을 의미
    • 세션 통제는 소프트웨어 개발 과정 중 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용

불충분한 세션관리

  • 불충분한 세션 관리는 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정 되어 있는 경우 발생할 수 있는 보안 약점이다.

잘못된 세션에 의한 정보 노출

  • 잘못된 세션에 의한 정보 노출은 다중 쓰레드(Multi - Thread) 환경에서 멤버변수에 정보를 저장할 때 발생하는 보안 약점이다.

세션 설계시 고려사항

  • 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI를 구성한다.
  • 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 한다
  • 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정
  • 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계한다
  • 중복 로그인을 허용하지 않은 경우 클라이언트의 중복 접근에 대한 세션 관리 정책을 수립

세션ID의 관리방법

  • 세션ID는 안전한 서버에서 최소 128비트의 길이로 생성
  • 세션ID의 예측이 불가능하도록 안전한 난수 알고리즘을 적용
  • 로그인 시 로그인 전의 세션ID를 삭제하고 재할당한다
  • 장기간 접속하고 있는 세션ID는 주기적으로 재할당되도록 설계한다.

입력 데이터 검증 및 표현

입력 데이터 검증 및 표현의 개요

  • 입력 데이터 검증 및 표현은 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들이다.

입력 데이터 검증 및 표현의 보안 약점

  • 보안 약점의 종류
    • SQL 삽입
      • 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점
    • 경로 조작 및 자원 삽입
      • 데이터 입출력 경로를 조작하여 서버 자원을 수정 삭제할 수 있는 보안약점이다.
    • 크로스사이트 스크립팅(XSS)
      • 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점이다.
    • 운영체제 명령어 삽입
      • 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점이다.
    • 위험한 형식 파일 업로드
      • 악의적인 명령어가 포함됨 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나, 시스템을 제어할 수 있는 보안 약점이다.
    • 신뢰되지 않는 URL 주소로 자동접속 연결
      • 입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안 약점이다.

시간 및 상태

TOCTOU 경쟁 조건

  • 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점.
    • 검사 시점에는 사용이 가능했던 자원이 사용 시점에는 사용할 수 없게 된 경우에 발생
    • 프로세스가 가진 자원 정보와 실제 자원 상태가 일치하지 않는 동기화 오류, 교착 상태 등이 발생할 수 있다.

에러처리

에러처리의 개요

  • 에러처리는 소프트웨어 실행 중 발생할 수 있는 오류(Error)들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들이다.

오류 메시지를 통한 정보노출

  • 오류 메시지를 통한 정보노출은 오류발 생으로 실행 환경, 사용자 정보, 디버깅 정보 등의 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점이다.
    • 예외처리 구문에 예외의 이름이나 스택 트레이스를 출력하도록 코딩한 경우 해커는 소프트웨어의 내부구조를 쉽게 파악할 수 있다.

오류 상황 대응 부재

  • 오류 상황 대응 부재는 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점이다.

암호 알고리즘

암호 알고리즘의 개요

  • 암호 알고리즘은 패스워드, 주민번호, 은행계좌와 같은 중요정보를 보호하기위해 평문을 암호화된 문장으로 만드는 절차 또는 방법을 의미한다.

    • 암호 알고리즘은 해시(Hash)를 사용하는 단방향 암호화 방식과, 개인키 및 공개키로 분류되는 양방향 암호화 방식이 있다.

    • 암호 방식 분류

 

개인키 암호화(Private Key Encryption) 기법

  • 개인키 암호화 기법은 동일한 키로 데이터를 암호화하고 복호화한다.

    • 데이터베이스 사용자는 평문의 정보 M을 암호화 알고리즘 E와 개인키(Private Key) K를 이용하여 암호문 C로 바꾸어 저장 시켜 놓으면 사용자는 그 데이터베이스에 접근하기 위해 복호화 알고리즘 D와 개인키 K를 이용하여 다시 평문의 정보 M으로 바꾸어 이용하는 방법이다.

    •  
    • 개인키 암호화 기법은 대칭 암호 기법 또는 단일키 암호호 ㅏ기법이라고도한다

    • 종류

      • 블록 암호화 방식 : DES, SEED, AES, ARIA
      • 스트림 암호화 방식 : LFSR, RC4
      • 장점
        • 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고, 공개키 암호 기법보다 파일의 크기가 작다.
      • 단점
        • 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아진다.

 

공개키 암호화 기법(Public Key Encryption)

  • 공개키 암호화 기법은 데이터를 암호화 할 때 사용하는 공개키(Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 비밀키(Secret Key)는 관리자가 비밀리에 관리한다.

    • 데이터베이스 사용자는 평문의 정보 M을 암호화 알고리즘 E와 공개키(Public Key) P를 이용하여 암호문 C로 바꾸어 저장시켜 놓고, 이를 복호화하기 위해서는 비밀키와 복호화 알고리즘에 권한이 있는 사용자만이 복호화 알고리즘 D와 비밀키(Secret Key) S를 이용하여 다시 평문의 정보 M으로 바꿀 수 있는 기법이다.

 

  • 공개키 암호화 기법은 비대칭 암호 기법이라고도 하며, 대표적으로는 RSA(Rivest Shamir Adleman)기법이 있다.

  • 장점

    • 키의 분배가 용이하고, 관리해야할 키의 개수가 적다.
  • 단점

    • 암호화/복호화 속도가 느리며, 알고리즘이 복잡하고, 개인키 암호화 기법보다 파일의 크기가 크다.
  • 양방향 알고리즘 종류

    • SEED
      • 1999년 한국인터넷진흥원(KISA)에서 개발한 블록 암호화 알고리즘
      • 블록 크기는 128비트이며, 키 길이에 따라 128, 256으로 분류됩니다
    • ARIA(Academy Research Institute, Agency)
      • 2004년 국가정보원과 산학연협회가 개발한 블록 암호화 알고리즘
      • ARIA는 학계(Academy),연구기관(Research Institute), 정부(Agency)의 영문 앞 글자로 구성되었습니다.
      • 블록의 크기는 128비트이며 키 길이에 따라 128, 192, 256으로 분류됩니다
    • DES(Data Encryption Standard)
      • 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘
      • DES를 3번 적용하여 보안을 더욱 강화한 3DES도 있습니다
      • 블록 크기는 64비트이며, 키 길이는 56비트입니다.
    • AES(Advanced Encryption Standard)
      • 2001녀 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘
      • DES의 한계를 느낀 NIST에서 공모한 후 발표하였습니다.
      • 블록 크기는 128비트이며, 키 길이에 따라 128, 192, 256으로 분류됩니다.
    • RSA(Rivest Shamir Adleman)
      • 1978년 MIT의 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 암호화 알고리즘
        • 큰 숫자를 소인수분해 하기 어렵다는 것에 기반하여 만들어졌습니다.
        • 공개키와 비밀키를 사용하는데, 여기서 키란 메시지를 열고 잠그는 상수(Constant)를 의미합니다.

해시(Hash)

  • 해시는 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것을 의미한다.
    • 해시 알고리즘을 해시 함수라고 부르며, 해시 함수로 변환된 값이나 키를 해시값 또는 해시키라고도한다.