본문 바로가기

정보처리기사 실기/2020 정처기 암기 모음

[2020 정보처리기사 실기 암기] 9. 소프트웨어 개발 보안 구축

* 소프트웨어 개발 보안

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

 

* 소프트웨어 개발 보안 3대 요소 : 기밀성, 무결성, 가용성

 - 기밀성 : 인가되지 않은 개인 혹은 시스템 접근에 따른 정보의 공개 및 노출 차단

 - 가용성 : 권한을 가진 사용자가 원하는 서비스를 지속 사용할 수 있도록 보장

 - 무결성 : 정당한 방법에 의하지 않고 데이터가 변경될 수 없음, 데이터의 정확성 및 완전성

 

* 소프트웨어 개발 보안 용어 : 자산, 위협, 취약점, 위험

 

* 주요 법규

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

  정보통신망법 : 정보통신망을 통해 수집 처리 보관 이용되는 개인정보 보호에 관한 규정

  신용정보법 : 개인 신용정보의 취급 단계별 보호조치 및 의무사항에 관한 규정

 

* 개인 정보 보호법

  고유 식별정보처리제한 : 고유 식별정보 주민등록번호, 여권번호, 운전면허번호 등 처리

  안전조치 의무화 : 접속 기록 보관 등 안전성 확보에 필요한 기술적, 관리적, 물리적 조치

  개인정보의 안전성 확보조치 : 개인정보 안전하게 저장 전송하는 암호화 기술 적용

 

* 정보통신망 이용촉진 및 정보보호 : 개인정보의 보호조치, 개인정보의 암호화

 

* 정보자산의 주요 용어

  자산 : 조직에서 보유한 가치있는 모든 것

  사용자 : 정보처리 기기 및 시스템 활용으로 자산을 사용하는 사람과 기관

  소유자 : 최종 책임자, 취득 사용 폐기 관리 권한 보유

  관리자 : 자산 소유자로부터 관리위임 받은 사람, 운영 보관 책임 

 

* 정보자산 분류 기준

 소프트웨어 : 상용 또는 개발된 소프트웨어 자산

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

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

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

 

* 자산목록표 : 자산번호, 자산명, OS, 위치, 담당자, IP, PORT, 위치 등

 

* 암호화에 활용되는 솔트 :일방향 해시함수에서 다이제스트를 생성할 때 추가되는 바이트 단위 임의의 문자열

 

* 소프트웨어 개발 보안 방법론 : MS-SDL, SEVEN TOUCHPOINTS, CLASP

 

*입력데이터 검증 및 표현

 - 허용된 범위 내 메모리 접근 : 버퍼오버플로우가 발생하지 않도록 처리방법 설계

 - 보안 기능 입력값 검증 : 보안기능 (인증, 권한 부여 등) 동작을 위해 사용되는 입력값 검증 방법 설계

 

* 고유 식별 정보

  개인을 고유하게 구별하기 위해 부여된 식별정보

  주민등록번호, 여권번호, 운전면허번호, 외국인등록번호

 

* 일방향 암호화 : 암호화는 수행하지만 절대 복호화가 불가능한 알고리즘

 

* 보안약점 : 보안 취약점의 근본적인 원인이 되는 소프트웨어의 결함, 실수, 버그 등 오류, 개발 단계의 보안 리스크

 

* 중요정보 평문 전송

  보안 약점 : 통신 채널을 스니핑을 통해 민감 데이터 노출

  대응 방안 : 내외부 통신 시 SSL 인증서 기반의 전송구간 암호화 적용

 

* 서비스 거부 DoS 공격 기법 중 랜드어택

  공격자가 출발자 IP와 목적지 IP를 같은 패킷 주소로 만들어 보냄, 시스템 가용성 침해하는 공격 기법

 

* MD5 : 128비트 암호화 해시 함수, 프로그램이나 파일이 원본 그대로인지 확인하는 무결성 검사에 활용

 

* SHA : 미국 국가안보국에서 설계, 미국 국가표준 해시 암호화 알고리즘

 

* 분산 서비스 거부 DDoS 공격 기법 중 스메딩

  희생자의 스푸핑된 출발지 IP를 가진 수많은 ICMP 패킷이 IP 주소를 사용해 네트워크 전체에 브로드케스트

 

* 시큐어 코딩

  설계 및 구현단계에서 해킹 등의 공격을 유발하는 잠재적 보안 취약점을 제거하고

  외부 공격으로부터 안전한 소프트웨어를 개발하는 기법

 

* 시큐어 코딩 가이드와 보안 약점

 - 입력데이터 검증 및 표현 : 프로그램 입력값에 대한 검증 누락, 부적절한 검증, 잘못된 형식 지정

 - 보안 기능 : 인증, 접근제어, 기밀성, 암호화, 권한관리 등의 부적절한 구현

 - 시간 및 상태 : 병렬 시스템에서 시간 및 상태의 부적절한 관리

 - 에러 처리, 코드 오류, 캡슐화, API 오용

 

* 시큐어 코딩의 입력데이터 검증 및 표현 보안 약점을 유발하는 공격

 - SQL 삽입 : 웹 애플리케이션에서 입력데이터에 대한 유효성 검증하지 않은 경우

                  공격자가 입력창 및 URL에 SQL문을 삽입하여 데이터베이스로부터 정보 열람, 조작하는 공격기법

 - 크로스사이트스크립트 XSS : 웹 페이지에 악의적인 스크립트를 포함하여 사용자 측에서 실행되게 유동하는 공격기법

 

* 취약한 패스워드 허용 보안 약점 : 숫자/영문은 최소 10자, 숫자/영문/특수문자는 최소 8자, 변경 주기 6개월

 

* 무차별 공격 : 반복된 인증 시도, 제한 기능 부재와 관련된 공격기법

 

* 시간 및 상태 보안 약점과 대응방법

 - 경쟁조건 /보안약점 : 동일 자원에서 검사 시점과 사용 시점이 상이, 동기화 오류, 교착 상태를 유발하는 보안 약점

                /대응방안 : 동기화구문, MUTEX 사용, 한번에 하나의 프로세스만 접근하도록 함

 - 종료되지 않은 반복문 또는 재귀 /보안약점 : 무한루프에 ㅔ빠져 자원 고갈 유발하는 보안 약점

                                             /대응방법 : 재귀함수 종료조건 정의, 반복문 흐름검증 수행

 

* 암호화 관련 보안 약점과 대응방법

 - 취약 암호화 알고리즘 /보안약점 : 비표준 알고리즘, 해독 가능한 알고리즘, 무력화 가능한 취약점

                                /대응방안 : 표준화된 알고리즘 사용 AES, ARIA, SEED

 - 부적절한 난수 사용 /보안약점 : 예측가능 난수, SW 다음숫자 유추로 공격 가능

                             /대응방안 : 난수를 발생시키는 시드의 고정값 대신 변경 값 적용

 - 솔트 없는 일방향 해시함수 /보안약점 : 솔트 없는 해시처리 시 레인보우 테이블로 비밀번호 쉽게 찾을 수 있음

                                       /대응방안 : 패스워드 저장 시 패스워드와 솔트 결합

 

* 캡슐화 보안 약점과 대응방법

 - 잘못된 세션에 의한 정보 노출 /보안약점 : 멀티스레드 환경에 서로다른 세션간 데이터 공유

                                          /대응방안 : 싱글톤 패턴 사용 시 변수 적용 범위 주의

 - 제거되지 않은 디버깅 코드 /보안약점 : 의도하지 않은 민감정보 노출

                                      /대응방안 : 소프트웨어 배포 전 디버깅 코드 확인 및 삭제

 - 시스템 정보 노출 /보안약점 : 시스템 내부 데이터가 노출되어 공격 실마리가 되는 약점

                          /대응방안 : 예외 상황 발생 시 시스템 내부정보 화면 노출 없도록 개발

 - DNS에 의존한 보안결정 : 공격자가 DNS 정보를 변조하여 보안 결정을 우회

                      대응방안 : DNS로 확인된 정보 대신 IP 주소 사용

 - 취약한 API 사용 : 금지되거나 안전하지 않은 함수 사용

            대응방안 : 안전한 함수 사용

 

* 코드 오류 보안 약점과 대응방법

 - 널 포인터 역참조 : 널포인터 값 고려하지 않음, 의도적으로 널 값 유발하여 공격 가능, 참조 전 널 값인지 검사

 - 부적절한 자원 해제 : 자원 고갈로 오류 유발, 소켓 힙 메모리 등 할당받고 미반환, 자원 획득 사용 후 반드시 해제

 - 해제된 자원 사용 : C언어 해제한 메모리를 참조하여 의도치않은 코드 실행, 메모리 할당 해제 후 포인터에 널 저장

 

* 동적 분석 : SW를 실행환경에서 보안 약점을 분석 SW 테스트 단계에서 주로 사용 분석 시 소스코드가 필요 없음

  정적 분석 : 소프트웨어 실행하지 않고 소스코드 수준으로 보안약점 분석, 소프트웨어 개발 단계에서 주로 사용

 

* RSA는 2048비트 이상, 대칭 암호화는 128비트 이상

 

* 소프트웨어 보안테스트 절차

 - 준비단계 : 대상 선정, 일정 수립

 - 실행단계 : 테스트 수행

 - 개선단계 : 보고서 발행, 지적사항 해결

 - 관리단계 : 결함 해결 사항 보고, 점검된 소스 코드 관리

 - 종료단계 : 보안 상황 보고