Thursday, 11 December 2008

Juletip 11: Ping, ping, ping ringer juleklokkerne ind til time

« Juletip 10: Nmap the book | Main | Juletip 11-2: glemte lige fping! »

Ping, ping ping ping ping - kender du Ping?

Her tænker jeg ikke på bogen The Story of Ping, den har jeg aldrig læst. Næh, jeg tænker på ping, ping6, nsping, hping, dhcping, arping og alle de andre ping programmer. Nå - dem kender du ikke?

De er ellers nemme at finde, se eksempelvis fra Macports, hvor en del af dem findes:

hlk@bigfoot:hlk$ sudo port search ping
octave-mapping math/octave-mapping 1.0.5 Simple Mapping functions.
arping net/arping 2.05 utility to find out if a MAC address is already taken on a LAN
dhcping net/dhcping 1.2 Send DHCP request to DHCP server for monitoring purposes
echoping net/echoping 5.2.0 small program to test approximate network performance
fping net/fping 2.4b2 A scriptable ping program to check if multiple hosts are up
hping2 net/hping2 rc3 a network tool
hping3 net/hping3 20051105 hping is a command-line oriented TCP/IP packet assembler/analyzer
http_ping net/http_ping 29jun2005 Sends HTTP requests every few seconds and times how long they take
mrtg-ping-probe net/mrtg-ping-probe 2.2.0 A ping probe adapter for mrtg
nsping net/nsping 0.8 DNS ping
smokeping net/smokeping 2.3.5 A deluxe latency logging and graphing system.
tcping net/tcping 0.1 ping on TCP-level
p5-net-ping-external perl/p5-net-ping-external 0.12 Cross-platform interface to ICMP 'ping' utilities
rb-net-pingsimple ruby/rb-net-pingsimple 0.3.0 A simple Ruby interface to the 'ping' command
xping x11/xping 1.9 'ping' an Xserver

Man hvad skal man med alle de ping programmer?

Jo, der findes jo ping som blot bruges til at sende ICMP ECHO - og hedder det samme på Windows og Unix (i modsætning til traceroute på Unix der hedder tracert på Windows). Det program kender de fleste og det er meget nyttigt - man checker om der er en maskine der svarer på en IP.

Dertil kommer ping6 som på de fleste platforme bruges til at sende ICMPv6 pakker, med samme formål som ping til IPv4. Bemærk at på Solaris var kommandoen ping, uanset om det er til IPv4 eller IPv6.

De andre ping programmer udfører nogenlunde det samme, men kan det med andre protokoller eller andre formål.

Eksempelvis kan man med arp-ping, arping ping'e på MAC niveau for at finde ud af om en given MAC adresse er i brug, før man spoofer, eller måske fordi man vil spoofe en adresse :-)

Det var under ICMP/IP niveau men også på højere niveauer findes ping programmer til protokoller som HTTP (http_ping), DNS (nsping), DHCP (dhcping) og TCP (tcping). Hvilket er meget nyttigt når man skal undersøge om et system med en given service er oppe. Det tillader ofte at man kan undersøge services, selvom der er en firewall foran den pågældene service - fordi servicen er beregnet til at svare på request der er formuleret korrekt.

Eksempel: services som HTTP der benytter TCP protokollen forventer at der etableres en TCP forbindelse og derfor vil en port svare på TCP SYN pakker, for det er en del af TCP protokollen - et aktivt svar på en pakke. TCP ping kan derfor sende en TCP pakke med SYN flaget sat.

hlk@bigfoot:hlk$ tcping -h 127.0.0.1 -p 80 -c 2
PING 127.0.0.1:80
connected to 127.0.0.1:80, seq=0 time=0.76 ms
connected to 127.0.0.1:80, seq=1 time=0.37 ms
--- 127.0.0.1:80 ping statistics ---
2 connects, 2 ok, 0.00% failed
round-trip min/avg/max = 0.4/0.6/0.8 ms

De samme pakker i tcpdump:

hlk@bigfoot:hlk$ sudo tcpdump -ni lo0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 96 bytes
14:52:02.311159 IP 127.0.0.1.49389 > 127.0.0.1.80: S 3807844031:3807844031(0) win 65535
14:52:02.311230 IP 127.0.0.1.80 > 127.0.0.1.49389: S 1257882453:1257882453(0) ack 3807844032 win 65535
14:52:02.311243 IP 127.0.0.1.49389 > 127.0.0.1.80: . ack 1 win 65535
14:52:02.311266 IP 127.0.0.1.80 > 127.0.0.1.49389: . ack 1 win 65535
14:52:02.311293 IP 127.0.0.1.49389 > 127.0.0.1.80: F 1:1(0) ack 1 win 65535
14:52:02.311313 IP 127.0.0.1.80 > 127.0.0.1.49389: . ack 2 win 65535
14:52:02.311361 IP 127.0.0.1.80 > 127.0.0.1.49389: F 1:1(0) ack 2 win 65535
14:52:02.311382 IP 127.0.0.1.49389 > 127.0.0.1.80: . ack 2 win 65535
14:52:03.311717 IP 127.0.0.1.49390 > 127.0.0.1.80: S 550089045:550089045(0) win 65535
14:52:03.311800 IP 127.0.0.1.80 > 127.0.0.1.49390: S 1278347862:1278347862(0) ack 550089046 win 65535
14:52:03.311825 IP 127.0.0.1.49390 > 127.0.0.1.80: . ack 1 win 65535
14:52:03.311847 IP 127.0.0.1.80 > 127.0.0.1.49390: . ack 1 win 65535
14:52:03.311890 IP 127.0.0.1.49390 > 127.0.0.1.80: F 1:1(0) ack 1 win 65535
14:52:03.311931 IP 127.0.0.1.80 > 127.0.0.1.49390: . ack 2 win 65535
14:52:03.312105 IP 127.0.0.1.80 > 127.0.0.1.49390: F 1:1(0) ack 2 win 65535
14:52:03.312141 IP 127.0.0.1.49390 > 127.0.0.1.80: . ack 2 win 65535

Nemt, og det svarer til hvad vi gjorde i tcp traceroutes tidligere i julekalenderen. Vi sender altså pakker som SKAL tillades hele vejen for at den pågældende service virker.

Alt er godt med TCP - men ikke med UDP!

Når vi bruger en portscanner mod UDP porte med bagvedliggende services får vi problemer. En service på UDP svarer nemlig ikke altid, faktisk meget sjældent på et portscan request. Til gengæld vil en firewall foran en server med UDP services æde alle de requests på porte som er blokeret i henhold til reglerne. Vi får altså INGEN svar på porte som er åbne og ingen svar på porte bagved en firewall som er blokeret, øv.

Det er her de andre ping programmer kommer ind. Nsping eksempelvis kan ikke bare sende et UDP portscan request, nej den laver sgu et rigtigt DNS query som de fleste navneservere vil acceptere som et validt og gyldigt request. Når man således forespørger med en korrekt pakke vil der blive sendt et fint svar tilbage :-)

hlk@bigfoot:hlk$ nsping
nsping [ -z <zone> | -h <hostname> ] -p <port> -t <timeout>
-a <local address> -P <local port>
-T <type> <-r | -R, recurse?>
hlk@bigfoot:hlk$ nsping -z security6.net 91.102.91.17
NSPING 91.102.91.17 (91.102.91.17): Domain = "security6.net", Type = "IN A"
- [ 0 ] 93 bytes from 91.102.91.17: 272.139 ms [ 0.000 san-avg ]
- [ 1 ] 92 bytes from 91.102.91.17: 349.270 ms [ 310.704 san-avg ]
- [ 2 ] 93 bytes from 91.102.91.17: 2168.169 ms [ 929.859 san-avg ]
- [ 3 ] 93 bytes from 91.102.91.17: 1392.198 ms [ 1045.444 san-avg ]
- [ 4 ] 93 bytes from 91.102.91.17: 392.169 ms [ 914.789 san-avg ]
- [ 5 ] 92 bytes from 91.102.91.17: 124.039 ms [ 782.997 san-avg ]
^C
Total Sent: [ 6 ] Total Received: [ 6 ] Missed: [ 0 ] Lagged [ 0 ]
Ave/Max/Min: 782.997 / 2168.169 / 124.039

Så det er nemt at sende gyldige request og det giver altså meget mere bonus end en nmap -sU over internet - den virker kun på LAN, hvor maskinerne med lukkede porte svarer benægtende med lukkede porte og dem der ikke svarer derfor må antages at være åbne eller filtrerede. Tilsvarende kan dhcping sende DHCP pakker til en DHCP server og får et svar.

Disse prober som vi kunne kalde alle de manger typer trafik vi kan sende kan altså bruges både til gode og slemme formål. Det kunne være fordi man ønsker at finde services der er åbne så man kan hacke dem, men det kan også være til gode formål.

Et af de rigtigt gode formål er at demonstrere svartider eller kvalitet af en linie og her kommer Smokeping ind i billedet. Smokeping er et gude program der indeholder mulighed for at sende et væld af prober og derved probe DNS, SMTP, SNMP og ved brug af RRDTool kan der laves gode grafer over resultaterne. Se bare på min Smokeping som jeg bruger til at checke min egen linie og lidt andre servere.


smokeping

Smokeping viser med farverne om der tabes pakker, min er helt grøn så der er ikke tabt pakker og røgen viser distributionen i svartid - kort søjle lige med meget lille spredning i svartid for de 20 prober den sender hvert 5. minut og høj er stor spredning.

Vi har således rig mulighed for at teste vores infrastruktur manuelt eller automatisk med Smokeping og venner. Så gør det! :-)

PS Send gerne forslag til emner til mig, min fantasi rækker ikke så langt - selvom jeg VED der er mange ting jeg burde skrive om :-)


Posted by hlk at CET 13:12 11/12/2008 in Toolbox entries

 

[Trackback URL for this entry]

Your comment:

(not displayed)
 
 
 

Live Comment Preview:

 
« september »
mationtofr
  12345
6789101112
13141516171819
20212223242526
27282930