Replicated

소프트웨어 보안 개발 방법론, 위협 모델링 본문

소프트웨어 보안개발방법론

소프트웨어 보안 개발 방법론, 위협 모델링

라구넹 2025. 6. 11. 20:02

SSDLC(Secure Software Development Life Cycle)

소프트웨어 요구사항

 

기능적 요구사항(Functional Requirements)

- 시스템이 수행해야 하는 구체적인 기능이나 동작을 명시

 

비기능적 요구사항(Non-Functional Requirements)

- 시스템의 품질과 제약사항 등을 명시

 

* 소프트웨어 비기능적 요구사항을 충족하기 어려운 이유?

- 소프트웨어 요구사항은 주로 기능적 요구사항을 중점에 두고 분석 및 설계가 진행됨. 비기능적 요구사항은 설계 시 제대로 식별되지 못하는 경우도 많고, 식별되어도 우선순위가 낮게 설정되는 경우가 있음

 


비기능적 요구사항

보안, 용량/처리량, 호환성, 신뢰성, 유지보수성/관리성, 확장성, 사용성

 

Security(보안)

- 시스템 데이터 및 기능을 보호하기 위한 정의

- 인증(Authentication)

- 인가(Authorization)

- 기밀성(Confidentiality)과 무결성(Integrity)

    - 중요 데이터 암호화 / 전송 데이터 암호화

    - 데이터 변조 방지 메커니즘/입력값 검증 요구사항

- 가용성(Availability)

    - 이중화 구성 요구사항

    - 백업 시스템 구성(장애복구) 요구사항

- 법적 준수성 (Compliance)

    - 정보보호 관련 법률 준수

    - 보안 감사 요구사항

 

Capacity(용량/처리량)

- 처리 가능한 성능 및 데이터 작업량 정의

- 저장 용량

    - DB 크기 / 백업 저장소 용량

- 처리 용량

    - 동시 사용자 수 / 초당 트랜잭션 처리량

- 메모리 용량

    - 시스템 메모리 요구사항

- 네트워크 용량

    - 대역폭 요구사항

    - 네트워크 트래픽 처리량

    - 동시 연결 수

- 성능 제약 조건

    - 응답 시간 요구사항

    - 처리 시간 제한

 

Compatibility (호환성)

- 시스템, 플랫폼, 환경의 확장성 정의

- 하드웨어 호환성

- 소프트웨어 호환성 (운영체재, 브라우저)

- 네트워크 호환성 (네트워크 표준 프로토콜 지원)

- 데이터 호환성 (파일 형식 지원, 인코딩 방식 지원)

- 버전 호환성 (이전 버전과의 하위 호환성 유지)

 

Reliability (신뢰성)

- 정해진 조건하에 안정적인 기능 수행 정의

- 가용성

- 데이터 신뢰성

- 장애관리

- 오류처리

- 재해복구

 

Maintainability (유지보수성 / 관리성)

- 시스템 운영 중 수정, 개선 용이성 정의

- 코드 품질

- 모듈화

- 테스트 용이성

- 변경 관리

- 문서화 및 디버깅 지원

 

Scalability (확장성)

- 시스템 부하 증가 시 효율적인 처리 정의

- 수직적 확장성

    - 단일 시스템 성능 향상

    - 메모리/CPU 확장 용이성

- 수평적 확장성

    - 로드 밸런싱 지원

    - 분산 시스템 및 클러스터링 지원

- 데이터 확장성

    - 데이터 분산 저장

- 성능 확장성

    - 동시 사용자 증가 대응

    - 트랜잭션 처리량 확장

- 자동 확장

    - 부하 기반 자동 확장

    - 리소스 할당 자동화

 

Usability (사용성)

- 사용자가 효율적으로 시스템을 사용 정의

- 사용 용이성

    - 직관적인 인터페이스

    - 사용자 가이드 및 도움말/튜토리얼 지원

- 효율성

    - 최소한의 사용자 동작

    - 단축키 지원

- 접근성

    - 다양한 입력 방식 지원

    - 장애인 사용자 지원

- 사용자 인터페이스

    - 디자인 일관성

    - 시각적 피드백

 

 

기능 / 비기능 요구사항 예제 - 온라인 쇼핑몰

기능적 요구사항 (Functional Requirements)

- 사용자 관리: 회원가입 및 로그인 기능 / 개인정보 수정 기능

- 상품 관리: 상품 검색 / 장바구니에 상품 담기 및 삭제 기능

- 주문처리: 결재 진행 및 주문 내역 확인

 

비기능적 요구사항 (Non-Functional Requirements)

- 페이지 로딩은 3초 이내

- 동시 접속자 처리는 최소 1000명 처리

- 모든 비밀번호는 salt와 해시 함수를 이용해 저장

- 결제 정보는 암호화 통신

- 정기적인 데이터 백업 진행

 


 

보안 개발 방법론

- 위협(Threat)은 어디에나 존재하지만 관리할 수 있다면 공존이 가능

- 소프트웨어 개발자는 공격자 관점의 사고가 필요

- 잠재적 위협에 대한 이해를 바탕으로, 소프트웨어에 보안성 내재화 작업이 필요

- 소프트웨어 개발 시 필요 지점에서 보안을 고려한 프로세스가 마련되어야 함

 

- 소프트웨어 개발 전 단계에 걸쳐 보안을 고려하여 안전한 소프트웨어를 개발하기 위한 체계적인 방법론

- 소프트웨어 개발 생명주기 (SDLC) 각 단계 별로 보안 활동을 통합한 프로세스

 

 

개발 보안 방법론 발전 배경

사이버 보안 위협 증가

- 인터넷 사용과 디지털 서비스 확대로 인한 사이버 공격 급증

- 금전적 이익 / 국가 안보 위협 / 정치적, 이념적 목적 등..

 

전통적 개발 방식 한계

- 전통적 -> 소프트웨어 개발 완료 후에 취약점을 점검하고 수정하는 방식 

- 개발 완료 또는 개발 후반부에 심각한 취약점 발견 시 많은 비용과 시간이 소요

- 보안 패치를 통한 사후 대응은 한계가 존재 (이미 발생한 피해)

 

법적, 제도적 요구사항 강화

- 개인정보 보호법, 정보통신망법 등 관련 법규 강화

- 공공기관 및 주요 기업들의 보안 인증 의무화 확대

- 보안 관련 국제 표준 가이드라인 제정

 

 

개발 보안 방법론 필요성

기술적 관점

- 보안 취약점 사전 예방

- 설계 단계로부터 보안 요구사항 검토 및 반영

- 체계적이고 지속적인 보안 품질 관리

 

비즈니스 / 경제적 관점

- 보안 사고로 인한 직접적 금전 손실 예방

- 기업 평판 및 신뢰도 하락 예방

- 법적 제재 및 배상 책임 리스크 감소

 

규제 준수 관점

- 법적 보안 요구사항의 체계적 대응

- 보안 인증 및 감사 대응

- 산업별 보안 표준 준수

 

 

보안 개발 방법론

- 개발 보안 방법론은 주로 비기능 요구사항에 초점

 

비기능 요구사항으로서의 보안

- 보안은 시스템 품질 속성.. 비기능 요구사항

- "무엇"보다는 "어떻게"

- 기능의 정상적인 동작을 보장하면서 추가적으로 고려해야 하는 품질 요소

 

보안 요구사항의 특징

- 시스템 전반에 걸쳐 적용되어야 함

- 직접적인 비즈니스 가치를 창출하진 않지만, 시스템 보호를 위해 필수적

 

개발 보안 방법론을 위한 기술적 관점

- 보안 아키텍처 설계

- 시큐어 코딩 구현 및 보안 프레임워크 / 라이브러리 활용

- 보안 취약점 진단 및 분석

- 보안 테스트 수행

- 보안 모니터링 및 운영 관리

 


소프트웨어 생명주기 각 단계별 보안 활동

요구사항 분석 단계

- 사용자의 문제를 구체적으로 이해하고 소프트웨어가 담당해야 하는 영역을 정의

- 요구사항 명세서

- 요구사항 중에서 보안 항목 요구사항 식별 활동 추가

- 시스템에서 어떤 정보를 관리하고 각 정보들에 대한 보안 등급을 결정

- 법률적 관점에서 중요도 점검

 

설계 단계

- 소프트웨어 구현을 준비하는 단계

- 시스템 전반적인 구조와 데이터 및 알고리즘, 사용자 인터페이스 설계

- 설계 명세서

- 요구 명세서, 설계 명세서 등을 이용해 단위 테스트 및 통합 테스트 시나리오 작성

- 시스템 위협들을 도출하는 위협 모델링 작업

- 위협 모델링 작업을 통해 도출된 내용을 설계에 반영

 

구현 단계

- 프로그래밍 수행 단계

- 각 모듈의 코딩과 디버깅을 수행, 그 결과를 검증하는 단위 테스트 / 모듈 테스트 수행

- 소스코드, 에러코드 정의서, 단위 테스트 결과서

- 표준 코딩 정의서 / 소프트웨어 개발 보안 가이드를 준수하여 개발

- 코드 리뷰를 이용한 코드 수준의 보안성 확인 및 안정성 보장

- 단위 테스트를 이용한 보안 취약점 점검

 

테스트 단계

- 개발된 모듈 및 시스템에 대한 통합 테스트 (요구사항 확인 및 사용자 검증 / 인수 테스트)

- 통합 테스트 결과서, 시스템 이행 계획서

- 동적 분석 도구를 이용한 보안성 검증

- 모의 침투 테스트 수행

 

유지보수 단계

- 소프트웨어 사용 중에 나타나는 문제점을 수정하거나 새로운 기능을 추가하여 좀 더 안정적인 소프트웨어로 발전시키기 위한 작업을 수행

- 소스코드 변경 관리 / 운영환경 변경 통제

- 보안 로그 관리 / 취약점 모니터링 및 대응

- 발생될 수 있는 보안 사고에 대한 관리 및 사고 대응, 패치 관리 및 교육 활동 수행

 

 

위협 모델링

- 시스템 설계 단계에서 잠재적인 보안 위협을 예측 및 분석하고 효과적인 통제를 구현하는 것을 목표로 함

- 시스템 보안 취약점을 식별하고 대응 방안 수립을 위한 체계적인 접근 방법

- 시스템의 취약 위험을 파악 -> 위협 요소 추출

- 사후 대방이 아닌 사전 예방을 목표로 비용 효율적인 보안 통제 구현

 

위협 모델링 프로세스

- 자산 식별

- 위협 식별

- 취약점 분석

- 위험 평가

- 대응 방안 수립

 

DFD (Data Flow Diagram)

- 시스템의 데이터 흐름을 시각화하여 보안 위협을 식별하는데 사용

- 신뢰 경계 (서로 다른 신뢰 수준의 경계) 간 데이터 흐름 파악

 

DFD 주요 구성요소 및 관련 위협

데이터 프로세스 (Data Process)

- 데이터를 처리하거나 변환하는 부분

- 주요 위협: 권한 상승, 코드 실행, 메모리 오염 등

- 위협 완화 방법: 입력 유효성 검증, 권한 관리, 메모리 안정성 확보

 

데이터 흐름 (Data Flow)

- 시스템 내 데이터 이동 경로

- 주요 위협: 데이터 탈취, 변조, 재전송 공격

- 위협 완화 방법: 암호화, 무결성, 인증

 

데이터 저장소 (Data Store)

- 데이터가 저장되는 위치

- 주요 위협: 무단 접근, SQL 인덱션, 데이터 유출

- 위협 완화 방법: 접근 제어, 입력 검증, 암호화 저장

 

외부 엔티티 (External Entity)

- 시스템과 상호작용하는 외부 요소

- 주요 위협: 시스템과 상호작용하는 외부 요소

- 위협 완화 방안: 강력한 인증, 세션 관리

 

 

* PFD (Process Flow Diagram)

- 시스템의 동작 프로세스를 시각화하여 보안 위협을 식별하는 도구

- 서비스 동작 흐름에 초점을 맞추어 악용 가능 사례 분석 (공격자 입장)


 

STRIDE

- Microsoft가 개발한 위협 모델링에 사용되는 분류 체계

- 보안 위협을 6가지 카테고리로 분류

 

Spoofing

- 다른 사용자 또는 시스템으로 위장하는 행위

- 피싱 사이트, IP 스푸핑, 세션 하이재킹

- 강력한 인증 메커니즘, 세션 관리 강화

 

Tampering

- 데이터나 코드를 무단으로 변경하는 행위

- 저장된 데이터 무단 수정, 전송 중인 데이터 변조, 실행 파일 변조

- 무결성 검사 구현, 전자서명 사용, 접근 통제 강화

 

Repudiation

- 행위 또는 트랜잭션 수행에 대한 부인 행위

- 트랜잭션 실행 부인, 메시지 송수신 부인, 시스템 접근 행위 부인

- 감사 로그 구현, 전자 서명 적용, 부인 방지 기능 구현

 

Information Disclosure

- 권한이 없는 사람에게 정보가 노출되는 현상

- 시스템 정보 노출, 개인정보 유출
- 암호화 적용, 접근 통제 강화, 데이터 분류 체계 수립

 

Denial of Service

- 정상적인 서비스 제공을 방해하는 행위

- DDoS 공격, 자원 고갈 공격, 서비스 과부하 유발

- 자원 할당 제한, 부하 분산 구현, DDoS 대응 체계 구축

 

Elevation of Privilege

- 비인가된 권한을 획득하는 행위

- 관리자 권한 탈취, 취약점을 이용한 권한 상승, 취약점을 이용한 상위 권한 명령 실행

- 최소 권한 원칙 적용, 권한 분리 구현, 입력값 검증 강화

'소프트웨어 보안개발방법론' 카테고리의 다른 글

MS-SDL  (0) 2025.06.12
위협 모델링 프로세스  (0) 2025.06.12
소프트웨어 개발 방법론  (0) 2025.06.11
보안 솔루션  (0) 2025.04.20
Software Supply Chain Attack  (0) 2025.04.20