The Hive & Cortex et installation Docker…

Bonjour à tous, je me suis rendu compte que je ne vous ai jamais parlé du projet The Hive & Cortex. Et comme je refait un peu de docker ces derniers temps, je trouve que c’est l’occasion de vous faire un petit tuto sur The Hive.

The Hive, c’est quoi ?

The Hive est une plateforme open-source de réponse à incident. Open Source jusqu’en version 4, à partir de la 5 c’est un produit commercial (porté par strangebee). Néanmoins la version 4 continue d’être développé et contient les principales fonctionnalités. Le rôle de The Hive est de suivre différentes affaires en affectant des tâches et stockant les preuves collectées, tout en collaborant entre analystes et en s’interconnectant avec d’autres plateformes comme MISP ou des SIEMs. Le produit est très souvent packagé avec Cortex (maintenu par la même équipe) et dont le but est plutôt d’automatiser certaines analyses nécessaires aux investigations (genre des recherches sur AbuseIPDB ou VirusTotal).

Tout ce petit monde est bien évidement accessible par API REST pour venir se brancher un peu partout dans votre SI, ou dehors.

Bref, les deux produits sont une sorte d’embryon de SOAR qui vous permettent de gérer vos tickets, analyses, investigations et qui peut être utilisé à la fois par un SOC, un CERT ou un CSIRT et qui mérite qu’on s’y attarde un peu ici donc.

Installer TheHive 4 avec Docker-Composer

Comme je l’ai dis, le projet se déploie très facilement avec docker. Le projet maintient même un repo GitHub avec tous les setup que vous voulez (voir Docker-Templates). De mon côté, je suis reparti de cette image que j’ai personnalisée ci-dessous pour coller avec mon installation Docker (voir ma série d’article sur Docker & Portainer).

Notez que vous aurez besoin de créer les volumes manuellement au préalable. J’ai également du ajouter le fichier logback.xml et le placer dans cortex_etc et thehive_etc avec les fichiers application.conf présent dans le dossier vol du GitHub.

Un fois que c’est fait, déployez la stack suivante dans portainer.

version: '3.8'
volumes:
  elasticsearch_data:
     external: true
  elasticsearch_logs:
     external: true
  cortex_etc:
     external: true
  cortex_jobs:
     external: true
  thehive_etc:
     external: true
  thehive_db:
     external: true
  thehive_index:
     external: true
  thehive_data:
     external: true
services:
  elasticsearch:
    image: 'elasticsearch:7.11.1'
    hostname: elasticsearch
    container_name: elasticsearch
    restart: unless-stopped
    expose:
      - '9200'
    environment:
      - http.host=0.0.0.0
      - discovery.type=single-node
      - cluster.name=hive
      - script.allowed_types= inline
      - thread_pool.search.queue_size=100000
      - thread_pool.write.queue_size=10000
      - gateway.recover_after_nodes=1
      - xpack.security.enabled=false
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms256m -Xmx256m
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - 'elasticsearch_data:/usr/share/elasticsearch/data'
      - 'elasticsearch_logs:/usr/share/elasticsearch/logs'
    networks:
      Proxy_net:
        ipv4_address: 172.20.11.1
  cortex:
    image: 'thehiveproject/cortex:latest'
    hostname: cortex
    container_name: cortex
    restart: unless-stopped
    command:
      --job-directory /opt/cortex/jobs
    environment:
      - 'JOB_DIRECTORY=/opt/cortex/jobs'
    volumes:
      - 'cortex_etc:/etc/cortex/'
      - 'cortex_jobs:/opt/cortex/jobs'
      - '/var/run/docker.sock:/var/run/docker.sock'
    depends_on:
      - elasticsearch
    expose:
      - '9001'
    networks:
      Proxy_net:
        ipv4_address: 172.20.11.2
  thehive:
    image: 'thehiveproject/thehive4:latest'
    hostname: thehive4
    container_name: thehive4
    restart: unless-stopped
    expose:
      - '9000'
    volumes:
      - thehive_etc:/etc/thehive
      - thehive_db:/opt/thp/thehive/db
      - thehive_index:/opt/thp/thehive/index
      - thehive_data:/opt/thp/thehive/data
    command: '--no-config --no-config-secret'
    networks:
      Proxy_net:
        ipv4_address: 172.20.11.3
networks:
    Proxy_net:
        external:
            name: Proxy_net

Comme vous le voyez dans la conf ci-dessus, je n’expose aucun port donc il faudra jouer avec votre reverse proxy NPM devant votre infra docker pour accéder aux différents services et ajouter un contrôle d’accès ou exposer directement vos services.

La première action à faire est donc se connecter à cortex et cliquer sur Update DataBase.

The Hive & Cortex

Vous pouvez ensuite remplir un accès pour l’administrateur.

The Hive & Cortex

Et il ne vous restera plus qu’a vous loguer.

The Hive & Cortex

Vous devez alors créer un organisation.

The Hive & Cortex

Et une fois dans l’organisation un utilisateur pour récupérer sa clé d’API qui sera nécessaire pour l’interconnexion avec TheHive

Copier alors cette clé d’API dans le fichier application.conf de TheHive (dans le volume thehive_etc évoqué au début de l’installation

The Hive & Cortex

Comme pour Cortex, vous aurez alors besoin de poser le fichier logback.xml dans thehive_etc (il semble manquant dans les images) et redémarrer votre stack docker-compose pour prendre en compte ces changements. De mon côté j’ai également du modifier les permissions sur les volumes thehive_db et thehive_index car The Hive tourne avec un id user et n’avait pas accès au dossier en écriture du coup.

A partir d’ici il ne vous reste plus qu’a vous authentifier sur l’interface web avec les creds par défaut :

The Hive & Cortex

… et changer le mot de passe…

Conclusion

Bon je trouve que ce post sur The Hive & Cortex commence à être assez long comme ça. Je vais, arrêter ici et je reprendrai un peu plus tard sur l’utilisation de l’ensemble dans un contexte entier sortie de l’installation.

J’espère que ça vous sera utile, de mon côté j’ai trouve le projet assez propre : ça se déploie facilement dans un docker un peu tordu même sans suivre à la lettre les instructions d’installation de la doc. Je sais que TheHive et Cortex ont pignon sur rue dans beaucoup d’organisation Cyber comme outils de ticketing ou de plateforme investigation commune. L’IHM fait un peu année 80 mais bon, c’est toujours mieux qu’une ligne de commande (ou pas…^^) et c’est requétable en API. Investiguez bien !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.