.... We zullen hier enkele expressies geven die als filters kunnen fungeren waardoor de hoeveelheid gegenereerde gegevens behapbaar blijft.
Om deze expressies te kunnen begrijpen laten we hier eerst het formaat van een TCP-pakketje zien.
TCP (RFC793)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgement Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Offset | Reserved |U|A|P|R|S|F| Window |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
We zien dat het 13de byte de vlaggen bevat die het type pakketje bepaalt (SYN, FIN etc.). Met deze kennis en het gebruik van de AND-operatie (&) kunnen we vervolgens bits maskeren en daarmee expressies opbouwen als:
$ tcpdump ' tcp[13] & 7 != 0 and dst 192.168.255.20 ' >/tmp/out7
Waardoor alleen nog pakketjes worden doorgelaten waarvan het R, S of F-bit actief is (het masker is hier 00000111) en die de machine 192.168.255.20 als bestemming hebben.
Met de volgende expressie:
$ tcpdump ' tcp[13] & 1 != 0 and dst 192.168.255.20 ' >/tmp/out1
detecteren we FIN-pakketten (het masker is 00000001). Dit kan handig zijn om te detecteren of nmap actief is met de optie -sF. En met:
$ tcpdump ' tcp[13] & 2 != 0 and dst 192.168.255.20 ' >/tmp/out2
krijgen we alleen pakketten met het SYN-bit actief, om zo te achterhalen of iemand met de optie - sS aan het snuffelen is.
Voor deze laatste variant (optie -sS) zijn er speciale detectieprogramma's verkrijgbaar.
OmniPeek
Mocht je nu gebruik maken van Omnipeek, dan kun je dezelfde informatie verkrijgen door een expert filter te maken met de volgende criteria:
Protocol Filter
Protocol: TCP
AND
Value Filter
Length : 1 byte
Offset : 47
Mask : 0x07
Signed : not checked
Network byte order : not checked
Operator : !=
Value : 0
Of je kunt natuurlijk ook gewoon even mijn filter importeren. Deze kun je downloaden door deze link te gebruiken.
Dit filter werkt exact hetzelfde als de tcpdump variant. Er wordt namelijk binnen TCP pakketten gekeken naar een bepaalde positie welke door middel van de offset wordt aangegeven. Daarna worden de bits gemaskeerd die interessant zijn. Hierdoor worden alleen de laatste 3 bitjes van de tcp control byte gefilterd. En de waarde hiervan mag niet 0 zijn. Zo bereik je hetzelfde resultaat.