2020 정보처리기사 필기 - 5.3 소프트웨어 개발 보안 구축
▶ 179 Secure SDLC
Secure SDLC
SDLC에 보안 강화를 위한 프로세스를 포함한 것
*SDLC(소프트웨어 개발 생명주기) : 소프트웨어를 개발하기 위한 모든 과정을 각 단계별로 나눈 것
- 대표적인 방법론에는 Secure Software 사의 CLASP, Microsoft 사의 SDL
- 전체 단계에 결쳐 수행되어야 할 보안 활동 제시
1. 요구사항 분석 단계에서의 보안 활동
보안 항목에 해당하는 요구사항 식별
- 보안 수준을 보안 요소별로 등급을 구분해 분류
- 조직의 정보보호 관련 보안 정책을 참고해 항목들의 출처, 요구 수준, 세부 내용 정리
☞ 보안 요소
소프트웨어 개발에 있어 충족시켜야할 요소 및 요건
- 기밀성 : 시스템 내의 정보와 자원은 인가된 사용자에게만 접근 허용
- 무결성 : 시스템 내의 정보는 오직 인가된 사용자만 수정 가능
- 가용성 : 인가받은 사용자는 언제라도 사용
- 인증 : 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지 확인하는 모든 행위
- 부인 방지 : 데이터를 송수신한 자가 송수신 사실을 부인할 수 없도록 송수신 증거 제공
2. 설계 단계에서의 보안 활동
식별된 보안 요구사항들을 소프트웨어 설계서에 반영, 보안 설계서 작성
- 소프트웨어에서 발생할 수 있는 위협을 식별해 보안대책, 소요예산, 사고발생 시 영향 범위와 대응책 등 수립
- 네트워크, 서버, 물리적 보안, 개발 프로그램 등 환경에 대한 보안통제 기준을 수립해 설계에 반영
> 네트워크 : 외부의 사이버 공격으로부터 개발 환경을 보호하기 위해 네트워크를 분리하거나 방화벽 설치
> 서버 : 보안이 뛰어난 운영체제 사용, 보안 업데이트, 외부접속에 대한 접근 통제 실시
> 물리적 보안 : 출입통제, 개발 공간 제한, 패쇄회로 등의 감시설비 설치
> 개발 프로그램 : 허가되지 않은 프로그램을 통제, 지속적인 데이터 무결성 검사 실시
3. 구현 단계에서의 보안 활동
표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수해, 설계서에 따라 보안 요구사항들 구현
- 개발 과정 중 지속적인 단위 테스트 실행
- 코드 점검 및 코드 진단 작업을 통해 소스 코드의 안정성 확보
☞ 시큐어 코딩
소프트웨어의 구현 단계에서 발생할 수 있는 보안 추약점들을 최소화하기 위해 보안 요소들을 고려해 코딩하는 것
- 보안 정책 바탕으로 시큐어 코딩 이드 작성, 개발 참여자에게는 시큐어 코딩 교육 실시
4. 테스트 단계에서의 보안 활동
설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검
- 동적 분석 도구 또는 모의 침투테스트를 통해 설계 단계에서 식별된 위협들의 해결여부 검증
- 테스트 단계에서 수행한 모든 결과 문서화, 개발자에게 피드백
5. 유지보수 단계에서의 보안 활동
발생할 수 있는 보안사고 식별, 사고 발생 시 이를 해결하고 보안 패치 실시
▶ 180 세션 통제
세션 통제
세션 : 서버와 클라이언트의 연결 의미
세션 통제 : 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것
- 소프트웨어 개발 과정 중 요구사항 분석 및 설계 단계에서 진단
- 세션 통제의 보안 약점 : 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출
불충분한 세션 관리
일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 보안 약점
*세션 ID : 서버가 클라이언트를 구분하기 위해 부여하는 키
잘못된 세션에 의한 정보 노출
다중 스레드(Multi-Thread) 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약졈
*다중 스레드 : 두 개 이상의 스레드가 생성되어 동시 처리되는 다중작업
*멤버 변수 : 객체와 연결된 변수
세션 설계시 고려사항
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성
- 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 함
- 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정
- 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계
- 패스워드 변경 시 활성화된 세션 삭제하고 재할당
세션ID의 관리 방법
- 안전한 서버에서 최소 128비트의 길이로 생성
- 예측이 불가능하도록 안전한 난수 알고리즘 적용
- ID가 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계
- 로그인 시 로그인 전의 세션ID 삭제하고 재할당
- 장기간 접중 중인 세션 ID는 주기적으로 재할당되도록 설계
소프트웨어 개발의 구현 단계에서 검증해야하는 보안 점검 내용 7가지
▶ 181 입력 데이터 검증 및 표현
입력 데이터 검증 및 표현
입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목
입력 데이터 검증 및 표현의 보안 약점 종류
- SQL 삽입 : 입력란에 SQL을 삽입해 무단으로 DB를 조회하거나 조작하는 보안 약점
- 경로 조작 및 자원 삽입 : 데이터 입출력 경로를 조작해 서버 자원을 수정, 삭제할 수 있는 보안 약점
- 크로스사이트 스크립팅(XSS) : 웹페이지에 악의적인 스크립트 삽입해 방문자들의 정보를 탈취하거나 비정상적인 기능 수행을 유발하는 보안 약점
- 운영체제 명령어 삽입
- 위험한 형식 파일 업로드
- 신뢰되지 않는 URL 주소로 자동접속 연결
▶ 182 보안 기능
보안기능
인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목
보안 기능의 보안 약점 종류
- 적절한 인증 없이 중요기능 허용
- 부적절한 인가 : 접근제어 기능이 없는 실행경로를 통해 정보, 권한 탈취
- 중요한 자원에 대한 잘못된 권한 설정
- 취약한 암호화 알고리즘 사용
- 중요정보 평문 저장 및 전송
- 하드코드된 비밀번호
▶ 183 시간 및 상태
시간 및 상태
동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리해 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목
시간 및 상태의 보안 약점 종류
- TOCTOU 경쟁 조건 : 검사 시점(Time Of Check)과 사용 시점(Time Out Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
- 잘못된 반복문, 재귀함수 : 종료 조건을 정의하지 않았거나 논리 구조상 종료될 수 없는 경우 발생하는 보안 약점
▶ 184 에러 처리
에러처리
소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의해 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목
에러처리의 보안 약점 종류
- 오류메세지를 통한 정보 노출 : 오류 발생으로 실행 환경, 사용자 정보 등 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점
- 오류 상황 대응 부제 : 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점
- 부적절한 예외 처리
▶ 185 코드 오류
코드 오류
개발자들이 코딩 중 실수하기 쉬운 형 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
코드 오류의 보안 약점 종류
- 널 포인터 역참조 : 널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점
- 부적절한 자원 해제 : 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점
- 해제된 자원 사용 : 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점
- 초기화되지 않은 변수 사용 : 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점
▶ 186 캡슐화
캡슐화
정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡술화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목
캡슐화의 보안 약점 종류
- 잘못된 세션에 의한 정보 노출 : 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
- 제거되지 않고 남은 디버그 코드 : 개발 중 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점
- 시스템 데이터 정보 노출 : 시스템의 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점
- Public 메소드로부터 반환된 Private 배열
- Private 배열에 Public 데이터 할당
▶ 187 API 오용
API 오용
API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목
API 오용의 보안 약점 종류
- DNS lookup에 의존한 보안 결정 : 도메인명에 의존해 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점
- 취약한 API 사용
▶ 188 암호 알고리즘
암호 알고리즘
패스워드, 주민번호, 은행계좌와 같은 중요정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 또는 방법
암호 방식의 분류
1. 개인키 암호화(Private Key Encryption) 기법
동일한 키로 데이터를 암호화하고 복호화
- 대칭 암호 기법 또는 단일키 암호화 기법이라고도 함
- 블록 암호화 방식과 스트림 암호화 방식으로 분류
> 블록 암호화 : 한번에 하나의 데이터 블록을 암호화 ex) DES, SEED, AES, ARIA
> 스트림 암호화 : 평문과 동일한 길이의 스트림을 생성해 비트 단위로 암호화 ex) LFSR, RC4
- 장점 : 암호화/복호화 속도 빠름, 알고리즘 단순, 공개키 암호 기법보다 파일 크기 작음
- 단점 : 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아짐
2. 공개키 암호화(Public Key Encryption) 기법
데이터 암호화 시 사용하는 공개키는 데이터 베이스 사용자에게 공개하고, 복호화 시 비밀키는 관리자가 비밀리에 관리
- 비대칭 암호 기법이라고도 함, 대표적으로는 RSA 기법이 있음
- 장점 : 키의 분배가 용이, 관리해야 할 키의 개수가 적음
- 단점 : 암호화/복호화 속도 느림, 알고리즘 복잡, 개인키 암호화 기법보다 파일의 크기 큼
☞ 양방향 알고리즘 종류
- SEED : 1999년 한국인터넷진흥원(KISA)에서 개발한 블록 함호화 알고리즘, 블록 크기 128비트, 키 길이에 따라 128, 256으로 분류
- ARIA : 2004년 국가정보원과 산학연협회가 개발한 블록 암호화 알고리즘, 블록 크기 128비트, 키 길이에 따라 128, 192, 256
- DES : 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘, 블록 크기 64비트, 키 길이 56비트
- AES : 2001년 미국 표준 기술 연구소에서 발표한 개인키 암호화 알고리즘, 블록 크기 128비트, 키 길이에 따라 128, 192, 256
- RSA : 1978년 MIT의 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 암호화 알고리즘
3. 해시(Hash)
임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것
- 해시 알고리즘 = 해시 함수
- 해시 함수로 변환된 값이나 키 = 해시값, 해시키
- 데이터의 암호화, 무결성 검증을 위해 사용, 정보보호의 분야에서 활용
- 해시 함수의 종류 : SHA 시리즈, MD5, N-NASH, SNEFRU