10 najważniejszych źródeł MITRE ATT&CK za pomocą Pandas jedym klikiem

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, że 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, że 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śli powtarzasz jakeś czynności już N’ty raz, może warto to zautomatyzować 😁.

Repozytorium

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

3 komentarze do “10 najważniejszych źródeł MITRE ATT&CK za pomocą Pandas jedym klikiem”

  1. Fajna sprawa, bardzo pomocna – dzięki. Mam tylko pytanie – to było pisane po piątym browarze czy jakieś tłumaczenie nawaliło? Bo błędów i literówek pełno.

    1. Dzięki za komentarz. Co do pytania: kończyłem pisać późno w nocy, a przeglądarkowe sprawdzanie pisowni nie działa mi w wordpressie nie wiedzieć czemu 😅.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *