소프트웨어 개발 보안 구축
카테고리: info-process
소프트웨어 개발 보안 구축
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을 반환하면서 발생하는 보안 약점을 <보기>에서 찾아 쓰시오.보기>
<보기>
- 부적절한 자원 해제
- 해제된 자원 사용
- 널 포인터 역참조
- 초기화되지 않은 변수 사용
⭐ 정답 : 널 포인터 역참조
댓글 남기기