Archives de catégorie : Outils

Liste d’outils utilisables en SSI.

Commandes utiles

openssl

Voici quelques commandes utiles. Sauf indication contraire, c’est du Linux 😉 mais ça marche quasiment de la même façon sous Windows.

openSSL est un outil open source très répandu qui offre un très grand nombre de fonctions utiles pour la mise en oeuvre de SSL. Voici quelques exemples d’utilisation.

Pour récupérer le certificat présenté par un site :

openssl s_client -connect nom_du_site:443 -showcerts

Pour afficher en clair le contenu d’un certificat X.509 :

openssl x509 -in nom_fichier_certificat -text

Debugging de connexion SSL

openssl s_client -state -nbio -debug -connect ...

Pour afficher la clé publique d’un certificat :

openssl x509 -pubkey -noout -in nom_fichier_certificat

Pour afficher la clé publique en format utile pour une connexion SSH avec clé :

 ssh-keygen -y -f nom_fichier_cerificat

Pour la clé privée :

openssl pkcs12 -in fichier.pfx -nocerts -out fichier.key -nodes
openssl rsa -in fichier.key -out clepriv.key

A passer ensuite dans la moulinette PuTTY KeyGen pour transformer tout ça en format utilisable par PuTTY…

Convert PEM files

PEM to DER

openssl x509 -outform der -in certificate.pem -out certificate.der 

PEM to P7B

openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer 

PEM to PFX

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt 

Convert P7B files

P7B to PEM

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer 

P7B to PFX

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer 

Convert PFX files

PFX to PEM (extraction du certificat)

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

PFX to PEM (extraction de la clé privée)

openssl pkcs12 -in certificate.pfx -nocerts -out cle.pem -nodes

Convert DER files

DER to PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

Sources

git

Pour utiliser git avec token d’authentification, il faut indiquer ce token dans l’URL des push.

git remote set-url origin "https://USER:TOKEN@gitlab.com/user/projet.git"

BitLocker

Récupération des informations sur un volume donné :

manage-bde –protectors –get [volume]

Création d’un fichier package de clé, sur un id récupéré par la commande ci-dessus :

manage-bde -KeyPackage C: -id "{id}" -path "f:\Folder" 

Réseau

Windows

ipconfig /displaydns 
tracert 
netsh

Linux

Pour arrêter et redémarrer une interface (afin de prendre en compte les changements de paramétrage).

ifconfig eth0 down
ifconfig eth0 up 

Autres commandes :

route -n

Windows

Mesure de performances Win10

Voir aussi

ElasticSearch

ElasticSearch est un moteur de recherche et d’analyse RESTful distribué, d’après son site web (elastic.co). Très utilisé et même proposé sous forme de service par AWS, ce produit permet de gérer des recherches sur de grandes quantités de données.

C’est bien.

Mais cela devient moins amusant quand on le configure mal, les informaticiens pouvant être peu consciencieux ou débordés. Le résultat est alors sans appel : des moteurs de recherche internet (comme Shodan) indexent (trop) facilement les contenus mal protégés, et l’énorme quantité des données gérées par ElasticSearch deviennent purement et simplement disponibles et accessibles à la moindre requête anonyme.

D’après Shodan1, en 2018, 900 To de données ElasticSearch sont disponibles sans protection, et plus de 5 Po de données pour de clusters Hadoop.

Fuites de données

Exactis

Il s’agit du premier cas que j’ai repéré (ça qui ne signifie pas qu’il s’agisse du premier). La volumétrie fait peur : 2 To de données de 340 millions d’utilisateurs2. Pas de cartes bancaires, mais tout un tas de données de profilage, relevant de la vie privée, mais pouvant aussi servir à répondre aux questions de sécurité pour récupérer (frauduleusement) un accès à un quelconque service de messagerie, de réseautage social, etc.

Durée de vie

Ne pas faire attention et laisser les paramètres par défaut peut rapidement conduire à de gros ennuis : une étude de 2020 indique qu’une base non sécurisée est repérée par les méchants en huit heures3. Ils sont à l’affût !

Tellement courant

Les fuites de données dues à une mauvaise mise en oeuvre d’ElasticSearch sont si courantes que la CNIL a publié un guide de bonnes pratiques.

Moteur de recherche et d’analyse Elasticsearch : 4 bonnes pratiques pour renforcer la sécurité des données

Principe d’Elasticsearch

Elasicsearch est un outil de recherche, open source, très populaire. Son fonctionnement repose sur les index inversés, ou inverted indexes, qui recensent des caractéristiques associées à ces documents, comme par exemple des mots clés, mais il peut y avoir bien d’autres usages, comme le traitement d’un grand nombre de logs, sujet très pertinent en sécurité informatique.

Index inversé

Un index inversé est créé après examen de chacun des documents (« crawling »), et création des caractéristiques associées, que l’on définit selon ses besoins. A la suite de cela, on crée un index partant de ces caractéristiques et pointant vers les documents correspondant le mieux aux caractéristiques recherchées.

Dans des moteurs de recherche web (Yahoo, Google, Bing…) on tape une liste de mots clés, et l’index inversé nous renvoie les pages web les plus pertinentes qu’il a recensé auparavant.

Apache Lucene est un outil open source permettant l’indexation de documents, sur lequel est basé Elasticsearch, qui est une société commerciale mais qui propose des versions gratuites de son produit (qui reste open source).

Cluster

Conçu pour des requêtes complexes, et un nombre de documents très important, Elasticsearch se structure en clusters, dont chacun peut contenir de un à plusieurs milliers de nœuds, chaque nœud étant une machine de traitement.

Sharding

On comprend qu’une requête peut être complexe et avoir besoin de beaucoup de ressources, et donc utiliser plusieurs nœuds. De même, il peut arriver que l’indexation produise des tables si grandes qu’elles ne tiennent pas sur un seul nœud. Pour cela, on peut scinder un index sur plusieurs nœuds ; cela s’appelle le sharding.

Réplication

Comme toute bonne architecture distribuée digne de ce nom, toute donnée doit être dupliquée (ou répliquée) afin de pallier aux accidents mais aussi pour paralléliser les traitements, et Elasticsearch le permet.

Manipulons

ElasticSearch (que je vais abréger en ES) se manipule via des API Rest. Ce gros mot signifie qu’on appelle des requêtes HTTP avec une logique définie. Autant je trouve ça super pour développer une appli web, autant c’est pénible pour mes petits doigts quand il faut taper les commandes avec curl. Heureusement Kibana est une interface web qui permet de réaliser la plupart des opérations sur ES.

Opérations CRUD

Pour créer un index :

$ curl -XPUT 'localhost:9200/documents'

Pour ajouter un document (de format JSON) :

$ curl -XPUT 'localhost:9200/alerts/cloudtrail/1?pretty' -H 'Content-Type: application/json' -d fichier
$ curl -XPUT 'localhost:9200/alerts/cloudtrail?pretty' -H 'Content-Type: application/json' -d fichier

Les arguments sont le nom de l’index, le type du document, et son identifiant (facultatif). Pour un fichier JSON, depuis la version 6, il faut rajouter le type dans le header. Chouette.

Pour afficher les champs id et version du document #1.

$ curl -XGET 'localhost:9200/logs/cloudtrail/1?pretty&_source=id,version'

Pour savoir simplement si le document #1 existe :

$ curl -i -XHEAD 'localhost:9200/logs/cloudtrail/1?pretty'

Pour modifier un document :

$ curl -XPOST 'localhost:9200/alerts/cloudtrail/1?pretty' -H 'Content-Type: application/json' -d fichier

Il faut utiliser POST sur un document existant, et seuls les champs modifiés ont besoin d’être présents dans le fichier, lequel peut également « scripter » le résultat.

Sans surprise, pour supprimer un document, voici la commande :

$ curl -XDELETE 'localhost:9200/alerts/cloudtrail/1?pretty'

Pour avoir différentes informations sur le cluster, il faut jouer avec les commandes _cat.

$ curl -XGET 'localhost:9200/_cat/'
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
...

D’autres commandes utiles sont : _mget, _bulk.

Statut du machin

Différentes commandes permettent d’avoir des infos sur la santé d’ES. Exemples :

$ curl -XGET 'localhost:9200/_cat/health/?v&pretty'
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1535634422 15:07:02 elasticsearch yellow 1 1 6 6 0 0 5 0 - 54.5%

$ curl -XGET 'localhost:9200/_cluster/health/'
{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":6,"active_shards":6,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":54.54545454545454}

$curl -XGET 'localhost:9200/_cat/indices/?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana ppRzSXt0Q8G8OXZg8o7_tQ 1 0 2 0 103.4kb 103.4kb
yellow open logs 8YYRLl5_SauA2sglf9YRfA 5 1 36886 0 32.2mb 32.2mb

Recherches et analyses

Les recherches sont similaires à ce qu’on imagine pour un moteur de recherche, tels que Google ou Yahoo. Un langage permet de créer la requête qui vous conviendra et qui vous rendra riche et célèbre, appelé DSL. Rien de mystérieux dans ce langage calqué sur du JSON, il est très souple et très puissant et permet de scripter des requêtes plus ou moins évoluées. Tout comme SQL, on arrivera facilement à faire des requêtes simples, alors que les requêtes complexes demanderont beaucoup de grattage de tête. Point important : les requêtes sont stateful, ce qui signifie qu’il n’y a pas de mécanisme genre curseur comme en SQL.

En gros, on peut demander quels sont les meilleurs documents selon nos critères, auquel cas un score est calculé (et peut être expliqué dans la réponse) et les meilleurs résultats sont affichés ; sinon on peut filtrer et demander si un enregistrement satisfait à nos critères ou pas (la réponse est alors binaire).

La puissance de l’algorithme

TF/IDF de son petit nom, l’algo qui sert de base pour le calcul du score des documents. Il doit être recalculé à chaque ajout de document, mais il ne dépend que de la base de documents indexés, et de rien d’autre. Il est au cœur du fonctionnement d’ES, mais je n’ai pas trouvé de présentation récente de son fonctionnement sur le site ES ; on peut trouver l’info ici (compose.com) ou ici (sur le site de Lucene, le moteur d’ES).

  • TF : Term frequency, calculé comme étant la racine carré du nombre d’occurrences d’un terme dans un document ; cela permet de savoir à quelle fréquence un terme apparaît dans un champ. Plus un terme apparaît dans un document, plus le document est pertinent ;
  • IDF : Inverse Document Frequency (à expliciter). Il permet de savoir à quelle fréquence un terme apparaît dans un index. Plus un terme est fréquent dans un index, moins il est différenciant.
  • La longueur d’un champ intervient aussi (plus la longueur du champ est court, plus l’apparition d’un terme à l’intérieur de celui-ci a de la pertinence). Ainsi, un terme trouvé dans le titre d’un livre induira un score plus élevé que s’il est trouvé dans le corps du texte du livre.

Quand une requête est lancée, les informations demandées dans la requêtes sont combinées avec les résultats de l’algo TF/IDF, et un score est associé à chaque document. Le tour est joué.

Analyse de données

ES permet aussi de réaliser des agrégations de données, ouvrant ainsi la possibilité à l’analyse de données (« analytics »). Il existe quatre types d’agrégation dans ES (je chercherai s’il existe une traduction) :

  • « Metric » qui permet de faire des calculs sur l’ensemble des données (ou sur un groupe logique, cf ci-dessous). Cela se rapproche des AVG(), SUM() du SQL ;
  • « Bucketing » réalise des groupes logiques de données à partir d’une requête de recherche, similaire au GROUP BY en SQL ;
  • « Matrix » est une fonction expérimentale portant sur plusieurs champs en même temps (à développer) ;
  • « Pipeline » permet d’enchaîner les agréations.
Champs textes

Les champs texte, de format assez libres, ne sont pas par défaut inclus dans les champs pouvant être requêtés (sic), car cela consomme beaucoup de ressources à indexer (et donc de mémoire). Si on souhaite pouvoir filter et requêter sur ces champs, il faut explicitement demander qu’ils soient intégrés dans le fielddata, qui est l’espace mémoire servant justement à ce type de requêtes.

Voir aussi

Scan SSL

La confiance n’exclut pas le contrôle, dit-on souvent. Il existe d’excellents outils pour évaluer la sécurité et la robustesse d’un serveur proposant une communication SSL.

Pour ma part, je recommande SSLScan, dont il existe plusieurs variantes. En fouillant un peu, celle qui me semble la plus pertinente est celle de rbsec, car elle est à peu près à jour (elle intègre les versions 1.1 et 1.2 de TLS), et ne mixe pas les technologies puisqu’il s’agit uniquement d’un programme en langage C. Ca permet d’éviter de trop nombreuses dépendances, et ça évite de cumuler les vulnérabilités de multiples technologies (bien que cet aspect puisse être débattu).

Lien interne

  • Test de connexion SSL (par Janiko), à venir

Liens externes

Gestionnaire de mots de passe

L’utilisation d’un gestionnaire de mot de passe est une très bonne pratique, à condition de choisir un bon outil. Je ne dirai pas le bon outil, car selon ses exigences, ses usages, différents outils peuvent convenir.

Les critères de choix

Il faut souvent faire des compromis sur les points suivants :

  • L‘ergonomie question de goût et de facilité d’utilisation, sans incidence sur la sécurité (sauf si cela vous incite à faire de fausses manip’) ;
  • La sécurité intrinsèque, qui peut être bonne ou mauvaise, en utilisant de bons algorithmes ou de mauvais, ou en les employant mal, etc.
  • L‘intégration avec le système d’exploitation, les navigateurs web, etc. Autant cela facilite l’usage, autant cela nuit à la sécurité puisque cela multiplie la surface d’attaques.
  • Le type de stockage en local ou en ligne. La différence est énorme : en ligne, vous avez plus de fonctionnalités et de facilité à l’utiliser, mais vous augmentez considérablement le risque de vol de vos mots de passe.
  • Le mode de licence ouvert ou non. En sécurité, on considère qu’un code accessible (à défaut d’être open source) a l’avantage de pouvoir être examiné, amélioré et audité. Avec un code propriétaire, il faut faire confiance à l’éditeur.

Après, tout dépend de si vous êtes paranoïaque ou pas. Sur le site Pixel1 (du journal Le Monde), cinq outils ont été regardés, en se basant sur un article de NextInpact2. Étonnamment, le meilleur en termes de sécurité est le moins bon en termes d’ergonomie, et réciproquement. En pratique, la facilité d’usage et l’ergonomie sont souvent inversement proportionnels au niveau de sécurité.

Le niveau de sécurité maximal n’est pas non plus automatiquement la solution la plus adaptée : une ergonomie simple et efficace peut faciliter l’adoption d’un outil et, même si son niveau de sécurité intrinsèque est insuffisant, cela peut permettre de lutter contre de mauvaises pratiques et réduire malgré tout le risque résiduel. Cela peut également convenir si l’impact d’une compromission reste faible et limité.

Il faut donc bien définir ses priorités lors du choix d’un outil, et donc savoir quel est le ou les risques que l’on souhaite couvrir.

Quelques éléments

DashLane et LastPass font partie de la catégorie des outils en ligne. Un spécialiste de sécurité a dézingué3 la qualité de leurs codes (au niveau sécurité), ce qui n’est guère rassurant, alors que KeePass ne présentait pas de faille apparente, et a même eu droit à plusieurs inspections (un audit de code encadré par la commission européenne4 et une certification de premier niveau par l’ANSSI, sur une version ancienne).

Du point de vue d’un attaquant, un gestionnaire de mots de passe en ligne est une cible de choix ! LastPass en a fait les frais en 20155 puis en 20176, en plusieurs temps78, au travers des extensions pour navigateurs web. Plus anecdotique, une nouvelle faille assez gênante a été vue (et corrigée) en 20199.

Keeper met l’accent sur une solution dite « sans connaissance », mais des chercheurs en sécurité10 remettent en cause ces affirmations. Keeper aussi a eu les mêmes ennuis que LastPass dans son extension pour navigateur en 201611 ainsi qu’en 201712, en même temps que LastPass. Il est également connu pour ne pas être enclin à aider les chercheurs en sécurité, en les poursuivants en justice pour diffamation13, ce qui n’est pas pour entretenir un climat serein pour les échanges avec la communauté SSI.

Encore des failles

Liste d’outils

Outil Editeur Licence OS Client lourd ou web Stockage Intégration navigateur
LastPass LogMeIn Commerciale Smartphones, PC Client Externe Oui
DashLane DashLane Commerciale PC (Mac, OS) Client Local + cloud sync Oui
KeePass D. Reichl GPL v2+ PC Client Local Non
Keeper Keeper Security Commerciale Smartphones, PC Client Local + cloud sync Oui
RoboForm Siber Systems Commerciale Smartphones, PC Client Local, Externe Oui
Sticky Password Lamantine Software Commerciale Smartphones, PC Client, web Local, Externe Oui
EnPass Sinew Software Systems Moteur AES open source Smartphones, PC Client Local + cloud sync Oui
1Password AgileBits Commerciale Smartphones, PC Client Local + cloud sync Oui
Norton Identity Safe Norton Commerciale nc Web Externe Oui
Intuitive Password     Smartphones, PC Web Externe Oui
Encryptr SpiderOak GPL v3 Smartphones, PC Client nodejs Externe Non
LockPass LockSelf Commerciale Ubuntu, CentOS (serveur) Web Externe, Interne Oui
PassBolt PassBolt AGPL v3 nc Web (PHP) Local, Externe  

Outils moins pertinents

Outil Editeur Commentaires
Password Manager Pro Manage Engine Solution d’authentification et de protection, trop riche.
RED identity mngt Lieberman Software Solution d’authentification, trop complète (et trop complexe).

Sources

Rkhunter

rkhunter est un programme anti-rootkit, fonctionnant sur Linux. Il permet de vérifier l’intégrité des principaux fichiers système (dont les commandes principales) et de s’assurer qu’aucun des principaux rootkits n’est pas installé sur le système concerné.

Installation

Sur Ubuntu, le paquet est inclus dans la distribution de base. Il suffit donc de taper :

sudo apt install rkhunter

Pour lancer une analyse, c’est aussi assez simple :

sudo rkhunter -c

Quelques remarques

Il faut tout d’abord s’assurer de la mise-à-jour de l’outil, car les techniques d’attaque évoluent.

sudo rkhunter --update

Ensuite, il faut garder à l’esprit qu’un rootkit va chercher à se dissimuler, et que certains vont chercher à corrompre rkhunter pour qu’il affiche que tout va bien ! Idéalement, l’intégrité de l’outil lui-même doit être vérifiée (ainsi que de sa base de référence), manuellement, par exemple. On peut aussi réinstaller l’outil à chaque lancement, à partir du site de référence. C’est très fastidieux, mais très utile.

Au 11 avril 2018, la signature de la version 1.4.6 était :

-----BEGIN PGP SIGNATURE----- 
iQIcBAABAgAGBQJakfRfAAoJEOnF3FDROqqDFt0P/AkUyV2tBmXmiafikV3yschZ
qr0MsTMd7X+KMFQuA+tFsnJxJBP0AzjTiRF/5QYB6uLQnwyOWGb8rKe+cLmOO3//
uHWwEnOJba0JWGmdogbDVHOcZFzMV7UZQ2F7YrCiVzWdeW9pX1/nzP1yF7wkRaRW
fzm0CYC3DZ4CxNzsAK3wKu84kB0UwnR4wMIDp9W5RNgOmtOEEOJMk+BErxP2NaJ8
zC6uSlkWHT2gcEmCVNN5B4+BX1WHgkOCpobWfOEgV8dr16Np3FegZs3nBnwOvZK+
MuB1IefnwfhcIe1gkDlMPNTpfXv/fvIYyYy9Ki03PIG2Vk0E/s/1QnsBizAwBZMe
LkMz4wfIeoG2pASDPi13dIO9imApUQqPKdH57asTzDhbuODJHfvW1+89LqUpOCSH
BdleOHd425FwEmV7CFRV3rZlj92AWpCfhRJNFvT3D4mYitb/92i7bv12/vmGU/Sh
KlQ3uHPl0mJPMyT2GYXjEr+x729zPEhxWlCiv6kht/1A8CPwGlzHjKI7shay/aX1
V87J80eUG0NaQSjbg2wwpW1U05z78EDhshyrAyq2xbSkYyujHb4YPAKieMS6edu7
wX029+PDo343k7/D/Skoo2T6Pln542nlIlAi69S2JukC6rmSivcbpdQVKOvEkjAf
CSR8IYmLoAgchsxuvtgu
=aA1j
-----END PGP SIGNATURE-----

L’identité PGP du signataire était 0xe9c5dc50d13aaa83.

Site officiel

  • http://rkhunter.sourceforge.net/

Ossec

OSSEC est un HIDS de niveau système, qui s’installe sur quasiment n’importe quelle distribution Linux du moment qu’un administrateur dispose d’un compilateur C sur la machine adéquate. Cet HIDS peut s’installer seul (il ne vérifie que ce qui se passe sur la machine) ou en tant que serveur/agent (c’est-à-dire qu’on l’installe sur une machine centrale ou serveur, qui contrôle tout un réseau de machines sur lesquelles on installe des agents ossec). Je décrirai ici l’installation dite « locale », à savoir qu’on ne surveille que son propre serveur.

Pré-requis

Il est possible que certains éléments ne soient pas installés sur le système de base. Pour Ubuntu 16 (LTS), il faut :

apt install libpcre2-dev (à compléter)

Procédure

D’abord en téléchargeant la dernière version, par exemple dans votre répertoire /home (ou tout répertoire sur lequel vous avez un droit root, car il est impértif d’installer cet utilitaire en tant qu’administrateur du système).

$ git clone https://github.com/ossec/ossec-hids 
$ cd ossec-hids
$ ./install.sh

Vérifiez qu’il s’agit bien de la dernière version. Et sinon c’est tout ce qu’il y a à faire, à la réserve près de répondre aux questions de l’installateur. Cela suffira pour un serveur web isolé. Il est possible d’avoir aussi un serveur surveillant plusieurs autres (appelés agents)

Installation locale

Choisir le type d’installation et la langue
1- Choisir le type d'installation (local) 
...
** Za instalaciju na srpskom, izaberi [sr].
** Türkçe kurulum için seçin [tr].
(en/br/cn/de/el/es/fr/it/jp/pl/ru/sr/tr) [en]: fr
1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? local
- Installation en local choisie.
Définition de l’environnement d’installation
2- Définition de l'environnement d'installation. 
- Choisissez votre répertoire d'installation de OSSEC HIDS
[/var/ossec]: (garder la valeur par défaut comme indiqué)
- L'installation sera faite sur /var/ossec .
Configuration de OSSEC HIDS
3- Configuration de OSSEC HIDS. 
3.1- Voulez-vous une alerte par email ? (o/n) [o]: n
--- Alerte par email désactivée.
3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: o
- Lancement de syscheck (démon de vérification d'intégrité).
3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]: o
- Lancement de rootcheck (détection de rootkit).
3.4- La réponse active vous permet d’exécuter des
commandes spécifiques en fonction d'évènement. Par exemple,
vous pouvez bloquer une adresse IP ou interdire l'accès à
un utilisateur spécifique.
Plus d'information sur : http://www.ossec.net/en/manual.html#active-response
- voulez-vous démarrer la réponse active ? (o/n) [o]: o
- Réponse active activée.
- Par défaut, nous pouvons activer le contrôle d'hôte
et le pare-feu (firewall-drop). Le premier ajoute
un hôte dans /etc/hosts.deny et le second bloquera
l'hôte dans iptables (sous linux) ou dans ipfilter
(sous Solaris, FreeBSD ou NetSBD).
- Ils peuvent aussi être utilisés pour arrêter les scans
en force brute de SSHD, les scans de ports ou d'autres
formes d'attaques. Vous pouvez aussi les bloquer par
rapport à des évènements snort, par exemple.
- Voulez-vous activer la réponse pare-feu (firewall-drop) ? (o/n) [o]: o
- pare-feu (firewall-drop) activé (local) pour les levels >= 6
- liste blanche (white list) par défaut pour la réponse active :
- 212.27.54.252
- 212.27.53.252
- Voulez-vous d'autres adresses IP dans votre liste (white list) ? (o/n)? [n]: o
- IPs (séparées par des espaces) : votre-ip

Puis lancez ossec via la commande indiquée en résultat /var/ossec/bin/ossec-control start, le programme sera également lancé à chaque redémarrage du serveur.

Une précaution importante à prendre

Okay, ossec est simple à installer, mais si vous voules qu’il serve à quelque chose, il faut impérativement :

  • Autoriser la réponse active lors de l’installation (ou du paramétrage) : ossec bloquera (temporairement) les adresses IP causant des problèmes.
  • Mettre les bons répertoires de logs dans le fichier de configuration.

Cet outil se base sur les logs pour trouver des anomalies : il faut donc inclure a minima les logs du systèmes et les logs de vos serveurs web !

Shorewall

Shorewall est un excellent pare-feu simple à configurer. Pour être plus précis, cet outil permet de configurer facilement des règles iptables.

Installation

Linux général

Télécharger le source, et lancer une installation classique :

$ wget http://www.shorewall.net/pub/shorewall/4.4/shorewall-4.4.8/shorewall-4.4.8.2.tgz 
$ tar –xvf shore*
$ ./install.sh

Fedora, Red Hat et CentOS

Encore une fois, des distributions récentes peuvent proposer shorewall. L’avantage est que la mise-à-jour est automatique, l’inconvénient est que vous n’avez pas toujours la dernière vesion. Dans ce cas, l’installation est cependant beaucoup plus simple :

yum install shorewall

Il ne reste plus qu’à configurer Shorewall, en comprenant un peu ce que l’on fait…

Ubuntu et Debian

C’est à peu près aussi simple que sur Red Hat like :

apt-get install shorewall

Par contre attention, pour que Shorewall démarre automatiquement, n’oubliez pas de mettre de modifier le fichier /etc/default/shorewall et de mettre startup=1.

Protections Linux

Il faut aussi penser à autoriser shorewall avec AppArmor, SELinux, etc.
Pour AppArmor : http://doc.ubuntu-fr.org/apparmor.

Configuration en hôte simple

Définissez le fichier interfaces

#ZONE   INTERFACE       BROADCAST       OPTIONS 
net vmbr0 detect dhcp,routefilter,nosmurfs,logmartians,tcpflags
dmz venet0 detect tcpflags,routeback

Définissez le fichier zones

#ZONE   TYPE            OPTIONS         IN                      OUT 
# OPTIONS OPTIONS
fw firewall
net ipv4
dmz ipv4

Définissez le fichier policy

A noter : on peut abaisser le niveau de log.

#SOURCE     DEST        POLICY          LOG             LIMIT:  CONNLIMIT: 
# LEVEL BURST MASK
#
#
à revoir

Définissez le fichier rules

Pour commencer, on met les règles de base pour permettre la connexion, ici dans le cadre d’une machine Proxmox.

#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK    CONNLIMIT       TIME 
# PORT PORT(S) DEST LIMIT GROUP
#SECTION ESTABLISHED
#SECTION RELATED
SECTION NEW
#

Pour Plesk, ajouter :

ACCEPT          net             dmz:IP1,IP2,IP3...               udp     8443 
ACCEPT net dmz:IP1,IP2,IP3... tcp 8443,8447

Pour CPanel, ajouter :

ACCEPT         net             dmz:IP1,IP2,IP3...               tcp     2077,2078,2082,2083,2086,2087,2089,2095,2096 
ACCEPT net dmz:IP1,IP2,IP3... udp 2077,2078

Si vous utilisez un collecteur de logs (par exemple Ossec) :

ACCEPT          net             dmz:votre_ip               udp     514,1514

Quelques bugs et anomalies

Le bug Ubuntu 15.04 et suivants

Sur Ubuntu 15, shorewall semble ne pas démarrer. On peut considérer cela comme très gênant. Peu d’informations sont disponibles sur le web, à part un bug ouvert1 chez Debian.
Une solution semble être l’installation d’un package supplémentaire, shorewall-init. Dans mon cas, ça a marché.

Problème de redémarrage

Il m’est arrivé d’installer shorewall, de le lancer, mais qu’après un reboot, rien ne démarre. J’avais trouvé la solution au fin fond d’un forum (launchpad), mais cela venait d’un problème dans la gestion du démarrage des services. Pour le résoudre :

 sudo systemctl enable /lib/systemd/system/shorewall.service 

Mod security

mod_security est filtre (pare-feu) applicatif se présentant sous le forme d(un module que l’on peut ajouter à son serveur web Apache. Son rôle est de filtrer les requêtes bizarroïdes. Certaines distributions récentes (comme Fedora) l’intègrent et ce module peut donc être installé très facilement.

L’installation automatique convient parfaitement, mais si vous voulez avoir la toute dernière version ou si votre distribution ne la contient pas, j’ai aussi décrit la procédure manuelle.

Installation automatique

Sous Fedora 8, il suffit de taper, en mode root :

yum install mod_security

Et le toujours est joué… une fois que le serveur web aura redémarré (cf ci-dessous) :

apachectl restart

En général, les règles par défaut sont assez fines et évoluées, il n’y a pas à y toucher, sauf si cela bloque des fonctionnalités de votre site.

Si une règle vous bloque

C’est pas de chance, car il faudra alors désactiver une règle, ce qui potentiellement vous expose à une faille de sécurité. Bon, mais en pratique, il est rare qu’une règle soit cruciale à elle seule, et les autres vous permettront de conserver un niveau de sécurité acceptable. Si toutefois vous devez en désactiver plusieurs, il faudra alors se poser de sérieuses questions sur votre site, qui doit employer des techniques intrusives ou qui est conceptuellement mal sécurisé.

Comment le savoir ?

Faites un tour dans le répertoire /var/log/httpd et regardez le contenu des fichiers de logs de mod_security.

[root@host httpd]# tail -20 modsec_audit.log
GET / HTTP/1.1
Host: xx.xxx.xxx.xxx

--54705f53-F--
HTTP/1.1 400 Bad Request
Content-Length: 305
Connection: close
Content-Type: text/html; charset=iso-8859-1

--54705f53-H--
Message: Warning. Match of "rx ^OPTIONS$" against "REQUEST_METHOD" required. [id "960015"] [msg "Request Missing  an Accept Header"] [severity "CRITICAL"]
Message: Warning. Operator EQ match: 0. [id "960009"] [msg "Request Missing a User Agent Header"]    [severity "WARNING"]
Message: Access denied with code 400 (phase 2). Pattern match "^[\d\.]+$" at REQUEST_HEADERS:Host.   [id "960017"] [msg "Host header is a numeric IP address"] [severity "CRITICAL"]
Action: Intercepted (phase 2)
Stopwatch: 1211041326569321 1012 (293 703 -)
Producer: ModSecurity v2.1.7 (Apache 2.x)
Server: Apache/2.2.8 (Fedora)

--54705f53-Z--

On peut aussi avoir des infos dans /var/log/httpd/modsec_debug.log :

[root@ikobox httpd]# tail -6 modsec_debug.log
[17/May/2008:18:22:06 +0200] [91.121.138.106/sid#802cace0][rid#8064f0f8][/][2] Warning. Match of "rx ^OPTIONS$" against "REQUEST_METHOD" required. [id "960015"] [msg "Request Missing an Accept Header"] [severity "CRITICAL"]
[17/May/2008:18:22:06 +0200] [91.121.138.106/sid#802cace0][rid#8064f0f8][/][2] Warning. Operator EQ match: 0. [id "960009"] [msg "Request Missing a User Agent Header"] [severity "WARNING"]
[17/May/2008:18:22:06 +0200] [91.121.138.106/sid#802cace0][rid#8064f0f8][/][1] Access denied with code 400 (phase 2). Pattern match "^[\d\.]+$" at REQUEST_HEADERS:Host. [id "960017"] [msg "Host header is a numeric IP address"] [severity "CRITICAL"]
[17/May/2008:18:27:08 +0200] [91.121.138.106/sid#802cace0][rid#806440d0][/][2] Warning. Match of "rx ^OPTIONS$" against "REQUEST_METHOD" required. [id "960015"] [msg "Request Missing an Accept Header"] [severity "CRITICAL"]
[17/May/2008:18:27:08 +0200] [91.121.138.106/sid#802cace0][rid#806440d0][/][2] Warning. Operator EQ match: 0. [id "960009"] [msg "Request Missing a User Agent Header"] [severity "WARNING"]
[17/May/2008:18:27:08 +0200] [91.121.138.106/sid#802cace0][rid#806440d0][/][1] Access denied with code 400 (phase 2). Pattern match "^[\d\.]+$" at REQUEST_HEADERS:Host. [id "960017"] [msg "Host header is a numeric IP address"] [severity "CRITICAL"]

On voit que la règle 960017 est remplie, ce qui correspond à une type d’attaque. Après, à vous de voir s’il faut la désactiver.

Comment le corriger ?

Les règles sont dans /etc/httpd/modsecurity.d dans l’installation sous Fedora 8.

[root@ikobox conf.d]# cd /etc/httpd/modsecurity.d
[root@ikobox modsecurity.d]# grep '960017' *
modsecurity_crs_21_protocol_anomalies.conf:SecRule REQUEST_HEADERS:Host "^[d.]+$" "deny,log,auditlog,status:400,msg:'Host header is a numeric IP address', severity:'2',id:'960017'"

Liens externes

Site officiel de mod-security