Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierNoobunbox – Blog : NAS, Serveur, Sécurité, Virtualisation

Configurer des notifications SSH Slack

Slack est une une plate-forme de communication collaborative assez chouette à utiliser. J’essaye donc d’y intégrer plusieurs outils et donc je me suis demandé comment je pouvais configurer des notifications SSH Slack. Comme vous pouvez vous en douter la réponse se trouve ci-dessous 🙂

 

Configurer des notifications SSH Slack : Setup Slack

Avant de « travailler » coté serveur(s), vous allez devoir créer un Wek Hook sur Slack.

https://votre-domaine.slack.com/apps/manage/custom-integrations

 

Une fois la manipulation effectuée, récupérez l’URL du Web Hook et conservez la

 

Configurer des notifications SSH Slack : Configuration serveur(s)

Maintenant il s’agira de se connecter à toutes les machines qui devront envoyer des notifications, et de créer un script

sudo nano /etc/ssh/notify.sh

 

Ajoutez le code suivant en remplacant YOUR_SLACK_WEBHOOK_URL par l’URL récupérée sur Slack

#!/bin/sh
if [ "$PAM_TYPE" != "close_session" ]; then 
 url="YOUR_SLACK_WEBHOOK_URL"
 channel="#ssh-logins"
 host="`hostname`"
 content="\"attachments\": [ { \"mrkdwn_in\": [\"text\", \"fallback\"], \"fallback\": \"SSH login: $PAM_USER connected to \`$host\`\", \"text\": \"SSH login to \`$host\`\", \"fields\": [ { \"title\": \"User\", \"value\": \"$PAM_USER\", \"short\": true }, { \"title\": \"IP Address\", \"value\": \"$PAM_RHOST\", \"short\": true } ], \"color\": \"#F35A00\" } ]"
 curl -X POST --data-urlencode "payload={\"channel\": \"$channel\", \"mrkdwn\": true, \"username\": \"ssh-bot\", $content, \"icon_emoji\": \":computer:\"}" $url &
fi

 

Rendez le script exécutable avec la commande suivante

sudo chmod +x /etc/ssh/notify.sh

 

Puis modifier le fichier /etc/pam.d/sshd en y ajoutant le code suivant (en fin de fichier convient parfaitement)

session optional pam_exec.so seteuid /etc/ssh/notify.sh

 

Vous pouvez maintenant recharger la configuration du serveur SSH et effectuer un test en vous connectant

sudo service ssh reload

 

Voici le type de notification que vous devriez recevoir

Configurer des notifications SSH Slack

 

 

Source

 

Cet article Configurer des notifications SSH Slack est apparu en premier sur Noobunbox.

Résolveur DNSCrypt disponible pour tous

Je viens de mettre en place un Résolveur DNSCrypt public. Celui-ci est accessible en IPv4 seulement pour le moment. L’IPv6 arrivera plus tard. Vous pouvez aussi si vous le souhaitez vous servir de ce résolveur comme d’un simple serveur DNS (connexion sur le port 53).

Résolveur DNSCrypt public : Késséssé ?

Lorsque vous vous connectez à un domaine votre ordinateur envoi une requête à un serveur DNS, requête contenant le FDQN que vous souhaitez consulter, qui lui renvoie l’adresse IP correspondante. La demande et la réponse sont transmises en clair ce qui signifie donc qu’un attaquant peut non seulement conserver un historique de tous les sites que vous avez consulté mais aussi modifier les réponses faites par le serveur DNS (DNS Spoofing). Plutôt flippant n’est-ce pas ?

Heureusement DNSCrypt vous permet de remédier à cela en chiffrant vos requêtes DNS.  Des clients DNSCrypt sont disponibles sur tous les systèmes d’exploitation et dans certains directement depuis votre routeur.

Résolveur DNSCrypt public : Informations de connexion

Nom : dns.noobunbox.net
IPv4 : 163.172.170.36:4434
IPv6 : [2001:bc8:4400:2100::20:415]:4434 (DNSCrypt indisponible pour le moment)

Provider name : 2.dnscrypt-cert.dns.noobunbox.net
Clé publique : 70B3:ECC0:EF16:48D2:7F65:BEC2:25A2:0201:2F36:D777:E054:9BF3:F4B3:DF95:B960:4B4D

Résolveur DNSCRYPT public : Fonctionnalités

  • Résolveur DNS basé en France
  • Entièrement neutre
  • Validation DNSSEC
  • Aucun log
  • Statistiques sur l’utilisation bientôt disponibles

Résolveur DNSCRYPT public : Transparence

Dans un soucis de transparence vous trouverez ci-dessous la configuration du serveur DNS (unbound)

server:
 interface: 0.0.0.0
 interface: ::0
 access-control: 0.0.0.0/0 allow
 access-control: ::/0 allow
 auto-trust-anchor-file: "/var/lib/unbound/root.key"
 root-hints: "/etc/unbound/root.hints"
 verbosity: 0
 qname-minimisation: yes

 statistics-interval: 0
 extended-statistics: yes
 statistics-cumulative: yes

 num-threads: 2 
 msg-cache-slabs: 4
 rrset-cache-slabs: 4
 infra-cache-slabs: 4 
 key-cache-slabs: 4 
 rrset-cache-size: 100m
 msg-cache-size: 50m
 outgoing-range: 465
 so-rcvbuf: 4m
 so-sndbuf: 4m
 port: 53
 do-ip4: yes
 do-ip6: yes
 do-udp: yes
 do-tcp: yes
 do-daemonize: yes
 hide-identity: yes
 hide-version: yes
 harden-glue: yes
 harden-dnssec-stripped: yes

La configuration unbound, telle que ci-dessous, permet seulement d’effectuer des statistiques sur l’utilisation du serveur DNS. Ces statistiques sont totalement anonymes et seront bientôt disponibles en ligne.

 statistics-interval: 0
 extended-statistics: yes
 statistics-cumulative: yes

Si vous souhaitez participer et me permettre de mettre en place de nouveaux serveurs vous pouvez soutenir ce projet via la plateforme Liberapay

Faire un don

Cet article Résolveur DNSCrypt disponible pour tous est apparu en premier sur Noobunbox.

Authentification forte (2FA) Yubikey SSH

Comme je l’ai déjà répété à de nombreuses reprises l’authentification forte (2FA) c’est la vie et je vous recommande fortement de la mettre en place dès lors que cette option vous est proposée. Nous allons donc aujourd’hui voir comment mettre en place une authentification double facteur avec une Yubikey sur un serveur SSH.

 

 

Authentification forte (2FA) Yubikey SSH : Vous avez dit Yubikey ?

Une Yubikey est un dispositif d’authentification USB vous permettant d’utiliser différentes méthodes d’authentification : FIDO U2F, Yubico-OTP, OATH-OTP, OATH-HOTP, OATH-TOTP, OpenPGP, et PIV. Lorsqu’elle est connectée à votre ordinateur la Yubikey simule un clavier USB. Deux méthodes d’authentification sont paramétrables via ses deux slots de configuration, elle pourra réagir à une stimulation physique (pression du bouton) ou automatiquement (via des logiciels). Si vous souhaitez en savoir plus sur le fonctionnement des Yubikeys je vous conseille cet article rédigé par Aeris et le wiki de Maxime de Roucy.

 

 

Authentification forte (2FA) Yubikey SSH : Clé API

Avant de pouvoir commencer nous allons devoir récupérer une clé d’API Yubico. Ouvrez cette page, renseignez votre email, générez un code OTP en appuyant sur le bouton de votre Yubikey et validez.

Sauvegardez les identifiants qui s’affichent.

 

 

Authentification forte (2FA) Yubikey SSH : Installation et configuration

Commençons par nous connecter à notre serveur puis récupérons la librairie requise en lançant la commande

sudo apt-get install libpam-yubico

 

Maintenant ouvrez le fichier /etc/pam.d/sshd

sudo nano /etc/pam.d/sshd

 

Recherchez  @include common-auth puis juste en-dessous ajoutez

auth required pam_yubico.so id=mon-id key=ma-cle url=https://api.yubico.com/wsapi/2.0/verify?id=%d&otp=%s

 

 

Authentification forte (2FA) Yubikey SSH : Lien Yubikey / Utilisateur

Maintenant que tout est en place nous allons devoir faire le lien entre chaque Yubikey et chaque utilisateur. Ce lien fonctionne sous le même modèle que pour les clés SSH cependant les informations doivent etre stockées dans ~/.yubico/authorized_yubikeys au format suivant utilisateur:yubikeyid1:yubikeyid2.

Pour récupérer votre yubikeyid lancez la commande suivante, puis appuyez sur le bouton de votre Yubikey

read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s:0:12}

 

Exemple :

root@noobunbox:~# read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s :0:12}
Enter a YubiKey OTP: vvukdhrutoplhftvrucnhgnvjnjjkfbeeeibbhejckie
The key id is vvukdhrutopl

 

Maintenant créons le fichier nécessaire, ici pour l’utilisateur root

mkdir ~/.yubico
nano ~/.yubico/authorized_yubikeys

 

Nous pouvons maintenant faire le lien entre notre utilisateur, root, et notre yubikeyid, vvukdhrutopl, en insérant dans ce fichier

root:vvukdhrutopl

 

Relancez la configuration du serveur SSH

sudo service sshd reload

 

Une fois les modifications effectuées ne fermez pas votre connexion SSH, ouvrez en une seconde et vérifiez que tout fonctionne.

 

 

Authentification forte (2FA) Yubikey SSH : Gestion authentification par utilisateur

Maintenant quelques problèmes peuvent se poser :

  • Que faisons-nous si nous avons avez d’autres users SSH se connectant au serveur n’ayant pas ou ne pouvant pas utiliser de Yubikey (rsync par exemple) ?
  • Je suis un fou, je veux m’authentifier avec mot de passe + yubikey + clé SSH, je fais comment ?

 

Hé bien c’est assez simple puisqu’il suffit de modifier la configuration du serveur SSH.

sudo nano /etc/ssh/sshd_config

 

Pour un utilisateur scripts nous souhaitons utiliser seulement une authentification par clé, il nous suffira d’ajouter les lignes de configuration suivante

Match User scripts
AuthenticationMethods publickey

 

Pour l’utilisateur root nous souhaitons utiliser une authentification mot de passe + yubikey et par clé

Match User root
AuthenticationMethods publickey,keyboard-interactive

 

 

Authentification forte (2FA) Yubikey SSH : Démo

Ci-dessous une petite démo d’une authentification sur un serveur avec publickey + mot de passe / yubikey
 
 

Sources

 

Cet article Authentification forte (2FA) Yubikey SSH est apparu en premier sur Noobunbox.

Améliorer la sécurité des mots de passe WordPress

J’avais déjà publié il y a quelques temps un billet assez détaillé vous expliquant comment mieux sécuriser votre installation WordPress et depuis je me suis dit que l’on pouvait encore faire mieux. Nous allons donc nous attacher à améliorer la sécurité des mots de passe WordPress.

Tout d’abord permettez moi de faire le gros lourd mais commencez par n’utiliser qu’un seul mot de passe par site, ensuite générez des mots de passe complexes et enfin mettez en place une double authentification dès que vous en avez la possibilité.

 

Comment les mots de passe WordPress sont-ils chiffrés ?

Avant d’être stocké dans votre base de donnée votre mot de passe est haché.Ce hash est obtenu par l’intermédiaire d’un framework appelé phpass.

phpass utilise 3 éléments pour hacher votre mot de passe :

  • Une fonction de hachage : blowfish, DES ou MD5,
  • Un sel (une donnée supplémentaire générée aléatoirement et propre à chaque mot de passe)
  • Un nombre d’itérations (la fonction de hachage sera répétée X fois)

WordPress utilise par défaut MD5 comme fonction de hachage (répétée 8192 fois) pour la simple et unique raison qu’elle est supportée par toutes les versions de PHP (depuis PHP 3.0).

 

 

Pourquoi faut-il améliorer le chiffrement des mots de passe WordPress ?

Maintenant pour vous donner un ordre d’idée dites vous un GPU Nvidia GTX 1080 Founders Edition est capable de tester:

  • 24809,8 MH/s (24809,8 millions de mots de passe par seconde) pour du MD5
  • 6857.6 kH/s (6857.6 milliers mots de passe par seconde) pour du phpassMD5Wordpress
  • 55195 H/s (55195 mots de passe par seconde) pour du SHA512Crypt (Drupal7)

 

 

Comment améliorer le chiffrement des mots de passe WordPress ?

On peut remplacer le chiffrement utilisé par défaut sous WordPress par bcrypt via l’installation d’un plugin. Ce qui implique d’avoir  :

  • Premièrement un WordPress à jour : bcrypt n’est supporté que depuis la version 4.4. Ce qui est loin d’être grave puisque nous en sommes à la 4.6
  • Deuxièmement une version de PHP >= 5.5.0

 

 

Quel plugin me permet d’utiliser bcrypt pour chiffrer les mots de passe WordPress ?

J’utilise depuis peu un plugin développé par Roots.io.

Pour l’installer rien de plus simple il vous suffit de récupérer ce fichier ce fichier puis de l’uploder dans le dossier wp-content/mu-plugins/.Pourquoi dans mu-plugins et pas comme un plugin « normal » ? Simplement parce que les mu-plugins (must-use plugin) ne sont pas désactivables dans l’interface d’administration de WordPress ce qui vous évite de les désactiver accidentellement.

Une fois installé, le chiffrement de votre mot de passe sera mis à jour après que vous vous soyez reconnecter sur WordPress. Enfin sachez que si pour une raison X ou Y (mauvaise en tout cas) vous décidiez de supprimer ce plugin, le chiffrement de votre mot de passe ne sera PAS modifié et vous ne rencontrerez aucun problème pour vous identifier.

 

Sources :

 

Cet article Améliorer la sécurité des mots de passe WordPress est apparu en premier sur Noobunbox.

Sécuriser SSH avec un enregistrement SSHFP

Avant de plonger dans le vif du sujet, c’est à dire sécuriser SSH avec SSHFP, quelques explications sont nécessaires.

Tout d’abord parlons du système SSH, celui-ci utilise un système d’empreinte de clé pour vérifier l’authenticité du serveur lorsque le client se connecte. Lors des futures connexions, l’empreinte de la clé sauvegardé est vérifiée. Le client SSH vous avertira si l’empreinte stockée localement diffère de l’empreinte reçue lors de futures tentatives de connexion. (documentation freebsd)

Pour faire court : le client vérifie que le serveur auquel vous vous connectez soit le bon. Génial, non ? Hé bien non puisqu’en pratique presque personne ne le fait.

SSHFP permet donc à un administrateur de déclarer dans son DNS (qu’il faudra avoir protégé par DNSSEC sinon cette protection sera moins efficace) l’empreinte de ses serveurs SSH.

 

 

Composition de l’enregistrement

Un enregistrement SSHFP se compose de 3 éléments :

  1. L’algorithme : dépend du type de clés SSH : RSA (1), DSA (2), ECDSA (3), ED25519 (4)
  2. Le type d’empreinte : SHA-1 (1) ou SHA-256 (2)
  3. L’empreinte (hexadécimale) du serveur SSH

 

 

Générer des enregistrements SSHFP

Pour générer vos enregistrements SSHFP rien de plus simple, il vous suffit d’utiliser la commande suivante

ssh-keygen -r subdomain.domain.tld

 

N’acceptant que des authentifications par clé Ed25519 sur mon serveur j’ai choisi d’utiliser l’enregistrement suivant

root@noobunbox.net:~$ ssh-keygen -r www.noobunbox.net
www.noobunbox.net IN SSHFP 4 1 33f75f87a4dc9e1084d0aeb91e92e8fbb3a3f676

 

 

Test et configuration du client

Une fois les modifications au niveau du DNS effectuées et propagées, connectez vous à votre serveur SSH via la commande suivante

ssh -o "VerifyHostKeyDNS yes" subdomain.domain.tld -v

 

Si DNSSEC et SSHFP sont correctement configurés sur votre domaine vous devriez voir les lignes suivantes

debug1: found 2 secure fingerprints in DNS
debug1: matching host key fingerprint found in DNS

 

Si vous voyez l’erreur No matching host key fingerprint found in DNS cela peut signifier que vos enregistrements SSHFP sont incorrects ou non propagés
Si vous voyez l’erreur DNS lookup error: data does not exist ainsi que The authenticity of host 'subdomain.domain.tld (XXX.XXX.XXX.XXX)' can't be established., cela signifie que votre resolveur DNS ne prend pas en charge DNSSEC ou que DNSSEC est mal configuré ou non configuré.

 

Afin de ne pas avoir à utiliser l’option « VerifyHostKeyDNS yes » à chaque connexion, modifiez le fichier de configuration du client ssh

sudo nano /etc/ssh/ssh_config

 

Afin d’y ajouter

VerifyHostKeyDNS yes

 

Puis relancez le service SSH

/etc/init.d/ssh reload

 

 

Source

 

Cet article Sécuriser SSH avec un enregistrement SSHFP est apparu en premier sur Noobunbox.

Configurer et sécuriser un serveur FTP

Je souhaitais installer, configurer et sécuriser un serveur FTP : voilà donc un nouveau mémo détaillant cette manipulation avec proftpd. Notre serveur FTP devra autoriser la connexion d’utilisateurs virtuels enfermés (chroot) dans un dossier. Le serveur FTP devra aussi leur permettre d’accéder à des ressources présentes sur d’autres disques.

 

 

Configurer et sécuriser un serveur FTP : installation de proftpd

Commençons donc par installer le logiciel proftpd

sudo apt-get install proftpd-basic

 

Lors du processus d’installation, vous allez devoir choisir entre un serveur inetd ou standalone. Si vous choisissez inetd, le serveur ne se lancera que si une connexion FTP est initiée, si vous choisissez standalone le daemon tournera en permanence. Vu la puissance actuelle des machines, on peut tranquillement choisir le mode standalone

Configurer et sécuriser un serveur FTP

 

 

Configurer et sécuriser un serveur FTP : Ajout d’un utilisateur virtuel

Pas question d’ajouter un utilisateur système pour chaque personne ayant besoin d’accèder à ce serveur FTP, il faut donc créer des utilisateurs virtuels. Accessoirement nous souhaitons que ces utilisateurs n’aient accès à aucun shell. Nous allons créer configurer un « faux shell » nommé /bin/false

Commençons par lister les shells disponibles sur notre serveur via la commande suivante

cat /etc/shell

 

Dans mon cas voici le résultat

root@noobunbox:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

 

Le shell /bin/false n’étant pas disponible, nous allons l’ajouter, il suffit d’editer le fichier /etc/shells

sudo nano /etc/shells

 

pour y ajouter l’entrée suivante

/bin/false

 

Cette étape terminée nous allons pouvoir configurer notre utilisateur virtuel via la commande ftpasswd. Quelques explications sur les options que nous allons utilisés

  • sha512 : nous permet d’utiliser l’algorithme sha512 à la place de md5
  • uid & gid : il faut spécifier un user identifier et groupe identifier pour chaque utilisateur virtuel
  • file : le fichier contenant les données utilisateurs
  • home : le répertoire dans lequel notre utilisateur virtuel se connectera
  • shell: le shell que notre utilisateur peut utiliser
ftpasswd --passwd --name=mon-utilisateur --sha512 --uid=800 --gid=800 --file=/etc/proftpd/ftpd.passwd --home=/srv/ftp/ --shell=/bin/false

 

 

Configurer et sécuriser un serveur FTP : Génération d’un certificat SSL

Créons le dossier qui contiendra notre certificat ainsi que la clé privée

sudo mkdir /etc/proftpd/ssl
sudo chmod 600 /etc/proftpd/ssl/ && cd /etc/proftpd/ssl

 

Générons une clé privée un CSR et signons notre certificat

sudo openssl ecparam -genkey -name secp384r1 > ftp-key-p384.pem
sudo openssl req -new -key ftp-key-p384.pem -out csr.pem
sudo openssl req -x509 -days 3650 -key ftp-key-p384.pem -in csr.pem -out certificate.pem

 

Maintenant protégeons ces fichiers

sudo chmod 400 ftp-key-p384.pem csr.pem
sudo chmod 600 certificate.pem

 

 

Configurer et sécuriser un serveur FTP : configuration générale de protftpd

Nous pouvons maintenant modifier la configuration générale de proftpd,

sudo nano /etc/proftpd/proftpd.conf

 

De nombreuses options y sont définies. Voici celle que vous devez modifier / configurer :

  • ServerIdent off – pas la peine que des petits malins puissent identifier la version de proftpd que vous utilisez
  • Servername « Votre Serveur » – donnez un nom à votre serveur
  • AuthUserFile /etc/proftpd/ftpd.passwd – Indispensable pour que votre serveur puisse accepter les connexions de vos utilisateurs virtuels
  • DefaultRoot ~ – Indispensable pour que les utilisateurs ne puissent pas se balader partout sur votre serveur
  • Port 21 – Je vous conseille de modifier le port d’écoute par défaut
  • PassivePorts 1234 1234 – Indiquer un range de ports (ex 30100 30200) utilisé pour le mode PASV. Pour plus d’infos sur le mode passif, cliquez ici
  • Include /etc/proftpd/tls.conf – indispensable puisque nous allons configurer et sécuriser le protocole FTPS

 

Assurez vous donc que les entrées suivantes soient présentes dans votre fichier de configuration, tout en les modifiant à votre convenance :

ServerIdent off
ServerName "noobunbox.net"

AuthUserFile /etc/proftpd/ftpd.passwd

DefaultRoot ~

Port 34555
PassivePorts 30100 30200

Include /etc/proftpd/tls.conf

 

 

Configurer et sécuriser un serveur FTP : configuration SSL

Nous n’allons pas seulement configurer proftpd pour qu’il utilise le certificat que nous avons généré précédemment, nous allons aussi configurer correctement le protocole FTPS c’est à dire :

  • N’autoriser que les connexions sécurisées
  • N’autoriser que les connexions via le protocole TLS 1.2
  • Utiliser des ciphers sécurisés
  • Utiliser le chiffrement implicite

 

Petite parenthèse avant de continuer : vous avez surement remarquer que lorsque vous configuriez une connexion FTPS dans votre client préféré vous aviez le choix entre le chiffrement explicite et implicite.  Le chiffrement implicite permet de n’autoriser que les connexions chiffrées dès l’établissement de la connexion.

 

Modifions le fichier contenant la configuration du protocole FTPS

sudo nano /etc/proftpd/tls.conf

 

Que nous configurons de la manière suivante

<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSCipherSuite EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;
TLSOptions UseImplicitSSL
TLSRSACertificateFile /etc/proftpd/ssl/certificate.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/ftp-key-p384.pem
TLSVerifyClient off
TLSRequired on
</IfModule>

 

Vous pouvez maintenant redémarrer le service proftpd et vous connectez avec votre utilisateur.

Voici comment il faudrait configurer la connexion avec le client FileZilla

Configurer et sécuriser un serveur FTP

 

 

Configurer et sécuriser un serveur FTP : partage de dossiers

Lorsque j’ai voulu partager des dossiers avec mes utilisateurs virtuels je dois dire que j’ai eu un peu de mal. Je souhaitais que ces utilisateurs aient assez à des ressources stockées sur plusieurs disques et partages réseaux.

Par exemple vous souhaiteriez partager :

  • vos images stockées dans /home/utilisateur/images
  • des vidéos stockées sur un disque /media/disk01/videos
  • des fichiers stockés sur un nas monté dans /media/synology/docs

 

Si vous créez des liens symboliques dans le home de vos utilisateurs (ici /srv/ftp) cela ne fonctionnera pas. Les liens symbolique seront visibles, mais lorsque vos utilisateurs tenteront de naviguer dans des sous dossiers ou télécharger des fichiers l’erreur 550 s’affichera.

Il faudra donc monter ces dossiers dans /srv/ftp via la commande

mount --bind

 

Dans notre exemple voici ce que cela donnerait :

Commençons par créer les dossiers dans lesquels nous monterons nos dossiers partagés

cd /srv/ftp
sudo mkdir docs images videos

 

Montons maintenant nos dossiers

mount --bind /home/utilisateur/images images
mount --bind /media/disk01/videos videos
mount --bind /media/synology/docs

 

Pour que ces partages soient permanents il vous faudra ajouter les entrées suivantes au fichier /etc/fstab

A noter qu’il faudra ajouter l’option _netdev pour chaque mount bind d’une ressource réseau.

## Partage FTP
/home/utilisateur/images images   none bind 0 0  
/media/disk01/videos     videos   none bind 0 0
/media/synology/docs     docs     none _netdev,bind 0 0

 

Cet article Configurer et sécuriser un serveur FTP est apparu en premier sur Noobunbox.

Sécuriser un Kernel avec Grsecurity

Vous allez rapidement comprendre pourquoi mon dernier billet expliquait comment compiler et installer un Kernel Linux. J’avais déjà dans l’idée de vous expliquer comment il est possible de sécuriser un Kernel avec grsecurity, je voulais simplement faire correctement les choses.

 

 

Sécuriser un Kernel avec grsecurity : grsecurity Késséssé ?

grsecurity est un patch permettant d’augmenter la sécurité d’un noyau Linux en renforcant le controle d’accès local et le confinement des applications. De plus il inclut PAX, un ensemble de correctifs rendant votre système plus résistant à l’exploitation de vulnérabilités.

 

 

Sécuriser un Kernel avec grsecurity : Pré-requis

Je radote, tu radotes, il radote, etc.

Comme dans mon précédent mémo, je vous conseille fortement d’effectuer une sauvegarde de votre système avant d’installer un nouveau Kernel. Puisque j’adore me répéter, je vous rappelle que compiler un noyau prend du temps et beaucoup d’espace disque.

 

Installation des dépendances

La compilation d’un noyau avec le module grsecurity requiert plus de dépendances. Il vous faudra commencer par récupérer la version de gcc installée sur votre système.

gcc -v

 

Qui dans ici nous donne

root@noobunbox:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper

 

Maintenant installons les dépendances requises, n’oubliez pas de remplacer 4.9 par votre version de gcc

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc kernel-package gcc-4.9-plugin-dev

 

 

Sécuriser un Kernel avec grsecurity : C’est parti

Ici aussi nous allons créer un nouveau répertoire, parce que l’on est un peu psycho-rigide et que l’on aime travailler proprement

mkdir ~/kernel-grsecurity && cd ~/kernel-grsecurity

 

grsecurity n’est pas compatible avec les derniers Kernels, à l’heure ou j’écris ce mémo, la dernière version du noyau Linux avec laquelle est compatible grsecurity est la version 4.4.7. Téléchargeons là

 wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.7.tar.xz
 wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.7.tar.sign

 

Vérifions la signature de l’archive

unxz linux-4.4.7.tar.xz
gpg --verify linux-4.4.7.tar.sign

 

Si tout va bien, voici ce que vous devriez obtenir

root@noobunbox:~/kernel-grsecurity$ gpg --verify linux-4.4.7.tar.sign
gpg: les données signées sont supposées être dans « linux-4.4.7.tar »
gpg: Signature faite le mar. 12 avril 2016 19:09:46 MSK avec la clef RSA d'identifiant 6092693E
gpg: Bonne signature de « Greg Kroah-Hartman (Linux kernel stable release signing key) <greg[at]kroah.com> »
gpg: Attention : cette clef n'est pas certifiée avec une signature de confiance.
gpg: Rien n'indique que la signature appartient à son propriétaire.
Empreinte de clef principale : 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E

 

Nous pouvons donc extraire l’archive

tar xvf linux-4.4.7.tar

 

 

Sécuriser un Kernel avec grsecurity : Patch du Kernel

Commençons donc par nous déplacer dans le répertoire contenant les sources du noyau 4.4.7

~/kernel-grsecurity/linux-4.4.7

 

Téléchargeons le dernier patch grsecurity disponible (201604152208) ainsi que sa signature

wget https://grsecurity.net/test/grsecurity-3.1-4.4.7-201604152208.patch
wget https://grsecurity.net/test/grsecurity-3.1-4.4.7-201604152208.patch.sig

 

Vérifions que le patch soit correctement signé

root@noobunbox:~/kernel-grsecurity/linux-4.4.7$ gpg --verify grsecurity-3.1-4.4.7-201604152208.patch.sig
gpg: les données signées sont supposées être dans « grsecurity-3.1-4.4.7-201604152208.patch »
gpg: Signature faite le sam. 16 avril 2016 05:09:53 MSK avec la clef RSA d'identifiant 2525FE49
gpg: Bonne signature de « Bradley Spengler (spender) <spender[at]grsecurity.net> »
gpg: Attention : cette clef n'est pas certifiée avec une signature de confiance.
gpg: Rien n'indique que la signature appartient à son propriétaire.
Empreinte de clef principale : DE94 52CE 46F4 2094 907F 108B 44D1 C0F8 2525 FE49

 

Tout semble normal, nous pouvons donc appliquer le patch aux sources du Kernel, pour cela rien de plus simple, lançons la commande suivante

patch -p1 < grsecurity-3.1-4.4.7-201604152208.patch

 

La liste des fichiers patchés apparaît dans votre terminal

[...]
patching file tools/gcc/gen-random-seed.sh
patching file tools/gcc/initify_plugin.c
patching file tools/gcc/kallocstat_plugin.c
patching file tools/gcc/kernexec_plugin.c
patching file tools/gcc/latent_entropy_plugin.c
patching file tools/gcc/randomize_layout_plugin.c
patching file tools/gcc/size_overflow_plugin/.gitignore
patching file tools/gcc/size_overflow_plugin/Makefile
[...]

 

 

Sécuriser un Kernel avec grsecurity : Configuration du Kernel

Copiez le fichier de configuration de votre Kernel, histoire de ne pas risquer de tout casser en touchant a tout ?

 cp /boot/config-$(uname -r) .config

Maintenant ouvrons le menu de configuration du Kernel (étape obligatoire)

make menuconfig

 

Dans ce menu naviguez vers « Security Options »

Sécuriser un Kernel avec grsecurity

 

Puis vers Grsecurity

Sécuriser un Kernel avec grsecurity

 

 

Utilisez la barre espace de votre clavier pour modifier la configuration du module Grsecurity

Sécuriser un Kernel avec grsecurity

 

Naviguez vers Configuration Method

Sécuriser un Kernel avec grsecurity

 

Sélectionnez Automatic

Sécuriser un Kernel avec grsecurity

 

Attention IPtables peut ne pas fonctionner par défaut. Pour s’assurer de son fonctionnement suivez les recommandations ci-dessous
Networking Support -> Networking options -> Network packet filtering framework (Netfilter) -> IP:Netfilter Configuration -> Enable: IPv4 masquerade support + iptables support
Networking Support -> Networking options -> Network packet filtering framework (Netfilter) -> IPV6:Netfilter Configuration -> ip6tables NAT support -> Enable: masquerade support

 

Vous pouvez maintenant sauvegarder votre configuration et quitter.

 

 

Sécuriser un Kernel avec grsecurity : Compilation du Kernel

Ici aussi on met un peu d’ordre dans nos fichiers

make-kpkg clean

 

Maintenant récupérez le nombre de coeur CPU disponibles sur votre machines

nproc

 

Dans mon cas, cette commande me retourne le chiffre 12. Je peux donc affecter jusqu’à 12 cores à la compilation du Kernel

Nous pouvons maintenant lancer la compilation du Kernel (modifiez l’option -j 12 en fonction du nombre de cores que vous souhaitez affecter à cette opération)

fakeroot make-kpkg --initrd --revision=1.0.noobunbox kernel_image kernel_headers -j 12

 

 

Sécuriser un Kernel avec grsecurity : Installation du Kernel

La compilation est terminée, deux fichiers devraient avoir été générés, vérifions

root@noobunbox:~/kernel-grsecurity/linux-4.4.7$ ls ../*.deb
../linux-headers-4.4.7-grsec_1.0.noobunbox_amd64.deb
../linux-image-4.4.7-grsec_1.0.noobunbox_amd64.deb

 

Je vais me répéter mais ce n’est pas grave 🙂 je vous conseille de transférer ces deux paquets sur une machine virtuelle afin de les tester. Connectez vous donc sur votre MACHINE VIRTUELLE via SSH.

 

Avant de pouvoir installer notre Kernel grsecurity, nous allons devoir installer deux paquets

apt-get install paxctl paxtest

 

Maintenant installez les deux paquets précédemment transférés

sudo dpkg -i linux-headers-4.4.7-grsec_1.0.noobunbox_amd64.deb
sudo dpkg -i linux-image-4.4.7-grsec_1.0.noobunbox_amd64.deb

 

L’installation terminée, redémarrez votre machine virtuelle. Une fois le redémarrage terminé, vérifiez la version du Kernel installé via la commande

root@noobunbox:~$ uname -a
Linux debian 4.4.7-grsec #1 SMP Sun Apr 17 23:04:15 MSK 2016 x86_64 GNU/Linux

 

 

Sécuriser un Kernel avec grsecurity : Test du module grsecurity

Afin de vérifier que grsecurity fonctionne correctement nous allons utiliser la commande suivante

root@noobunbox:~$ paxtest blackhat

 

Cette commande permet de simuler l’exploit de vulnérabilités. Si tout va bien voici ce que vous devriez obtenir

root@noobunbox:~# paxtest blackhat
PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter[at]adamantix.org>
Released under the GNU Public Licence version 2 or later

Writing output to /root/paxtest.log
It may take a while for the tests to complete
Test results:
PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter[at]adamantix.org>
Released under the GNU Public Licence version 2 or later

Mode: Blackhat
Linux noobunbox 4.4.7-grsec #1 SMP Sun Apr 17 23:04:15 MSK 2016 x86_64 GNU/Linux

Executable anonymous mapping : Killed
Executable bss : Killed
Executable data : Killed
Executable heap : Killed
Executable stack : Killed
Executable shared library bss : Killed
Executable shared library data : Killed
Executable anonymous mapping (mprotect) : Killed
Executable bss (mprotect) : Killed
Executable data (mprotect) : Killed
Executable heap (mprotect) : Killed
Executable stack (mprotect) : Killed
Executable shared library bss (mprotect) : Killed
Executable shared library data (mprotect): Killed
Writable text segments : Killed
Anonymous mapping randomisation test : 28 bits (guessed)
Heap randomisation test (ET_EXEC) : 23 bits (guessed)
Heap randomisation test (PIE) : 35 bits (guessed)
Main executable randomisation (ET_EXEC) : 28 bits (guessed)
Main executable randomisation (PIE) : 28 bits (guessed)
Shared library randomisation test : 28 bits (guessed)
Stack randomisation test (SEGMEXEC) : 35 bits (guessed)
Stack randomisation test (PAGEEXEC) : 35 bits (guessed)
Arg/env randomisation test (SEGMEXEC) : 39 bits (guessed)
Arg/env randomisation test (PAGEEXEC) : 39 bits (guessed)
Randomization under memory exhaustion @~0: 28 bits (guessed)
Randomization under memory exhaustion @0 : 28 bits (guessed)
Return to function (strcpy) : paxtest: return address contains a NU LL byte.
Return to function (memcpy) : Killed
Return to function (strcpy, PIE) : paxtest: return address contains a NU LL byte.
Return to function (memcpy, PIE) : Killed

 

Pour comparaison voici ce que l’on obtient avec un Kernel ne comprenant pas le module grsecurity

root@noobunbox:~$ paxtest blackhat
PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter@adamantix.org>
Released under the GNU Public Licence version 2 or later

Writing output to /root/paxtest.log
It may take a while for the tests to complete
Test results:
PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter@adamantix.org>
Released under the GNU Public Licence version 2 or later

Mode: Blackhat
Linux noobunbox 4.5.1 #1 SMP Sun Apr 17 16:04:50 MSK 2016 x86_64 GNU/Linux

Executable anonymous mapping : Killed
Executable bss : Killed
Executable data : Killed
Executable heap : Killed
Executable stack : Killed
Executable shared library bss : Killed
Executable shared library data : Killed
Executable anonymous mapping (mprotect) : Vulnerable
Executable bss (mprotect) : Vulnerable
Executable data (mprotect) : Vulnerable
Executable heap (mprotect) : Vulnerable
Executable stack (mprotect) : Vulnerable
Executable shared library bss (mprotect) : Vulnerable
Executable shared library data (mprotect): Vulnerable
Writable text segments : Vulnerable
Anonymous mapping randomisation test : 29 bits (guessed)
Heap randomisation test (ET_EXEC) : 14 bits (guessed)
Heap randomisation test (PIE) : 30 bits (guessed)
Main executable randomisation (ET_EXEC) : 29 bits (guessed)
Main executable randomisation (PIE) : 28 bits (guessed)
Shared library randomisation test : 29 bits (guessed)
Stack randomisation test (SEGMEXEC) : 30 bits (guessed)
Stack randomisation test (PAGEEXEC) : 30 bits (guessed)
Arg/env randomisation test (SEGMEXEC) : 22 bits (guessed)
Arg/env randomisation test (PAGEEXEC) : 22 bits (guessed)
Randomization under memory exhaustion @~0: 28 bits (guessed)
Randomization under memory exhaustion @0 : 28 bits (guessed)
Return to function (strcpy) : paxtest: return address contains a NULL byte.
Return to function (memcpy) : Killed
Return to function (strcpy, PIE) : paxtest: return address contains a NULL byte.
Return to function (memcpy, PIE) : Killed

 

Source

 

Cet article Sécuriser un Kernel avec Grsecurity est apparu en premier sur Noobunbox.

❌
❌