{"id":1905,"date":"2024-11-12T16:33:43","date_gmt":"2024-11-12T15:33:43","guid":{"rendered":"https:\/\/www.fabriziogiancola.eu\/?p=1905"},"modified":"2024-11-12T17:01:29","modified_gmt":"2024-11-12T16:01:29","slug":"introduzione-alla-cybersecurity-e-alle-vulnerabilita-del-software","status":"publish","type":"post","link":"https:\/\/www.fabriziogiancola.eu\/index.php\/2024\/11\/12\/introduzione-alla-cybersecurity-e-alle-vulnerabilita-del-software\/","title":{"rendered":"Introduzione alla cybersecurity e alle vulnerabilit\u00e0 del software"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1-1024x576.jpg\" alt=\"\" class=\"wp-image-1863\" srcset=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1-1024x576.jpg 1024w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1-300x169.jpg 300w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1-768x432.jpg 768w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1-1536x864.jpg 1536w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1-1200x675.jpg 1200w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/wallpaperbetter.com_1920x108019-1.jpg 1920w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Nel mondo odierno, dove la dipendenza dalla tecnologia \u00e8 crescente, la cybersecurity \u00e8 diventata un pilastro fondamentale. La sicurezza informatica non riguarda solo la protezione di dati e risorse, ma anche la gestione delle vulnerabilit\u00e0 che emergono nei sistemi e nelle applicazioni software. Uno degli errori comuni \u00e8 la fiducia cieca nella fonte da cui si ottiene il software: installare programmi da fonti non verificate pu\u00f2 esporre a gravi rischi, poich\u00e9 software dannosi come trojan e virus sono spesso distribuiti tramite siti web malevoli o email fraudolente. In questi casi, la vulnerabilit\u00e0 risiede non solo nel software ma anche negli utenti, i quali, se non adeguatamente formati, possono commettere errori nella valutazione delle fonti e dei rischi associati.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color has-medium-font-size wp-elements-7bb6e6a12ee6892b2bd3dcbd61dd9159\"><strong>La sicurezza della fonte e le minacce nascoste<\/strong><\/p>\n\n\n\n<p>Affidarsi solo all\u2019affidabilit\u00e0 della fonte di download non \u00e8 sufficiente. Anche quando scarichiamo software da siti web legittimi, potremmo comunque trovarci esposti a minacce come attacchi \u201c<em>man in the middle<\/em>\u201d che compromettono il file durante il trasferimento. Inoltre, errori logici interni al software o input inattesi (non \u00e8 detto che l\u2019input sia fidato, ovvero \u201c<em>soddisfi le precondizioni<\/em>\u201d), possono compromettere l\u2019intero sistema. Pertanto, la correttezza del software, intesa come aderenza ai requisiti funzionali e prevenzione degli errori, diventa un aspetto cruciale.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color has-medium-font-size wp-elements-809438d186673ed4e4142027f41c6f3e\"><strong>Gestione delle vulnerabilit\u00e0: l\u2019intervento di CERT e CSIRT<\/strong><\/p>\n\n\n\n<p>Quando una vulnerabilit\u00e0 viene scoperta, l\u2019utente deve segnalarla a un team di risposta agli incidenti informatici, come i <a href=\"https:\/\/en.wikipedia.org\/wiki\/Computer_emergency_response_team\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Computer_emergency_response_team\" target=\"_blank\" rel=\"noreferrer noopener\">CERT<\/a> (Computer Emergency Response Team) o i <a href=\"https:\/\/www.csirt.gov.it\/\" data-type=\"link\" data-id=\"https:\/\/www.csirt.gov.it\/\" target=\"_blank\" rel=\"noreferrer noopener\">CSIRT<\/a> (Computer Security Incident Response Team). Questi enti, spesso supportati da universit\u00e0 o enti governativi, verificano la presenza della vulnerabilit\u00e0 e avvisano i produttori del software, prima di pubblicare un avviso di sicurezza. Tuttavia, esiste anche un mercato illecito per queste vulnerabilit\u00e0, detto mercato degli \u201c<em>zero-day<\/em>\u201d, dove le falle sconosciute e non documentate possono essere vendute e sfruttate dai criminali.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color has-medium-font-size wp-elements-3dee47c4345dbfe2274b8458c2a53c30\"><strong>Il cybercrime market e le minacce digitali<\/strong><\/p>\n\n\n\n<p>L\u2019economia del crimine informatico non si limita alle vulnerabilit\u00e0 zero-day. Esistono veri e propri mercati per exploit, malware, botnet e credenziali rubate, spesso venduti come servizi \u201c<em>as-a-service<\/em>\u201d. Questi mercati prosperano nel dark web, sfruttando reti anonime come TOR per garantire la segretezza e l\u2019intracciabilit\u00e0 delle transazioni. Ad esempio, i dati delle carte di credito o gli account compromessi possono essere venduti a <a href=\"https:\/\/www.privacyaffairs.com\/dark-web-price-index-2023\/\" data-type=\"link\" data-id=\"https:\/\/www.privacyaffairs.com\/dark-web-price-index-2023\/\" target=\"_blank\" rel=\"noreferrer noopener\">prezzi <\/a>che variano a seconda del livello di compromissione e del valore dell\u2019account.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color has-medium-font-size wp-elements-f175ab5b57b01f5d973901a9b8e28b8f\"><strong>Il database delle vulnerabilit\u00e0 e i framework di sicurezza<\/strong><\/p>\n\n\n\n<p>Per catalogare e analizzare le vulnerabilit\u00e0, sono stati sviluppati database come il National Vulnerability Database (<a href=\"https:\/\/nvd.nist.gov\/\" data-type=\"link\" data-id=\"https:\/\/nvd.nist.gov\/\" target=\"_blank\" rel=\"noreferrer noopener\">NVD<\/a>) e il Common Vulnerabilities and Exposures (<a href=\"https:\/\/cve.mitre.org\/\" data-type=\"link\" data-id=\"https:\/\/cve.mitre.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">CVE<\/a>), che documentano le vulnerabilit\u00e0 note e forniscono indicazioni su come mitigare i rischi. Le vulnerabilit\u00e0 vengono inoltre classificate tramite il Common Vulnerability Scoring System (<a href=\"https:\/\/nvd.nist.gov\/vuln-metrics\/cvss\" data-type=\"link\" data-id=\"https:\/\/nvd.nist.gov\/vuln-metrics\/cvss\" target=\"_blank\" rel=\"noreferrer noopener\">CVSS<\/a>), un sistema di valutazione che attribuisce un punteggio alla gravit\u00e0 del rischio, guidando le aziende nelle priorit\u00e0 di intervento.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color has-medium-font-size wp-elements-16c19f244cba3dc4c99bef9cc55b4438\"><strong>Il Common Weakness Enumeration (CWE): una tassonomia delle debolezze del software<\/strong><\/p>\n\n\n\n<p>Il Common Weakness Enumeration (<a href=\"https:\/\/cwe.mitre.org\/\" data-type=\"link\" data-id=\"https:\/\/cwe.mitre.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">CWE<\/a>) \u00e8 un elenco standardizzato delle debolezze pi\u00f9 comuni nella sicurezza del software, sviluppato per facilitare l\u2019identificazione e la prevenzione di vulnerabilit\u00e0. A differenza del CVE, che si concentra su vulnerabilit\u00e0 specifiche e istanze particolari in software o sistemi, il CWE descrive debolezze generali che possono essere sfruttate in una vasta gamma di contesti. Tra le debolezze pi\u00f9 rilevanti troviamo problemi come il \u201c<em>buffer overflow<\/em>\u201d, che pu\u00f2 portare a corruzione della memoria e attacchi di esecuzione arbitraria di codice, la \u201c<em>SQL Injection<\/em>\u201d, dove l\u2019immissione di comandi non validati pu\u00f2 compromettere database e sistemi, e l\u2019\u201c<em>out-of-bounds write<\/em>\u201d, dove l\u2019accesso a memoria al di fuori dei limiti previsti pu\u00f2 causare crash o vulnerabilit\u00e0 critiche. Il CWE non solo funge da linguaggio comune per discutere di questi problemi, ma fornisce anche una base per sviluppare strumenti di testing e pratiche di sicurezza, aiutando gli sviluppatori a progettare sistemi pi\u00f9 robusti e resilienti fin dalle fasi iniziali di sviluppo.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color has-medium-font-size wp-elements-9fbe2642373e21e5827329df8ff31f9c\"><strong>Sfide e falsi miti sulla sicurezza del software<\/strong><\/p>\n\n\n\n<p>Uno dei miti pi\u00f9 diffusi \u00e8 che un software sia \u201c<em>sicuro<\/em>\u201d se funziona come previsto. Tuttavia, affidabilit\u00e0 e sicurezza non sono sinonimi: un software pu\u00f2 soddisfare i requisiti funzionali ma essere comunque vulnerabile ad abusi e attacchi. Inoltre, la sicurezza non dipende solo dalle caratteristiche visibili come la crittografia o il controllo degli accessi, ma anche dall\u2019integrazione sicura di ogni funzione. Le minacce derivano anche dall\u2019imprevedibilit\u00e0 dell\u2019uso del software: moderni sistemi connessi e complessi sono difficili da proteggere completamente.<\/p>\n\n\n\n<p id=\"torna_su\"><strong>Alcuni \u201cfalsi miti\u201d e la realt\u00e0<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark>Funziona in modo affidabile, soddisfacendo tutti i requisiti funzionali<\/mark>.<br>\u0096<strong>Affidabilit\u00e0 non vuol dire sicurezza<\/strong>: <strong>\u201c<\/strong><em>Il software affidabile fa quello che deve fare. Il software sicuro fa quello che deve fare e nient&#8217;altro<\/em>\u201d (<em>Ivan Arce<\/em>). Non si tratta solo di come il software deve essere usato, ma anche di come pu\u00f2 essere abusato: in quanto i <strong>requisiti funzionali <\/strong>sono guidati dai <strong>casi d\u2019uso<\/strong>, mentre i <strong>requisiti di sicurezza <\/strong>sono guidati da <strong>casi di abuso<\/strong>.<\/li>\n\n\n\n<li><mark>Dispone di tutte le caratteristiche di sicurezza appropriate<\/mark>.<br>\u0096<strong>Funzionalit\u00e0 di sicurezza non vuol dire funzionalit\u00e0 sicure<\/strong>: le funzionalit\u00e0 di sicurezza sono\u0096 caratteristiche direttamente collegate agli obiettivi di sicurezza, come l\u2019uso della crittografia, la gestione delle password, il controllo degli accessi, ecc. Devono essere implementate con attenzione, ma lo sviluppo non pu\u00f2 concentrarsi solo sulle caratteristiche di sicurezza (<em><a href=\"#sette_regni\" data-type=\"internal\" data-id=\"#sette_regni\">Seven Pernicious Kingdoms<\/a><\/em>). Le funzionalit\u00e0 sicure sono qualsiasi funzionalit\u00e0, anche se non direttamente correlate a un requisito di sicurezza, che possono mettere a rischio la sicurezza.<\/li>\n\n\n\n<li><mark>I possibili utilizzi sono ben noti e sotto controllo<\/mark>.<br>\u0096Non \u00e8 possibile prevedere <strong>tutti<\/strong> i possibili usi di un sistema software. Il software moderno \u00e8 soggetto alla <strong>\u201c<em><a href=\"https:\/\/freedom-to-tinker.com\/2006\/02\/15\/software-security-trinity-trouble\/\" data-type=\"link\" data-id=\"https:\/\/freedom-to-tinker.com\/2006\/02\/15\/software-security-trinity-trouble\/\" target=\"_blank\" rel=\"noreferrer noopener\">The Trinity of Trouble<\/a><\/em>\u201d<\/strong> (<strong>ToT<\/strong>) (Trinit\u00e0 dei problemi) :<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Connettivit\u00e0<\/strong>: i sistemi software sono connessi.<\/li>\n\n\n\n<li>\u0096<strong>Complessit\u00e0<\/strong>: la loro organizzazione pu\u00f2 essere intricata e complessa.<\/li>\n\n\n\n<li>\u0096<strong>Estensibilit\u00e0<\/strong>: si evolvono e possono essere estesi in modo imprevedibile.<\/li>\n<\/ol>\n\n\n\n<p>Tutti questi aspetti sono naturalmente correlati tra loro. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark>Abbiamo previsto tutte le minacce<\/mark>.<br>\u0096Non \u00e8 possibile prevedere <strong>tutte<\/strong> le possibili minacce. Howard e Leblanc <strong>\u201c<a href=\"https:\/\/flylib.com\/books\/en\/1.287.1.17\/3\/\" data-type=\"link\" data-id=\"https:\/\/flylib.com\/books\/en\/1.287.1.17\/3\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>The attacker\u2019s advantage and the defender\u2019s dilemma<\/em><\/a>\u201d<\/strong> riassumono il problema in <strong>4 principi<\/strong>:<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u0096<strong> Principio n. 1: <\/strong>il difensore deve difendere tutti i punti; l\u2019attaccante pu\u00f2 scegliere il punto pi\u00f9 debole.<\/li>\n\n\n\n<li>\u0096<strong> Principio n. 2: <\/strong>il difensore pu\u00f2 difendersi solo da attacchi noti; l\u2019attaccante pu\u00f2 sondare le vulnerabilit\u00e0 sconosciute.<\/li>\n\n\n\n<li>\u0096<strong> Principio n. 3: <\/strong>&nbsp;il difensore deve essere costantemente vigile; l\u2019attaccante pu\u00f2 colpire a piacimento. \u0096<strong> <\/strong><\/li>\n\n\n\n<li><strong>Principio n. 4: <\/strong>il difensore deve rispettare le regole; l\u2019attaccante pu\u00f2 giocare sporco.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark>Il codice \u00e8 \u201c<em>chiuso<\/em>\u201d e le versioni binarie sono offuscate. Anche i nostri meccanismi di crittografia sono segreti<\/mark>.<br>\u0096<strong>\u201c<a href=\"https:\/\/owasp.org\/www-project-developer-guide\/draft\/foundations\/security_principles\/\" data-type=\"link\" data-id=\"https:\/\/owasp.org\/www-project-developer-guide\/draft\/foundations\/security_principles\/\" target=\"_blank\" rel=\"noreferrer noopener\">Security by design vs security by obscurity<\/a>\u201d<\/strong>: <strong>security by obscurity <\/strong>si basa sulla segretezza come metodo generale per la sicurezza. Funziona come deterrente, aumenta il lavoro dell\u2019attaccante, ma i segreti sono difficili da mantenere a lungo (ad es. considerare le fughe di notizie, le tecniche di reverse engineering). \u0096 In generale, ricordiamo i principi dei <strong>\u201c<\/strong><em>vantaggi dell\u2019attaccante<\/em><strong>\u201d<\/strong>. <strong>Security by design <\/strong>si basa su 10 principi generali di sicurezza:<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Semplicit\u00e0<\/li>\n\n\n\n<li>Design Open<\/li>\n\n\n\n<li>Suddivisione<\/li>\n\n\n\n<li>Esposizione minima<\/li>\n\n\n\n<li>Minimo privilegio<\/li>\n\n\n\n<li>Minima fiducia e massima affidabilit\u00e0<\/li>\n\n\n\n<li>Difetti sicuri e a prova di errore<\/li>\n\n\n\n<li>Mediazione completa<\/li>\n\n\n\n<li>Nessun singolo punto di errore<\/li>\n\n\n\n<li>Tracciabilit\u00e0<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark>Per quanto riguarda la sicurezza, conduciamo un pentest approfondito alla fine del ciclo di sviluppo del software<\/mark>.<br>\u0096<strong>Software development life cycle (SDLC) e il \u201c<em>modello touchpoint<\/em>\u201d<\/strong>. Il <strong>Software Development Life Cycle (SDLC)<\/strong> \u00e8 un processo strutturato per lo sviluppo di software di alta qualit\u00e0. Include una serie di fasi che gli sviluppatori seguono per pianificare, progettare, costruire, testare e distribuire un software. L\u2019SDLC fornisce una mappa per il team di sviluppo e garantisce che il prodotto finale soddisfi i requisiti e sia affidabile. Le fasi tipiche dell\u2019SDLC sono:<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Pianificazione e analisi dei requisiti<\/strong>: si identificano le esigenze del cliente e si definiscono i requisiti che il software deve soddisfare. Si stabiliscono obiettivi, risorse e tempistiche.<\/li>\n\n\n\n<li><strong>Progettazione<\/strong>: si pianifica l\u2019architettura del software, definendo l\u2019organizzazione del sistema, l\u2019interfaccia utente e il flusso di dati.<\/li>\n\n\n\n<li><strong>Implementazione e codifica<\/strong>: in questa fase si scrive il codice del software. Gli sviluppatori traducono il progetto in codice funzionante, seguendo standard e pratiche di programmazione.<\/li>\n\n\n\n<li><strong>Test<\/strong>: si eseguono vari tipi di test (unit testing, integration testing, system testing, ecc.) per verificare che il software funzioni correttamente e soddisfi i requisiti.<\/li>\n\n\n\n<li><strong>Deployment (distribuzione)<\/strong>: una volta che il software \u00e8 stato testato e considerato pronto, viene distribuito agli utenti finali.<\/li>\n\n\n\n<li><strong>Manutenzione e supporto<\/strong>: dopo il rilascio, il software entra in una fase di manutenzione in cui si correggono bug, si ottimizza il funzionamento e si gestiscono aggiornamenti.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"627\" height=\"627\" src=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/SDLC_BWC.png\" alt=\"\" class=\"wp-image-1934\" style=\"width:630px;height:auto\" srcset=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/SDLC_BWC.png 627w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/SDLC_BWC-300x300.png 300w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/SDLC_BWC-150x150.png 150w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"414\" src=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/g5GlQCv6v3uXNaRp0r3cVeHEtg.png\" alt=\"\" class=\"wp-image-1935\" style=\"width:630px;height:auto\" srcset=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/g5GlQCv6v3uXNaRp0r3cVeHEtg.png 788w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/g5GlQCv6v3uXNaRp0r3cVeHEtg-300x158.png 300w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/g5GlQCv6v3uXNaRp0r3cVeHEtg-768x403.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"361\" src=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/Software-security-touch-points-3-1.png\" alt=\"\" class=\"wp-image-1959\" srcset=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/Software-security-touch-points-3-1.png 850w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/Software-security-touch-points-3-1-300x127.png 300w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/Software-security-touch-points-3-1-768x326.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p>Il <strong>modello Touchpoint<\/strong>, sviluppato da Gary McGraw, \u00e8 una metodologia per incorporare la sicurezza in ogni fase dell\u2019SDLC. A differenza di un approccio \u201c<em>a cascata<\/em>\u201d, dove la sicurezza \u00e8 spesso trattata come una fase separata o come un controllo finale, il modello touchpoint incoraggia la sicurezza come parte integrante di tutte le fasi dello sviluppo. I \u201c<em>touchpoint<\/em><strong>\u201d<\/strong> sono punti strategici dell\u2019SDLC in cui vengono applicate pratiche di sicurezza specifiche. Le principali attivit\u00e0 di sicurezza nel modello touchpoint includono:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Code review (revisione del codice)<\/strong>: effettuare revisioni del codice manuali o automatiche per identificare vulnerabilit\u00e0, come SQL injection o buffer overflow. Questo consente di correggere errori di sicurezza direttamente nel codice.<\/li>\n\n\n\n<li><strong>Design review (revisione del progetto)<\/strong>: rivedere l\u2019architettura e la progettazione del software per assicurarsi che le decisioni di design non introducano vulnerabilit\u00e0. Questo pu\u00f2 includere un\u2019analisi dei controlli di accesso, della crittografia e delle interazioni con altri sistemi.<\/li>\n\n\n\n<li><strong>Testing di sicurezza<\/strong>: durante i test funzionali, \u00e8 essenziale includere anche test di sicurezza, come penetration testing o test di fuzzing, per verificare che il software non sia vulnerabile a exploit.<\/li>\n\n\n\n<li><strong>Gestione delle minacce (threat modeling)<\/strong>: in questa fase si identificano e valutano le potenziali minacce al sistema, pianificando contromisure e strategie di mitigazione. Il threat modeling pu\u00f2 avvenire in diverse fasi, ma \u00e8 tipicamente pi\u00f9 efficace nella fase di progettazione.<\/li>\n\n\n\n<li><strong>Configurazione sicura (security configuration)<\/strong>: assicurarsi che i componenti del software, cos\u00ec come i server e le reti, siano configurati in modo sicuro, riducendo al minimo le superfici di attacco.<\/li>\n\n\n\n<li><strong>Incident response planning (piano di risposta agli incidenti)<\/strong>: peparare un piano di risposta agli incidenti per gestire eventuali attacchi e violazioni. Avere questo piano in atto sin dalle prime fasi consente di ridurre l\u2019impatto di eventuali exploit.<\/li>\n\n\n\n<li><strong>Formazione sulla sicurezza per gli sviluppatori<\/strong>: assicurarsi che il team di sviluppo sia informato sulle migliori pratiche di sicurezza, per evitare errori comuni durante la scrittura del codice.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark>Abbiamo appena rilasciato una patch che ha risolto tutti i problemi di sicurezza ed \u00e8 protetta contro ogni exploit conosciuto<\/mark>.<br>\u0096<strong>Finestra di vulnerabilit\u00e0, exploit zero-day.<\/strong> La <strong>finestra di vulnerabilit\u00e0<\/strong> \u00e8 un concetto utilizzato in sicurezza informatica per descrivere l\u2019intervallo di tempo in cui una vulnerabilit\u00e0 \u00e8 nota ma non ancora corretta. Durante questo periodo, i sistemi e le applicazioni che presentano la vulnerabilit\u00e0 sono a rischio di attacco, poich\u00e9 i difetti possono essere sfruttati dagli attaccanti prima che i proprietari del sistema o i fornitori del software rilascino una patch o una correzione.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"360\" src=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/image.png\" alt=\"\" class=\"wp-image-1943\" srcset=\"https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/image.png 642w, https:\/\/www.fabriziogiancola.eu\/wp-content\/uploads\/2024\/11\/image-300x168.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"wp-element-caption\">Ciclo di vita delle vulnerabilit\u00e0 di sicurezza \u2013 Fonte OWASP<\/figcaption><\/figure>\n\n\n\n<p>Caratteristiche della finestra di vulnerabilit\u00e0<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Inizio della finestra<\/strong>: la finestra di vulnerabilit\u00e0 inizia nel momento in cui una falla di sicurezza \u00e8 scoperta e viene resa pubblica o comunque conosciuta dagli attaccanti.<\/li>\n\n\n\n<li><strong>Fine della finestra<\/strong>: la finestra termina quando viene distribuita e applicata una patch di sicurezza che corregge la vulnerabilit\u00e0 su tutti i sistemi interessati.<\/li>\n\n\n\n<li><strong>Durata variabile<\/strong>: la durata della finestra di vulnerabilit\u00e0 pu\u00f2 variare. In alcuni casi, i fornitori rilasciano rapidamente una patch, riducendo il tempo di esposizione. In altri casi, la correzione pu\u00f2 richiedere pi\u00f9 tempo, prolungando la finestra e aumentando il rischio.<\/li>\n<\/ol>\n\n\n\n<p>Un <strong>exploit zero-day<\/strong> (o attacco zero-day) \u00e8 una tipologia di attacco che sfrutta una vulnerabilit\u00e0 nel software non ancora conosciuta dai produttori o dal pubblico. In altre parole, si tratta di una vulnerabilit\u00e0 \u201ca giorno zero\u201d perch\u00e9 non \u00e8 stata ancora scoperta o affrontata con un aggiornamento di sicurezza, lasciando il sistema completamente esposto.<\/p>\n\n\n\n<p>Caratteristiche degli Exploit Zero-Day<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ignoranza del fornitore<\/strong>: un exploit zero-day sfrutta una vulnerabilit\u00e0 di cui il fornitore non \u00e8 ancora a conoscenza. Questo significa che non esiste alcuna patch o correzione disponibile al momento dell\u2019attacco.<\/li>\n\n\n\n<li><strong>Alta efficacia<\/strong>: gli exploit zero-day sono particolarmente pericolosi perch\u00e9 possono bypassare le misure di sicurezza esistenti, proprio perch\u00e9 non sono ancora stati catalogati n\u00e9 gestiti.<\/li>\n\n\n\n<li><strong>Difficolt\u00e0 di rilevamento<\/strong>: questi exploit sono difficili da rilevare e mitigare, poich\u00e9 le soluzioni di sicurezza non hanno ancora aggiornamenti o regole specifiche per bloccare l&#8217;attacco.<\/li>\n<\/ol>\n\n\n\n<p>Relazione tra finestra di vulnerabilit\u00e0 ed exploit zero-day. Quando viene scoperta una vulnerabilit\u00e0 zero-day, si apre immediatamente una finestra di vulnerabilit\u00e0. Finch\u00e9 la falla non \u00e8 nota pubblicamente, il rischio \u00e8 limitato a un numero ristretto di attaccanti che conoscono l\u2019exploit. Tuttavia, quando l\u2019exploit diventa di dominio pubblico, la finestra di vulnerabilit\u00e0 pu\u00f2 aumentare considerevolmente in termini di esposizione.<\/p>\n\n\n\n<p>Mitigazione della finestra di vulnerabilit\u00e0 e degli exploit zero-day. Per gestire la finestra di vulnerabilit\u00e0 e ridurre il rischio associato agli exploit zero-day, \u00e8 possibile adottare le seguenti misure:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Patch management<\/strong>: implementare un sistema di gestione delle patch efficace per applicare rapidamente gli aggiornamenti di sicurezza appena disponibili.<\/li>\n\n\n\n<li><strong>Threat intelligence<\/strong>: utilizzare fonti di threat intelligence per rimanere aggiornati sulle nuove minacce e sugli exploit zero-day che potrebbero colpire i sistemi.<\/li>\n\n\n\n<li><strong>Implementazione di sicurezza multi-livello<\/strong>: avere sistemi di sicurezza su pi\u00f9 livelli, come firewall, sistemi di rilevamento e prevenzione delle intrusioni (IDS\/IPS) e controlli di accesso rigorosi, pu\u00f2 ridurre l&#8217;impatto di un exploit zero-day.<\/li>\n\n\n\n<li><strong>Analisi del comportamento e anomaly detection<\/strong>: tecniche di rilevamento basate sull\u2019analisi del comportamento aiutano a identificare attivit\u00e0 anomale anche se un attacco zero-day cerca di eludere i controlli di sicurezza convenzionali.<\/li>\n\n\n\n<li><strong>Segmentazione della rete<\/strong>: segmentare la rete pu\u00f2 limitare i danni che un attaccante pu\u00f2 causare in caso di sfruttamento di una vulnerabilit\u00e0 zero-day.<\/li>\n<\/ol>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-link-color wp-elements-b120ef542e3a202b90ce3d4ab19046a3\"><strong>La \u201c<\/strong><strong>Security by Design\u201d<\/strong><strong> e il Ciclo di Sviluppo Sicuro<\/strong><\/p>\n\n\n\n<p>\u00c8 quindi necessario sviluppare software secondo i principi della \u201c<em>security by design<\/em>\u201d, in contrasto alla \u201c<em>security by obscurity<\/em>\u201d. I principi di sicurezza da incorporare includono semplicit\u00e0, suddivisione dei privilegi, esposizione minima, tracciabilit\u00e0 e l\u2019assenza di punti di errore singoli. A differenza del classico test di sicurezza svolto a fine sviluppo, un ciclo di vita dello sviluppo del software (SDLC) ben pianificato include la sicurezza in ogni fase, minimizzando le vulnerabilit\u00e0 di design.<\/p>\n\n\n\n<p>In sintesi, la cybersecurity non \u00e8 un obiettivo raggiungibile con un unico intervento. Essa richiede un approccio integrato, che combini formazione, adozione di tecniche sicure nello sviluppo e costante monitoraggio delle minacce emergenti. Una comprensione profonda delle vulnerabilit\u00e0 e l\u2019implementazione di una sicurezza \u201c<em>by design<\/em>\u201d rappresentano i fondamenti per proteggere i sistemi in un panorama digitale in continua evoluzione.<\/p>\n\n\n\n<p id=\"sette_regni\"><strong><em>Seven Pernicious Kingdoms<\/em><\/strong><\/p>\n\n\n\n<p>Una tassonomia creata per aiutare gli sviluppatori a comprendere gli errori di programmazione pi\u00f9 comuni che influiscono sulla sicurezza.<\/p>\n\n\n\n<p>Il modello del <em><a href=\"https:\/\/cwe.mitre.org\/documents\/sources\/SevenPerniciousKingdoms.pdf\" data-type=\"link\" data-id=\"https:\/\/cwe.mitre.org\/documents\/sources\/SevenPerniciousKingdoms.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Seven Pernicious Kingdoms<\/a><\/em> \u00e8 un framework utilizzato per classificare le principali categorie di vulnerabilit\u00e0 nel codice, in particolare in ambito di sicurezza applicativa. Sviluppato dai ricercatori di Cigital (in particolare Gary McGraw), il modello \u00e8 un modo per raggruppare le vulnerabilit\u00e0 in base alla loro natura e impatto. I \u201c<a href=\"https:\/\/martellosecurity.com\/kb\/mitre\/cwe\/700\/\" data-type=\"link\" data-id=\"https:\/\/martellosecurity.com\/kb\/mitre\/cwe\/700\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Sette Regn<\/em>i<\/a>\u201d rappresentano tipi distinti di difetti nel codice, che possono essere utilizzati per strutturare e migliorare la sicurezza del software.<\/p>\n\n\n\n<p>Ecco i sette \u201c<em><a href=\"https:\/\/cwe.mitre.org\/data\/definitions\/700.html\" data-type=\"link\" data-id=\"https:\/\/cwe.mitre.org\/data\/definitions\/700.html\" target=\"_blank\" rel=\"noreferrer noopener\">regni<\/a><\/em>\u201d di vulnerabilit\u00e0:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Input validation and representation<\/strong>: si riferisce ai difetti che derivano da una gestione impropria dei dati di input o dalla rappresentazione inadeguata dei dati, portando a vulnerabilit\u00e0 come SQL injection, command injection e cross-site scripting (XSS).<\/li>\n\n\n\n<li><strong>API abuse<\/strong>: riguarda l\u2019uso improprio delle API, spesso dovuto a una mancata comprensione dei limiti o delle modalit\u00e0 d\u2019uso corrette delle stesse, che pu\u00f2 consentire exploit a livello di API.<\/li>\n\n\n\n<li><strong>Security features<\/strong>: include difetti legati all\u2019implementazione errata delle caratteristiche di sicurezza, come l\u2019autenticazione, la gestione delle sessioni, e il controllo degli accessi. Difetti in questo \u201cregno\u201d possono portare a problemi come session hijacking o bypass delle restrizioni di accesso.<\/li>\n\n\n\n<li><strong>Time and state<\/strong>: questo \u201c<em>regno<\/em>\u201d riguarda vulnerabilit\u00e0 legate alla gestione del tempo e degli stati. Problemi come race conditions (condizioni di corsa) o gestione inadeguata delle risorse possono far s\u00ec che un utente malintenzionato prenda il controllo di una risorsa o esegua azioni dannose.<\/li>\n\n\n\n<li><strong>Errors<\/strong>: si riferisce alla gestione errata degli errori, come la visualizzazione di messaggi d\u2019errore dettagliati che rivelano informazioni sensibili o la mancanza di controllo su errori imprevisti, che possono facilitare l\u2019enumerazione o l&#8217;accesso a dettagli interni.<\/li>\n\n\n\n<li><strong>Code quality<\/strong>: questo \u201c<em>regno<\/em>\u201d comprende le vulnerabilit\u00e0 derivanti da una scarsa qualit\u00e0 del codice, come buffer overflow, pointer dereferencing e altri errori che possono portare a comportamenti imprevisti o a falle di sicurezza.<\/li>\n\n\n\n<li><strong>Encapsulation<\/strong>: si riferisce a difetti nella separazione dei dati e nella gestione dell\u2019accesso. Problemi di incapsulamento possono portare a fughe di informazioni o all\u2019alterazione di dati interni che dovrebbero essere inaccessibili all\u2019utente.<\/li>\n<\/ol>\n\n\n\n<p>(<a href=\"#torna_su\" data-type=\"internal\" data-id=\"#torna_su\">torna su<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel mondo odierno, dove la dipendenza dalla tecnologia \u00e8 crescente, la cybersecurity \u00e8 diventata un pilastro fondamentale. La sicurezza informatica non riguarda solo la protezione di dati e risorse, ma anche la gestione delle vulnerabilit\u00e0 che emergono nei sistemi e nelle applicazioni software. Uno degli errori comuni \u00e8 la fiducia cieca nella fonte da cui &hellip; <a href=\"https:\/\/www.fabriziogiancola.eu\/index.php\/2024\/11\/12\/introduzione-alla-cybersecurity-e-alle-vulnerabilita-del-software\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Introduzione alla cybersecurity e alle vulnerabilit\u00e0 del software&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":3,"footnotes":""},"categories":[12],"tags":[],"class_list":["post-1905","post","type-post","status-publish","format-standard","hentry","category-cyber-security"],"_links":{"self":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1905"}],"version-history":[{"count":60,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1905\/revisions"}],"predecessor-version":[{"id":1975,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1905\/revisions\/1975"}],"wp:attachment":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}