Notice
Recent Posts
Recent Comments
Link
«   2024/03   »
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
Archives
Today
Total
관리 메뉴

차근차근

[2020 정보처리기사 필기] 소프트웨어 개발 보안 구축 (1) 본문

대학교/자격증

[2020 정보처리기사 필기] 소프트웨어 개발 보안 구축 (1)

SWKo 2020. 8. 15. 03:12

179. Secure SDLC

1. Secure SDLC의 개요

- Secure SDLC는 보안상 안전한 소프트웨어를 갭라하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함한 것을 의미한다.

- Secure SDLC는 소프트웨어의 유지 보수 단계에서 보안 이슈를 해결하기 위해 소모되는 많은 비용을 최소화하기 위해 등장했다.

- Secure SDLC의 대표적인 방법론에는 Secure Software 사의 CLASP, Microsoft사의 SDL이 있다.

- 요구사항 분석, 설계, 구현, 테스트, 유지 보수 등 SLDC 전체 단계에 걸쳐 수행되어야 할 보안 활동을 제시한다.

 

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

- 요구사항 분석 단계에서는 보안 항목에 해당하는 요구사항을 식별하는 작업을 수행한다.

- 전산화되는 정보가 가지고 있는 보안 수준을 보안 요소별로 등급을 구분하여 분류한다.

- 조직의 정보보호 보안 정책을 참고하여 소프트웨어 개발에 적용할 수 있는 보안 정책 항목들의 출처, 요구 수준, 세부 내용 등을 문서화한다.

 

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

- 소프트웨어에서 발생할 수 있는 위협을 식별하여 보안대책, 소요예산, 사고 발생시 영향 범위와 대응책 등을 수립

- 네트워크, 서버, 물리적 보안, 개발 프로그램 등 환경에 대한 보안통제 기준을 수립하여 설계에 반영

 

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

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

- 지속적인 단위 테스트를 통해 소프트웨어에 발생할 수 있는 보안 취약점을 최소화해야 한다.

- 코드 점검 및 소스 코드 진단 작업을 통해 소스 코드의 안전성을 확보해야 한다.

 

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

- 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검한다.

- 테스트 단계에서 수행한 모든 결과는 문서화하여 보존하고, 개발자에게 피드백 되어야 한다.

 

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

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

 

핵심

- Secure SDLC : 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함한 것

- 각 단계별 보안 활동


180. 세션 통제

1. 세션 통제의 개요

- 세션은 서버와 클라이언트의 연결을 의미하고, 세션 통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것을 말한다.

- 세션 통제는 소프트웨어 개발 과정 중 요구사항 분석 및 설계 단계에서 진단해야하는 보안 점검 내용이다.

- 세션 통제의 보안 약점에는 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출이 있다.

 

2. 불충분한 세션 관리

- 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 보안 약점이다.

- 세션 관리가 충분하지 않으면 침입자는 세션 하이재킹(클라이언트 세션 정보 가로채기)과 같은 공격을 통해 획득한 세션 ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있다.

 

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

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

- 싱글톤 패턴에서 발생하는 레이스컨디션(두 개 이상의 프로세스가 공용 자원을 얻기 위해 경쟁하는 상태)으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출될 수 있다.

- 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지할 수 있다.

 

4. 세션 설계시 고려 사항

- 시스템으 모든 페이지에서 로그아웃이 가능하도록 UI를 구성한다.

- 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 한다.

- 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정한다.

- 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계한다.

- 중복 로그인을 허용하지 않은 경우 클라이언트의 중복 접근에 대한 세션 관리 정책을 수립한다.

- 패스워드 변경 시 활성화된 세션을 삭제하고 재할당한다.

 

5. 세션ID의 관리 방법

- 세션 ID는 안전한 서버에서 최소 128비트의 길이로 생성한다.

- 안전한 난수 알고리즘을 적용

- 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계한다.

- 로그인 시 로그인 전의 세션 ID를 삭제하고 재할당한다.

- 장기간 접속하고 있는 세션ID는 주기적으로 재할당되도록 설계한다.

 

핵심

- 세션 : 서버와 클라이언트의 연결

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

- Secure SDLC의 요구사항 분석, 설계 단계에서 진단되어야 할 보안 점검 사항이다.

- 세션은 서버와 클라이언트의 연결만 관리할 뿐, 각 세션이 가지고 있는 접근 권한을 통제하지는 않는다.


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

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

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

- 입력 데이터의 자료형이 올바른지 확인하고, 일관된 언어셋을 사용하도록 코딩한다.

 

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

- 입력 데이터 검증 및 표현과 관련된 점검을 수행하지 않은 경우 SQL 삽입, 자원 삽입, 크로스사이트 스크립팅(XSS), 운영체제 명령어 삽입 등의 공격에 취약해진다.

- SQL 삽입 : 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점이다, 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지할 수 있다.

- 경로 조작 및 자원 삽입 : 데이터 입출력 경로를 조작하여 서버 자원을 수정, 삭제할 수 있는 보안 약점이다. 사용자 입력값을 식별자로 사용하는 경우, 경로 순회 공격을 막는 필터를 사용하여 방지할 수 있다.

- 크로스사이트 스크립팅(XSS) : 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점이다, HTML 태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 '<', '>', '&' 등의 문자를 다른 문자로 치환함으로써 방지할 수 있다.

- 운영체제 명령어 삽입 : 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점이다, 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고, 외부 입력값을 검증없이 내부 명령어로 사용하지 않음으로써 방지할 수 있다.

- 위험한 형식 파일 업로드 : 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나, 시스템을 제어할 수 있는 보안 약점이다, 업로드 되는 파일의 확장자 제한, 파일명의 암호화, 웹사이트와 파일 서버의 경로 분리, 실행 속성을 제거하는 등의 방법으로 방지할 수 있다.

- 신뢰되지 않는 URL 주소로 자동접속 연결 : 입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안 약점이다, 연결되는 외부 사이트의 주소를 화이트 리스트로 관리함으로써 방지할 수 있다.

 

핵심

- 입력 데이터 검증 및 표현은 구현 단계에서 검증해야 하는 사항이다.

- 각각의 보안 약점에 대비하는 방법


182. 보안 기능

1. 보안 기능의 개요

- 보안 기능은 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목들이다.

- 각 보안 기능들은 서비스 환경이나 취급 데이터에 맞게 처리될 수 있도록 구현해야 한다.

- 소프트웨어의 기능 또는 데이터에 접근하려는 사용자별로 중요도를 구분하고, 차별화된 인증 방안을 적용한다.

- 인증된 사용자가 이용할 기능과 데이터에 대해 개별적으로 접근 권한을 부여하여 인가되지 않은 기능과 데이터로의 접근을 차단한다.

- 개인정보나 인증정보와 같은 중요한 정보의 변조, 삭제, 오남용 등을 방지하기 위해 안전한 암호화 기술을 적용한다.

 

2. 보안 기능의 보안 약점

- 적절한 인증 없이 중요기능 허용 : 보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능하다, 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지할 수 있다.

- 부적절한 인가 : 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취할 수 있다, 모든 실행경로에 대해 접근제어 검사를 수행하고, 사용자에게는 반드시 필요한 접근 권한만을 부여하여 방지할 수 있다.

- 중요한 자원에 대한 잘못된 권한 설정 : 권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용할 수 있다, 소프트웨어 관리자만 자원들을 읽고 쓸 수 있도록 설정하고, 인가되지 않은 사용자의 중요 자원에 대한 접근 여부를 검사함으로써 방지할 수 있다.

- 취약한 암호화 알고리즘 사용 : 암호화된 환경설정 파일을 해독하여 중요정보를 탈취할 수 있다, 안전한 암호화 알고리즘을 이용하고, 중요 정보 등은 IT보안인증사무국이 안정성을 확인한 암호모듈을 이용함으로써 방지할 수 있다.

- 중요정보 평문 저장 및 전송 : 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 획득할 수 있다, 중요한 정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고, HTTPS 또는 SSL과 같은 보안채널을 이용함으로써 방지할 수 있다.

- 하드코드된 비밀번호 : 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취할 수 있다, 패스워드는 암호화하여 별도의 파일에 저장하고, 디폴트 패스워드나 디폴트 키의 사용을 피함으로써 방지할 수 있다.

 

핵심

- 보안 기능의 약점과 그에 대한 대안


183. 시간 및 상태

1. 시간 및 상태의 개요

- 시간 및 상태는 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활하게 작동되도록 하기 위한 보안 검증 항목들이다.

- 시간 및 상태를 점검하지 않은 코딩이 유발하는 보안 약점에는 TOCTOU 경쟁 조건, 잘못된 반복문, 재귀함수 등이 있다.

- 시간 및 상태의 점검 미비로 발생하는 각종 오류들은 공격자에 의해 악용될 수 있다.

 

2. TOCTOU 경쟁 조건

- TOCTOU 경쟁 조건 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점이다.

- 검사 시점에는 사용이 가능했던 자원이 사용 시점에는 사용할 수 없게 된 경우에 발생

- 프로세스가 가진 자원 정보와 실제 자원 상태가 일치하지 않는 동기화 오류, 교착상태 등이 발생할 수 있다.

- 코드 내에 동기화 구문을 사용하여 해당 자원에는 한 번에 하나의 프로세스만 접근 가능하도록 구성함으로써 방지할 수 있다.

- 동기화 구문은 성능 감소를 동반하기 때문에 반드시 필요한 부분에 한정하여 사용해야 한다.

 

3. 종료되지 않은 반복문 또는 재귀함수

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

- 반복문이나 재귀함수가 종료되지 않을 경우 시스템 자원이 끊임없이 사용되어 자원고갈로 인한 서비스 장애 또는 시스템 장애가 발생한다.

- 모든 반복문이나 재귀함수의 수행 횟수를 제한하는 설정을 추가하거나, 종료 조건을 점검하여 반복 또는 호출의 종료 여부를 확인함으로써 방지할 수 있다.

 

핵심

- TOCTOU : 검사 시점에는 사용이 가능했던 자원이 사용 시점에는 사용할 수 없게 된 경우에 발생

- 접근 제어는 사용자에 따라 데이터 또는 기능에 접근할 수 있는 권한을 제어하는 방법으로, 접근 제어를 통해 교착상태를 예방할 수는 없다.

Comments