69 votes

Les adresses IP sont-elles "triviales à falsifier" ?

Je lisais certaines des notes sur Le nouveau service DNS public de Google :

J'ai remarqué ce paragraphe dans la section sur la sécurité :

Jusqu'à ce qu'une solution standard à l'échelle du système pour les vulnérabilités du DNS soit universellement mise en œuvre, comme le protocole DNSSEC2, les résolveurs DNS ouverts doivent prendre indépendamment certaines mesures pour se protéger des menaces connues. De nombreuses techniques ont été proposées ; voir IETF RFC 4542 : Mesures pour rendre le DNS plus résistant aux réponses falsifiées. pour un aperçu de la plupart d'entre eux. Dans Google Public DNS, nous avons mis en œuvre, et nous recommandons, les approches suivantes :

  • Surdimensionnement des ressources de la machine pour se protéger contre les attaques DoS directes sur les résolveurs eux-mêmes. Comme il est facile pour les attaquants de falsifier les adresses IP, il est impossible de bloquer les requêtes sur la base de l'adresse IP ou du sous-réseau ; le seul moyen efficace de faire face à de telles attaques est d'absorber simplement la charge.

C'est un constat déprimant ; même sur Stack Overflow / Server Fault / Super User, nous utilisons fréquemment les adresses IP comme base pour les interdictions et les blocages de toutes sortes.

Penser qu'un attaquant "talentueux" pourrait trivialement utiliser l'adresse IP qu'il veut, et synthétiser autant de fausses adresses IP uniques qu'il veut, est vraiment effrayant !

Donc ma ou mes questions :

  • Est-ce que c'est vraiment que facile pour un attaquant de falsifier une adresse IP dans la nature ?
  • Dans l'affirmative, quelles sont les mesures d'atténuation possibles ?

51voto

Davide Gualano Points 804

Comme l'ont dit beaucoup d'autres personnes, les en-têtes IP sont faciles à falsifier, tant que l'on ne se soucie pas de recevoir une réponse. C'est pourquoi on le voit surtout avec UDP, car TCP exige une poignée de main à trois. Une exception notable est le inondation SYN qui utilise le protocole TCP et tente d'accaparer les ressources d'un hôte récepteur ; là encore, comme les réponses sont rejetées, l'adresse source n'a pas d'importance.

Un effet secondaire particulièrement désagréable de la capacité des attaquants à usurper les adresses sources est un rétrodiffusion l'attaque. Il existe une excellente description ici En bref, il s'agit de l'inverse d'une attaque DDoS traditionnelle :

  1. Prendre le contrôle d'un botnet.
  2. Configurez tous vos nœuds pour utiliser le même adresse IP source pour les paquets malveillants. Cette adresse IP sera votre victime éventuelle.
  3. Envoyez des paquets depuis tous vos nœuds contrôlés vers diverses adresses sur Internet, en ciblant des ports qui ne sont généralement pas ouverts, ou en vous connectant à des ports valides (TCP/80) en prétendant faire partie d'une transaction déjà existante.

Dans l'un ou l'autre des cas mentionnés au point (3), de nombreux hôtes répondront par un ICMP unreachable ou un TCP reset, ciblé sur l'adresse de l'utilisateur. adresse source du paquet malveillant . L'attaquant a maintenant potentiellement des milliers de machines non compromises sur le réseau qui effectuent une attaque DDoS sur la victime qu'il a choisie, tout cela grâce à l'utilisation d'une adresse IP source usurpée.

En termes d'atténuation, ce risque est vraiment un risque que seuls les FAI (et en particulier les FAI fournissant l'accès au client, plutôt que le transit) peuvent aborder. Il existe deux méthodes principales pour y parvenir :

  1. Filtrage à l'entrée - garantissant que les paquets entrant sur votre réseau proviennent de plages d'adresses situées de l'autre côté de l'interface entrante. De nombreux fournisseurs de routeurs mettent en œuvre des fonctions telles que transfert de chemin inverse unicast qui utilisent les tables de routage et de transfert du routeur pour vérifier que le prochain saut de l'adresse source d'un paquet entrant est l'interface entrante. Cette vérification s'effectue de préférence au niveau du premier saut de couche 3 du réseau (c'est-à-dire votre passerelle par défaut).

  2. Filtrage à la sortie - en veillant à ce que les paquets quittant votre réseau proviennent uniquement de plages d'adresses qui vous appartiennent. Il s'agit du complément naturel du filtrage à l'entrée, et cela fait partie intégrante de la notion de "bon voisin" ; il s'agit de s'assurer que même si votre réseau est compromis par un trafic malveillant, ce trafic n'est pas transmis aux réseaux avec lesquels vous êtes en relation.

Ces deux techniques sont plus efficaces et plus faciles à mettre en œuvre lorsqu'elles sont utilisées dans des réseaux de périphérie ou d'accès, où les clients sont en contact avec le fournisseur. La mise en œuvre du filtrage des entrées/sorties au-dessus de la couche d'accès devient plus difficile, en raison de la complexité des chemins multiples et du routage asymétrique.

J'ai vu ces techniques (en particulier le filtrage à l'entrée) utilisées avec beaucoup d'efficacité dans un réseau d'entreprise. Peut-être que quelqu'un ayant plus d'expérience en tant que fournisseur de services peut donner plus de détails sur les défis du déploiement du filtrage ingress/egress sur l'Internet au sens large. J'imagine que le support matériel/firmware est un grand défi, ainsi que l'impossibilité de forcer les fournisseurs en amont dans d'autres pays à mettre en œuvre des politiques similaires...

47voto

jammus Points 1796

Est-ce vraiment si facile pour un attaquant de falsifier une adresse IP dans la nature ?

Bien sûr, si je ne me soucie pas de recevoir des réponses, je peux très facilement envoyer des paquets en utilisant l'adresse source de mon choix. Comme de nombreux FAI n'ont pas vraiment de bonnes règles de sortie, tout ce que je falsifie sera généralement livré.

Si l'attaquant a réellement besoin d'une communication bidirectionnelle, cela devient très difficile. S'il a besoin d'une communication bidirectionnelle, il est généralement plus facile d'utiliser un proxy quelconque. Ce qui est très facile à mettre en place si vous savez ce que vous faites.

Le bannissement des personnes par adresse IP est modérément efficace sur SF/SO/SU puisque le site utilise http/https qui nécessite une communication bidirectionnelle.

23voto

Kyle Brandt Points 81077

Petite preuve de concept pour la réponse de Zordeche (avec ubuntu) :

$ sudo apt-get install hping3
$ sudo hping3 -1 --spoof 11.10.10.20 www.google.com
HPING www.google.com (eth0 64.233.169.105): icmp mode set, 28 headers + 0 data bytes

Puis dans une autre console :

$ sudo tcpdump -i eth0 'icmp'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:30:19.439737 IP 11.10.10.20 > yo-in-f105.1e100.net: ICMP echo request, id 31297, seq 0, length 8

Donc oui, c'est trivial, mais vous n'obtenez pas les réponses comme mentionné précédemment, à moins d'avoir accès à 11.10.10.20 ou d'avoir un renifleur quelque part entre www.google.com et 11.10.10.20 (et il faudrait qu'il soit juste en face de l'une ou l'autre extrémité, puisque vous ne pouvez pas prédire la route des paquets). De plus, la passerelle du spoofer (ISP) pourrait ne pas laisser passer ce paquet s'ils ont une sorte d'inspection IP en cours et voient que la source est mauvaise.

13voto

kkaploon Points 123

Les adresses IP sont faciles à falsifier pour une direction unique. UDP le trafic. Pour les paquets TCP, vous pouvez seulement forger pour obtenir une connexion TCP semi-ouverte avec des paquets SYN. C'est également la base d'une sorte d'attaque DOS. Mais vous ne pouvez pas forger une connexion HTTP avec une adresse usurpée (par exemple, si vous filtrez les sessions pour utiliser la même adresse IP). Bien que vous puissiez effectivement usurper une adresse IP dans les paquets, cela n'est utile que pour certains types d'attaques par déni de service.

10voto

JD Long Points 445

L'article sur GOOG parlait explicitement de DNS. Le DNS utilise à la fois des paquets UDP et TCP. Les paquets UDP peuvent être falsifiés, mais pas les paquets TCP. Le TCP nécessite un Poignée de main à 3 voies . Si l'adresse IP d'un paquet TCP est falsifiée, l'ordinateur falsifié ne recevra pas la réponse et la connexion échouera. UDP, comme mentionné dans d'autres réponses, est "fire and forget" et ne nécessite aucune communication de réponse. C'est pour cette raison que les attaques DoS prennent presque exclusivement la forme de paquets UDP.

Dans le contexte de Stack Overflow et des sites familiaux, la question soulevée par Takaun Daikon est très valable. Il existe de nombreuses façons d'obtenir une nouvelle adresse IP auprès de son fournisseur d'accès. Changer une adresse MAC est clairement la plus simple et fonctionne pour de nombreux FAI. En outre, de nombreuses personnes qui font des bêtises peuvent utiliser un proxy public ou TOR. Il est clair que bloquer l'IP d'origine de ces paquets ne ferait que bloquer le proxy ou le nœud de terminaison TOR.

Le blocage des adresses IP est-il valable ? Bien sûr que oui. Mais vous allez vous retrouver avec des erreurs. Vous bloquerez certaines IP qui ne sont pas vraiment à l'origine du problème (par exemple les proxies) et vous aurez aussi des personnes qui éviteront vos blocages en changeant d'IP. La personne qui a la malchance d'avoir l'IP bloquée ne pourra plus accéder aux sites de la famille SO. Mais l'erreur taux devrait être faible. À moins que vous ne bloquiez d'énormes ensembles d'IP. Mais si vous en bloquez une ou deux par jour, ça devrait aller.

Vous voudrez peut-être mettre en place un système un peu plus sophistiqué dans lequel vous bloquez, mais seulement pour une période donnée, par exemple un an. Si votre réseau est capable d'étrangler la bande passante ou de limiter la connexion, vous pouvez également envisager un système dans lequel les crétins qui font tourner les benchmarks Apache sur votre site sont mis dans une cage avec une bande passante très limitée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X