택소노미, 시소러스, 온톨로지란?

아키텍처11분English

English version: What Are Taxonomy, Thesaurus, and Ontology?

택소노미, 시소러스, 온톨로지는 모두 개념을 정리하는 방법이라 섞어 쓰기 쉽다.
하지만 셋이 표현할 수 있는 범위는 다르다.
시소러스는 택소노미를 포함하고, 온톨로지는 시소러스를 포함한다.
이 글에서는 보안 위협 분류라는 같은 예로 셋을 차례로 살펴본다.

택소노미란?

택소노미는 개념을 상하 관계 하나로만 나눈 분류 체계다.
보안 위협을 분류하면 이런 트리가 된다.

위협 악성코드 계정 탈취 랜섬웨어 정보 탈취형 무차별 대입 피싱 아래는 위의 한 종류
택소노미는 상하 관계 하나로 개념을 나눈 트리다.

보안 분야의 표준 분류도 이런 구조다.
OCSF는 보안 이벤트를 범주와 클래스로, MITRE ATT&CK은 공격을 전술과 기법으로 나눈다.

OCSF 범주(category) › 클래스(class) Findings 2 Detection Finding 2004 Vulnerability Finding 2002 Identity & Access Mgmt 3 Authentication 3002 MITRE ATT&CK 전술(tactic) › 기법(technique) › 하위 기법 Impact TA0040 Data Encrypted for Impact T1486 Credential Access TA0006 Brute Force T1110 Password Spraying T1110.003
두 표준 모두 상하 관계 하나로 나눈 택소노미다. 주황 테두리는 이 글의 예에 다시 나오는 항목(탐지 결과 클래스, 랜섬웨어가 쓰는 기법)이다. 숫자와 기호는 각 표준이 붙인 ID다.

OCSF(Open Cybersecurity Schema Framework)는 보안 이벤트를 어떤 필드로 적을지 정한 공개 스키마로, 이벤트를 범주와 클래스로 나누고 숫자 ID를 붙인다.

MITRE ATT&CK은 실제 공격에서 관찰된 공격자의 전술과 기법을 정리한 지식 베이스다.

택소노미로는 “랜섬웨어는 악성코드의 한 종류다” 같은 관계를 표현할 수 있고, 분류별로 걸러 보거나 개수를 세는 데는 이것으로 충분하다.

다만 같은 위협이라도 분류 체계마다 부르는 이름이 다르다.
OCSF는 악성코드 분류를 숫자 코드 10(Ransomware)으로 적고, ATT&CK은 이 공격의 핵심 행위를 기법 T1486(Data Encrypted for Impact)으로 적는다.
택소노미만으로는 이것들이 “랜섬웨어”와 이어진다는 것을 표현할 수 없다.
택소노미의 각 개념에는 이름이 하나뿐이다.

택소노미 랜섬웨어 다른 체계의 이름 OCSF 10 = Ransomware ATT&CK T1486 ? ? 개념마다 이름이 하나라서 다른 체계의 이름과 이을 수 없다
같은 위협이라도 분류 체계마다 이름이 다르지만, 택소노미에는 이 이름들을 이을 방법이 없다. 시소러스에서는 이 사이에 exactMatch, relatedMatch 같은 대응이 들어간다.

시소러스란?

시소러스는 택소노미에 같은 뜻의 이름과 관련된 개념을 더한 것이다.
국제 표준은 ISO 25964이고, 웹에서는 W3C의 SKOS로 적는다.
SKOS에서는 대표 이름(prefLabel)과 다른 이름(altLabel), 상위·하위 개념(broader, narrower), 관련 개념(related)을 적는다.

SKOS(Simple Knowledge Organization System)는 시소러스나 분류 체계 같은 지식 조직 체계를 웹에서 공유하고 서로 잇기 위한 W3C 표준 데이터 모델이다.

아래 그림과 코드에 나오는 ex:ransomware는 “랜섬웨어”라는 개념을 가리키는 식별자다.
사람이 읽는 이름(prefLabel)과 별개로, 기계가 개념 하나를 헷갈리지 않고 가리키도록 붙이는 고유한 주소(IRI)를 줄여 쓴 것이다.
앞의 ex:는 http://example.org/ 같은 예시용 주소를 줄인 접두어로, ex:ransomware는 http://example.org/ransomware라는 주소를 뜻한다.
같은 방식으로 skos:는 SKOS 어휘의 주소를 줄인 것이고, ocsf:와 attack:은 이 글에서 OCSF와 ATT&CK의 값을 가리키려고 붙인 접두어다.

ex:ransomware prefLabel "랜섬웨어"@ko, "Ransomware"@en altLabel "크립토 랜섬웨어"@ko 어느 이름으로 찾아도 같은 개념 같은 분류 체계 안의 관계 다른 분류 체계와의 대응 broader 상위 개념 악성코드 related 관련 개념 데이터 암호화 exactMatch 같은 개념 · 전이됨 OCSF 10 = Ransomware relatedMatch 관련 있음 · 전이 안 됨 ATT&CK T1486
ex:ransomware 하나를 기준으로 왼쪽에서 오른쪽으로 읽는다. 위 두 줄은 같은 분류 체계 안의 관계, 아래 두 줄은 다른 분류 체계의 개념과의 대응이다. 실선 exactMatch는 같은 개념, 점선 relatedMatch는 관련만 있는 개념이다.

SKOS로 서로 다른 분류 체계끼리 대응시킬 수도 있다.
각 분류 체계를 하나의 concept scheme으로 두고, 개념끼리 대응하는 관계를 mapping 속성(exactMatch, closeMatch, broadMatch, narrowMatch, relatedMatch)으로 적는다.

@prefix skos:   <http://www.w3.org/2004/02/skos/core#> .
@prefix ex:     <http://example.org/> .
@prefix ocsf:   <http://example.org/ocsf/> .
@prefix attack: <http://example.org/attack/> .

# OCSF: 악성코드 분류를 숫자 코드로 적는다
ocsf:malware-10 a skos:Concept ;
    skos:inScheme  ocsf:malwareClassification ;
    skos:prefLabel "Ransomware"@en ;
    skos:notation  "10" .

# MITRE ATT&CK: 공격 행위를 기법으로 적는다
attack:T1486 a skos:Concept ;
    skos:inScheme  attack:techniques ;
    skos:prefLabel "Data Encrypted for Impact"@en ;
    skos:notation  "T1486" .

# 기준 분류의 "랜섬웨어"에서 다른 체계로의 대응
ex:ransomware skos:exactMatch   ocsf:malware-10 .
ex:ransomware skos:relatedMatch attack:T1486 .

OCSF와 ATT&CK이 SKOS로 배포되는 것은 아니다.
위 코드는 각 체계의 값을 개념으로 두고 대응을 적는 방법을 보이려고 만든 예다.
각 분류는 그대로 두고, 어떤 개념끼리 대응하는지만 따로 적는다.

대응의 정도에 따라 mapping 속성을 골라 쓴다.
OCSF의 Ransomware는 랜섬웨어와 같은 개념이라 exactMatch로 적었다.
ATT&CK의 T1486은 랜섬웨어가 쓰는 대표 기법이지만, 기법과 악성코드의 종류는 같은 개념이 아니라서 relatedMatch로 적었다.

둘을 구분해야 하는 이유는 exactMatch에만 전이(transitivity)라는 성질이 있기 때문이다.
전이는 A와 B가 같고 B와 C가 같으면, A와 C도 같다고 보는 성질이다.
SKOS에서는 exactMatch만 이 성질을 가지고, closeMatch나 relatedMatch 같은 나머지 mapping 속성은 가지지 않는다.
그래서 완전히 같지 않은 개념을 exactMatch로 이으면, 아래 그림처럼 가운데 개념을 거쳐 서로 다른 개념까지 같은 것으로 묶인다.

잘못 이은 경우: 모두 exactMatch 랜섬웨어 ATT&CK T1486 OCSF 21 Wiper exactMatch exactMatch 추론기가 랜섬웨어와 Wiper를 같은 개념으로 묶는다 (틀린 결론) 맞게 이은 경우: relatedMatch 랜섬웨어 ATT&CK T1486 OCSF 21 Wiper relatedMatch relatedMatch 끌어낼 결론이 없다. 세 개념이 각자 따로 남는다
T1486은 랜섬웨어도 쓰고 Wiper도 쓰는 기법이다. 모두 exactMatch로 이으면 전이 관계 때문에 랜섬웨어와 Wiper가 같은 개념이 되고, relatedMatch로 이으면 그런 결론이 생기지 않는다.

Wiper는 데이터를 지우거나 망가뜨려 못 쓰게 만드는 악성코드로, OCSF 악성코드 분류에서 21번이다.

온톨로지란?

시소러스는 개념 사이의 관계(상위, 하위, 관련, 대응)만 표현한다.
”탐지에는 출발지 IP가 있다”, “IP는 호스트에 할당된다”처럼 개념이 무엇을 가지는지는 표현하지 않는다.
그래서 “이 탐지의 출발지 IP는 어느 호스트에 할당돼 있고, 그 호스트에서 다른 탐지가 있었나” 같은 질문에는 답할 수 없다.

온톨로지는 여기에 개념의 속성과 개념 사이의 관계, 그리고 추론 규칙을 더한다.
웹에서는 RDFS와 OWL로 적는다.

RDFS(RDF Schema)는 RDF 데이터에서 쓸 클래스와 속성, 그 사이의 상하 관계를 정의하는 W3C 언어이고, OWL(Web Ontology Language)은 그보다 풍부한 논리로 클래스와 속성을 정의해 추론기가 결론을 끌어낼 수 있게 하는 W3C 온톨로지 언어다.

정의 (클래스와 속성) 악성코드 탐지 랜섬웨어 탐지 subClassOf 탐지 subClassOf IP 주소 출발지 IP 호스트 할당 데이터 탐지 케이스 A 랜섬웨어 탐지 10.0.0.5 서버 A 탐지 케이스 B 무차별 대입 출발지 IP 할당 대상 호스트 유형 추론: 탐지 케이스 A는 악성코드 탐지이기도 하다
위는 클래스와 속성의 정의, 아래는 그 정의를 따르는 데이터다. 탐지 케이스 A에서 IP, 서버 A를 거쳐 같은 호스트의 탐지 케이스 B까지 따라갈 수 있고, 주황 점선은 subClassOf에서 끌어낸 결론이다.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix ex:   <http://example.org/> .

ex:sourceIP   a owl:ObjectProperty ;
    rdfs:domain ex:Detection ;  rdfs:range ex:IPAddress .
ex:assignedTo a owl:ObjectProperty ;
    rdfs:domain ex:IPAddress ;  rdfs:range ex:Host .
ex:RansomwareDetection rdfs:subClassOf ex:MalwareDetection .
ex:MalwareDetection    rdfs:subClassOf ex:Detection .

첫 번째 정의는 “탐지는 출발지 IP를 가진다”, 두 번째는 “IP는 호스트에 할당된다”는 뜻이다.
이렇게 관계가 정의되어 있으면 탐지에서 IP로, IP에서 호스트로, 다시 그 호스트와 연결된 다른 탐지로 따라가며 질의할 수 있다.

나머지 두 줄은 추론 규칙이다.
랜섬웨어 탐지가 악성코드 탐지의 하위 클래스라고 정의했으므로, 추론기는 랜섬웨어 탐지로 분류된 탐지 케이스 A를 악성코드 탐지로도 판단한다.
택소노미의 상하 관계가 단순한 분류였다면, 온톨로지의 상하 관계는 기계가 결론을 끌어낼 수 있는 규칙이다.

세 개념 비교

택소노미시소러스온톨로지
표현하는 것상하 분류+ 같은 뜻의 이름, 관련 개념, 다른 체계와의 대응+ 개념의 속성, 개념 사이의 관계, 추론 규칙
표준따로 없음ISO 25964, SKOSRDFS, OWL
예위협 › 악성코드 › 랜섬웨어랜섬웨어 = Ransomware = OCSF 10, ATT&CK T1486과 관련탐지 → 출발지 IP → 호스트, 랜섬웨어 탐지 subClassOf 악성코드 탐지
대응 가능한 질문랜섬웨어는 어떤 위협의 한 종류인가?OCSF의 10번은 기준 분류의 어느 개념과 같은가?이 탐지의 출발지 IP는 어느 호스트에 할당돼 있나?

정리

분류해서 걸러 보고 세기만 하면 되면 택소노미로 충분하다.
같은 개념을 여러 이름이나 여러 분류 체계로 받아야 하면 시소러스가 필요하다.
개념이 무엇을 가지는지 따라가며 묻거나, 정의에서 결론을 끌어내야 하면 온톨로지가 필요하다.
셋은 경쟁하는 방법이 아니라, 필요한 표현이 늘어날 때마다 택소노미 위에 시소러스를, 시소러스 위에 온톨로지를 한 층씩 얹는 관계다.

참고