본문 바로가기

2020 정보처리기사/2020 실기 정리 (수제비 2020 정보처리기사 실기 Vol.2 기준)

2020 정보처리기사 - 소프트웨어 개발 보안 구축

1.소프트웨어 개발 보안 설계

 

ㆍSW 개발 보안의 개념

소스 코드 등에 존재하는 보안 취약점을 제거하고, 보안을 고려한 기능을 설계, 구현하여 소프트웨어 개발 과정에서 지켜야 할 일련의 보안 활동.

 

ㆍSW 개발 보안의 3대 요소

기밀성(Confidentiality) : 인가되지 않은 개인 혹은 시스템 접근에 따른 정보 공개 및 노출을 차단하는 특성

가용성(Integrity) : 권한을 가진 사용자나 애플리케이션이 원하는 서비스를 지속 사용할 수 있도록 보장하는 특성

무결성(Availability) : 정당한 방법에 의하지 않고선 데이터가 변경될 수 없으며, 데이터의 정확성,완정성과 훼손되지 않음을 보장하는 특성.

 

ㆍSW 개발 보안 용어

자산(Assets) : 조직의 데이터, 조직의 소유자가 가치를 부여한 대상

위협(Threat) : 조직,기업의 자산에 악영향을 끼칠 수 있는 사건,행위.

취약점(Vulnerability) : 위협이 발생하기 위한 사전 조건에 따른 상황.

위험(Risk) : 위협이 취약점을 이용하여 조직의 자산 손실 피해를 가져올 가능성.


 

ㆍDoS 공격

시스템을 악의적으로 공격해 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게함.

종류 : 지역 시스템 공격, 원격 네트워크 공격

 

ㆍDDoS 공격

DoS의 다른 형태, 여러대의 공격자(에이전트)를 분산 배치하여 동시에 동작하게 하여 공격.

 

ㆍDDoS 구성요소

ㆍ핸들러 : 마스터 시스템의 역할을 수행하는 프로그램

에이전트 : 공격 대상에게 직접 공격을 가하는 시스템

마스터 : 공격자에게서 직접 명령을 받는 시스템. 여러대의 에이전트 관리

공격자 : 공격을 주도하는 해커의 컴퓨터

데몬 프로그램 : 에이전트 시스템의 역할을 수행하는 프로그램

 

ㆍDDoS 대응방안

차단 정책 업데이트, 좀비 PC IP확보, 보안 솔루션 운영, 홈페이지 보안관리, 시스템 패치

 

*DoS는 한사람이 직접 공격 /  DDoS는 공격하도록 지시하며, 감염 호스트를 통해 공격. 

 

 

ㆍ자원 고갈 공격 기법

SYN 플러딩 : TCP 프로토콜의 구조적인 문제를 이용한 공격. 공격자는 ACK를 발송하지 않음.

서버의 동시 가용 사용자 수를 SYN 패킷만 보내 점유하여 다른 사용자가 서버를 사용 불가능하게 함.

 

UDP 플러딩 : 대량의 UDP패킷을 만들어 임의의 포트 번호로 전송하여 응답메시지(ICMP)를 생성하게 하여 자원을 고갈시킨다. ICMP 패킷은 변조되어 대기함

 

ㆍ스머프 : 출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체에게 ICMP ECHO 패킷을 직접 브로드캐스팅하여 마비시킴. 바운스 사이트라고 불리는 제 3의 사이트를 이용하여 공격.

 

ㆍPoD(Ping of Death) : 큰 사이즈의 패킷을 의도적으로 목표시스템으로 발생시켜 시스템이 서비스 할 수 없는 상태로 만든다.

 

ㆍ애플리케이션 공격기법

ㆍhttp get 플러딩 (Flooding) : http 캐시 옵션을 조작하여 캐싱서버가 아닌 웹서버가 직접 처리하도록 유도, 웹서버 자원을 소진시키는 서비스 거부 공격.

 

ㆍSlowloris : http get메소드를 사용하여 개행 문자열과 다른 문자열을 전송하여 웹서버와 연결상태를 장시간 지속시키고 연결 자원을 모두 소진시키는 서비스 거부 공격.

 

ㆍRUDY : 요청 헤더의 Contetn_length를 비정상적으로 크게 설정하여 메시지 바디 부분을 매우 소량으로 보내 계속 연결 상태를 유지시키는 공격.

 

ㆍ네트워크 서비스 공격

sniffer, network scanner : 네트워크 하드웨어 및 소프트웨어 구성의 취약점 파악을 위해 공격자가 사용하는 공격도구.

Password Cracking : 사전크래킹과 무차별 크래킹 방법을 사용해 네트워크 패스워드를 탐색. (공격도구 : John the Ripper) 

ip spoofing : 서버에 대한 인증되지 않은 액세스 권한을 입수하는데 사용하는 기법. 호스트의 ip address 위조.

트로이 목마 : 겉보기에는 정상적인 프로그램처럼 보이지만 실행하면 악성 코드를 실행

 

ㆍ취약점 공격

Land attack : 출발지IP와 목적지IP를 같은 패킷 주소로 보냄으로써 수신자가 자신에게 응답을 보내게 하여 시스템의 가용성을 침해.

Bonk/ Boink : 프로토콜의 오류 제어를 이용한 공격기법으로 시스템의 패킷 재전송과 재조립이 과부하를 유발한다.

Tear Drop : 잘못된 Fragment Offset 정보로 수신시스템이 문제를 발생하도록 만드는 Dos공격


ㆍ암호 알고리즘

데이터의 무결성 및 기밀성 확보를 위해 정보를 쉽게 해독할 수 없는 형태로 변환하는 기법.

 

ㆍ암호 알고리즘 방식

1. 대칭 키 암호방식 : 암호화, 복호화에 같은 암호키를 쓰는 알고리즘

블록 암호방식 :  긴 평문을 암호하 하기 위해 고정 길이의 블록을 암호화. (DES,AES,SEED)

스트림암호 방식 : 긴 주기의 난수열을 발생시켜 평문과 더불어 암호문을 생성. (RC4)

 

2. 비대칭 키 암호 방식 : 공개키를 이용해 암호화, 개인키를 이용해 복호화. (디피-헬만, RSA)

 

3. 해시 방식 : 단방향 알고리즘으로 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수. 연산 빠름. 복호화 불가(MD5, SHA)

 

ㆍ법률적 검토 : 정보보호 관련 법령을 인지하고 관련 보안 위협요소를 검토한다.

 

ㆍ개인정보보호 관련 법령

1. 개인정보 보호법 : 개인정보 처리 과정상 정보 주체와 개인정보처리자의 권리, 의무.

2. 정보통신망법 : 정보통신망을 통하여 이용되는 개인정보의 보호에.

3. 신용정보법 : 개인 신용정보의 취급 단계별 보호조치 및 의무사항.

 

ㆍ정보자산의 주요 용어

자산 (Asset) : 조직에서 보유한 가치 있는 모든 것. (정보, 소프트웨어, 물리적 자산, 인력, 서비스)

사용자 (User) : 정보처리 시스템을 활용해 자산을 사용하는 사람과 기관.

소유자 (Owner) : 자산의 소유 권한 최종 책임자. 자산 관리 권한 보유.

관리자 (Admin) : 소유자로부터 관리위임을 받은 자. 자산의 운영 책임을 진다.

 

ㆍ정보자산의 분류기준

소프트웨어 : 상용, 자체 개발된 소프트웨어 자산

하드웨어 : 대외 서비스를 위해 사용되거나 개인이 사용하는 자산

데이터 : 전자적 형태로 저장되는 데이터

문서 : 종이로 된 정보자산 업무 목적 문서, 기록물

시설 : 시스템 설치, 운영 장소 등 물리적 공간, 시설

지원설비 : 정보시스템 운영을 지원하기 위한 설비

인력 : 시스템 운영 업무 수행 중인 인력

 

ㆍSW 개발 보안 방법론

MS-SDL : MS는 안전한 SW를 개발하기 위해 자체 수립한 SDL(Secure Development Lifecycle)적용

Seven Touchpoints : SW보안 모범사례를 SW개발 라이프사이클에 통합. 위험요소에 대해 추적, 모니터링.

CLASP : Comprehensive, Lightweight Application Security Process의 약자. SDLC 초기 단계에 보안 강화를 목적으로 하는 정형화된 프로세스. 이미 운영중인 시스템에 적용하기가 용이하다.


2. 소프트웨어 개발 보안 구현

 

ㆍ시큐어 코딩 가이드

설계 및 구현 단계에서 해킹 등의 공격 가능성이 있는 잠재적인 보안 취약점을 사전에 제거하고, 외부 공격으로부터 안전한 SW를 개발하는 기법. SW 보안 약점을 방지하기 위함.

보안약점 내용 대응방안
입력데이터 검증 및 표현 프로그램 입력값에 대한 검증 누락, 부적절한 검증. 유효성 검증체계 수립
보안 기능 보안기능의 부적절한 구현 인증, 접근통제, 권한관리, 비밀번호 등 적절하게 반영되도록 설계 및 구현
시간 및 상태 병렬시스템, 하나이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절한 관리 공유 자원의 접근 직렬화, 병렬 실행 가능 프레임 워크 사용.
에러 처리 에러 미처리, 불충분한 처리등으로 에러메시지에 중요정보가 포함 보안약점이 발생하지 않도록 시스템 설계 및 구현
코드 오류 개발자가 범할 수 있는 코딩 오류로 인해 유발 검증 가능한 스크립트 구성과 경고 메시지 코드 제거
캡슐화 기능성이 불충분한 캡슐화로 인해 인가되지 않은 사용자에게 데이터 누출 디버그 코드 제거, 클래스 내 PRIVATE 접근자 지정.
API 오용 의도하지 않은 방법으로 API 사용, 보안에 취약한 API사용 취약 API 검출 프로그램 사용

 

ㆍ입력데이터 검증 및 표현 대응

주요 공격 보안 약점 대응 방안
SQL 삽입 입력값이 SQL쿼리에 삽입되어 공격 PreparedStatement 객체 등을 이용, DB에 컴파일된 쿼리문을 전달
크로스 사이트 스크립트(XSS) 검증되지 않은 값에 의해 브라우저에 악의적인 코드가 실행 입출력값에 문자열 치환 함수를 사용
경로 조작 및 자원 삽입 외부 입력값의 검증이 없거나 잘못 처리될 경우. 경로 순회 공격 위험문자 (" / \)를 제거하는 필터 사용
운영체제 명령어 삽입 운영체제 명령어 값이 검증을 거치지 않고 사용될 때 공격 웹인터페이스를 통해 내부로 시스템 명령어를 전달하지 않도록 프로그램 구성

 

ㆍ시간 및 상태 대응

주요 유형 설명  대응방안
경쟁 조건 동일 자원에 대한 검사시점, 사용시점이 상이.
동기화 오류, 교착상태 유발
동기화구문, MUTEX사용, 한번에 하나의 프로세스만 접근 허용.
종료되지 않은 반복문 또는 재귀함수 종료 조건이 없는 재귀함수, 종료되지 않는 반복문사용. 
무한루프
재귀함수 : 종료조건 정의 
반복문 : 흐름 검증

 

ㆍ에러 처리 대응

주요 유형 설명  대응방안
오류 메시지 정보 노출 응용 프로그램의 민감 정보가 오류 메시지를 통해 노출 오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만을 포함
오류 상황 대응 부재 오류 발생 부분에 예외 처리 미구현 C/C++ : if, switch문 사용
java : try - catch 문 사용
부적절한
예외 처리
프로그램 수행 중 발생한 예외 조건을 적절하게 검사하지 않음 결과값 적정성 검증
구체적인 예외처리 수행

 

ㆍ코드오류 대응

주요 유형 설명  대응방안
널 포인터 역참조 널 값을 고려하지 않은 코드에서 발생 값을 참조하기 전에 널값인지를 검사
부적절한 자원해제 자원 고갈로 인한 시스템 오류 유발 자원 획득 사용 후 반드시 자원 해제
해제된 자원 사용 c언어 해제한 메모리를 참조하여 의도치 않은 코드를 실행하는 보안 약점 메모리 할당 해제 후 포인터에 널 값 저장
초기화되지 않은 변수 사용 c언어 함수 내 지역변수 초기화하지 않고 사용할 시 발생 모든 변수는 사용하기 전 초깃값을 할당

 

ㆍ캡슐화 대응

주요 유형 설명  대응방안
잘못된 세션에 의한 정보 노출 멀티 스레드 화녁ㅇ에서 서로 다른 세션 간 데이터가 공유될 수 있는 보안 약점 싱글토노 패턴 사용 시 변수 적용 범위 주의
제거되지 않은 디버그 코드 의도하지 않은 민감 정보가 놀출될 수 있음. 디버그코드가 남아있는경우 소프트웨어 배포 전 디버그 코드 확인 및 삭제
시스템 정보 노출 시스템 내부 데이터가 노출되어 공격의 실마리가 되는 보안 약점 예외 상황 발생 시 시스템 내부정보의 화면 노출이 없도록 개발

 

ㆍAPI 오용 대응

주요 유형 설명  대응방안
DNS에 의존한 보안 결정 공격자가 DNS 정보를 변조하여 보안결정을 우회 가능한 보안 약점 DNS로 확인된 정보대신 IP주소 사용
취약한 API 사용 금지되거나 안전하지 않은 함수를 사용하는 보안 약점 안전한 함수 사용

 

ㆍSW개발 보안 테스트 : SW보안 요구사항이 반영되있음을 보증, 취약점을 발견하고 개선.

  테스트 유형 설명  특징
정적 분석 (화이트박스 테스트) SW를 실행 하지 않고 분석, SW개발단계에서 주로 사용 초기발견으로 비용절감, 설계&구조적 취약점 식별 불가
동적 분석 (블랙 박스 테스트) SW 실행환경에서 분석, SW 시험 단계에서 주로 사용 소스코드 필요없음, 정확도 상승, 구조 관점의 보안 약점식별 불가

 

ㆍ소프트웨어 개발 보안테스트 절차

준비 - 실행 - 개선 - 관리 - 종료