Replicated

설계 단계 보안 강화 활동 본문

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

설계 단계 보안 강화 활동

라구넹 2025. 6. 12. 19:11

설계 단계 보안 개발 필요성

- 설계 단계는 기능 및 비기능 요구사항을 충족시키기 위한 소프트웨어의 구조와 구성 요소를 명확하게 정의하는 단계

- 설계 단계에서 보안 항목을 반영하지 않으면 이후 구현 단계에서 소프트웨어 일관성이 떨어지거나, 단순 수정을 통해 보안 항목을 만족시킬 수 없는 경우 발생 가능

- 설계 시 반영하지 못한 항목 반영 .. 구현 시 5배, 제품 출시 이후엔 30배까지도 추가 비용이 들 수도 있음

 

보안 설계 원칙

설계에 보안을 통합 (Security by Design)

- 범위 정의: 설계 범위에 대한 명확한 정의

- 가정 명시화: 필요한 가정에 대한 명시화

- 보안 요구사항 대해 최종 목표로 표현

    - CIA에 근거한 작성

    - 보안 요구사항에 대해 최종 목표로 표현

    - 중요한 완화 조치를 위해 허용 가능한 비용과 trade-off를 고려

- 위협 모델링

    - 설계 프로세스에 위협 모델링 내재화

    - 잠정적인 설계 진행 후 위협 모델링 수행 후 대안 검토

    - 필수 위협 모델을 기준 선으로 산정한 후 설계 대안 검토

- 보안 기능 추가를 위한 유연성을 고려해 설계

- 특별히 우려되는 특정 공격이 있을 경우 해당 공격 시도를 모니터링 가능하게 시스템 구축

- 사용성과 보안성이 충돌할 경우, 프로토타입을 통한 검증 .. 실제와 다를 수 있음 

 

인터페이스 설계

- 인터페이스는 각 모듈 및 시스템의 경계를 정의

- 설계 범위 내의 모든 인터페이스를 정의하고 각 인터페이스 보안에 대한 명확한 정의

- 보안 통신 프로토콜과 같이 복잡한 인터페이스는 독자적인 보안 설계 필요

- 인터페이스 보안 설계 시 CIA 속성 포함

 

데이터 처리 설계

- 데이터 처리는 모든 설계의 중심

- 데이터 민감도 분류 및 안전한 데이터 처리를 위한 일관된 설계 진행

- 가급적 민감한 데이터의 이동을 제한

 

개인정보보호를 설계에 통합

- 개인 정보는 매우 민감한 데이터

- 설계자는 개인정보보호를 정책을 숙지. 

- 서비스에 필요한 개인정보 처리 방안을 정책에 맞게 명시적으로 설계

- 개인정보 접근 및 사용에 대한 로깅 및 감사 기능 설계

 

소프트웨어 수명주기 전반에 걸친 계획

- 설계 시 소프트웨어의 전체 수명에 걸쳐 보안적 측면 검토

- 종료 시 데이터 처리에 대한 명시, 필요 시 일정 기간 유지 및 백업본 폐기 정책 등

 

Trade off 처리

- 보안 완화 처리 시 소프트웨어 복잡성 증가

- 상충하는 우선 순위들 사이의 조정 필요 

- 이상적인 원칙과 실제 시스템 구축을 위한 실용적인 요구 사이에서 적절한 균형을 맞추는 것이 안전한 소프트웨어 설계의 핵심

- 완벽한 보안은 목표 x, 소프트웨어 설계 시에 트레이드오프를 명시화하여 합리적인 타협적 도출

 

설계 단순성

- 단순함이 궁극적인 정교함

- 복잡한 기능이 보안 메커니즘과 상호작용하는 경우, 복잡성 증가

- 기능과 보안을 분리하여 계층화된 모델을 이용한 단순성 제공

 

설계 속성

- 설계의 경제성: 설계 단순성과 제공 기능 복잡성 

- 투명한 설계: 보안은 설계의 비밀성에 의존하지 않음

 

노출 최소화 속성

- 최소 권한: 작업에 필요한 최소 권한만 부여

- 최소 정보: 작업에 필요한 최소 정보만 제공, 작업이 완료된 정보는 삭제 (메모리, 캐시 등)

- 허용목록 관리: 차단 목록으로 관리하기보다는 허용 목록으로 관리

- 예측 가능성 금지: 공격자에 의해 예측 가능한 정보(데이터, 행동 등) 사용 금지

- 실패 시 완전한 종료 처리: 문제 발생 시 오류 처리 및 완전한 상태로 종료 처리

- 최소 접근 경로: 보호 자산에 대한 접근은 일관된 최소 접근 경로만을 허용

- 최소 공통 매커니즘: 공유 메커니즘을 최소화해서 독립적인 프로세스들 사이의 격리 유지

 

중복적 속성

- 심층 방어: 독립적인 보호 계층을 중복적으로 결합하여 보안 강화

- 권한 분리: 독립적인 컴포넌트를 이용한 권한 분리 가능

 

신뢰와 책임 속성

- 신뢰에 대한 확인성: 신뢰는 항상 확고한 증거를 바탕으로 하는 명백한 선택

- 보안 책임 수용: 모든 소프트웨어 전문가는 보안을 책임져야 하는 의무가 있음. 보안은 기본적 속성.

 

안티 패턴 속성 (피해야 할 패턴)

- 명확하지 않은 권한 상승: 신뢰 경계에 대한 잘못된 이동

- 패치 불가능한 컴포넌트: 컴포넌트는 취약성 발견 시 바로 패치가 가능하여야 함


보안 설계 기준

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

- 사용자 프로그램의 입력 데이터에 대한 유효성 검증 체계 설계

- 유효하지 않은 값에 대한 처리 방법 설계

 

2. 보안 기능

- 인증, 접근 통제, 권한 관리, 비밀번호 등의 정책이 적절하게 반영될 수 있도록 설계

 

3. 에러처리

- 에러 또는 오류 상황에 대한 완전한 처리가 되지 않아 중요 정보 유출 등 보안 취약점이 발생하지 않도록 설계

 

4. 세션통제

- TCP를 이용하여 연결을 유지하는 경우 세션을 안전하게 할당하고 관리하여 세션 정보 노출이나 세션 하이재킹과 같은 침해사고가 발생하지 않도록 설계

 

 

보안 설계 적용 방법

- 설계 항목 적용 계획서

- 유즈케이스 다이어그램, 플로우차트, DFD, 화면 설계서 등을 작성