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 시험 단계에서 주로 사용 | 소스코드 필요없음, 정확도 상승, 구조 관점의 보안 약점식별 불가 |
ㆍ소프트웨어 개발 보안테스트 절차
준비 - 실행 - 개선 - 관리 - 종료
'2020 정보처리기사 > 2020 실기 정리 (수제비 2020 정보처리기사 실기 Vol.2 기준)' 카테고리의 다른 글
2020 정보처리기사 - 제품 소프트웨어 패키징 (0) | 2020.07.13 |
---|---|
2020 정보처리기사 - 응용 SW 기초 기술 활용 - 2 (0) | 2020.07.09 |
2020 정보처리기사 - 응용 SW 기초 기술 활용 - 1 (0) | 2020.07.08 |
2020 정보처리기사 - 프로그래밍 언어 활용 (0) | 2020.07.07 |
2020 정보처리기사 - SQL응용 (0) | 2020.06.29 |