Comment arrêter l'attaque de hack/DOS sur L'API web

mon site Web a été l'expérience d'un déni de service/attaque de piratage pour la semaine dernière. L'attaque frappe notre API web avec des clés API invalides générées au hasard dans une boucle.

Je ne suis pas sûr qu'ils essaient de deviner une clé (mathématiquement impossible comme 64bit clés) ou essayer de DOS attaquer le serveur. L'attaque est distribuée, donc je ne peux pas bannir toute l'adresse IP, car elle se produit à partir de centaines de clients.

je pense que c'est un Android app by the IPs, donc quelqu'un a quelques logiciels malveillants dans une application Android, et utiliser toutes les installations pour attaquer mon serveur.

serveur est Tomcat / Java, actuellement L'API web ne répond que 400 clés invalides, et Cache IPs qui ont fait plusieurs tentatives de clés invalides, mais doit encore faire un peu de traitement pour chaque mauvaise requête.

des suggestions pour arrêter l'attaque? Y a-t-il un moyen d'identifier L'application Android faisant la demande à partir de L'en-tête HTTP?

47
demandé sur Jonathan Leffler 2015-09-15 03:40:24

6 réponses

Prévenir Les Attaques Par La Force Brutale:

il existe un large éventail d'outils et de stratégies disponibles pour vous aider à le faire, et l'utilisation dépend entièrement de la mise en œuvre et des exigences de votre serveur.

sans pare-feu, IDS, ou autres outils de contrôle réseau, vous ne pouvez pas vraiment arrêter un DDOS de, eh bien, en refusant le service à votre application. Vous pouvez, cependant, modifier votre application pour faire une attaque par force brute beaucoup plus difficile.

la façon habituelle de procéder consiste à mettre en œuvre un lockout ou un progressive delay . Un lock-out empêche une IP de faire une demande de connexion pendant X minutes si elle ne parvient pas à se connecter N fois. Un délai progressif ajoute un délai plus long et plus long au traitement de chaque mauvaise demande de connexion.

si vous utilisez le système D'authentification de Tomcat (i.e. vous avez un élément <login-constraint> dans votre configuration webapp), vous devez utiliser le Tomcat LockoutRealm , qui vous permet de mettre facilement des adresses IP sur un lockout une fois qu'ils font un certain nombre de mauvaises requêtes.

si vous n'utilisez pas le système D'authentification de Tomcat, vous devrez Afficher plus d'informations sur ce que vous utilisez pour obtenir des informations plus spécifiques.

enfin, vous pouvez simplement augmenter la longueur de vos clés API. 64 bits semble comme un insurmontablement énorme porte-clés à la recherche, mais son poids insuffisant selon les normes modernes. Un certain nombre de facteurs pourraient contribuer à le rendre beaucoup moins sûr que vous ne le pensez:

  • un botnet (ou un autre grand réseau) pourrait faire des dizaines de milliers de tentatives par seconde, si vous n'avez aucune protection en place.
  • dépend de la façon dont vous générez vos clés et de recueillir l'entropie, votre de facto clavier pourrait être beaucoup les plus petits.
  • comme votre nombre de clés valides augmente, le nombre de clés qui ont besoin la tentative de trouver un valide (au moins en théorie) des gouttes fortement.

augmenter la longueur de la clé API à 128 (ou 256, ou 512) ne coûtera pas beaucoup, et vous allez considérablement augmenter l'espace de recherche (et donc, la difficulté) de toute attaque de force brute.

"151940920 l'Atténuation des attaques DDOS:

à atténuer les attaques DDOS, cependant, vous devez faire un peu plus de legwork. Les attaques DDOS sont dur à défendre contre, et c'est particulièrement dur si vous ne contrôlez pas le réseau sur lequel votre serveur est.

cela étant dit, il y a quelques choses Côté Serveur que vous pouvez faire:

  • installer et configurer un pare-feu d'application web, comme mod_security , pour rejeter les connexions entrantes qui violent les règles que vous définissez.
  • mettre en place un système IDS, comme Snort , pour détecter quand une attaque DDOS se produit et prendre les premières mesures pour l'atténuer
  • Voir @Martin Muller post pour une autre excellente option, fail2ban
  • créer votre propre Tomcat Valve , comme décrit ici , pour rejeter les demandes entrantes par leur User-Agents (ou tout autre critère) comme dernière ligne de défense.

à la fin, cependant, il n'y a pas tant que vous pouvez faire pour arrêter une attaque DDOS gratuitement. Un serveur n'a que trop de mémoire, de cycles CPU et de bande passante réseau; avec suffisamment de connexions entrantes, même le pare-feu le plus efficace ne vous empêchera pas de descendre. Vous serez mieux en mesure de résister aux attaques DDOS si vous investissez dans une connexion internet à haut débit et plus de serveurs, ou si vous déployez votre application sur Amazon Web Services , ou si vous avez acheté l'un des nombreux produits d'atténuation DDOS de consommation et d'entreprise ( @SDude a quelques excellentes recommandations dans son post ). Aucune de ces options n'est bon marché, rapide, ou facile, mais ils sont ce qui est disponible.

En Bref:

si vous comptez sur votre code d'application pour atténuer un DDOS, vous avez déjà perdu

42
répondu F. Stephen Q 2017-05-23 12:18:17

S'il est assez grand, on ne peut pas l'arrêter seul. Vous pouvez faire toutes les optimisations que vous voulez au niveau de l'application, mais vous tomberez quand même. En plus de la sécurité de niveau app pour la prévention (comme dans la réponse de FSQ) vous devez utiliser des solutions éprouvées laissant le levage lourd aux professionnels (si vous êtes sérieux au sujet de votre entreprise). Mon conseil est:

  1. S'inscrire pour CloudFlare ou Incapsula . C'est au jour le jour pour eux.
  2. envisagez d'utiliser passerelle API AWS comme deuxième étape pour vos requêtes API. Vous apprécierez le filtrage, l'étranglement,la sécurité, l'auto-dimensionnement et HA pour votre API au Amazon scale . Ensuite, vous pouvez transmettre les requêtes valides à vos machines (en amazon ou hors amazon)

Internet -- > CloudFlare / Incapsula --> AWS API Gateway -- > Your API Server

0,02

PS: je pense que cette question appartient à Sec

4
répondu SDude 2017-03-17 10:45:55

La meilleure façon est d'empêcher l'accès à vos services entièrement les adresses IP qui ont échoué disons 3 fois. Cela prendra la majeure partie de la charge de votre serveur car L'attaquant est bloqué avant même Tomcat doit démarrer un thread pour cet utilisateur.

l'Un des meilleurs outils pour y parvenir est appelé fail2ban ( http://www.fail2ban.org ). Il est fourni sous forme de paquet dans toutes les grandes distributions linux.

Ce que vous devez faire est essentiellement log les tentatives ratées dans un fichier et créer un filtre personnalisé pour fail2ban. Darryn van Tonder a un bel exemple sur la façon d'écrire votre propre filtre sur son blog: https://darrynvt.wordpress.com/tag/custom-fail2ban-filters /

3
répondu Martin Müller 2015-09-24 12:49:41

si l'attaque de D-DOS est sévère, les contrôles au niveau de l'application ne fonctionnent pas du tout. Toute la bande passante sera utilisée par les clients d-DOS et vos vérifications du niveau de l'application ne seront pas déclenchées. Pratiquement votre service web ne fonctionne pas du tout.

si vous devez garder votre application à l'abri des attaques d-DOS graves, vous n'avez pas d'autre option sauf en comptant sur des outils tiers en payant de l'argent. Un des fournisseurs de clean pipe ( qui envoie seulement un bon trafic) des outils I peut compter sur mon expérience passée: Neustar

si l'attaque d-DOS est bénigne dans votre site web, vous pouvez mettre en œuvre des vérifications du niveau de l'application. Par exemple, la configuration ci-dessous va restreindre le nombre maximum de connexions à partir D'une seule IP comme indiqué dans restreindre les appels à partir d'une seule IP

<Directory /home/*/public_html> -- You can change this location
    MaxConnPerIP 1  
    OnlyIPLimit audio/mpeg video
</Directory>

pour plus d'informations sur l'attaque de D-DOS, visitez Wiki link . Il fournit une liste de mesures préventives et outils adaptés aux besoins, qui comprend : pare-feu, Commutateurs, les Routeurs, les IPs en Fonction de Prévention, D-DOS des défenses

et enfin

Clean pipes (tout le trafic est passé par un "centre de nettoyage" ou un "centre de lavage" via diverses méthodes telles que des procurations, des tunnels ou même des circuits directs, qui sépare le "mauvais" trafic (DDoS et aussi d'autres attaques communes sur internet) et envoie seulement un bon trafic au-delà du serveur)

vous pouvez trouver 12 distributeurs de pipes propres.

2
répondu Ravindra babu 2017-05-23 12:26:09

voici quelques idées. Il y a un certain nombre de stratégies en plus, mais cela devrait vous aider à commencer. Aussi réaliser qu'amazon obtient ddos sur une base fréquente et leurs systèmes ont tendance à avoir quelques heuristiques qui durcissent eux (et donc vous) de ces attaques, en particulier si vous utilisez l'équilibrage de charge élastique, que vous devriez utiliser de toute façon.

  • utilisez un CDN -- ils ont souvent des moyens de détecter et de défendre contre les ddos. Akamai, la maîtrise, ou amazones propre nuage avant.
  • utilisez iptables pour mettre sur liste noire les ips offensifs. Plus vous avez d'outils autour de cela, plus vite vous pouvez blok / unblock
  • utiliser des mécanismes d'étranglement pour empêcher un grand nombre de demandes

  • refusent automatiquement les requêtes qui sont très importantes (disons plus de 1-2mb; sauf si vous avez un service de téléchargement de photos ou similaire) avant qu'elles ne parviennent à votre application

  • prévient les pannes en cascade en limitant le nombre total de connexions vers d'autres composants de votre système; par exemple, ne laissez pas votre serveur de base de données être surchargé en ouvrant un millier de connexions vers lui.

2
répondu Pranav 2016-05-09 04:20:16

pour une attaque DOS ciblée et fortement distribuée la seule solution pratique (autre que de fournir la capacité de l'absorber) est de profiler l'attaque, d'identifier le "tells" et d'acheminer ce trafic vers un gestionnaire de ressources peu élevé.

votre question comporte certaines indications - à savoir que la demande est invalide, mais il y a sans doute trop de coûts à déterminer à cet égard. Que les demandes émanent d'un groupe spécifique de réseaux et qu'elles se produisent probablement en rafales.

dans vos commentaires vous nous avez dit au moins un autre dire - l'agent utilisateur est null.

sans ajouter de composants supplémentaires, vous pouvez commencer par tarpiter la connexion - si une demande correspondant au profil arrive, allez-y et validez la clé, mais ensuite avoir votre code de sommeil pendant une seconde ou deux. Cela réduira le taux de demandes de ces clients à un faible coût.

une Autre solution serait d'utiliser des défaillances de journal faire correspondre le tell et utiliser fail2ban pour reconfigurer votre pare-feu en temps réel pour supprimer tous les paquets de l'adresse source pendant un certain temps.

Non, son peu probable que vous serez en mesure d'identifier l'application sans mettre la main sur un périphérique concerné.

1
répondu symcbean 2015-09-24 22:05:29