1. SW 개발 보안
● 개요 : SW 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 SW를 개발하기 위한 일련의 보안 활동을 의미
- 목표 : 기밀성(Confidentiality), 무결성(Integrity), 가용성(Avalablity) 유지
- 취약점 발생 경우 : 보안 요구사항 정의되지 않은 경우, SW 설계 시 논리적 오류가 포함된 경우
● 보안 관련 기관
- 감리법인 : 감리 계획을 수립하고 협의, SW 보안 약점의 제거 여부 및 조치 결과를 확인
- 사업자 : SW 개발 보안 관련 기술 수준 및 적용 계획 명시, SW 개발 보안 관련 인력 대상으로 교육 실시
- 한국인터넷진흥원(KISA) : SW 개발 보안 정책 및 가이드를 개발
- 발주기관 : SW 개발 보안의 계획 수립, SW 개발 보안 사업자 및 감리법인 선정
- 행정안전부 : SW 개발 보안 정책을 총괄
● SW 개발 보안 활동 관련 법령 및 규정
- 개인 정보 보호법 : 개인의 자유와 권리 보호
- 표준 개인 정보 보호 지침 : 세부 사항 규정
2. Secure SDLC
● 개요 : 안전한 SW 개발 위해 SDLC(소프트웨어 개발 생명주기)에 보안 강화를 위한 프로세스 포함한 것
- 비용 최소화
- Secur Software 사의 CLASP, Microsoft 사의 SDL
- 전체 단계에 걸쳐 수행되어야 할 보안 활동을 제시
● 요구 사항 분석 단계 : 요구 사항 식별, 보안 요소별로 등급을 구분하여 분류, 출처 요구 수준 세부 내용 등을 문서화
● 설계 단계 : 식별된 보안 요구 사항들 SW 설계서에 반영하고 보안 설계서 작성
- 위협 식별하여 영향 범위와 대응책 수립
- 네트워크 : 분리하거나 방화벽 설치
- 서버 : 보안 뛰어난 OS 사용, 보안 업데이트, 접근 통제 실시
- 물리적 보안 : 감시설비 설치
- 개발 프로그램 : 허가 X 프로그램 통제, 지속적인 데이터 무결성 검사 실시
● 구현 단계 : 코딩 정의서, SW 개발 보안 가이드 준수하며 구현, 단위 테스트 통해 취약점 최소화,
- 코드 점검 및 소스 코드 진단 작업을 통해 소스 코드의 안정성 확보
● 테스트 단계 : 보안 사항들 정확히 반영되고 동작되는지 점검
- 동적 분석 도구 or 모의 침투 테스트 통해 위협들의 해결 여부 검증
- 구현 단계에서 추가로 제시된 위협들과 취약점들을 점검할 수 있도록 테스트 계획 수립하고 시행
● 유지 보수 단계에서의 보안 활동 : 이전 과정을 모두 수행하였음에도 발생할 수 있는 보안 사고들을 식별
- 사고 발생 시 이를 해결하고 보안 패치 시행
● SDLC : SW 개발 방법론의 바탕이 되는 것으로, SW를 개발하기 위해 정의하고 운용, 유지보수 등의 전 과정을 각 단계별로 나눈 것
● 시큐어 코딩(Secure Coding) : SW 구현 단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것을 의미
- 보안 취약점을 사전에 대응하여 안정성과 신뢰성을 확보하기 위해 사용
- 보안 정책을 바탕으로 시큐어 코딩 가이드를 작성하고, 개발 참여자에게는 시큐어 코딩 교육을 실시해야 함
3. 세션 통제
● 개요 : 세션(서버와 클라이언트의 연결)의 연결과 연결로 인해 발생하는 정보 관리하는 것
- 요구 사항 분석 및 설계 단계에서 진단
● 불충분한 세션 관리 : 일정 규칙 존재하는 세션 ID 가 발급되거나 타임아웃 너무 길게 설정 시 발생
- 세션 하이재킹 같은 공격으로 정보에 접근 가능
● 잘못된 세션에 의한 정보 노출 : 다중 스레드 환경에서 멤버 변수에 정보를 저장 시 발생
- 레이스 컨디션으로 인해 동기화 오류, 멤버 변수 정보 노출 가능
- 멤버 변수보다 지역 변수 활용하여 범위 제한함으로 방지 가능
● 세션 설계 시 고려 사항
- 모든 페이지 로그아웃 가능 => 로그아웃 시 할당 세션 완전히 제거되도록
- 세션 타임아웃 중요도 높으면 2~5분 / 낮으면 15~30분
- 이전 세션 종료 X 시 새 세션 생성 X
- 패스워드 변경 시 활성화 세션 삭제하고 재할당
● 세션 ID 관리 방법
- 최소 128bit
- 난수 알고리즘 적용
- URL Rewrite 기능 사용 X
- 로그인 시 로그인 전 세션 ID 삭제하고 재할당
- 장기간 로그인 시 주기적으로 재할당
● 레이스 컨디션 : 두 개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하고 있는 상태를 의미
4. 입력 데이터 검증 및 표현
- 개요 : 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증, 유효성 검증 체계 갖춤, 객체에 입력된 자료형 올바른지 확인, 일관된 언어셋 사용하도록 코딩
● 입력 데이터 검증 및 표현의 보안 약점
- SQL 삽입 : 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작하는 보안 약점, 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자 입력되지 않게 필터링되도록 설정하여 방지
- 경로 조작 및 자원 삽입 : 데이터 입출력 경로를 조작하여 서버 자원을 수정 삭제할 수 있는 보안 약점, 순회 공격 막는 필터 사용으로 방지
- 크로스사이트 스크립팅(XSS) : 웹 페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점 -> HTML 태그 사용 제한, 문자 다른 문자로 치환으로 방지
- 운영체제 명령어 삽입 : 외부 입력값 통해 시스템 명령어 실행 유도함으로써 권한을 탈취하거나 시스템 장애를 유발하는 보안 약점 -> 명령어 통제로 방지
- 위험한 형식 파일 업로드 : 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 주거나, 시스템을 제어할 수 있는 보안 약점 -> 업로드되는 파일의 확장자 제한, 파일명의 암호화, 웹 사이트와 파일 서버의 경로 분리, 실행 속성 제거로 방지
- 신뢰되지 않는 URL 주소로 자동 접속 연결 : 입력 값으로 사이트 주소를 받는 경우 이를 조작하여 방문자를 피싱 사이트로 유도하는 보안 약점 -> 화이트 리스트로 관리함으로써 방지
5. 보안 기능
- 개요 : SW 개발 구현 단계에서 코딩하는 인증, 접근 제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목
- 데이터 접근하여는 사용자별로 중요도 구분하여 차별화된 인증 방안 적용
- 개별적인 접근 권한 부여, 안전한 암호화 기술 적용
● 보안 기능의 보안 약점
- 적절한 인증 없이 중요 기능 허용 : 보안 검사 우회하여 인증 없이 중요한 정보 또는 기능에 접근 및 변경 가능 -> 재인증 기능 사용으로 방지
- 부적절한 인가 : 접근제어 기능이 없는 실행 경로 이용 -> 모든 실행 경로에 대해 접근 제어 검사 수행하여 반드시 필요한 접근 권한만을 부여
- 중요 자원에 잘못된 권한 설정 : 권한 설정이 잘못된 자원에 접근하여 해당 자원 임의 사용 -> 관리자만 자원 사용 설정, 중요 자원 접근 여부 검사
- 취약한 암호화 알고리즘 사용 : 암호화된 환경설정 파일 해독하여 중요 정보 탈취 가능 -> IT 보안 인증 사무국이 안정성 확인한 암호모듈 이용
- 중요 정보 평문 저장 및 전송 : 암호화되지 않은 평문 데이터를 탈취 가능 -> 전송 시 반드시 암호화, HTTPS SSL과 같은 보안 채널 이용
- 하드코드된 비번 : 소스코드 유출 시 내부에 하드코드된 패스워드 이용하여 관리자 권한 탈취 가능 -> 패스워드 암호화하여 별도 파일 저장, 디폴트 키의 사용 피함
● HTTPS(Hypertext Transfer Protocol Secure) : 웹브라우저와 서버 간의 안전한 통신을 위해 HTTP와 암호 통신규약을 결합한 것
● SSL(Secure Socket Layer) : 데이터를 송수신하는 두 컴퓨터 사이에 위치하여 인증, 암호화, 무결성을 보장하는 업계 표준 프로토콜
6. 시간 및 상태
● 개요 : 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 관리하여 원활하게 동작하기 위한 보안 검증 항목
● TOCTOU 경쟁 조건 : 검사 시점(Time Of Check), 사용 사점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생
- 검사 시점에서 사용 가능했던 자원이 사용 시점에서는 사용할 수 없게 된 경우 발생
- 동기화 오류, 교착 상태(Dead Lock) 등이 발생
- 코드 내에 동기화 구문 사용하여 해당 자원에는 한 번에 하나의 프로세스만 접근 가능하도록 구성함으로써 방지
- 동기화 구문은 성능 감소를 동반하기 때문에 반드시 필요한 부분에 한정하여 사용
● 종료되지 않은 반복문 또는 재귀함수 : 반복문이나 종료 함수에 종료 조건 정의 X 거나 논리 구조상 종료될 수 없는 경우 발생
- 자원 고갈로 서비스 장애 or 시스템 장애 발생
- 모든 반복문 or 재귀 함수의 수행 횟수 제한, 종료 여부 확인함으로써 방지
● 교착상태(Deadlock) : 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상
7. 에러 처리
● 개요 : 에러 사전에 정의하여 예방
- 예외 처리 구문을 통해 오류에 대한 사항을 정의
● 오류 메시지를 통한 정보 노출 : 오류 메시지, 예외 처리 구문의 예외 이름, 스택 트레이스 출력 코딩 시 발생
- 오류 발생 시 내부에서만 처리, 메시지 출력 시 최소한의 정보 or 사전에 준비된 메시지만 출력
● 오류 상황 대응 부재 : 예외 처리 미비로 인해 발생
- 오류 발생 가능 부분에 예외 처리 구문 작성, 제어문 활용함으로써 방지
● 부적절한 예외 처리 : 함수의 반환 값 or 오류들 세분화 처리하지 않고 광범위하게 처리하거나 누락된 예외 존재 시 발생
- 모든 오류들 세세하게 정의하여 처리할 필요는 없음
- 모든 함수의 반환 값이 의도대로 출력되는지 확인하고, 세분화된 예외 처리를 수행함으로써 방지
● 스택 트레이스(Stack Trace) : 오류가 발생한 위치를 추적하기 위해 SW가 실행 중에 호출한 메소드의 리스트를 기록한 것
8. 코드 오류
● 개요 : 형(Type) 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목
● 널 포인터(Null Pointer) 역참조 : 널 포인터가 가리키는 메모리에 값 저장 시 발생하는 보안 약점
- 널 포인터 이용 전 널 값 가지고 있는지 검사함으로써 방지
● 부적절한 자원 해제 : 자원을 반환하는 코드 누락하거나 자원 반환하지 못했을 때 발생
- 힙 메모리, 소켓 등의 유한한 시스템 자원이 계속 점유 -> 자원 부족
- 자원 반환 코드 누락되었는지 확인, 오류로 함수 종료 시 예외 처리 관계없이 자원 반환되도록 코딩함으로써 방지
● 해제된 자원 사용 : 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생
- 반환된 메모리에 접근할 수 없도록 주소 저장하고 있는 포인터를 초기화함으로써 방지
● 초기화되지 않은 변수 사용 : 변수 선언 후 값이 부여되지 않은 변수를 사용 시 발생하는 보안 약점
- 변수 선언 시 할당된 메모리 초기화함으로써 방지
● 힙 메모리(Heap Memory) : SW가 자유롭게 사용할 수 있는 메모리 공간
● 소켓(Socket) : 데이터 교환을 위한 통로
8. 캡슐화
● 개요 : 정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘 못 사용함으로써 발생하는 문제 예방
● 잘못된 세션에 의한 정보 노출 : 다중 스레드 환경에서 멤버 변수에 정보를 저장 시 발생
- 레이스 컨디션으로 인해 동기화 오류, 멤버 변수 정보 노출 가능
- 멤버 변수보다 지역 변수 활용하여 범위 제한함으로 방지 가능
● 제거되지 않고 남은 디버그 코드 : 개발 중 버그 수정이나 결괏값 확인을 위해 남겨둔 코드들로 인해 발생하는 문제
- 디버그 코드를 삭제함으로써 방지
● 시스템 데이터 정보 노출 : 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩 시 발생
- 시스템 메시지를 통해 노출되는 메시지는 최소한의 정보만을 제공함으로써 방지
● Public 메소드로부터 반환된 Private 배열
- Private 배열을 별도의 메소드를 통해 조작, 동일한 형태의 복제본으로 반환받은 후 값을 전달하는 방식으로 방지
● Private 배열에 Public 데이터 할당
- 레퍼런스가 아닌 값을 직접 저장함으로써 방지
접근 지정자 / 접근 가능 : O 접근 불가능 : X
●패키지(Package) : 관련 클래스나 인터페이스 등을 하나로 모아둔 것
● 파라미터(Parameter) : 메소드의 외부에서 전달된 값을 저장하는 변수로, 매개변수 또는 형식 매개변수라고도 함
9. API 오용
● 개요 : API 잘못 사용, 보안 취약 API 사용
● DNS Lookup에 의존한 보안 결정 : 도메인명에 의존하여 인증이나 접근 통제 등 보안 결정을 내리는 경우 발생
- IP 주소를 직접 입력하여 접근함으로써 방지
● 취약 API 사용 : 금지된 API, 잘못된 방식으로 API 사용 시 발 생
- 금지된 API에는 C언어의 strcat(), strcpy(), sprintf(() 등이 있음
- 보안 상 안전한 API라도 자원에 대한 직접 연결이나 네트워크 소켓을 통한 직접 호출 사용할 경우 보안 약점 노출
- 보안 문제로 금지된 함수는 안전한 함수로 대체, API 매뉴얼 참고하여 보안이 보장되는 인터페이스를 사용함으로써 방지
10. 암호 알고리즘
● 개요 : 평문을 암호화된 문장으로 만드는 절차 또는 방법
● 양방향
- 개인키 암호화 기법 : 대칭키, 단일키, 비밀키
* Stream 암호화 방식 : 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화 ex) LFSR, RC4
* Block 암호화 방식 : 한 번에 하나의 데이터 블록을 암호화 ex) DES, SEED, AES, ARIA
* 장점 : 암호화/복호화 속도 빠름, 알고리즘 단순, 공개키 보다 크기 작음
* 단점 : 사용자 증가에 따라 관리해야 할 키의 수 상대적으로 많아짐
- 공개키 암호화 기법 : 비대칭키, 이중키, RSA 기법, 암호화 시 공개키 사용자 / 복호화 시 비밀키 관리자
* 장점 : 키 분배 용이, 관리 키 수 적음
* 단점 : 암호화/복호화 속도 느림, 알고리즘 복잡, 개인키 보다 크기 큼
● 단방향
- HASH : 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것, HASH 알고리즘 = HASH 함수
ex) SHA, MD5, N-NASH, SNEFRU
● MD5(Message Digest Algorithm 5) : 1991년 R.rivest가 MD4를 개선한 암호화 알고리즘으로, 각각의 512 비트짜리 입력 메시지 블록에 대해 차례로 동작, 각 512 비트 입력 메시지 블록을 처리하고 나면 128 비트 스테이트(State)의 값이 변하게 됨
● 공개키 기반 구조(PKI; Public key infrastructure) : ITU-T의 X.509와 비 X.509 방식으로 구분
- X.509 : 인증기관에서 발생하는 인증서를 기반으로 상호 인증을 제공
- 비 X.509 : 국가별, 지역별로 맞게 보완 및 개발
정보처리기사 실기 11장 제품 소프트웨어 패키징 요점 정리 (0) | 2020.07.03 |
---|---|
정보처리기사 실기 10장 응용 SW 기초 기술 활용 (0) | 2020.07.02 |
정보처리기사 실기 8장 SQL 응용 요점 정리 (0) | 2020.06.30 |
정보처리기사 실기 7장 애플리케이션 테스트 관리 요점 정리 (0) | 2020.06.29 |
정보처리기사 실기 6장 화면 설계 요점 정리 (0) | 2020.06.28 |
댓글 영역