Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Chimy's Program

정보처리기사 필기 - 정보시스템 구축관리 : 소프트웨어 개발 보안 구축 본문

BASE

정보처리기사 필기 - 정보시스템 구축관리 : 소프트웨어 개발 보안 구축

chimy 2020. 6. 14. 11:09

정보처리기사 필기 - 정보시스템 구축관리 : 소프트웨어 개발 보안 구축

 

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

 

Comments