Chimy's Program
정보처리기사 필기 - 정보시스템 구축관리 : 소프트웨어 개발 보안 구축 본문
정보처리기사 필기 - 정보시스템 구축관리 : 소프트웨어 개발 보안 구축
Secure SDLC
- SDLC : 소프트웨어 개발 생명주기, 소프트웨어 개발 방법론의 바탕
- 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함
- 소프트웨어 유지보수 단계에서 보안을 해결하기 위한 비용 최소화를 위해 대두
- 요구사항 분석 → 설계 → 구현 → 테스트 → 유지보수
ⓞ 보안 요소
- 기밀성 : 비밀성
- 무결성 : 정확성, 허가 받은 사용자만 데이터 수정
- 가용성 : 언제라도 사용 가능
- 인증 : 사용자 인증
- 부인 방지
ⓞ 요구사항 분석 단계에서의 보안 활동
- 보안항목에 해당하는 요구사항을 식별하는 작업을 수행
- 요구사항의 요소 별로 등급 구분
ⓞ 설계 단계에서의 보안 활동
- 식별된 보안 요구사항들을 소프트웨어 설계서에 반영
- 보안 설계서를 작성
ⓞ 구현 단계에서의 보안 활동
- 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수
- 설계서에 따라 보안 요구사항들을 구현
- 시큐어코딩(Secure Coding) : 보안 요소를 고려해 코딩
ⓞ 테스트 단계에서의 보안 활동
- 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검
ⓞ 유지보수 단계에서의 보안 활동
- 보안 사고들을 식별
- 사고 발생 시 이를 해결하고 보안 패치를 설치
세션 통제
- 세션 : 서버와 클라이언트의 연결
- 세션 통제 : 세션연결, 그로 인해 발생하는 정보 관리, 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용
- 보안 약점 : 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출
ⓞ 불충분한 세션 관리
- 일정한 규칙이 존재하는 세션ID가 발급
- 타임아웃이 너무 길게 설정되어 있는 경우 발생
ⓞ 잘못된 세션에 의한 정보 노출
- 다중 스레드(Multi-Thread) 환경에서 멤버 변수에 정보를 저장할 때 발생
ⓞ 세션 설계 고려사항
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI(User Interface)를 구성
- 로그아웃 요청 시 할당된 세션 완전히 제거
- 세션타임아웃 : 중요도가 높음 - 2~5분, 중요도가 낮음 - 15~30분
- 세션이 종료되지 않았다면 새 세션 생성되지 않도록 설계
- 패스워드 변경 시 활성화된 세션 삭제 후 재할당
ⓞ 세션ID의 관리
- 안전한 서버에서 최소 128비트의 길이로 생성
- 세션ID의 예측이 불가능하도록 안전한 난수 알고리즘 제공
- 장기간 접속하고 있는 세션아이디 주기적으로 재할당
입력 데이터 검증 및 표현
- 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목
- 검증되지 않는 데이터가 입력돼도 올바르게 처리하도록 구현
- 자료형 확인 후 일관적 언어셋 사용
ⓞ 입력 데이터 검증 및 표현의 보안 약점
- 점검을 수행하지 않은 경우 공격에 취약해짐
ⓞ 보안 약점의 종류
⑴ SQL 삽입
- 입력란에 SQL을 삽입하여 데이터를 탈취
- 동적쿼리로 방지, 예약어나 특수문자 입력x
- 동적 쿼리 : 질의문을 조건에 따라 변경 처리
⑵ 경로 조작 및 자원 삽입
- 데이터의 입출력 경로 조작해 서버 접속, 데이터 수정, 삭제
- 경로순회 공격 방지 필터 사용하여 방지
⑶ 크로스사이트 스크립팅(XSS)
- 웹페이지에 악의적인 스크립트 삽입, 방문자 정보 탈취
- 스크립트 : 처리절차가 기록된 텍스트
- HTML 태그를 다른 문자로 치환해 방지
⑷ 운영체제 명령어 삽입
- 외부 입력값을 통해 시스템 명령어 실행 유도 → 장애 유발
- 웹 인터페이스를 통해 시스템 명령어가 전달되지 않게 하여 방지
⑸ 위험한 형식 파일 업로드
- 악의적인 명령어가 포함된 스크립트파일 업로드로 시스템의 손상 유발
- 업로드되는 확장자 제한, 파일명 암호화로 방지
⑹ 신뢰되지 않는 URL 주소로 자동접속 연결
- 입력값인 사이트 주소를 조작하여 피싱사이트로 유도
- 외부사이트 주소를 관리하여 방지
보안 기능
- 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목
- 각 보안기능은 취급데이터에 맞게 처리되도록 구현
- 사용자 별로 주요도를 구분해 차별화된 인증방안 적용
- 중요한 정보의 변조, 오남용 방지를 위해 암호화 기술 적용
ⓞ 보안 기능의 보안 약점
- 적절한 인증 없이 중요기능 허용 : 인증과정 없이 중요 정보 변경 가능, 재인증으로 방지
- 부적절한 인가 : 접근제어기능이 없는 경로를 통해 정보 탈취, 모든 경로에 대해 접근제어 검사로 방지
- 중요한 자원에 대한 잘못된 권한 설정 : 자원 임의 사용, 관리자만 자원을 읽고 사용하도록 하여 방지
- 취약한 암호화 알고리즘 : 해독하여 비밀번호나 중요정보 탈취, 안전한 암호화 알고리즘을 사용하여 방지
- 중요정보 평문 저장 전송 : 암호화가 되지 않은 평문을 통해 정보 획득, 암호화 과정을 거쳐 방지
- 하드코드된 비밀번호 : 패스워드를 반드시 암호화하고 별도 저장하여 방지
시간 및 상태
- 병렬처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목
- 시간과 상태를 점검하지 않은 프로그램의 약점 : TocTou 경쟁조건, 잘못된 반복문 및 재귀함수
ⓞ TOCTOU 경쟁 조건
- 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
- 동기화 오류, 교착상태 발생
- 예방 : 코드 내 동기화 구문 사용 - 공유자원 요구 시 2개 이상의 프로세스 접근 제한
ⓞ 잘못된 반복문 및 재귀함수
- 수행횟수를 제한하거나 종료조건을 입력하여 예방
에러처리
- 소프트웨어 실행 중 발생할 수 있는 오류(Error)들을 사전에 정의하여 오류로 인해 발생 할 수 있는 문제들을 예방하기 위한 보안 점검 항목
- 예외처리 미비 시 소프트웨어 중단
ⓞ 오류 메시지를 통한 정보 노출
- 오류 발생으로 실행 환경, 사용자 정보, 디버깅 정보 등의 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점
- 방지 : 내부처리, 최소한의 정보나 준비된 메시지 표시
ⓞ 오류 상황 대응 부재
- 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생
- 소프트웨어 실행이 중단되거나 다른 동작이 유도됨
- 방지 : 예외처리구문 작성
ⓞ 부적절한 예외처리
- 함수의 반환값 또는 오류들을 세분화하여 처리하지 않고 광범위하게 묶어 한 번에 처리하거나 누락된 예외가 존재할 때 발생
- 방지 : 의도대로 출력되는지 확인, 세분화된 예외처리 수행
코드 오류
- 개발자들이 코딩 중 실수하기 쉬운 형(Type) 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
ⓞ 널 포인터(Null Pointer) 역참조
- 널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생
- 널 포인터 : 아무 값이 없어 아무것도 가리키지 않는 것
- 보통 운영체제에서 널포인터는 memory의 처음주소를 가리키는데 이를 참조하면 비정상적으로 종료됨
- 방지 : 포인터 사용 전 null값 검사
ⓞ 부적절한 자원 해제
- 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생
- 방지 : 프로그램 상에서 반환코드의 누락을 확인
ⓞ 해제된 자원 사용
- 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생
- 예상치 못한 값을 수행하여 의도되지 않은 결과 발생
- 방지 : 주소 초기화
ⓞ 초기화 되지 않은 변수 사용
- 방지 : 선언 시 할당된 메모리 초기화
캡슐화
- 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목
ⓞ 캡슐화로 인해 발생할 수 있는 보안 약점
⑴ 잘못된 세션에 의한 정보 노출
- 다중 스레드(Multi-Thread) 환경에서 멤버 변수에 정보를 저장할 때 발생
- 방지 : 지역변수 사용 제한
⑵ 제거되지 않고 남은 디버그 코드
- 개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생
- 인증이나 식별 절차를 생략하는 경로 노출
- 방지 : 남아있는 디버그코드를 모두 삭제
⑶ 시스템 데이터 정보 노출
- 시스템 내부정보를 외부로 출력되도록 코딩했을 때 발생
- 방지 : 최소한의 정보만 제공
⑷ Public 메소드로부터 반환된 Private 배열
- 방지 : private 배열을 별도의 메소드를 통해 조작
⑸ Private 배열에 Public 데이터 할당
- 외부에서 private 데이터 접근 가능
- 방지 : 위치로 저장x, 값으로 저장
※ public : 모든 클래스에서 접근 가능
※ private : 선언된 클래스에서만 접근가능
API 오용
- API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목
ⓞ DNS Lookup에 의존한 보안 결정
- 도메인에 의존해 보안 결정을 내리는 경우 발생하는 보안 약점
- 사용자와 서버 사이의 네트워크 트래픽을 유도하여 악성사이트로 경유하도록 조작
- 방지 : 도메인 주소 대신 IP 주소를 직접 입력
ⓞ 취약한 API 사용
- 보안 문제로 사용이 금지된 API를 사용하거나 잘못된 방식으로 API를 사용했을 때 발생
- 방지 : API 메뉴얼을 참고하여 보안이 보장된 인터페이스만 사용
암호 알고리즘
암호 알고리즘 | 양방향 | 개인키 | Stream 방식 |
Block 방식 | |||
공개키 | |||
단방향 | HASH |
- 중요 정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 또는 방법
- 단방향 암호화 방식 : 해시(Hash)
- 양방향 암호화 방식 : 개인키(Stream 방식, Block 방식), 공개키
ⓞ 개인키 암호화(Private Key Encryption) 기법
- 동일한 키로 데이터를 암호화하고 복호화
- 대칭키, 비밀키 방식
- 암호화/복호화 속도가 빠름
- 알고리즘 단순
- 파일의 크기가 작음
- 키의 개수가 많고 관리가 어려움
- 대표적 방식 : DES
⑴ 블록(Block) 암호화 방식
- 한 번에 하나의 데이터 블록을 암호화
- DES, SEED, AES, ARIA
⑵ 스트림(Stream) 암호화 방식
- 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화
- LFSR, RC4
ⓞ 공개키 암호화(Public Key Encryption) 기법
- 암호화 할 때 사용하는 공개키(Public Key)는 데이터베이스 사용자에게 공개
- 복호화 할 때 사용하는 비밀키(Secrey Key)는 관리자가 비밀리에 관리
- 비대칭 암호 기법
- 키의 분배 용이
- 관리해야 할 키의 개수가 적음
- 알고리즘 복잡
- 속도가 느림
- 대표적 방식 : RSA(Rivest Shamir Adleman)
ⓞ 양방향 알고리즘의 종류
- SEED : 1999년 KISA가 개발, 블록 크기 128비트, 키 길이에 따라 128, 256 분류
- ARIA
- DES : 1975년 미국에서 발표, 블록 크기 64비트, 키 길이 56비트
- AES
- RSA : 1978년 MIT에서 개발, 소인수분해 원리 이용
ⓞ 해시(Hash)
- 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환
- 데이터의 암호화, 무결성 검증을 위해 사용
- SHA, MD5
'BASE' 카테고리의 다른 글
정보처리기사 실기 - 요구사항 확인 : 현행 시스템 분석 (0) | 2020.06.17 |
---|---|
정보처리기사 필기 - 정보시스템 구축관리 : 시스템 보안 구축 (0) | 2020.06.15 |
정보처리기사 필기 - 정보시스템 구축관리 : IT 프로젝트 정보시스템 구축관리2 (0) | 2020.06.13 |
정보처리기사 필기 - 정보시스템 구축관리 : IT 프로젝트 정보시스템 구축관리1 (0) | 2020.06.12 |
정보처리기사 필기 - 정보시스템 구축관리 : 소프트웨어 개발 방법론 활용 (0) | 2020.06.11 |