자격증/정보처리기사

[정보처리기사] 실기 요약 정리 소프트웨어 개발 보안 구축

윤규헌 2023. 7. 20. 19:04

1. Secure SDLC

Secure SDLC

  • SDLC에 보안 강화를 위한 프로세스를 포함한 것
    • 소프트웨어 개발 생명주기(SDLC)
      • 소프트웨어 개발 방법론의 바탕이 되는 것
  • Secure SDLC의 대표적인 방법론
    • CLASP : SDLC의 초기 단계에서 보안을 강화하기 위해 개발된 방법론
    • SDL : 마이크로소프트 사에서 안전한 소프트웨어 개발을 위해 기존의 SDLC를 개선한 방법론
    • SevenTouchpoints : 소프트웨어 보안의 모범사례를 SDLC에 통합한 방법론

SDLC 단계별 보안 활동

  1. 요구사항 분석 단계
  2. 설계 단계
  3. 구현 단계
  4. 테스트 단계
  5. 유지보수 단계

소프트웨어 개발 보안 요소

  • 기밀성
    • 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용된다.
    • 정보가 전송 중에 노출되더라도 데이터를 읽을 수 없다.
  • 무결성 : 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있다.
  • 가용성 : 인가받은 사용자는 시스템 내의 정보와 자원을 언제라도 사용할 수 있다.
  • 인증
    • 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지 확인하는 모든 행위
    • 패스워드, 인증용 카드, 지문검사
  • 부인방지 : 데이터를 송수신한 자가 송수신 사실을 부인할 수 없도록 송수신 증거를 제공한다.

* 기밀성, 무결성, 가용성을 보안의 3대 요소라 한다.

시큐어 코딩

  • 보안 요소들을 고려하며 코딩하는 것
  • 안정성과 신뢰성을 확보한다.

2. 세션 통제


세션 통제 관련 용어

  • 세션 : 서버와 클라이언트의 연결
  • 세션 통제
    • 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것
    • 요구사항 분석 및 설계 단계에서 진단해야 하는 보안 점검 내용
  • 세션 ID :
    • 서버가 클라이언트를 구분하기 위해 부여하는 키(key)
    • 클라이언트가 서버에 요청을 보낼 때마다 세션 ID를 통해 인증이 수행된다.
  • 스레드 : 프로세스 내 작업 단위, 시스템 자원 할당받아 실행하는 프로그램 단위
  • 다중 스레드 : 두 개 이상 스레드가 생성되어 동시 처리되는 다중 작업
  • URL Rewrite : 쿠키를 사용할 수 없는 환경에서 세션 ID 전달을 위해 URL에 세션 ID를 포함시키는 것

세션 통제의 보안 약점

  • 불충분한 세션 관리 : 일정한 규칙이 존재하는 세션 ID가 발급되거나, 타임아웃이 너무 길게 설정되어 있는 경우 발생하는 보안 약점
  • 잘못된 세션에 의한 정보 노출 : 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점

세션 ID의 관리 방법

  • 안전한 서버에 최소 128비트의 길이로 생성
  • 난수 알고리즘을 적용
  • URL Rewrite 기능을 사용하지 않는 방향으로 설계
  • 로그인 시 로그인 전의 세션 ID를 삭제하고 재할당
  • 장기간 접속 중이라면 주기적으로 재할당 되도록 설계

3. 입력 데이터 검증 및 표현


입력 데이터 검증 및 표현

  • 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 점검해야 하는 보안 점검 항목들

입력 데이터 검증 및 표현의 보안 약점

  • SQL 삽입(Injection)
    • 웹 응용 프로그램에 SQL 삽입, DB의 데이터를 유출 및 변조, 관리자 인증을 우회하는 보안 약점
    • 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않도록 필터링하여 방지
  • 경로 조작 및 자원 삽입
    • 데이터 입출력 경로를 조작하여 서버 자원을 수정, 삭제할 수 있는 보안약점
    • 사용자 입력값을 식별자로 사용하는 경우, 경로 순회 공격을 막는 필터를 사용하여 방지 가능
  • 크로스사이트 스크립팅(XSS)
    • 웹페이지에 악의적인 스크립트 삽입, 방문자들의 정보 탈취, 비정상적인 기능 수행 유발하는 보안 약점
  • 운영체제 명령어 삽입
  • 위험한 형식 파일 업로드
  • 신뢰되지 않는 URL 주소로 자동접속 연결
  • 메모리 버퍼 오버플로
    • 할당된 메모리의 범위를 넘어선 위치에서 자료를 읽거나 쓰려고 할 때 발생하는 보안 약점

입력 데이터 검증 및 표현 관련 용어

  • 경로 순회 : 경로를 탐색할 때 사용하는 '/', '' , '..' 등의 기호를 악용해서 허가되지 않은 파일에 접근하는 방식
  • 스크립트
    • 소프트웨어 수행에 필요한 처리 절차가 기록된 텍스트
    • 대표적인 스크립트 파일의 확장자에는 asp, jsp, php

4. 보안 기능


보안 기능

  • 소프트웨어 개발의 구현 단계에서 코딩하는 기능인 인증, 접근 제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 항목들

보안 기능의 보안 약점

  • 적절한 인증 없이 중요 기능 허용
  • 부적절한 인가
  • 중요한 자원에 대한 잘못된 권한 설정
  • 취약한 암호화 알고리즘 사용
  • 중요 정보 평문 저장 및 전송
  • 하드코드된 함호화 키
    • 암호화된 키도 하드코드된 경우 유출 시 역계산 또는 무차별 대입 공격에 탈취당할 수 있다.
    • 상수 형태의 암호키를 사용하지 않고, 암호화 키 생성 모듈 또는 보장된 외부 공간 이용해서 방지할 수 있다.

보안 기능 관련 용어

  • HTTPS
    • 웹브라우저와 서버 간의 안전한 통신을 위해 HTTP와 암호 통신 규약을 결합한 것
  • SSL
    • 데이터를 송수신하는 두 컴퓨터 사이에 위치하여 인증, 암호화, 무결성을 보장하는 업계 표준 프로토콜
  • 하드코드
    • 데이터를 코드 내부에 직접 입력하여 프로그래밍하는 방식
  • 무차별 대입 공격
    • 암호화된 문서의 암호키를 찾아내기 위해 적용 가능한 모든 값을 대입하여 공격하는 방식

5. 시간 및 상태


시간 및 상태

  • 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활하게 동작되도록 하기 위한 보안 점검 항목들

시간 및 상태의 보안 약점

  • TOCTOU 경쟁 조건
    • 검사 시점(Time Of Check)과 사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
    • 동기화 구문을 사용하여 방지할 수 있다.
  • 종료되지 않는 반복문 또는 재귀함수

시간 및 상태 관련 용어

  • 경쟁 조건 : 2개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하고 있는 상태를 의미
  • 동기화 구문 : 공유 자원에 대해 둘 이상의 프로세스가 접근하는 것을 막는 구문

6. 에러 처리


에러 처리

  • 소프트웨어 실행 중에 발생할 수 있는 오류들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들

에러 처리의 보안 약점

  • 오류 메시지를 통한 정보 노출
  • 오류 상황 대응 부재
  • 부적절한 예외 처리

7. 코드 오류


코드 오류

  • 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 형 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목들

코드 오류의 보안 약점

  • 널 포인터 역참조
    • 널 포인터가 가리키는 메모리의 위치 값을 저장할 때 발생하는 보안 약점
  • 부적절한 자원 해제
  • 해제된 자원 사용
  • 초기화되지 않은 변수 사용

스택 가드

  • 주소가 저장되는 스택에서 발생하는 보안약점을 막는 기술 중 하나
  • 메모리상에서 프로그램 복귀 주소와 변수 사이에 특정 값을 저장한 후 그 값이 변경되었을 경우, 오버플로우 상태로 판단하고 프로그램 실행을 중단, 복귀주소의 호출을 막는다.

8. 캡슐화


캡슐화

  • 정보 은닉이 필요한 중요한 데이터와 기능을 불완전하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안 점검 항목들

캡슐화의 보안 약점

  • 잘못된 세션에 의한 정보 노출
  • 제거되지 않고 남은 디버그 코드
  • 시스템 데이터 정보 노출
  • Public 메소드로부터 반환된 Private 배열
  • Private 배열에 Public 데이터 할당

접근제어자

  • 외부로부터 접근을 제한하기 위해 사용되는 예약어
  • 접근 제어자의 종류 
    • Public : 전부 접근 가능
    • Protected : 패키지 외부 접근 불가
    • Default : 패키지외부, 하위클래스 접근 불가
    • Private : 클래스 내부만 접근 가능

9. API 오용


API 오용

  • 소프트웨어 구현 단계에서 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 점검 항목들

API 오용의 보안 약점

  • DNS Lookup에 의존한 보안결정
  • 취약한 API 사용

10. 암호 알고리즘


암호 알고리즘

  • 중요 정보를 보호하기 위해 평문을 암호화된 문장으로 만드는 절차 또는 방법

암호 방식 분류

  • 암호화 방식
    • 양방향
      • 개인키
        • Stream 방식
        • Block 방식
      • 공개키
    • 단방향
      • Hash

개인키 암호화 기법(Private Key Encryption)

  • 동일한 키로 데이터를 암호화하고 복호화하는 암호화 기법
  • 대칭 암호 기법 또는 단일키 암호화 기법이라고도 한다.
  • 암호화 복화화 속도가 빠르다.
  • 개인키 암호화 기법의 종류
    • 스트림 암호화 방식
      • 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화하는 방식
      • 종류 : LSFR, RC4
    • 블록 암호화 방식
      • 한 번에 하나의 데이터 블록을 암호화하는 방식
      • 종류 : DES, SEED, AES, ARIA

공개키 암호화 기법(Public Key Encryption)

  • 암호화할 때 사용하는 공개키는 사용자에게 공개하고, 복호화할 때의 비밀키는 관리자가 비밀리에 관리하는 암호화 기법
  • 비대칭 암호 기법이라고도 한다.
  • 암호화 / 복호화 속도가 느리다.
  • 대표적으로 RSA가 있다.

양방향 알고리즘의 종류

  • SEED
    • 한국 인터넷 진흥원이 개발한 블록 암호화 알고리즘
    • 블록크기는 128비트, 키 길이에 따라 128, 256으로 분류
  • ARIA
    • 국가 정보원, 산학연협회가 개발한 블록 암호화 알고리즘
    • AES 암호화 알고리즘의 규격을 따른다.
  • DES
    • 미국 NBS에서 발표한 개인키 암호화 알고리즘
    • 블록 크기는 64비트, 키 길이는 56비트, 16회의 라운드 수행
    • DES를 3번 적용하여 보안을 더욱 강화한 3DES가 있다
  • AES
    • 미국 표준 기술 연구소에 발표한 개인키 암호화 알고리즘
    • DES의 한계를 느낀 NIST에서 공모 후 발표
    • 블록크기는 128비트, AES-128, AES-192, AES-256
  • RSA
    • 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 암호화 알고리즘
    • 큰 수를 소인수 분해하기 어렵다는 것에 착안해서 제작

해시

  • 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것
  • 해시 알고리즘을 해시 함수라고 부르며, 해시 함수로 변환된 값이나 키를 해시값 또는 해시키라고 부른다.

해시 함수의 종류

  • SHA 시리즈
    • 미국 국가안보국(NSA)이 설계, 미국 국립표준기술 연구소에 의해 발표
  • MD5
    • 암호화 해시 함수, 1991년 MD4를 개선한 알고리즘
    • 블록 크기가 512비트, 키 길이는 128비트
  • N-NASH
    • 일본의 전신주식회사(NTT)가 발표한 암호화 해시함수
    • 블록크기, 키 길이가 모두 128비트
  • SNEFRU
    • R.C.Merkle가 발표한 해시함수
    • 32비트 프로세서에서 구현을 용이하게 할 목적으로 개발되었다.

11. 서비스 공격 유형


서비스 거부 공격(DoS : Denial of Service)

  • 대량의 데이터를 한 곳의 서버에 집중적으로 전송하여 서버의 정상적인 기능을 방해하는 것
  • 주요 서비스 거부 공격의 유형
    • Ping of Death
    • SMURFING
    • SYN Flooding
    • TearDrop
    • Land Attack
    • DDoS 공격

Ping of Death(죽음의 핑)

  • 패킷의 크기를 인터넷 프로토콜 허용 범위 이상으로 전송하여 네트워크를 마비시키는 서비스 거부 공격 방법

SMURFING

  • IP나 ICMP의 특성을 악용하여 엄청난 양의 데이터를 한 사이트에 집중적으로 보냄으로써 네트워크를 불능 상태로 만드는 공격 방법

SYN Flooding

  • 3-WAY-HANDSHAKE 과정을 의도적으로 중단시킴으로써 서버가 정상적인 서비스를 수행하지 못하게 하는 공격방법

TearDrop

  • Offset 값을 변경시켜 수신 측에서 과부하를 발생시킴으로써 시스템이 다운되도록 하는 공격 방법

LAND Attack

  • 패킷을 전송할 때 송신 IP 주소와 수신 IP 주소를 모두 공격 대상의 IP 주소로 하여 자신에 대해 무한히 응답하게 하는 공격방법

DDoS 공격

  • 여러 곳에 분산된 공격 지점에서 한 곳의 서버에 대해 거부 공격을 수행하는 것

네트워크 침해 공격 관련 용어

  • 스미싱
    • 문자 메시지를 이용해 사용자의 개인 신용 정보를 빼내는 수법
  • 스피어 피싱
    • 특정 대상을 선중한 후 일반적인 이메일을 위장한 메일을 지속적으로 발송, 링크나 첨부 파일을 클릭하도록 유도해 개인정보를 탈취하는 수법
  • APT
    • 조직적으로 특정 기업이나 조직 네트워크에 침투해 보안을 무력화시키고 정보를 수집한 다음 외부로 빼돌리는 공격
  • 무작위 대입 공격
    • 적용 가능한 모든 값을 대입하여 암호키를 찾아내려는 공격
  • 큐싱
    • QR코드를 통해 악성 앱 혹은 프로그램을 설치하도록 하는 금융사기 기법의 하나
  • SQL Injection
    • 데이터베이스 등의 데이터를 조작하는 일련의 공격 방식
  • XSS
    • 스크립트의 취약점을 악용한 해킹 기법
  • 스니핑
    • 네트워크 중간에서 남의 패킷 정보를 도청하는 해킹 유형, 수동적 공격 중 하나

추가적인 공격들

  • 버퍼오버플로우
    • 정해진 메모리의 범위를 넘치게 하여 원래의 리턴 주소를 변경시켜 임의의 프로그램이나 함수를 실행시키는 시스템 해킹 기법
  • CSRF
    • 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격 기법
  • 세션 하이재킹
    • 상호 인증과정을 거친 후 접속해 있는 서버와 클라이언트 사이의 세션 정보를 가로채는 공격 기법
  • ARP 스푸핑
    • 자신의 물리적 주소(MAC)를 공격대상의 것으로 변조하여 데이터 패킷을 가로채거나 방해하는 방법
    • ARP
      • 호스의 IP 주소를 호스트와 연결된 네트워크의 접속 장치의 물리적 주소로 변환해 주는 프로토콜
  • 워터링 홀
    • 웹 사이트를 사전에 감염시켜, 사이트에 방문했을 때 악성코드에 감염되게 하는 웹 기반 공격
  • 키로거 공격
    • 컴퓨터 사용자의 키보드 움직임을 탐지해 정보를 몰래 빼가는 해킹 공격
  • 랜섬웨어
    • 내부 문서나 파일 등을 암호화해 사용자가 열지 못하게 하는 프로그램
  • 백도어
    • 시스템 설계자가 액세스 편의를 위해 시스템 보안을 제거하여 만들어놓은 비밀 통로, 컴퓨터 범죄에 악용되기도 한다.
    • 백도어 탐지 방법
      • 무결성 검사
      • 열린 포트 확인
      • 로그 분석
      • SetUID 파일 검사

12. 서버 인증


보안 서버

  • 개인정보를 암호화하여 송수신할 수 있는 기능을 갖춘 서버
  • 보안 서버의 기능
    • 서버에 SSL인증서를 설치하여 전송 정보를 암호화하여 송수신하는 기능
    • 서버에 암호화 응용 프로그램을 설치하고 전송 정보를 암호화하여 송수신하는 기능

인증

  • 로그인을 요청한 사용자의 정보를 확인하고 접근 권한을 검증하는 보안 절차
    • 지식기반 인증(Something You Know)
      • 사용자가 기억하고 있는 정보를 기반으로 인증을 수행하는 것
      • 지식 기반 인증 유형
        • 고정된 패스워드
        • 패스 프레이즈
        • 아이핀
    • 소유 기반 인증(Something You Have)
      • 사용자가 소유하고 있는 것을 기반으로 인증을 수행하는 것
      • 소유 기반 인증 유형
        • 신분증
        • 메모리카드
        • 스마트카드
        • OTP
    • 생체 기반 인증(Something You Are)
      • 사용자의 고유한 생체 정보를 기반으로 인증을 수행하는 것
      • 생체 인증 대상 : 지문, 홍채/망막, 얼굴, 음성, 정맥 등
    • 위치 기반 인증(Somewhere You Are)
      • 인증을 시도하는 위치의 적절성 확인
      • GPS, IP, 콜백 등
    • 행위 기반 인증(Something You Do)
      • 사용자의 행동 정보를 이용해 인증 수행 
      • 서명, 동작 등

13. 보안 아키텍처 / 보안 프레임워크


보안 아키텍처

  • 보안 요소 및 보안 체계를 식별하고 이들 간의 관계를 정의한 구조

보안 프레임워크

  • 안전한 시스템 환경을 유지하고 보안 수준을 향상시키기 위한 체계
  • ISO 27001
    • 정보보안 관리 국제 표준
    • 일종의 보안 인증이자 가장 대표적인 보안 프레임워크

14. 로그 분석


로그

  • 시스템 사용에 대한 모든 내역을 기록해 놓은 것

리눅스 로그

  • 리눅스에서는 시스템의 모든 로그를 /var/log 디렉터리에서 기록하고 관리한다
  • 로그 파일을 관리하는 syslogd 데몬은 /etc/syslog.conf 파일을 읽어 로그 관련 파일들의 위치를 파악한 후 로그 작업을 시작한다.

윈도우 로그

  • 이벤트 로그 형식으로 시스템의 로그를 관리한다.
  • 이벤트 뷰어를 이용하여 이벤트 로그를 확인할 수 있다.

15. 보안 솔루션


보안 솔루션

  • 외부로부터의 불법적인 침입을 막는 기술 및 시스템
  • 주요 보안 솔루션
    • 방화벽
    • 침입 탐지 시스템
    • 침입 방지 시스템
    • 데이터 유출 방지
    • 웹 방화벽
    • VPN
    • NAC
    • ESM
  • 방화벽
    • 내부의 네트워크와 인터넷 간에 전송되는 정보를 선별하여 수용, 거부, 수정하는 기능을 가진 침입 차단 시스템
  • 침입 탐지 시스템(IDS)
    • 컴퓨터 시스템의 비정상적인 사용, 오용, 남용 등을 실시간으로 탐지하는 시스템
    • 오용 탐지 : 미리 입력해 둔 공격패턴이 감지되면 이를 알려줌
    • 이상 탐지 : 평균적인 시스템의 상태를 기준으로 비정상적인 행위나 자원의 사용이 감지되면 이를 알려줌
  • 침입방지 시스템(IPS)
    • 비정상적인 트래픽을 능동적으로 차단하고 격리하는 보안 솔루션
  • 데이터 유출 방지(DLP)
    • 내부 정보의 외부 유출을 방지하는 보안 솔루션
  • 웹 방화벽
    • 일반 방화벽이 탐지하지 못하는 SQL 삽입(Injection) 공격, Cross-Site Scripting(XSS) 등의
      웹 기반 공격을 방어할 목적으로 만들어진 웹 서버에 특화된 방화벽
  • VPN
    • 공중 네트워크와 암호화 기술을 이용하여 사용자가 마치 자신의 전용 회선을 이용하는 것처럼 해주는 보안 솔루션
  • NAC
    • 네트워크에 접속하는 내부 PC의 일관된 보안 관리 기능을 제공하는 보안 솔루션
    • 내부 PC의 소프트웨어 사용 현황을 관리하여 불법적인 소프트웨어 설치를 방지
  • ESM
    • 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합하여 관리하는 보안 솔루션