Archive pour la catégorie '2-alerte »

Options TCP Challenge - indices

18 novembre 2009

Précédemment, j'ai posté un défi d'écrire un filtre tcpdump / WinDump qui serait de capturer les paquets qui ont l'option TCP "Window Scale" ensemble. Certaines personnes sont proches, mais je voulais poster quelques trucs. Aussi, je n'ai aucun problème avec vous e-mailing moi directement, mais pour gagner le défi que vous avez à poster la réponse à la section des commentaires. De cette façon, il n'est pas question de savoir qui a trouvé la réponse en premier.

Toutes les options TCP sont spécifiées par une «sorte de registre" valeur (similaire à l'ICMP champ "Type"). Dans le cas de Window Scale, cette valeur est de 3. Aussi, toutes les options TCP sauf pour NOP contenir un champ secondaire appelée "longueur". Ceci définit combien d'octets en utilisant des options est, y compris le "Kind registre" octet. Dans le cas de Window Scale la valeur de longueur est toujours 3. Nous avons donc:

  • 1 octet pour le genre de registre
  • 1 octet pour la longueur
  • 1 octet pour la valeur réelle WScale

Astuce 2: Si vous n'avez jamais foré dans le champ des options TCP, tshark dispose d'une option cool:

tshark-n-r capture-file.cap-T champs e-tcp.options

Ce sera la sortie la totalité des options TCP terrain Hex afin que vous puissiez au moins voir à quoi il ressemble.

Indice final, j'ai posté un paquet SYN Linux qui établit WScale à 5 pour vous permettre de l'utiliser pour vérifier votre filtre.

linux-syn

Bonne chance!

Chris

Options TCP Défi

18 novembre 2009

J'ai eu un peu passe notamment la publication d'un nouvel outil de référence pour l'Apple iPhone et iPod. L'outil est d'appeler Decode Packet et j'ai configurer un autre site pour aider à l'entretenir.

Je me sens mal à négliger ce site au cours des dernières semaines, j'ai donc décidé de jeter un autre défi. Le gagnant recevra un exemplaire gratuit de l'outil de décodage des paquets ci-dessus mentionnés. OK, donc vous ne serez pas en mesure de prendre sa retraite sur le produit, mais nous espérons que l'outil va vous rendre la vie un peu plus facile. ;)

Alors, voici le défi:

Ecrire un tcpdump ou WinDump filtre qui ne fera que de capturer les paquets qui ont le TCP "Window Scale" option définie. Tous les autres paramètres option TCP peut être ignoré.

Assez simple, hein? La première personne à poster la réponse dans la section commentaires obtient le prix.

Tshark Challenge - Uber-geek Réponse

13 octobre 2009

Dans mon dernier post, je vous laisse avec une question: Compte tenu de ce que nous avons vu dans le fichier de décoder avec tshark, quel est l'impact (le cas échéant) y aurait-il si on place un pare-feu stateful inspection entre l'attaquant et le serveur Web? En d'autres termes, si l'attaquant exécute un renifleur de paquets, seraient-ils encore voir le serveur Web fuite des erreurs 404?

Et la réponse est ...

Peut-être. :)

Pas tous les pare-feu stateful inspection sont égaux. Certains paquets de gérer de façon légèrement différente que les autres. Par exemple, certains (comme Checkpoint, Netscreen et autres) laissez non des paquets SYN pour permettre de générer de nouvelles règles entrées de la table de l'Etat. Certains (Cisco, Netfilter et autres) ne fera que générer une table d'état à l'établissement session proprement dite (à voir handshake TCP paquets trois).

Le NIPS a envoyé un paquet de réinitialisation valide pour l'attaquant sur Internet. Chacun des pare-feux ci-dessus voir le paquet de réinitialisation et le retirer de l'entrée de la table d'état. Lorsque le serveur Web a continué de communiquer cependant, seul le premier jeu de pare-feu aurait laissé s'échapper les paquets à l'attaquant. La deuxième série de pare-feu serait tout simplement laisser tomber le trafic. En fait, si nous les mis en place avec une règle de refus au lieu d'une règle de chute, ils tueraient la session sur le serveur Web ainsi régler le problème créé par le NIPS.

Pourquoi certains fournisseurs laisser entrer des paquets reconnaissance générer de nouvelles entrées de la table de l'État? Cela semble contre-intuitif peu comme une une session légitime va toujours commencer par un paquet SYN. Il ya deux raisons cela rend le bon sens fonctionnel:

  • Mise à jour des règles de pare-feu ne tuent pas les sessions actives
  • Active-Active Setup va passer le trafic avant de synchroniser la table d'état

Bien sûr, nous avons augmenté la fonctionnalité au détriment de la sécurité. Malheureusement, ce n'est l'arrêt du commerce typique.

Espoir vous avez eu du plaisir avec ce défi. S'il ya un intérêt, je poste plus dans l'avenir.

Tshark Challenge - les réponses finales

9 octobre 2009

Dans mon dernier post nous avions déterminé que le fichier de trace contient une session où un seul réseau perfectionné système de prévention des intrusions avaient tenté d'arrêter une attaque d'un client HTTP à un serveur Web. Nous avons conclu que la demande du client les données ne semblent plutôt suspecte, et a prouvé un système tiers (NIPS) était responsable de la transmission des paquets de réinitialisation lors de la session.

Dans ce post nous avons encore besoin de répondre à deux questions:

  1. L'attaque réussie?
  2. Pourquoi le serveur Web ignorer le paquet TCP reset transmis par le NIPS?

L'attaque réussie?

L'attaquant était à la recherche afin d'identifier si le fichier "startstop.html" était situé dans l '«administrateur» du répertoire. Prenons un oeil à l'un des paquets envoyés à l'attaquant après la réinitialisation des paquets ont été transmises:

tshark-n-r-x challenge1.cap frame.number == 11

11 0.711825 12.33.247.4 -> 148.78.247.10 TCP [TCP Retransmission] [segment TCP d'un PDU remonté]

0000 00 50 8b 20 ch ab 00 b0 d0 20 e3 7d 08 00 45 00. P.. .... ...} E.

0010 01 A7 37 47 40 00 40 06 73 8b 21 0C 04 94 F7 4e .. 7G @. @. S..! ... N

0020 f7 0a 00 50 69 88 39 2a 3a cd 6a 97 b9 4c 80 19 ... Pi *:.. 0.9 j. L..

0030 19 20 00 8c d4 00 01 01 08 76 0a 3d 0e d3 00 CE. ... ... ..= V ....

0040 48 4b 48 54 54 50 2f 31 2e 31 20 34 30 34 20 4e HKHTTP/1.1 404 N

0050 74 20 46 6f 6f 6e 75 64 0d 0a 44 61 74 65 20 3a ot trouvé .. Date:

0060 54 75 65 2c 20 32 35 20 4a 75 6e 20 32 30 30 32 Tue, 25 juin 2002

0070 20 30 30 33 34 3a 3a 35 38 20 47 4d 54 0D 0A 53 00:34:58 GMT .. S

0080 65 72 76 65 72 3a 20 41 70 61 63 68 65 0d 0a 43 erver: Apache .. C

0090 6f 6e 6e 65 63 74 69 6f 6e 3a 20 63 6c 73 65 6f ONNEXION: fermer

00A0 0d 0a 43 6f 6e 74 65 6e 74 54 79 2d 70 65 3a 20 .. Content-Type:

00b0 74 65 78 74 68 74 2f 6d 6c 3b 20 63 68 61 72 73 text / html; caractères

00C0 65 74 69 73 6f 3d 2d 38 38 35 39 2d 31 0D 0A 0d et = iso-8859-1 ...

00d0 0a 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20. <! DOCTYPE HTML

00e0 50 55 42 4c 49 43 20 22 2d 2F 2F 49 45 54 46 PUBLIC 2f "- / / IETF /

00F0 2f 44 54 44 20 48 54 4d 4c 20 32 30 2E 2F 2F 45 / DTD HTML 2.0 / / E

0100 4e 3e 22 0a 48 54 3c 4d 4c 3e 3c 48 45 41 44 3E N ">. <HTML> <HEAD>

0110 0a 3c 4c 54 49 54 45 3e 34 30 34 20 4e 74 20 6f. <TITLE> 404 Not

0120 46 75 6f 6e 2f 64 3c 54 49 54 4c 45 3E 0a 3c 2f Found </ TITLE>. </

0130 48 45 41 44 3e 3c 42 4f 44 59 3E 0A 48 31 3C 3E HEAD> <BODY>. <H1>

0140 4e 6f 74 20 46 75 6f 6e 2f 64 3c 48 31 54 0a 3e Introuvable </ H1>. T

0150 68 65 20 72 65 71 75 65 73 74 65 64 20 55 52 4c, il a demandé URL

0160 20 63 66 69 2F 64 65 2F 41 64 6d 69 6e 69 73 74 Administ / CFIDE /

0170 72 61 74 6f 72 2f 73 74 61 72 74 73 74 6f 70 StartStop 2e rateur /.

0180 68 74 6d 6c 20 77 61 73 20 6e 6f 74 20 66 75 6f html n'était pas fou

0190 6e 64 20 6f 6e 20 74 68 69 73 20 73 65 72 76 65 e sur cette servent

01a0 72 50 3c 2e 3e 0a 3c 2f 4f 42 44 59 3E 3C 2F 48 <P> r.. </ Body> </ H

01B0 54 4d 4c 3e 0a 00 03 00 07 TML> ... ..

Donc la réponse à la question de l'attaquant; "est le fichier situé sur le serveur, est répondu dans chaque paquet au serveur mis au client après la réinitialisation des paquets ont été émises?. Maintenant, la question devient, l'attaquant ne voit cette information?

Lorsque le paquet de réinitialisation a été envoyé à l'attaquant, la réinitialisation devrait avoir tué la session TCP. Cela signifie que lorsque ces données sont arrivés, le port de réception (TCP/26922) aurait dû être dans un état fermé. Si cela avait été vrai, en fait, je m'attends à voir un réarmement à venir / ACK de retour de l'attaquant le système nous dit que TCP/26922 est maintenant fermé. Nous ne voyons jamais ces paquets.

Alors pourquoi ne pas le fermer le port distant? Le paquet de réinitialisation est valide, il doit donc avoir tué la session. Un attaquant avisé va exécuter un renifleur de paquets dans le fond tout en effectuant leur attaque. Il est possible que l'attaquant aurait compris ce qui se passait et a simplement créé une règle de filtrage sur leur système d'attaque de filtrer tous les paquets entrants réinitialiser. Cela aurait permis leur outil de continuer à fonctionner. Même sans le pare-feu filtre les renifleur de paquets devrait contenir les réponses qu'ils cherchent. Donc, il ya une très bonne chance que l'attaquant a compris ce que nous sommes vulnérables à, malgré le fait NIPS est une protection du réseau.

Pourquoi le serveur Web ignorer le paquet reset?

Notre dernière question est de savoir pourquoi le serveur Web ignorer le paquet envoyé par le réarmement NIPS. Ce qui provoque deux problèmes:

  • Les infos de l'attaquant a voulu se poursuit à s'échapper
  • Si l'attaquant n'a sondes de fichiers multiples, ils pouvaient remplir le tableau de session sur le serveur Web

Le deuxième élément est un peu effrayant, car il serait en réalité l'NIPS provoquant l'attaque DoS en tuant un seul côté de la connexion correctement. Donc, même si nous avons été patché et jusqu'à ce jour aux engins de fournisseur, nous avons versé de l'argent pour se finir par tuer notre serveur Web. Gee je déteste quand je passe de l'argent pour moi DoS. ;)

Prenons un autre regard sur ces paquets de réinitialisation:

tshark-n-r challenge1.cap frame.number == 6 ou 7 == frame.number

6 0.031319 12.33.247.4 -> 148.78.247.10 TCP 80> 26922 [RST, ACK] Seq = 1 Ack = 222 Win = 0 Len = 0

7 0.031385 148.78.247.10 -> 12.33.247.4 TCP [TCP ACKed segment perdu] 26922> 80 [RST, ACK] Seq = 1 Ack = 222 Win = 0 Len = 0

Notez que tshark nous dit paquet 7 est un segment perdu. En d'autres termes, tshark nous dit que le numéro de séquence TCP n'est pas dans la fenêtre de l'hôte est attendu. Un regard sur la séquence et de reconnaître numéros explique pourquoi. Les valeurs sont identiques à celles dans le paquet de six. Vous vous souvenez peut partir du dernier message que le paquet 6 et 7 avait aussi la valeur même ID IP (45 298).

Il semble donc que ce qui s'est passé ici est:

  • Client a envoyé une attaque HTTP vers notre serveur Web
  • NIPS détecté l'attaque
  • NIPS envoyé une réinitialisation TCP valide à l'attaquant de tuer la session
  • NIPS troqué la source et les adresses IP de destination dans le paquet, recalculé les CRC, puis envoyé la réinitialisation même le serveur Web
  • Web serveur ignore le reset, car il ne contient pas un numéro de séquence acceptables

Vous pouvez vous demander: «Comment avez le vendeur rater cela?». Ma meilleure supposition est que le vendeur a couru quelques attaques simulées, l'outil d'attaque n'a pas de leur montrer les fichiers vulnérables, alors ils ont supposé que tout fonctionnait OK. En d'autres termes, un vendeur qui a créé un produit pour protéger les réseaux sur le fil n'a jamais pris la peine de regarder ce que leur produit était en train de faire sur le fil. Hummm ...

Question bonus

OK, si vous vous amusez avec celui-ci, voici une question bonus à réponse qui sera définitivement prouver votre uber-geek statut lors du sommet de la pyramide secret:

Supposons que nous accordons à un pare-feu stateful inspection entre ce sous-réseau et l'attaquant. Est-ce que l'attaquant toujours être en mesure de voir les réponses avec un renifleur de paquets?

Je vais poster la réponse la semaine prochaine.

Défi tshark - Conseils 4

8 octobre 2009

Dans mon dernier post, nous avons identifié que le système client a probablement été l'exécution de certaines genre d'outil pour sonder connus pour être des fichiers vulnérables. Nous avons encore à expliquer les paquets de réinitialisation cependant, ainsi que pourquoi le serveur a été de les ignorer.

En ce moment nous ne savons même pas où cette capture de paquets a été prise en relation avec les deux points d'extrémité. Je vais courir tshark en utilisant les "champs-T" passer à imprimer les informations TTL. En analysant les TTL, nous devrions être en mesure de déterminer où nous sommes renifler en relation avec le client et le serveur. Je vais aussi imprimer les identifiants IP pour voir s'il ya des anomalies dans l'ordre des paquets.

Voici la commande et la sortie:

tshark-r-T challenge1.cap champs e-frame.number-e-e ip.src tcp.srcport-e-e ip.ttl ip.id

1 148.78.247.10 26922 49 0x2a6b

2 12.33.247.4 80 64 0 × 0000

3 148.78.247.10 26922 49 0x2a95

4 148.78.247.10 26922 49 0x2a96

5 12.33.247.4 80 64 0 × 3743

6 12.33.247.4 80 255 0xb0f2

7 148.78.247.10 26922 255 0xb0f2

8 12.33.247.4 80 64 0 × 3744

9 12.33.247.4 80 64 0 × 3745

10 12.33.247.4 80 64 0 × 3746

11 12.33.247.4 80 64 0 × 3747

12 12.33.247.4 80 64 0 × 3748

13 12.33.247.4 80 64 0 × 3749

14 80 64 12.33.247.4 0x374a

15 80 64 12.33.247.4 0x374b

16 80 64 12.33.247.4 0x374c

17 80 64 12.33.247.4 0x374d

148.78.247.10 est le client. Nous le savons parce que l'ouverture de la session et sa communication en utilisant un port source supérieur. 12.33.247.10 est notre serveur HTTP de communiquer à partir du port 80.

En paquet de 1, nous voyons que le client a un TTL de 49. Le plus proche match débute TTL pour un système d'exploitation connue est de 64, donc cela nous dit que le client est un Linux, UNIX, ou le système Mac assise 15 sauts loin. En paquet de 2, nous voyons le serveur avec une valeur TTL de 64, donc il doit être l'un des systèmes d'exploitation mentionnés précédemment assis sur le réseau local. Donc, nous sommes sur le même domaine de collision que le serveur, mais assis 15 sauts loin du client.

Il ya un problème cependant. Regardez les paquets 6 et 7. Ici, nous voyons le TTL des deux systèmes de changement à 255. Un OS ne changera jamais c'est TTL lors d'une session, donc ce semble extrêmement suspect. De plus, nous avons déjà déterminé que le client est assis 15 sauts loin de nous. 255 est la plus grande valeur possible TTL comme le champ TTL est seulement un seul octet (8 octets de l'entête IP). Ainsi, même si l'adresse IP source prétend être le client distant, il n'ya aucun moyen que le paquet ait pu apparaître n'importe où, mais à partir du réseau local. Si le paquet a traversé un ou plusieurs routeurs, la valeur TTL serait plus faible.

Les informations d'identification IP ne semble pas correcte non plus. Dans les trois premiers paquets du client, nous voyons l'IP ID valeurs 0x2a6b (10859), 0x2a95 (10 901), et 0x2a96 (10902). Cela nous indique que le client est peut-être en utilisant un ID incrémentale une IP, nous n'avons tout simplement pas voir 42 des paquets entre les premier et deuxième paquets transmis. L'ID de la prochaine IP, nous voyons du client est 0xb0f2 (45298). OK, sauf si nous avons manqué plus de 34.000 paquets, cet ID IP ne jive.

Notez l'analyse ci-dessus ne serait-il pas théoriques ont été pour les valeurs TTL incompatibles. Avec seulement trois paquets à regarder, on ne peut pas identifier précisément l'incrément IP ID. Il est également possible, mais très très peu probable, que l'augmentation ID IP est complètement aléatoire et le système vient de se passer d'assigner deux incrémentale ID IP, l'un après l'autre. Pourtant, combiner les TTL et d'information IP ID ensemble et ils indiquent que ce paquet final pourrait ne pas provenir d'un même système.

Nous avons des données d'identité plusieurs adresses IP à partir du serveur de travailler avec, prenons donc un oeil à ça. Les identifiants sont:

  • 0 (0)
  • 0 × 3743 (14147)
  • 0xb0f2 (45298)
  • 0 × 3744 (14148)
  • 0 × 3745 (14149)
  • 0 × 3746 (14150)
  • 0 × 3747 (14151)
  • 0 × 3748 (14152)
  • 0 × 3749 (14153)
  • 0x374a (14154)
  • 0x374b (14155)
  • 0x374c (14156)
  • 0x374d (14157)

Jetez un oeil à l'ID IP figurent dans la troisième, qui est de 6 paquets dans la trace. Notez que tous les ID de propriété intellectuelle d'autres sont incrémentales 1, mais cette IP ID ne lui appartient pas. En fait, nous pouvons montrer que les incréments de serveur c'est par une IP ID et qu'il n'y a aucun moyen de ce paquet provenant du serveur.

Humm. Je me demande si ces lignes suspectes paquets avec le réinitialise étranges que nous avons vu:

tshark-r-T challenge1.cap champs-e-e frame.number ip.src-e-e tcp.srcport ip.ttl-e-e ip.id tcp.flags.reset

1 148.78.247.10 26922 49 0x2a6b 0

2 12.33.247.4 80 64 0 × 0000 0

3 148.78.247.10 26922 49 0x2a95 0

4 148.78.247.10 26922 49 0x2a96 0

5 12.33.247.4 80 64 0 × 3743 0

6 12.33.247.4 80 255 0xb0f2 1

7 148.78.247.10 26922 255 1 0xb0f2

8 12.33.247.4 80 64 0 × 3744 0

9 12.33.247.4 80 64 0 × 3745 0

10 12.33.247.4 80 64 0 × 3746 0

11 12.33.247.4 80 64 0 × 3747 0

12 12.33.247.4 80 64 0 × 3748 0

13 12.33.247.4 80 64 0 × 3749 0

14 80 64 12.33.247.4 0x374a 0

15 80 64 12.33.247.4 0x374b 0

16 12.33.247.4 80 64 0 0x374c

17 12.33.247.4 80 64 0 0x374d

Ah ha! Donc, si on regarde les paquets avec l'étrange et les valeurs TTL IP ID, ce sont les paquets de réinitialisation étranges envoyés pendant la session.

Il me semble que certaines troisième système est de sauter dans la conversation afin de transmettre les paquets de réinitialisation. Depuis ces paquets étranges ont un TTL de 255, nous savons qu'il doit être sur le même domaine de collision que là où nous sommes reniflant. Depuis qu'il est sur le même domaine de collision, les informations d'en-tête Ethernet pourrait être utile:

tshark-r-T challenge1.cap champs e-frame.number e-ETH-e tcp.flags.reset

1 port Ethernet II, Src: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab), Dst: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3) 0

2 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

3 Ethernet II, Src: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab), Dst: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3) 0

4 Ethernet II, Src: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab), Dst: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3) 0

5 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

6 Ethernet II, Src: D-Link_8f: E0: 0C (00:50: ba: 8f: E0: 0C), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 1

7 Ethernet II, Src: D-Link_8f: E0: 0C (00:50: ba: 8f: E0: 0C), Dst: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3) 1

8 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

9 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

10 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

11 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

12 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

13 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

14 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

15 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

16 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

17 Ethernet II, Src: DellComp_20: 7d: e3 (00: b0: d0: 20:07 D: e3), Dst: HewlettP_ea: 20: ab (00:50:8 B: EA: 20: ab) 0

Ainsi, lorsque le client arrive à partir d'Internet, il passe à travers un système HP agit soit comme un routeur ou un firewall. Notre serveur Web est exécuté sur le matériel Dell. Notez notre réinitialise (paquets 6 et 7) sont les deux étant générés par le même système en utilisant une carte réseau D-Link.

Alors pourquoi le système D-Link essayer de tuer la session? Cela s'est produit juste après que le client a envoyé la demande de fichiers suspects. Il me semble que le système D-Link est en fait un système unique perfectionné de prévention des intrusions (IPS). Quand une attaque est détectée, l'IPS vise à prévenir l'attaque par la transmission de paquets de réinitialisation aux deux extrémités de la connexion.

Mais nous avons encore quelques questions sans réponse. L'attaque réussie et pourquoi le serveur semblent ignorer la tentative du IPS pour tuer la session?

Tourner dans le prochain épisode pour le savoir.

Paquets analysant avec tshark

1 octobre 2009

Dans un post précédent j'ai discuté la façon d'ajuster la sortie d'affichage dans tshark . Le poste a suscité beaucoup d'intérêt, alors j'ai décidé d'ajouter quelques informations supplémentaires sur l'utilisation tshark à décoder les paquets. Ce poste suppose que vous avez lu le lien ci-dessus.

Pourquoi utiliser tshark lieu de tcpdump / WinDump?

Beaucoup de décodeurs vieux temps ne jurent que par tcpdump , et son homologue sous Windows WinDump . Les deux sont d'excellents outils, mais ils sont devenus un peu daté. Alors que les correctifs sont encore publié de temps en temps, peu a été fait pour mettre à jour ou développer leur capacité de décoder. Wireshark d'autre part, ainsi que c'est inclus des outils tels que tshark, notamment de décoder le soutien pour des centaines de protocoles et la liste s'allonge tout le temps. Alors que vous pouvez certainement analyser les paquets sans les décodeurs, ils rendent le processus plus rapide aller bien loin.

Pourquoi utiliser tshark lieu de Wireshark?

Wireshark est un outil formidable quand vous faites une analyse de la charge utile en profondeur. Il peut être un peu fastidieux cependant si vous souhaitez suivre un domaine spécifique sur plusieurs paquets. Par exemple, disons que nous souhaitons pour regarder l'incrément numéro de séquence TCP sur plusieurs paquets. Avec Wireshark, je dois noter l'emplacement numéro de séquence dans le panneau du milieu et à la page grâce à chaque paquet. Comme il n'existe aucun moyen d'aligner la valeur sur plusieurs paquets, je suis obligé de rappeler les valeurs précédentes lorsque l'exercice de mes calculs. Avec tshark cependant, nous pouvons faire quelque chose comme ceci:

tshark-n-T champs e-ip.src-e-e tcp.seq tcp.len

64.111.96.38 0 0

64.111.96.38 1 0

64.111.96.38 1 363

64.111.96.38 364 1448

64.111.96.38 1812 1448

64.111.96.38 3260 1448

64.111.96.38 4708 1448

64.111.96.38 6156 1448

64.111.96.38 7604 1448

64.111.96.38 10500 310

64.111.96.38 9052 1448

64.111.96.38 10810 0

Rappelez-vous que le numéro de séquence TCP (le second champ) doit incrémenter basé sur la taille de la charge utile (le troisième champ). Notez que les paquets 10 et 11 où reçus dans le désordre. Cela pourrait signifier il ya plusieurs chemins disponibles entre notre situation et l'adresse IP identifiée. Alors que Wireshark serait de nous montrer ces informations aussi bien, dans cette vue, il est un peu plus facile de suivre le flux.

Plus sur l'affichage des champs

Comme discuté dans mon post plus haut, ainsi que montré ci-dessus, l'option "-T" commutateur peut être utilisé pour manipuler la sortie affichée. Vous pouvez choisir à partir de XML, Postscript ou en texte brut. L'option la plus utile est «champs», comme il vous permet de choisir les domaines spécifiques que vous voulez imprimer. Comme indiqué ci-dessus, l'option "-e" commutateur peut alors être utilisé pour identifier les champs que vous souhaitez afficher. La liste complète des filtres peuvent être trouvés ici . Une antisèche belle des valeurs les plus couramment utilisés peuvent être trouvés ici .

Si vous définissez un protocole spécifique, tshark affiche quelques-uns des champs les plus importants de cette tête. Par exemple à regarder seulement la tête Ethernet:

tshark-T champs e-ETH

Ethernet II, Src: TyanComp_56: 3b: 14 (00: e0: 81:56:3 b: 14), Dst: Dell_d1: fe: ef (f 00:12:03: d1: fe: EF)

Ethernet II, Src: TyanComp_56: 3b: 14 (00: e0: 81:56:3 b: 14), Dst: Dell_d1: fe: ef (f 00:12:03: d1: fe: EF)

Ethernet II, Src: TyanComp_56: 3b: 14 (00: e0: 81:56:3 b: 14), Dst: Dell_d1: fe: ef (f 00:12:03: d1: fe: EF)

Notez le type et les champs CRC ne sont pas affichés, car ils ne sont pas aussi «intéressant» comme la source et adresse MAC de destination. Nous aurions à définir spécifiquement ces domaines (et ip.type ip.trailer) si nous souhaitons les voir.

Un effet secondaire de champs d'impression est que tshark va ajouter une ligne vierge pour tous les paquets qui ne contient pas le champ spécifié. Ce peut être une douleur lors de l'analyse des paquets HTTP que pas tous les paquets contiennent un URI. Un moyen facile de nettoyer cette place, c'est de tuyau à travers grep. Par exemple:

tshark-T champs e-http.request.uri | grep-v "^ $"

/

/ Styles.css

/ Templates / classic / images / starsnstripes.gif

/ Templates / classic / images / unionjack.gif

/ Templates / classic / images / amazon.header.gif

/ C_images/2009/05/07/71090.2.jpg

Dans mon dernier post j'ai discuté grep ainsi que l'endroit où récupérer une version gratuite pour Windows. La commande ci-dessus grep utilise le "-v" pour correspondre à toutes les lignes qui ne contiennent pas la valeur spécifiée. "^ $" Définit une ligne blanche. Ainsi, le dessus de filtres commande grep sur toutes les lignes vides.

Plus les options d'affichage

Tshark dispose d'un certain nombre d'autres options d'affichage utile. Par exemple, vous pouvez imprimer en-têtes au début de la sortie:

tshark-n-T champs-e-e ip.src ip.dst-E-tête = y

ip.src ip.dst

64.111.96.38 12.5.200.100

64.111.96.38 12.5.200.100

64.111.96.38 12.5.200.100

Si vous envisagez d'importer les informations dans un tableur ou base de données, vous pouvez définir le caractère à utiliser entre les champs:

tshark-T champs e-ip.src-e-e ip.dst tcp.dstport-E-tête = y E = séparateur;

ip.src; ip.dst; tcp.dstport

64.111.96.38; 12.5.200.100; 34831

64.111.96.38; 12.5.200.100; 34831

64.111.96.38; 12.5.200.100; 34831

Statistiques sur les paquets

Tshark dispose de solides capacités statistiques ainsi. Si vous avez besoin pour traiter un grand nombre de fichiers, il est parfois aider à commencer par regarder les stats brutes. L'option "-z" commutateur est utilisé pour spécifier les statistiques que vous souhaitez analyser. Normalement, ces seront imprimés à la fin de l'information décoder, mais si vous utilisez l'option "-q" commutateur uniquement les stats seront imprimés. Voici un exemple:

C: \ test> tshark-q-z http, stat,-z http, arbre-R test.cap

================================================== =============

HTTP / Packet pour cent contre le taux de valeur

-----------------------

Total des paquets HTTP 64915 0.048999

HTTP Request Packets 459 0.000346 0,71%

GET 24 0.000018 5,23%

TETE 433 0.000327 94,34%

OPTIONS 2 0.000002 0,44%

Réponse paquets HTTP 448 0.000338 0,69%

???: Broken 0 0.000000 0,00%

1xx: Information 0 0,000000 0,00%

2xx: Succès 12 0,000009 2,68%

200 OK 12 0.000009 100.00%

3xx: Redirection 0 0,000000 0,00%

4xx: Erreur client 436 0,000329 97,32%

404 Not Found 432 0,000326 99,08%

403 Forbidden 4 0,000003 0,92%

5xx: Erreur de serveur 0 0,000000 0,00%

Autres paquets HTTP 64008 0.048314 98,60%

================================================== =============

================================================== =============

Statistiques HTTP

* Les codes d'état HTTP dans les paquets de réponse

HTTP 200 OK

HTTP 403 Forbidden

HTTP 404 Non trouvé

* Liste des méthodes HTTP Request

GET 24

OPTIONS 2

TETE 433

================================================== =============

Un couple de choses bâton dans cette sortie. Tout d'abord, nous avons quatre 403 erreurs indiquant que quelqu'un a tenté d'accéder à quelque chose qu'ils n'ont pas la permission d'. Aussi, sur les requêtes HTTP 459, 432 d'entre eux étaient des fichiers inexistants. Nous assistons également à un grand nombre de «chef» des demandes qui pourrait être un proxy, ou pourrait être un attaquant de tenter d'éviter d'être connecté au journal des accès du serveur Web. Est clair que cette fichier de capture comprend une partie du trafic suspect qui mérite une enquête plus approfondie.

Tshark peut même produire des statistiques sur le débit général, si vous en avez besoin. C'est un excellent moyen de vérifier pour les attaques DoS:

tshark-q-z io, stat, 10-r test.cap

================================================== =============

Statistiques IO

Intervalle: 10,000 sec

Column # 0:

| Column # 0

Temps | cadres | octets

000.000-010.000 254 145081

010.000-020.000 145 80003

020.000-030.000 125 65527

030.000-040.000 4 264

================================================== =============

Remarque tshark imprimera le cadre et le nombre d'octets pour un intervalle spécifié, défini en secondes. Le seul problème est que si vous êtes la capture des paquets hors du fil, stats ne sont pas affichés jusqu'à ce que la capture se termine.

Résumé Exec

Tshark est un outil d'analyse de paquets extrêmement capable qui a dépassé ce homologues tcpdump et WinDump. Combinez la capacité de décoder vaste avec l'affichage de sortie flexibles, et tshark est devenu l'outil de choix pour les décodeurs de paquets nombreuses.

Passivement Fingerprinting VMware Virtual Systems

15 septembre 2009

Il ya eu quelques excellents articles écrits sur la façon de détecter si un système d'exploitation fonctionne comme une image de l'invité Vmware. outils automatisés ont même été libérés pour aider à accélérer le processus. Tous supposent cependant que l'accès du terminal ou invite de commande est nécessaire pour effectuer la détection. Peu de gens savent qu'il est possible de détecter passivement un invité VMware sans aucun niveau d'accès au système. En fait, si vous savez quoi chercher, vous pouvez même identifier la version de VMware est l'hôte du système virtuel.

Empreintes passive

Empreintes passive est une technique où un système d'exploitation à distance peuvent être identifiés par les nuances dans les paquets IP qu'elle produit. Par exemple, la charge de l'Echo-Demande de paquets sont assez unique à partir du système d'exploitation du système d'exploitation. Dans un post précédent j'ai discuté comment les différents systèmes d'exploitation utilisent le temps de vivre différentes valeurs. En analysant ces variations dans les paquets IP, vous pouvez faire un travail assez précis de l'identification du système d'exploitation source. En fait, de nombreuses fois, vous pouvez même identifier le niveau de patch la réversion du système.

Systèmes virtuels VMware

VMware prend en charge deux modes de connexion d'un système d'exploitation invité à un réseau. Vous pouvez NAT il derrière l'hôte, ou le connecter en mode pont. Beaucoup de gens pensent que la réduction de mode donne accès à l'OS invité direct à la carte réseau, mais ils oublient que VMware est encore assis entre l'OS invité et les pilotes du système hôte pour exécuter le NIC. Il n'est pas rare pour cette couche de faire des changements dans les paquets IP avant de les transmettre sur le fil. Donc, si vous savez quels sont les changements à chercher, vous pouvez détecter quand le logiciel VMware est assis entre un système d'exploitation et le réseau local.

VMware rend plusieurs modifications à la Datastream IP. Dans ce post nous allons seulement regarder à deux de ces changements (taille de la fenêtre et l'échelle), et je vais le laisser au lecteur d'essayer de trouver les autres. En outre, les différentes versions de VMware va modifier le flux de données IP de différentes manières. Si vous savez ce que les changements sont uniques à chaque version, vous pouvez identifier le niveau de version de VMware assis entre l'OS invité et le réseau.

La taille de fenêtre et de dimensionnement des fenêtres

TCP utilise la taille de fenêtre de déterminer combien de données peuvent être transmises avant un système distant doit faire une pause et attendre un accusé. Par exemple, si «Système A» raconte «Système B», «taille de la fenêtre = 1400", "Système B" est autorisé à envoyer un peu moins d'un paquet Ethernet en taille réelle avant qu'il faut attendre. Après les 1400 octets sont transmis, "Système B" n'est pas autorisé à envoyer des données plus jusqu'à ce qu'il reçoive un accusé de réception de ces données de «Système A». Taille de la fenêtre est ajustée à la volée, de sorte «Système A» pourrait éventuellement annoncer »taille de la fenêtre = 1600". Cela signifie «Système B» peuvent désormais envoyer un paquet de taille complète suivie par un petit paquet avant qu'il faut mettre en pause un accusé de réception. La taille de fenêtre est une méthode de contrôle de flux pour aider à assurer que le système de réception ne pas voir plus de données que c'est tampons peut gérer.

Taille de la fenêtre remonte à la mise en œuvre originale de TCP. A l'époque 16 bits ont été réservés (octets 14 et 15 dans l'en-tête TCP) pour spécifier combien d'octets peut être transféré avant une pause pour un accusé de réception. Cela signifie que nous pourrions définir une taille de fenêtre maximale de 65 535 octets. C'est plus que suffisamment grande en 1980 des normes, mais pas si grand quand on parle de 1 Gb et plus rapide des réseaux. Dans le dimensionnement des fenêtres début des années 90 a été ajouté comme une option TCP. Dimensionnement des fenêtres est seulement annoncée dans le premier paquet TCP envoyé par un système (SYN ou SYN / ACK) et est un multiplicateur pour la taille de la fenêtre annoncés. Par exemple, supposons une taille de fenêtre de 1400 octets. Si la fenêtre est l'échelle 3, les mathématiques seraient:

(2 * 2 * 2) * 1.400 = 11.200

Si la fenêtre est l'échelle 4, les mathématiques devient:

(2 * 2 * 2 * 2) * 1.400 = 22.400

Alors dimensionnement des fenêtres nous permet désormais la publicité des tailles de fenêtre beaucoup plus grande. Cette explication est assez simpliste, mais devrait donner au lecteur une bonne idée de la taille de fenêtre et comment fonctionne l'échelle. Pour plus d'info voir RFC 1323 ou le Wiki TCP .

Backtrack 3 final comme un hôte autonome

Voici une réponse SYN / ACK à une demande de connexion retournée par un système de Backtrack 3 (Linux 2.6.21.5 du noyau) exécuté sur un hôte dédié:

> IP (TOS 0 × 0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), longueur 60) 192.168.100.4.80> 192.168.100.50.44943: S, 0 × 9552 cksum (correct ), 2760872392:2760872392 (0) ack 4071399005 gagnant 5792 1460,sackOK,timestamp <mss 5362662 198395,nop, wscale 5>

Notez l'échelle fenêtre initiale est de 5, ce qui signifie la taille de fenêtre réelle est de 32 * 5792 = 185 344. C'est assez commun pour les systèmes Linux exécutant un poste 2.6.17 du noyau.

Maintenant, nous allons jeter un oeil à la façon dont le taille de la fenêtre pour Backtrack 3 s'incrémente:

[Root @ fubar ~] # tshark-n-T champs e-ip.src-e-e tcp.window_size tcp.options.wscale_val dst 192.168.100.50 hôte

Capture sur eth0

192.168.100.4 5792 5

192.168.100.4 245

192.168.100.4 336

192.168.100.4 426

192.168.100.4 517

192.168.100.4 607

192.168.100.4 698

192.168.100.4 788

192.168.100.4 879

192.168.100.4 969

192.168.100.4 1060

J'ai utilisé tshark pour nettoyer la sortie afin que nous puissions concentrer sur les domaines que nous préoccupent vraiment. La trace ci-dessus est un gros transfert de données à 192.168.100.4 (BT3 stand alone) via TCP/80, comme le montrent ci-dessus dans la trace tcpdump. Notez que nous ne pouvons assez clairement identifier comment la taille de fenêtre a été incrémenté au cours de la session de données.

Backtrack 3 final, invité sur Windows XP Workstation

Alors prenons un regard sur la manière dont la taille de fenêtre et de mise à l'échelle obtenir touchés lorsque le système d'exploitation est assis derrière VMware. Dans ce test, j'ai couru comme un BT 3 système d'exploitation invité sur un hôte Windows XP poste de travail. J'ai utilisé VMware Player 2.5.3 et écrit un fichier personnalisé VMX pour exécuter le BT 3 iso.

Voici un premier paquet SYN / ACK:

> IP (TOS 0 × 0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), longueur 60) 192.168.100.7.80> 192.168.100.50.35245: S, cksum 0x670d (correct), 3795217952:3795217952 (0) ack 4108648760 gagnant 5792 1460,sackOK,timestamp <mss 5210512 208486,nop, wscale 4>

Notez que bien que la taille initiale de la fenêtre correspond au stand-alone du système BT 3, VMware a laissé tomber le dimensionnement des fenêtres de 5 (32x) à 4 (16x).

Voici le flux de paquets envoyés par le système invité:

[Root @ fubar ~] # tshark-n-T champs e-ip.src-e-e tcp.window_size tcp.options.wscale_val dst 192.168.100.50 hôte

Capture sur eth0

192.168.100.7 5792 4

192.168.100.7 490

192.168.100.7 671

192.168.100.7 852

192.168.100.7 1033

192.168.100.7 1214

192.168.100.7 1395

192.168.100.7 1576

192.168.100.7 1757

192.168.100.7 1938

192.168.100.7 2119

Notez qu'après le premier paquet de la taille de la fenêtre négocié semble plus grand, mais quand vous facteur dans le multiplicateur d'échelle la fenêtre de la taille de la fenêtre globale finit par être légèrement plus petite que BT 3 quand il est exécuté sur un système dédié. Pas du tout surprenant que les systèmes virtuels fonctionnent généralement plus lents que des systèmes dédiés, mais nous venons tout juste taggés deux différences, nous pouvons rechercher pour déterminer si l'hôte est autonome ou une image virtuel invité.

Backtrack 3 final, invité sur Fedora 11

Bien sûr, la grande question est, "a été le changement taille de la fenêtre à cause de l'hôte Windows XP ou VMware?". VMware contourne la pile IP de Windows lors de la transmission sur le fil, de sorte que le système d'exploitation hôte doit avoir aucun effet sur le flux de paquets. Pour vérifier cela, nous allons essayer de le même test en utilisant la même version de VMware Player, mais cette fois nous allons utiliser Linux comme système d'exploitation hôte. Voici le SYN / ACK:

> IP (TOS 0 × 0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), longueur 60) 192.168.100.13.80> 192.168.100.50.43363: S, cksum 0x6ef7 (correct), 3423175369:3423175369 (0) ack 483782889 gagnant 5792 1460,sackOK,timestamp <mss 579990 366817,nop, wscale 4>

Voici le flux de paquets étant retourné à partir TCP/80 sur l'invité BT 3 systèmes:

[Root @ fubar ~] # tshark-n-T champs e-ip.src-e-e tcp.window_size tcp.options.wscale_val dst 192.168.100.50 hôte

Capture sur eth0

192.168.100.13 5792 4

192.168.100.13 490

192.168.100.13 671

192.168.100.13 852

192.168.100.13 1033

192.168.100.13 1214

192.168.100.13 1395

192.168.100.13 1576

192.168.100.13 1757

192.168.100.13 1938

192.168.100.13 2119

Notez que les résultats sont identiques quand BT3 a été le système d'exploitation invité sur Windows XP. Ainsi, alors que cette méthodologie ne sera pas d'identifier le système d'exploitation hôte utilisé, on peut toujours déterminer si BT3 est exécuté sur un système dédié ou comme un hôte via VMware. Alors qu'il est tout à fait possible de modifier un système dédié à comparaître pour être un invité virtuel, le contraire ne semble pas être réalisable.

Résumé Exec

En ayant une compréhension en profondeur de la PI et les nuances produites par les systèmes d'exploitation différents, il est possible de déterminer si un OS est exécuté sur un système dédié ou comme un hôte via VMware. Les modifications apportées par le wrapper VMware laisser dire des indices conte. Un paquet de saucisses intelligentes peuvent s'appuyer sur ces indices pour déterminer le statut de virtualisation du système d'exploitation source.

Se cacher derrière une porte dérobée un port actif de Windows écoute

3 septembre 2009

C'est une technique courante. Vous soupçonnez un de vos systèmes a été compromise, de sorte que vous lancez un scanner de port contre le système. L'espoir est que si le système est backdoors vous identifierez un port sans-papiers à l'écoute. Mais que faire si un pirate se cache la petite porte dans le site de plaine? Que faire si elles se cachent derrière la porte de derrière un port existant vous réellement s'attendre à voir à l'écoute sur le système? Malheureusement, cela est beaucoup trop facile à accomplir si l'hôte est Windows.

La façon dont UNIX

Sur un système UNIX ou Linux, les ports d'écoute sont toujours ouverts exclusivement. En d'autres termes, si un processus de messagerie s'ouvre TCP/25 pour accepter les connexions du courrier entrant, toute autre application qui tente d'écouter le TCP/25 recevrez une erreur de lier et se voir refuser l'accès. La seule façon de la seconde application peut se lier à TCP/25, est d'abord de tuer le processus mail en utilisant le port. Alors qu'une seule application à la fois n'est jamais permis l'accès à une socket en écoute.

La façon dont Windows

Dans Windows, un accès exclusif à un port d'écoute est facultatif. Sa parfaitement légal d'avoir des applications multiples à l'écoute sur le même port TCP ou UDP. This of course can simplify the process of setting up a backdoor behind an existing application.

With Windows, exclusivity of socket access is actually a process that has been evolving over the years. Windows 95, 98 and ME actually had no way to open a port exclusively. Il n'y avait rien d'une application pourrait faire pour empêcher un autre de se fixer sur le même port d'écoute. For versions of Windows between NT and XP, it is possible to request exclusive port access via the SO_EXCLUSIVEADDRUSE option. If exclusive access is not specifically requested however, the default is to fall back to providing shared access.

With Windows 2003 and later, the default is exclusive port access unless both applications specifically request shared access via the SO_REUSEADDR option. La seule exception est que si le même compte est utilisé pour lancer les deux applications, l'accès partagé est toujours possible sauf si l'accès exclusif est spécifiquement demandé. This means that if a savvy attacker can launch their backdoor via the system account, this enhanced security will usually be defeated.

Try it yourself

To test how this works, you'll need a copy of the Windows version of Netcat . Copy nc.exe into one of the directories in your path statement. Once you do, open a command prompt and try the following command:

C: \> nc-l-p 135

Can't grab 0.0.0.0:135 with bind

We just told Netcat to listen (-l) on TCP port (-p) 135. When Windows first boots up, Microsoft RPC opens TCP/135 with the SO_EXCLUSIVEADDRUSE option set. Thus if any application (like Netcat) tries to listen on TCP/135, it receives the bind error shown above. This is the type of behavior we would like to see all of the time.

Now try opening a port that is not already in use:

C:\>nc -l -p 1234

It should appear as if the command is hanging (command prompt does not return). This tells you that Netcat is now listening on port TCP/1234. To verify this, open a second command prompt and type the command:

C:\>netstat -an | find “1234″

TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING

This shows us that Netcat is now listening on TCP/1234 on all network interfaces.

When Netcat opens a listening port it does not request exclusive access to the port. This means it is possible to bind Netcat to an existing listening port that has not already been opened exclusively. Pour tester cela, ouvrez une commande troisième et quatrième prompte. Entrez la commande Netcat mêmes dans chaque que vous exécutez au sein de la première commande d'invite. Each command should execute without error.

Does this mean Netcat is listening multiple times? Go back to the second command prompt window and try the following command:

C: \> netstat-aon | find "1234"

TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING 448

TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING 3044

TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING 3016

We've added in the “o” switch which prints out the process ID for the application holding open the listening port. Note that a different instance of Netcat is responsible for each of the open listening ports. Because Netcat does not require exclusive access to the port, we can listen on the port multiple times.

Donc ce qui arrive quand quelqu'un essaie de se connecter au port? Try it and find out using the following command:

C:\>nc 127.0.0.1 1234

This is a test

You should see the text “This is a test” appear in only one instance of the Netcat listeners. Si vous laissez cette session active et ouverte (encore un) de commande et tapez:

C:\>nc 127.0.0.1 1234

Ceci est un test 2

Vous devriez voir ce texte apparaître dans une instance différente de l'auditeur Netcat.

What have we learned

Since Windows does not require applications to have exclusive access to a listening port, its possible to have a malicious backdoor sitting behind a legitimate application, on the same listening port. Cela rend la backdoor indétectables lors d'un scan de port. Afin de se connecter à la backdoor vous devez d'abord occupée par l'application légitime avec une session active, mais ce n'est facile à réaliser.

Votre adresse IP Spoofing Durant un scan de port - Partie 2

31 août 2009

In my last post I discussed an idle scan and how it can permit an attacker to mask their IP address during a port scan. In this installment we'll look at some traces, as well as discuss how to identify when an idle scan has been used against your network.

Suivi de l'incrémentation IP ID

Commençons par regarder les paquets qui ont été suivi le champ ID IP sur le système Windows. Here is what our probe packet looked like:

07:22:15.367140 IP (tos 0×0, ttl 64, id 63897, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.1.2203 > 192.168.100.2.0: ., cksum 0xeca2 (correct), win 512

A few of these fields are kind of interesting. La valeur TTL est configuré à "64", ce qui suggère un système Linux ou UNIX. Since we are raw writing the packet directly to the wire this value is actually controlled by hping. 64 just happen to be the program default, but we could change the value to anything we wish with the “-t” switch.

The target address is printed as “192.168.100.2.0”, which means the packet was sent to TCP port 0 at IP address 192.168.100.2. Windows does not offer services on TCP port 0 but that's OK. We're not actually trying to connect to the Windows system. We just need it to send us an IP packet so we can check the IP ID value. Si nous voulions frapper un port différent, nous pourrions utiliser hping de "-p" commutateur.

The “.,” after the target specification means that no TCP flags were set within the packet. This is referred to as a null packet and would never occur during normal IP communications. For this reason, may NIDS, NIPS and firewalls will flag it. Nous avons créé un paquet nulle parce que nous n'avons pas dire hping d'envoyé l'un des drapeaux TCP. Par exemple en ajoutant l'option "-S" interrupteur aurait allumé le drapeau SYN, «-A» serait son tour sur le drapeau de reconnaissance, et ainsi de suite.

All of our probe packets to the Windows systems would look similar to this one. Les seules valeurs qui allait changer l'horodatage sont (évidemment), le port TCP source et la valeur du CRC checksum.

Voici ce que les réponses ressemblent à revenir à partir du système Windows:

07:22:15.367296 IP (TOS 0 × 0, ttl 128, id 108, offset 0, flags [none], proto TCP (6), longueur 40) 192.168.100.2.0> 192.168.100.1.2203: R, cksum 0xc431 (correct), 00h00 (0) ack 918250228 win 0



07:22:16.367453 IP (tos 0×0, ttl 128, id 109, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.2.0 > 192.168.100.1.2204: R, cksum 0xfa78 (correct), 0:0(0) ack 2127488152 win 0



07:22:17.367763 IP (TOS 0 × 0, ttl 128, id 110, offset 0, flags [none], proto TCP (6), longueur 40) 192.168.100.2.0> 192.168.100.1.2205: R, cksum 0x2b9f (correct), 00h00 (0) ack 1611256374 win 0

La valeur importante ici est l'ID IP, identifié comme "id". In the first packet it is set to 108, and then the value increments by +1 for each subsequent packet (109 then 110). As long as we continue to see an uninterrupted sequence in the IP ID, we know the Windows system is not transmitting any other packets except the ones that are part of this session.

Sonder un port fermé

Remember that as part of our scan, we will be spoofing the source IP address of the Windows system when target ports on a remote system. A change in the IP ID increment is what tells us we found an open port.

Let's take a look at one of these can packets:

10:30:28.852602 IP (tos 0×0, ttl 64, id 41256, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.2.1266 > 192.168.100.3.79: S, cksum 0x97a6 (correct), 1704542340:1704542340(0) win 512

Note the source IP address is that of the Windows system (192.168.100.2). Nous savons que cela ne pouvait pas venir du système Windows Mais parce que le TTL est fixé à 64 ans. So this is a packet we generated from 192.168.100.1 using a second instance of hping.

Also note we have targeted TCP port 79 and have turned on the SYN flag. Here is the response we received from the remote target:

10:30:28.852839 IP (tos 0×0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40) 192.168.100.3.79 > 192.168.100.2.1266: R, cksum 0xbb1a (correct), 0:0(0) ack 1704542341 win 0

Note the “R” value that tells us the reset flag was turned on in the TCP header. Nous voyons aussi «ack» qui nous indique le flag d'acquittement a été allumé aussi. This is an error packet informing the source that the TCP port is in a closed state. Also note the packet is being transmitted to the Windows system since that was the source IP address in the probe packet.

So how will the Windows system respond? You may remember from my last post that the RFCs state you should never respond to an error packet. Even though the Windows system has no idea what the target is talking about, it will quietly discard this error packet. En d'autres termes, le système Windows ne sera pas envoyer une réponse. This means we should see no change in the IP ID increment.

Probing an open port

Now let's take a look at what happens when we target a port that is actually in an open state. Here's the probe packet. Note it is pretty similar to the last one, except now we are checking TCP port 80.

10:29:46.947964 IP (tos 0×0, ttl 64, id 15249, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.2.1984 > 192.168.100.3.80: S, cksum 0x476b (correct), 947341260:947341260(0) win 512

Here is the response from the target. Note that we see an “S” instead of an “R” which means they SYN flag is turned on rather than the reset flag. This is the targets way of informing the source that TCP port 80 is open and has an application sitting behind it servicing connections.

10:29:46.953333 IP (tos 0×0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 44) 192.168.100.3.80 > 192.168.100.2.1984: S, cksum 0x0de6 (correct), 262246932:262246932(0) ack 947341261 win 5840 <mss 1460>

So this time the Windows system receives a packet saying “Sure, you can connect to TCP port 80”. This is a problem for the Windows system because it has no connection entry saying that it actually tried to connect to port 80 on the target. Without the connection entry, Windows has no way of knowing which application requested the session. Dans cet esprit, il ne la seule chose qu'il peut faire; transmettre un paquet de réinitialisation à la cible de tuer la session. Here is what the packet looked like:

10:29:46.953439 IP (tos 0×0, ttl 128, id 176, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.2.1984 > 192.168.100.3.80: R, cksum 0x5df1 (correct), 947341261:947341261(0) win 0

Note that Windows stamped the next available IP ID in the IP header (176). So had we been monitoring the IP ID increment on the Windows system in a different session, we would see: 173, 174, 175, 177, 178, 179. En d'autres termes, nous avons vu que 176 était manquant (deux dans le paquet précédent). This would be our indication that the TCP/80 probe sent to the target hit an open port.

Identification d'un scan ralenti

So an idle scan does an excellent job of masking the true source IP address of a port scan. This means that without access to log information on the Windows host (something that will not exist if the attack has done their homework), we will never be able to discover the true source IP address of the attack.

Is there a way to tell an idle scan was performed rather than a straight forward port scan so we know if it is worth investigating the source IP address? There are in fact a couple of clues we can look for.

Probe retries

Si le système cible est assise derrière un firewall, vous remarquerez une différence dans le nombre de tentatives de test par rapport à un scanner de port normaux. When someone runs a normal port scanner, the scanner will typically hit open ports only once but firewalled ports multiple times. This is because the firewalled ports return no response. The scanner will make multiple attempts to ensure the packets are not just getting lost. Since the open port will actually respond, only one probe packet is required.

Quand un scan d'inactivité est effectué, l'inverse est vrai. If a firewalled port is probed there will be no IP ID increment change on the Windows system. So only one check is required to confirm this is not an active listening port. When an open port is probed however, we'll detect a change in the Windows system's IP ID increment. While we think this is due to us finding an open port, it could just as likely be because the Windows system sent a broadcast. So we will want to perform multiple probes against the open port to ensure the Windows IP ID data remains constant.

Donc:

  • Probe firewalled ports more often than open ports = normal port scanner
  • Probe open ports more often that firewalled ports = idle scan

Le calendrier

Normal port scans be extremely fast. It is not uncommon to see hundreds of probe packets per second. With an idle scan however, we have to take things a bit slower. This is because we must check the IP ID of the spoofed address, send the probe packet, permit enough time for the probe to elicit a response, give the spoofed system enough time to respond with a reset if required (thus using up an IP ID), and then check the IP ID again to see if the increment has changed.

Try to perform all of these steps too quickly, and you will pay the price in accuracy. Par exemple nmap supporte les balayages d'inactivité avec le "SI" interrupteur. The default extremely fast scanning speed works fine if all of the systems are on the same switched network. If the hosts are 15 hops away from each other on the Internet however, my experience has been the accuracy rating drops off considerably unless you slow down the scanning speed.

Donc:

  • Hundreds of packets per second = normal port scanner
  • Une douzaine ou moins de paquets par seconde = Idle scan possible, pourrait juste être un balayage lent

Champ TTL

Let's look again at the spoofed probe packet as well as the legitimate reset response sent by the Windows system:

10:29:46.947964 IP (tos 0×0, ttl 64, id 15249, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.2.1984 > 192.168.100.3.80: S, cksum 0x476b (correct), 947341260:947341260(0) win 512



10:29:46.953439 IP (tos 0×0, ttl 128, id 176, offset 0, flags [none], proto TCP (6), length 40) 192.168.100.2.1984 > 192.168.100.3.80: R, cksum 0x5df1 (correct), 947341261:947341261(0) win 0

You may have noticed the TTLs are way off from each other. If both of these packets had in fact originated from 192.168.200.2 then they would both have the same starting TTL value. The fact that they are different tells us that one of them is spoofed.

If you are monitoring the perimeter of the target system and notice that the SYN and reset packets have different TTL values, that's a clue that you may be experiencing an idle scan. Now, as mentioned earlier, it is entirely possible to set the TTL to what ever we wish in our spoofed packet. So a smart attacker is simply going to set their starting TTL to 128 to better mimic the Windows system. Si ils font cela, votre seul espoir est que l'attaquant et le système Windows sont un nombre différent de houblon loin. In other words, if you consistently see the SYN packets with a TTL of 115, but the resets consistently have a TTL of 113, you are most likely looking at an idle scan.

Si le TTL ne correspondent pas, nous ne pouvons pas totalement exclure une analyse de ralenti. The attacker may just be that good.

Donc:

  • TTLs of SYNs and RSTs are consistent but do not match = idle scan
  • TTLS of SYNs and RSTs match = normal port scanner or smart idle scanner

IP ID value

The best way to tag an idle scan is leverage the same thing the attacker uses, namely the IP ID value. Take another look at those last two decoded packets. Note that the IP ID in the first one is 15249 but in the second it is 176. If you are seeing an idle scan, you will notice the rest packets consistently have an IP ID of +2 (same thing the attacker sees), but the SYN packets will have some completely unrelated value. L'incrément d'identité IP dans les paquets SYN peut être prévisible ou il pourrait être aléatoire. Quite honestly it does not matter. What does matter is that you can spot some pattern in IP ID of the rest packets that does not jive with the IP IDs in the SYN packets.

Donc:

  • IP ID of SYN and RST packets appear related = normal port scanner
  • IP ID increment of RST does not match SYNs = idle scan

Résumé Exec

Espérons que vous avez maintenant une meilleure compréhension de ce qui se passe sur le fil quand un attaquant effectue un scan ralenti. If we are targeted with an idle scan, we cannot determine the true source IP address of the attacker. Le mieux qu'on puisse espérer accomplir est de déterminer que le scan est un scan ralenti par rapport à un scan de port normaux. There are a number of tell tale clues in packets, the best of which is the IP ID value.

Network Mapping Through A Firewall – Part 3

26 août 2009

Dans mes deux derniers messages, j'ai parlé de deux méthodes différentes qui peuvent être utilisées pour cartographier un réseau à travers un pare-feu. Le premier temps de levier ICMP dépassé dans les erreurs de transit, tandis que le second utilise l'option enregistrement IP itinéraire. Dans les deux messages J'ai également donné des solutions possibles pour empêcher un pirate d'utiliser ces techniques contre votre réseau.

Fonctionnalités Dans les deux cas cependant, avec l'appui disponibles dans les pare-feu commerciaux de qualité limité nos options de sécurité. Dans cette troisième et dernière partie de la série, je couvrirai la façon de bien prévenir ces attaques, si vous utilisez un pare-feu open source. Je vais être spécifiquement utilisant Netfilter , mais la plupart des techniques sont applicables à PF ainsi.

Quel est Netfilter?

Netfilter est le pare-feu stateful inspection qui est inclus dans toutes les distributions modernes de Linux. Si vous avez une copie de Linux, vous avez également une copie de Netfilter. Netfilter is sometimes referred to as iptables , but this is because iptables is the name of the binary you use to manipulate the Netfilter rulebase. Netfilter est un pare-feu extrêmement capable avec des fonctions trop nombreux pour couvrir ce poste. Je vous recommande fortement de vérifier certaines des FAQ et des tutoriels comme ils font un excellent travail de décrire de nombreuses fonctionnalités.

Contrôle tcptraceroute

Dans le premier post j'ai décrit comment des outils comme tcptraceroute pourrait punch au travers d'une règle de pare-feu ouvert à cartographier le réseau assis derrière elle. With commercial firewalls, we were limited to controlling the flow of outbound ICMP time exceeded in transit errors.

Avec Netfilter, nous avons la capacité de contrôle du trafic basé sur la valeur TTL. We can look for a specific value, or a value above or below a certain threshold. Les options prises en charge sont les suivants:

  • -M ttl-ttl-eq = Faire coïncider les paquets avec un TTL d'une valeur spécifiée
  • -m ttl –ttl-gt = Math packets with a TTL higher than a specified value
  • -m ttl –ttl-lt = Match packets with a TTL below a specified value

Voici une règle possible Netfilter, nous pouvons utiliser:

iptables-A FORWARD-m ttl ttl-lt-5-j DROP

Cette règle serait traitée avant toutes les règles permettent à la base de règles. The rule simply checks the TTL value to see if it is less than 5. Si oui, le paquet est abandonné. Depuis le plus bas TTL utilisé par un OS moderne est de 64, et la plupart des systèmes sont environ 15 sauts loin de l'autre sur Internet, nous ne devrions jamais par inadvertance filtrer le trafic légitime.

Here's tcptraceroute running though a regular firewall:

[root@fubar ~]# tcptraceroute -n -f 1 -m 5 -q 1 -S 10.1.4.10 80
Sélectionnés périphérique eth0, l'adresse 10.1.1.10, le port 39142 pour les paquets sortants
Tracing le chemin de 10.1.4.10 sur le port TCP 80 (http), 5 sauts max
1 10.1.2.2 0.353 ms
2 10.1.4.1 0.450 ms
3 10.1.4.10 [open] 0.586 ms

And here is what tcptraceroute sees once we implement the above Netfilter rule:

[Root @ fubar ~] # tcptraceroute-n-f 1-q 1-S 10.1.4.10 80
Selected device eth0, address 10.1.1.10, port 54531 for outgoing packets
Tracing the path to 10.1.4.10 on TCP port 80 (http), 30 hops max
1 ms 10.1.2.2 10.175
2 10.1.4.1 0.464 ms
3 *
4 *
5 *
6 *
7 10.1.4.10 [open] 1.007 ms

Note that once we start filtering on TTL value, the appearance of our perimeter changes. Sans la règle, un attaquant pourrait énumérer ou schéma d'adressage IP. Even if we filtered outbound TimeX packets, they would still know the proper hop count. The Netfilter rule makes it much more difficult to accurately identify our network layout.

Ajout dans certains déception

Une des caractéristiques les plus puissantes de Netfilter est la possibilité de personnaliser rejeter les messages. While most firewalls reject packets by returning an administratively prohibited error message, Netfilter lets you choose from a number of different unreachable error codes. Cela donne quelques possibilités intéressantes. Par exemple, considérons la règle suivante:

iptables-A FORWARD-m ttl ttl-lt-5-j REJECT-reject-with icmp-host-unreachable

This rule tells Netfilter that whenever it sees a packet with a TTL less than 5, it should return an ICMP destination host unreachable packet. En d'autres termes, Netfilter va usurper l'identité d'un routeur et de dire au système de transmission que l'hôte cible est hors-ligne. Voici un exemple de sortie tcptraceroute fois cette règle a été mis en œuvre:

[Root @ fubar ~] # tcptraceroute-n-f 1-q 1-S 10.1.4.10 80
Sélectionnés périphérique eth0, l'adresse 10.1.1.10, le port 47555 pour les paquets sortants
Tracing the path to 10.1.4.10 on TCP port 80 (http), 30 hops max
1 10.1.2.2 0.299 ms
2 10.1.4.1 0.450 ms
3 10.1.4.1 0.403 ms! H

Comparez cette sortie à la sortie tcptraceroute abord montré ci-dessus. Notez que la ligne 3 est maintenant différente. With a regular firewall, hop three was a response from the target host. In this output however, it appears the upstream router is returning an ICMP host unreachable (designated as “!H”) signifying the host is off-line. Depuis tcptraceroute pense l'hôte est hors-ligne, il renonce à essayer et n'atteint jamais l'hôte cible.

Ainsi, alors que cette technique est un peu de sécurité par l'obscurité, il est efficace à la désactivation d'un outil qui serait normalement coup de poing droit à travers un pare-feu. Since regular traffic would not have an abnormally low TTL value, it does not match this rule and is unaffected.

Controlling record route

Dans mon deuxième poste dans cette série, j'ai parlé enregistrement de la route et comment il peut être un levier pour carte à travers un pare-feu. I discussed that the range of the tool is limited (max 8 hops, 3 if you want hop info in both directions), but that there are ways for an attacker to get around this restriction. J'ai aussi mentionné que les firewalls commerciaux n'ont généralement pas de vous donner la possibilité de contrôler le routage du trafic record.

Avec Netfilter, il ya un soutien pour contrôler les options IP via le module ipv4options (http://netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html). Les options prises en charge sont les suivants:

  • -m ipv4options –ssrr = Match packets with strict source routing set
  • -m ipv4options –lsrr = Match packets with loose source routing set
  • -M-rr ipv4options paquets match avec la route = record
  • -m ipv4options –ts = Match packets with timestamp set
  • -m ipv4options –ra = Match packets with router-alert set
  • -M ipv4options-any-opt = coïncider les paquets possédant au moins un ensemble des options IP

Here's an example of a rule that would block packets with the source route option set:

iptables -A FORWARD -m ipv4options –rr -j REJECT –reject-with icmp-host-unreachable

Note we are sending back an ICMP host unreachable in response. This is in order to shutdown the tool mapping our network.

Résumé Exec

La pêche commerciale du pare-feu exceller dans la gestion centralisée et des couleurs agréables sélectionnant pour leur interface graphique, ils sont généralement pâle figure en comparaison d'ouvrir des pare-feu de source en ce qui concerne le contrôle du trafic sur le fil. Afin de protéger leurs réseaux, les administrateurs ont besoin de pare-feu plus grand contrôle de l'en-tête IP que simplement scruter les adresses IP source et destination.