본문 바로가기
자격증/정보처리기사

[정보처리 실무] 9장 소프트웨어 개발 보안 구축

by 윤사부 2021. 2. 11.
728x90

082 소프트웨어 개발 보안

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

소프트웨어 개발 과정에서 발생할 수 있는 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동

소프트웨어 개발 보안은 데이터 기밀성, 무결성, 가용성을 유지하는 것을 목표로 함

 

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

 1) 행정안전부

  - 소프트웨어 개발 보안 정책을 총괄

 2) 한국인터넷진흥원(KISA)

  - 소프트웨어 개발 보안 정책 및 가이드를 개발

 3) 발주기관

  - 소프트웨어 개발 보안의 계획을 수립

 4) 사업자

  - 소프트웨어 개발 보안 관련 기술 수준 및 적용 계획을 명시

 5) 감리법인

  - 감리 계획을 수립하고 협의

 

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

 1) 개인정보 보호법

  - 개인정보의 처리 및 보호에 관한 사항을 정함으로써 개인의 자유와 권리를 보호

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

  - 정보통신망의 이용 촉진 및 정보통신 서비스를 이용하는 이용자들의 개인 정보를 보호

 3) 신용정보의 이용 및 보호에 관한 법률

  - 개인 신용정보의 효율적 이용과 체계적인 관리를 통해 정보의 오남용을 방지

 4) 위치정보의 보호 및 이용 등에 관한 법률

  - 개인 위치정보의 안전한 이용 환경을 조성하여 정보의 유출이나 오남용을 방지

 5) 표준 개인정보 보호 지침

  - 개인정보의 처리에 관한 기준으로 개인정보 침해의 유형 및 예방조치 등에 관한 세부사항을 규정

 6) 개인정보의 안전성 확보 조치 기준

  - 개인정보 처리자가 개인정보를 처리하는데 있어 개인정보가 분실, 도난, 유출, 위조, 변조, 훼손되지 않도록 안전성 확보에 필요한 기술적, 관리적, 물리적 안전조치에 관한 최소한의 기준을 규정


083 Secure SDLC

◈ Secure SDLC의 개요

  - Secure SDLC는 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함한 것

  - Secure SDLC는 소프트웨어의 유지 보수 단계에서 보안 이슈를 해결하기 위해 소모되는 많은 비용을 최소화하기 위해 등장

  - 요구사항 분석, 설계, 구현, 테스트, 유지 보수 등 SLDC 전체 단계에 걸쳐 수행되어야 할 보안 활동을 제시

 

 1) 요구사항 분석 단계

  - 요구사항 분석 단계에서는 보안 항목에 해당하는 요구사항을 식별하는 작업을 수행

  - 전산화되는 정보가 가지고 있는 보안 수준을 보안 요소별로 등급을 구분하여 분류

 2) 설계 단계

  - 소프트웨어에서 발생할 수 있는 위협을 식별하여 보안대책, 소요예산, 사고 발생시 영향 범위와 대응책 등을 수립

  - 네트워크, 서버, 물리적 보안, 개발 프로그램 등 환경에 대한 보안통제 기준을 수립하여 설계에 반영

 3) 구현 단계

  - 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하며 설계서에 따라 보안 요구사항들을 구현

  - 지속적인 단위 테스트를 통해 소프트웨어에 발생할 수 있는 보안 취약점을 최소화

  - 코드 점검 및 소스 코드 진단 작업을 통해 소스 코드의 안전성을 확보

 4) 테스트 단계

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

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

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


084 세션 통제

◈ 세션 통제의 개요

  - 세션은 서버와 클라이언트의 연결을 의미하고 세션 통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것

  - 세션 통제는 소프트웨어 개발 과정 중 요구사항 분석 및 설계 단계에서 진단해야하는 보안 점검 내용

 

◈ 세션 통제의 보안 약점

 1) 불충분한 세션 관리

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

  - 세션 관리가 충분하지 않으면 침입자는 세션 하이재킹(클라이언트 세션 정보 가로채기)과 같은 공격을 통해 획득한 세션 ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근

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

  - 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점

  - 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지

 

085 입력 데이터 검증 및 표현

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

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

 

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

 1) SQL 삽입

  - 취약점 : 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점

  - 예방법 : 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지

 2) 경로 조작 및 자원 삽입

  - 취약점 : 데이터 입출력 경로를 조작하여 서버 자원을 수정, 삭제할 수 있는 보안 약점

  - 예방법 : 사용자 입력값을 식별자로 사용하는 경우 경로 순회 공격을 막는 필터를 사용하여 방지

 3) 크로스사이트 스크립팅(XSS)

  - 취약점 : 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점

  - 예방법 : HTML 태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 '<', '>', '&' 등의 문자를 다른 문자로 치환함으로써 방지

 4) 운영체제 명령어 삽입

  - 취약점 : 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점

  - 예방법 : 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고 외부 입력값을 검증없이 내부 명령어로 사용하지 않음으로써 방지

 5) 위험한 형식 파일 업로드

  - 취약점 : 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나 시스템을 제어할 수 있는 보안 약점

  - 예방법 : 업로드 되는 파일의 확장자 제한, 파일명의 암호화, 웹사이트와 파일 서버의 경로 분리, 실행 속성을 제거하는 등의 방법으로 방지

 6) 신뢰되지 않는 URL 주소로 자동접속 연결

  - 취약점 : 입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안 약점

  - 예방법 : 연결되는 외부 사이트의 주소를 화이트 리스트로 관리함으로써 방지

 

086 보안 기능

◈ 보안 기능의 개요

  - 보안 기능은 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목

 

◈ 보안 기능의 보안 약점

 1) 적절한 인증 없이 중요기능 허용

  - 취약점 : 보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능

  - 예방법 : 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지

 2) 부적절한 인가

  - 취약점 : 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취

  - 예방법 : 모든 실행경로에 대해 접근제어 검사를 수행하고 사용자에게는 반드시 필요한 접근 권한만을 부여하여 방지

 3) 중요한 자원에 대한 잘못된 권한 설정

  - 취약점 : 권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용

  - 예방법 : 소프트웨어 관리자만 자원들을 읽고 쓸 수 있도록 설정하고 인가되지 않은 사용자의 중요 자원에 대한 접근 여부를 검사함으로써 방지

 4) 취약한 암호화 알고리즘 사용

  - 취약점 : 암호화된 환경설정 파일을 해독하여 중요정보를 탈취

  - 예방법 : 안전한 암호화 알고리즘을 이용하고 중요 정보 등은 IT보안인증사무국이 안정성을 확인한 암호모듈을 이용함으로써 방지

 5) 중요정보 평문 저장 및 전송

  - 취약점 : 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 획득

  - 예방법 : 중요한 정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고 HTTPS 또는 SSL과 같은 보안채널을 이용함으로써 방지

 6) 하드코드된 비밀번호

  - 취약점 : 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취

  - 예방법 : 패스워드는 암호화하여 별도의 파일에 저장하고 디폴트 패스워드나 디폴트 키의 사용을 피함으로써 방지

 

087 시간 및 상태

◈ 시간 및 상태의 개요

  - 시간 및 상태는 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활하게 작동되도록 하기 위한 보안 검증 항목

 

◈ 시간 및 상태를 점검하지 않은 코딩이 유발하는 보안 약점

 1) TOCTOU 경쟁 조건

  - TOCTOU 경쟁 조건은 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점

  - 코드 내에 동기화 구문을 사용하여 해당 자원에는 한 번에 하나의 프로세스만 접근 가능하도록 구성함으로써 방지

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

  - 반복문이나 재귀함수에서 종료 조건을 정의하지 않았거나 논리 구조상 종료될 수 없는 경우 발생하는 보안 약점

  - 모든 반복문이나 재귀함수의 수행 횟수를 제한하는 설정을 추가하거나 종료 조건을 점검하여 반복 또는 호출의 종료 여부를 확인함으로써 방지

 

088 에러처리

◈ 에러처리의 개요

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

◈ 에러처리의 미비로 인한 코딩이 유발하는 보안 약점

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

  - 오류 메시지를 통한 정보노출은 오류 발생으로 실행 환경, 사용자 정보, 디버깅 정보 등의 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점

  - 예외 처리 구문에 예외의 이름이나 스택 트레이스를 출력하도록 코딩한 경우 해커는 소프트웨어의 내부구조를 쉽게 파악

  - 오류 발생 시 가능한 한 내부에서만 처리되도록 하거나 메시지를 출력할 경우 최소한의 정보 또는 사전에 준비된 메시지만 출력되도록 함으로써 방지

 2) 오류 상황 대응 부재

  - 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점

  - 예외처리를 하지 않은 오류들로 인해 소프트웨어의 실행이 중단되거나 의도를 벗어난 동작이 유도될 수 있음

 3) 부적절한 예외 처리

  - 함수의 반환값 또는 오류들을 세분화하여 처리하지 않고 광범위하게 묶어 한 번에 처리하거나 누락된 예외가 존재할 때 발생하는 보안 약점

  - 세분화된 예외처리를 수행함으로써 방지

 

089 코드 오류

◈ 코드 오류의 개요

  - 코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type)변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목

 

◈ 코드 오류로 발생할 수 있는 보안 약점

 1) 널 포인터(Null Pointer) 역참조

  - 널 포인터 역참조는 널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점

  - 널이 될 수 있는 포인터를 이용하기 전에 널 값을 갖고 있는지 검사함으로써 방지

 2) 부적절한 자원 해제

  - 부적절한 자원 해제는 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점

  - 프로그램 내에 자원 반환 코드가 누락되었는지 확인하고 오류로 인해 함수가 중간에 종료되었을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지

 3) 해제된 자원 사용

  - 해제된 자원 사용은 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점

  - 반환된 메모리에 접근할 수 없도록 주소를 저장하고 있는 포인터를 초기화함으로써 방지

 4) 초기화되지 않은 변수 사용

  - 변수가 선언되어 메모리가 할당되면 해당 메모리에 이전에 사용하더 내용이 계속 남아있어 변수가 외부에 노출되는 경우 중요정보가 악용될 수 있음

  - 변수 선언 시 할당된 메모리를 초기화함으로써 방지

 

090 캡슐화

◈ 캡슐화의 개요

  - 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목

 

◈ 캡슐화로 인해 발생할 수 있는 보안 약점

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

  - 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점

  - 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지

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

  - 개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점

  - 소프트웨어를 배포하기 전에 코드 검사를 통해 남아있는 디버그 코드를 삭제함으로써 방지

 3) 시스템 데이터 정보 노출

  - 시스템의 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점

  - 시스템 메시지를 통해 노출되는 메시지는 최소한의 정보만을 제공함으로써 방지

 4) Public 메소드로터 반환된 Public 배열

  - 선언된 클래스 내에서만 접근 가능한 Private 배열을 모든 클래스에서 접근 가능한 Public 메소드에서 반환할 때 발생하는 보안 약점

  - Private 배열을 별도의 메소드를 통해 조작하거나 동일한 형태의 복제본으로 반환받은 후 값을 전달하는 방식으로 방지

 5) Private 배열에 Public 데이터 할당

  - Private 배열에 Public 으로 선언된 데이터 또는 메소드의 파라미터를 저장할 때 발생하는 보안 약점

  - Public 으로 선언된 데이터를 Private 배열에 저장할 때 레퍼런스가 아닌 값을 직접 저장함으로써 방지

 

091 API 오용

◈ API 오용의 개요

  - API 오용은 소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목

 

◈ API 오용으로 발생할 수 있는 보안 약점

 1) DNS Lookup에 의존한 보안 결정

  - 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점

  - DNS 검색을 통해 도메인 이름을 비교하지 않고 IP 주소를 직접 입력하여 접근함으로써 방지

 2) 취약한 API 사용

  - 보안 문제로 사용이 금지된 API를 사용하거나 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점

  - 보안 문제로 금지된 함수는 안전한 함수로 대체하고 API의 매뉴얼을 참고하여 보안이 보장되는 인터페이스를 사용함으로써 방지

 

092 암호 알고리즘

◈ 암호 알고리즘의 개요

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

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

 

◈ 암호 알고리즘의 종류

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

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

  - 개인키 암호화 기법은 대칭 암호 기법 또는 단일키 암호화 기법이라고도 함

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

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

  - 공개키 암호화 기법은 비대칭 암호 기법이라고도 함

 3) 해시(Hash)

  - 해시는 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것

  - 해시 알고리즘을 해시 함수라고 부르며 해시 함수로 변환된 값이나 키를 해시값 또는 해시키라고 부름

  - 데이터의 암호화, 무결성 검증을 위해 사용될 뿐만 아니라 정보보호의 다양한 분야에서 활용

  - 해시 함수의 종류에는 SHA 시리즈, MD5, N-NASH, SNEFRU 등이 있음

 

◈ 주요 알고리즘

 1) SEED

  - 1999년 한국인터넷진흥원(KISA)에서 개발한 블록 암호화 알고리즘

  - 블록 크기는 128비트, 키 길이에 따라 128, 256으로 분류

 2) ARIA(Academy Research Institute Agency)

  - 2004년 국가정보원과 산학연협회가 개발한 블록 암호화 알고리즘

  - 블록 크기는 128비트, 키 길이에 따라 128, 192, 256으로 분류

 3) DES(Data Encryption Standard)

  - 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘

  - 블록 크기는 64비트, 키 길이는 56비트

 4) AES(Advanced Encryption Standard)

  - 2001년 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘

  - DES의 한계를 느껴 발표

  - 블록 크기는 128비트, 키 길이에 따라 128, 192, 256으로 분류

 5) RSA(Rivest Shamir Adleman)

  - 1978년 MIT에 이해 제안된 공개키 암호화 알고리즘

  - 큰 숫자를 소인수분해 하기 어렵다는 것에 기반하여 만들어짐

  - 공개키와 비밀키를 사용하는데 여기서 키란 메시지를 열고 잠그는 상수를 의미

728x90

댓글