3.5 보안성
보안성은 의도적이든 사고이든지 간에 외부의 공격으로부터 자신을 방어하는 시스템의 능력을 나타내는 시스템의 속성이다. 보안성은 많은 시스템이 인터넷으로 연결됨에 따라 점점 더 중요해졌다. 인터넷 연결은 추가적인 시스템 기능을 제공하지만 시스템은 적대적인 의도를 가진 사람에 의해서 공격받을 수 있다는 것을 의미한다. 인터넷 연결은 또한 특정 시스템의 취약점이 쉽게 파악되어 더 많은 사람이 쉽게 공격할 수 있다는 것을 의미하기도 한다. 하지만 마찬가지로 연결은 취약점을 수리할 수 있는 패치에 대한 배포를 쉽게 할 수 있다는 특징도 있다.
공격의 예는 바이러스, 권한이 없는 사람에 의한 시스템 서비스와 데이터에 대한 사용과 수정이다. 외부 공격이 시스템에 피해를 입힌다면, 보안의 정도에 관계없이 가용성, 신뢰성, 안전성을 서로 조정할 수 있다.
그 이유는, 가용성, 신뢰성, 안전성을 보장하기 위해서 모든 방법이 처음에 설치된 시스템과 같다는 사실에 의존하기 때문이다. 만약 처음에 설치된 시스템이 어떤 정도에서 조정이 이루어졌다면(예를 들어, 소프트웨어가 바이러스를 포함하도록 수정되었다면) 처음에 설정된 신뢰성과 안전성을 증가시키는 것은 더 이상 의미가 없다. 시스템 소프트웨어는 붕괴되고 더 이상 예측할 수 없는 방향으로 행동한다.
역으로, 시스템 개발 시의 오류는 보안에 구멍이 생기게 한다. 만약 시스템이 예기치 않은 입력에 반응하지 않고 배열 경계를 검사하지 않는다면, 공격자는 이러한 약점을 찾아내어 시스템에 접근할 것이다. 원래의 인터넷 웜과 10년 이상 지난 후의 Code Red 웜 같은 주요 보안 사고는 C 언어에서 배열 경계를 검사하지 않는다는 사실을 이용한 것으로 밝혀졌다. 그들은 시스템에 권한이 없는 접근을 허용하여 메모리에 덮어쓰는 기술을 이용하였다.
물론, 어떤 중대한 시스템에서는 보안성이 시스템 확실성의 가장 중요한 요소인 경우도 있다. 군사 시스템, 전자상거래 시스템, 비밀 정보의 처리와 교환을 포함하는 시스템은 고도의 보안성을 달성하도록 설계되어야 한다. 만약 항공 예약 시스템의 이용성이 낮으면, 불편을 초래하고 티켓 발행이 지연된다. 그러한 시스템이 취약하여 허위 예약을 받아들인다면, 해당 시스템을 소유한 항공사는 막대한 손해를 입을 수 있다.
외부 공격으로 인해 여러 종류의 피해를 입을 수 있다.
1. 서비스 거부 : 시스템은 정상적인 서비스를 할 수 없는 상태가 되어 버린다. 이것은 명백하게 시스템의 가용성에 영향을 미친다.
2. 프로그램과 데이터의 망실 : 시스템의 소프트웨어 부품이 권한이 없는 방법으로 수정된다. 이것은 시스템의 동작에 영향을 미쳐서 신뢰성과 안정성에도 영향을 미친다. 만약 피해가 심하면 시스템의 가용성이 영향을 받는다.
3. 비밀 정보의 누출 : 시스템에서 관리하는 정보가 비밀사항이지만 외부 공격에 의해 이 정보가 노출될 수 있다. 데이터의 종류에 따라서, 이것은 시스템의 안전성에 영향을 미치고 추후에 시스템의 가용성과 신뢰성에 영향을 미치는 공격이 될 수 있다.
용어 | 설명 |
노출(exposure) | 컴퓨터 시스템에서 가능한 손실 혹은 해. 이것은 데이터에 대한 망실 혹은 손실이 될 수 있거나, 혹은 보안 침입 후 복구에 필요한 시간과 노력을 낭비할 수 있다. |
취약점(vulnerability) | 손상 혹은 해를 입힐 수 있는 컴퓨터 기반 시스템에서의 약점이다. |
공격(attack) | 시스템 취약점에 대한 공격. 일반적으로 이것은 시스템의 외부로부터 오며 손실을 입히려는 의도를 갖는다. |
위협(threats) | 손실 혹은 해를 입히는 환경. 이것을 공격받기 쉬운 시스템 취약점으로 생각할 수 있다. |
통제(control) | 시스템 취약점을 감소시키기 위한 방어적인 측정. 암호가 접근 제어의 취약점을 감소시키는 통제의 예이다. |
확실성에 대한 다른 측면으로는 보안성과 관련된 전문 용어가 있다. 그중에 중요한 용어가 플리거가 설명한 대로 테이블에 정의되어 있다.
어떤 것은 안전성 용어와 비슷한데, 노출은 사고와 비슷하고 취약점은 위험과 비슷하다. 그러므로 시스템의 보안성을 달성하기 위해서 비교가능한 접근 방법을 사용한다.
1. 취약점 회피 :취약점이 생기지 않도록 시스템을 설계한다. 예를 들어, 시스템이 외부 공공 네트워크에 연결되지 않는다면 대중으로부터 공격받을 가능성이 없다.
2. 공격 탐지와 중립화 : 시스템은 취약점을 발견하고 노출되기 전에 제거하도록 설계한다. 취약점 탐지와 제거의 에는 바이러스 검사기를 사용하는 것이다.
3. 노출 제한 : 성공적인 공격의 결과를 최소화한다. 노출 제한의 에는 규칙적인 시스템 백업과 손상도니 소프트웨어가 재생성될 수 있도록 하는 형상 관리이다.
컴퓨터 기반 시스템에서의 대부분의 취약성은 기술적인 문제보다는 사람의 실수에서 기인한다. 사람들이 짐작하기 쉬운 패스워드를 사용한다든지 혹은 쉽게 발견될 수 있는 곳에 패스워드를 써 놓는다. 시스템 관리자는 접근 제어와 설정 파일을 지정하는데 오류를 범하며 사용자는 보호 소프트웨어를 설치하는 것을 잊는다. 보안을 증진하기 위해서는 사회-기술적 관점에서 어떻게 하면 시스템이 기술적 특성을 실제로 사용하고 안 하는지를 실행해 보아야 한다.
'공부 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 소프트웨어 프로세스2 (진화적 개발, 컴포넌트 기반 소프트웨어 공학) (0) | 2023.07.28 |
---|---|
[소프트웨어공학] 소프트웨어 프로세스1 (폭포수 모델) (0) | 2023.07.27 |
[소프트웨어공학] 중대한 시스템4 ( 안전성 ) (0) | 2023.07.25 |
[소프트웨어공학] 중대한 시스템3 (가용성과 신뢰성) (0) | 2023.07.23 |
[소프트웨어공학] 중대한 시스템2 (단순한 안전성 중심 시스템, 시스템 확실성) (1) | 2023.07.22 |