정보처리기사 실기 공부log - 20201003

2020. 10. 3. 09:23컴퓨터언어

728x90
반응형

 

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

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

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

멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지 가능 

 

멤버 변수 

객체와 연결된 변수로, 클래스 내에 선언되어 클래스의 모든 메소드들이 접근 가능한 변수 

 

싱글톤 

하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없는 디자인 패턴 

 

레이스컨디션 

두 개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하고 있는 상태 

 

세션 설계 시 고려사항 

시스템의 모든 페이지에서 로그아웃이 가능하도록 UI 구성 

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

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

중복 접근이 허용되지 않은 경우 접근 제어 

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

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

 

세션ID의 관리 방법 

안전한 서버에서 최소 128비트의 길이로 생성 

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

세션ID가 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계 

 

URL Rewrite 

쿠키를 사용할 수 없는 환경에서 세션ID 전달을 위해 URL에 세션ID를 포함시키는 것 

 

입력 데이터 검증 및 표현 

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

검증되지 않은 데이터가 입력되는 경우 처리, 객체에 지정된 자료형 확인, 일관된 언어셋 사용 

 

보안 약점의 종류 

SQL 삽입 

❗️ 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안약점 ✅ 입력 데이터에 SQL 예약어 및 특수문자가 입력되지 않게 필터링을 설정하여 해결 

크로스사이트스크립트(XSS) 

❗️ 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나 비정상적 기능 수행을 유발하는 보안약점  HTML태그의 사용을 제한하거나 <, >, & 등의 문자가 삽입되지 않도록 Backend에서 다른 문자로 치환 

위험한 형식 파일 업로드 

❗️ 악의적인 스크립트를 업로드함으로써 시스템에 손상을 주거나, 시스템을 제어할 수 있는 보안약점 ✅ 확장자 제한(구현되어 있는 언어 피하기), 파일명암호화, 웹사이트와 서버 경로분리, 실행속성 제거 

경로조작 및 자원삽입 

❗️ 데이터 입출력 경로를 조작하여 서버자원을 수정/삭제할 수 있는 보안약점 ✅ /, \ 등의 문자로 경로순회공격을 못하도록 필터적용 

운영체제 명령어 삽입 

❗️ 시스템 명령어의 실행을 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안약점 ✅ 웹 인터페이스를 통해 시스템 명령어가 전달되지 않도록 하고, 시스템에서는 외부입력값에 대해 검증절차 부여 

신뢰하지 않는 URL 주소로 자동접속 연결 

❗️ 사이트 주소를 입력값으로 받는 경우, 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안약점 ✅ 연결되는 외부 사이트의 주소를 "화이트 리스트"로 관리함으로써 방지 

좋아요공감 

공유하기 

통계 

글 요소 

보안 기능 

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

 

보안 기능의 보안 약점 

적절한 인증 없이 중요기능 허용 

❗ 보안검사를 우회하여 인증과정 없이 중요한 정보 또는 기능에 접근 및 변경이 가능 ✅ 중요정보나 기능을 수행하는 페이지에서는 재인증 기능을 수행하도록 하여 방지 

부적절한 인가 

❗ 접근제어 기능이 없는 실행경로를 통해 정보 또는 권한을 탈취 ✅ 모든 실행경로에 대해 접근제어 검사를 수행하고, 사용자에게는 반드시 필요한 접근권한만을 부여하여 방지 

중요한 자원에 대한 잘못된 권한설정 

❗️ 권한설정이 잘못된 자원에 접근하여 해당 자원을 임의로 사용 ✅ 소프트웨어 관리자만 자원들을 읽고 쓸 수 있도록 설정하고, 인가되지 않은 사용자의 접근 여부 검사 

취약한 암호화 알고리즘 사용 

❗ 암호화된 환경설정 파일을 해독하여 비밀번호 등의 중요정보를 탈취할 수 있다 ✅ 안전한 암호화 알고리즘을 이용하고, 업무관련 내용이나 개인정보 등은 IT보안인증사무국이 안정성을 확인한 암호모듈을 이용 

중요정보 평문 저장 및 전송 

❗️ 암호화되지 않은 평문 데이터를 탈취하여 중요정보 획득 ✅ 중요정보를 저장하거나 전송할 때는 반드시 암호화 과정을 거치도록 하고 HTTPS(HTTP+Secure) 또는 SSL(데이터를 송수신하는 두 컴퓨터 사이에서 인증/암호화/무결성을 보장하는 업계표준프로토콜) 이용하기 

하드코드(데이터를 코드 내부에 직접 입력하는 것)된 비밀번호 

❗️ 소스코드 유출 시 내부에 하드코드된 패스워드를 이용하여 관리자 권한 탈취 ✅ 패스워드는 암호화하여 별도의 파일에 저장하고, 디폴트 패스워드(사용자를 등록하기 전에 설치권한을 획득하기 위해 사용되는 초기설정암호)나 디폴트 키의 사용 피하기 

 

코드 오류 

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

 

널 포인터 

포인터에 널이 저장되어 어떠한 곳도 가리키지 못하는 상태의 요소 

 

널 포인터 역참조 

포인터에 널이 저장되어 있을 때 이를 참조할 경우 발생하는 오류 

주로 함수의 반환 값을 참조하도록 코딩한 경우 그 함수가 오류로 인해 널을 반환하면 발생한다. 

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

 

부적절한 자원 해제 

자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생하는 보안 약점 

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

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

 

해제된 자원 사용 

이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생하는 보안 약점 

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

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

 

초기화되지 않은 변수 사용 

변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생하는 보안 약점 

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

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

 

캡슐화 

데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것 

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

 

(구현 단계에서의) 잘못된 세션에 의한 정보 노출 

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

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

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

 

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

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

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

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

 

시스템 데이터 정보 노출 

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

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

 

Public 메소드로부터 Private 배열 반환 

배열의 주소가 외부에 공개되어 외부에서 접근할 수 있게 된다. 

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

 

Private 배열에 Public 데이터 할당 

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

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

 

개인키 = 대칭키 = 단일키 = 비밀키 

블록 암호화 방식 : 한번에 하나의 데이터 블록을 암호화. DES, SEED, AES, ARIA 

스트림 암호화 방식 : 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화. LFSR, RC4 

 

개인키 장점 

암호화/복호화 속도가 빠르다 

알고리즘이 단순하다 

공개키 암호 기법보다 파일의 크기가 작다 

 

개인키 단점 

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

 

공개키 = 비대칭키 

RSA 

 

공개키 장점 

키의 분배가 용이하다 

관리해야 할 키의 개수가 적다 

 

공개키 단점 

암호화/복호화 속도가 느리다 

알고리즘이 복잡하다 

개인키 암호화 기법보다 파일의 크기가 크다 

 

공개키 기반 구조 PKI Public Key Infrastructure 

공개키 암호 시스템을 안전하게 사용하고 관리하기 위한 정보 보호 표준 방식 

X.509 방식 : 인증기관에서 발생하는 인증서를 기반으로 상호 인증을 제공 

비X.509 방식 : 국가별, 지역별로 맞게 보완 및 개발 

 

SEED : 1999년 한국인터넷진흥원. 블록 128, 키 128/256. 

ARIA : 2004년 Academy + Research Institute + Agency. 블록 128, 키 128/192/256. 

DES : 1975년 NBS. 블록 64, 키 56. 

AES : 2001년 NIST. 블록 128, 키 128/192/256. 

RSA : 1978년 MIT의 Rivest Shamir Adelman, 큰 숫자를 소인수분해하기 어렵다는 것에 기반. 

 

해시 

임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것 

해시 알고리즘 = 해시 함수 

해시 함수로 변환된 값/키 = 해시값 = 해시키 

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

SHA, MD5, N-NASH, SNEFRU 

 

Secure Coding 

소프트웨어 구현단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것

728x90
반응형