소프트웨어 취약점

취약점

프로그램이 의도대로 동작하지 않는 버그(Bug)들 중에 이를 악용하면 정보를 유출하거나 데이터를 변경하는 등의 피해를 주는 버그가 있습니다.

이렇게 악용 가능한 버그를 소프트웨어 취약점(Vulnerability)이라 부르며 유명한 취약점으로는 메모리를 덮어써서 원하는 코드를 실행시키는 "Buffer Overflow 공격"과 웹 애플리케이션에서

자주 발생하는 'SQL 인젝션', "크로스 사이트 스크립팅" 같은 것이 있습니다.


취약점 공격

취약점 공격(Exploit) 은 보안 버그나 잘못된 설정등 결함을 공격하여 공격자가 원하는 결과를 얻기 위한 Code, 프로그램, 스크립트 또는 이를 이용하는 행동을 의미합니다.

취약점 공격의 목표는 대상 시스템을 장악하여 정보를 빼내거나 혹은 다른 용도로 악용(DDos 공격등) 하기 위함입니다.

기존의 취약점 공격과는 다르게 피해 시스템의 중요 데이타를 암호화하여 인질로 삼고 금전을 요구하여 악명을 떨치고 있는 랜섬웨어도 취약점 공격을 통해 권한을 획득하고 있습니다.


제로데이 공격

제로데이 공격(Zero day Attack)은 특정 기술이나 도구를 사용한 공격 기법이 아니라 해당 취약점에 대해 아직 안 알려졌거나 알려졌어도 패치가 아직 발표되지 않은 시점에 이루어 지는 공격을 의미합니다.

패치가 아직 없으므로 심각한 보안 피해를 입을 수 있으며 대응할 시간이 없으므로 제로데이 공격이라고 부릅니다.


취약점 공개

많은 보안 회사나 전문가들은 취약점을 발견하면 공개를 하는데 이는 반대로 해당 취약점을 널리 알려서 제로데이 공격이 발생할 수 있는 문제가 있습니다.


그래서 취약점을 공개하기전에 해당 제품을 만든 회사에 알려서 패치를 제작하고 하고 배포가 된 후에 공개하는 것을 권장하고 있습니다.


구글은 프로젝트 제로(Project Zero) 라고 하는 엘리트 해커팀을 운영하여 자사의 제품만이 아닌 유명한 소프트웨어와 서비스의 보안 취약점을 분석하고 제조사에게 알려주는 것을 목표로 삼고 있으며 이는 제로데이 공격을 방지하기 위함입니다.


공통 취약점 분류(CVE; Common Vulnerabilities and Exposure)

예전에는 동일한 소프트웨어 보안 취약점이 여러 회사에 의해 발견될 경우 각자가 해당 취약점에 이름을 붙여서 분류했습니다.

이는 취약점을 식별하기 어렵게 하고 동일한 취약점이 여러 이름으로 존재할 수 있으며 체계가 없고 혼란스러워서 MITRE 라는 미국의 비영리 회사가 CVE(Common Vulnerabilities and Exposure)라는 접두사를 붙여서

취약점을 분류하기 시작했습니다.


취약점 명은 "CVE-연도-일련번호" 형식으로 구성되며 "CVE-2015-8880" 는 2015년에 8880번째 보고된 취약점이라는 의미입니다.


취약점 일변 번호는 원래 4자리였으나 소프트웨어의 증가와 함께 발견되는 취약점도 늘어나서 2015년부터는 자릿수 제한이 없이 분류하고 있습니다.


특정 제품의 경우 CVE 에 등록된 자사 제품의 취약점을 고객이 찾아 보기 쉽게 정리해서 제공하는 경우도 있으며 예로 상용 리눅스 배포판인 RHEL(Red Hat Enterprise Linux) 의 경우 고객 지원 사이트(https://access.redhat.com/security/security-updates/#/cve)에서 RHEL 의 버전별 CVE DB 를 제공하고 있습니다.


보안 취약점 공통 평가 시스템(CVSS;Common Vulnerability Scoring System)

CVE 에 취약점이 등록되었다고 해도 사소하거나 관련없는 취약점(예: 사용하지 않는 개발 프레임워크)까지 모두 조치하고 관리할 필요는 없으며 이 취약점이 어떤 환경과 절차를 통해 위협이 되며 어느 정도의 파급력이 있는 취약점인지 진단하고 평가할 수 있는 기준이 있어야 조치 여부를 판단할 수 있습니다.


이를 위해 취약점의 평가 기준으로 제시된 표준이 CVSS 이며 미국의 국립표준기술연구소(NIST) 에서 관리하고 있으며 국립 취약점 DB(NVD; National Vulnerability Database) 사이트(https://nvd.nist.gov/vuln-metrics/cvss)에서 볼 수 있으며 많이 사용되는 버전은 2007년에 발표된 2 와 2015년 5월에 공개된 3 입니다.

CVSS 는 중요도를 평가하기 위한 척도로 취약점에 대한 접근 경로, 접근 복잡도, 인증, 기밀성, 무결성, 가용성, 악용 가능성, 공격 코드 공개 여부, 추가 피해 가능성 등 다양한 측정 기준을 제시하고 있습니다.

위 측정 기준을 정해진 공식에 의거해 계산하여 0 ~ 10 점까지 척도를 매기고 있으며 숫자가 높을수록 중요도와 우선 순위가 높은 취약점으로 신속한 조치가 필요합니다.

예를 들어 금년초에도 이슈가 되었던 유명한 프레임워크인 아파치 스트러츠(apache struts) 특정 버전에 존재하는 원격지에서 코드를 실행할 수 있는 취약점인 https://nvd.nist.gov/vuln/detail/CVE-2017-5638 같은 경우 매우 위험하므로 10점이 부여되고 있습니다.


Ref