
Console centrale pour les collecteurs Douglas-042 HEADQUARTERS. Balaye une flotte, corrèle les résultats entre les hôtes et gère les flux IOC et la livraison SIEM depuis un seul endroit.
Balayez un parc d'hôtes Windows et Linux à la recherche de signes de compromission, décidez ce qui compte réellement, et agissez — depuis une seule console, avec une seule commande par hôte.

Une chasse n'est pas un scan. Douglas collecte les artefacts qu'un analyste collecterait à la main — processus, services, tâches planifiées, autoruns, connexions, comptes, pilotes, journaux d'événements, cron, systemd, historique du shell, racines web — et exécute 201 détections intégrées sur ceux-ci, plus vos propres règles Sigma, YARA et personnalisées.
Ensuite, il fait la partie que la plupart des outils vous laissent : il indique quels résultats nécessitent encore une décision, laquelle des soixante adresses externes examiner en premier, et vous permet d'agir sans ouvrir une session RDP.
déployer une commande ──▶ chasser ──▶ les résultats apparaissent en direct
│
┌──────────────────────┼──────────────────────┐
▼ ▼ ▼
correspondance flux IOC score de réputation actions de réponse
"c'est un C2 connu" "92/100, 340 signalements" isoler · tuer · collecter
Les parcs qui ont le plus besoin de chasse sont souvent ceux qui n'ont pas d'EDR : quelques dizaines de serveurs, pas de budget pour un agent, et un incident qui a commencé il y a trois jours. Le choix se fait généralement entre une plateforme commerciale que personne n'a validée et un dossier de scripts PowerShell que quelqu'un exécute à la main.
Douglas se situe entre les deux. Rien n'est installé sur l'hôte que vous investigatez — le collecteur s'exécute une fois et se termine — et chaque résultat atterrit dans une console unique que vous pouvez transmettre à la personne qui reprendra l'incident.
Les résultats sont faciles à produire et coûteux à lire. Cet écran existe pour garder la file suffisamment courte pour que quelqu'un la lise encore au troisième passage.
Trois issues, et la différence entre elles compte six mois plus tard :
| Décision | Ce qu'elle fait |
|---|---|
| Confirmé | Réel. Reste dans le score de risque, l'hôte reste rouge. |
| Faux positif | Retiré du score pour cet hôte uniquement. |
| Suppression | Une règle permanente qui masque le même résultat à chaque futur scan. |
Rien n'est jamais supprimé. Retirez une suppression et tout ce qu'elle masquait réapparaît. Règles les plus bruyantes se trouve en bas parce que les ajuster vide la file plus rapidement que de la parcourir résultat par résultat.
Les 201 détections sont regroupées en 15 catégories — activables une par une ou par famille entière. Cliquez sur n'importe quelle règle pour lire ce qu'elle vérifie, comment elle se déclenche légitimement, et quoi faire ensuite.
La distinction que l'écran précise, car se tromper est courant :
Désactiver une règle n'est pas la même chose que la supprimer. Désactivée signifie que le collecteur n'exécute jamais la vérification — rien n'est produit et il n'y a rien à examiner. Une suppression enregistre le résultat et le marque comme une décision prise par quelqu'un, avec une raison associée.
Utilisez désactivé pour une famille de bruit que vous avez acceptée. Utilisez suppression pour un motif spécifique sur un hôte spécifique.
Un tiret sous Déclenché est généralement la réponse saine : DGL-014 ne se déclenche que lorsqu'un journal semble effacé. La liste représente ce que l'outil vérifie, pas ce qui ne va pas.
Le formulaire est plus rapide pour votre première règle et plus lent pour votre vingtième. Les règles peuvent donc aussi être écrites sous forme de texte — vérifiées au fur et à mesure de la saisie, contre 11 tables d'artefacts et 13 opérateurs.
La zone en dessous remplit deux fonctions. Quand la règle est erronée, elle nomme la ligne, pas la règle :
line 7: Condition 1: 'is_maybe' is not an operator.
Quand elle est correcte, elle indique ce que la règle va réellement correspondre — car une règle qui se valide puis correspond à autre chose que ce que son auteur voulait dire est l'échec qu'il vaut la peine d'attraper :
Valide — ACME-001 Lit Services et correspond lorsque Signed est faux et que PathName ne contient pas 'Program Files' et que PathName ne contient pas 'System32'
Import et export en JSON, YAML ou CSV. L'aller-retour est garanti — notre propre export passe notre propre validateur dans les trois formats.
| Question | Quand | Résultat | |
|---|---|---|---|
| Flux IOC | Y a-t-il quelque chose de cette liste de C2 sur mes hôtes ? | Pendant la chasse | DGL-IOC — une correspondance confirmée, pas un score |
| Enrichissement | Cet hôte a communiqué avec 60 adresses — lesquelles examiner en premier ? | Après la chasse | 92/100, 340 signalements, C2 Cobalt Strike connu |
Quinze sources de flux sont fournies prêtes à l'emploi — Feodo, ThreatFox, URLhaus, TweetFeed, USOM, SSL Blacklist, Emerging Threats, OpenPhish, MISP — plus un flux personnalisé qui lit toute URL renvoyant des données en forme d'indicateur.
Quatre fournisseurs de réputation : AbuseIPDB, VirusTotal, ThreatFox (offres gratuites) et GreyNoise (payant, désactivé par défaut). Les verdicts ne sont jamais fusionnés en un seul chiffre — AbuseIPDB compte les plaintes, VirusTotal compte les moteurs, ThreatFox connaît l'infrastructure, et une moyenne de ceux-ci est un chiffre qu'aucun d'entre eux ne défendrait. Le badge affiche le pire verdict avec le fournisseur qui l'a donné.
Les offres gratuites sont protégées : résultats mis en cache 12 heures, 40 adresses par exécution, et un compteur quotidien qui s'arrête avant le fournisseur. Les adresses privées ne sont jamais envoyées.
Onze actions en trois groupes — observer, agir, contenir. Les cinq en lecture seule sont marquées différemment des six qui modifient l'hôte, et chaque action mutante exige une raison écrite.
L'isolation maintient la console joignable à dessein : un hôte coupé de son propre agent ne peut pas être libéré à distance, et quelqu'un devrait s'y rendre physiquement. Les cibles qui casseraient la machine plutôt que de contenir l'intrusion — lsass.exe, systemd, pid 1, Administrator, /bin/bash — sont refusées, pas signalées par un avertissement, car le moment où cela est utilisé est le moment où personne ne lit les avertissements.
La sortie revient sous forme de cartes structurées plutôt que d'un vidage de terminal, et les lignes sont actionnables : une liste de processus a un bouton Tuer par ligne, une adresse a Réputation.
| Windows | Linux | |
|---|---|---|
| Sigma | Event Log + Sysmon | auditd execve + auth/cron/syslog |
| YARA | contenu de fichier | contenu de fichier |
Les règles Sigma Linux dont la source de journal ne peut pas être lue sont rejetées à l'import avec une raison, plutôt que chargées et laissées à ne jamais se déclencher — un résultat vide d'une règle qui n'a pas pu s'exécuter ressemble exactement à un hôte propre.
L'agent Linux vérifie si auditd est installé, en cours d'exécution, et a des règles chargées, puis indique ce qui manque et ce que cela coûte :
Detection capabilities on this host
auditd : NOT RUNNING
Nothing records what executes on this host, so execution
rules cannot fire and a clean result only means the sweep
could not look. Install it:
apt install auditd && systemctl enable --now auditd
Onze destinations en trois groupes :
Les destinations de chat et de pagination affichent une phrase plutôt qu'un enregistrement, et limitent le nombre de résultats dans un seul message : un canal dans lequel on colle une centaine de lignes est un canal que les gens mettent en sourdine.
git clone https://github.com/YOURNAME/douglas-042.git
cd douglas-042
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000
Ou avec Docker :
docker compose up -d
Ouvrez http://your-server:8000
Connexion par défaut
Nom d'utilisateur :
adminMot de passe :douglasLa console force un changement de mot de passe à la première connexion — un mot de passe par défaut intégré à un paquet ne doit pas survivre sans être remarqué. Définissez
DOUGLAS_CONSOLE_PASSWORDdans.envavant le premier démarrage si vous préférez choisir le vôtre.
.envn'est lu que tant que la base de données est vide. Après le premier démarrage, réinitialisez avecpython3 -m app.manage passwd admin.
Au démarrage, vous obtenez le jeton d'enrôlement pour l'étape suivante :
Created the initial admin account: admin
The default password is still in use. Change it at first sign-in.
Enrollment token ready: dgl-enroll-xBAk8...
Douglas-042 console 1.0 ready
Déployer → choisir la plateforme → copier une commande.
Windows — PowerShell en mode administrateur :
iex (irm 'http://console:8000/api/v1/reports/deploy/script?token=YOUR_TOKEN')
Linux — en root :
curl -sSL 'http://console:8000/api/v1/reports/deploy/script?token=YOUR_TOKEN&platform=linux' | sudo bash
Six étapes s'affichent en flux dans le terminal : téléchargement, enrôlement, récupération du collecteur, installation du service, confirmation qu'il est actif, premier point de contact. Si l'enrôlement échoue, rien n'est installé, et il le dit.
| # | Écran | Faites ceci | Vous obtenez |
|---|---|---|---|
| 1 | Flux IOC | Ajoutez Feodo Tracker, appuyez sur Actualiser | Détection C2 — aucune règle à écrire |
| 2 | Threat intel | Collez une clé AbuseIPDB gratuite, appuyez sur Tester | Ordre de triage sur le graphe |
| 3 | Parc | Sélectionnez un hôte, lancez une chasse | Résultats, en direct |
| 4 | Journaux et événements | Cherchez les erreurs de module | Si le balayage a réellement pu regarder |
| 5 | Triage | Traitez la file, ajustez les règles les plus bruyantes | Une liste que quelqu'un lit encore |
| 6 | Mes règles | Chargez les 6 exemples, ouvrez-en un | Comment écrire les vôtres |
| 7 | Intégrations | Webhook Slack, seuil à HIGH | Vous en êtes informé sans surveiller |
┌──────────────────────────────────────────────────────────┐
│ Console — FastAPI + SQLite, un processus, pas de file │
│ triage · findings · graph · rules · response · reports │
└───────────────▲──────────────────────────────────────────┘
│ les agents interrogent : heartbeat 20s, actions 5s
┌───────────────┴──────────────────────────────────────────┐
│ Agent (PowerShell / shell) │
│ └── Collecteur — s'exécute, rapporte, se termine │
│ 201 règles intégrées + Sigma + YARA + vos règles │
└──────────────────────────────────────────────────────────┘
Tableau de bord · Cas · Parc · Chasses · Réponse · Résultats · Triage · Fréquence · Graphe · Matrice MITRE · Chronologie · Diff · Règles intégrées · Mes règles · Sigma · YARA · Flux IOC · Threat intel · Intégrations · Planifications · Utilisateurs · Déployer · Journaux et événements
Intégrité de la collecte · Autoruns et démarrage · Processus et réseau · Services et tâches · Mécanismes de persistance · Posture de sécurité · Pilotes et noyau · Preuves d'exécution · Authentification et comptes · Accès à distance · Sysmon, Kerberos et AD · Fichiers, webshells et exfiltration · Activité utilisateur et confiance · Rootkit et mémoire · Correspondances d'indicateurs
Les deux : comptes et groupes locaux · processus en cours avec signatures et hachages · connexions TCP et points de terminaison externes · services · fichiers récemment écrits · code en mémoire · racines web et motifs de webshell
Windows : journaux d'événements · tâches planifiées · autoruns · persistance du registre · abonnements WMI · pilotes · partages SMB · Prefetch · magasins de certificats
Linux : cron · unités systemd · fichiers de démarrage du shell · LD_PRELOAD · binaires setuid · authorized_keys et configuration sshd · historique du shell · journaux d'authentification · taint du noyau · WordPress
Console : Python 3.11+, six dépendances (FastAPI, uvicorn, SQLAlchemy, pydantic, python-multipart, PyYAML). Fonctionne sur une VM de 1 Go.
Hôtes Windows : PowerShell 5.1+, administrateur. Rien d'autre.
Hôtes Linux : bash et curl. python3 active la progression en direct et
les règles sur le contenu des fichiers ; auditd active les détections d'exécution. La console vous indique
lesquels manquent sur quel hôte.
0600 — une clé fixe livrée dans un paquet serait partagée par tous ceux qui l'ont téléchargé.📄 Rapport technique (PDF) — 14 pages couvrant l'architecture, chaque écran de la console, les 37 modules du collecteur, le modèle de détection, les actions de réponse et le modèle de sécurité.
Sous licence MIT. Voir LICENSE.