Etc/📃 Certification

[정보처리기사] 5과목 3장 - 소프트웨어 개발 보안 구축

posted by sangmin

5과목 - 정보시스템 구축 관리

3장. 소프트웨어 개발 보안 구축


179. Secure SDLC

Secure SDLC의 개요

  • SDLC (Software Development Life Cycle)에 보안 강화를 위한 프로세스를 포함한 것
  • Secure SDLC는 유지 보수 단계에서 보안 이슈를 해결하기 위해 소모되는 많은 비용을 최소화하기 위해 등장
  • 요구사항 분석, 설계, 구현, 테스트, 유지 보수 등 SDLC 전체 단계에 걸쳐 수행되어야 할 보안 활동을 제시
  • 대표적인 방법
    • CLASP : Secure Software 사
    • SDL : Microsoft 사

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

  • 보안 항목에 해당하는 요구사항 식별
  • 전산화되는 정보가 가지고 있는 보안 수준을 보안 요소별로 등급을 구분하여 분류

설계 단계에서의 보안 활동

  • 식별된 보안 요구사항들을 소프트웨어 설계서에 반영하고, 보안 설계서 작성
  • 환경에 대한 보안통제 기준을 수립하여 설계에 반영
    • 네트워크 : 사이버 공격으로부터 개발 환경을 보호하기 위해 네트워크를 분리하거나 방화벽 설치
    • 서버 : 보안이 뛰어난 운영체제 사용
    • 물리적 보안 : 감시설비 설치
    • 개발 프로그램 : 허가되지 않은 프로그램 통제

구현 단계에서의 보안 활동

  • 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하며, 설계서에 따라 보안 요구사항들을 구현
  • 지속적인 단위 테스트를 통해 보안 취약점을 취소화해야함
  • 코드 점검 및 소스 코드 진단 작업을 통해 소스 코드의 안전성 확보

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

  • 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되었는지 점검

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

  • 이전 과정을 모두 수행하였음에도 발생할 수 있는 보안사고들을 식별하고, 사고 발생 시 보안 패치 실시

180. 세션 통제

세션 통제의 개요

  • 세션 통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것을 의미
  • 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용
  • 세션 통제의 보안 약점
    • 불충분한 세션 관리
    • 잘못된 세션에 의한 정보 노출

불충분한 세션 관리

  • 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 약점
  • 침입자는 세션 하이재킹 같은 공격을 통해 획득한 세션ID로 중요한 정보에 접근할 수 있음

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

  • 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 약점
  • 싱글톤 패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출될 수 있음
  • 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지 가능

세션 설계시 고려 사항

  • 시스템 모든 페이지에서 로그아웃 가능하도록 UI 구성
  • 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 구성
  • 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계
  • 패스워드 변경 시 활성화된 세션을 삭제하고 재할당

세션ID 관리 방법

  • 세션ID는 안전한 서버에서 최소 128비트의 길이로, 예측이 불가능하도록 난수 알고리즘을 적용하여 생성
  • 세션ID가 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계
  • 장기간 접속하고 있는 세션ID는 주기적으로 재할당되도록 설계

181. 입력 데이터 검증 및 표현

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

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

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

  • 보안 약점의 조류
    • SQL 삽입
      • 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점
      • 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않도록 필터링하여 방지
    • 경로 조작 및 자원 삽입
      • 데이터 입출력 경로를 조작하여 서버 자원을 수정 및 삭제할 수 있는 보안 약점
      • 경로 순회 공격을 막는 필터를 사용하여 방지
    • 크로스사이트 스크립팅 (XSS)
      • 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하는 보안 약점
      • HTML 태그의 사용을 제한하거나 특수문자를 다른 문자로 치환함으로써 방지
    • 운영체제 명령어 삽입
      • 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하는 보안 약점
      • 외부 입력값을 검증없이 내부 명령어로 사용하지 않음으로써 방지
    • 위험한 형식 파일 업로드
      • 악의적인 명령어가 포함된 파일을 업로드함으로써 시스템에 손상을 주는 보안 약점
      • 업로드 되는 파일의 확장자를 제한하고, 파일명을 암호화시킴으로써 방지
    • 신뢰되지 않는 URL 주소로 자동접속 연결
      • 입력값으로 사이트 주소를 받는 경우 이를 조작하여 피싱 사이트로 유도하는 보안 약점
      • 연결되는 외부 사이트 주소를 화이트 리스트로 관리함으로써 방지

182. 보안 기능

보안 기능의 개요

  • 소프트웨어 개발 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목
  • 각 보안 기능들은 서비스 환경이나 취급 데이터에 맞게 처리될 수 있도록 구현해야함
  • 소프트웨어 기능 또는 사용자별로 중요도를 구분하고, 차별화된 인증 방안 적용

보안 기능의 보안 약점

  • 적절한 인증 없이 중요기능 허용
    • 보안검사를 우회하여 인증과정 업이 중요한 정보 변경 가능
    • 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지
  • 부적절한 인가
    • 접근제어 기능이 없는 실행경로를 통해 정보를 탈취
    • 모든 실행경로에 대해 접근제어 검사를 수행하고, 사용자에게 반드시 필요한 권한만을 부여하여 방지
  • 중요한 자원에 대한 잘못된 권한 설정
    • 권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용할 수 있음
    • 소프트웨어 관리자만 자원을 읽고 쓸 수 있도록 설정하여 방지
  • 취약한 암호화 알고리즘 사용
    • 암호화된 환경설정 파일을 해독하여 중요 정보 탈취
    • 안전한 암호화 알고리즘을 이용하여 방지
  • 중요정보 평문 저장 및 전송
    • 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보 획득
    • HTTPS 또는 SSL 같은 보안 채널을 이용함으로써 방지
  • 하드코드된 비밀번호
    • 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 권한 탈취
    • 패스워드는 암호화하여 별도의 파일에 저장함으로써 방지

183. 시간 및 상태

시간 및 상태의 개요

  • 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목
  • 시간 및 상태를 점검하지 않은 코딩이 유발하는 보안 약점
    • TOCTOU 경쟁 조건
    • 종료되지 않는 반복문 또는 재귀함수

TOCTOU 경쟁 조건

  • 검사 시점 (Time Of Check)과 사용 시점 (Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
  • 검사 시점에는 사용 가능했던 자원이 사용 시점에는 사용할 수 없게 된 경우 발생
  • 코드 내 동기화 구문을 사용하여 해당 자원에는 한 번에 하나의 프로세스만 접근 가능하도록 구성함으로써 방지

종료되지 않는 반복문 또는 재귀함수

  • 종료되지 않을 경우 시스템 자원이 끊임없이 사용되어 가원고갈로 인한 서비스 장애 또는 시스템 장애 발생
  • 수행 횟수를 제한하거나 종료 여부를 확인함으로써 방지

184. 에러처리

에러처리의 개요

  • 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 오류로 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목
  • 각 프로그래밍 언어의 예외처리 구문을 통해 오류에 대한 사항 정의
  • 에러처리 미비로 인한 코딩이 유발하는 보안 약점
    • 오류 메시지를 통한 정보 노출
    • 오류 상황 대응 부재
    • 부적절한 예외처리

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

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

오류 상황 대응 부재

  • 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점
  • 오류가 발생할 수 있는 부분에 예외처리 구문을 작성함으로써 방지

부적절한 예외처리

  • 함수 반환값 또는 오류들을 광범위하게 묶어 한 번에 처리하거나 누락된 예외가 존재할 때 발생하는 보안 약점
  • 세분화된 예외처리를 수행함으로써 방지

185. 코드 오류

코드 오류의 개요

  • 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
  • 코드 오류로 발생할 수 있는 보안 약점
    • 널 포인터 역참조
    • 부적절한 자원 해제
    • 해제된 자원 사용
    • 초기화되지 않은 변수 사용

널 포인터 (Null Pointer) 역참조

  • 널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점
  • 대부분 운영체제에서 널 포인터는 메모리 첫 주소를 가리키며, 해당 주소를 참조할 경우 소프트웨어가 비정상적으로 종료될 수 있음
  • 널이 될 수 있는 포인터를 이용하기 전에 널 값을 갖고 있는지 검사함으로써 방지

부적절한 자원 해제

  • 자원을 반환하지 못했을 때 발생하는 보안 약점
  • 오류로 인해 함수가 종료되었을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지

해제된 자원 사용

  • 이미 사용 종료되어 반환된 메모리를 참조하는 경우 발생
  • 반환된 메모리에 접근할 수 없도록 주소를 저장하고 있는 포인터를 초기화함으로써 방지

초기화되지 않은 변수 사용

  • 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점
  • 할당된 메모리를 초기화함으로써 방지

186. 캡슐화

캡슐화의 개요

  • 캡슐화로 인해 발생할 수 있는 보안 약점
    • 잘못된 세션에 의한 정보 노출
    • 제거되지 않고 남은 디버그 코드
    • 시스템 데이터 정보 노출

제거되지 않고 남은 디버그 코드

  • 디버그 코드에 인증 및 식별 절차를 우회하는 코드가 포함되어 있는 경우 공격자가 이를 악용할 수 있음
  • 배포 전에 남아있는 디버그 코드를 삭제함으로써 방지

Public 메소드로부터 반환된 Private 배열

  • Public 메소드가 Private 배열을 반환하면 배열 주소가 공개되어 외부에서 접근할 수 있음
  • Private 배열을 별도의 메소드를 통해 조작하거나 복제본으로 반환받은 후 값을 전달하는 방식으로 방지

Private 배열에 Public 데이터 할당

  • Private 배열에 Public 데이터를 저장하면 Private 배열을 외부에서 접근할 수 있음
  • Private 배열 레퍼런스가 아닌 값을 직접 저장함으로써 방지

187. API 오용

API 오용의 개요

  • 소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목
  • 보안 약점
    • DNS lookup에 의존한 보안 결정
    • 취약한 API 사용

DNS Lookup에 의존한 보안 결정

  • 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생
  • 동일한 도메인에 속한 서버인 것처럼 위장하거나, 사용자와 서버 간 네트워크 트래픽을 유도하여 악성 사이트를 경유하도록 조작
  • DNS 검색을 통해 도메인 이름을 비교하지 않고 IP 주소를 직접 입력하여 접근함으로써 방지

취약한 API 사용

  • 금지된 API를 사용하거나, 잘못된 방식으로 API를 사용했을 때 발생

188. 암호 알고리즘

암호 알고리즘의 개요

  • 암호 알고리즘은 중요 정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 방법을 의미
  • 암호화 방식
    • 양방향
      • 개인키 : Stream 방식 / Block 방식
      • 공개키
    • 단방향
      • HASH

개인키 암호화 (Private Key Encryption) 기법 (= 대칭 암호 기법, 단일키 압호화 기법)

  • 개인키 암호화 기법은 동일한 키로 데이터를 암호화하고 복호화
  • 블록 암호화 방식
    • 한 번에 하나의 데이터 블록을 암호화
    • ex) DES, SEED, AES, ARIA
  • 스트림 암호화 방식
    • 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화
    • ex) LFSR, RC4
  • 장점 : 암호화/복호화 속도가 빠르며, 단순한 알고리즘
  • 단점 : 사용자 증가에 따라 관리해야 할 키의 수가 상대적으로 많아짐

공개키 암호화 (Public Key Encryption) 기법 (= 비대칭 암호 기법)

  • 공개키 암호화 기법은 암호화할 때는 공개키를, 복호화할 때는 비밀키를 사용하는 것
  • 비밀키는 관리자가 비밀리에 관리
  • ex) RSA
  • 장점 : 키 분배가 용이하고, 관리해야 할 키의 개수가 적음
  • 단점 : 암호화/복호화 속도가 느리며, 복잡한 알고리즘

해시 (HASH)

  • 임의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것
  • 데이터 암호화, 무결성 검증을 위해 사용될 뿐만 아니라 정보보호의 다양한 분야에서 활용
  • ex) SHA 시리즈, MD5, N-NASH 등

참고

 

시나공 정보처리기사 필기

2020년 정보처리기사 NCS기반 전면 개편!정보처리기사 시험은 NCS 학습 모듈 중 정보통신 분야의 ‘정보기술’ 분류에 포함된 ‘정보기술개발’과 ‘정보기술운영’에 속한 125개의 학습 모듈을

book.naver.com