tcpdump - bestimmte UDP pakete mitloggen
Hallo, Um Brutforce Attacken auf einen Game Server zu analysieren moechte ich bestimmte Pakete aufzeichnen und suche nach einer Loesung, die moeglichst CPU schonend ist. Im Prinzip tut die folgende Zeile schon das was ich brauche: $ tcpdump -n -p -A 'dst host $MY_IP and port 27960' |grep "rcon" (Gibt alle Zeilen aus die getestete rcon-Passworter enthalten) Allerdings ist diese Loesung etwas unschoen da: 1. die zugehoerigen Absender IPs weggegreppt werden (welche ich dann allerdings aus anderen logfiles ablesen kann) 2. die CPU last relativ hoch ist wenn viel Betrieb auf dem Server ist. Besser waere es in dem tcpdump commando schon mehr auszusortieren. Kann man tcpdump irgendwie direkt anweisen nur Pakete die "rcon" enthalten auszugeben? Leider kenne ich mich auch nicht sonderlich mit UDP Headern aus. In der Info-Spalte bei ethereal sah ich dass alle Pakete, die ich suche "connectionless" sind, im Gegensatz zu dem meisten restlichen Traffic! Kann man das irgendwie im tcpdump commando benutzen? Ansonsten habe ich keine groesseren Unterschiede zwischen den gesuchten und den restlichen Paketen entdeckt. Irgendwelche Ideen wonach man noch schauen koennte? In Hinblick auf die CPU Last: Waere es besser die Pakete mit iptables mitzuloggen? Geht das ueberhaupt? cu, Ruediger
Nachtrag - vielleichts hilfts: So ein Paket will ich mtloggen: 0000 00 04 02 00 00 06 8a 33 c3 32 45 00 1c 00 08 00 .......3 .2E..... 0010 45 00 00 3a 00 03 40 00 40 11 7d e3 d4 90 00 c3 E..:..@. @.}..... 0020 51 a9 95 d0 6d 38 6d 38 00 26 69 3b ff ff ff ff Q...m8m8 .&i;.... 0030 72 63 6f 6e 20 70 61 73 73 77 6f 72 64 78 79 7a rcon pas swordxyz 0040 20 63 6f 6d 6d 61 6e 64 6f 00 command o. So eins NICHT: 0000 00 04 02 00 00 06 00 8c 87 21 45 00 00 00 08 00 ........ .!E..... 0010 45 00 01 8e 00 1c 40 00 40 11 7c 76 d4 90 00 c3 E.....@. @.|v.... 0020 51 a9 95 d0 6d 38 6d 38 01 7a 35 17 0b 00 00 00 Q...m8m8 .z5..... 0030 da 00 8b 95 d7 2e 35 a6 aa 86 b2 d5 8b 4b c2 03 ......5. .....K.. 0040 03 2f 0a 8e 6a 72 35 12 66 88 da bb 55 a5 69 88 ./..jr5. f...U.i. 0050 6a 75 d1 69 ac db 39 83 e4 8a 41 5b 75 8b ca 40 ju.i..9. ..A[u..@ 0060 1b 67 40 ee 95 73 c5 69 78 f9 46 be 99 2a c4 e9 .g@..s.i x.F..*.. 0070 5d 35 6a 34 74 47 5b 75 8b ca 40 1b 67 40 ee 95 ]5j4tG[u ..@.g@.. 0080 73 c5 69 78 fb 0f 18 1f 0f 92 6a 78 f7 39 5e 55 s.ix.... ..jx.9^U 0090 8d 90 1d 82 be c7 e4 8d 1f 38 0c 99 ae 61 4c 4e ........ .8...aLN 00a0 4e 1d b8 3f f1 a9 a6 86 03 17 d8 f8 69 74 d6 e9 N..?.... ....it.. 00b0 9b e5 f3 f3 a8 9d 63 a9 4a 20 e6 46 42 9b ba 40 ......c. J .FB..@ 00c0 63 84 e3 e2 fc 9b e2 d4 ab fd 37 35 e6 46 42 9b c....... ..75.FB. 00d0 ba 40 ab b9 07 d8 c7 fc 19 98 a6 8e fe 11 f2 e9 .@...... ........ 00e0 7d 5d e6 c9 e9 9b 03 dc 03 75 c2 36 45 39 e6 22 }]...... .u.6E9." 00f0 e6 fc 35 20 e6 0a fd b5 e4 42 bd 9b 03 ce ad 0a ..5 .... .B...... 0100 fc 8f 0a 88 1a cb 42 9b 4a e7 4b 9b 98 1e bf 43 ......B. J.K....C 0110 44 fd ab 98 3e 81 8e 67 84 e7 e3 0a b8 1f 38 81 D...>..g ......8. 0120 46 b9 73 8d 0d 1c c0 bc 13 42 45 d6 1d f2 69 78 F.s..... .BE...ix 0130 f1 69 0d a2 8e be 73 9b fe bf 98 e6 65 fc 81 be .i....s. ....e... 0140 33 6b b7 2a f0 d6 b6 4b 9d 30 6b b7 2a f0 e4 52 3k.*...K .0k.*..R 0150 87 db c7 bc 73 9d 96 3e 95 4d c5 e9 b0 b5 aa 8e ....s..> .M...... 0160 be bf b3 f9 69 b4 a3 73 d6 a5 4f 20 e6 05 c7 47 ....i..s ..O ...G 0170 cb c4 8a 01 01 08 92 47 1a 1f 87 51 a5 69 b5 a4 .......G ...Q.i.. 0180 b3 69 6c b7 b1 2f 84 b1 af 81 ff bc a1 9b 94 14 .il../.. ........ 0190 75 9e fd 85 2d 2f 2f 2f 2f 2f 2f 2f 2f 8d u...-/// /////. Aufgefallen ist mir dass bei dem ersteren Paket am Ende von Zeile 0020 immer ff ff ff ff steht was wie mir scheint etwas mit dem Status "connectionless" zu tun haben koennte. Kann man danach irgendwie mit tcpdump filtern? cu, Ruediger
Am Samstag, 30. April 2005 20:12 schrieb Ruediger Meier:
Hallo,
Um Brutforce Attacken auf einen Game Server zu analysieren moechte ich bestimmte Pakete aufzeichnen und suche nach einer Loesung, die moeglichst CPU schonend ist.
Im Prinzip tut die folgende Zeile schon das was ich brauche:
$ tcpdump -n -p -A 'dst host $MY_IP and port 27960' |grep "rcon" (Gibt alle Zeilen aus die getestete rcon-Passworter enthalten)
Allerdings ist diese Loesung etwas unschoen da: 1. die zugehoerigen Absender IPs weggegreppt werden (welche ich dann allerdings aus anderen logfiles ablesen kann) 2. die CPU last relativ hoch ist wenn viel Betrieb auf dem Server ist.
Besser waere es in dem tcpdump commando schon mehr auszusortieren. Kann man tcpdump irgendwie direkt anweisen nur Pakete die "rcon" enthalten auszugeben?
Leider kenne ich mich auch nicht sonderlich mit UDP Headern aus. In der Info-Spalte bei ethereal sah ich dass alle Pakete, die ich suche "connectionless" sind, im Gegensatz zu dem meisten restlichen Traffic! Kann man das irgendwie im tcpdump commando benutzen?
Ansonsten habe ich keine groesseren Unterschiede zwischen den gesuchten und den restlichen Paketen entdeckt. Irgendwelche Ideen wonach man noch schauen koennte?
In Hinblick auf die CPU Last: Waere es besser die Pakete mit iptables mitzuloggen? Geht das ueberhaupt?
Das ist denke ich, eine der Aufgaben von Netfilter/iptables. Warum auch im Userspace ein Programm laufen lassen, wenn der Kernel der die Pakete so oder so zu Gesicht bekommt sie auch gleich loggen kann. Zitat:
$ tcpdump -n -p -A 'dst host $MY_IP and port 27960' |grep "rcon" (Gibt alle Zeilen aus die getestete rcon-Passworter enthalten)
Meine Erfahrung mit tcpdump sind gering. Ich vermute Du willst alle Pakete an Port 27960 UDP mitloggen und anschließend auswerten ("rcon"?). Korrigiere mich wenn ich falsch liege. iptables -A INPUT -s $EXTIF -p udp --dport 27960 -j LOG \ --log-prefix "Zugriff auf UDP-Port 27960: " (--log-level 01234567) Fügt im Chain INPUT eine Regel ein die oben genanntes mitlogt. Abhängig vom Loglevel (default 4=warning) und deiner syslog.conf tauchen die Einträge wahrscheinlich in /var/log/messages auf. Den Rest machst Du dann noch mit grep. Zum Einlesen ist diese Buch sehr gut geeignet: http://www.oreilly.de/german/freebooks/linuxfireger/index.html
cu, Ruediger
Gruß Dirk
On Sunday 01 May 2005 15:05, Dirk Abe wrote:
Das ist denke ich, eine der Aufgaben von Netfilter/iptables. Warum auch im Userspace ein Programm laufen lassen, wenn der Kernel der die Pakete so oder so zu Gesicht bekommt sie auch gleich loggen kann.
Ja das denke ich auch aber kann iptables auch in die Daten der Pakete hineinschauen oder kann es standardmaessig nur die header (ENet, IP, udp, etc.) auswerten?
Zitat:
$ tcpdump -n -p -A 'dst host $MY_IP and port 27960' |grep "rcon" (Gibt alle Zeilen aus die getestete rcon-Passworter enthalten)
Meine Erfahrung mit tcpdump sind gering. Ich vermute Du willst alle Pakete an Port 27960 UDP mitloggen und anschließend auswerten ("rcon"?). Korrigiere mich wenn ich falsch liege.
Eben nicht alle sondern nur die, die deren Datenteil (ohne header) mit ff ff ff ff 72 63 6f 6e (siehe meine andere mail) beginnt, wobei "ff ff ff ff" eine Protokoll spezifische Bedeutung hat und "72 63 6f 6e" = "rcon" in ASCII-code.
iptables -A INPUT -s $EXTIF -p udp --dport 27960 -j LOG \ --log-prefix "Zugriff auf UDP-Port 27960: " (--log-level 01234567)
Prinzipiell richtig aber 1. es reicht mir nicht zu sehen DASS Pakete gesendet wurden, sondern ich moechte die kompletten Pakete zur manuellen Analyse abspeichern! Geht das mit iptables? 2. wie gesagt, das waeren viel zu viel Pakete. Ich muss sie nach "rcon" greppen. Dazu fand ich folgende Option fuer iptables: -m string --string "rcon" Allerdings klappt das nicht mit meinem iptables (SuSE 9.1). Man muss es wohl irgendwie patchen (libipt_string.so). Auf SuSE 8.2 und 9.0 ging das wohl von Hause aus so. Also mir waere eine iptables Loesung auch lieber. Im Moment habe ich mir nun diese tcpdump Zeile ausgedacht. $ tcpdump -p -A 'dst host $MY_IP and port 27960 and udp[12:4] = 0x72636f6e' gibt also alle IP-Pakete aus deren udp-Pakete vom 12. bis 15. Byte "72 63 6f 6e" also "rcon" enthalten.
Zum Einlesen ist diese Buch sehr gut geeignet: http://www.oreilly.de/german/freebooks/linuxfireger/index.html
Danke das werde ich mir mal anschauen. Speziell zu "tcpdump 'Protokoll[x:y]'" hat mir das hier weiter geholfen http://www-e.uni-magdeburg.de/steschum/tcpdump.pdf und zum Aufbau der verschiedenen Protokoll header ist hier sehr schoen: http://www.foobar-cpa.de/documents/admin-_-security/script.html#scriptch2.ht... cu, Ruediger
Am Sonntag, 1. Mai 2005 21:56 schrieb Ruediger Meier: [...]
Ja das denke ich auch aber kann iptables auch in die Daten der Pakete hineinschauen oder kann es standardmaessig nur die header (ENet, IP, udp, etc.) auswerten?
[..]
Meine Erfahrung mit tcpdump sind gering. Ich vermute Du willst alle Pakete an Port 27960 UDP mitloggen und anschließend auswerten ("rcon"?). Korrigiere mich wenn ich falsch liege.
Eben nicht alle sondern nur die, die deren Datenteil (ohne header) mit ff ff ff ff 72 63 6f 6e (siehe meine andere mail) beginnt, wobei "ff ff ff ff" eine Protokoll spezifische Bedeutung hat und "72 63 6f 6e" = "rcon" in ASCII-code.
iptables -A INPUT -s $EXTIF -p udp --dport 27960 -j LOG \ --log-prefix "Zugriff auf UDP-Port 27960: " (--log-level 01234567)
Prinzipiell richtig aber
1. es reicht mir nicht zu sehen DASS Pakete gesendet wurden, sondern ich moechte die kompletten Pakete zur manuellen Analyse abspeichern! Geht das mit iptables?
2. wie gesagt, das waeren viel zu viel Pakete. Ich muss sie nach "rcon" greppen. Dazu fand ich folgende Option fuer iptables: -m string --string "rcon" Allerdings klappt das nicht mit meinem iptables (SuSE 9.1). Man muss es wohl irgendwie patchen (libipt_string.so). Auf SuSE 8.2 und 9.0 ging das wohl von Hause aus so.
Brauchst dann wohl einen neuen Kernel. "String" muss dann zusammen mit dem Target Queue verwendet werden. Das betroffene Paket kann dann soweit ich weis durch ein anderes Programm weiterverarbeitet werden. Dazu muss das Modul ip_queue geladen sein. In /proc/sys/net/ipv4/ip_queue_maxlen wird die Queue-Tiefe (?) eingestellt. Der Status wird in /proc/net/ip_queue angezeigt. Wie das Paket dann weiterverarbeitet wird weis ich leider auch nicht.
Also mir waere eine iptables Loesung auch lieber. Im Moment habe ich mir nun diese tcpdump Zeile ausgedacht.
$ tcpdump -p -A 'dst host $MY_IP and port 27960 and udp[12:4] = 0x72636f6e'
gibt also alle IP-Pakete aus deren udp-Pakete vom 12. bis 15. Byte "72 63 6f 6e" also "rcon" enthalten.
Zum Einlesen ist diese Buch sehr gut geeignet: http://www.oreilly.de/german/freebooks/linuxfireger/index.html
Danke das werde ich mir mal anschauen. Speziell zu "tcpdump 'Protokoll[x:y]'" hat mir das hier weiter geholfen http://www-e.uni-magdeburg.de/steschum/tcpdump.pdf und zum Aufbau der verschiedenen Protokoll header ist hier sehr schoen: http://www.foobar-cpa.de/documents/admin-_-security/script.html#scrip tch2.html
cu, Ruediger
Gruss Dirk
participants (2)
-
Dirk Abe
-
Ruediger Meier