소프트웨어 보안 보증
Software security assurance![]() |
다음에 대한 시리즈 일부 |
정보 보안 |
---|
관련 보안 카테고리 |
위협 |
|
방어 |
소프트웨어 보안 보증은 소프트웨어에 포함되어 있고 그 소프트웨어에 의해 제어되는 데이터와 자원을 보호하는 소프트웨어를 설계하고 구현하는 데 도움을 주는 프로세스다. 소프트웨어는 그 자체로 자원이기 때문에 적절한 보안을 제공해야 한다.
특별히 소프트웨어를 목표로 하는 위협의 수가 증가하고 있기 때문에, 우리가 생산하거나 조달하는 소프트웨어의 보안은 반드시 보장되어야 한다. "정보기술에 의존함에 따라 소프트웨어 보장은 비즈니스 연속성, 국가 안보, 국토 안보의 핵심 요소가 되고 있다."[1]
소프트웨어 보안 보장이란?
SSA(Software Security Assurance, 소프트웨어 보안 보증)는 소프트웨어가 사용, 제어 및 보호하는 데이터와 자원의 손실, 부정확성, 변경, 사용 불가능 또는 오용에 의해 야기될 수 있는 잠재적 위해와 일치하는 보안 수준에서 작동하도록 설계되도록 하는 과정이다.
소프트웨어 보안 보증 프로세스는 소프트웨어에 포함되거나 소프트웨어에서 사용할 정보를 식별하고 분류하는 것으로 시작한다. 그 정보는 민감도에 따라 분류되어야 한다. 예를 들어, 가장 낮은 범주에서 보안 위반의 영향은 미미하다(즉, 소프트웨어 소유자의 임무, 기능 또는 평판에 미치는 영향은 무시할 수 있다). 그러나 상위 범주의 경우, 그 영향은 인간의 삶에 위협이 될 수 있고, 소프트웨어 소유자의 임무, 기능, 이미지 또는 평판에 회복할 수 없는 영향을 미칠 수 있으며, 또는 중요한 자산이나 자원의 손실로 이어질 수 있다.
일단 정보가 분류되면 보안 요건이 개발될 수 있다. 보안 요건은 네트워크 접속 및 물리적 접속, 데이터 관리 및 데이터 접속, 환경 제어(전원, 에어컨 등) 및 오프라인 저장, 인적 자원 보안, 감사 추적 및 사용 기록 등을 다루어야 한다.
소프트웨어 보안 문제의 원인은 무엇인가?
소프트웨어의 모든 보안 취약성은 소프트웨어 내의 보안 버그 또는 결함의 결과물이다. 대부분의 경우 이러한 결함은 (1) 불만족 또는 요구조건 충족 실패, (2) 소프트웨어 요구조건의 오류 또는 누락이라는 두 가지 주요 원인에 의해 발생한다.
부적합 또는 요구 사항 충족 실패
불만족상태는 간단할 수 있다-가장 일반적인 것은 코딩 오류 또는 결함이다- 또는 더 복잡하다(즉, 미묘한 타이밍 오류 또는 입력 유효성 검사 오류). 부적합에 대한 중요한 점은 검증 및 검증 기법이 이를 탐지하도록 설계되어 있고, 보안 보증 기법이 이를 예방하도록 설계되어 있다는 점이다. 이러한 방법의 개선은 소프트웨어 보안 보증 프로그램을 통해 소프트웨어의 보안을 향상시킬 수 있다.
소프트웨어 요구 사항의 오류 또는 누락
소프트웨어 기반 시스템의 가장 심각한 보안 문제는 소프트웨어 요건이 시스템 상황에 맞지 않거나 부적절하거나 불완전할 때 발생하는 것이다. 불행히도 요구사항의 오류나 누락을 식별하기가 더 어렵다. 예를 들어, 소프트웨어는 정상적인 사용에서 요구하는 대로 정확하게 작동할 수 있지만, 요건은 일부 시스템 상태를 올바르게 다루지 못할 수 있다. 시스템이 이 문제 상태에 들어가면 예상치 못한 바람직하지 않은 행동이 발생할 수 있다. 이러한 유형의 문제는 소프트웨어 부문 내에서 처리할 수 없다. 이는 시스템 요건을 개발하고 소프트웨어에 할당하는 시스템 및 소프트웨어 엔지니어링 프로세스의 실패에서 비롯된다.
소프트웨어 보안 보증 활동
소프트웨어 보안 보증 활동에는 두 가지 기본 유형이 있다.
- 일부에서는 정보시스템에서 처리되는 정보가 적절한 민감도 범주에 할당되고, 적절한 보호요건이 시스템에서 개발되고 충족되었는지 확인하는 데 초점을 맞추고 있다.
- 다른 이들은 소프트웨어 지원 도구와 데이터의 통제와 보호뿐만 아니라 소프트웨어의 통제와 보호를 보장하는 소프트웨어 지원 도구 및 데이터의 통제와 보호에 초점을 맞추고 있다.
최소한 소프트웨어 보안 보증 프로그램은 다음을 보장해야 한다.
- 소프트웨어에 대한 보안 평가가 수행되었다.
- 소프트웨어에 대한 보안 요건이 확립되었다.
- 소프트웨어 개발 및/또는 운영 및 유지보수(O&M) 프로세스에 대한 보안 요구사항이 수립되었다.
- 각 소프트웨어 검토 또는 감사에는 보안 요건의 평가가 포함된다.
- 기존 소프트웨어에 대한 보안을 제공하고 제안된 변경사항이 의도치 않게 보안 위반이나 취약성을 발생시키지 않도록 하기 위한 구성 관리 및 시정 조치 프로세스가 마련되어 있다.
- 소프트웨어에 대한 물리적 보안이 적절하다.
보안 내 건물
소프트웨어 개발 프로세스를 개선하고 보다 나은 소프트웨어를 구축하는 것이 결함과 취약성이 적은 소프트웨어를 생산함으로써 소프트웨어 보안을 향상시키는 방법이다. 1차 접근방식은 보안 관련 기능을 제어하는 중요한 소프트웨어 구성요소를 식별하고 개발 및 테스트 프로세스 전반에 걸쳐 특별히 주의를 기울이는 것이다. 이러한 접근방식은 부족한 보안 자원을 가장 중요한 영역에 집중시키는 데 도움이 된다.
도구 및 기술
소프트웨어 보안 보증 활동을 지원하기 위해 사용할 수 있는 상용 기성품(COTS) 소프트웨어 패키지가 많다. 그러나 이러한 도구를 사용하기 전에 이러한 도구를 주의 깊게 평가해야 하며 그 효과성은 보장되어야 한다.
공통약점 열거
소프트웨어 보안을 개선하는 한 가지 방법은 소프트웨어 보안에 영향을 미칠 수 있는 가장 일반적인 약점을 더 잘 이해하는 것이다. 그런 점을 염두에 두고, 그러한 약점을 파악하고 기술하기 위해 미트레 주식회사가 후원하는 '[2]공통 약점 열거 프로젝트'라는 현재 커뮤니티 기반의 프로그램이 있다. 현재 매우 예비적인 형태인 이 목록에는 일반적인 소프트웨어 약점, 결함 및 결함에 대한 설명이 포함되어 있다.
보안 아키텍처/설계 분석
보안 아키텍처/설계 분석은 소프트웨어 설계가 보안 요건을 올바르게 구현하는지 검증한다. 일반적으로 말해서, 보안 아키텍처/설계 분석에 사용되는 4가지 기본 기법이 있다. [3][4]
논리분석
논리 분석은 소프트웨어 설계의 방정식, 알고리즘 및 제어 논리를 평가한다.
데이터 분석
데이터 분석은 소프트웨어 구성요소의 설계에 사용되는 각 데이터 항목의 설명과 의도된 용도를 평가한다. 인터럽트의 사용과 데이터에 대한 인터럽트의 영향은 인터럽트 처리 루틴이 다른 루틴에서 사용하는 중요한 데이터를 변경하지 않도록 특별히 주의를 기울여야 한다.
인터페이스 분석
인터페이스 분석은 컴퓨터 하드웨어, 소프트웨어 및 최종 사용자를 포함한 시스템의 다른 구성요소와의 소프트웨어 구성요소의 적절한 설계를 검증한다.
제약조건분석
제약조건 분석은 요구사항과 현실적 제한에 의해 부과되는 제한에 대해 소프트웨어 구성요소의 설계를 평가한다. 설계는 소프트웨어 구성요소에 대한 모든 알려져 있거나 예상되는 제한사항에 대응해야 한다. 이러한 제한사항에는 타이밍, 사이징 및 처리량 제약, 입력 및 출력 데이터 제한, 방정식과 알고리즘 제한 및 기타 설계 제한사항이 포함될 수 있다.
안전한 코드 검토, 검사 및 워크스루
코드 분석은 소프트웨어 소스 코드가 올바르게 작성되었는지 확인하고, 원하는 설계를 구현하며, 보안 요건을 위반하지 않는지 검증한다. 일반적으로, 코드 분석의 수행에 사용되는 기법은 설계 분석에 사용되는 기법들을 반영한다.
시큐어 코드 검토는 구축된 보안 요건, 보안 설계 개념, 보안 관련 규격의 충족 여부를 판단하기 위해 개발 단계 중 및 종료 시점에 실시한다. 이러한 검토는 전형적으로 검토 그룹에 자료를 제시하는 것으로 구성된다. 시큐어 코드 검토는 검토 중인 소프트웨어의 개발에 직접 관여하지 않은 사람이 실시할 때 가장 효과적이다.
비공식 리뷰
비공식적인 보안 코드 검토는 필요에 따라 실시할 수 있다. 비공식적인 검토를 수행하기 위해 개발자는 한 명 이상의 검토자를 선택하고 검토할 자료를 제공하거나 제시하기만 하면 된다. 자료는 의사 코드나 손으로 작성한 문서처럼 비공식적일 수 있다.
공식 후기
각 소프트웨어 컴포넌트에 대해 개발 단계 종료 시 정식 보안 코드 검토가 실시된다. 소프트웨어의 고객은 공식적인 검토 그룹을 임명하고, 이들은 소프트웨어 개발 수명 주기의 다음 단계로 진행하기 위해 "이동/불가" 결정을 내리거나 영향을 미칠 수 있다.
검사 및 보행시선
보안 코드 검사 또는 실사(實事)는 (소스 코드의) 단계별 또는 라인별(line by line) 단위로 제품을 상세하게 검사하는 것이다. 보안 코드 검사나 워크스루를 실시하는 목적은 오류를 찾아내는 것이다. 일반적으로 검사 또는 실습을 수행하는 그룹은 개발, 보안 엔지니어링 및 품질 보증의 동료로 구성된다.
보안 테스트
침투 시험을 포함하는 소프트웨어 보안 시험은 설계 및 코드 분석 결과를 확인하고, 소프트웨어 행동을 조사하며, 소프트웨어가 보안 요건을 준수하는지 검증한다. 보안 시험 계획 및 절차에 따라 실시되는 특수 보안 시험은 보안 요건에 대한 소프트웨어 준수를 확립한다. 보안 테스트는 소프트웨어 약점을 찾아내고 보안 요구 사항을 위반하는 방식으로 소프트웨어 장애를 유발할 수 있는 극단적이거나 예상치 못한 상황을 식별하는 데 초점을 맞춘다. 보안 시험 노력은 종종 "중요한" 보안 항목으로 분류되는 소프트웨어 요구 사항으로 제한된다.
참고 항목
참조
- ^ Karen Mercedes, Todor Winograd "보안 소프트웨어 생산을 위한 개발 수명 주기 향상" 2008년 10월 웨이백 머신, 데이터 & 분석 센터(Wayback Machine, Data & Analysis Center for Software)에 2012-03-30 보관
- ^ "Common Weaknesses Enumeration Project". Retrieved 26 August 2010.
- ^ 웹 응용 프로그램 보안 테스트
- ^ "보안 아키텍처 약점 카탈로그". 2017 IEEE 국제 소프트웨어 아키텍처 회의(ICSA). doi:10.1109/ICSAW. 2017.25.