Secure SDLC
Secure SDLC의 개요
- 보안상 안전한 소프트웨어를 개발하기 위해 SDLC(소프트웨어 개발 생명주기)에 보안 강화를 위한 프로세스를 포함한 것
- 유지보수 단계에서 보안 이슈를 해결하기 위해 소모되는 비용을 최소화하기 위함
- Secure Software 사의 CLASP, Microsoft 사의 SDL 등
요구사항 분석 단계에서의 보안 활동
- 보안 항목에 해당하는 요구사항을 식별하는 작업 수행
- 보안 수준을 보안 요소별로 등급을 구분하여 분류
- 보안 요소 : 기밀성, 무결성, 가용성, 인증, 부인 방지
설계 단계에서의 보안 활동
- 식별된 요구사항을 소프트웨어 설계서에 반영하고 보안 설계서 작성
- 네트워크, 서버, 물리적 보안, 개발 프로그램 등 환경에 대한 보안통제 기준을 수립하여 설계에 반영
구현 단계에서의 보안 활동
- 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하여 설계서에 따라 보안 요구 사항 구현
- 단위 테스트 실행
- 시큐어 코딩 : 구현 단계에서 발생할 수 있는 보안 취약점을 최소화하기 위해 보안 요소들을 고려하여 코딩
테스트 단계에서의 보안 활동
- 작성된 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검
유지보수 단계에서의 보안 활동
- 이전 과정을 모두 수행했음에도 발생할 수 있는 보안사고들을 식별하고 발생 시 해결하고 보안 패치 실시
세션 통제
세션 통제의 개요
- 서버와 클라이언트의 연결인 세션 간의 연결로 인해 발생하는 정보를 관리
- 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용
불충분한 세션 관리
- 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생
- 세션 하이재킹(세션 정보를 가로채는 공격)을 통해 획득한 세션 ID로 접근할 수 있음
잘못된 세션에 의한 정보 노출
- 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생
- 변수의 범위를 제한하는 방법으로 방지 가능
- 싱글톤 패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나 멤버 변수의 정보가 노출될 수 있음
- 레이스컨디션 : 두 개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하고 있는 상태
세션 설계 시 고려사항
- 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 함
- 이전 세션이 종료되지 않으면 새로운 세션이 생성되지 못하도록 함
입력 데이터 검증 및 표현
입력 데이터 검증 및 표현의 개요
- 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목
- 개발 단계에서 유효성 검증 체계를 갖추고 검증되지 않은 데이터가 입력될 시 처리할 수 있도록 구현해야 함
- 일관된 언어셋을 사용하여 코딩
입력 데이터 검증 및 표현의 보안 약점
보안 기능
보안 기능의 개요
- 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화들을 올바르게 구현하기 위해 구현 단계에서의 보안 점검 항목
보안 기능의 보안 약점
시간 및 상태
시간 및 상태의 개요
- 동시 수행을 지원하는 병렬 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 원활하게 동작되도록 하기 위한 보안 검증 항목
TOCTOU 경쟁 조건
- 검사 시점과 사용 시점을 고려하지 않고 발생하는 보안 약점
종료되지 않은 반복문 또는 재귀 함수
- 조건이나 논리 구조를 잘못 구성하여 종료할 수 없게 되는 경우 시스템 자원을 끊임없이 사용하여 자원고갈로 인한 서비스 또는 시스템 장애 발생
에러 처리의 개요
에러 처리의 개요
- 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목
- 예외처리 구문을 통해 오류에 대한 사항 정의
오류 메시지를 통한 정보 노출
- 오류 발생으로 실행 환경, 사용자 정보, 디버깅 정보 등 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점
- 오류 발생 시 최대한 내부에서 처리하거나 메시지를 최소한의 내용으로 출력하여 정보 노출을 방지해야 함
오류 상황 대응 부재
- 소프트웨어의 오류에 대한 에러 처리를 하지 않았거나 미비로 인해 발생하는 보안 약점
부적절한 예외처리
- 함수의 반환 값 또는 오류들을 세분화하여 처리하지 않고 광범위하게 묶어서 한 번에 처리하거나 누락된 예외가 존재할 때 발생하는 보안 약점
코드 오류
코드 오류의 개요
- 소프트웨어 구현 단계에서 코딩 중 실수하기 쉬운 형 변환, 자원 반환 등 오류를 예방하기 위한 보안 점검 항목
널 포인터 역참조
- 널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점
- 오류로 인해 반환되는 널 값을 포인터로 참조하는 경우 발생
부적절한 자원 해제
- 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점
- 유한한 시스템 자원이 계속 점유하고 있으면 자원 부족이 발생
해제된 자원 사용
- 이미 반환된 메모리를 참조하는 경우 발생하는 보안 약점
- 반한 된 메모리를 참조하는 경우 예상하지 못한 값 또는 코드를 수행하게 되어 의도하지 않은 결과가 발생됨
초기화되지 않은 변수 사용
- 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점
캡슐화
캡슐화의 개요
- 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목
제거되지 않고 남은 디버그 코드
- 개발 중에 버그 수정이나 결과값을 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점
시스템 데이터 정보 노출
- 시스템의 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 구현했을 때 발생하는 보안 약점
Public 메소드로부터 반환된 Private 배열
- Private 배열을 Public 메소드에서 반환할 때 발생하는 보안 약점
Private 배열에 Public 데이터 할당
- Private 배열에 Public으로 선언된 데이터 또는 메소드의 파리 미터를 저장할 때 발생하는 보안 약점
API 오용
API 오용의 개요
- 소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하는 보안 검증 항목
DNS Lookup에 의존한 보안 결정
- 도메인명에 의존하여 보안 결정을 내리는 경우 발생하는 보안 약점
- IP 주소를 직접 입력하여 접근하게 하여 방지 가능
취약한 API 사용
- 보안 문제로 사용이 금지된 API를 사용하거나 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점
암호 알고리즘
암호 알고리즘의 개요
- 중요정보를 보호하기 위한 평문을 암호화된 문장으로 만드는 방법
개인키 암호화 기법
- 동일한 키로 데이터를 암호화하고 복호화함
- 대칭 암호 기법, 단일키 암호화 기법이라고도 함
- Stream 기법 : 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화
- Block 기법 : 한 번에 하나의 데이터 블록을 암호화
공개키 암호화 기법
- 데이터를 암호화하는 공개키는 데이터베이스 사용자에게 공개하고 복호화하는 비밀키는 관리자에게만 공개
- 비대칭 암호화 기법이라고도 함
- RSA기법 : 공개키와 비밀키는 메시지를 열고 잠그는 상수를 의미
양방향 암호화 알고리즘 종류
- SEED : 블록 크기는 128비트, 키의 길이에 따라 128, 256로 분류
- ARIA : 블록 크기는 128비트, 키의 길이에 따라 128, 192, 256로 분류
- DES : 블록 크기는 64비트, 키의 길이 56비트
- AES : 블록 크기는 128비트, 키의 길이에 따라 128, 192, 256로 분류
해시(Hash)
- 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환
- SHA 시리즈, MD5, N-NASH, SNEFRU 등
실기 정리
2021 정보처리기사 실기 정리
본 정리 글은 시나공 정보처리기사 실기책과 2020년 기출문제 등을 참고하여 작성하였습니다. -> 책 정보 확인하기 시나공 정보처리기사 실기 수험생들의 궁금증을 100% 반영시험에 나올만한 내
1d1cblog.tistory.com
'2020(개정) 이후 정보처리기사 > 9장 : 소프트웨어 개발 보안 구축' 카테고리의 다른 글
2021 정보처리기사 실기 - 9. 소프트웨어 개발 보안 구축(2) (0) | 2021.10.09 |
---|