1. 소프트웨어 개발보안 설계하기
소프트웨어 개발 보안
-
개요 : 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 안전한 소프트웨어를 개발하기 위한 활동
-
보안 취약점 발생 요인
-
보안 요구사항이 정의되지 않음
-
소프트웨어 설계 시 논리적 오류가 포함
-
기술 취약점을 갖고 있는 코딩 규칙을 적용
-
소프트웨어의 배치가 적절하지 않음
-
보안 취약점 발견 시 부적절한 대응
-
-
안전한 소프트웨어 개발
-
프로젝트 관련자들의 역할과 책임을 명확히 정의하고, 충분한 보안 교육 실시
-
소프트웨어 개발 생명 주기(SDLC)의 각 단계마다 보안 활동을 수행
-
소프트웨어 개발 보안을 위한 표준 확립
-
재사용이 가능한 보안 모듈 개발보안 통제의 효과성 검증 실시
-
Secure SDLC
-
개요 : 안전한 소프트웨어를 개발하기 위해 소프트웨어 개발 생명주기(SDLC)에 보안 강화를 위한 프로세스를 포함하는 것
-
요구사항 분석 단계 보안 활동
-
보안 수준을 보안 요소별로 등급을 구분
-
보안 요소
-
기밀성(Confidentiality) : 시스템 내의 정보와 자원을 인가된 사용자에게만 접근 허용
-
무결성(Integrity) : 시스템 내의 정보는 오직 인가된 사용자만 수정 가능
-
가용성(Availability) : 인가받은 사용자는 언제라도 사용 가능
-
인증(Authentication) : 시스템 내의 정보 사용자가 합법적 사용자인지를 확인
-
부인 방지(NonRepudiation) : 송·수신 사실을 부인할 수 없도록 송·수신 증거 제공
-
-
보안 정책을 참고하여 보안 정책 항목들의 출처, 요구 수준, 세부 내용 등을 문서화
-
-
설계 단계 보안 활동
-
위협을 식별하여 보안대책, 소요예산, 사고 발생 시 영향 범위와 대응책 등을 수립
-
환경에 대한 보안 통제 기준을 수립하여 설계에 반영
-
네트워크 : 네트워크를 분리하거나 방화벽을 설치
-
서버 환경 : 보안이 뛰어난 운영체제 사용, 보안 업데이트, 외부 접속 접근통제
-
물리적 보안 : 출입통제, 개발 공간 제한, 폐쇠회로 등의 감시설비 설치
-
개발 프로그램 : 허가되지 않은 프로그램 통제, 데이터 무결성 검사 실시
-
-
-
구현 단계 보안 활동
-
개발 과정 중 지속적인 단위 테스트를 통해 보안 취약점을 최소화
-
코드 점검 및 소스코드 진단 작업을 통해 안정성 확보
-
시큐어 코딩(Secure Coding) : 보안 취약점을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것
-
-
테스트 단계 보안 활동
-
동적 분석 도구, 모의 침투테스트를 통해 설계 단계에서 식별된 위협들의 해결 여부 검증
-
위협과 취약점을 점검할 수 있도록 테스트 계획을 수립하고 시행
-
테스트 단계에서 수행한 결과를 문서화하여 보존하고, 개발자에게 피드백
-
-
유지보수 단계 보안 활동
-
사고 발생 시 해결하고 보안 패치를 실시
-
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 등
-
-
'2020 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 프로그래밍 언어 활용(2/2) (0) | 2020.07.17 |
---|---|
[정보처리기사 실기] 프로그래밍 언어 활용(1/2) (0) | 2020.07.16 |
[정보처리기사 실기] SQL 응용 (0) | 2020.07.11 |
[정보처리기사 실기] 애플리케이션 테스트 관리 (0) | 2020.07.09 |
[정보처리기사 실기] 화면 설계 (0) | 2020.07.07 |