보안점검
코드 오류
-소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목들이다.
-코드 오류로 발생할 수 있는 보안 약점
널 포인터 (Null Pointer)역참조 |
-널 포인터가 가리키는 메모리에 어떠한 값을 저장할 때 발생하는 보안 약점 널 포인터(Null Pointer) : 널(Null)은 값이 없음을 의미하며 포인터(Pointer)는 메모리의 위치를 가리키는 요소이다. 널 포인터(Null Pointer)는 포인터에 널(Null)이 저장돼 어떠한 곳도 가리키지 못하는 상태의 요소를 말한다. -널(Null)이 될 수 있는 포인터를 이용하기 전에 널 값을 갖고 있는지 검사함으로써 방지 |
부적절한 자원 해제 | -자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점 -프로그램 내에 자원 반환 코드가 누락됐는지 확인하고 오류로 인해 함수가 중간에 종료됐을 때 예외처리에 관계없이 자원이 반환되도록 코딩함으로써 방지 가능 |
해제된 자원 사용 | -이미 사용이 종료돼 반환된 메모리를 참조하는 경우 발생하는 보안 약점 -반환된 메모리에 접근할 수 없도록 주소를 저장하고 있는 포인터를 초기화함으로써 방지 |
초기화되지 않은 변수 사용 |
-변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점 -변수 선언 시 할당된 메모리를 초기화함으로써 방지 가능 |
캡슐화
-정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목
-캡슐화로 인해 발생할 수 있는 보안 약점
잘못된 세션에 의한 정보 노출 |
-다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점 -멤버 변수보다 지역 변수를 활용해 변수의 범위를 제한함으로써 방지 가능 |
제거되지 않고 남은 디버그 코드 |
-개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점 -소프트웨어를 배포하기 전에 코드 검사를 통해 남아있는 디버그 코드를 삭제함으로써 방지 |
시스템 데이터 정보 노출 |
-시스템 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점 -시스템 메시지를 통해 노출되는 메시지는 최소한의 정보만을 제공함으로써 방지 |
Public 메소드로부터 반환된 Private 배열 | -선언된 클래스 내에서 접근이 가능한 Private 배열을 모든 클래스에서 접근이 가능한 Public 메소드에서 반환할 때 발생하는 보안 약점 -Private 배열을 별도의 메소드를 통해 조작하거나 동일한 형태의 복제본으로 반환 받은 후 값을 전달하는 방식으로 방지 가능 |
Private 배열에 Public 데이터 할당 |
-Private 배열에서 Public으로 선언된 데이터 또는 메소드의 파라미터를 저장할 때 발생하는 보안 약점 -Public으로 선언된 데이터 Private 배열에서 저장할 때 레퍼런스가 아닌 값을 직접 저장함으로써 방지 가능 |
API 오용
-소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목들
-API 오용으로 발생할 수 있는 보안 약점
DNS Lookup에 의존한 보안 결정 |
-도메인명에 의존해 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생하는 보안 약점 -DNS 검색을 통해 도메인 이름을 비교하지 않고 IP주소를 직접 입력해 접근함으로써 방지 가능 |
취약한 API | -보안 문제로 사용이 금지된 API를 사용하거나 잘못된 방식으로 API를 사용했을 때 발생하는 보안 약점 -보안 문제로 금지된 대표적인 API에는 C언어의 문자열 함수 strcat(), strcpy(), sprintf()등이 있다. -보안 문제로 금지된 함수는 안전한 함수로 대체하고 API의 메뉴얼을 참고해 보안이 보장되는 인터페이스를 사용함으로써 방지 가능 |
암호 알고리즘
-패스워드, 주민번호, 은행계좌와 같은 중요정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 또는 방법
-암호 알고리즘은 해시(Hash)를 사용하는 단방향 암호화 방식과, 개인키 및 공개키로 분류되는 양방향 암호화 방식이 있다.
개인키 암호화 (Private Key Encryption) 기법 |
-동일한 키로 데이터를 암호화하고 복호화한다. -개인키 암호화 기법은 대칭 암호 기법 또는 단일키 암호화 기법이라고도 한다. |
공개키 암호화 (Public Key Encryption) 기법 |
-데이터를 암호화할 때 사용하는 공개키는 데이터베이스 사용자에게 공개하고 복호화할 때의 비밀키는 관리자가 비밀리에 관리한다. -공개키 암호화 기법은 비대칭 암호 기법이라고도 한다. |
해시(Hash) | -임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환시키는 것을 의미 -해시 함수의 종류 : SHA 시리즈, MD5, SNEFRU 등 SHA 시리즈 : 1993년 미국 NSA가 제작하고 미국 국립표준기술연구소(NST)에서 표준으로 채택한 암호화 알고리즘으로 가장 많이 사용 MD5 : 1991년 R.riverst가 MD4를 개선한 암호화 알고리즘으로 각각의 512비트 짜리 입력 메시지 블록에 대해 차례로 동작함 SNEFRU : 1990년 R.C. MERKLE에 의해 제안된 128.254비트 암호화 알고리즘 |
개인키 암호화 방식과 공개키 암호화 방식에서 사용되는 주요 암호화 알고리즘
SEED | -1999년 한국인터넷진흥원(KISA)에서 개발한 블록 암호화 알고리즘 -블록 크기는 128비트이며 키 길이에 따라 128, 256으로 구분 |
ARIA (Academy, Research Institude, Agency) |
-2004년 국가정보원과 산학연합회가 개발한 블록 암호화 알고리즘 -블록 크기는 128비트이며, 키 길이에 따라 128, 192, 256으로 분류 |
DES (Data Encryption Standard) |
-1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘 -블록 크기는 64비트이며 키 길이는 56비트 |
AES (Advanced Encryption Standard) |
-2001년 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘 -블록 크기는 128비트이며 키 길이에 따라 128, 192, 256으로 분류 |
RSA (Rivest Shamir Adleman) |
-1978년 MIT의 라이베스트(Rivest), 샤미르(Shamir), 애들먼(Adelman)에 의해 제안된 공개키 암호화 알고리즘 -소인수 분해 문제 이용 공개키 암호화 기법에 널리 사용되는 암호화 알고리즘 |
'정보처리기사 실기' 카테고리의 다른 글
Kernul/Shell (0) | 2021.06.01 |
---|---|
운영체제(OS; Operating System) (1) | 2021.06.01 |
보안점검-1 (0) | 2021.05.26 |
보안요소 (0) | 2021.05.26 |
Secure SDLC (0) | 2021.05.26 |