본문 바로가기

보안/시큐어코딩

[소프트웨어 개발보안 방법론] MS-SDL

마이크로소프트사는 SDL(Secure Develop Lifecycle) 통한 소프트웨어 개발 프로세스를 개선함으로써 시스템 취약점을 획기적으로 줄일 수 있었음




Pre-SDL 단계


소프트웨어 개발팀의 구성원들이 보안의 기초와 최신 보안 동향에 대한 정보를 매년 1회 교육을 받을 수 있도록 한다.  보안 교육은  다음 내용을 포함한다.

   - 시큐어 설계

   - 위협모델링

   - 시큐어 코딩

   - 보안 테스팅

   - 프라이버시


요구사항 단계


신뢰성 있는 소프트웨어를 구축하기 위한 기본 보안 요구사항과 프라이버시 요구사항을 정의한다.  필수항목으로는

   - SDL 방법론 적용 여부 결정

   - 보안책임자(Security Advisor) 선정

   - 보안 팀(Security Champion) 선정

   - 버그 리포팅 도구 정의

   - 보안 버그 경계 (security bug bar) 정의

   - 보안 위험 평가

   - 보안 계획서 작성

   - 버그 추적 시스템 정의  


설계 단계


구현에서부터 배포에 이르는 동안 수행해야 하는 작업 계획을 수립하는 단계이다.

 

   - 보안 설계 검토

   - 방화벽 정책 준수

   - 위협 모델링

   - 위협 모델 품질 보증

   - 위협모델 검토 및 승인

   - “보안 설계서” 문서 작성

   - 보안 디폴트 인스톨 실행

   - 모든 샘플소스코드의 보안검토 수행,

   - 안전하지 않은 함수와 코딩 패턴 알림

   - 설계변화요구에 관한 보안관련 사항 문서화

   - 위협모델을 통해 찾아진 취약성을 위한 작업 목록 작성


공격표면(attack surface) 계획수립 :  공격표면이라는 개념적으로 정보 및 금융자산, 지적 재산, 또는 비즈니스 수행 역량에 존재하는 잠재적 공격 지점을 확인하는 과정을 의미한다. 위협 모델링에서 공격 표면 관리는 일종의 네트워크, 애플리케이션, 시스템등 공격자들이 데이터나 정보를 수집하는 지점을 확인하고 공격을 예방하는 것



구현 단계


보안 및 프라이버시 문제점을 발견하고 제거하기 위해 개발 best practice를 수립하고 따르도록 한다.

   - 최신버전의 빌드 도구 사용

   - 금지된 API 사용 회피

   - ‘Execute' 허가를 통한 SQL 안전하게 사용

   - 저장된 프로시저에서 SQL 사용

   - 안전하게 소프트웨어를 사용하기 위해 필요한 사용자 정보 식별

   - 사용자 중심의 보안 문서 계획

   - 보안 형상관리에 관한 정보 생성

   - 자동화된 금지 API 변환 실행

   - 프로젝트 팀 전체와 모든 모범사례와 정책에 대해 정의, 문서화, 토론등



검증 단계


코드가 이전 단계에서 설정한 보안과 프라이버시를 지키는지  보안 및 프라이버시 테스팅과 보안 푸쉬(security push), 문서 리뷰를 통해 확인한다. 보안 푸쉬는 팀 전체에 걸쳐 위협 모델 갱신, 코드 리뷰, 테스팅에 초점을 맞춘 작업이다.

   -  커널-모드 드라이버를 위한 테스팅 완료

   -  COM 객체 테스팅 수행

   - 인증된 사이트 크로스 도메인 스크립팅을 위한 테스팅

   - 애플리케이션 검증 테스트 수행

   - 파일 fuzzing 수행

   - 위협모델 검토 및 수정등

    - 보안 테스팅 계획 완료

    - 침투 테스팅 수행

    - 시큐어 코드 검토

    - 보안 푸쉬를 시작하기 전 모든 코드에 대한 우선순위 결정

    - 보안 문서 계획서 검토등


참고: https://www.microsoft.com/en-us/sdl/



[참고] 위협모델링


위협모델링은 자산에 피해를 줄 수 있는 위협위험도

계산하고, 위협을 완화하기 위한 대응 조치를 파악한다.

개발보안 방법론에 따라 분석단계,또는 설계단계에게 수행하도록 권장하고 있다.

요구사항정의서가 도출되고, 설계에 들어가기 중간단계에 수행하는 것이 적절하다.


1단계: 위협 모델링을 수행하기 위한 보안 팀 구성


2단계: 애플리케이션 분해 작업 수행


3단계: 위협도출

             Spooping Identity(신분위장)

             Tampering with data(데이터변조)

             Repudiation(부인)

             Information disclosure(정보유출)

             Denial of Service, Dos(서비스거부)

             Elevation of privilege(권한상승)


4단계: 도출된 위협에 대한 위험도 계산

           Damage potential(예상피해)

             Reproducibility(재현확률)

             Exploitability(공격용이도)

             Affected users(영향을 받는 사용자)

             Discoverability(발견용이성)


5단계: 대응기법선택

           문제점을 무시한다.

             문제점을 사용자에게 알린다.

             문제점을 제거한다.

             문제점을 고친다.


6단계: 대응기술 선택

           도출된 각 위협(STRIDE)을 제거하기 위해

             위협요소별 대응기술을 고려한다.

           S : 적절한인증,Keberos authenticationm, PKI시스템, 전자서명

           T : hash, ACLs, Message Authentication

           R : 전자서명, 감사로그

           I  : privacy-enhanced 프로토콜, 암호화, ACLs

           D : ACLs, 필터링, Throtting, QoS

           E : 최소권한으로 실행, group or role membership, input validation



소프트웨어 개발 보안 방법론을 적용하여 프로젝트를 수행  하는 경우 취약점이 대폭 감소하여 보안패치와 같은 유지보수 비용이 확연하게 감소하였다.