본문 바로가기
2020 정보처리기사

[정보처리기사 실기] 소프트웨어 개발보안 구축

by SungJe 2020. 7. 13.

1. 소프트웨어 개발보안 설계하기

소프트웨어 개발 보안

  • 개요 : 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 안전한 소프트웨어를 개발하기 위한 활동

  • 보안 취약점 발생 요인

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

    • 소프트웨어 설계 시 논리적 오류가 포함

    • 기술 취약점을 갖고 있는 코딩 규칙을 적용

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

    • 보안 취약점 발견 시 부적절한 대응

  • 안전한 소프트웨어 개발

    • 프로젝트 관련자들의 역할과 책임을 명확히 정의하고, 충분한 보안 교육 실시

    • 소프트웨어 개발 생명 주기(SDLC)의 각 단계마다 보안 활동을 수행

    • 소프트웨어 개발 보안을 위한 표준 확립

    • 재사용이 가능한 보안 모듈 개발보안 통제의 효과성 검증 실시

 

Secure SDLC

  • 개요 : 안전한 소프트웨어를 개발하기 위해 소프트웨어 개발 생명주기(SDLC)에 보안 강화를 위한 프로세스를 포함하는 것

  1. 요구사항 분석 단계 보안 활동

    • 보안 수준을 보안 요소별로 등급을 구분

    • 보안 요소

      • 기밀성(Confidentiality) : 시스템 내의 정보와 자원을 인가된 사용자에게만 접근 허용

      • 무결성(Integrity) : 시스템 내의 정보는 오직 인가된 사용자만 수정 가능

      • 가용성(Availability) : 인가받은 사용자는 언제라도 사용 가능

      • 인증(Authentication) : 시스템 내의 정보 사용자가 합법적 사용자인지를 확인

      • 부인 방지(NonRepudiation) : ·수신 사실을 부인할 수 없도록 송·수신 증거 제공

    • 보안 정책을 참고하여 보안 정책 항목들의 출처, 요구 수준, 세부 내용 등을 문서화

  2. 설계 단계 보안 활동

    • 위협을 식별하여 보안대책, 소요예산, 사고 발생 시 영향 범위와 대응책 등을 수립

    • 환경에 대한 보안 통제 기준을 수립하여 설계에 반영

      • 네트워크 : 네트워크를 분리하거나 방화벽을 설치

      • 서버 환경 : 보안이 뛰어난 운영체제 사용, 보안 업데이트, 외부 접속 접근통제

      • 물리적 보안 : 출입통제, 개발 공간 제한, 폐쇠회로 등의 감시설비 설치

      • 개발 프로그램 : 허가되지 않은 프로그램 통제, 데이터 무결성 검사 실시

  3. 구현 단계 보안 활동

    • 개발 과정 중 지속적인 단위 테스트를 통해 보안 취약점을 최소화

    • 코드 점검 및 소스코드 진단 작업을 통해 안정성 확보

    • 시큐어 코딩(Secure Coding) : 보안 취약점을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것

  4. 테스트 단계 보안 활동

    • 동적 분석 도구, 모의 침투테스트를 통해 설계 단계에서 식별된 위협들의 해결 여부 검증

    • 위협과 취약점을 점검할 수 있도록 테스트 계획을 수립하고 시행

    • 테스트 단계에서 수행한 결과를 문서화하여 보존하고, 개발자에게 피드백

  5. 유지보수 단계 보안 활동

    • 사고 발생 시 해결하고 보안 패치를 실시

 

2. 소프트웨어 개발보안 구현하기

세션 통제

  • 개요 : 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것

  • 보안 약점

    • 불충분한 세션 관리

      • 규칙이 존재하는 세션 ID 발급

      • 길게 설정된 타임아웃 시간

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

      • 멀티 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생

  • 세션 설계 고려 사항

    • 시스템의 모든 페이지에서 로그아웃이 가능한 UI 구성

    • 로그아웃 요청 시 할당된 세션을 완전 제거

    • 세션 타임아웃을 중요도에 따라 조정

    • 이전 세션 종료 전 새 세션 생성 방지

    • 패스워드 변경 시 활성화된 세션을 삭제

    • 중복 로그인을 허용하지 않는 경우 중복 접근에 대한 세션 관리 정책 수립

  • 세션 ID 관리 방법

    • 안전한 서버에서 최소 128비트의 길이로 생성

    • 예측 불가능한 난수 알고리즘을 적용

    • URL Rewrite 기능을 지양

    • 로그인 시 세션 ID를 재할당

    • 장기간 접속하고 있는 세션 ID는 주기적으로 재할당

 

소프트웨어 개발보안 취약점

  • 입력 데이터 검증 및 표현 : 구현 단계 검증해야 하는 보안 점검 항목

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

종류 설명
적절한 인증 없이
중요기능 허용
보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경
부적절한 인가 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취
중요한 자원에 대한
잘못된 권한 설정
권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용
취약한 암호화 알고리즘 사용 암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보를 탈취
중요정보 평문 저장 및 전송 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 획득
하드코드된 비밀번호 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취
  • 시간 및 상태 : 병렬 처리 시스템이나 멀티 프로세스 환경의 보안 검증 항목

종류 설명
TOCTOU 경쟁 조건 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
종료되지 않는 반복문
또는 재귀함수
반복문이나 재귀함수에서 종료 조건을 정의하지 않았거나 논리 구조상 종료될 수 없는 경우 발생하는 보안 약점
  • 에러 처리 : 소프트웨어 실행 중 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목

종류 설명
오류 메시지를 통한 정보노출 오류 발생으로 중요 정보를 소프트웨어가 메시지로 외부 노출하는 보안 약점
오류 상황 대응 부재 예외처리의 미비로 인해 발생하는 보안 약점
부적절한 예외처리 세분화하여 처리되지 못하거나 누락된 예외가 존재할 때 발생하는 보안 약점
  • 코드 오류 : 개발자들의 코딩 실수를 예방하기 위한 보안 점검 항목

종류 설명
널 포인터 역참조 널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점
부적절한 자원 해제 자원을 반환하는 코드의 누락, 프로그램 오류로 할달된 자원 미반환 시 발생하는 보안 약점
해제된 자원 사용 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점
초기화되지 않은 변수 사용 변수 선언 후 초기화되지 않은 변수를 사용할 때 발생하는 보안 약점
  • 캡슐화 : 불충분한 캡슐화로 인해 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목

종류 설명
잘못된 세션에 의한 정보 노출 멀티 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
제거되지 않고 남은 디버그 코드 개발 중에 버그 수정이나 결과 값 확인을 위해 남겨둔 코드로 인해 발생하는 보안 약점
시스템 데이터 정보 노출 시스템 내부 정보를 시스템 메시지를 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점
Public 메소드로부터 반환된 Private 배열 Private 배열을 Public 메소드에서 반환할 때 발생하는 보안 약점
Private 배열에Public 데이터
할당
Private 배열에 Public으로 선언된 데이터 또는 메소드의 파라미터를 저장할 때 발생하는 보안 약점
  • API 오용 : API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않기 위한 보안 검증 항목

종류 설명
DNS Lookup에 의존한 보안 결정 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점
취약한 API 사용 보안 문제로 사용이 금지된 API 사용, 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점

 

암호 알고리즘

  • 개요 : 중요정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 방법

  • 양방향 암호화 방식

기법 설명
개인키 암호화
(Private Key Encryption)
동일한 키로 데이터를 암호화하고 복호화함
종류
- 블록 암호화 방식 : DES, SEED, AES, ARIA
- 스트림 암호화 방식 : LFSR, RC4
공개키 암호화
(Public Key Encryption)
데이터를 암호화할 때 사용하는 공개키(Public Key)는 사용자에게 공개하고, 복호화할 때의 비밀키(Secret Key)는 관리자가 관리
종류 : RSA(Rivest Shamir Adleman) 등
  • 단방향 암호화 방식

    • 해시(Hash) : 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환

      • 종류 : SHA1, SHA2, MD5, N-NASH, SNEFRU 등