관리 메뉴

차근차근

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

대학교/자격증

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

SWKo 2020. 8. 15. 03:13

184. 에러처리

1. 에러처리의 개요

- 에러처리는 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들이다.

 

2. 오류 메시지를 통한 정보노출

- 오류 메시지를 통한 정보노출은 오류 발생으로 실행 환경, 사용자 정보, 디버깅 정보 등의 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점이다.

- 오류 메시지를 통해 노출되는 경로 및 디버깅 정보는 해커의 악의적인 행위를 도울 수 있다.

- 예외 처리 구문에 예외의 이름이나 스택 트레이스를 출력하도록 코딩한 경우 해커는 소프트웨어의 내부구조를 쉽게 파악할 수 있다.

- 오류 발생 시 가능한 한 내부에서만 처리되도록 하거나 메시지를 출력할 경우 최소한의 정보 또는 사전에 준비된 메시지만 출력되도록 함으로써 방지할 수 있다.

 

3. 오류 상황 대응 부재

- 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점이다.

- 예외처리를 하지 않은 오류들로 인해 소프트웨어의 실행이 중단되거나 의도를 벗어난 동작이 유도될 수 있다.

 

4. 부적절한 예외 처리

- 함수의 반환값 또는 오류들을 세분화하여 처리하지 않고 광범위하게 묶어 한 번에 처리하거나, 누락된 예외가 존재할 때 발생하는 보안 약점이다.

- 세분화된 예외처리를 수행함으로써 방지할 수 있다.

 

핵심

- 에러처리에서 발생할 수 있는 보안 약점 : 부적절한 예외처리, 오류 메시지를 통한 정보노출, 오류 상황 대응 부재


185. 코드 오류

1. 코드 오류의 개요

- 코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형(Type)변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목들이다.

- 코드 오류로 발생할 수 있는 보안 약점에는 널 포인터 역참조, 부적절한 자원 해제, 해제된 자원 사용, 초기화되지 않은 변수 사용이 있다.

 

2. 널 포인터(Null Pointer) 역참조

- 널 포인터 역참조널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점이다.

- 많은 라이브러리 함수들이 오류가 발생할 경우 널 값을 반환하는데, 이 반환값을 포인터로 참조하는 경우 발생한다.

- 대부분의 운영체제에서 널 포인터는 메모리의 첫 주소를 가리키며, 해당 주소를 참조할 경우 소프트웨어가 비정상적으로 종료될 수 있다.

- 공격자가 널 포인터 역참조를 발생하는 예외 상황을 악용할 수 있다.

- 널이 될 수 있는 포인터를 이용하기 전에 널 값을 갖고 있는지 검사함으로써 방지할 수 있다.

 

3. 부적절한 자원 해제

- 부적절한 자원 해제는 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점이다.

- 힙 메모리, 소켓 등의 유한한 시스템 자원이 계속 점유하고 있으면 자원 부족으로 인해 새로운 입력을 처리하지 못 할 수 있다.

- 프로그램 내에 자원 반환 코드가 누락되었는지 확인하고, 오류로 인해 함수가 중간에 종료되었을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지할 수 있다.

 

4. 해제된 자원 사용

- 해제된 자원 사용은 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점이다.

- 반환된 메모리를 참조하는 경우 예상하지 못한 값 또는 코드를 수행하게 되어 의도하지 않은 결과가 발생할 수 있다.

- 반환된 메모리에 접근할 수 없도록 주소를 저장하고 있는 포인터를 초기화함으로써 방지할 수 있다.

 

5. 초기화되지 않은 변수 사용

- 변수가 선언되어 메모리가 할당되면 해당 메모리에 이전에 사용하더 내용이 계속 남아있어 변수가 외부에 노출되는 경우 중요정보가 악용될 수 있다.

- 변수 선언 시 할당된 메모리를 초기화함으로써 방지할 수 있다.

 

핵심

- 부적절한 자원 해제가 발생하지 않도록 방지하는 방법은 예외처리와 관계없이 자원을 반환하는 것이다.

- 널 포인터가 기리키는 메모리에 값을 저장하면 오류가 발생한다.


186. 캡슐화

1. 캡슐화의 개요

- 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목들이다.

- 캡슐화로 인해 발생할 수 있는 보안 약점에는 잘못된 세션에 의한 정보 노출, 제거되지 않고 남은 디버그 코드, 시스템 데이터 정보 노출 등이 있다.

 

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

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

- 싱글톤 패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출될 수 있다.

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

 

3. 제거되지 않고 남은 디버그 코드

- 개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점이다.

- 소프트웨어 제어에 사용되는 중요한 정보가 디버그 코드로 인해 노출될 수 있다.

- 디버그 코드에 인증 및 식별 절차를 생략하거나 우회하는 코드가 포함되어 있는 경우 공격자가 악용할 수 있다.

- 소프트웨어를 배포하기 전에 코드 검사를 통해 남아있는 디버그 코드를 삭제함으로써 방지할 수 있다.

 

4. 시스템 데이터 정보 노출

- 시스템의 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점이다.

- 시스템 메시지를 통해 노출되는 메시지는 최소한의 정보만을 제공함으로써 방지할 수 있다.

 

5. Public 메소드로터 반환된 Public 배열

- 선언된 클래스 내에서만 접근 가능한 Private 배열을 모든 클래스에서 접근 가능한 Public 메소드에서 반환할 때 발생하는 보안 약점이다.

- Public 메소드가 Private 배열을 반환하면 배열의 주소가 외부로 공개되어 외부에서 접근할 수 있게 된다.

- Private 배열을 별도의 메소드를 통해 조작하거나, 동일한 형태의 복제본으로 반환받은 후 값을 전달하는 방식으로 방지할 수 있다.

 

6. Private 배열에 Public 데이터 할당

- Private 배열에 Public 으로 선언된 데이터 또는 메소드의 파라미터를 저장할 때 발생하는 보안 약점이다.

- Private 배열에 Public 데이터를 저장하면 Private 배열을 외부에서 접근할 수 있게 된다.

- Public 으로 선언된 데이터를 Private 배열에 저장할 때, 레퍼런스가 아닌 값을 직접 저장함으로써 방지할 수 있다.

 

핵심

- 캡슐화 : 인터페이스를 제외한 세부 내용이 은폐되도록 데이터와 함수를 객체로 묶어 코딩하는 것

- 디버그 코드를 이용하여 인증 및 식별 절차를 우회할 수 있다.

- 각 보안 약점과 해결 방법

- 'Public 메소드로부터 반환된 Private 배열'은 반환과 관련되어 있고, 'Private 메소드로부터 반환된 Public 데이터 할당'은 할당과 관련되어 있다.


187. API 오용

1. API 오용의 개요

- API 오용은 소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목들이다.

- API 오용으로 발생할 수 있는 보안 약점에는 DNS lookup에 의존한 보안 결정, 취약한 API 사용이 있다.

 

2. DNS Lookup에 의존한 보안 결정

- 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점이다.

- DNS 엔트리를 속여 동일한 도메인에 속한 서버인 것처럼 위장하거나, 사용자와 서버 간의 네트워크 트래픽을 유도하여 악성 사이트를 경유하도록 조작할 수 있다.

- 공격자는 DNS lookup을 악용하여 인증이나 접근 통제를 우회하는 수법으로 권한을 탈취한다.

- DNS 검색을 통해 도메인 이름을 비교하지 않고 IP 주소를 직접 입력하여 접근함으로써 방지할 수 있다.

 

3. 취약한 API 사용

- 보안 문제로 사용이 금지된 API를 사용하거나, 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점이다.

- 보안 문제로 금지된 대표적인 API에는 C언어의 문자열 함수 strcat(), strcpy(), sprintf() 등이 있다.

- 보안 상 안전한 API라고 하더라도 자원에 대한 직접 연결이나, 네트워크 소켓을 통한 직접 호출과 같이 보안에 위협을 줄 수 있는 인터페이스를 사용하는 경우 보안 약점이 노출된다.

- 보안 문제로 금지된 함수는 안전한 함수로 대체하고, API의 매뉴얼을 참고하여 보안이 보장되는 인터페이스를 사용함으로써 방지할 수 있다.

 

핵심

- DNS Lookup에 의존한 보안 결정 : 도메인 이름을 비교하지 않고 IP 주소를 직접 입력하여 접근함으로써 방지

- 취약한 API 사용 : 보안 문제로 금지된 함수는 안전한 함수로 대체


188. 암호 알고리즘

1. 암호 알고리즘의 개요

- 암호 알고리즘은 패스워드, 주민번호, 은행계좌와 같은 중요정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 또는 방법을 의미한다.

- 암호 알고리즘은 해시(Hash)를 사용하는 단방향 암호화 방식과, 개인키 및 공개키로 분류되는 양방향 암호화 방식이 있다.

 

2. 개인키 암호화(Private Key Encryption) 기법

- 개인키 암호화 기법동일한 키로 데이터를 암호화하고 복호화한다.

- 데이터베이스 사용자는 평문의 정보 M을 암호화 알고리즘 E와 개인키(Private Key)를 이용하여 암호화 C로 바꾸어 저장시켜 놓으면 사용자는 그 데이터베이스에 접근하기 위해 복호화 알고리즘 D와 개인키 K를 이용하여 다시 평문의 정보 M으로 바꾸어 이용하는 방법이다.

- 개인키 암호화 기법은 대칭 암호 기법 또는 단일키 암호화 기법이라고도 한다.

- 개인키 암호화 기법은 한 번에 하나의 데이터 블록을 암호화 하는 방식과, 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화 하는 스트림 암호화 방식으로 분류된다.

- 종류

       - 블록 암호화 방식 : DES, SEED, AES, ARIA

       - 스트림 암호화 방식 : LFSR, RC4

- 장점 : 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고, 공개키 암호 기법보다 파일의 크기가 작다.

- 단점 : 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아진다.

 

3. 공개키 암호화(Public Key Encryption) 기법

- 공개키 암호화 기법은 데이터를 암호화할 때 사용하는 공개키(Public Key)는 데이터베이스 사용자에게 공개하고, 복호화할 때의 비밀키(Secret Key)는 관리자가 비밀리에 관리한다.

- 데이터베이스 사용자는 평문의 정보 M을 암호화 알고리즘 E와 공개키 P를 이용하여 암호문 C로 바꾸어 저장시켜 놓고, 이를 복호화하기 위해서는 비밀키와 복호화 알고리즘에 권한이 있는 사용자만이 복호화 알고리즘 D와 비밀키 S를 이용하여 다시 평문의 정보 M으로 바꿀 수 있는 기법이다.

- 공개키 암호화 기법은 비대칭 암호 기법이라고도 하며, 대표적으로는 RSA(Rivest Shamir Adleman) 기법이 있다.

- 장점 : 키의 분배가 용이하고, 관리해야 할 키의 개수가 적다.

- 단점 : 암호화/복호화 속도가 느리며, 알고리즘이 복잡하고, 개인키 암호화 기법보다 파일의 크기가 크다.

 

4. 양방향 알고리즘 종류

- 개인키 암호화 방식과 공개키 암호화 방식에서 사용되는 주요 암호화 알고리즘에는 SEED, ARIA 등이 있다.

- SEED

       - 1999년 한국인터넷진흥원(KISA)에서 개발한 블록 암호화 알고리즘

       - 블록 크기는 128비트이며, 키 길이에 따라 128, 256으로 분류

- ARIA

       - 2004년 국가정보원과 산학연협회가 개발한 블록 암호화 알고리즘

       - 블록 크기는 128비트, 키 길이에 따라 128, 192, 256으로 분류

- DES

       - 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘

       - 블록 크기는 64비트이며, 키 길이는 56비트

- AES

       - 2001년 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘

       - DES의 한계를 느껴 발표

       - 블록 크기는 128비트, 키 길이에 따라 128, 192, 256으로 분류

- RSA

       - 1978년 MIT에 이해 제안된 공개키 암호화 알고리즘

       - 큰 숫자를 소인수분해 하기 어렵다는 것에 기반하여 만들어짐

       - 공개키와 비밀키를 사용하는데, 여기서 키란 메시지를 열고 잠그는 상수를 의미한다.

 

5. 해시(Hash)

- 해시임의의 길이의 입력 데이터나 메시지고정된 길이의 값이나 키로 변환하는 것을 의미한다.

- 해시 알고리즘을 해시 함수라고 부르며, 해시 함수로 변환된 값이나 키 해시값 또는 해시키라고 부른다.

- 데이터의 암호화, 무결성 검증을 위해 사용될 뿐만 아니라 정보보호의 다양한 분야에서 활용된다.

- 해시 함수의 종류에는 SHA 시리즈, MD5, N-NASH, SNEFRU 등이 있다.

 

핵심

- 암호화 방식(양방향(개인키(Stream 방식, Block 방식), 공개키), 단방향(Hash))

- 개인키 암호화 기법 = 대칭 암호 기법 = 단일키 암호화 기법, 대표적으로 DES, SEED, AES, ARIA, 빠르고 파일크기가 작으나 사용자 증가에 따라 관리해야 할 키의 수가 상대적으로 많아진다.

- 공개키 암호화 기법 = 비대칭 암호 기법, 대표적으로 RSA, 관리할 키의 개수가 적으나 암호화/복호화 속도가 느리고 알고리즘이 복잡하며 파일 크기가 크다.

- DES : 블록크기는 64비트, 실제 키의 길이는 56비트

- RSA : 공중(공개)키 기법으로 암호화와 복호화에 서로 다른 별도의 키를 사용

- HASH : 단방향 방식으로, 임의의 길이의 입력데이터를 고정된 길이의 값이나 키로 변환하는 것

0 Comments
댓글쓰기 폼