인생이 쓰다!인생쓰

공부/정보처리기사

정보처리기사 실기 9일차 (소프트웨어 개발 보안 구축)

Johnal 2021. 4. 6. 10:46
반응형

 

*정리는 2020시나공 문제집을 참고했습니다.*

 

보안요소 

 

소프트웨어 개발에 있어 충족시켜야할 요소 및 요건을 의미합니다.

주요 보안 요소에는 기밀성, 무결성, 가용성이 있으며, 그 외에도 인증 , 부인 방지 등이 있다.

 

기밀성 - 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용됩니다.

무결성 - 시스템 내의 정보는 오직 인가된 사용자만 수정 할 수 있습니다.

가용성 - 인가받은 사용자는 언제라도 사용할 수 있다.

인증 - 시스템 내의 정보와 자원을 사용하려는 사용자가 합벅적인 사용자인지를 확인하는 모든 행위를 말합니다.

부인 방지 - 데이터를 송ㆍ수신한 자가 송수신사실을 부인할 수 없도록 송수신 증거를 제공합니다.

 

보안 점검

세션통제

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

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

 

 

세션통제의 보안 약점

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

 

잘못된 세션에 의한 정보 노출 - 다중 스레드 환경에서 멤버변수에 정보를 저장할 때 발생하는 보안 약점이다. 멤버변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지할 수 있습니다.

 

 

입력 데이터 검증 및 표현

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

 

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

SQL 삽입 - 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점입니다. 

※해결방법 : 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지

 

경로 조작 및 자원 삽입 - 데이터 입출력 경로를 조작하여 서버 자원을 수정삭제 할수있는 보안약점입니다.

※해결방법 : 사용자 입력값을 식별자로 사용하는 경우, 경로 순회 공격을 막는 필터를 사용하여 방지 할수 있습니다.

 

크로스사이트 스크립팅(XSS) - 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발함

※해결방법 : HTML태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 문자를 다른문자로 치환함으로써 방지할 수 있습니다.

 

운영체제 명령어 삽입  - 외부 입력값을 통해 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점

※해결방법 : 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고, 외부 입력값을 검증 없이 내부 명령어로 사용하지 않음으로써 방지할 수 있습니다.

 

위험한 형식 파일 업로드 - 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나,시스템을 제어할 수 있음

※해결방법 : 업로드 되는 파일의 확장자 제한, 파일명의 암호화, 웹사이트와 파일 서버의 경로 분리, 실행 속성을 제거하는 등의 방법으로 방지할 수 있습니다.

 

신뢰되지 않는 URL주소로 자동접속 연결 - 입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 약점

※해결방법 : 연결되는 외부 사이트의 주소를 화이트 리스트로 관리함으로써 방지할 수있습니다.

 

 

보안 기능

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

 

보안 기능에 대한 점검을 수행하지 않을 경우 발생할 수 있는 보안 약점

적절한 인증 없이 중요기능 허용 - 보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능합니다.

※해결방법 : 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 방지할 수 있습니다.

 

부적절한 인가 - 접근제어 기능이 없는 실행결로를 통해 정보 또는 접근을 탈취할 수 있습니다.

※해결방법 : 모든 실행경로에 대해 접근제어 검사를 수행하고, 사용자에게는 반드시 필요한 접근권한만을 부여하여 방지할 수 있습니다.

 

중요한 자원에 대한 잘못된 권한 설정 - 권한 설정이 잘못된 자원에 접근하여 해당자원을 임의로 사용할 수 있습니다.

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

 

취약한 암호화 알고리즘 사용 -암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보를 탈취할 수 있습니다.

※해결방법 : 안전한 암호화 알고리즘을 이용하고, 업무관련 내용이나 개인정보 등에 대해서는 IT보안인증사무국이 안정성을 확인한 암호모듈을 이용함으로써 방지할 수 있습니다. 

 

중요 정보 평문 저장 및 전송 - 암호화되지 않은 평문 데이터를 탈취하여 중요한 정보를 획득할 수 있습니다.

※해결방법 : 중요한 정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고, HTTPS 또는 SSL과 같은 보안 채널을 이용함으로써 방지할 수 있습니다.

 

하드코드된 비밀번호 - 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한을 탈취할 수 있습니다.

※해결방법 : 패스워드는 암호화하여 별도의 파일에 저장하고, 디폴트 패스워드나 디폴트 키의 사용을 피함으로써 방지할 수 있습니다. 

 

 

시간 및 상태

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

 

시간 및 상태를 점검하지 않은 코딩이 유발하는 보안 약점 

TOCTOU 경쟁 조건 - 검사 시점과 사용 시점을 고려하지 않고 코딩하는 경우 발생하는 보안 약점입니다.

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

 

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

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

 

에러처리

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

 

에러처리의 미비로 인한 코딩이 유발하는 보안 약점

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

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

 

오류 상황 대응 부재 - 소프트웨어 개발 중 예외처리를 하지 않았거나 미비로 인해 발생하는 보안 약점입니다.

※해결방법 : 오류가 발생할 수 있는 부분에 예외처리 구문을 작성하고, 제어문을 활용하여 오류가 악용 되지 않도록 코딩함으로 방지 가능

 

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

※해결방법 : 모든 함수의 반환값이 의도대로 출력되는지 확인하고, 세분화된 예외처리를 수행함으로써 방지할 수 있습니다.

 

코드 오류

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

 

코드 오류로 발생할 수 있는 보안 약점

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

※해결방법 : 널(Null)이 될 수 있는 포인터를 이용하기 전에 널 값을 갖고 있는지 검사함으로써 방지 할수 있습니다.

 

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

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

 

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

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

 

초기화되지 않은 변수 사용 - 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점입니다.

※해결방법 : 변수 선언 시 할당된 메모리를 초기화함으로써 방지할 수 있습니다.

 

 

캡슐화

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

 

캡슐화로 인해 발생할 수 있는 보안 약점

잘못된 세션에 의한 정보 노출 - 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점입니다.

 

제거되지 않고 남은 디버그 코드 - 개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생하는 보안 약점입니다.

 

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

 

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

 

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

 

API 오용

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

 

API 오용으로 발생할 수 있는 보안 약점

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

 

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

 

 

 

암호 알고리즘

 

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

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

 

개인키 암호화 방법 - 동일한 키로 데이터를 암호화하고 복호화한다. 대칭암호기법 또는 단일키 암호화 기법이라고도 합니다.

 

공개키 암호화 기법 - 데이터를 암호화할 때 사용하는 공개키는 데이터베이스 사용자에게 공개하고, 복호화할 때의 비밀키는 관리자가 비밀리에 관리한다.  비대칭 암호 기법이라고도 합니다.

 

해시( Hash ) - 임의의 길의 입력 데이터나 메시지를 고정된 길이의 값이나 키를 변환하는 것을 의미합니다.

 

*해쉬 함수의 종류 * 

SHA 시리즈 - 1993년에 미국 NSA가 제작하고 미국 국립표준기술연구소에서 표준으로 채택한 암호화 알고리즘

MD5 - 1991년 R.rivest가 MD4를 개선한 암호화 알고리즘으로 각각의 512비트 짜리 입력 메시지 블록에 대해 차례로 동작함

SNEFRU - 1990년 R.C Merkle에 의해 제안된 128, 254 비트 암호화 알고리즘

 

 

 

개인키 암호화방식과 공개키 암호와 방식에서 사용되는 주요암호화 알고리즘

 

SEED 1999년 KISA(한국 인터넷 진흥원) 에서 개발한 블록 암호화 알고리즘
블록 크기는 128비트이며, 키 길이에 따라 128 , 256으로 분류
ARIA 2004년 국가정보원과 산학연협회가 개발한 블록 암호화 알고리즘
블록 크기는 128비트이며, 키 길이에 따라 128 , 192, 256으로 분류 
DES 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘
블록 크기는 64비트이며, 키 길이는 56비트
AES 2001년 미국 표준 기술연구소(NIST)에서 발표한 개인키 암호화 알고리즘
블록 크기는 128비트이며, 키 길이에 따라 128, 192, 256으로 분류
RSA 1978년 MIT의 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 알고리즘
소인수 분해 문제를 이용한 공개키 암호화 기법에 널리 사용되는 암호화 알고리즘

 

728x90
반응형