HackBBS Reloaded

De HackBBS
Aller à la navigation Aller à la recherche

Introduction

Avec l'age, de nombreuses fonctionnalitées ont été rajoutées à HackBBS. La qualité originelle du code et les modifications successives ne permettent plus d'avoir quelque chose de maintenable.

C'est dans cette optique que la refonte du site a été envisagée.

Équipe

  • Korigan : CDP, dev
  • Sliim : Root
  • Neomoloch : Admin
  • Neib : Admin
  • TorTukiTu : Architecte, dev
  • Lancien : dev
  • heaven : GDP (Gestionnaire de projet), dev
  • fredo2009 : dev
  • Vous ? :-)

Les roles

Les adminsitrateurs peuvent administrer les roles via une page dédié.

Les utilisateurs peuvent exercer différentes activités liées à des rôles.

  1. Pilote
  2. RH (Ressources Humaines)
  3. Formateur
  4. Architecte
  5. Constructeur
  6. Renseignement (Intel)

Chaque rôle offre différentes possibilités, telles que décrites dans les sections ci-dessous.

Pilote

L'équipe PILOTE joue un rôle central dans la coordination des activités de recherche et de développement. Les membres de cette équipe sont chargés de diriger les recherches, de donner des instructions à l'équipe INTEL pour définir les objectifs de collecte d'informations, et de collaborer avec les architectes pour concevoir de nouvelles solutions.

Responsabilités Principales :

  1. Coordination des Recherches : Les pilotes sont responsables de la planification et de la coordination des recherches. Ils définissent les domaines prioritaires et orientent les efforts de l'équipe INTEL en fonction des besoins stratégiques.
  2. Instructions à l'Équipe INTEL : Les membres de l'équipe PILOTE travaillent en étroite collaboration avec l'équipe INTEL, leur fournissant des instructions claires sur les informations spécifiques à collecter. Cela peut inclure des données sur les menaces potentielles, les vulnérabilités critiques, ou toute autre information pertinente.
  3. Demandes aux Architectes : Les pilotes interagissent avec l'équipe d'architectes pour concevoir de nouvelles solutions en fonction des exigences identifiées au cours des recherches. Ils spécifient les besoins en termes d'infrastructures, de sécurité, et d'innovations technologiques.
  4. Alignement Stratégique : Les membres de l'équipe PILOTE s'assurent que les recherches et les développements sont alignés sur les objectifs stratégiques globaux de l'organisation. Ils ajustent les priorités en fonction des évolutions du paysage technologique et des menaces émergentes.

Interaction avec les Autres Équipes :

  • INTEL : Collaboration étroite pour définir les objectifs de collecte d'informations.
  • ARCHITECTE : Demande de conception de solutions adaptées aux besoins identifiés.
  • FORMATEUR : Identification des besoins en formation pour renforcer les compétences des differentes équipes.
  • RH : Implication dans le recrutement et la constitution d'équipes performantes.

Attentes :

Les membres de l'équipe PILOTE sont attendus pour faire preuve de leadership, de vision stratégique, et de compétences analytiques approfondies. Ils doivent être capables de prendre des décisions éclairées, de gérer des projets complexes, et de collaborer efficacement avec d'autres équipes pour atteindre les objectifs organisationnels. En outre, la communication claire des objectifs et des directives est cruciale pour assurer la cohérence dans l'ensemble des opérations de l'entreprise.

Ressources Humaines (RH)

L'équipe RH joue un rôle essentiel dans la gestion des ressources humaines au sein de l'organisation. Leur responsabilité principale est de recruter de nouveaux membres pour les différentes équipes et de gérer la communication autour des différents projets.

Responsabilités Principales :

  1. Recrutement : L'équipe RH est chargée d'identifier les compétences nécessaires pour chaque équipe et de recruter des membres qualifiés. Cela implique la rédaction d'offres d'emploi, la participation à des salons professionnels, la recherche de profils adéquats, et la réalisation d'entretiens.
  2. Gestion des Effectifs : Ils veillent à la constitution d'équipes diversifiées et complémentaires en termes de compétences. L'équipe RH travaille en collaboration avec les responsables d'équipes pour anticiper les besoins en personnel en fonction des projets à venir.
  3. Communication Interne : Les membres de l'équipe RH sont chargés de faciliter la communication interne au sein de l'organisation. Ils veillent à ce que les informations pertinentes concernant les projets, les nouveaux membres, et les événements internes soient partagées de manière efficace.
  4. Gestion des Projets RH : Ils coordonnent les projets liés aux ressources humaines, tels que les programmes de formation, les évaluations de performance, et les activités de renforcement d'équipe.
  5. Relations Membres : L'équipe RH est la première ligne de soutien pour les membres, traitant les préoccupations, résolvant les conflits, et favorisant un environnement de colaboration positif.

Interaction avec les Autres Équipes :

  • PILOTE : Collaboration pour comprendre les besoins en recrutement liés aux projets en cours et à venir.
  • INTEL : Coopération pour identifier les compétences spécifiques requises pour les activités de renseignement.
  • ARCHITECTE : Communication sur les compétences et profils nécessaires pour les nouveaux projets d'architecture.
  • FORMATEUR : Coordination pour s'assurer que les nouvelles recrues reçoivent une formation adéquate.

Attentes :

Les membres de l'équipe RH doivent posséder d'excellentes compétences en communication, être capables de comprendre les besoins spécifiques de chaque équipe, et être orientés vers la construction d'équipes performantes. Ils doivent également être proactifs dans la gestion des ressources humaines, anticipant les besoins futurs et assurant un suivi continu pour garantir la satisfaction et le développement professionnel des employés. En outre, la confidentialité et le professionnalisme sont essentiels dans le traitement des informations sensibles liées aux ressources humaines.

FORMATEUR

L'équipe FORMATEUR participe à la formation des membres en partageant des documentations, tutoriels, et articles. Elle trie également les demandes d'aide et organise des événements pour former sur différents sujets. Cela peut aller du pilotage, au recrutement en passant par des formations purement techniques afin d'expliquer comment attaquer ou défendre un système.

Les sources d'information de l'équipe FORMATEUR peuvent être catégorisées en diverses catégories telles que :

  • Cryptographie/Stéganographie
  • Reverse Engineering
  • Programmation Réseau
  • Management
  • ...

(TBC)

ARCHITECTE

(TBC)

CONSTRUCTEUR

(TBC)

RENSEIGNEMENT (INTEL)

Définition : L'objectif du groupe INTEL est de collecter de l'intelligence, de la donnée. Les sources de données peuvent être issues de l'OSINT (open source intelligence) ou bien de sources privées.

L'information est généralement classifiée en 3 catégories : {Noire, Grise, Blanche}.

  • Les informations Noires sont privées et généralement confidentielles ou hautement confidentielles.
  • Les données Grises appartiennent généralement à des entreprises ou groupes d'individus. Accessibles aux seuls membres autorisés à y accéder, ces informations ne sont pas confidentielles mais ne sont pas non plus publiques. Ce sont généralement des données issues de réseaux privés.
  • Les données Blanches sont publiques. L'OSINT consomme généralement des données blanches et les organise et/ou les met en valeur.

L'équipe INTEL a pour principal but de collecter et d'organiser les données blanches afin que les autres équipes puissent travailler sur des données à jour. Elle collabore avec l'équipe PILOTE qui définit les objectifs à atteindre. Les membres de l'équipe INTEL réalisent des tâches unitaires, chacun aidant comme il le désire. Cependant, le travail est de préférence intégré et intégrable dans des objectifs ayant une portée plus large. Par exemple, l'identification et la caractérisation de cibles (identification d'IP, ports ouverts, versions des serveurs en écoute, CVE des cibles), qui sont des tâches propres à l'équipe INTEL, peuvent aider les équipes EXEC à travailler sur des données précises, et avoir été requises par l'équipe PILOTE qui a besoin d'identifier la source d'une attaque contre nos infrastructures. Les tâches sont donc attribuées par les membres de l'équipe PILOTE de manière individuelle ou collective en fonction des besoins.

Les membres de l'équipe INTEL peuvent souhaiter se subdiviser en plusieurs catégories telles que :

  • Reconnaissance
  • Collecte d'informations
  • Analyse de vulnérabilités
  • ...

(TBC)


Liste des tâches pour le developement de HackBBS Reloaded

  • FAIT - Concevoir et Développer la GUI (IHM) - Tortukitu
  • FAIT - Concevoir le noyau - Tortukitu
  • FAIT - Développer des modules testant toutes les fonctionnalitées de base du noyau - Tortukitu
  • FAIT - Créer le dépot GIT reloadedHackBBS - Korigan
  • FAIT - (Optionnel) Créer le système de gestion de projet et des tickets (Redmine ? autre ?) - Korigan
  • FAIT à revoir avec Korigan - Migrer devBBS vers le wiki - Neomoloch, Zer00cool, Lancien - Manque 2 fichiers .sql
  • FAIT - Mettre en place un environnement de test et de dev avec une bdd propre et vidée de ses véritables infos - Korigan et?
  • En cours - Écrire le code métier du noyau - Tortukitu, Korigan
  • En cours - Écrire le code de la couche consumer du noyau - Tortukitu, Korigan
  • A faire - Développer une API pour brancher les challenges (Sous forme d'un Web service SOAP pour pouvoir y brancher facilement des challs situés sur des serveurs externes)- Anybody :)
  • En cours - Référencement, campagne publicitaire. - Neomoloch
  • FAIT - Traduction de certains passages en langue Bambara (dialecte Africain) - Neomoloch.

Pour une liste complete, voir la Roadmap

Contraintes

  • Utiliser l'installation et la configuration actuelle du serveur Apache2
  • Utiliser des technologies les plus connues et les plus répandues possibles. (Ce qui permettra une implication plus large de la communautée)
  • Utiliser des technologies permettant une modularité
  • Utiliser des technologies pouvant s'interfacer avec MySQL (Réutilisation de la base de données existante)
  • Limiter au maximum l'utilisation de frameworks pour que le projet soit maintenable avec un bagage de connaissances minimum

Technologies retenues

  • PHP
  • PDO
  • Ajax
  • HTML5
  • gitlab? (Cf heaven, sliim et korigan)

Architecture

Il s'agit d'une architecture 3 couches:

  • Une couche gère l'interface utiisateur
  • Une couche contient le code métier
  • Une couche consomme les différents services (Tape dans les bases de données, envoie les emails, etc.).

Le diagramme ci dessous vous présente l'architecture retenue. Une ligne pleine représente une notion de dépendance, une ligne pointillée un flux de communication.

La communication entre les couches DOIT suivre le sens indiqué par les flèches. Par exemple, appeller des fonctions dans la couche Consumer depuis la couche Business est autorisé. Par contre appeller des fonctions de la couche Business depuis la couche Consumer est interdit.

Une approche par script de transaction a été choisie. Ce qui signifie que les objets du modèle ne DOIVENT JAMAIS comporter des fonctions métier de traitement.

D'une manière plus générale, retenez seulement que vos modules ne devraient accéder QUE a la couche business du noyau (et les couches transversales tel que le modèle ou la sécurité).

L'ensemble de l'application est extensible via l'utilisation de modules (cf. schéma).


Couche provider (Interface utilisateur)

Une interface de type "terminal" a été retenue. Ce type d'interface pose en temps normal des problèmes d'expérience utilisateur, mais s'agissant d'un site de chall, ceci n'entre pas vraiment en ligne de compte. La gestion du terminal est effectuée par des fonctions javascript utilisant la lirairie JQuery et ses extensions jTerminal et JQueryUI.

La communication du serveur vers le client se fait en JSON. C'est en fait un objet DataBusVO sérialisé qui est envoyé du serveur vers le client. La sérialisation est gérée par le script dispatcher.php

L'ensemble du travail des modules consiste donc à générer une instance de DataBusVO qui sera récupérée par dispatcher.php pour modifier l'affichage côté client.

Les fichiers de cette couche sont situés dans le répertoire / et /resources.

Couche business (métier)

La couche métier présente des services aux couches supérieures. Ces services consistent en des singletons ou, plus exotiquement, des fonctions statiques. Les services présentés sont les suivants:

  • LoaderService : Gère le chargement dynamique des modules.
  • SecurityService : Fourni des fonctions de vérification des permissions des utilisateurs
  • SessionService : Gère l'étanchéité des variables de sessions entre différents modules, fournis des fonctions de récupération de l'utilisateur courant
  • UserService : Fournis des fonctions de CRUD des utilisatuers, de vérification de connection d'un utilisateur
  • SanitizerService : Fournis des fonctions de nettoyage des variables utilisateur.

Les fichiers de cette couche sont situés dans le répertoire /php/core_services/business et /php/modules.

Couche consumer (consommateur de services)

Cette couche conient des services de manipulation de la base de données et d'envoi d'emails.

Les fichiers de cette couche sont situés dans le répertoire /php/core_services/consumer.

Pour consommer des services de cette couche, il faut TOUJOURS le faire via la facade.

Voici un diagramme de classes partiel (il manque les méthodes et les attributs...) de la couche consumer :

Pas d'ORM pour ce projet. Pour savoir comment gérer le relationnel, voir la couche transversale modèle.

Couche transversale : modèle

Cette couche contient des objets porteurs de données dont les instances sont transportés d'une couche à l'autre. Par exemple, la couche consumer crée une instance de User qui est renvoyé à la couche Business.

Les fichiers de cette couche sont situés dans le répertoire /php/model.

Les différents objets du modèle étendent la classe persistent, ce qui permet de donner à chaque instance un identifiant unique. les relations entre objets se font indirectement via leurs identifiants. Il ne faut pas mettre une instance d'un objet dans la variable d'un autre (ce pour éviter les sauvegardes et les chargement en cascade (et éviter un éventuel chargement paresseux d'expérience casse geule à implémenter et à utiliser...)). On a donc opté pour un chargement dynamique des objets a chaque fois que nécéssaire a partir de leurs dentifiants.

Dans notre cas, le coût de cette solution en terme de performances ne devrait pas être un problème.

Dans le cas de relations 1-N, il faut utiliser des arrays d'entiers (identifiants) pour représenter cette relation.

Couche transversale : sécurité

TODO.

Couche transversale : logging

TODO.

Infrastructure

HackBBS Reloaded met a disposition des membre des workspaces qui leurs sont privee. Ces workspace sont situe sur le serveur dans /opt/jail/tmp/workspace/<username>

Un second espace de travail en dehors de /var/www est egalement utiliser pour acceuillir les donnees issue de l'activitee intel. Les informations traitee sont situee dans /opt/jail/tmp/intel

Configuration

La configuration (données d'accès aux bases, définition des modules à charger) se trouve dans le fichier hackbbsConf.ini dans le répertoire /php/conf/

Détail du fichier de confguration

Développement de modules

Un module (ici Monmodule) est consitué de trois éléments:

  • Une implémentation de l'interface IModule (obligatoire) appellé par convention MonmoduleModule.
  • Un dossier (optionnel) appellé par convention monmoduleModule.
  • Une déclaration names[] = Monmodule dans le fichier de configuration hackbbsConf.ini (obligatoire).

ATTENTION ! Tous les modules doivent se trouver dans le dossier /php/modules. Veillez à bien respecter les conventions de nommage. Sinon, votre module ne sera pas chargé par le LoaderService et ne sera pas disponible dans le terminal.

Implémentation de IModule

L'interface à implémenter (/php/contract/IModule) compte 3 fonctions :

  • function canHandleData($data) : $data est la String que l'utilisateur a entré dans le terminal. Renvoyez true si votre module doit se charger de réaliser l'opération demandée par l'utilisateur, false sinon.
  • function manageData($data) : $data est la String que l'utilisateur a entré dans le terminal. Ici, réalisez vos traitements, puis renvoyez une instance de DataBusVO contenant les actions que vous voulez effectuer sur le terminal. Voir la page Contrôle du terminal via DataBusVO.
  • function getPrototype() : Renvoie String contenant une description rapide de la commande en HTML. Typiquement macommande : Ce que fait ma commande.

Ci dessous une implémentation de démonstration de IModule

class MonmoduleModule implements IModule{

   public function canHandleData($data) {
       $ans = false;
       if($data == "macommande"){
           $ans = true;
       }
       return $ans;
   }
   public function getPrototype() {
       return "macommande : Ce que fait ma commande";
   }
   public function manageData($data) {
       $dataBus = new DataBusVO();
       $dataBus->setHtmlData("Cette comande ne fait rien de particulier.");
       return $dataBus;
   }    

}

Cette implémentation est à placer dans le répertoire /php/modules.

Modification du fichier de configuration

Ajouter la ligne :

names[] = Monmodule

A la fin de la section [modules] du fichier /php/conf/hackbbsConf.ini

Répertoire monmoduleModule

Contient tous les fichiers spécifiques au mondule monmodule. Si nécéssaire, découper en couches business, model et consumer. Ce répertoire est à placer dans le répertoire /php/modules.

REMARQUE : Entorse à l'architecture pendant la partie refonte de HackBBS.. Un développeur de modules ne devrait jamais toucher au noyau. Or, la plupart du métier (et modèle) développé aujourd'hui sera nécéssaire à un grand nombre de futur modules. Il est donc de bon ton d'ajouter au métier du noyau les fonctions et services que l'on saura réutilisés dans la suite des développements. Ceci est laissé à l'appréciation du développeur. Lorsque la refonte sera terminé, il deviendra interdit aux futurs développeurs de toucher au code du noyau pour y ajouter de nouvelles fonctionnalitées. Les modules préexistants seront alors fusionnés avec le noyau.

Règles générales (A toujours avoir sous les yeux !)

  • A toute classe son interface.
  • Jamais de copier coller
  • Respectez l'architecture
  • Ne jamais utiliser directement $_SESSION, toujours passser par le service SessionService (sauf exceptions autorisées par l'architecte)
  • Chaque classe et fonction doit être commentée
  • Pensez sécurité... Vous développez un site de hack. Il sera attaqué de la facon la plus tordue possible. Vous avez un service de nettoyage des entrées, alors utilisez-le !
  • Choisissez toujours la convention sur la configuration
  • (Optionnel) Écrire une page de wiki par module
  • (Optionnel) Si vous avez le temps, les tests unitaires, c'est bien

FAQ / HOWTO