보안 취약점

**취약점**(vulnerability)은 악의적인 행위자가 보안을 손상시키는데 악용할 수 있는 시스템 설계, 실행 또는 관리상의 결함이나 약점이다. 시스템 관리자가 완벽함을 구현하기 위해 최선을 다하더라도, 사실상 모든 하드웨어와 소프트웨어에는 시스템이 예상대로 작동하지 않는 버그가 존재한다. 공격자가 시스템 리소스의 기밀성, 무결성 및 가용성을 손상시킬 수 있는 버그는 취약점으로 간주될 수 있다. 취약점은 시스템 결함, 결함에 대한 접근, 결함을 악용할 수 있는 능력의 교차점이다. 취약점을 익스플로잇하기 위해서, 공격자는 반드시 시스템의 약점에 접속할 수 있는 적어도 하나의 툴이나 기법을 가져야 한다. 이 경우에, 취약점은 또한 공격 영역이라고도 불린다.

취약점 관리는 취약점을 확인, 분류, 치료 그리고 완화시키는 주기적인 과정이다. 이 과정은 일반적으로 컴퓨터 시스템에서 소프트웨어 취약점을 나타낸다.

보안 위협은 취약점으로서 분류될 수 있다. 취약점의 사용을 같은 의미의 위험과 함께 사용하는 것은 헷갈릴 수 있다. 위험은 심각한 손실의 가능성과 관련된다. 취약점들 중에는 위험이 없는 것도 있다. 예를 들면 영향을 받은 자산이 값을 가지고 있지 않은 경우가 있다. 공격을 구현하기 위해 사용될 수 있는 하나 이상의 취약점을 익스플로잇 가능한 취약점이라고 한다. **취약성의 창문**(window of vulnerability)은 보안 구멍이 소개된 또는 사용중인 소프트웨어에서 분명해진 시간부터, 접근이 제거되고 보안이 바로잡히고, 공격이 비활성화된 시간 까지이다. - 제로 데이 공격을 보자.

보안 버그는 더 좁은 개념이다: 소프트웨어와 관련 없는 취약점이 있다:하드웨어, 사이트, 인적 취약점들이 소프트웨어 보안 버그와 관련 없는 것들의 예이다.

프로그래밍 언어에서 적절히 사용되기 어려운 구조체가 많은 취약점점들의 근원지이다.

## 정의
국제 표준화 기구 (ISO) 27005는 **취약점**(vulnerability)을:
: *하나 이상의 위협에 의해 익스플로잇될 수 있는 자산 또는 자산들의 그룹의 약점.*
자산은 정보 자원을 포함하는 비지니스 전략과 그것의 연속성 뿐만 아니라 조직의 임무를 지원하는 어떤 것도 될 수 있다.

국제 인터넷 표준화 기구 (IETF) RFC 2828은  **취약점**(vulnerability)을:
: *시스템의 디자인, 구현 또는 작업 그리고 관리에서의 결함이나 약점으로서, 시스템의 보안 정책을 침해하기 위해 익스플로잇될 수 있는 것.*

## 취약점과 위험 인자 모델
자원은 위협적인 행동에 의해 익스플로잇될 수 있는 하나 이상의 취약점을 가질 수 있다. 결과는 잠재적으로 자원들의 비밀성, 무결성 또는 가용성을 위협할 수 있다.

공격은 이것이 시스템 자원이나 그들의 동작을 바꾸고, 무결성 또는 가용성을 위협할 때 활성화 된다. "수동적인 공격"은 시스템의 정보를 사용하거나 배우는 것을 시도하지만, 시스템 자원에 영향을 미치고 비밀성을 위협하지는 않는다.
섬네일|OWASP: 위협 요인과 비즈니스 영향 간의 관계
OWASP는 약간 다른 용어들에서 같은 현상을 묘사한다. 공격 매개를 통한 위협적인 에이전트는 비지니스 영향과 관련된 IT 자원들에 대한 기술적 영향을 미치며 시스템과 관련된 보안 제어들의 취약점을 익스플로잇한다.

전체적인 그림은 위험 시나리오의 위험 요소들을 표시한다.

## 정보 보안 관리 시스템
정보 보안 관리와 관련있는 정책들의 집합(ISMS)은 보안 전략을 보장하기 위한 위험 관리 원리에 따라 관리하기 위해 개발되어 왔다. 이러한 대책들은 또한 보안 제어로도 부르지만, 정보 전송에 적용할 경우에는 보안 서비스라고 부른다.

## 분류
취약점들은 관련된 자원 클래스에 따라 분류된다.
* 하드웨어
** 습도에의 민감성
** 먼지에의 민감성
** 오염에의 민감성
** 보호되지 않은 저장소에의 민감성
* 소프트웨어
** 충분치 않은 테스팅
** 감사 추적의 부족
* 네트워크
** 보호되지 않은 통신 라인
** 안전하지 않은 네트워크 구조
* 직원
** 부적절한 리쿠르팅 과정
** 부적절한 보안 인식
* 위치
** 홍수의 위험이 있는 지역
** 신뢰성 없는 전력 공급
* 관리 기관
** 정기적 감사의 부족
** 지속적 계획의 부족
** 보안의 부족

## 원인
* 복잡함: 크고 복잡한 시스템은 결함과 의도되지 않은 접근점의 가능성을 높인다.
* 익숙함: 흔하고 잘 알려진 코드와 소프트웨어, 운영체제, 하드웨어를 사용하는 것은 공격자가 결함을 익스플로잇할 수 있는 정보를 제공할 가능성을 높인다.
* 연결성: 물리적 접속, 권한, 포트, 프로토콜 그리고 서비스들은 각각의 접근할 수 있는 시간이 늘어날수록 취약점은 증가하게 된다.
* 패스워드 관리 결함: 컴퓨터 사용자는 무차별 대입 공격에 취약한 암호를 사용한다. 사용자들은 프로그램이 접근할 수 있는 컴퓨터에 암호를 저장한다. 사용자들은 많은 프로그램과 사이트들에서 암호를 재사용한다.

* 근본적인 운영체제 설계 결함: 운영체제 설계자는 사용자/프로그램 관리에 차선의 정책을 선택한다. 예를 들면 기본 권한과 같은 정책을 가진 운영체제는 모든 프로그램과 사용자들에게 컴퓨터 전체에 접근할 수 있는 권한을 준다. 이 운영체제 권한은 바이러스와 악성코드가 관리자를 대신하여 명령어를 실행할 수 있게 한다.
* 인터넷 웹사이트 검색: 몇몇 인터넷 웹사이트들은 컴퓨터에 자동으로 설치될 수 있는 스파이웨어나 애드웨어를 포함한다. 이러한 웹사이트 방문 이후, 컴퓨터 시스템은 감염되고 개인 정보가 수집되고 다른 개인으로 보내질 수 있다.
* 소프트웨어 버그: 프로그래머는 익스플로잇할 수 있는 버그를 소프트웨어 프로그램 안에 남겨둘 수 있다. 소프트웨어 버그는 공격자가 애플리케이션을 악용할 수 있게 한다.
* 확인되지 않은 사용자 입력: 프로그램은 모든 사용자의 입력이 안전하다고 가정한다. 입력이 확인되지 않은 프로그램들은 의도되지 않은 명령어의 실행을 허용하게 된다.
* 과거의 실수를 배우지 않는 것. 예를 들면 IPv4 프로토콜 소프트웨어에서 발견된 취약점들이 새로운 IPv6에도 구현될 수 있다.
연구는 대부분의 취약한 부분이 사용자나 설계자 등 같이 사람에 의한 것이라는 점을 보여준다. 그러므로 사람들은 위협, 자원, 정보 자원 등의 역할에 따라 고려되어야 한다. 사회공학 기법은 증가하는 보안 고려 사항이다.

## 취약점 결과
보안 위반의 영향은 매우 크다. IT 관리자나 높은 관리직이 취약점이 있는 IT 시스템과 애플리케이션에 대해 쉽게 알 수 있는 것과 IT 위험에 대해 어떤 조치도 취하지 않는 것은 대부분의 경우에 좋지 않은 행위이다. 프라이버시 법은 관리자들이 보안 위험에 대한 영향과 가능성을 줄이는 것을 강요한다. 모의 해킹은 조직에 의해 채택된 약점과 대응책을 확인하는 형태이다. IT 위험을 전문적으로 관리하는 적절한 방식은 정보 보안 관리 시스템을 채택하는 것이다.

정보 보안의 중요한 개념 중 하나는 종심방어의 원리이다. 즉, 다계층 방어 시스템을 설치하는 것은:
* 익스플로잇을 예방한다.
* 공격을 탐지하고 가로챈다.
침입 탐지 시스템은 공격들을 탐지할 때 사용되는 시스템들의 클래스의 한 예이다.

물리 보안은 정보 자산을 물리적으로 보호하는 방식들의 집합이다.

개발된 좋은 보안 수준을 충족시키기 위하여 몇몇 기준들의 집합들이 만족되어야 한다. ITSEC와 공통평가기준이 두 예이다.

## 취약점 공개
취약점들의 공개에 대한 책임은 많은 논란이 있는 주제이다. 2010년 8월의 테크 헤럴드에 의하면 "구글, 마이크로소프트 등이 최근에 이러한 공개를 다루는 가이드라인과 선언을 발행하였다.

## 취약점 식별과 제거
컴퓨터 시스템에서 취약점들을 발견할 수 있게 도와주는 많은 소프트웨어 툴들이 존재한다. 비록 이러한 툴들이 감시관에게 현재 존재할 수 있는 취약점들에 대한 좋은 개요를 제공할 수 있지만, 인간의 판단을 대체하지는 못한다. 단지 스캐너에만 의존하는 것은 현재 시스템에 존재하는 문제들에 대한 제한된 관점과 긍정 오류를 만들 수 있다.

취약점들은 모든 주요 운영 체제들에서 발견되고 있다. 이러한 시스템들을 사용하면서 취약점들의 확률을 줄일 수 있는 유일한 방법은 감사와 최적의 배치(방화벽과 접근 제어의 사용 같은), 세심한 시스템 관리를 포함한 꾸준한 조심을 통해서 가능해 진다.

## 취약점들의 예시
취약점들은 아래의 목록들과 관련된다.
* 시스템의 물리적 환경
* 직원
* 관리
* 조직 내에서 관리 절차와 보안 방식
* 경영 활동과 서비스 전달
* 하드웨어
* 소프트웨어
* 통신 장비와 시설
* 그리고 이들의 조합
순수한 기술적 접근이 심지어 물리적 자원도 보호하지 못한다는 것은 명백한 사실이다.

취약점 익스플로잇의 4가지 예시
* 공격자는 오버플로우 취약점을 찾아서 민감한 데이터를 내보내는 악성코드를 설치한다.
* 공격자는 사용자가 악성코드가 들어있는 이메일 메시지를 열게 만든다.
* 내부인이 보호되고 암호화된 프로그램을 USB에 담아와서 집에서 크랙한다.
* 1층에 설치된 컴퓨터 시스템에 수해로 인한 피해가 발생한다.

### 소프트웨어 취약점
다음은 취약점으로 이끄는 소프트웨어 결함의 예시들이다.
* 다음과 같은 메모리 보안 침입
** 버퍼 오버플로
** 허상 포인터
* 다음과 같은 입력 확인 오류
** 포맷 스트링 버그
** SQL 삽입
** 코드 인젝션
** 이메일 인젝션
** 디렉토리 접근 공격
** 웹 애플리케이션에서의 사이트 간 스크립팅
** HTTP 헤더 인젝션
** HTTP 응답 스플리팅
* 다음과 같은 경쟁 상태
** Time-of-check-to-time-of-use 버그
** 심볼릭링크 경쟁
* 다음과 같은 권한 혼동 버그들
** 웹 애플리케이션에서의 사이트 간 요청 위조
** 클릭재킹
** FTP 바운스 공격
* 권한 확대
몇몇 코딩 가이드라인들이 개발되어 왔으며, 코드가 가이드라인을 따르는지 확인하는 수많은 정적 코드 분석기들이 사용된다.

## 같이 보기
* 브라우저 보안
* 컴퓨터 비상 대응팀
* 정보 보안
* 인터넷 보안
* 애플리케이션 보안
* 취약점 스캐너

## 각주

분류:취약점 공격
분류:소프트웨어 테스트
분류:웹 취약점 공격
분류:위험성