Con questo progetto viene sviluppata un'estensione per Firefox che aiuta l'utente a contrastare attacchi di phishing servendosi delle predizioni di un modello di machine learning. L'idea nasce dal capitolo 5 del paper e utilizza il modello di Machine Learning creato dal Prof. Leonardo Ranaldi.
Il suo funzionamento è il seguente:
- All'avvio del browser, l'estensione chiede ad un endpoint, in ascolto sul server, la lista dei siti legittimi.
- Quando l'utente desidera visualizzare una pagina, l'estensione verifica se il domino è contenuto nella lista.
- In caso affermativo, il sistema permette la corretta visualizzazione del sito.
- Nel caso invece che non sia tra i domini controllati, procede a bloccare il contenuto della pagina con i relativi script, chiedendo al modello una valutazione dell'URL.
- Se la previsione ha un valore inferiore allo 0.5, l'estensione presenterà a video una pagina per avere la conferma dell'utente.
- Se la predizione è tra 0.5 e 0.7, siamo in un range delicato dove potrebbero essere presenti dei falsi positivi e quindi, all'utente, viene richiesto di validare il dato con un'altra schermata.
- Infine, nel caso di valutazione maggiore di 0.7, le opzioni sono tra reale minaccia e falso positivo.
Ogni scelta da parte dell'utente viene trasmessa al server che deve aggiornare le proprie liste.
L'estensione offre anche un comodo popup per fare inferenza sul modello, aggiungere domini alle varie liste e consultare i dati sul server.
Gli endpoint attivi sul server accettano richieste anche se non provengono dall'estensione, basta che rispettino i formati riportati di seguito:
- Per avere un array JSON contenente i domini in white list @ /api/v2/list/reliable
{ "reliableList": "['google.it','cm-innovationlab.it']" }
- Per avere un array JSON contenente i domini in black list @ /api/v2/list/malicious
{ "maliciousList": "['google.com','cm-innovationlab.com']" }
- Per avere un array JSON contenente i domini indicati come falsi positivi @ /api/v2/list/fp
{ "falsePositiveList": "['google.it','cm-innovationlab.it']" }
- Per avere un array JSON contenente tutte le liste: black, white e falsi positivi @ /api/v2/list/all
{ "reliableList": "['google.it','cm-innovationlab.it']",
"maliciousList": "['google.com','cm-innovationlab.com']",
"falsePositiveList": "['google.it','cm-innovationlab.it']" }
- Per ottenere predizioni dal modello @ /api/v2/url/inference
POST { "domain" : "google.com" }
RESPONSE { "predict": "0.123456789" }
- Per aggiungere un dominio tra quelli legittimi @ /api/v2/url/add
POST { "add" : "google.com" }
RESPONSE { "reliableList": "['google.com',...]" }
- Per aggiungere un dominio tra quelli malevoli @ /api/v2/url/bad
POST { "add" : "google.com" }
RESPONSE { "maliciousList": "['google.com',...]" }
- Per correggere un dominio trasferendolo dalla lista dei malevoli a quella dei legittimi @ /api/v2/url/correction
POST { "add" : "google.com" }
RESPONSE { "reliableList": "['google.it',...]",
"maliciousList": "['google.com',...]" }
- extension: contiene tutti i file dell'estensione e una guida per l'installazione.
- model: contiene un file Jupyter Notebook con il modello utilizzato partendo da quello del Prof. Ranaldi.
- server-side: contiene il codice da utilizzare lato server con una guida dettagliata sulla configurazione necessaria.
- Installazione / Installation
- Popup Link
- Dominio Legittimo / Reliable Domain
- Dominio Malevolo / Malicious Domain
With this project, an extension for Firefox is developed to help users to against phishing attacks using the predictions of a machine learning model. The idea comes from chapter 5 of the paper and uses the Machine Learning model created by Prof. Leonardo Ranaldi.
How does it work:
- At browser opening, the extension asks an endpoint on server for the list of legitimate sites.
- When user wants to view a page, the extension checks if the domain is included in the list.
- If so, the system allows the correct visualization of the site.
- If, on the other hand, it is not among the controlled domains, it proceeds to block the page content with the relative scripts, asking the model for an evaluation of the URL.
- If the prediction has a value lower than 0.5, the extension will display a page for user confirmation.
- If the prediction is between 0.5 and 0.7, we are in a delicate range where there may be false positives and therefore the user is asked to validate the data with another screen.
- Finally, in the case of evaluation greater than 0.7, the options are between real threat and false positive.
Each choice by the user is transmitted to the server which must update its lists.
The extension also offers a popup to make inferences on the model, add domains to the lists and consult the data on the server.
Active endpoints on server accept requests beyond the extension, as long as respect the following formats:
- To get JSON array with white list domains @ /api/v2/list/reliable
{ "reliableList": "['google.it','cm-innovationlab.it']" }
- To get JSON array with black list domains @ /api/v2/list/malicious
{ "maliciousList": "['google.com','cm-innovationlab.com']" }
- To get JSON array with false positive list domains @ /api/v2/list/fp
{ "falsePositiveList": "['google.it','cm-innovationlab.it']" }
- To get JSON array with all lists @ /api/v2/list/all
{ "reliableList": "['google.it','cm-innovationlab.it']",
"maliciousList": "['google.com','cm-innovationlab.com']",
"falsePositiveList": "['google.it','cm-innovationlab.it']" }
- To get prediction from model @ /api/v2/url/inference
POST { "domain" : "google.com" }
RESPONSE { "predict": "0.123456789" }
- To add domain in reliable list @ /api/v2/url/add
POST { "add" : "google.com" }
RESPONSE { "reliableList": "['google.com',...]" }
- To add domain in malicious list @ /api/v2/url/bad
POST { "add" : "google.com" }
RESPONSE { "maliciousList": "['google.com',...]" }
- To correct domain from malicious to reliable list @ /api/v2/url/correction
POST { "add" : "google.com" }
RESPONSE { "reliableList": "['google.it',...]",
"maliciousList": "['google.com',...]" }
- extension: contains all the extension files and an installation guide.
- model: contains a Jupyter Notebook file with the model used starting from Prof. Ranaldi's one.
- server-side: contains the code to be used on server side with a guide on configuration.