Blog

Retour sur la dernière faille de sécurité majeure drupal (SA-CORE-2019-003)

slybud
28/02/2019
Retour d'expérience sur la dernière faille de sécurité du core Drupal et comment nous avons géré cela sur les sites que nous maintenons en TMA chez Axess Open Web Services
Drupal Security Alert

Vous l'avez sans doute remarqué, cela fait maintenant deux ans que les failles de sécurité majeures se multiplient sur le core de notre CMS/CMS favori (Drupal pour ceux.elles qui se seraient vraiment perdu.e.s et seraient arrivé.e.s sur ce billet de blog en tapant "croisement cochon d'inde licorne"). Deux manières de voir les choses :

  • Drupal est un CMS peu fiable et les failles de sécurité sont légion, c'est peu rassurant
  • Drupal, en tant que logiciel (libre ou non), est un ensemble de lignes de code exposé comme les autres et il faut souligner la maturité de cette outil dans la gestion de sa politique de sécurité avec une équipe dédiée à la sécurité et des process clairs.

Devinez quel point de vue nous avons adopté à AOWS ? ;-)

Il m'a semblé intéressant de vous raconter comment se passe une mise à jour de sécurité critiques pour les sites dont nous assurons la TMA (plusieurs dizaines, la plupart très sensibles), et quels process nous avons mis en place au fur et à mesure des années pour gérer sans encombre ces événements.

Pour résumer :

  • Nos architectes et chefs de projet techniques suivent de près les publications de la security team et les annonces de sécurité
  • Une faille de sécurité majeure, telle que celle du 20/02/2019, est annoncée quelques jours auparavant par la security team drupal
  • A ce moment, l'annonce est analysée par nos architectes techniques afin d'évaluer au mieux les risques
  • En parallèle, notre directeur d'activité recense les membres de l'équipe qui pourront être présents le jour J, à l'heure dite, sur la base du volontariat/en fonction des contraintes de chacun
  • La liste des sites que nous maintenons est vérifiée en amont et les mises à jour sont réparties entre les forces qui seront présentes le jour J
  • Les clients sont prévenus (Mail et/ou interface de tickets Redmine) de la future mise à jour, et éventuellement leurs hébergeurs si nous ne pouvons pas déployer nous même
  • Les pizzas et autres nourritures à forte teneur en calories techniques sont commandées
  • L'équipe attend fébrilement la sortie de la faille et du/des patch(es)
  • Ces éléments sont analysés par nos architectes techniques dés leur sortie
  • Un plan est établi en fonction des typologies de sites impactés et des priorités et les mises à jour + déploiement commencent
  • La check-list est vérifiée
  • Tout le monde peut reprendre une activité normale et dormir sur ses deux oreilles

Je ne vous ai pas parlé ici de la coopération renforcée avec les administrateurs systèmes qui dans certains cas nous permettent de court-circuiter pas mal d'étapes pour tous les sites hébergés par nos soins, en concoctant un script magique qui recherche toutes les instances drupal sur un serveur et les patche ensuite dans la foulée. Tout cela est déployé en un clic avec notre système d'orchestration Saltstack : c'est le pouvoir et la magie noire du DevOps !!

Si vous souhaitez nous confier votre projet de Site Internet et/ou de TMA drupal pour bénéficier de tous ces process, n'hésitez pas à nous contacter !

 

Bilan #Drupalgeddon

slybud
29/06/2018
Sécurité : Retour sur les épisodes #DrupalGeddon 2018 @OWS et @OWNS
Photo de l'équipe OWS au travail le soir du DrupalGeddon2

Autant 2015, 2016, 2017 ont été des années relativement "normales" en termes de failles de sécurité sur notre CMS préféré (le dernier épisode hautement critique datant d'octobre 2014 : faille Sql injection connue sous le nom de "Drupalgeddon"), autant 2018 aura démarré déjà bien fort en nous proposant 2 failles hautement critiques dans le core drupal, toutes version confondues (8, 7 et même Drupal 6, car oui, il existe encore des Drupal6/Pressflow en production, ne faites pas les innocents).

Je profite de ce billet de blog pour féliciter toutes les équipes OWS et OWNS pour leur implication, leur préparation et leur professionnalisme au cours de ces deux événements. Pour rappel, la publication de ce genre de failles nécessite des réactions dans l'heure afin de garantir la sécurité des sites de nos clients et la non compromission de leurs systèmes d'information.

Petit rappel du (bon) déroulement des opérations , n'hésites pas à nous contacter si vous souhaitez en savoir plus ou voir comment nous pourrions vous aider à mettre ces process en place. Pour les clients disposant d'un contrat de TMA chez OWS, cela s'est passé de la manière suivante :

  • Veille technologique hebdomadaire de nos architectes techniques et lead développeurs, ayant permis de prendre connaissance une semaine avant de la SA et de la fenêtre de release des patches
  • Mobilisation des équipes pour réserver du temps de travail sur ce créneau inhabituel (20h-22h pour le premier épisode) et vérifier la disponibilité de chacun
  • Vérification de l'état de toutes les instances (preprod et prod) des drupal maintenus
  • Déploiement éventuel des développements/mises à jour en attente ou création des branches git adéquates
  • Vérification de l'intégration continue pour tous ces projets
  • Recensement des hébergeurs tiers et prise de contact pour les prévenir des déploiements nécessaires sur le créneau visé
  • Répartition des clients sur tous les membres de l'équipe disponible (à la fois pour l'application des patches, mais aussi pour les déploiements/l'intégration continue et la recette technique après déploiement)
  • Alerte de tous les clients de l'opération à venir
  • Attente du jour J et de l'heure H

En parallèle, les administrateurs systèmes de notre filiale Open Web Network Solutions ont mis en place les actions suivantes :

  • Mobilisation des équipes pour réserver du temps de travail sur ce créneau inhabituel (20h-22h pour le premier épisode) et vérifier la disponibilité de chacun
  • Préparation d'un script d'orchestration permettant de
    • recenser automatiquement toutes les instances drupal d'un serveur
    • recenser les fichiers concernés par le patch de sécurité
    • appliquer automatiquement le patch de sécurité à ce fichier
    • sortir un rapport détaillé pour les éventuelles actions manuelles à mener pour de rares cas
  • Tests de ce script sur des infras de dev
  • Prévenir les clients (hors TMA OWS

Résultat : à l'heure H du jour J, dans une ambiance détendue et d'équipe, avec de la restauration livrée dans les locaux pour ceux qui étaient sur place à l'agence, il nous a fallu 2 heures pour mettre à jour et sécuriser des centaines d'instance drupal et aller se coucher apaisés :) . Aucun site n'a d'ailleurs été compromis grâce à ces actions

Donc encore bravo et merci à toute l'équipe et aux process/méthodes éprouvées pour la TMA et linfogérance Drupal.

Pour références/aller plus loin :

 

 

 

Gérer proprement vos modules

jcisio
29/09/2013
Dans cet article, je présente une approche pour ranger les fonctions dans votre module en utilisant la programmation orientée objet (OOP). Cela n'a par contre rien à voir avec Drupal 8.

Dans cet article, je présente une approche pour ranger les fonctions dans votre module en utilisant la programmation orientée objet (OOP). Cela n'a par contre rien à voir avec Drupal 8.

Traditionnellement, dans un module, toutes les fonctions sont préfixées par le nom du module et présente dans le fichier ton_module.module. Ça fait un gros fichier ! Même si Dries a dit qu'il ne voyait pas de problème avec un fichier .module de 100 Ko, aujourd'hui on a la tendance de faire des petits fichiers ton_module.*.inc, chacun a une responsabilité unique. Pour utiliser une fonction dans ces fichier :

  • soit on met une require_once au début du fichier .module ;
  • soit on chaque fois on a besoin d'une fonction, on commence par module_load_include() ;
  • soit on charge le fichier automatiquement (le cas avec hook_menu(), hook_theme() etc.).

Si vous travaillez avec Drupal depuis un peu de temps, vous devriez connaître tout cela. Mais si on veut aller plus loin, on peut mettre les fonctions dans des classes sous forme des méthodes statiques. Les avantages sont :

  • autoload de toutes les classes ;
  • et l'utilisation propre de l'espace de nom.

Pour l'autoload, vous pouvez mettre classiquement les fichiers dans le .info dans les lignes files[] = ..., ou bien vous écrivez votre propre class loader si vous êtes trop paresseux pour modifier les fichiers .info, sinon vous pouvez en récupérer un avec Google.

Pour l'espace de nom, ce n'est pas forcément la vraie nouvelle fonctionalité du PHP 5.3 (car il arrive que vous utilisez encore la version 5.2), mais le nom de classe. Vous n'avez pas besoin de préfixer les méthodes dans vos classes. Votre intélligent IDE (vim l'est aussi) pourra avoir des suggestions plus pertinentes. Exemple : vous travaillez sur un projet "vous", avec 20 modules "vous_module1", "vous_module2"..., dans chaque module vous avez des fonctions vous_module1_fonction1, vous_module1_fonction2... et vous tapez "vous" votre IDE va suggérer 10 fonctions qui sont tous dans le premier module vous_module1. Pas très pertinent. Avec les classes séparées, votre IDE présente d'abord des classes, puis les méthodes quand vous complétez le nom de classe. Plus pratique !

Les méthodes enveloppées dans des classes ne pollue pas le scope global, elles aident aussi pour le refactoring ou le protypage ou le test. Mais l'article est trop long, donc j'arrête. Quand même, avant, pour l'info, ce paradigme est utilisé récemment dans Drupal 7 avec la classe FieldInfo (par yched et al.) et c'est très bien. Il n'y a alors pas de raison pour ne pas l'utiliser.

PS : un article sans code, mais allo quoi.

ton_module.inc

function ton_module_faire_1() {} function ton_module_faire_2() {}

sera :

TonModule.php

class TonModule { public static function faire_1() {} public static function faire_2() {} }

Développement drupal sous vim : liste des fonctions drupal 6

piotre
19/03/2009
Comment ajouter l'autocomplétion des fonctions de Drupal 6 à vim

Après quelques projets drupal 6 développés sous l'éditeur vim, je me suis aperçu qu'une autocompletion incluant les fonctions core drupal 6 serait bien utile.

J'ai trouvé le dictionnaire des fonctions core drupal 5 pour vim ici : http://www.vim.org/scripts/script.php?script_id=1675, mais pas le dictionnaire des fonctions core drupal 6.

J'ai donc générer à l'aide d'un script la liste de l'ensemble des fonctions core drupal 6, tout en respectant la syntaxe des dictionnaires vim : drupal_6_core_functions.dict

Ensuite j'ai :

Et hop le tour est joué !