
Pare-feu Web moderne : arrêtez les prises de contrôle de comptes, les mots de passe faibles, les IP cloud, les attaques DoS, les e-mails jetables
=== CE PROJET EST ARCHIVÉ ===
Sécurité web automatisée simplifiée
TL;DR Quarantyne est un proxy inverse qui protège les applications web et les API contre les comportements frauduleux, les abus, les robots et les cyberattaques en temps réel.
Quarantyne est un proxy inverse écrit en Java. Il se place devant une application web ou une API et la protège contre les comportements frauduleux, les abus, les robots et les cyberattaques. Il ne peut pas tous les arrêter, mais il rendra certainement l'attaque plus difficile et plus coûteuse.
C'est comme un pare-feu mais plus intelligent, car il ne bloque pas simplement le trafic parce que le user-agent n'est pas dans une liste blanche. Quarantyne effectue également une inspection approfondie des requêtes pour détecter si, par exemple, le mot de passe utilisé a déjà été compromis, ou si l'email est jetable, avec une configuration minimale et sans modification de votre application. Notre section couverture liste précisément ce que Quarantyne peut identifier.
Voir couverture pour une liste complète des menaces et abus que Quarantyne peut identifier et arrêter.
Quarantyne effectue une inspection approfondie du trafic web allant vers votre application pour vérifier que les données envoyées ne sont pas compromises ou indésirables.
Quarantyne ajoute des en-têtes HTTP supplémentaires à la requête qu'il proxye vers votre service. Par exemple, une requête HTTP provenant d'AWS portera les en-têtes suivants :
X-Quarantyne-Labels: PCXX-Quarantyne-RequestId: 08a0e31a-f1a5-4660-9316-0fdf5d2a959dQuarantyne peut être configuré pour empêcher les requêtes malveillantes d'atteindre vos serveurs, évitant ainsi de gaspiller des ressources de calcul/BDD/cache, des biais de métriques, des données indésirables... Voir (Passif vs Actif)[#passivevsactive].
Quarantyne se lie à un adminPort interne, où les métriques (latences, taux de réussite...) ainsi que la santé du proxy sont rapportées.
Quarantyne est un logiciel hors ligne. Il fonctionne à l'intérieur de votre réseau privé et ne communique pas sur Internet avec quiconque pour partager des données sur votre trafic, votre activité ou vos utilisateurs.
Jar unique avec 0 dépendances. Les métriques sont disponibles sur [proxyHost]:[adminPort]/metrics. La santé du service est disponible sur [proxyHost]:[adminPort]/health
Quarantyne est capable de détecter les menaces et abus suivants.
| Étiquette | Définition | Comportement | Implémenté |
|---|---|---|---|
| LBD | Données de grande taille | Surcharger le processeur de formulaires de la cible avec des requêtes POST/PUT dont le corps > 1 Mo | oui |
| FAS | Navigation rapide | Taux de requêtes plus rapide que la navigation humaine normale | oui |
| CPW | Mot de passe compromis | Le mot de passe utilisé est connu suite à une fuite de données antérieure. Possible prise de contrôle du compte | oui |
| DMX | Email jetable | L'email utilisé provient d'un service d'emails jetables | oui |
| IPR | Rotation d'adresse IP | Le même visiteur change ses adresses IP | non |
| SHD | En-têtes de requête suspects | En-têtes HTTP anormaux | oui |
| SUA | User-Agent suspect | User Agent ne provenant pas d'un navigateur web classique | oui |
| PCX | Exécution dans le cloud public | L'adresse IP appartient à un service de cloud public comme AWS ou GCP | non |
| IPD | Discordance IP/Pays | Le pays déduit de l'IP du visiteur est différent du champ pays dans la requête soumise | non |
| SGE | Géolocalisation suspecte | Cette requête n'est pas habituellement reçue de cette géolocalisation. Possible prise de contrôle du compte. | non |
Quarantyne vous permet de décider comment vous souhaitez traiter les requêtes qu'il signale. La configuration par défaut de Quarantyne est de NE PAS bloquer le trafic douteux. Ce trafic parviendra à votre serveur et sera étiqueté comme tel via des en-têtes HTTP.
Le mode passif est la manière recommandée de se familiariser avec Quarantyne et d'avoir une idée de ce qui se passe dans votre trafic web. Dans votre application, enregistrez ou tracez les étiquettes Quarantyne entrantes et vous pourriez être surpris (ou non) par ce que vous trouverez !
En mode actif, Quarantyne empêche le trafic douteux d'atteindre votre application. Le blocage ne se produit que si vous configurez explicitement Quarantyne pour le faire. La section configuration explique comment activer le blocage du trafic.
Deux systèmes de configuration complémentaires sont utilisés : les arguments de ligne de commande et un fichier de configuration JSON externe (local ou distant).
Exécutez la commande suivante pour afficher l'aide et les arguments disponibles
$ java -jar quarantyne -h
Usage: <main class> [options]
Options:
--admin
internal ip:port where to access admin, UI and metrics. Optional
--config-file
Optional URL or local path to a Quarantyne JSON configuration file
--egress
HTTP destination where Quarantyne forwards annotated web traffic.
Default: http://httpbin.org
--help, -help, --h, -h
Display help about available configuration arguments
Default: false
--ingress
ip:port of inbound web traffic.
Default: 0.0.0.0:8080
Le --config-file est un fichier de configuration JSON optionnel qui indique à Quarantyne comment les requêtes vers votre service sont structurées. Il permet une analyse approfondie du trafic et augmente la couverture.
Le fichier de configuration du trafic est optionnel et peut être soit un chemin local absolu, soit une URL HTTP(S) distante vers un fichier JSON contenant un seul objet JSON avec la structure suivante. Décrire la structure de vos requêtes HTTP aide Quarantyne à effectuer une inspection approfondie des données critiques telles que les mots de passe, les emails ou les pays.
{
"login_action": {
"path": "/anything",
"identifier_param": "email",
"secret_param": "password"
},
"register_action": {
"path": "/anything",
"identifier_param": "email",
"secret_param": "password"
},
"email_param_keys": ["email", "contact[email]"],
"country_iso_code_param_keys": ["country_code"],
"blocked_request_page": "https://raw.githubusercontent.com/AndiDittrich/HttpErrorPages/master/dist/HTTP500.html",
"blocked_classes": ["all"]
}
Quarantyne est capable d'analyser les charges utiles soumises via POST/PUT avec un Content-Type de application/json ou application/x-www-form-urlencoded.
Les propriétés racines sont optionnelles.
| Propriété | Définition | Remarques |
|---|---|---|
*_action | Une charge utile de données POST/PUT | login_action décrit la structure des données envoyées lors de la connexion. register_action définit la structure des données envoyées lors de l'inscription / de la création d'un compte. |
*_action.path | Chemin où les données sont soumises | Doit commencer par / |
*_action.identifier_param | Nom de la clé formulaire/JSON où l'identifiant utilisateur est envoyé | |
*_action.secret_param | Clé formulaire/JSON où le mot de passe utilisateur est envoyé | |
email_param_keys | Clé formulaire/JSON où les adresses email sont envoyées | |
country_iso_code_param_keys | Clé formulaire/JSON où les codes ISO des pays sont envoyés | |
blocked_request_page | Réponse HTTP à renvoyer lors du blocage d'une requête | Il est préférable que cela ressemble à une page/erreur légitime pour ne pas alerter l'attaquant. Encore mieux si vous pouvez injecter de fausses données :) |
blocked_classes | Un tableau de classes d'attaque à bloquer. | [] équivaut au mode passif. ['all'] arrête toutes les classes d'attaque que Quarantyne peut détecter. Voir couverture |
Disponible sur https://demo.quarantyne.com/. Dans ce scénario, Quarantyne se place devant httpbin.org en mode passif. Les menaces et abus envoyés seront signalés via des en-têtes HTTP, donc interroger https://demo.quarantyne.com/headers ou https://demo.quarantyne.com/anything est un bon début pour voir ce qui se passe. Astuce : commencez simplement, commencez avec curl.
Quarantyne est fourni sous la forme d'un seul jar exécutable sans dépendances. Téléchargez une version et exécutez :
$ java -jar quarantyne.jar
Clonez ce dépôt puis exécutez ce qui suit
$ ./gradlew run
Vous devriez voir ce qui suit :
"2018-11-28T22:25:17.152-0800" [main] INFO com.quarantyne.proxy.Main - 0.0.0.0:8080 <= quarantyne => http://httpbin.org:80
"2018-11-28T22:25:17.223-0800" [main] INFO com.quarantyne.proxy.Main - see available options with --help
"2018-11-28T22:25:17.234-0800" [main] DEBUG com.quarantyne.proxy.Main - ==> event loop size is 8
"2018-11-28T22:25:17.234-0800" [main] DEBUG com.quarantyne.proxy.Main - ==> detected 4 cpus core
"2018-11-28T22:25:17.496-0800" [main] INFO com.quarantyne.config.ConfigRetrieverOptionsSupplier - remote configuration file found at https://s3-us-west-2.amazonaws.com/releases.quarantyne.com/quarantyne.test.json
Vous êtes prêt ! Par défaut, Quarantyne démarre sur 127.0.0.1:8080 et proxye le trafic vers http://httpbin.org.
Envoyez quelques requêtes vers http://127.0.0.1:8080/headers par divers moyens. Si un comportement frauduleux est détecté, vous devriez voir les en-têtes HTTP X-Quarantyne-Label dans la requête reçue par votre application. Astuce : essayez avec curl.
Bientôt disponible