취약점

이 글은 취약점이 무엇인지, 그리고 모든 시스템에서 어떻게 나타나는 지에 대하여 다룹니다.

취약점은 신뢰성, 무결성 및/또는 가용성에 부정적으로 작용할 수 있는 시스템 내의 약점입니다. 취약점을 분류할 수 있는 방법은 여러가지가 있습니다. 이 글은 소프트웨어 결함, 보안 설정 문제, 그리고 소프트웨어 기능 오용의 세가지 상위 취약점 분류를 사용합니다. 이러한 분류는 아래에서 설명하고 있습니다.

취약점 분류

소프트웨어 결함 취약점은 소프트웨어 설계 또는 코딩에서의 의도하지 않은 오류로 인해 발생합니다. 사용자가 제공한 입력이 알려진 공격과 관련있는 악의적인 문자열이거나 지나치게 긴 값에 대해 적절하게 평가되지 않는 것과 같은 입력 유효성 검사 오류를 그 예로 들 수 있습니다. 또 다른 예로는, 공격자가 상승된 권한으로 특정 작업을 수행할 수 있는 경합 조건 오류가 있습니다.

보안 구성 설정은 소프트웨어 자체를 통해 변경할 수 있는 소프트웨어 보안의 요소입니다. 설정의 예로는 사용자에게 파일에 대한 권한을 설정하는 제어 목록에 대한 액세스를 제공하는 운영 체제와, 응용 프로그램이 저장한 중요한 데이터의 암호화를 활성화 또는 비활성화하는 응용 프로그램입니다.

보안 구성 문제 취약점에는 소프트웨어 보안에 부정적인 영향을 주는 보안 구성 설정이 사용됩니다.

소프트웨어 기능은 소프트웨어에서 제공하는 기능입니다. 소프트웨어 기능 오용 취약점은 시스템 보안을 손상시키는 방법도 제공합니다. 이러한 취약점은 소프트웨어 디자이너가 유익한 기능을 제공하도록 허용하는 신뢰 가정을 만드는 한편, 누군가가 보안 손상에 대한 신뢰 가정을 위반할 가능성을 초래하기 때문입니다.

예를 들어, 이메일 클라이언트 소프트웨어는 이메일 메시지에 HTML컨텐츠를 렌더링 하는 기능을 포함할 수 있습니다. 공격자는 HTML로 렌더링 된 하이퍼링크가 포함된 사기성 전자 메일 메시지를 조작할 수 있습니다. 하이퍼링크는 수신인에게 양호한 것으로 표시되지만 클릭하면 실제로 수신인을 악성 웹 사이트로 가져옵니다. HTML콘텐츠 렌더링 기능 설계 시 신뢰할 수 있는 가정 중 하나는 사용자가 악의적인 하이퍼링크를 수신하지 않고 클릭하지 않는다는 것입니다.

소프트웨어 기능 오용 취약점은 소프트웨어 또는 소프트웨어 구성 요소의 설계 중에 발생합니다(예:소프트웨어가 구현하는 프로토콜). 신뢰 가정은 사실일 수 있습니다. 예를 들어, 설계자는 보안 약점을 인식하고 별도의 보안 통제가 이를 보상할 것이라고 판단합니다.

그러나, 신뢰가 도입할 위험을 먼저 평가하지 않고 특징을 생성하는 것과 같이, 신뢰 가정은 주로  암묵적입니다. 위협 요소는 소프트웨어 수명 주기 또는 소프트웨어에 사용되는 프로토콜에 따라 변경될 수도 있습니다.

예를 들어 주소 결정 프로토콜(ARP)는 ARP 응답이 매체 접근 제어(MAC) 및 인터넷 프로토콜(IP) 주소 간의 올바른 매핑을 포함하고 있다고 신뢰합니다. ARP 캐시는 유용한 서비스를 제공하기 위해 이 정보를 사용하여 로컬 네트워크 내의 장치 간에 데이터를 보낼 수 있도록 합니다. 하지만 공격자는 잘못된 ARP 메시지를 생성하여 시스템의 ARP 테이블을 손상시키고 서비스 거부 또는 메시지 가로채기(man-in-the-middle)공격을 시작합니다.

ARP 프로토콜은 25년 전에 표준화되었으며, 그 이후로 위협이 크게 변화하여, 설계에 내재한 신뢰 가정이 현재에도 여전히 타당하지는 않을 것입니다.

소프트웨어 기능 오용 취약점을 다른 두 범주와 구별하기 어려울 수도 있습니다. 예를 들어, 소프트웨어 결함 및 오용 취약점은 소프트웨어 설계 프로세스의 결함으로 인해 발생할 수 있습니다. 하지만 소프트웨어 결함은 보안이나 기능에 긍정적인 이점을 제공하지 않으므로 추가 기능 제공의 결과로 소프트웨어 기능 오용 취약점이 발생할 수 있습니다.

또한 어떤 면에서 구성된 방식으로 기능을 활성화하거나 비활성화할 수 있는 기능의 오용 취약점과 보안 구성 문제에  대해서도 혼동이 발생할 수 있습니다. 주요 차이점은 오용 취약점의 경우 구성 설정이 전체 기능을 활성화 또는 비활성화하고 전체 기능만 특별히 변경하지 않는다는 것입니다. 보안 구성 문제의 경우 구성 설정은 소프트웨어의 보안만 변경합니다.

예를 들어 전자 메일에서 HTML을 모두 사용할 수 없도록 설정하면 보안 및 기능에 큰 영향을 미치므로 이 설정과 관련된 취약성은 오용 취약점이 됩니다. 전자 메일 클라이언트에서 암호화 기능을 사용하지 않도록 설정하면 보안에만 큰 영향을 미치므로 이 설정의 취약점은 보안 구성 문제 취약성으로 간주됩니다.

취약점의 존재

100% 안전한 시스템은 없습니다. 모든 시스템에 취약점이 있습니다. 어느 때나 시스템에 알려진 소프트웨어 결함이 없을 수 있지만 보안 구성 문제 및 소프트웨어 기능 오용 취약점은 항상 존재합니다.

각 기능은 신뢰성 평가를 기반으로 해야 하기 때문에 소프트웨어 기능에는 남용 취약점이 내재되어 있으며, 이러한 가정은 상당한 비용과 노력이 수반되지만 손상될 수 있습니다. 보안 구성 문제도 다음의 두가지 이유로 불가피합니다.

첫째, 대부분의 구성 설정은 기능을 줄이는 대신 보안을 강화하므로 가장 안전한 설정을 사용하면 소프트웨어를 사용할 수 없거나 사용할 수 없게 될 수 있습니다. 둘째, 많은 보안 설정은 보안에 긍정적인 영향과 부정적인 영향을 모두 미칩니다.

예를 들어, 사용자 계정을 잠그기 전에 허용하려는 연속적인 인증 실패 횟수를 들 수 있습니다. 이를 1로 설정하면 암호 추측 공격에 대한 가장 안전한 설정이 되지만 합법적인 사용자가 암호를 한번 잘못 해독하면 계정 하나를 더 쉽게 생성할 수 있습니다.

보안 구성 설정 및 소프트웨어 기능 오용 가능성에 내재된 취약점의 수와 지정된 시간에 시스템의 소프트웨어 결함 취약점의 수 때문에 단일 시스템에는 수 십 개 또는 수 백 개의 취약점이 있을 수 있습니다.

이러한 취약점은 다양한 특성을 가질 수 있습니다. 어떤 것들은 매우 이용하기 쉬운 반면, 다른 것들은 매우 가능성이 적은 조건들의 조합에 의해서만 설명될 수 있을 것이다.

한 취약점은 시스템에 대한 루트 수준 액세스를 제공하는 반면 다른 취약성은 중요하지 않은 파일에 대한 읽기 액세스만 허용할 수 있습니다.

궁극적으로 조직은 누군가가 각 취약성을 이용하는 것이 얼마나 어려운지, 그리고 취약점을 이용할 경우 어떤 영향을 미칠 수 있는지 알아야 합니다.

웹사이트의 취약점

OWASP또는 Open Web Security Project는 소프트웨어 및 웹 응용 프로그램의 보안을 향상시키는 데 초점을 맞춘 비영리 자선 단체입니다. Open Web Application Security Project에 따르면, XSS는 2017년에 7번째로 흔한 웹 응용 프로그램 취약점 이었습니다.

이 단체은 다양한 보안 조직의 데이터를 기반으로 상위 웹 보안 취약점 목록을 게시합니다.

웹 보안취약성은 WordPress, Joomla, Magento, Wocommerce등의 CMS가 될 수 있는 배포 가능성, 탐지 가능성 및 소프트웨어 영향에 따라 우선 순위가 지정됩니다.

다음은 자신을 보호해야 하는 6가지 가장 일반적인 웹 사이트 취약성입니다.

1. SQL주입
2. 사이트간 스크립팅(XSS)
3. 망가진 인증 및 세션 관리- IdentityManager
4. 안전하지 않은 직접 객체 참조 - DOM (문서 객체 모델)
5. 보안 오구성
6. 사이트 간 요청 위조(CSRF)

See also

Original Document Information

  • Author(s): Elizabeth LeMay, Karen Scarfone, and Peter Mell
  • Title: National Institute of Standards and Technology (NIST) Interagency Report 7864, The Common Misuse Scoring System (CMSS): Metrics for Software Feature Misuse Vulnerabilities
  • Last Updated Date: July 2012
  • Copyright Information: This document is not subject to copyright.