소프트웨어 개발 보안
: 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동을 의미
- 소프트웨어 개발 보안은 데이터의 기밀성, 무결성, 가용성을 유지하는 것을 목표로 한다.
Secure SDLC
: 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함한 것을 의미
* 보안 요소
- 기밀성: 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용됩니다.
- 무결성: 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있습니다.
- 가용성: 인가받은 사용자는 언제라도 사용할 수 있습니다.
- 인증: 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지를 확인하는 모든 행위를 의미
- 부인 방지: 데이터를 송수신한 자가 송수신 사실을 부인할 수 없도록 송수신 증거를 제공합니다.
설계 단계에서의 보안 활동
: 식별된 보안 요구사항들을 소프트웨어 설계서에 반영하고, 보안 설계서를 작성한다.
구현 단계에서의 보안 활동
: 표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하며, 설계서에 따라 보안 요구사항들을 구현한다.
* 시큐어 코딩(Secure Coding)
: 소프트웨어의 구현 단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것을 의미
테스트 단계에서의 보안 활동
: 설계 단계에서 작성한 보안 설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검한다.
유지보수 단계에서의 보안 활동
: 이전 과정을 모두 수행하였음에도 발생할 수 있는 보안 사고들을 식별하고, 사고 발생 시 이를 해결하고 보안 패시를 실시한다.
세션 통제
: 소프트웨어 개발 과정 중 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용
- 세션 통제의 보안 약점에는 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출이 있다.
불충분한 세션 관리
- 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 보안 약점
- 세션 관리가 충분하지 않으면 침입자는 세션 하이재킹과 같은 공격을 통해 획득한 세션ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있다.
* 세션 하이재킹: 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채는 공격 기법
잘못된 세션에 의한 정보 노출
- 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점
- 싱글톤 패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출될 수 있다.
- 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지할 수 있다.
세션 설계시 고려 사항
- 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI를 구성한다.
- 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 한다.
- 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정한다.
- 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계한다.
- 중복 로그인을 허용하지 않은 경우 클라이언트의 중복 접근에 대한 세션 관리 정책을 수립한다.
- 패스워드 변경 시 활성화된 세션을 삭제하고 재할당한다.
세션ID의 관리 방법
- 세션ID는 안전한 서버에서 최소 128비트의 길이로 생성한다.
- 세션ID의 예측이 불가능하도록 안전한 난수 알고리즘을 적용한다.
- 세션ID가 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계한다.
- 로그인 시 로그인 전의 세션ID를 삭제하고 재할당한다.
- 장기간 접속하고 있는 세션ID는 주기적으로 재할당되도록 설계한다.
입력 데이터 검증 및 표현
: 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들이다.
- 입력 데이터로 인해 발생하는 문제를 예방하기 위해서는 소프트웨어 개발의 구현 단계에서 다음과 같은 유효성 검증 체계를 갖춰야 한다.
- 검증되지 않은 데이터가 입력되는 경우 이를 처리할 수 있도록 구현한다.
- 입력 데이터를 처리하는 객체에 지정된 자료형이 올바른지 확인한다.
- 일관된 언어셋을 사용하도록 코딩한다.
입력 데이터 검증 및 표현의 보안 약점
- SQL 삽입
- 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점
- 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지할 수 있다.
- 경로 조작 및 자원 삽입
- 데이터 입출력 경로를 조작하여 서버 자원을 수정'삭제 할 수 있는 보안 약점
- 사용자 입력값을 식별자로 사용하는 경우, 경로 순회 공격을 막는 필터를 사용하여 방지할 수 있다.
- 크로스사이트 스크립팅(XSS)
- 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점
- HTML 태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 < > & 등의 문자를 다른 문자로 치환함으로써 방지할 수 있다.
- 운영체제 명령어 삽입
- 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점
- 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고, 외부 입력값을 검증 없이 내부 명령어로 사용하지 않음으로써 방지할 수 있다.
- 위험한 형식 파일 업로드
- 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나, 시스템을 제어할 수 있는 보안 약점
- 업로드 되는 파일의 확장자 제한, 파일명의 암호화, 웹사이트와 파일 서버의 경로 분리, 실행 속성을 제거하는 등의 방법으로 방지할 수 있다.
- 신뢰되지 않는 URL 주소로 자동접속 연결
- 입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안 약점
- 연결되는 외부 사이트의 주소를 화이트 리스트로 관리함으로써 방지할 수 있다.
보안 기능
: 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목들이다.
보안 기능의 보안 약점
- 적절한 인증 없이 중요기능 허용
- 보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능하다.
- 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지할 수 있다.
- 부적절한 인가
- 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취할 수 있다.
- 모든 실행경로에 대해 접근제어 검사를 수행하고, 사용자에게는 반드시 필요한 접근 권한만을 부여하여 방지할 수 있다.
- 중요한 자원에 대한 잘못된 권한 설정
- 권한 설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용할 수 있다.
- 소프트웨어 관리자만 자원들을 읽고 쓸 수 있도록 설정하고, 인가되지 않은 사용자의 중요 자원에 대한 접근 여부를 검사함으로서 방지할 수 있다.
- 취약한 암호화 알고리즘 사용
- 암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보를 탈취할 수 있다.
- 안전한 암호화 알고리즘을 이용하고, 업무관련 내용이나 개인정보 등에 대해서는 IT보안인증사무국이 안정성을 확인한 암호모듈을 이용함으로써 방지할 수 있다.
- 중요정보 평문 저장 및 전송
- 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 획득할 수 있다.
- 중요한 정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고, HTTPS 또는 SSL과 같은 보안 채널을 이용함으로써 방지할 수 있다.
- 하드코드된 비밀번호
- 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취할 수 있다.
- 패스워드는 암호화하여 별도의 파일에 저장하고, 디폴트 패스워드나 디폴드 키의 사용을 피함으로써 방지할 수 있다.
시간 및 상태
: 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활하게 동작되도록 하기 위한 보안 검증 항목들이다.
TOCTOU 경쟁 조건
: 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
종료되지 않는 반복문 또는 재귀함수
: 반복문이나 재귀함수에서 종료 조건을 정의하지 않았거나 논리 구조상 종료될 수 없는 경우 발생하는 보안 약점
- 반복문이나 재귀함수가 종료되지 않을 경우 시스템 자원이 끊임없이 사용되어 서비스 또는 시스템이 자원고갈로 정지되거나 종료된다.
에러처리
: 소프트웨어 실행 중 발생할 수 있는 오류(Error)들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들이다.
- 오류 메시지를 통한 정보 노출
- 예외처리 구문에 예외의 이름이나 스택 트레이스를 출력하도록 코딩한 경우 해커는 소프트웨어의 내부구조를 쉽게 파악할 수 있다.
- 오류 발생 시 가능한 한 내부에서만 처리되도록 하거나 메시지를 출력할 경우 최소한의 정보 또는 사전에 준비된 메시지만 출력되도록 함으로써 방지할 수 있다.
* 스택 트레이스: 오류가 발생한 위치를 추적하기 위해 소프트웨어가 실행 중에 호출한 메소드의 리스트를 기록한 것
코드 오류
캡슐화
API 오용
: 소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목들이다.
DNS Lookup에 의존한 보안 결정
- 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점이다.
취약한 API 사용
- 보안 문제로 사용이 금지된 API를 사용하거나, 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점이다.
- 보안 문제로 금지된 대표적인 API에는 C언어의 문자열 함수 strcat(), strcpy(), sprintf() 등이 있다.
암호 알고리즘
: 패스워드, 주민번호, 은행계좌와 같은 중요정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 또는 방법을 의미
개인키 암호화 기법(대칭 암호 기법, 단일키 암호화 기법)
: 동일한 키로 데이터를 암호화하고 복호화한다.
- 장점: 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고, 공개키 암호 기법보다 파일의 크기가 작다.
- 단점: 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아진다.
공개키 암호화 기법(비대칭 암호 기법)
: 데이터를 암호화 할 때 사용하는 공개키는 데이터베이스 사용자에게 공개하고, 복호화 할 때의 비밀키는 관리자가 비밀리에 관리한다.
- 장점: 키의 분배가 용이하고, 관리해야 할 키의 개수가 적다.
- 단점: 암호화/복호화 속도가 느리며, 알고리즘이 복잡하고, 개인키 암호화 기법보다 파일의 크기가 크다.
* 양방향 알고리즘 종류
- SEED
-- 1994년 한국인터넷진흥원(KISA)에서 개발한 블록 암호화 알고리즘
-- 블록 크기는 128비트이며, 키 길이에 따라 128, 256으로 분류된다.
- ARIA
-- 2004년 국가정보원과 산학연협회가 개발한 블록 암호화 알고리즘
-- ARIA는 학계, 연구기관, 정부의 영문 앞 글자로 구성되었다.
-- 블록 크기는 128비트이며, 키 길이에 따라 128, 192, 256으로 분류된다.
- DES
-- 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘
-- DES를 3번 적용하여 보안을 더욱 강화한 3DES도 있다.
-- 블록 크기는 64비트이며, 키 길이는 56비트
- AES
-- 2001년 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘
-- DES의 한계를 느낀 NIST에서 공모한 후 발표했다.
-- 블록 크기는 128비트이며, 키 길이에 따라 128, 192, 256으로 분류됨
- RSA
-- 1978년 MIT의 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 암호화 알고리즘
-- 큰 숫자를 소인수분해 하기 어렵다는 것에 기반하여 만들어짐
-- 공개키와 비밀키를 사용하는데, 여기서 키란 메시지를 열고 잠그는 상수를 의미
해시(Hash)
: 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것을 의미
'IT Study > 정보처리기사' 카테고리의 다른 글
2020 정보처리기사 (10-2장. 응용 SW 기초 기술 활용) (0) | 2020.09.29 |
---|---|
2020 정보처리기사 (10-1장. 응용 SW 기초 기술 활용) (0) | 2020.09.28 |
2020 정보처리기사 (7-2장. 애플리케이션 테스트 관리) (0) | 2020.09.21 |
2020 정보처리기사 (7-1장. 애플리케이션 테스트 관리) (0) | 2020.09.19 |
2020 정보처리기사 (6장. 화면 설계) (0) | 2020.09.18 |
댓글