소프트웨어 개발 보안 구축

Date:     Updated:

카테고리:

태그:

img

소프트웨어 개발 보안 구축


Secure SDLC

1. Secure SDLC (Software Development Life Cycle, 소프트웨어 개발 생명 주기)

  • Secure SDLC는 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함한 것을 의미한다.
  • Secure SDLC는 요구사항 분석, 설계, 구현, 테스트, 유지보수 등 SDLC 전체 단계에 걸쳐 수행되어야 할 보안 활동을 제시한다.
  • Secure SDLC의 대표적인 방법론
방법론 내용
CLASP SDLC의 초기 단계에서 보안을 강화하기 위해 개발된 방법론
SDL 마이크로소프트 사에서 안전한 소프트웨어 개발을 위해 기존의 SDLC를 개선한 방법론
Seven Touchpoints 소프트웨어 보안의 모범사례를 SDLC에 통합한 방법론


2. SDLC 단계별 보안 활동

요구사항 분석 단계 → 설계 단계 → 구현 단계 → 테스트 단계 → 유지보수 단계

  • 요구사항 분석 단계 : 보안 항목에 해당하는 요구사항을 식별하는 작업을 수행함
  • 설계 단계 : 식별된 보안 요구사항들을 소프트웨어 설계서에 반영하고, 보안 설계서를 작성함
  • 구현 단계 : 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하며, 설계서에 따라 보안 요구사항들을 구현함
  • 테스트 단계 : 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검함
  • 유지보수 단계 :
    • 이전 과정을 모두 수행하였음에도 발생할 수 있는 보안사고들을 식별
    • 사고 발생 시 이를 해결하고 보안 패치를 실시함


3. 소프트웨어 개발 보안 요소

보안 요소 설명
기밀성
(Confidentially)
- 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용됨
- 정보가 전송 중에 노출되더라도 데이터를 읽을 수 없음
무결성
(Integrity)
시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있음
가용성
(Availability)
인가받은 사용자는 시스템 내의 정보와 자원을 언제라도 사용할 수 있음
인증
(Authentication)
- 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지 확인하는 모든 행위
- 대표적 방법 : 패스워드, 인증용 카드, 지문 검사
부인 방지
(NonRepudiation)
데이터를 송수신한 자가 송수신 사실을 부인할 수 없도록 송수신 증거를 제공

무/기/가/부/인


4. 시큐어 코딩(Secure Coding)

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


문제 1

데이터베이스 보안에서 가용성(Availability)에 대해 간략히 서술하시오.

⭐ 정답 : 인가받은 사용자는 시스템 내의 정보와 자원을 언제라도 사용할 수 있는 특성을 말한다.


문제 2

실무적으로 검증된 개발 보안 방법론 중 하나로, SW보안의 모범 사례를 SDLC 에 통합한 소프트웨어 개발 보안 생명주기 방법론은 무엇인지 쓰시오.

⭐ 정답 : Seven Touchpoints


문제 3

소프트웨어 개발 보안에 있어 충족시켜야 할 보안의 3대 요소를 쓰시오.

⭐ 정답 : 무결성, 기밀성, 가용성


문제 4

보안 요소는 소프트웨어 개발에 있어 충족시켜야 할 요소 및 요건을 의미한다. 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있는 것을 의미하는 보안 요소는 무엇인지 쓰시오.

⭐ 정답 : 무결성


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

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


6. 보안 기능

  • 보안 기능은 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근 제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목들이다.
  • 보안 기능의 보안 약점
보안 약점 설명
적절한 인증 없이 중요기능 허용 - 보안 검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능함
- 중요 정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지할 수 있음.
부적절한 인가 - 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취할 수 있음
- 모든 실행경로에 대해 접근제어 검사를 수행하고, 사용자에게는 반드시 필요한 접근 권한만을 부여하여 방지할 수 있음.
중요한 자원에 대한 잘못된 권한 설정 - 권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용할 수 있음
- 소프트웨어 관리자만 자원들을 릭고 쓸 수 있도록 설정하고, 인가되지 않은 사용자의 중요 자원에 대한 접근 여부를 검사함으로써 방지할 수 있음.
취약한 암호화 알고리즘 사용 - 암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보를 탈취할 수 있음
- 안전한 암호화 알고리즘을 이용하고, 업무관련 내용이나 개인정보 등에 대해서는 IT 보안인증사무국이 안정성을 확인한 암호모듈을 이용함으로써 방지할 수 있음
중요정보 평문 저장 및 전송 - 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 해독할 수 있음
- 중요한 정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고, HTTPS 또는 SSL 과 같은 보안 채널을 이용함으로써 방지할 수 있음
하드코드 된 암호화 키 - 암호화된 키도 하드코드된 경우 유출 시 역계산 또는 무차별 대입 공격에 의해 탈취될 수 있음
- 상수 형태의 암호키를 사용하지 않고, 암호화 키 생성 모듈 또는 보안이 보장된 외부 공간을 이용함으로써 방지할 수 있음


7. 코드 오류

  • 코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type)변환, 자원반환 등의 오류를 예방하기 위한 보안 점검 항목들이다.
  • 코드 오류의 보안 약점
보안 약점 설명
널 포인터(Null Pointer)역참조 - 널 포인터가 가리키는 메모리의 위치에 값을 저장할 때 발생하는 보안 약점
- 포인터를 이용하기 전에 널 값을 갖고 있는지 검사함으로써 방지 할 수 있다.
부적절한 자원 해제 - 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점
- 프로그램 내에 자원 반환 코드가 누락되었는지 확인하고, 오류로 인해 함수가 중간에 종료되었을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지할 수 있음
해제된 자원 사용 - 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점
- 반환된 메모리에 접근할 수 없도록 주소를 저장하고 있는 포인터를 초기화함으로써 방지할 수 있음
초기화되지 않은 변수사용 - 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점
- 변수 선언 시 할당된 메모리를 초기화함으로써 방지할 수 있음


8. 스택 가드 (Stack Guard)

  • 널 포인터 역참조와 같이 주소가 저장되는 스택에서 발생하는 보안 약점을 막는 기술 중 하나이다.
  • 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값을 저장한 후 그 값이 변경되었을 경우 오버플로우 상태로 판단하여 프로그램 실행을 중단함으로써 잘못된 복귀 주소의 호출을 막는다.


문제 1

메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값을 저장해 두었다가 그 값이 변경되었을 경우 오버플로우 상태로 가정하여 프로그램 실행을 중단하는 기술은 무엇인지 쓰시오.

⭐ 정답 : 스택가드


문제 2

포인터에 NULL 이 저장되어있을 때 이를 참조할 경우 발생하며, 주로 함수의 반환값을 참조하도록 코딩한 경우 함수가 오류로 인해 NULL을 반환하면서 발생하는 보안 약점을 <보기>에서 찾아 쓰시오.

<보기>
- 부적절한 자원 해제
- 해제된 자원 사용
- 널 포인터 역참조
- 초기화되지 않은 변수 사용

⭐ 정답 : 널 포인터 역참조

info-process 카테고리 내 다른 글 보러가기

댓글 남기기