mercoledì 27 marzo 2024

Cross-Site Request Forgery (CSRF), spiegato per tutti!

Tra le tecniche utilizzate per compiere attacchi cyber ve n'è una che combina aspetti tecnici e di social engineering: si tratta dell'attacco conosciuto come Cross-Site Request Forgery, da ora CSRF.

Cerchiamo di capire assieme come funziona questo attacco. 

L'attacco consiste nel convincere un utente di un sito o servizio web ad eseguire delle azioni non volute sul sito nel quale è al momento già autenticato. 

Si tratta in pratica di trarre in inganno l'utente. Se la vittima dell'attacco è un utente normale senza particolari privilegi sull'applicazione questo può essere indotto a compiere azioni indesiderate, ma se l'utente è un amministratore del sistema, e perciò dotato di privilegi particolari, le cose si complicano per l'intera applicazione.

Proviamo a fare un esempio.

In primo luogo l'hacker crea un sito simile a quello di un servizio web, magari realizzando una copia di un sito di una banca on line. Niente di più semplice, è sufficiente clonare un sito attraverso l'uso di strumenti automatici come per esempio HTTrack o SiteSucker e poi apportare le modifiche che occorrono per il proprio scopo. 

A questo punto l'hacker diffonde il link al sito malevolo cercando di invogliare i possibili utenti.

Un utente poco attento, precedentemente autenticatosi sul sito o servizio web legittimo, clicca sul link malevolo creato dall'hacker. In questo istante le credenziali dell'utente, salvate nei cookies del browser, vengono rubate ed utilizzate dall'hacker per fare una richiesta al sito web, richiesta che potrebbe essere per esempio un bonifico sul conto dell'hacker.

L'utente purtroppo non può rendersi conto di  cosa sta accadendo. Si accorgerà solo, quando verificherà il suo conto, di aver meno soldi di quanto previsto.

Questo tipo di attacco, come abbiamo visto, presuppone che l'utente sia già connesso al sito o servizio reale, il che limita le possibilità dell'hacker. 

L'attacco si basa sul fatto che un sito si fidi delle operazioni compiute da parte di un utente già autenticato, utilizzando i cookies di sessione per l'autenticazione, senza verificare di volta in volta che sia effettivamente l'utente a svolgere l'operazione.

Esistono diversi metodi per mitigare questa vulnerabilità. Vediamone alcuni.

- E' possibile aggiungere ad ogni richiesta HTTP un token unico di sessione, chiamato di CSRF Token, che il server utilizzerà per autenticare l'utente ad ogni richiesta. In questo modo l'hacker non conoscendo il token non può compiere l'attacco;

- E' possibile impostare un particolare attributo dei cookies, chiamato SameSite attribute. Questo attributo può assume due valori, "Strict" e "Lax". Con l'attributo "strict" il browser non includerà i cookie nelle richieste provenienti da altri siti.  

- Si può utilizzare il "nonce" (number used once), cioè un valore casuale e univoco, generato dal server per un'operazione specifica e utilizzato solo una volta. Quando l'utente effettua una richiesta include il "nonce" ricevuto, il server lo verifica per confermare l'autenticità della richiesta stessa, se il valore nonce è assente, non valido o già stato utilizzato in precedenza, il server rifiuterà la richiesta e potrebbe invalidare la sessione.

Naturalmente l'utente generico medio non può verificare di volta in volta l'applicazione di uno dei meccanismi di mitigazione, ne andarsi a leggere l'header del cookie, queste sono attività che devono essere svolte in modo automatico da appositi strumenti di sicurezza come per esempio i Web Application Firewalls che attraverso la costruzione di apposite regole in fase di configurazione si occupano di questo aspetto di sicurezza.

Ultima raccomandazione, se state progettando un software e volete che resista a attacchi CSRF non vi affidate ad un solo metodo per mitigare il rischio, usate almeno due tecniche diverse in quanto alcuni attacchi sono capaci di bypassare le comuni tecniche di mitigazione viste sopra.

Per concludere, se vi ho incuriosito, date un'occhiata al sito di OWASP. Vi potrete trovare nel dettaglio e estensivamente una chiara descrizione di come funziona l'attacco, di come testare un sito o servizio web per evitare questo tipo di attacco, delle modalità di revisione del codice e delle possibili misure di prevenzione.

Alessandro Rugolo

 

Per approfondire:

- https://learn.snyk.io/lesson/csrf-attack/

- https://owasp.org/www-community/attacks/csrf

- https://www.synopsys.com/glossary/what-is-csrf.html

- https://my.f5.com/manage/s/article/K80291425

- https://www.quora.com/What-is-a-CSRF-What-is-it-used-for-How-does-one-go-about-finding-and-exploiting-these-vulnerabilities-How-can-one-prevent-them-in-their-code

- https://portswigger.net/daily-swig/chromium-bug-allowed-samesite-cookie-bypass-on-android-devices


venerdì 22 marzo 2024

Quali competenze di programmazione occorrono per lavorare nella AI e cyber?


 

E' una domanda che non ha una risposta semplice.


In effetti unire i due mondi, AI e Cyber, complica notevolmente le cose.

Ma cerchiamo di dare comunque qualche indicazione per quei giovani che ancora sono in tempo per scegliere una professione emergente.

Iniziamo con cercare risposta ad alcune domande che ci guideranno lungo il percorso formativo. Ecco gli argomenti che, seppur brevemente, tratteremo in questo articolo:

Perchè la programmazione?

E' spesso indispensabile studiare uno o più linguaggi di programmazione, ciò è particolarmente vero se se si vuole lavorare nel campo dell'informatica o delle nuove tecnologie.

Ogni linguaggio di programmazione ha le sue peculiarità e le sue aree di forza. Imparare più linguaggi di programmazione ti rende più adattabile e in grado di affrontare una varietà di compiti e problemi.

Alcuni linguaggi sono più adatti per determinati compiti o settori. Ad esempio, Python è spesso utilizzato nell'analisi dei dati e nell'intelligenza artificiale, mentre JavaScript è comunemente usato nello sviluppo web. Imparare più linguaggi ti consente di lavorare con successo in diversi domini di applicazione.

Imparare più linguaggi ti permette di approfondire la comprensione di concetti quali le variabili, i cicli, le funzioni, l'orientamento agli oggetti, inoltre può essere una sfida stimolante e gratificante. Espandere il tuo repertorio linguistico nel campo della programmazione dà la possibilità di continuare a crescere e migliorare come programmatore. Se poi ci pensiamo un attimo, consideriamo i benefici dell'apprendimento di nuove lingue e paragoniamoli a quelli della programmazione. Si dice che imparare nuove lingue tenga il cervello attivo e favorisca il suo ringiovanimento. L'apprendimento di nuovi linguaggi di programmazione può avere benefici simili sulla salute mentale e cognitiva.

Infine, ma non meno importante, le opportunità di lavoro nel campo dell'informatica spesso richiedono la conoscenza di più linguaggi di programmazione. Essere competenti in più linguaggi può aumentare le possibilità di trovare lavoro e ti permette di scegliere tra un più ampio ventaglio di opportunità.



Quali linguaggi studiare?

Python: È uno dei linguaggi più popolari nel campo dell'IA grazie alla sua semplicità, flessibilità e alla vasta gamma di librerie specializzate come TensorFlow, PyTorch e scikit-learn. Python è un linguaggio di programmazione ad alto livello, interpretato e multi-paradigma. È noto per la sua sintassi chiara e leggibile, che lo rende molto adatto sia ai principianti che agli sviluppatori esperti. Creato da Guido van Rossum e rilasciato per la prima volta nel 1991, Python ha guadagnato una notevole popolarità nel corso degli anni grazie alla sua semplicità, versatilità e alla vasta gamma di librerie e framework disponibili.


R: È ampiamente utilizzato nell'analisi statistica e nell'apprendimento automatico, con una forte comunità di sviluppatori che supporta librerie come caret e e1071.


Java: È utilizzato per lo sviluppo di applicazioni enterprise e ha una presenza significativa nei sistemi di sicurezza informatica, specialmente per lo sviluppo di software robusti e sicuri.


C++: È ampiamente utilizzato nel campo della sicurezza informatica per lo sviluppo di software ad alte prestazioni e applicazioni che richiedono un controllo preciso sulla memoria e sulle risorse del sistema.


JavaScript: È cruciale per lo sviluppo di applicazioni web e mobile, e il suo utilizzo nell'IA è in crescita grazie alle librerie come TensorFlow.js per l'esecuzione di modelli di machine learning direttamente nel browser.


Scala: È un linguaggio funzionale che esegue sulla JVM (Java Virtual Machine) ed è utilizzato per lo sviluppo di sistemi di elaborazione distribuita e scalabili, che possono essere importanti nell'analisi dei dati e nell'IA.


Go: È apprezzato per le sue prestazioni, la semplicità di sviluppo e la concorrenza incorporata. Viene utilizzato in progetti di sicurezza informatica, come lo sviluppo di strumenti per il monitoraggio e l'analisi dei dati.


Lisp: È un linguaggio di programmazione funzionale storico che ha ancora una certa rilevanza nell'IA, specialmente in settori come l'elaborazione del linguaggio naturale e la ricerca simbolica.


SQL: Anche se non è un linguaggio di programmazione nel senso tradizionale, è fondamentale per l'estrazione e la manipolazione dei dati, che sono essenziali sia per l'IA che per la sicurezza informatica.


Swift: È il linguaggio di programmazione principale per lo sviluppo di app iOS e macOS, e il suo utilizzo nell'IA sta crescendo grazie alla disponibilità di librerie e framework come Core ML.

Naturalmente è difficile immaginare di studiare tutti questi linguaggi assieme, ma se avete già chiaro cosa volete fare, potete considerare anche delle alternative a Python.

Perchè Python?


Python è un linguaggio interpretato, cioè il codice sorgente viene eseguito direttamente da un interprete senza la necessità di essere compilato in un linguaggio a basso livello. Questo lo rende molto flessibile e portabile su diverse piattaforme. È un linguaggio estremamente ricco e potente che può essere utilizzato in una vasta gamma di applicazioni, dall'automazione di compiti semplici all'implementazione di complessi algoritmi di intelligenza artificiale.


Per un neofita, Python è spesso considerato il linguaggio più semplice da imparare e utilizzare, in primo luogo perché possiede una sintassi chiara e leggibile. L'indentazione significativa aiuta a mantenere il codice ben organizzato e facilmente comprensibile. Inoltre esiste un'ampia documentazione e risorse online per imparare Python, rendendo più facile per i principianti ottenere supporto e risolvere i propri problemi di programmazione.

Python ha una comunità di sviluppatori molto attiva e accogliente, pronta ad aiutare i principianti e condividere conoscenze ed esperienze.Python per le sue caratteristiche è spesso raccomandato come il primo linguaggio di programmazione per i principianti che vogliono imparare a programmare.

Come studiare Python?

Si inizia, come per tutte le cose nuove, con il comprendere i concetti fondamentali, come le variabili, i tipi di dati, gli operatori, le strutture di controllo (if, for, while...), le funzioni e le liste. Una volta familiarizzato con questi concetti sarà relativamente semplice fare il salto di qualità che conduce verso la comprensione e l'impiego degli oggetti e delle librerie.

La pratica è essenziale come e forse più dello studio. Scrivere codice regolarmente, provare a risolvere esercizi e progetti pratici presi dalla vita di tutti i giorni, magari anche dalla scuola, consente di applicare ciò si è imparato nella teoria.

Esistono molti tutorial, corsi e risorse online, disponibili gratuitamente, per imparare Python.Sfruttale!

Studia il codice scritto da altri programmatori e prova a capire cosa hanno fatto.Prova a modificare delle parti di codice e cerca di capire se è comprensibile e come migliorare la conprensibilità.


Unisciti a forum online, gruppi di studio o comunità di sviluppatori locali. Interagire con altri programmatori ti offre l'opportunità di condividere conoscenze, porre domande e ricevere feedback sui tuoi progetti.

La documentazione ufficiale di Python è una risorsa preziosa che fornisce informazioni dettagliate su tutte le funzionalità del linguaggio. Prenditi del tempo per leggerla e tieni a portata i link utili per consultarla quando necessario.

Soprattutto, occorre essere costanti e pazienti e non avere paura di fare errori. Sbagliando si impara! 


Alessandro Rugolo


venerdì 15 marzo 2024

Come ingannare le difese per fare un attacco SQL con JSON


Come abbiamo visto precedentemente, le SQLi sono ancora temibili nonostante l'età.

Se qualcuno si fosse perso le informazioni base su SQLi gli consiglio di dare uno sguardo al primo articolo: Attacco SQL injection: di che si tratta? 

Naturalmente l'industria della sicurezza ha sviluppato degli strumenti per combattere le SQLi, si tratta di applicativi capaci di filtrare le richieste web e determinare con buona approssimazione se si tratta di richieste lecite o di tentativi di attacco.

Naturalmente anche gli hacker non si sono lasciati scoraggiare ed hanno trovato tutta una serie di espedienti per "bypassare" le difese, tra questi è di moda l'attacco chiamato JSON - SQL bypass.

Vediamo di capire di che si tratta, ma prima due parole su JSON.

JSON è un formato per lo scambio di dati basato su un sottoinsieme del linguaggio di programmazione JavaScript, in effetti è l'acronimo di JavaScript Object Notation.

Nel tempo JSON è diventato il formato più utilizzato nello scambio di dati e i database hanno incluso in SQL il supporto a JSON. La stessa cosa non è accaduta a molti strumenti di sicurezza che conseguentemente non sono in grado di identificare tentativi di attacco SQLi realizzati con questa tecnica. 

Se consideriamo per esempio una applicazione web protetta da un WAF e proviamo a fare un attacco SQLi per cercare di esfiltrare dei dati cui noi non abbiamo l'accesso, i controlli del WAF in linea di massima riescono ad individuare la richiesta impropria e a bloccare il tentativo di attacco. Se però si tenta un attacco utilizzando una stringa nel formato JSON, il WAF viene ingannato non essendo in grado di capire che la stringa contiene un comando SQL mentre il database è capace di interpretare correttamente il comando in quanto supporta la sintassi JSON.

Il risultato è che i principali produttori di WAF (Palo Alto Networks, Amazon Web Services, Cloudflare, F5, and Imperva) nel 2022 sono dovuti correre ai ripari inserendo delle regole per garantire il controllo della sintassi JSON.

A scoprire questo nuovo tipo di attacco è stato il team di ricerca TEAM82, di CLAROTY. 

Ora, dato che si tratta di un attacco abbastanza recente, suggerisco a tutti coloro che per proteggere i propri servizi WEB utilizzano un WAF di far effettuare dei test specifici per verificare se sono protetti da JSON SQL Bypass.

Saranno in tanti a pensare che non c'è bisogno di allarmarsi in quanto si tratta di un attacco molto complesso da condurre: a questi ultimi consiglio di fare molta attenzione invece in quanto SQLMap permette di cercare automaticamente siti vulnerabili a JSON SQL Bypass attack. 

SQLMap, strumento opensource di facile utilizzo...

No, questa è un'altra storia!

Alessandro Rugolo.


Per approfondire:

- https://www.picussecurity.com/resource/blog/waf-bypass-using-json-based-sql-injection-attacks

- https://www.json.org/json-it.html

- https://claroty.com/team82/research/js-on-security-off-abusing-json-based-sql-to-bypass-waf



domenica 10 marzo 2024

SQL Injection: sempre attuale nonostante l'età

image

Qualche settimana fa ho pubblicato un articolo dal titolo: "Attacco SQL Injection: di che si tratta?",  pensando sinceramente di dire cose note a tutti e senza andare quindi troppo a fondo nella materia. 

In queste settimane mi sono dovuto ricredere!

Sono stati infatti in tanti a contattarmi chiedendo spiegazioni e increduli sulla possibilità di effettuare attacchi simili.

Certo direte: "Ma da quale pianeta arrivano!?!". Non sto a giudicare, anche perchè io stesso scopro ogni giorno cose, più o meno banali per alcuni, di cui io non avevo sentito parlare.

Le domande principali vertono sulla reale possibilità di questo attacco: "Mi fai un esempio?", mi domandano...

Ecco allora l'esigenza di scrivere qualcosa di più rispetto a quanto già detto nel mio precedente articolo, non tanto dal punto di vista tecnico ma ricordando qualche attacco.

Prendiamo per esempio il caso reso pubblico da Information Week nel 2009. Un gruppo hacker di probabile origine turca, m0sted, attaccò il sito web di una fabbrica di munizioni dell'esercito (McAlester Ammunition Plant in McAlester, Okla.) ed il sito web dello U.S. Army Corps of Engineers Transatlantic Center, in Winchester.  

Secondo quanto reso pubblico, gli hacker utilizzarono la tecnica di SQL Injection per sfruttare una vulnerabilità del database del server SQL di Microsoft per accedere ai siti web.

Una volta guadagnato l'accesso gli hacker hanno modificato alcune pagine inserendo dei messaggi contro gli Stati Uniti e Israele.

Vediamo un altro caso. Qualche anno dopo, nel 2011, la Sony Pictures ha subito un attacco simile. Circa 77 milioni di account della rete di PlayStation furono compromessi per un danno stimato in circa 170 milioni di dollari. Gli hacker riuscirono ad accedere al database degli utenti e ai dati personali, comprese le carte di credito. In quel caso la Sony accusò Anonymous del furto dei dati delle carte di credito che però affermò pubblicamente di non avere alcuna responsabilità in merito all'accaduto. 

Naturalmente trattandosi di SQLi i sistemi più a rischio sono quelli che impiegano grossi database. Cosa c'è di più grosso dei database delle società di comunicazione come i gestori della posta elettronica?

Ecco infatti che nel 2012 è la volta di Yahoo! Il gruppo hacker conosciuto come D33D è il probabile colpevole dell'attacco contro l'infrastruttura di Yahoo, nell'attacco furono compromessi circa 400 mila account.

Potrei continuare con esempi più recenti ma credo sia più utile ricordare a tutti che questo tipo di attacco continua ad essere uno dei più usati e sembra che programmatori e amministratori di data base non imparino molto dalla storia. 

A supporto di quanto dico potete dare uno sguardo al report di Trustwave del giugno 2023. Basato su una rete globale di honeypot (barattoli di miele, si intende falsi obiettivi per attirare gli hacker) il report analizza i tipi di attacchi contro database in alcuni paesi sensibili (Russia, Ucraina, Polonia, UK, Cina e Stati Uniti) cercando di mettere a fuoco metodi e tecniche usate. Lettura interessante per i più curiosi.

Grazie come sempre agli amici di Sicynt.

Alessandro Rugolo

Per approfondire:

- https://www.itnews.com.au/news/hackers-hit-us-army-websites-146603

- https://www.informationweek.com/it-sectors/anti-u-s-hackers-infiltrate-army-servers#close-modal

- https://www.theguardian.com/technology/2011/apr/26/playstation-network-hackers-data

- https://www.theguardian.com/technology/blog/2011/may/05/anonymous-accuses-sony-hack-playstation-network

- https://www.csmonitor.com/Technology/Horizons/2012/0712/Yahoo-hack-steals-400-000-passwords.-Is-yours-on-the-list

- https://siliconangle.com/2023/06/13/trustwave-report-finds-attacks-targeting-ms-sql-skyrocketing/

- https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/honeypot-recon-global-database-threat-landscape/

- https://github.com/PenTestical/sqli

giovedì 7 marzo 2024

CLUSIT Security Summit 2024 è in arrivo!

Si terrà a Milano tra il 19 e il 21 marzo, l'evento principale del panorama della cybersecurity in Italia: il Security Summit.

Organizzato su tre giorni di conferenze, aggiornamenti e eventi di formazione, si aprirà con la presentazione della nuova edizione del Rapporto Clusit, a cura degli esperti dell’Associazione Italiana per la Sicurezza Informatica.

Con l'occasione si cercherà di far luce su quanto accaduto nell'ultimo anno cercando di delineare il quadro delle nuove minacce e le possibili strategie di difesa.

Il convegno si terrà presso Unahotels Expo Fiera Milano ed oltre egli approfondimenti darà modo a molti esperti del mondo cyber di incontrarsi e fare rete, fondamentale in un mondo digitale in cui la complessita è in continua crescita.

Il 19 marzo alle ore 9, è prevista la presentazione del Rapporto Clusit 2024, con introduzione a cura del presidente di Clusit, Gabriele Faggioli. Alcuni degli autori illustreranno lo studio con riferimenti alla situazione globale e italiana dei crimini informatici del 2023 mettendo in luce andamento e tipologia degli attacchi, i settori più colpiti, le tecniche più frequenti. 

Come è logico attendersi, in questa edizione sarà riservato grande spazio alle tecnologie dell'Intelligenza Artificiale, che così tanto stanno influendo nel ridisegnare la nostra società.

Per vedere in tempo reale il programma del Security Summit si può fare rifermento al sito securitysummit.it.

Alessandro Rugolo

Per approfondimenti:

- https://clusit.it/rapporto-clusit/