DSC_0298.jpg ESC_0133.jpg DSC_0001.jpg

 i need more coffee

Atteint depuis mon plus jeune âge d'hippopotomonstrosesquippedaliophobie (cultivez vous ça ne fera pas de mal) j'ai décidé de faire un blog sur ma maladie (be feeeaar..).
Blague à part c'est un blog totalement axé génie logiciel que vous trouverez ici. Du PHP, du J2EE, et évidement toutes les technologies qui leur sont liées.

Have fun !

Blinder la sécurité de CmsMadeSimple

8 juillet 2013Posté par : Kevin Danezis dans CmsMadeSimple

Pour aujourd'hui j'ai eu envie de décliner un tuto complet sur la manière dont nous pouvons blinder la sécurité de son installation CmsMadeSimple. Un sujet trop peu évoqué à mon gout sur le net. Ces méthodes sont déployées sur l'ensemble des sites que je gères aujourd'hui : Apache / Ispconfig / CmsMadeSimple et même fluxBB.

Pour ce guide sur la sécurité j'ai réalisé quelques tests, tout est donc normalement "okay" pour votre usage personnel. Néanmoins conservez toujours à l'esprit qu'il vous faut réaliser ses tâches une à une afin de vous assurer de ne pas induire de bug sur votre site.

Sécuriser vos installations CmsMadeSimple (pour les débutants)

Pour démarrer doucement je vous propose des manipulations à la portée de toutes les personnes tant qu'elles maitrisent FTP et le minima habituel pour CmsMadeSimple.

Mettez vous à jour bordel !

C'est la chose la plus évidente qui est pourtant la plus ignorée par les webmasters. Je ne reviendrais pas sur le sujet pendant des heures, chacun prend ses responsabilités :) Néanmoins n'oubliez pas que se mettre à jour c'est également mettre à jour sa version PHP, Apache, et tous les softs que vous avez pu installer sur votre serveur. Pensez également aux plugins de CmsMadeSimple. Conservez donc un œil aux annonces de l'équipe FR qui vous préviendrons si une mise à jour a été packagée. PHP et Apache ont également leur propres listes de diffusion qu'un bon webmaster devrait avoir dans sa liste de site à surveiller.

Élaguez vos installations

L'inverse de "la mise à jour partout" pourrait être : "l'obsolète null part" et reste totalement vrai : virez les softs de galeries photos ou autres utilitaires trouvés dans le trou du cul du web qui ne sont peut être plus à jour ou que vous n'utilisez plus. Plus petite est la surface d'attaque, plus petit sera le risque qu'un pirate vous rende visite.

Contrôlez vos identifiants et vos mots de passe

Vous le savez, on revient pas dessus. Voici un site qui vous permettra de tester la solidité de votre mot de passe. Pensez également à exclure l'utilisation des logins comme admin, root, webmaster ou encore le nom du client s'il est le propriétaire d'une société éponyme :)

PS : pour tester vos passwords sur le site, évitez de mettre exactement le votre hein...

Sécuriser vos installations CmsMadeSimple (pour les barbus)

Voilà pour la partie évidence... nous allons donc rentrer dans la partie vraiment intéressante.

Renommez le répertoire admin

dans le fichier config.php ajoutez la ligne suivante (ou modifiez la si elle existe déjà)

$config['admin_dir'] = 'mon_admin_secret';

puis renommez tout simplement par FTP le répertoire admin pour "mon_admin_secret". Cela calmera les ardeurs ET des petits pirates du dimanche qui tentent d'accéder à vos sites internets via des méthodes automatisées ET des curieux.

Protégez votre répertoire admin par htaccess

Une solution encore plus poussée consiste à créer un .htaccess dans votre répertoire d'administration de cmsmadesimple qui contiendra ceci :

AuthUserFile /var/www/path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès Restreint"
AuthType Basic
require valid-user

que vous personnaliserez (path/to/) puis de créer dans le répertoire /var/www/path/to/ un fichier .htpasswd contenant la liste des login / mots de passe des utilisateurs ayant autorisation. Par exemple :

paul:motDePasseEncode
jean:motDePasseEncode

Pour encoder un mot de passe pour .htpasswd je passe par Ovh qui propose un petit soft tout con en ligne : http://www.ovh.com/fr/support/outils/crypt_password.pl note : mettez n'importe quel couple de lettres pour la clé, cela n'a aucun impact.

Protégez votre fichier config.php

Avec un CHMOD de 444, votre fichier ne pourra être modifié par un programme tiers si le pirate arrivait malgré toute vos précautions à s'installer chez vous. C'est une bonne sécurité à moindre coût.

Sécuriser vos installations CmsMadeSimple (pour les gros barbus)

Les méthodes que je liste maintenant demandent tout de même un peu de recul car mal effectuées, elles pourraient rendre HS votre site. Pas de panique cependant, les retirer remettra votre site d'équerre. Notez également que comme pour toute modification de fichier .htaccess, je vous conseil de réaliser vos tests pas à pas dans une navigation privée (Ctrl + Shift + P sous Firefox) afin que ce dernier ne mémorise pas les redirections et vous assure ainsi de tester à chaque fois la dernière version de votre fichier .htaccess.

Blindez vous contre les attaques automatisées

Certaines attaques ne sont que des tests générées par des bots tirant un peu au hasard selon des méthodes connues, Il est donc assez facile de s'en prémunir.

Voici une série de commandes à placer au début d'un fichier .htaccess placé à la racine de votre hébergement. C'est un cumul de plusieurs commandes que j'ai glanées à droite et à gauche, que j'ai testées pour CmsMadeSimple + Fluxbb. Je tiens à remercier les membres du forum OVH qui sont à l'origine de ce fichier. Il est également important de savoir que leur code "en l'état" pose soucis pour fluxbb et CmsMadeSimple, d'où mes modifications.

Attention : remplacez dans le code les deux occurrences de exemple\.fr par votre domaine et son extension : votre_domaine\.tld

#http://forum.ovh.com/showthread.php?t=19263

order allow,deny
deny from all

#######################################################################################
Options -Indexes
#######################################################################################

###FILTRE CONTRE ROBOTS DES PIRATES ET ASPIRATEURS DE SITE WEB
### LISTE ICI: http://www.bg-pro.com/?goto=badbot
RewriteEngine On
## EXCEPTION: TOUS LES ROBOTS MEMES ANONYMES OU BANNIS PEUVENT ACCEDER A CES FICHIERS
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteCond %{REQUEST_URI} !^/sitemap.xml
## EXCEPTION: SI UTILISATION DE *PAYPAL INSTANT NOTIFICATION PAYMENT*, COMME PAYPAL N'UTILISE PAS DE HTTP_USER_AGENT, L'IPN NE MARCHERA PAS.
RewriteCond %{REQUEST_URI} !^/paypal-ipn.php
##
RewriteCond %{HTTP_USER_AGENT} ^-?$ [OR] ## ANONYMES
RewriteCond %{HTTP_USER_AGENT} ^[bcdfghjklmnpqrstvwxz\ ]{8,}|^[0-9a-z]{15,}|^[0-9A-Za-z]{19,}|^[A-Za-z]{3,}\ [a-z]{4,}\ [a-z]{4,} [OR] ## CEUX QUI INVENTENT DES NOMS AU HASARD
RewriteCond %{HTTP_USER_AGENT} ^ RewriteCond %{HTTP_USER_AGENT} EyeNetIE|fastlwspider|FavOrg|Favorites\ Sweeper|^Fetch|FEZhead|FileHound|flashget|FlashGet\ WebWasher|FlickBot|fluffy|frontpage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go!Zilla|go-ahead-got-it|GornKer|Grabber|GrabNet|Grafula|Green\ Research|grub-client|grub\ crawler|hanzoweb|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|HTTPConnect|httpdown|httplib|HttpProxy|HTTP\ agent|http\ generic|HTTrack|ia_archive|IBM_Planetwide|IDBot|id-search|imagefetch|Image\ Stripper|Image\ Sucker|IncyWincy|Indy\ Library|informant|Ingelin|InterGET|InternetLinkAgent|InternetSeer\.com|^Internet\ Explorer|Internet\ Ninja|IPiumBot|Iria|Irvine|Jakarta\ Commons|JBH*Agent [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} JetCar|JOC|JOC\ Web\ Spider|JustView|Kapere|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|likse|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|Mac\ Finder|Mag-Net|Magnet|Mass\ Downloader|MCspider|Microsoft\ URL|Microsoft\ Data|MIDown\ tool|minibot\(NaverRobot\)|Mirror|Missigua|Mister\ PiX|MJ12bot|MMMtoCrawl\/UrlDispatcherLLL|Movable\ Type|Moozilla|^Mozilla$|^MSIE|Murzillo|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|NetZIP|NetZippy|NetZip\ Downloader|Net\ Vampire|NEWT|nicerspro|NICErsPRO|NPBot|Nutch|Nutscrape/|Octopus|Offline\ Explorer|Offline\ Navigator|OmniExplorer|OpaL|Openfind|OpenTextSiteCrawler [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} OrangeBot|PackRat|PageGrabber|Papa\ Foto|pavuk|pcBrowser|PersonaPilot|PingALink|Pockey|Program\ Shareware|Proxy|psbot|PSurf|psycheclone|^puf|Pump|PushSite|PussyCat|PycURL|python|QRVA|QuepasaCreep|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|almaden|Robozilla|Rover|RPT-HTTPClient|Rsync|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|sitecheck|SiteMapper|SiteSnagger|SlySearch|SmartDownload|snagger|SpaceBison|Spegla|SpiderBot|SqWorm|Star\ Downloader|Stripper|sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|SurveyBot|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Telesoft|Templeton|TrackBack|TrueRobot|Turing|TurnitinBot [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} TV33_Mercator|UIowaCrawler|URL_Spider_Pro|^user|^User\ Agent:\ |^User-Agent:\ |UtilMind|Vacuum|vagabondo|vayala|visibilitygap|vobsub|VoidEYE|vspider|w3mir|WebaltBot|WebAuto|webbandit|WebCapture|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|WebDAV|webdevil|webdownloader|Webdup|WebEmailExtractor|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|WEBsaver|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Web\ Data\ Extractor|Web\ Downloader|Web\ Image\ Collector|Web\ Sucker|web\.by\.mail|whizbang|WhosTalking|Widow|Widows|WISEbot|WISEnutbot|WUMPUS|Wweb|WWWOFFLE|Wysigot|x-Tractor|Xaldon\ WebSpider|XGET|Yandex|Zeus|Zeus.*Webster [NC] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} ^curl|^Fetch\ API\ Request|GT\:\:WWW|^HTTP\:\:Lite|httplib|^Java/1.|^Java\ 1.|^LWP|libWeb|libwww|^PEAR|PECL\:\:HTTP|PHPCrawl|^Program\ Shareware|python|Rsync|Snoopy|^URI\:\:Fetch|WebDAV|^Wget [NC] ## BIBLIOTHEQUES / CLASSES HTTP DONT ON NE VEUT PAS. ATTENTION, CELA PEUT BLOQUER CERTAINES FONCTIONS DE VOTRE CMS. NE PAS TOUT EFFACER, MAIS CHERCHEZ LE NOM DE LA CLASSE HTTP CONCERNEE (DEMANDEZ AUX DEVELOPPEURS DE VOTRE CMS). CETTE LISTE BLOQUE 80% DES ROBOTS SPAMMEURS. IL FAUT LA CONSERVER.
RewriteRule (.*) - [F]
#######################################################################################
### SEUL LE FICHIER index.php EST SERVI COMME PREMIER FICHIER PAR DEFAUT. LES AUTRES SONT INTERDITS
DirectoryIndex index.php

### INTERDIRE LES AUTRES TYPES DE FICHIER INDEX

order allow,deny
deny from all

### INTERDIRE L'AFFICHAGE DE CERTAINS FORMATS DE FICHIER
### EXÉCUTÉS PAR LE SERVEUR MAIS INTERDIT D'AFFICHAGE PAR LE NAVIGATEUR WEB

deny from all


### INTERDIRE L'AFFICHAGE DE CERTAINS FICHIERS COMME config, option, login, setup, install, admin.
### A ADAPTER SI CELA POSE PROBLEME

order allow,deny
deny from all


#######################################################################################
### ON EVITE LE VOL D'IMAGES, VIDEO, SON, FEUILLE DE STYLE, PDF ET ZIP
### LES VISITEURS DOIVENT PASSER PAR LE SITE.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://[-_a-z0-9.]*exemple\.fr$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[-_a-z0-9.]*exemple\.fr/.*$ [NC]
RewriteRule .*\.(gif|jpe?g?|jp2|png|svgz?|ico|css|pdf|zip|gz|js|mp3|m4a|mp4|mov|divx|avi|wma?v?|wmp|swf|flv|docx?|xlsx?|pptx?|vbs|rtf|asf?x?|odt|ods|odp|odg|odb)$ - [NC,F]

#######################################################################################
### DES FAUX URLS, ON LES NEUTRALISE
RedirectMatch gone ^/_vti.*
RedirectMatch gone ^/MSOffice.*
RedirectMatch gone ^[-_a-z0-9/\.]*//.*
RedirectMatch gone ^.*/etc/passwd.*

#######################################################################################
### FILTRE CONTRE XSS, REDIRECTIONS HTTP, base64_encode, VARIABLE PHP GLOBALS VIA URL, MODIFIER VARIABLE _REQUEST VIA URL, TEST DE FAILLE PHP, INJECTION SQL SIMPLE
RewriteEngine On
RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
RewriteCond %{QUERY_STRING} ^(.*)(%3C| RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)http(%3A|:)(/|%2F){2}(.*)$ [NC,OR] ## ATTENTION A CETTE REGLE. ELLE PEUT CASSER CERTAINES REDIRECTIONS RESSEMBLANT A: http://www.truc.fr/index.php?r=http://www.google.fr ##
RewriteCond %{QUERY_STRING} ^(.*)base64_encode(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)GLOBALS(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)_REQUEST(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)(SELECT(%20|\+)|UNION(%20|\+)ALL|INSERT(%20|\+)|DELETE(%20|\+)|CHAR\(|UPDATE(%20|\+)|REPLACE(%20|\+)|LIMIT(%20|\+))(.*)$ [NC]
RewriteRule (.*) - [F]

#######################################################################################
### FILTRE CONTRE PHPSHELL.PHP, REMOTEVIEW, c99Shell et autres
RewriteEngine On
RewriteCond %{REQUEST_URI} .*((php|my)?shell|remview.*|phpremoteview.*|sshphp.*|pcom|nstview.*|c99|r57|webadmin.*|phpget.*|phpwriter.*|fileditor.*|locus7.*|storm7.*)\.(p?s?x?htm?l?|txt|aspx?|cfml?|cgi|pl|php[3-9]{0,1}|jsp?|sql|xml) [NC,OR]
RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
RewriteCond %{QUERY_STRING} ^(.*)=/home(.+)?/loginftp/(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^work_dir=.*$ [OR]
RewriteCond %{QUERY_STRING} ^command=.*&output.*$ [OR]
RewriteCond %{QUERY_STRING} ^nts_[a-z0-9_]{0,10}=.*$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)cmd=.*$ [OR] ## ATTENTION A CETTE REGLE. ELLE PEUT CASSER VOTRE SITE ##
RewriteCond %{QUERY_STRING} ^c=(t|setup|codes)$ [OR]
RewriteCond %{QUERY_STRING} ^act=((about|cmd|selfremove|chbd|trojan|backc|massbrowsersploit|exploits|grablogins|upload.*)|((chmod|f)&f=.*))$ [OR]
RewriteCond %{QUERY_STRING} ^act=(ls|search|fsbuff|encoder|tools|processes|ftpquickbrute|security|sql|eval|update|feedback|cmd|gofile|mkfile)&d=.*$ [OR]
RewriteCond %{QUERY_STRING} ^&?c=(l?v?i?&d=|v&fnot=|setup&ref=|l&r=|d&d=|tree&d|t&d=|e&d=|i&d=|codes|md5crack).*$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)([-_a-z]{1,15})=(ls|cd|cat|rm|mv|vim|chmod|chdir|concat|mkdir|rmdir|pwd|clear|whoami|uname|tar|zip|unzip|gzip|gunzip|grep|more|ln|umask|telnet|ssh|ftp|head|tail|which|mkmode|touch|logname|edit_file|search_text|find_text|php_eval|download_file|ftp_file_down|ftp_file_up|ftp_brute|mail_file|mysql|mysql_dump|db_query)([^a-zA-Z0-9].+)*$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)(wget|shell_exec|passthru|system|exec|popen|proc_open)(.*)$
RewriteRule (.*) - [F]

#######################################################################################

Si vous rencontrez des soucis dans la mise en place de ce code, revenez en arrière et testez bloc à bloc le code afin de cibler l'origine de l'erreur.

Bilan

J'ai laissé trainer cet article pendant près d'un mois ayant encore une section que je souhaitais évoquer : l'analyse des logs Apache. Néanmoins comme vous le voyez je n'ai finalement pas inclu cette partie ... la raison est double : Oui c'est de la sécurité que de surveiller ses logs régulièrement, mais en général les attaques logguées sont des attaques qui n'ont pas réussit à passer... ou des attaques qui sont passées, auquel cas vous avez du le sentir non ;) . La seconde raison est le manque de recul sur ce point précis et je n'ai pas vraiment envie de donner une série d'explication foireuse sur le sujet... bref je passe pour cet article, peut être une prochaine fois si je trouve matière !

En attendant nous avons finit mon tuto, j'espère qu'il reste une source de bonne idées pour ceux et celles qui se sont mises à CmsMadeSimple. Pour les gros barbus je reste évidement ouvert à toutes les questions, suggestions relatif à la sécurité que vous avez vous même mis en place sur vos installations.

Bon dev et bonne journée !

comments powered by Disqus