10 najważniejszych źródeł MITRE ATT&CK dzięki Pandas jedym klikiem

wiadrodanych.pl 2 lat temu
Zdjęcie: top10 mitre att&ck data compoments with python


MITRE ATT&CK to źródło wiedzy o taktykach i technikach adwersarzy. Jest wspólnym językiem domenowym w świecie cyberbezpieczeństwa. Każda organizacja jest inna, korzysta z innych systemów operacyjnych i interesuje się nią inna grupa adwersarzy. W artykule wykorzystamy popularną Python’ową bibliotekę pandas i zrobimy prosty notebook.

Psst! Link do repo na samym dole.

MITRE ATT&CK? Po co mi to?

Budżet nie jest z gumy, tak samo jak zasoby ludzkie, sprzętowe, przepustowość sieci i miejsce na naszym SIEM’ie. Musimy więc mądrze wybrać źródła danych które chcemy zbierać. Tak się składa, iż w MITRE znajdziemy zdefiniowane źródła danych i ich komponenty. Opisany tu sposób to nienajgorszy załącznik do wniosku, czemu potrzebujemy tylu agentów i takich eventów Sysmona .

A dlaczego pandas?

Bo jest to popularna biblioteka do transformacji i analizy danych. Co prawda wolę Sparka/PySparka… ale tym razem nie chciało mi się wyciągać armaty na wróbla. Ten artykuł to zachęta do skorzystania z narzędzi analitycznych innych niż interfejs białkowy i lewy przycisk myszki.

Źródło

MITRE to nie tylko strona internetowa, ale również narzędzia analityczne i repozytoria na GitHub. Skorzystamy z mappingu technika – data component (link).

Dane wejściowe

Każda organizacja jest inna. Załóżmy, iż wynik naszych obliczeń będzie liczony na podstawie platform oraz technik. Platformy to systemy z których korzystamy. Zestawienie najważniejszych technik powinien dostarczyć zespół CTI. Poniższe techniki to losowy zbiór.

my_platforms = ['Windows', 'Linux','Network'] # or None my_techniques = ['T1204', 'T1053', 'T1543', 'T1134' ,'T1112','T1110','T1003', 'T1135', 'T1046'] # or None

Pobranie i wczytanie danych do pandas

import pandas as pd import yaml import requests url = "https://raw.githubusercontent.com/mitre-attack/attack-datasources/main/docs/techniques_to_components_mapping.yaml" response = requests.get(url) mapping = yaml.safe_load(response.content) df = pd.DataFrame(mapping)

Jest też dostępna wersja w CSV, ale jakoś YAML bardziej do mnie przemawia. Pobieramy, deserializujemy i tworzymy DataFrame.

i cyk, mamy DataFrame

Eksplozja platform

Kolumna platform to tablica, co nie jest specjalnie wygodne. Rozbijmy ją na osobny wiersze.

df = df.explode('platform')
Najwięcej źródeł danych i technik odnosi się do systemu Windows.

Filtrowanie

if my_platforms: df = df.where(df["platform"].isin(my_platforms)).dropna() if my_techniques: df = df.where(df['technique_id'].isin(my_techniques)).dropna()

if jakbyśmy nie chcieli definiować my_platforms lub my_techniques. Pod koniec zobaczymy jaki będzie wynik dla wszystkich technik, dla platform Windows, Linux i Network.

Pivot

Czas na tabelę przestawną. Naszym celem jest zestawienie technik i komponentów i zliczenie ich wystąpień. Komórki bez wartości wypełnimy zerami.

df_pivoted = pd.pivot_table(df, values="technique_id",index="technique", columns ="data_component", aggfunc='count', fill_value=0)

WYNIKI!

Czerwony kolor dla wartości większych niż 0 pozwoli nam “na oko” oszacować które źródło danych da nam większe pokrycie. Na screenie poniżej wyróżnia się Command Execution, czyli warto rozważyć zbieranie zdarzeń 4688, Sysmon 1,~/.bash_history itp.

df_pivoted.style.applymap(lambda x: "background-color: red" if x>0 else "background-color: white")
df_pivoted.sum(axis=0).to_frame('size').sort_values(by=['size'],ascending=False).head(10)

Dla wylosowanego zestawu technik najważniejsze trzy źródła to wykonania komend, tworzenie procesów i wywołania systemowe (np. Sysmon 19-21). Jak to wygląda dla wszystkich technik (dla wybranych platform?)…

Tak jak obiecałem, jeden klik

Podsumowanie

Powyższy przykład to nie jest rocket science, a mimo to pozwala lepiej zrozumieć potrzebny i wprowadzić odrobinę podejścia data-driven / intelligence-driven. Dodatkowo, jeżeli powtarzasz jakeś czynności już N’ty raz, może warto to zautomatyzować .

https://xkcd.com/2565/

Repozytorium

https://github.com/zorteran/top-10-mitre-data-sources-with-pandas

Idź do oryginalnego materiału