정리 내용은 [수제비 2020 정보처리기사 실기]책을 기반으로 작성하였습니다.
2020 수제비 정보처리기사 실기(1권+2권 합본세트)
NCS 반영! 출제기준으로 전면개편한 교재이다. NCS 기반 반영 문제(예상문제 340제, 단원종합문제 360제, 모의고사 100제, 2020년기출문제)를 수록하였다. 수제비는 합격만을 위한 다양한 학습 콘텐츠
1. 시큐어 코딩 가이드
개념
설계 및 구현단계에서 해킹 등 공격을 유발할 가능성 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어 개발
적용대상 | 항목 | 내용 |
입력데이터 검증 및 표현 |
프로그램 입력 값에 대한 검증 누락, 부적절한 검증, 잘못된 형식 지정 | 사용자, 프로그램 입력 데이터에 대한 유효성 검증 체계를 수립하고, 실패 시 처리 기능 설계 및 구현 |
보안 기능 | 보안 기능(인증, 접근제어, 기밀성, 암호화, 권한 관리) 부적절한 구현 | 인증, 접근 통제, 권한 관리, 비밀번호 등의 정책이 적절하게 반영되도록 설계 및 구현 |
시간 및 상태 | 동시 수행 지원하는 병렬 시스템, 하나 이상 프로세스가 동작하는 환경에서 시간 및 상태의 부적절한 관리 | 공유 자원의 접근 직렬화, 병렬 실행 기능 프래임워크 사용, 블록문 내에서만 재귀 함수 호출 |
예외 처리 | 에러 미처리, 불충분한 처리 등으로 에러 메시지에 중요한 정보가 포함 | 에러 상황을 처리하지 않거나, 불충분하게 처리되어 중요 정보 유출 등 보안 약점 발생하지 않도록 시스템 설계 및 구현 |
코드 오류 | 개발자가 범할 수 있는 코드 오류로 인해 유발 | 코딩 규칙 도출 후 검증 가능한 스크립트 구성과 경고 순위의 최상향 조정 후 경고 메시지 코드 제거 |
캡슐화 | 기능성이 불충붆나 캡슐화로 인해 인가되지 않은 사용자에게 데이터 누출 | 디버거 코드 제거 필수 정보 외의 클래스 내 프라이빗 접근자 지정 |
API 오용 | 의도된 사용에 반하는 방법으로 API를 사용하거나 보안이 취약한 API 사용 | 개별 언어별 취약 API 확보 및 취약 API 검출 프로그램 사용 |
입력데이터 검증 표현
프로그램 입력 값에 대한 검증 누락, 부적절한 검증, 데이터의 잘못된 형식 지정 등으로 인해 발생하는 보안약점
(1) SQL 삽입: 사용자 입력 값 등 외부 입력 값이 SQL 쿼리에 삽입되어 취약점 공격. PreaparedStatement 객체 등을 이용, DB에 컴파일된 쿼리문(상수) 전달. 외부의 입력이 쿼리문의 구조를 바꾸는 것을 방지
(2) 크로스 사이트 스크립트(XSS) 공격: 악의적인 스크립트를 포함해 사용자 측에서 실행되게 유도하는 기법. 외부 입출력값에 스크립트가 삽입되지 못하도록 & < > “ ‘ / ( )등에 대해 문자열 치환 함수 구현
(3) 경로 조작 및 자원 삽입: 외부 입력 값의 사전 검증이 없거나 잘못 처리 되었을 경우 제공되는 시스템 자원에 접근 경로 등의 정보로 이용 될 때 발생. 경로 순회 공격 위험에 있는 문자(“ / \ …)를 제거하는 필터 사용
(4) 운영체제 명령어 삽입: 운영체제 명렁어 파라미터 입력값이 적절한 사전 검증을 거치지 않고 사용될 때 공격자가 운영체제 명령어를 조작웹 인터페이스를 통해 내부로 시스템 명령어를 전달하지 않도록 프로그램 구성
보안기능
보안 기능(인증, 권한 관리, 암호화, 중요정보 처리)를 부적절하게 구현 시 발생할 수 있는 보안 약점
(1) 인증관련 보안 약점: 적절한 인증 없는 중요기능 허용 / 반복된 인증시도 제한 기능 부재 / 취약 패스워드 허용
(2) 권한 관리 보안 약점: 중요 자원에 대한 잘못된 권한 설정 / 부적절한 인가
(3) 암호화 보안 약점: 취약 암호화 알고리즘 / 충분하지 않은 키 길이 / 하드코딩된 비밀번호 / 부적절한 난수 사용 / 솔트 없는 일방향 해시함수 사용
(4) 중요정보 처리 시 보안 약점: 중요정보 평문 저장 / 중요정보 평문 전송
시간 및 상태
동시 수행을 지원하는 병렬 시스템이나 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 취약점
(1) 경쟁조건: 동일한 자원 대한 검사시점과 사용시점 상이동기화 오류, 교착상태를 유발하는 보안 / 대응방안: 동기화 구문 mutex 사용. 한 번에 하나의 프로세스만 접근 하도록 함
(2) 종료되지 않은 반복문 또는 재귀함수: 종료 조건이 없어 무한 루프에 빠져 자원 고갈을 유발/ 대응방안: 재귀함수는 종료조건 정의 & 반복문은 흐름 검증 수행
* 경쟁조건: 메모리가 공유되는 객체에 두 개 이상 스레드가 동시에 값을 변경하려고 할 때에 발생되는 성능저하* Mutex: 상호배제. 임게영역(프로그램 상 동시에 실행될 경우 문제 일으키는 부분)을 가진 스레드들의 실행시간이 서로 겹치지 않게 단독으로 실행되게 하는 기술
에러처리
에러를 처리하지 않거나 불충분하게 처리하여 에러정보에 중요정보가 포함될 때 발생할 수 있는 보안 약점
(1) 오류메시지 정보 노출: 응용프로그램의 민감정보가 오류메시지를 통해 노출되는 보안 약점 / 대응방안: 오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함
(2) 오류 메시지 대응 부재: 오류 발생 부분에 예외처리 미구현 / 대응방안: if, switch 사용 / try-catch 문
(3) 부적절한 예외처리: 프로그램 수행 중 발생한 예외 조건을 적절하게 검사하지 않아 문제야기 / 대응방안: 함수 결과값의 적정성 검증 구체적인 예외처리 수행
코드오류
타입변환오류, 메모리 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안 약점
(1) 널 포인터역참조: 널 값을 고려하지 않은 코드에서 발생. 의도적으로 널 값을 유발해 예외상황을 확인 후 추후 공격에 활용 / 대응방안: 값을 참조하기 전에 널 값인지를 검사
(2) 부적절한 자원 해제: 자원 고갈로 시스템 오류 유발되는 현상. 소켓, 힙 메모리 등 자원을 할당받아 사용 후 미반환 시 발생 / 대응방안: 자원 획득 사용 후 반드시 자원 해제
(3) 해제된 자원 해제: C언어 해제한 메모리를 참조하여 의도치 않은 코드를 실행하느 보안약점 / 대응방안: 메모리 할당 해제 후 포인터에 널 값 저장
(4) 초기화되지 않은 변수 사용: C언어 함수 내 지역변수 초기화하지 않고 사용할 시 발생하는 보안 약점 / 대응방안: 모든 변수를 사용하기 전 초깃값 할당
캡슐화
중요 데이터 또는 기능성을 불충분하게 캡슐화하거나 잘못 사용해 발생하는 보안 약점으로 정보노출 / 권한문제 등 발생 야기
(1) 잘못된 세션에 의한 정보 노출: 멀티 스레드 환경에서 서로 다른 세션 간 데이터가 공유될 수 있는 보안 약점 / 대응방안: 싱글톤 패턴 사용 시 변수 적용 범위 주의
(2) 제거되지 않은 디버그 코드: 의도하지 않은 민감 정보가 노출될 수 있는 보안 약점. 개발완료 후 배포 단계에서 디버그 코드가 남아있는 경우 발생 / 대응방안: 소프트웨어 배포전 디버그 코드 확인 및 삭제
(3) 시스템 정보 노출: 시스템 내부 데이터가 노출되어 공격의 실마리가 되는 보안 약점 / 대응방안: 예외 상황 발생 시 시스템 정보의 화면 노출이 없도록 개발
* 세션: 클라이언트와 서버의 논리적인 연결
* 싱글톤 패턴: 전역변수를 사용하지 않고 객체를 하나만 생성되도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
API 오용
(1) DNS 의존한 보안결정: 공격자가 DNS 정보를 변조하여 보안결정을 우회 가능한 보안 약점 / 대응방안: DNS로 확인된 정보 대신 IP 주소 사용
(2) 취약한 API 사용: 금지되거나 안전하지 않은 함수를 사용하는 보안약점 / 대응방안: 안전한 함수 사용
2. SW 개발 보안 테스트
개념
소프트웨어 보안 요구사항이 반영되어 있음을 보증하고, 취약점을 발견하고 개선하여 안전한 소프트웨어를 개발하기 위한 활동
정적 분석(화이트박스 테스트)
SW를 실행하지 않고 보안 약점 분석 / 개발단계에서 주로 사용취약점 초기 발견으로 수정비용 절감
컴포넌트 간 발생할 수 있는 통합된 취약점 발견에 제한적설계, 구조 관점의 취약점은 식별 불가
동적 분석(블랙박스 테스트)
SW 실행환경에서 보안 약점 분석 / 시험단계에서 주로 사용
소스 코드 필요 없음 / 정확도와 커버리지 향상
구조 관점의 보안 약점식별 불가
'Study > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 10. 프로그래밍 언어 활용-Chapter 2. 언어 특성 활용하기 (0) | 2022.01.24 |
---|---|
[정보처리기사 실기] 10. 프로그래밍 언어 활용-Chapter 1. 기본 문법 활용하기 (0) | 2022.01.23 |
[정보처리기사 실기] 9. 소프트웨어 개발 보안 구축-Chapter 1. 소프트웨어 개발 보안 설계 (2) | 2022.01.21 |
[정보처리기사 실기] 8. SQL 응용-Chapter 2. 응용 SQL 작성하기 (0) | 2022.01.20 |
[정보처리기사 실기] 8. SQL 응용-Chapter 1. 절차형 SQL 작성하기 (0) | 2022.01.18 |