도서 개발 공부/정보 처리 기사 필기

5. 정보 시스템 구축 관리 - 소프트웨어 개발 보안 구축(Secure SDLC ~ 시간 및 상태)

캐티시 2022. 4. 18. 15:55

190. Secure SDLC

: 보안상 안전한 소프트웨어 개발을 위해 소프트웨어 개발 생명 주기(SDLC)에 보안 강화 프로세스를 포함 한 것

  • 유지 보수 단계에서 보안 이슈 해결로 소모되는 비용을 최소화하기 위해 등장
  • SDLC의 전 단계에 걸쳐 수행되어야 하는 보안 활동 제시

 

- 대표적 Secure SDLC 방법론

  • CLASP : 생명 주기의 초기 단계에서 보안을 강화하기 위해 개발된 방법론
    • Secure Software 사에서 개발
    • 활동 중심, 역할 기반의 프로세스로 구성
    • 현재 운용 중인 시스템에 적용하기에 적합
  • SDL : 안전한 소프트웨어 개발을 위해 기존의 SDLC를 개선한 방법론
    • Microsoft 사에서 개발
    • 전통적인 나선형 모델 기반
  • Seven Touchpoints : 소프트웨어 보안의 모범 사례를 SDLC에 통합한 방법론
    • 설계 및 개발 과정의 모든 산출물에 위험 분석 및 테스트 수행
    • SDLC의 각 단계에 관련된 7개의 보안 강화 활동 수행

 

1) SDLC 각 단계 별 보안 활동

1. 요구 사항 분석 단계

: 보안 항목에 해당하는 요구 사항을 식별

  • 전산화되는 정보가 가진 보안 수준을 보안 요소별로 등급을 부여해 분류
  • 조직의 정보 보호 관련 보안 정책을 참고하여 각 항목들의 출처, 요구 수준, 세부 내용 등을 문서화

 

보안 요소

: 소프트웨어 개발에 있어 충족시켜야 하는 요소 및 요건

  • 기밀성 (Confidentiality) : 시스템 내 정보 및 자원은 인가된 사용자에게만 접근을 허용
    • 전송 중에 정보가 노출되어도 데이터를 읽을 수 없음
  • 무결성 (Integrity) : 시스템 내 정보는 인가된 사용자만 수정 가능
  • 가용성 (Availability) : 인가 받은 사용자는 언제나 정보를 사용 가능
  • 인증 : 시스템 내 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지 확인
    • ex) 비밀번호, 인증용 카드, 지문 검사, etc.
  • 부인 방지 : 데이터를 송수신한 자가 해당 사실을 부인할 수 없도록 증거 제공

 

2. 설계 단계

: 식별된 보안 요구 사항들을 소프트웨어 설계서에 반영하고, 보안 설계서 작성

  • 발생 가능한 위협을 식별하여 해당 위협에 대한 대책, 소요 예산, 영향 범위 등을 수립
  • 개발 환경에 대한 보안 통제 기준을 수립하여 설계에 반영
    • 네트워크 : 네트워크 분리, 방화벽 설치, etc.
    • 서버 : 보안이 뛰어난 운영체제 사용, 보안 업데이트, 외부 접속에 대한 접근 통제, etc.
    • 물리적 보안 : 출입통제, 개발 공간 제한, 폐쇄회로 등 의 감시 설비 설치
    • 개발 프로그램 : 허가되지 않은 프로그램 통제, 지속적인 데이터 무결성 검사 실시

 

3. 구현 단계

: 표준 코딩 정의서소프트웨어 개발 보안 가이드를 준수하며, 설계서에 따라 보안 요구 사항 구현

  • 개발 과정 중 지속적인 단위 테스트 -> 발생 가능한 보안 취약점을 최소화
  • 코드 점검 및 소스 코드 진단 작업 -> 소드 코드의 안정성 확보

 

※ 표준 코딩 정의서

: 코딩 시 다른 개발자나 운영자가 쉽게 접근할 수 있도록 네이밍 규칙, 주석 첨부 방식 등을 정의한 문서

 

소프트웨어 개발 보안 가이드

: 안전한 소프트웨어 개발을 위해 정부에서 제작해 배포하는 지침

 

 

4. 테스트 단계

: 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작하는지 점검

  • 동적 분석 도구나 모의 침투 테스트를 통해 식별한 위협의 해결 여부 검증
  • 구현 단계에서 추가로 제시된 위협들과 취약점 또한 점검
  • 수행한 모든 테스트 결과는 문서화하여 보존, 개발자에게 피드백으로 제공

 

5. 유지 보수 단계

: 이전 과정을 모두 수행하였음에도 발생 가능한 보안 사고를 식별하고, 사고 발생 시 이를 해결하여 보안 패치 진행


191. 세션 통제

: 세션의 연결과 그 연결로 인해 발생하는 정보를 관리하는 것

  • 세션 : 서버와 클라이언트 간의 연결
  • 세션 통제는 요구 사항 분석 및 설계 단계에서 진단

 

1) 세션 통제의 보안 약점

1. 불충분한 세션 관리

: 일정한 규칙이 존재하는 세션 ID가 발급되거나 타임아웃이 너무 길게 설정되어 발생하는 보안 약점

  • 세션 하이재킹 (Session Hijacking, 세션 가로채기) : 서버에 접속해있는 클라이언트의 세션 정보를 가로채는 공격 기법
  • 세션 하이재킹 등의 공격을 통해 얻은 세션 ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근

 

2. 잘못된 세션에 의한 정보 노출

: 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점

  • 싱글턴 패턴에서의 레이스 컨디션 -> 동기화 오류, 멤버 변수의 정보 노출
    • 싱글턴 패턴 : 하나의 객체만 생성하여 해당 객체를 어디서든 참조할 수 있지만, 동시에는 참조가 불가능하도록 하는 디자인 패턴
    • 레이스 컨디션 : 둘 이상의 프로세스가 공동 자원을 획득하기 위해 경쟁하는 상태

=> 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지

 

2) 세션 설계시 고려 사항

  • 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성
  • 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 함
  • 세션 타임아웃을 적절히 설정 (중요도가 높으면 2~5분, 중요도가 낮으면 15~30분)
  • 중복 로그인을 허용하지 않는 경우 중복 접근에 대한 세션 관리 정책 수립
  • 패스워드 변경 시 활성화된 세션을 삭제하고 재할당

 

3) 세션 ID 관리법

  • 안전한 서버에서 최소 128비트의 길이로 생성
  • 예측이 불가능하도록 안전한 난수 알고리즘 적용
  • 세션 ID가 노출되지 않도록 URL Rewrite 기능을 사용하지 않고 설계
    • URL Rewrite : 세선 ID를 전달하기 위해 URL에 포함시키는 방식
  • 로그인 시 로그인 전의 세션ID는 삭제하고 재할당
  • 장기간 접속하고 있는 세션ID는 주기적으로 재할당

192. 입력 데이터 검증 및 표현

: 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목

  • 구현 단계에서 유효성 검증 체계를 갖추고 검증되지 않은 데이터가 입력되는 경우 이를 처리할 수 있도록 구현
  • 입력 데이터를 처리하는 객체에 지정된 자료형이 올바른지 확인
  • 일관된 언어셋(ASCII, UTF-8, etc)을 사용하도록 코딩

 

- 입력 데이터 검증 및 표현의 보안 약점

1. SQL 삽입 (SQL Injection)

  • 웹 응용 프로그램에 SQL을 삽입해 내부 DB 서버의 데이터를 유출 및 변조하거나 관리자 인증을 우회하는 보안 약점

=> 동적 쿼리에 사용되는 입력 데이터에 예약어나 특수 문자가 입력되지 않게 필터링하여 방지

 

2. 경로 조작 및 자원 삽입

  • 데이터 입출력 경로를 조작하여 서버 자원을 수정, 삭제하는 보안 약점

=> 사용자 입력값을 식별자로 사용하는 경우 경로 순회 공격을 막는 필터를 사용하여 방지

    ex) 경로 탐색 시 사용하는 '\', '/', '..' 등의 기호 방지

 

3. 크로스사이트 스크립팅 (XSS; Cross Site Scripting)

  • 웹페이지에 악의적인 스크립트를 삽입하여 정보를 탈취하거나 비정상적인 기능 수행을 유발하는 보안 약점

=> HTML 태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 '<', '>', '&' 등의 문자를 다른 문자로 치환하여 방지

 

4. 운영체제 명령어 삽입

  • 외부 입력값을 통해 시스템 명령어의 실행을 유도하여 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점

=> 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고, 검증 없이 외부 입력값을 내부 명령어로 사용하지 않도록 하여 방지

 

5. 위험한 형식 파일 업로드

  • 악의적인 명령어가 포함된 스크립트 파일을 업로드하여 시스템에 손상을 주거나 제어 권한을 획득하는 보안 약점

=> 업로드 파일의 확장자 제한, 파일명 암호화, 웹사이트와 파일 서버의 경로 분리, 실행 속성 제거 등의 방법으로 방지

 

6. 신뢰되지 않는 URL 주소로 자동 접속 연결

  • 입력 값으로 사이트 주소를 받는 경우 이를 조작해 방문자를 피싱 사이트로 유도하는 보안 약점

=> 화이트 리스트로 연결되는 외부 사이트 목록을 관리하여 방지

 

7. 메모리 버퍼 오버플로우

  • 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리의 범위를 넘어선 위치에서 자료를 읽거나 쓰려고할 때 발생하는 보안 약점
  • 오버플로우로 프로그램 오동작을 유발하거나 악의적인 코드를 실행시켜 공격자가 프로그램 통제 권한 획득

=> 적절한 메모리 버퍼의 크기를 설정하고, 설정된 범위의 메모리 내에서만 올바르게 읽거나 쓸 수 있도록 하여 방지


193. 보안 기능

: 구현 단계에서 인증, 접근 제어, 기밀성, 암호화 등의 보안 기능을 올바르게 구현하기 위한 보안 점검 항목

  • 서비스 환경이나 취급 데이터에 맞게 보안 기능이 처리될 수 있도록 구현
  • 소프트웨어 기능이나 데이터에 접근하려는 사용자는 중요도에 따라 차등적인 인증 방안을 적용
  • 인증된 사용자가 이용할 기능과 데이터에 대해 개별적인 접근 권한을 부여하여 인가되지 않은 기능과 데이터에 데한 접근 차단
  • 중요한 정보의 변조, 삭제, 오남용 등을 방지하기 위해 안전한 암호화 기술 적용

 

- 보안 기능의 보안 약점

1. 적절한 인증 없이 중요 기능 허가

  • 보안 검사를 우회하여 인증 과정 없이 중요한 정보나 기능에 접근할 수 있게되는 보안 약점

=> 중요 정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지

 

2. 부적절한 인가

  • 접근 제어 기능이 없는 실행 경로를 통해 정보나 권한을 탈취하는 보안 약점

=> 모든 실행 경로에 대해 접근 제어 검사를 수행하고 사용자에게 반드시 필요한 권한만을 부여하여 방지

 

3. 중요한 자원에 대한 잘못된 권한 설정

  • 권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용하는 보안 약점

=> 소프트웨어 관리자만 자원을 읽고 쓸 수 있도록 설정하고, 인가되지 않은 사용자의 중요 자원 접근 여부를 검사하여 방지

 

4. 취약한 암호화 알고리즘 사용

  • 암호화된 환경설정 파일을 해독하여 중요 정보를 탈취하는 보안 약점

=> 안전한 암호화 알고리즘을 사용하고, IT보안인증사무국이 안정성을 확인한 암호모듈을 사용하여 방지

 

IT보안인증사무국

: 정보 보호 제품의 평가와 인증을 수행하고 인증 제품 목록을 공개 및 관리하는 국가보안기술연구소 산하 인증 기관

 

5. 중요 정보 평문 저장 및 전송

  • 암호화되지 않은 평문 데이터를 탈취하여 중요 정보를 획득하는 보안 약점

=> 중요한 정보를 저장 및 전송할 때는 반드시 암호화 과정을 거치도록 하고 HTTPS, SSL 등의 보안 채널을 이용하여 방지

 

보안 채널

  • HTTPS : HTTP와 암호 통신 규약을 결합하여 웹브라우저와 서버 간의 안전한 통신 보장
  • SSL (Secure Sockets Layer) : 데이터 송신 측과 수신 측 사이에서 인증, 암호화, 무결성을 보장하는 업계 표준 프로토콜

 

6. 하드코드된 비밀번호

  • 소스코드 유출 시 내부의 하드코드된 패스워드를 통해 관리자 권한을 탈취하는 보안 약점

=> 패스워드는 암호화하여 별도 파일에 저장하고, 디폴트 패스워드, 디폴트 키의 사용을 피하여 방지


194. 시간 및 상태

: 병렬 처리 시스템이나 다수의 프로세스가 함께 동작하는 환경에서 시간과 실행 상태를 관리하는 보안 점검 항목

  • 시간 및 상태의 점검 미비로 발생하는 각종 오류들은 공격자가 악용할 수 있는 취약점이 됨

 

- 시간 및 상태 상의 보안 약점

1. TOCTOU 경쟁 조건

: 자원의 검사 시점(Time of Check)과 사용 시점(Time Of Use)를 고려하지 않아 발생하는 보안 약점

  • 검사 시점에는 사용 가능했던 자원이 사용 시점에는 사용할 수 없게 되어 발생
  • 프로세스가 가진 자원 정보와 실제 자원 상태가 일치하지 않는 동기화 오류, 교착 상태 등이 발생

=> 동기화 구문을 통해 해당 자원에는 한 번에 한 프로세스만 접근 가능하도록 구성하여 방지

 

동기화 구문

: 공유 자원에 둘 이상의 프로세스가 접근하는 것을 막는 구문 ex) Synchronized, Mutex, etc.

  • 동기화 구문은 성능 감소를 동반하므로 꼭 필요한 부분에만 한정하여 사용

 

2. 종료되지 않는 반복문 및 재귀함수

: 반복문이나 재귀함수에서 종료 조건을 정의하지 않았거나, 논리 구조상 종료될 수 없어 발생하는 보안 약점

  • 반복문이나 재귀함수가 종료되지 않을 경우 시스템 자원을 끊임 없이 사용하여 자원 고갈을 유발

=> 반복문, 재귀 함수의 수행 횟수를 제한하는 설정을 추가하거나, 종료 조건을 통해 제대로 종료되는 지 확인하여 방지