Wordpress : Attaque, Audit et Protection | Hackfest 2015
1. WordPress : Attaque, Audit
et Protection
François Harvey
http://francoisharvey.ca
Préparé dans le cadre du hackfest 2015
2. Ou si vous préférez
(C) 2015 Francois Harvey / http://francoisharvey.ca 2
3. François Harvey
• Professionnel en sécurité de l’information
• Directeur des opérations chez Horizon-Cumulus
• 2ei conférence au Hackfest
(Faut croire que la première était pas si pire)
(C) 2015 Francois Harvey / http://francoisharvey.ca 3
4. Moi & Wordpress
• Intervention annuelle sur une centaine de projets utilisant Wordpress
• Audit de sécurité
• Analyse post-incident
• Hébergement Web
• Migration
• Développement sécuritaire
• Je ne suis pas un développeur Wordpress (mais j’en supervise)
• Je suis meilleur pour briser des trucs que pour les développer ;)
(C) 2015 Francois Harvey / http://francoisharvey.ca 4
6. Objectifs de la conférence
• Wordpress
• Non, pas de vulnérabilité Web générique
• Non, ca ne sera pas un tutorial sur « wpscan »
• L’objectif premier est de comprendre ce qui est « Spécifique » à
Wordpress et identifier vos propres vulnérabilités
(C) 2015 Francois Harvey / http://francoisharvey.ca 6
9. FALSE ! Même le core de wordpress est
insécure
• Pas Exploitable != Sécuritaire
• Aucune journalisation
• Aucune intégrité
• Diffusion de version
• XMLRPC
• ID Séquentiel
• Cryptographie Faible
(C) 2015 Francois Harvey / http://francoisharvey.ca 9
10. Attaques principales
• Diffusion de version
• Énumération
• Brute force
• Remplacement de contenu (SEO, liens, vandalisme)
• Porte dérobée
• SPAM
• Accès non autorisé
• Contournement de mesure de sécurité logique
(C) 2015 Francois Harvey / http://francoisharvey.ca 10
14. Plusieurs approches
• Botnet : Liste de mot de passe partagés sur un très grand pool
d’adresse
• Brute-force : Une adresse IP qui énumère l’ensemble des mots de
passe
• Micro : mot de passe unique à la fois tester sur un très grand nombre
de wordpress
Dans notre cas, un journal combiné des erreurs d’authentification de
l’ensemble des sites est utilisé pour alimenté la détection d’intrusion
(C) 2015 Francois Harvey / http://francoisharvey.ca 14
15. Exploit générique dans des thèmes / plugins
(C) 2015 Francois Harvey / http://francoisharvey.ca 15
16. Malware distribué sous forme de plugin
<?php
/*
Plugin Name: Wordpress admin security
Plugin URI: http://buynowshop.com/plugins/bns-add-widget
Description: Add a widget area to the footer of any theme.
Version: 0.8
Author: Edward Caissie
Author URI: http://edwardcaissie.com/
Text Domain: bns-add-widget
License: GNU General Public License v2
License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
(C) 2015 Francois Harvey / http://francoisharvey.ca 16
23. L’approche « graybox »
• Plusieurs éléments accessible
• Code sources parfois disponible
• Inscription possible
• Recherche (s=)
• XMLRPC
• Version exposé
• User énumération (author=x )
(C) 2015 Francois Harvey / http://francoisharvey.ca 23
24. Environnement de test et audit
• Environnement LAMP/WAMP (Kali Linux)
• Wordpress ! (Git)
• Navigateur Web (OWASP Mantra)
• Proxy inversé ( BURP Suite Pro)
PENTEST
Utiliser la version de PHP / Wordpress / Apache de la cible
(C) 2015 Francois Harvey / http://francoisharvey.ca 24
25. Configuration de Wordpress
• Debug bar
• Debug Bar Console
• Debug Bar Shortcodes
• What Template
• define('WP_DEBUG', true);
• define('SAVEQUERIES', true);
• Debug Bar Post Types, Hook, Filters, Roles and Capabilities
(C) 2015 Francois Harvey / http://francoisharvey.ca 25
35. Vecteurs d’attaques spécifiques à Wordpress
• Attaque de prédiction
• ShortCode : [BALISE] qui permet l’insertion de fonction pré établi
dans le texte [/BALISE]
• AJAX : Mécanismes intégré à Wordpress d’exécuter des fonctions en
parallèle
• Hook/filter : API qui permet au plugins d’intercepter et intervenir sur
des événements systèmes
• Manipulation WP_Query()
(C) 2015 Francois Harvey / http://francoisharvey.ca 35
36. Wordpress « multisite »
• Mode de wordpress permettant d’avoir plusieurs sites distinct sur un
environnement unique (network)
• Liste d’utilisateurs globale
• Plugins par site ou par network
• Segmentation logique de la base de données
• Segmentation logique des dossiers de téléchargement
• Pas implanté correctement par plusieurs modules
• Un seul périmètre de sécurité : 1 site piraté = l’ensemble des sites
compromis.
(C) 2015 Francois Harvey / http://francoisharvey.ca 36
37. Plugins
• Plus de 30 000 plugins répertoriés
• N’importe qui peut soumettre une plugin
• N’importe qui peut installer une plugin
• Aucune assurance qualité
• Aucune norme de développement
• Aucune signature numérique
Pour les thèmes, c’est similaire
(C) 2015 Francois Harvey / http://francoisharvey.ca 37
38. Les recherches du code source (grep)
• wp_ajax_nopriv vs wp_ajax_
• do_shortcode
• wp-load
• call_user_func / exec
• add_action *_init
• $_ (REQUEST, GET,POST,COOKIE)
• Fonction fichiers (mkdir, file_get_contents)
(C) 2015 Francois Harvey / http://francoisharvey.ca 38
39. Exemple de prévision dans MainWP
Vulnérabilitée dans le système de session.
$cookieDir = $dirs[0] . 'cookies';
mkdir($cookieDir, 0777, true);
$cookieFile = $cookieDir . '/' . sha1(sha1('mainwp' . $website->id) .
'WP_Cookie');
"Today we released updates to both the MainWP Dashboard (2.0.23) and
MainWP Child (2.0.23) that contain additional security hardening for a possible issue found by
Francois Harvey and reported through out White Hat Reward Program.(C) 2015 Francois Harvey / http://francoisharvey.ca 39
47. Exploitation « ShortCode »
• La manipulation des shortcodes peut permettre de contourner des
mécanismes de sécurité.
• Ne nécessite pas de privilège
• Parfois intégré à des thèmes et requètes ajax
• Les thèmes et plugins les utilise beaucoup et sont souvent très peu
sécurisé
• Rarement identifié par des scanneur automatisé
• do_shortcode sur du contenu utilisateur
(C) 2015 Francois Harvey / http://francoisharvey.ca 47
48. Accessible via Debug Menu
(C) 2015 Francois Harvey / http://francoisharvey.ca 48
49. Limitation des attaques XSS (Cross Site
Scripting)
Est remplacé par
' ‘
" «
Retour de ligne <br/>
Saut de ligne <p>
<script>
Attribut (onload, onblur, onfocus)
KSES Strips Evil Scripts
(C) 2015 Francois Harvey / http://francoisharvey.ca 49
54. shortcodes-ultimate
• Installations actives : 400 000+
• Toujours pas corrigé
• Ne l’utilisez pas sur vos environnements…
(C) 2015 Francois Harvey / http://francoisharvey.ca 54
56. Exploitation
• [su_post default="wp-config.php" before="" after="" post_id=121212
field=existe_pas filter="file_get_contents"]
• Tout les utilisateurs avec des rôles contributeurs et plus peuvent
l’executer.
(C) 2015 Francois Harvey / http://francoisharvey.ca 56
63. Une plugin de sécurité n’est pas une option
• Les plugins de sécurité Wordpress ne peuvent pas faire plus que
Wordpress le permet
• La sécurité doit être externe au Wordpress
• Les modules doivent être limité à la prévention des attaques
(C) 2015 Francois Harvey / http://francoisharvey.ca 63
64. Diminuer la visibilité
• Supprimer le readme.html
• Masquer la version
remove_action('wp_head', 'wp_generator');
• Désactiver l’indexation du répertoire
• Ajuster robots.txt
User-agent: *
Disallow: /wp-*
Allow: /wp-content/uploads/
(C) 2015 Francois Harvey / http://francoisharvey.ca 64
65. Mise à jour
• Mise à jour du core de Wordpress
• Mise à jour des plugins
• Supprimer toutes plugins non utilisées
(C) 2015 Francois Harvey / http://francoisharvey.ca 65
66. Protection contre le brute force
Pour l’énumération
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://votre_site/ [L,R=301]
Utiliser fail2ban ou une approche similaire : Bloquer au niveau du
firewall
(C) 2015 Francois Harvey / http://francoisharvey.ca 66
67. Utiliser des mécanismes de sécurité externe
• Utilisation d’un WAF externe
Par contre, plusieurs vulnérabilités ne seront pas intercepté
• Utilisation de Deep Security
• Utilisation d’antivirus et CXS
http://configserver.com/cp/cxs.html
(C) 2015 Francois Harvey / http://francoisharvey.ca 67
68. Auditer thème et plugins
• Auditer les plugins que vous utilisez
• Limiter le nombre de plugin à seulement ceux nécessaires
• Limiter les utilisateurs Wordpress à ceux nécessaires
(C) 2015 Francois Harvey / http://francoisharvey.ca 68
69. Conclusion
• Wordpress doit être traité comme un système d’information.
• Ce n’est pas un système auto gérée
• L’image de sécurité de Wordpress est pas toujours très bonne
(souvent avec raison), miais progressivement la plate-forme évolue
• Merci pour votre presence et à l’organisation du hackfest
(C) 2015 Francois Harvey / http://francoisharvey.ca 69
70. Question et réponses
• Je serai disponible après la conférence pour répondre à vos questions
(C) 2015 Francois Harvey / http://francoisharvey.ca 70
71. Contact
• Blog (mouais, il est en Wordpress)
http://francoisharvey.ca/
• Linked-in
http://ca.linkedin.com/in/francoisharvey
(C) 2015 Francois Harvey / http://francoisharvey.ca 71