관리 메뉴

나구리의 개발공부기록

3장 - 소프트웨어 개발 보안 구축 | 섹션20. Secure SDLC, 섹션21. 세션통제, 섹션22. 입력 데이터 검증 및 표현, 섹션23. 보안기능 본문

2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/필기 5강 - 정보시스템 구축 관리

3장 - 소프트웨어 개발 보안 구축 | 섹션20. Secure SDLC, 섹션21. 세션통제, 섹션22. 입력 데이터 검증 및 표현, 섹션23. 보안기능

소소한나구리 2024. 5. 8. 20:17

2024년도 시나공 필기 책 내용 정리 


섹션20. Secure SDLC

 

1. Secure SDLC의 개요

 

  • 보안상 안전한 소프트웨어를 개발하기 위해 SDLC(소프트웨어 개발 생명주기)에 보안 강화를 위한 프로세스를 포함한 것을 의미
  • 소프트웨어의 유지 보수 단계에서 보안 이슈를 해결하기 위해 소모되는 많은 비용을 최소화하기 위해 등장함
  • 요구사항 분석, 설계, 구현, 테스트, 유지 보수 등 SDLC 전체 단계에 걸쳐 수행되어야 할 보안 활동을 제시
  • 대표적인 방법론
CLASP Secure Software 사에서 개발하였으며, SDLC의 초기 단계에서 보안을 강화하기 위해 개발된 방법론
활동 중심, 역할 기반의 프로세스로 구성되어 있으며 현재 운용 중인 시스템에 적용하기에 적합함
SDL 마이크로소프트 사에서 안전한 소프트웨어 개발을 위해 기존의 SDLC를 개선한 방법론
전통적인 나선형 모델을 기반으로 함
Seven
Touchpoints
소프트웨어 보안의 모범사례를 SDLC에 통합한 방법론
설계 및 개발 과정의 모든 산출물에 대해 위험 분석 및 테스트를 수행
SDLC의 각 단계에 관련된 7개의 보안 강화 활동을 수행

2. 요구사항 분석 단계에서의 보안 활동

 

  • 전산화 되는 정보가 가지고 있는 보안 수준을 보안 요소별로 등급을 구분하여 분류
  • 조직의 정보보호 관련 보안 정책을 참고하여 소프트웨어 개발에 적용할 수 있는 보안 정책 항목들의 출처, 요구 수준, 세부 내용 등을 문서화 함

보안 요소

 

  • 보안 3대 요소는 기밀성, 무결성, 가용성이 있으며 그외에도 인증, 부인방지 등이 있음
기밀성 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용됨
정보가 전송 중에 노출되더라도 데이터를 읽을 수 없음
무결성 시스템 내의 정보는 인가된 사용자만 수정할 수 있음
가용성 인가받은 사용자는 언제라도 사용할 수 있음
인증 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지를 확인하는 모든 행위
대표적 방법으로는 패스워드, 인증용 카드, 지문 검사 등이 있음
부인 방지 데이터를 송/수진한 자가 송/수신 사실을 부인할 수 없도록 송/수신 증거를 제공

3. 설계 단계에서의 보안 활동

 

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

4. 구현 단계에서의 보안활동

 

  • 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하며 설계서에 따라 보안 요구사항들을 구현
  • 개발 과정 중에는 지속적인 단위 테스트를 통해 소프트웨어에 발생할 수 있는 보안 취약점을 최소화
  • 코드 점검 및 소스 코드 진단 작업을 통해 소스 코드의 안정성을 확보해야 함

시큐어 코딩(Secure Coding)

 

  • 소프트웨어 구현 단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하여 코딩하는 것을 의미함
  • 보안 취약점을 사전에 대응하여 안정성과 신뢰성을 확보하기 위해 사용됨
  • 보안 정책을 바탕으로 시큐어 코딩가이드를 작성하고, 개발 참여자에게는 시큐어 코딩 교육을 실시해야 함

5. 테스트 단계에서의 보안 활동

 

  • 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작하는지 점검
  • 동적 분석 도구 또는 모의 침투테스트를 통해 설계 단계에서 식별된 위협들의 해결 여부를 검증
  • 셜계 단계에서 식별된 위협들 외에도 구현 단계에서 추가로 제시된 위협들과 취약점들을 점검할 수 있도록 테스트 계획을 수립하고 시행
  • 테스트 단계에서 수행한 모든 결과는 문서화하여 보존하고 개발자에게 피드백 되어야 함

6. 유지보수 단계에서의 보안 활동

 

  • 이전 과정을 모두 수행하였음에도 발생할 수 있는 보안 사고들을 식별하고 사고 발생시 이를 해결하고 보안 패치를 실시

섹션21. 세션통제

 

1. 세션 통제의 개요

 

  • 세션은 서버와 클라이언트의 연결을 의미하고, 세션 통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것을 의미
  • 소프트웨어 개발 과정 중 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용임

2. 불충분한 세션 관리

 

  • 일정한 규칙이 존재하는 세션ID(서버가 클라이언트들을 구분하기 위해 부여하는 키)가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 보안 약점
  • 세션 관리가 충분하지 않으면 침입자는 세션 하이재킹과 같은 공격을 통해 획득한 세션ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있음

세션 하이재킹(Session Hijacking)

 

  • 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채는 공격 기법으로, 세션 가로채기라고도 함
  • 정상적인 연결을 RST패킷을 통해 종료시킨 후 재연결 시 희생자가 아닌 공격자에게 연결하는 방식
  • 공격자는 서버와 상호 간의 동기화된 시퀀스 번호를 이용하여 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있게 됨
  • 탐지 방법에는 비동기화 상태 탐지, ACK STORM 탐지, 패킷의 유실 탐지, 예상치 못한 접속의 리셋 탐지가 있음

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

 

  • 다중 스레드환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
  • 싱글톤 패턴에서 발생하는 *레이스컨디션(두 개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하고 있는 상태)*으로 인해 동기화 오류가 발생하거나 멤버 변수의 정보가 노출될 수 있음
  • 멤버 변수보다 지역변수를 활용하여 변수의 범위를 제한함으로써 방지할 수 있음

4. 세션 설계시 고려 사항

 

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

5. 세션 ID의 관리 방법

 

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

섹션22. 입력 데이터 검증 및 표현

 

1. 입력 데이터 검증 및 표현의 개요

 

  • 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들
  • 입력 데이터로 인해 발생하는 문제를 예방하기 위해서는 소프트웨어 개발의 구현단계에서 유효성 검증 체계를 갖추고 검증되지 않은 데이터가 입력되는 경우 이를 처리할 수 있도록 구현
  • 입력 데이터를 처리하는 객체에 지정된 자료형이 올바른지 확인하고 일관된 언어셋을 사용하도록 코딩 

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

SQL 삽입
(SQL Injection)
웹 응용 프로그램에 SQL을 삽입하여 내부 데이터베이스 서버의 데이터를 유출 및 변조하고 관리자 인증을 우회하는 보안 약점
동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지할 수 있음
경로 조작 및 자원삽입 데이터 입/출력 경로를 조작하여 서버 자원을 수정/삭제 할 수 있는 보안 약점
사용자 입력값을 식별자로 사용하는 경우, 경로 순회 공격을 막는 필터를 사용하여 방지할 수 있음
크로스사이트 스크립팅
(XSS; Cross Site
Scripting)
웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나 비정상적인 기능 수행을 유발하는 보안 약점
HTML 태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 '< > &' 등의 문자를 다른 문자로 치환함으로써 방지할 수 있음
운영체제 명령어 삽입 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점
웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고 외부 입력값을 검증 없이 내부 명령어로 사용하지 않음으로써 방지할 수 있음
위험한 형식 파일 업로드 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나 시스템을 제어할 수 있는 보안약점
업로드 되는 파일의 확장자 제한, 파일명의 암호화, 웹사이트와 파일 서버의 경로 분리, 실행 속성을 제거하는 등의 방법으로 방지할 수 있음
신뢰되지 않는 URL
주소로 자동접속 연결
입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안 약점
연결되는 외부 사이트의 주소를 화이트 리스트로 관리함으로써 방지할 수 있음
메모리 버퍼 오버플로 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리의 범위를 넘어선 위치에서 자료를 읽거나 쓰려고 할 때 발생하는 보안 약점
프로그램의 오동작을 유발시키거나 악의적인 코드를 실행시켜 공격자가 프로그램을 통제할 수 있는 권한을 획득하게 함
메모리 버퍼를 사용할 경우 적절한 버퍼의 크기를 설정하고 설정된 범위의 메모리 내에서 올바르게 읽거나 쓸 수 있도록 함으로써 방지할 수 있음

섹션23. 보안기능

 

1. 보안 기능의 개요

 

  • 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목들
  • 각 보안 기능들은 서비스 환경이나 취급 데이터에 맞게 처리될 수 있도록 구현해야 함
  • 소프트웨어의 기능 또는 데이터에 접근하려는 사용자별로 중요도를 구분하고 차별화된 인증 방안을 적용
  • 인증된 사용자가 이용할 기능과 데이터에 대해 개별적으로 접근 권한을 부여하여 인가되지 않은 기능과 데이터로의 접근을 차단
  • 개인정보다 인증정보와 같은 중요한 정보의 변조, 삭제, 오남용 등을 방지하기 위해 안전한 암호화 기술을 적용

2. 보안 기능의 보안 약점

적절한 인증 없이
중요한 기능 허용
보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능
중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지
부적절한 인가 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취할 수 있음
모든 실행경로에 대해 접근제어 검사를 수행하고 사용자에게는 반드시 필요한 접근 권한만을 부여하여 방지
중요한 자원에 대한
잘못된 권한 설정
권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용할 수 있음
소프트웨어 관리자만 자원들을 읽고 쓸 수 있도록 설정하고 인가되지 않은 사용자의 중요 자원에 대한 접근 여부를 검사함으로써 방지
취약한 암호화
알고리즘 사용
암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보를 탈취
안전한 암호화 알고리즘을 이용하고 업무관련 내용이나 개인정보 등에 대해서는 IT 보안인증사무국이 안정성을 확인한 암호모듈을 이용함으로써 방지
중요정보 평문
저장 및 전송
암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 획득
중요한 정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고, HTTPS 또는 SSL과 같은 보안 채널을 이용함으로써 방지할 수 있음
하드코드된
비밀번호
소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취
패스워드는 암호화하여 별도의 파일에 저장하고, 디폴트 패스워드나 디폴트 키의 사용을 피함으로써 방지할 수 있음