
Outil d'analyse forensique automatisé pour les journaux d'audit Google Workspace. Acquiert tous les types de journaux, mappe les événements au cadre MITRE ATT&CK Cloud et identifie les chaînes de compromission via un scoring statistique.
Copyright (c) 2026 Invictus Incident Response
Auteurs originaux Greg Charitonos & BertJanCyber maintenu par Invictus Incident Response
Note sur les systèmes d'exploitation pris en charge : ALFA est testé sur plusieurs distributions Linux (Debian et Ubuntu).
Bien qu'il soit possible de l'utiliser sur Windows ou macOS, les résultats peuvent varier, alors utilisez-le à vos risques et périls.
sudo pip install -e . ou sudo pip3 install -e .Installer Python 3.9 avec pyenv
ALFA fonctionne mieux avec Python 3.9. Vous pouvez utiliser pyenv pour gérer et installer cette version.
pyenv, vous pouvez le faire avec Homebrew :
brew install pyenv
pyenv dans votre shell en ajoutant ce qui suit à votre fichier de configuration du shell (par ex., ~/.zshrc ou ~/.bashrc) :
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
source ~/.zshrc # or source ~/.bashrc
pyenv :
pyenv install 3.9
pyenv global 3.9
pyenv shell 3.9
(Optionnel) Créer un environnement virtuel C'est une bonne pratique d'exécuter les projets dans un environnement virtuel pour isoler les dépendances. En utilisant la version 3.9 de Python que vous venez de définir, créez un environnement virtuel :
python -m venv alfa
source alfa/bin/activate
Installer ALFA
Dans le dossier où se trouve le projet ALFA, installez-le avec pip :
pip install -e .
Si vous n'utilisez pas d'environnement virtuel, vous aurez peut-être besoin de sudo :
sudo pip install -e .
Vérifier l'installation
Après l'installation, vous pouvez vérifier qu'ALFA est installé en essayant d'exécuter son outil en ligne de commande alfa.
NOTE : Pour récupérer credentials.json, veuillez consulter CREDENTIALS.md
alfa init nomduprojet cette commande créera un nouveau dossier pour stocker votre configuration et vos données. Par ex. alfa init project_xALFA propose 3 options comme expliqué ci-dessous :
alfa acquirealfa acquire -hVous pouvez effectuer toutes sortes de filtrages pour limiter les données que vous acquérez, voici quelques exemples :
alfa acquire --logtype=adminalfa acquire -d /tmp/project_secretalfa acquire --user=inserer_nom_utilisateuralfa acquire --start-time=2022-07-10T10:00:00Z --end-time=2022-07-11T14:26:01Z le format de l'heure est (RFC3339)Maintenant que vous savez comment acquérir des données, il est temps pour des choses plus avancées pour libérer la puissance d'ALFA.
La fonction d'analyse analyse automatiquement toutes les données des journaux d'audit pour un Google Workspace donné afin d'identifier une activité suspecte.
Catégorisation Chaque événement individuel est catégorisé en fonction d'un mappage défini dans alfa/config/event_to_mitre.yml. Si un événement correspond à cette liste, il est mappé à une technique qui fait partie du cadre MITRE ATT&CK Cloud (https://attack.mitre.org/matrices/enterprise/cloud/).
Score Ensuite, ALFA analysera tous les événements mappés dans l'ordre chronologique pour tenter d'identifier des chaînes de destruction ou des chemins d'attaque logiques. Par ex. Un événement mappé à la phase Persistance suivi d'un événement mappé à la phase Accès aux identifiants entraînera un score plus élevé.
Résultat Finalement, ALFA fournira à l'analyste une liste de 'sous-chaînes' identifiées qui peuvent être analysées plus en détail.
alfa analyze qui identifiera automatiquement (ou non si aucune n'a été trouvée). Il vous placera également dans un shell où vous pourrez effectuer des activités de suivi.A.aoi(export='activities.json') pour exporter toutes les sous-chaînes identifiées vers un fichier, que vous pourrez ensuite utiliser pour une analyse plus approfondie.Utilisez A = Alfa.load([nom_du_journal]) pour charger et analyser les journaux depuis le stockage local. Utilisez A = Alfa.load('all') pour charger tous les journaux. Par défaut, Alfa filtre les activités bénignes. Pour charger toutes les activités et événements, sans filtre, utilisez Alfa.load([nom_du_journal], filter=False).
Il est possible de modifier directement le fichier config/event_to_mitre.yml, mais cela est déconseillé. La mise en page de ce fichier n'est pas intuitive. Au lieu de cela, envisagez d'apporter des modifications à utils/mappings.yml. Puis repeuplez config/event_to_mitre.yml en exécutant utils/event_mitre_remap.py
La fonction de découverte de chaîne de destruction utilise des constantes codées en dur. Celles-ci se trouvent dans le fichier config/config.yml. Les analystes judiciaires sont invités à examiner les valeurs et à apporter des modifications pour leur espace de travail si nécessaire. Ces constantes sont responsables à la fois de la statistique de chaîne de destruction (kcs) et de la découverte de chaîne de destruction (sous-chaînes).
Vous voulez en savoir plus sur les statistiques et l'algorithme utilisés pour ALFA ? Nous avons écrit un article de blog à ce sujet ici (https://medium.com/@invictus-ir/automated-forensic-analysis-of-google-workspace-859ed50c5c92)
Vous devez ajouter un fichier credentials.json au dossier du projet dans le sous-dossier 'config'. Instructions dans le fichier 'CREDENTIALS.md'.
Cela signifie que le port 8089 est déjà utilisé par une autre application. Cela peut se produire si vous avez un serveur Web en cours d'exécution sur ce port et Splunk utilise également le port 8089 par défaut. La solution est d'arrêter (temporairement) l'utilisation de ce port car il est nécessaire pour le flux d'authentification que le port soit disponible.
Parfois, les informations d'autorisation doivent être mises à jour. Le moyen le plus simple est de supprimer le fichier 'token.json' du dossier project_name/config, puis de réexécuter la commande. Si cela pose toujours des problèmes, supprimez token.json et credentials.json et réenregistrez l'application OAuth comme décrit dans
CREDENTIALS.MD
Assurez-vous d'avoir la barre oblique inversée (/) dans l'URI Authorized redirect URIs http://localhost:8089 de vos OAuth 2.0 Client IDs de l'application.
