Cohe

9-1 소프트웨어 개발 보안 설계 본문

자격증 공부/정보처리기사 실기

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

코헤0121 2024. 10. 8. 17:24
728x90

소프트웨어 개발 보안 설계: 완벽 가이드

1. 소프트웨어 개발 보안의 개념

소프트웨어 개발 보안은 개발 과정에서 보안을 고려하여 안전한 소프트웨어를 만드는 것을 목표로 합니다. 이는 다음과 같은 활동을 포함합니다:

  • 소스 코드의 보안 취약점 제거
  • 보안을 고려한 기능 설계 및 구현
  • 개발 전 과정에서의 보안 활동 수행

1.1 개발 단계별 보안 활동

단계 활동
요구사항 명세 - 보안 항목 식별
- 보안 요구사항 명세서 작성
설계 - 위협 모델링
- 보안 설계 검토
- 보안 통제 수립
구현 - 표준 코딩 정의서 준수
- 소스 코드 보안 약점 진단
테스트 - 모의침투 테스트
- 동적 분석
유지보수 - 지속적인 개선
- 보안 패치 관리

2. 소프트웨어 개발 보안의 구성요소

소프트웨어 개발 보안은 다음 세 가지 주요 요소로 구성됩니다:

  1. 기밀성 (Confidentiality)

    • 정의: 인가되지 않은 개인 혹은 시스템의 접근과 정보 노출 차단
    • 구현 방법: 암호화, 접근 제어
  2. 무결성 (Integrity)

    • 정의: 데이터의 정확성 및 완전성 보장, 비인가된 변경 방지
    • 구현 방법: 해시 함수, 전자서명
  3. 가용성 (Availability)

    • 정의: 인가된 사용자의 지속적인 시스템 및 데이터 접근 보장
    • 구현 방법: 백업, 장애 복구 시스템

2.1 주요 용어

용어 설명
자산 (Asset) 조직이 가치를 부여한 대상 (예: 서버, 중요 데이터)
위협 (Threat) 자산에 악영향을 끼칠 수 있는 사건이나 행위
취약점 (Vulnerability) 위협이 발생할 수 있는 시스템의 약점
위험 (Risk) 위협이 취약점을 이용해 자산에 손실을 가져올 가능성

3. 주요 공격 기법과 대응 방안

소프트웨어 개발 과정에서 고려해야 할 주요 공격 기법들과 그에 대한 대응 방안을 자세히 살펴보겠습니다.

3.1 DoS/DDoS 공격

정의

  • DoS(Denial of Service): 시스템의 자원을 고갈시켜 서비스를 마비시키는 공격
  • DDoS(Distributed DoS): 여러 대의 공격 지점에서 동시에 DoS 공격을 수행

주요 유형

  1. SYN 플러딩

    • 공격 방식: TCP 연결 과정의 3-way handshake를 악용. SYN 패킷만 대량으로 보내고 ACK를 보내지 않아 서버의 연결 대기 큐를 소진
    • 영향: 정상적인 연결 요청을 처리할 수 없게 됨
  2. UDP 플러딩

    • 공격 방식: 대량의 UDP 패킷을 임의의 포트로 전송
    • 영향: 서버가 "포트 도달 불가" ICMP 응답을 생성하느라 자원을 소모
  3. HTTP GET 플러딩

    • 공격 방식: 웹 서버에 대량의 HTTP GET 요청을 전송
    • 영향: 웹 서버의 처리 능력 저하 및 대역폭 소진
  4. Slowloris 공격

    • 공격 방식: HTTP 요청을 매우 천천히 부분적으로 보내 연결을 오래 유지
    • 영향: 웹 서버의 연결 풀을 고갈시킴

대응 방안

  1. 트래픽 모니터링 및 필터링

    • 비정상적인 트래픽 패턴 탐지 및 차단
    • 임계치 기반의 필터링 규칙 설정
  2. 방화벽 및 IPS 구축

    • 네트워크 단에서 공격 트래픽 차단
    • 시그니처 기반 및 행위 기반 탐지 활용
  3. CDN(Content Delivery Network) 활용

    • 트래픽 분산 및 대용량 공격 흡수
  4. 자원 확장 및 로드 밸런싱

    • 서버 자원의 동적 확장(Auto Scaling)
    • 트래픽 부하 분산
  5. 연결 타임아웃 설정

    • 연결 대기 시간 제한으로 자원 고갈 방지
  6. 캡챠(CAPTCHA) 활용

    • 자동화된 공격 요청 차단

3.2 SQL 인젝션

정의

  • 악의적인 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 공격

공격 유형

  1. 오류 기반 SQL 인젝션

    • 데이터베이스 오류 메시지를 이용해 정보를 추출
  2. UNION 기반 SQL 인젝션

    • UNION 구문을 이용해 추가 쿼리 결과를 반환받음
  3. Blind SQL 인젝션

    • 참/거짓 질의를 통해 정보를 유추
  4. 시간 기반 SQL 인젝션

    • 쿼리 실행 시간 차이를 이용해 정보를 추출

대응 방안

  1. 입력값 검증 및 필터링

    • 특수문자 및 SQL 키워드 필터링
    • 화이트리스트 방식의 입력 검증
  2. 준비된 구문(Prepared Statement) 사용

    • SQL 쿼리와 데이터를 분리하여 처리
    • 매개변수화된 쿼리 사용
  3. 저장 프로시저 활용

    • 미리 정의된 프로시저를 통해 쿼리 실행
  4. 최소 권한 원칙 적용

    • 데이터베이스 사용자 계정의 권한 최소화
  5. 에러 메시지 최소화

    • 상세한 에러 정보 노출 방지
  6. 웹 방화벽(WAF) 사용

    • SQL 인젝션 공격 패턴 탐지 및 차단

3.3 크로스 사이트 스크립팅 (XSS)

정의

  • 웹 페이지에 악성 스크립트를 삽입하여 사용자 측에서 실행되게 하는 공격

공격 유형

  1. 저장형 XSS

    • 악성 스크립트가 서버에 저장되어 다른 사용자에게 전달됨
    • 예: 게시판 글, 댓글 등
  2. 반사형 XSS

    • 악성 스크립트가 URL 파라미터 등을 통해 즉시 반사되어 실행됨
    • 예: 검색 결과, 에러 메시지 등
  3. DOM 기반 XSS

    • 클라이언트 측 스크립트가 DOM을 조작하여 발생
    • 서버를 거치지 않고 브라우저에서 직접 실행됨

대응 방안

  1. 입력값 검증 및 인코딩

    • 특수문자 및 스크립트 태그 필터링
    • HTML 엔티티 인코딩 적용
  2. 콘텐츠 보안 정책(CSP) 적용

    • 허용된 스크립트 소스만 실행되도록 제한
  3. HttpOnly 플래그 사용

    • 쿠키에 대한 스크립트 접근 방지
  4. 출력값 이스케이핑

    • 동적으로 생성되는 HTML, JavaScript, CSS 등에서 특수문자 이스케이핑
  5. 라이브러리 및 프레임워크 활용

    • XSS 방어 기능이 내장된 검증된 라이브러리 사용
  6. 브라우저 XSS 필터 활용

    • X-XSS-Protection 헤더 사용

3.4 CSRF (Cross-Site Request Forgery)

정의

  • 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격

공격 과정

  1. 사용자가 취약한 사이트에 로그인하여 세션을 유지
  2. 공격자가 준비한 악성 사이트에 접속
  3. 악성 사이트에서 자동으로 취약한 사이트로 요청을 전송
  4. 브라우저가 자동으로 쿠키를 포함하여 요청을 전송
  5. 취약한 사이트는 정상적인 요청으로 인식하고 처리

대응 방안

  1. CSRF 토큰 사용

    • 각 요청마다 unique한 토큰을 생성하여 검증
  2. Referer 검증

    • 요청의 출처를 확인하여 허용된 도메인인지 검증
  3. SameSite 쿠키 속성 사용

    • 크로스 사이트 요청 시 쿠키 전송 제한
  4. Double Submit Cookie 패턴

    • 쿠키와 요청 파라미터에 동일한 랜덤 값을 포함시켜 검증
  5. 사용자 인증 강화

    • 중요 기능에 대해 재인증 요구
  6. 캡챠(CAPTCHA) 활용

    • 자동화된 요청 방지

3.5 버퍼 오버플로우

정의

  • 프로그램이 할당된 메모리 버퍼의 경계를 넘어 데이터를 쓰거나 읽을 때 발생하는 취약점

공격 유형

  1. 스택 기반 버퍼 오버플로우

    • 로컬 변수나 함수의 리턴 주소가 저장된 스택 영역 공격
  2. 힙 기반 버퍼 오버플로우

    • 동적으로 할당된 메모리 영역 공격

대응 방안

  1. 안전한 함수 사용

    • strcpy() 대신 strncpy(), gets() 대신 fgets() 등 사용
  2. 경계 검사

    • 입력 데이터의 길이를 항상 검증
  3. ASLR (Address Space Layout Randomization)

    • 프로세스의 메모리 배치를 무작위화하여 공격 어렵게 함
  4. DEP (Data Execution Prevention)

    • 데이터 영역에서 코드 실행을 방지
  5. 스택 가드(Stack Guard)

    • 스택에 카나리(Canary) 값을 삽입하여 변조 탐지
  6. 컴파일러 보안 옵션 활성화

    • 스택 보호, 버퍼 오버플로우 감지 옵션 등 사용

4. 암호화 알고리즘

4.1 대칭키 암호화

  • 정의: 동일한 키로 암호화와 복호화를 수행
  • 알고리즘 예: AES, DES, ARIA
  • 장점: 속도가 빠름
  • 단점: 키 관리의 어려움

4.2 비대칭키 암호화

  • 정의: 공개키와 개인키 쌍을 사용
  • 알고리즘 예: RSA, ECC
  • 장점: 키 교환의 안전성
  • 단점: 대칭키에 비해 느림

4.3 해시 함수

  • 정의: 임의의 길이의 입력을 고정 길이의 출력으로 변환
  • 알고리즘 예: SHA-256, MD5 (보안상 취약하여 사용 비권장)
  • 용도: 무결성 검증, 패스워드 저장

5. 보안 프로토콜

5.1 SSL/TLS

  • 정의: 웹 통신의 암호화 및 인증을 위한 프로토콜
  • 특징:
    • 전송 계층에서 동작
    • 인증서를 통한 신원 확인
  • 사용 예: HTTPS

5.2 IPSec

  • 정의: IP 계층에서의 보안 프로토콜
  • 모드:
    • 전송 모드: 페이로드만 보호
    • 터널 모드: IP 패킷 전체 보호
  • 사용 예: VPN

6. 개발 보안 방법론

  • 민감한 정보를 통신 채널을 통하여 전송 시에는 반드시 암 • 복호화 과정을 거쳐야 하고, IPSec, SSL/TLS, S-HTTP 등 보안 채널을 활용하여 전송한다.

6.1 MS-SDL (Microsoft Security Development Lifecycle)

  • 마이크로소프트에서 개발한 보안 개발 생명주기
  • 단계: 교육 → 요구사항 → 설계 → 구현 → 검증 → 릴리스 → 대응

6.2 OWASP CLASP (Comprehensive, Lightweight Application Security Process)

  • OWASP에서 제공하는 경량 보안 프로세스
  • 주요 활동: 보안 요구사항 수집 → 아키텍처 및 설계 검토 → 코드 검토 → 보안 테스트

7. 정보 자산 관리

7.1 자산 분류

구분 예시
소프트웨어 응용 프로그램, 운영체제
하드웨어 서버, 네트워크 장비
데이터 데이터베이스, 파일
인적 자원 개발자, 관리자

7.2 위험 평가 및 대응

  1. 자산 식별
  2. 위협 분석
  3. 취약점 평가
  4. 위험도 산정
  5. 대응 방안 수립
구분 설명 사용 예시
소프트웨어 - 상용 또는 자체 개발된 소프트웨어 자산 - 애플리케이션, 개발도구, 유틸리티
하드웨어 - 대외 서비스 또는 개인 사용을 위해 사용됨 서버, PC, 노트북, 라우터, 스위치
데이터 - 전자적 형태로 저장되는 데이터 데이터베이스, 데이터파일
문서 - 종이 매체로 된 정보자산
- 업무 목적 문서, 기록물 결재문서, 계약서, 합의서
시설 - 시스템 설치, 운영 장소 등 물리적 공간 및 시설 사무실, 전산실, 통신실
지원설비 - 정보시스템 운영을 지원하기 위한 설비 UPS, 항온항습기, 발전기
인력 • 시스템 운영 업무 수행 중인 인력 내부직원, 협력업체

8 SW 개발 보안 적용 사례

  • SW 개발 보안의 대표적인 사례로는 BSIMM, Open SAMM, Seven Touchpoints, MS-SDL, OWASP CLASP 등의 방법론이 있다.
구분 설명
BSIMM - 미국 국토안보국의 지원을 받아 수행된 소프트웨어 보증 프로그램
- 보안 활동의 성숙도 수준을 영역별로 측정함으로써 소프트웨어 개발에 필요한 보안 능력 향상을 목표로 하는 개발 프레임워크
Open SAMM • OWASP에서 개발한 개방형 보완 프레임워크
• 개방을 원칙으로 소규모, 중규모, 대규모로 점진적인 확대가 가능한 융통성 있는 프레임워크
• BSIMM과는 달리 설계 리뷰와 코드 리뷰, 그리고 보안 테스팅을 3개의 중요한 검증 활동으로 정의함으로써 이들 활동 간의 연계성 강조
Seven TouchPoints • 실무적으로 검증된 개발 보안 방법론 중 하나로써 SW 보안의 모범 사례를 SDLC(Software Development Ufe Cycle)에 통합한 소프트웨어 개발 보안 생명주기 방법론
MS SDL • 마이크로소프트사가 2004년 이후 자사의 소프트웨어 개발에 의무적으로 적용하도록 고안한 보안강화 프레임워크
• SDL은 개발 중인 제품이 보안 위협에 대해 얼마나 강인한가를 측정하기 위해 동일한 제품에 대해 ‘pre-SDL’과 ‘post-SDL’의 두 개의 버전으로 테스트
OWASP CLASP • 개념 관점, 역할 기반 관점, 활동평가 관점, 활동구현 관점, 취약성 관점 등의 활동중심, 역할 기반의 프로세스로 구성된 보안 프레임워크로 이미 운영 중인 시스템에 적용하기 쉬운 보안 개발 방법론
• 프로그램 설계나 코딩 오류를 찾아내어 개선하기 위해 개발팀에 취약점 목록을 제공

'자격증 공부 > 정보처리기사 실기' 카테고리의 다른 글

10. 애플리케이션 테스트 관리  (3) 2024.10.10
9-2 소프트웨어 개발 보안 구현  (1) 2024.10.09
8. 서버 프로그램 구현  (1) 2024.10.07
5. 인터페이스 구현  (3) 2024.10.05
4. 통합 구현  (0) 2024.10.05