original in es Danilo Lujambio
es to en Iván Rojas Aguilar
es to en Javier Palacios
en to en Lorne Bailey
en to nl Tom Uijldert
Voor dit doel zijn er meerdere scanners te verkrijgen maar dit artikel gaat alleen in op nmap. nmap is één van de meest complete in dit genre.
nmap stelt de systeembeheerder in staat zijn netwerken af te tasten om te kunnen zien welke servers er draaien en welke diensten deze aanbieden. Hiervoor heeft nmap een aantal technieken in huis. Dit artikel zal op een aantal daarvan dieper ingaan waarmee tegelijk aspecten van het TCP protocol, hopelijk op een leerzame manier, worden behandeld.
De aanpak in dit artikel zal eruit bestaan dat het normale gebruik van nmap wordt getoond om zo meer informatie over een systeem te verkrijgen. Tegelijkertijd zal het laten zien wat voor sporen dit aftasten achterlaat op de machine die wordt onderzocht.
nmap kun je ophalen bij www.insecure.org. Geef hierna de volgende commando's om het geheel te installeren:
$ tar zxvf nmap-2.30BETA17.tgz $ cd ....../nmap-2.30BETA17/ $ ./configure $ make $ make installDe uitvoer van nmap bestaat meestal uit een lijst van "belangwekkende" (actieve) poorten op de machine die is besnuffeld. Deze geven je de naam van de dienst, de status en het gebruikte protocol.
socket(), bind()
en listen()
).
connect()
-functie. Hiermee wordt een SYN
segment naar
de server gestuurd met daarin het initial sequence number dat de client zal
gebruiken voor het versturen van data over de connectie. Deze SYN
bevat
meestal IP-informatie, TCP-informatie en mogelijk nog andere TCP-opties.
ACK
en een
SYN
met daarin zijn sequence number (in hetzelfde TCP-
pakketje).
ACK
op reageren.
We zullen eens gaan kijken naar het resultaat wanneer we nmap laten draaien met de optie -sT, waarbij op de te besnuffelen machine tcpdump draait. nmap draait op machine 192.168.255.20 en onderzoekt machine house2.xxx.xxx.xxx via Ethernet.
1) 08:24:18.393108
192.168.255.20.1024 house2.xxx.xxx.xxx.653: S
2632227152:2632227152(0) win 16060 < mss
1460,sackOK,timestamp 232602[|tcp] (DF) 2) 08:24:18.393167 house2.xxx.xxx.xxx.653 192.168.255.20.1024: R 0:0(0) ack 2632227153 win 0 3) 08:24:18.393227 192.168.255.20.1025 house2.xxx.xxx.xxx.6141: S 2644226118:2644226118(0) win 16060 < mss 1460,sackOK,timestamp 232602[|tcp] (DF) 4) 08:24:18.393258 house2.xxx.xxx.xxx.6141 192.168.255.20.1025: R 0:0(0) ack 2644226119 win 0 5) 08:24:18.453343 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: S 2640612362:2640612362(0) win 16060 < mss 1460,sackOK,timestamp 232608[|tcp] (DF) 6) 08:24:18.453542 house2.xxx.xxx.xxx.pop3 192.168.255.20.1298: S 1658259980:1658259980(0) ack 2640612363 win 16060 < mss 1460,sackOK,timestamp 243353[|tcp] (DF) 7) 08:24:18.458667 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3:. ack 1 win16060<nop,nop,timestamp 232609 243353 (DF) 8) 08:24:18.461280 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: F 1:1(0) ack 1 win 16060 < nop,nop,timestamp 232609 243353 (DF) |
Dit voorbeeld liet zien hoe nmap heeft gedetecteerd dat poort 110 (pop3) op machine house2 actief is.
Zoals reeds gezegd is een dergelijke snuffelactie gemakkelijk te detecteren door de log die is achtergelaten in bestand /var/log/messages (hoewel dit afhangt van de manier waarop syslog is ingesteld). Wat er gebeurt in regels 5 en 8 geeft de volgende uitvoer:
May 6 08:24:01 house2 in.pop3d[205]: connect from [email protected]
Laten we dit weer eens op dezelfde manier bekijken:
1) 22:25:45.856936 192.168.255.20.40175
house2.tau.org.ar.946: S 1292785825:1292785825(0) win
3072 |
3) 22:25:45.970365
192.168.255.20.40175 house2.tau.org.ar.pop3: S
1292785825:1292785825(0) win 3072 4) 22:25:45.976022 house2.tau.org.ar.pop3 192.168.255.20.40175: S 185944428:185944428(0) ack 1292785826 win 16080 < mss 536 (DF) 5) 22:25:45.979578 192.168.255.20.40175 house2.tau.org.ar.pop3: R 1292785826:1292785826(0) win 0 |
Dit laat geen sporen achter in het bestand /var/log/messages, zoals in het vorige voorbeeld.
Er zijn drie varianten op deze vorm van aftasten: -sF, -sX en -sN. We zullen hier weer een voorbeeld analyseren met de optie -sF.
1) 06:50:45.643718 192.168.255.20.35600
casahouse.tau.org.ar.864: F 0:0(0) win 2048 |
3) 06:50:47.933227 192.168.255.20.35600 >
house2.tau.org.ar.pop3: F 0:0(0) win 2048 |
Om deze expressies te kunnen begrijpen laten we hier eerst het formaat van een TCP-pakketje zien [2].
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 | Reserver |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/out7Waardoor 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/out1detecteren 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/out2krijgen 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 [3].