
Un pacchetto Python per interagire con il framework Mitre ATT&CK
.______ ____ ____ ___ .___________.___________. ______ __ ___
| _ \ \ \ / / / \ | | | / || |/ /
| |_) | \ \/ / / ^ \ `---| |----`---| |----`| ,----'| ' /
| ___/ \_ _/ / /_\ \ | | | | | | | <
| | | | / _____ \ | | | | | `----.| . \
| _| |__| /__/ \__\ |__| |__| \______||__|\__\
Un pacchetto Python per interagire con i framework MITRE ATT&CK
Versione attuale: 7.1.1
pyattck è un framework leggero per i framework MITRE ATT&CK. Questo pacchetto estrae dettagli dai framework Enterprise, PRE-ATT&CK, Mobile e ICS di MITRE.
pyattck aiuta organizzazioni e individui ad accedere ai framework MITRE ATT&CK in modo programmatico. In pratica, puoi accedere a tutti gli attori, malware, mitigazioni, tattiche, tecniche e strumenti definiti dai framework Enterprise, Mobile, Pre-Attck e ICS tramite un'utility a riga di comando o integrandolo nel tuo codice.
Ci sono molte ragioni per cui vorresti accedere a questi dati in modo automatico (scriptato/codificato), ma alcuni esempi sono:
Ci sono anche altri vantaggi offerti da pyattck, come la possibilità di fornire dati contestuali aggiuntivi. Puoi trovare maggiori informazioni su questi dati qui, ma il succo è che pyattck utilizza diversi repository open-source per raccogliere dati contestuali aggiuntivi come i comandi usati per eseguire una tecnica, il paese e altri dettagli su un attore malintenzionato, altre varianti di malware simili a uno strumento/malware definito, ecc.
Questo contesto aggiuntivo è ciò che rende pyattck veramente potente e consente di costruire test e validazioni più robusti delle proprie regole di rilevamento, convalidare ipotesi di test, ecc. Ci sono innumerevoli modi in cui pyattck può essere utilizzato per aiutare i team blu, rossi e viola a difendere le organizzazioni (e sé stessi).
Il pacchetto pyattck recupera tutte le tattiche, tecniche, attori, malware, strumenti e mitigazioni dai framework MITRE ATT&CK, nonché tutte le relazioni definite nel dataset MITRE ATT&CK (incluse le sotto-tecniche).
Inoltre, per le tecniche, gli attori e gli strumenti (se applicabile) sono ora disponibili dati raccolti da risorse di terze parti, accessibili tramite diverse proprietà. Per informazioni più dettagliate su queste funzionalità, consulta External Datasets.
Il pacchetto pyattck ti consente di:
Puoi installare pyattck su OS X, Linux o Windows. Puoi anche installarlo direttamente dal sorgente. Per installare, vedi i comandi sotto il sistema operativo rilevante.
pip install pyattck
git clone https://github.com/swimlane/pyattck.git
cd pyattck
python setup.py install
Per usare pyattck devi istanziare un oggetto Attck. Sebbene tu possa interagire direttamente con ogni classe, l'uso previsto è tramite un oggetto Attck:
from pyattck import Attck
attack = Attck()
Per impostazione predefinita, le sotto-tecniche sono accessibili sotto ogni oggetto tecnica. Puoi disattivare questo comportamento passando nested_techniques=False quando crei il tuo oggetto Attck.
Ad esempio, il comportamento predefinito assomiglia a questo:
from pyattck import Attck
attack = Attck()
for technique in attack.enterprise.techniques:
print(technique.id)
print(technique.name)
for subtechnique in technique.techniques:
print(subtechnique.id)
print(subtechnique.name)
Puoi accedere alle seguenti proprietà principali sul tuo oggetto Attck:
Una volta specificato il framework MITRE ATT&CK, puoi accedere a proprietà aggiuntive.
Ecco gli oggetti accessibili sotto la proprietà Enterprise:
Per maggiori informazioni sui tipi di oggetti sotto la proprietà enterprise, vedi Enterprise.
Ecco gli oggetti accessibili sotto la proprietà PreAttck:
Per maggiori informazioni sui tipi di oggetti sotto la proprietà preattck, vedi PreAttck.
Ecco gli oggetti accessibili sotto la proprietà Mobile:
Per maggiori informazioni sui tipi di oggetti sotto la proprietà mobile, vedi Mobile.
Ecco gli oggetti accessibili sotto la proprietà ICS:
Per maggiori informazioni sui tipi di oggetti sotto la proprietà ics, vedi ICS.
Per utilizzare il nuovo sistema di menu interattivo all'interno di pyattck, devi impostare interactive su True. In questo modo si avvierà il sistema di menu interattivo a console.
Usando uno script puoi avviarlo eseguendo:
from pyattck import Attck
Attck(interactive=True)
Oppure puoi anche eseguire la modalità interattiva da riga di comando:
pyattck --interactive
Guarda un esempio in gif qui sotto:

pyattck ti permette di configurare se memorizzare dati esterni e dove salvarli.
from pyattck import Attck
attck = Attck(
nested_techniques=True,
use_config=False,
save_config=False,
config_file_path='~/pyattck/config.yml',
data_path='~/pyattck/data',
enterprise_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_enterprise_attck_v1.json",
pre_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_pre_attck_v1.json",
mobile_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_mobile_attck_v1.json,
ics_attck_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_ics_attck_v1.json",
nist_controls_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/merged_nist_controls_v1.json",
generated_nist_json="https://swimlane-pyattck.s3.us-west-2.amazonaws.com/attck_to_nist_controls.json",
**kwargs
)
Per impostazione predefinita, pyattck ora recupera gli ultimi dati esterni dalle rispettive posizioni utilizzando richieste HTTP GET. pyattck attualmente recupera da:
Hai diverse opzioni quando istanzi l'oggetto Attck. A partire dalla versione 4.0.0 puoi specificare una delle seguenti opzioni:
True, pyattck tenterà di recuperare la configurazione specificata nella posizione config_file_path. Se questo file è danneggiato o non può essere trovato, verranno recuperati i dati dalle posizioni *_attck_json specificate.True, pyattck salverà il file di configurazione nella posizione specificata da config_file_path. Inoltre, salverà tutti i file scaricati nella posizione data_path specificata. Se hai specificato un percorso locale anziché un URL di download per uno qualsiasi dei parametri *_attck_json, questa posizione verrà salvata nella configurazione e verrà utilizzata in futuro.~/pyattck/config.yml~/pyattck/dataInoltre, puoi specificare la posizione per ogni singolo file *_attck_json passando un URI o un percorso locale. Se hai passato un percorso locale, il file verrà semplicemente letto.
Se hai utilizzato i valori predefiniti o specificato una posizione URI alternativa per recuperare questi file JSON, puoi inoltre passare **kwargs che verranno inoltrati al pacchetto Python Requests durante l'esecuzione delle richieste HTTP.
Sappiamo che vengono rilasciati molti progetti open-source diversi, anche quotidianamente, ma volevamo fornire un pacchetto Python semplice che permettesse all'utente di identificare le relazioni note tra tutte le verticali del framework MITRE ATT&CK.
Se non hai familiarità con il framework MITRE ATT&CK, ci sono alcuni componenti chiave da comprendere bene. Il primo sono le Tattiche e le Tecniche. Quando guardi il MITRE ATT&CK Framework, le Tattiche sono le colonne e rappresentano le diverse fasi di un attacco.
Il MITRE ATT&CK Framework NON è una mappa di copertura di sicurezza onnicomprensiva/di fatto - è piuttosto un FRAMEWORK e ulteriori percorsi dovrebbero essere considerati quando si valuta la propria postura di sicurezza.
Le Tecniche sono le righe del framework e sono categorizzate sotto specifiche Tattiche (colonne). Sono punti dati all'interno del framework che forniscono indicazioni per valutare le proprie lacune di sicurezza. Inoltre, (la maggior parte) delle Tecniche contengono indicazioni di mitigazione oltre a informazioni sulla loro relazione con strumenti, malware e persino attori/gruppi che hanno utilizzato questa tecnica durante attacchi registrati.
Ciò significa che se la tua organizzazione si concentra su TTP (Tattiche, Tecniche e Procedure) utilizzate da determinati attori/gruppi, allora il MITRE ATT&CK Framework è perfetto per te. Se la tua organizzazione non ha ancora raggiunto questa maturità di sicurezza, nessun problema! Il framework ATT&CK fornisce comunque ottime indicazioni in un layout semplice e diretto, ma dal punto di vista programmatico non è semplice, specialmente se si desidera misurare (o mappare) i propri controlli di sicurezza utilizzando il framework.
Puoi aggiungere funzionalità o correggere bug, oppure eseguire il codice in un ambiente di sviluppo.
Per configurare un ambiente di sviluppo e test, utilizza questo Dockerfile.
Per usare il Dockerfile, spostati nella directory del repository ed esegui:
docker build --force-rm -t pyattck .
docker run pyattck
L'esecuzione richiama il file Python di test in bin/test.py.
I test all'interno di questo progetto dovrebbero coprire tutte le proprietà e i metodi disponibili. Man mano che il progetto cresce, i test diventeranno più robusti, ma per ora verifichiamo che esistano e restituiscano output.
Leggi CONTRIBUTING.md per i dettagli sul nostro codice di condotta e il processo per inviare richieste pull.
Utilizziamo SemVer per il versionamento.
Per i dettagli sulle funzionalità di una versione specifica di pyattck, vedi il CHANGELOG.md.
Vedi anche l'elenco dei contributori.
Questo progetto è concesso in licenza con la Licenza MIT.
Prima di tutto, vorrei ringraziare tutti coloro che contribuiscono ai progetti open-source, specialmente i manutentori e i creatori di questi progetti. Senza di loro, questa funzionalità non sarebbe possibile.
Questo set di dati è generato da molte fonti diverse. Man mano che continuiamo ad aggiungere altre fonti, le aggiungeremo qui. Ancora grazie a tutti questi progetti. In nessun ordine particolare, pyattck utilizza dati dai seguenti progetti:
.. toctree::
:titlesonly:
configuration
pyattck/attck
Dataset <https://github.com/swimlane/pyattck-data>
Data Models <https://github.com/swimlane/pyattck-data>
enterprise/enterprise
preattck/preattck
mobile/mobileattck
ics/icsattck