Comandes de monitorització

Aquí es mostren les comandes de l'entorn de consola i es farà referència a algunes eines de l'entorn gràfic.

ping

  • La comanda ping s'utilitza com a eina de diagnostic per tal de saber quan un host és accessible o no des de la nostra màquina.
  • La comanda ping utilitza el protocol ICMP enviant un paquet Echo Request ICMP i esperant una resposta Echo Response ICMP.
  • Al paquet Echo Request sovint se l'anomena "Ping" i al paquet Echo Response "Pong" en analogia amb el "Ping-Pong".
  • Un exemple d'ús: ping -c 4 www.google.es.
  • Utilitzem el paràmetre -c per limitar el nombre de paquets ping que enviem. En Linux, la comanda ping no té hímits a l'enviar paquets. Si no ho limitem em de pressionar les tecles Ctrl+C per aturar la comanda ping i poder veure les estadístiques.
  • També ens serveix per a conèixer l'adreça IP d'una màquina a partir del seu nom.
  • Podem utilitzar la comanda ping directament amb IPs. Però en aquest cas no obtindrem el nom de màquina.
  • Es pot fer un ping a totes les màquines de la xarxa utilitzant l'adreça de broadcast.
  • També es pot fer un ping a la'dreça de bradcast de multicast: ping 224.0.0.1
    • Multicast: És l'enviament de la informació en una xarxa a múltiples destinataris simultàniament, usant l'estratègia més eficiente per a l'enviament de missatges sobre cada enllaç de la xarxa solament una vegada i creant còpies quan els enllaços en el destí es divideixen. En exemple és la TV via internet. En oposició a multicast, els enviaments d'un punt a un altre en la xarxa s'anomenen unicast i els enviaments a tots els nodes en una xarxa s'anomenena broadcast.
    • Grups multicast: Les adreces IP estan dividides en classes. Les IPs de clase D són les IP Multicast i s'identifiquen de la resta perquè són aquelles IP que comencen per 1110. Els 28 bits restants d'una IP multicast, identifiquen el grup multicast. Un grup multicast és el conjunt de màquines que han de rebre un paquet multicast.Les màquines que volen rebre un paquet multicast d'un grup específic, s'han d'unir a aquest grup.
  • La comanda ping també s'ha utilitzat per a usos fraudulents. Hi ha dos usos molt coneguts:
    • Ping of death (POD): El ping de la mort explota un error (bug) que feia que moltes màquines deixessin de funcionar a l'enviar un paquet IP de més de 65,536 bytes. Era un bug fàcil d'explotar però des del 1997-98 que es va començar a solucionar aquest error i actualment és un error que ha passat a la història.
    • Ping flooding: És un atac de denegació de servei (Deny of Service DOS) amb el qual s'inunda una màquina de tràfic ping de tal manera que el tràfic normal deixa de funcionar correctament.

arp

  • El protocol ARP (Address Resolution Protocol) s'encarrega de traduir adreces IP a adreçes MAc al nivell d'enllaç en les xarxes LAN.
  • ARP és un protocol que funciona que utilitza missatges de difusió a tota la xarxa per descobrir quin node de la xarxa té la IP demanada i aconseguir la seva MAC. Un cop aconsegueix la MAC, l'emmagatzema a la taula ARP.
  • Podem consultar aquesta taula amb la comanda: arp
  • Per afegir una entrada a la taula ARP: sudo arp -s 192.168.1.35 00:50:04:62:F7:23
  • Podeu obtenir totes les MACs de la xarxa i omplir la taula ARP amb la comanda nmap. Suposem la xarxa de tipus C 192.168.1.0, executem: sudo nmap 192.168.1.1-255
  • Un cop finalitzi la comanda tornem a consultar la taula ARP
NOTA: Com veieu, aquesta comanda, conjuntament amb la comanda nmap, pot ser molt útil per tal d'aconseguir totes les MACs dels PCs d'una xarxa.

arping

  • Arping és una comanda molt similar a ping però que utilitza el protocol ARP en comptes del ICMP.
  • Com a conseqüència aquesta comanda només es pot utilitzar entre màquines de la mateixa xarxa local.
  • Igual que ping envia un paquet ARP REQUEST. Exemple: arping -c 4 192.168.0.10
  • El funcionament és molt similar a la comanda ping. El paràmetre c és igual i l'opció per defecte també és il•limitats "pings" que els podem aturar amb la combinació de tetcles Ctrl+C.
     nmap
  • Nmap ("Network Mapper") és un escaner de xarxes que serveix per explorar i auditar la seguretat de les xarxes.
  • Les utilitats de nmap són moltes. Algunes idees:
    • Conèixer els ports que estan oberts en un ordinador.
    • Saber si una màquina està utilitzant un firewall o no.
    • Conèixer la MAC d'una o múltiples màquines.
    • Conèixer el fabricant de la targeta de xarxa d'un ordinador.
    • Identificar màquines dins d'una xarxa.
    • Identificar el sistema operatiu d'una màquina de la xarxa.
  • Exemple d'ús: sudo nmap localhost
  • Podem encara obtenir més informació amb el paràmetre -A: sudo nmap -A www.google.com. Com veieu podem obtenir el nom del host, les versions dels programes que s'estan executant en cada port, el sistema operatiu de la màquina, etc. Ho podem provar amb una màquina més famosa:
  • Algunes màquines es poden resistir més a ser escanejades (firewalls i altres proteccions). Nmap té paràmetres que poden "eludir" aquestes proteccions. Si per exemple provem sudo nmap www.la-moncloa.es ens diu que el Host seems down (sembla que la màquina està caiguda). Podeu provar amb sudo nmap -P0 www.la-moncloa.es.
  • Nmap permet escanejar subxarxes senceres o subrangs: sudo nmap 192.168.1.1/24
  • Detecció del sistema operatiu (OS Detection): sudo nmap -O -v scanme.nmap.org
  • Per fer un escaner de ports UDP: sudo nmap -sU localhost -p 53
  • Escanejar tots els ports: sudo nmap -p- www.prova.com
  • L'últim exemple és la típica sortida resultant d'executar nmap en una xarxa casera de classe C amb un sol PC connectat i un router que dóna accés a Internet. Si la xarxa és molt gran, pot ser interessant guardar el resultat de nmap a un fitxer utilitzant una redirecció: sudo nmap 192.168.1.1/24 > xarxa.txt
  • Una alternativa a nmap és Scanrand de Paketto Keiretsu.

NOTA: Executar nmap amb permisos de superusuari o sense permisos pot modificar els resultats. Per exemple, per obtenir les adreces MAC només es pot amb permisos de superusuari.

     traceroute
  • Traceroute és una comanda que s'utilitza per determinar quina ruta segueixen els paquets IP (per quins gateways o routers passan) per tal d'arribar a una màquina concreta.
  • Exemple: traceroute www.google.es.
  • Si en la resposta surten asteriscs (*), aquests representen màquines de la ruta que per protecció o errors de protocol no es poden mostrar.
  • Sovint els asterisc es poden solucionar executant traceroute com a superusuari: sudo traceroute www.google.es
  • Els paquets no sempre segueixen el mateix camí per arribar a un destinatari.
  • Hi ha algunes utilitats relacionades amb traceroute que poden ser interessants:
    • Yougetsignal: Utilitza traceroute junt amb Google Maps per tal de dibuixar una ruta física entre dues màquines en un mapa de Google.
    • Visualiptrace

tracepath

  • És una versió més senzilla de traceroute:
  • Per exemple: tracepath www.google.es
Icona iDevice Activitat ping
Exemple d'ús de la comanda ping per entendre millor el funcionament del protocol ARP

Si consultem la taula arp d'una màquina (IP:192.168.0.7) dins d'una xarxa local de clase C 192.168.0.0 obtindriem, per exemple:

Address HWtype HWaddress Flags Mask Iface
192.168.0.5 ether 00:30:05:4C:90:1C C eth0
192.168.0.1 ether 00:13:49:87:40:66 C eth0

Si executem:
$ ping 192.168.0.10

PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=10.7 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.289 ms
64 bytes from 192.168.0.10: icmp_seq=3 ttl=64 time=0.291 ms
64 bytes from 192.168.0.10: icmp_seq=4 ttl=64 time=0.302 ms

.............

Si us fixeu, el primer paquet ping tarda força més en respondre (10.7ms) que és unes 37 vegades més que el que tarden els següents paquets.

Recordeu que estem fent un ping a una màquina de la mateixa xarxa.

Si consultem ara la taula arp:

Address HWtype HWaddress Flags Mask Iface
192.168.0.5 ether 00:30:05:4C:90:1C C eth0
192.168.0.1 ether 00:13:49:87:40:66 C eth0
192.168.0.10 ether 00:48:54:8D:58:47 C eth0

Veiem que hi ha una nova entrada a la taula d'ARP. El primer paquet tarda més temps perquè ha de traduir l'adreça IP que li proporcionem (192.168.1.10) per la corresponent adreça MAC (00:48:54:8D:58:47).

Per fer aquesta traducció s'executa el protocol ARP un cop, i una vegada resolta la MAC s'emmagatzema a la taula local ARP. Un cop emmagatzemada ja no cal fer més la traducció IP-->MAC i per això la resta de paquets o següents pings ja no tardaran tant:

$ ping 192.168.0.10

PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.

64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=0.234 ms

64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.291 ms

64 bytes from 192.168.0.10: icmp_seq=3 ttl=64 time=0.258 ms


netstat

  • Netstat (network statistics) és una comanda que ens mostra les connexions de xarxa, les taules de rutes i altres estadístiques de la xarxa. Hi ha 6 modes d'utilitzar netstat:
    • Taula de rutes (paràmetre -r o --route): Mostra la taula de rutes.
    • Taula de interfícies (NICS) (paràmetre -i o --interfaces): Mostra la taula d'interfícies de xarxa (NICs).
    • Estadístiques (paràmetre -s o --statistics): Mostra estadístiques de l'ús de la xarxa per protocols.
    • Masquerade|NAT (paràmetre -M o --masquerade): Mostra connexions emmascarades o NAT (només si el sistema suporta masquerade).
    • Groups (paràmetre -g o --groups): Mostra grups multicast.
    • Llista de Sockets oberts (sense cap dels paràmetres anteriors).
  • Els modes que més ens interessen són els últims ja que el mode taula de rutes: netstat -r és equivalent a la comanda route.
  • I el mode taula d'interfícies: netstat -ie és equivalent a la comanda ifconfig.
  • L'opció d'estadístiques pot ser interessant: netstat -s
  • En sistemes normals (que no siguin router amb NAT activat), no podrem consultar NAT: netstat -M. El missatge de resposta és netstat: no support for `ip_masquerade' on this system.
  • Finalment veiem el mode per defecte de netstat (sockets oberts): netstat
  • La sortida de netstat per defecte acostuma a ser bastant llarga ja que mostra absolutament tots els sockets (sovint hem de pàginar amb nestat | more si volem veure tota la sortida).
  • Normalment (si treballem en xarxes i no en programació Linux) els sockets del protocol unix no ens interessen. Podem executar: netstat -tu i només ens mostrarà les connexions establertes dels protocols TCP i UDP..
  • Els paràmetres de protocols són (segons netstat --help):
    • -t|--tcp: TCP
    • -u|--udp: UDP
    • -w|--raw: RAW
    • -x|--unix}: unix
    • --ax25
    • --ipx
    • --netrom
    • El paràmetre -l ens permet a més consultar les connexions que estan obertes (LISTENING): netstat -tul
    • Alguns paràmetres només obtindran tota la informació necessària si executem netstat com a superusuari (root). És el cas del paràmetre -p que ens permet obtenir els pids dels processos linux: sudo netstat -tlp
    • Finalment, només comentar que alguns pàrametres controlen si treballem amb númerics o amb noms:
      • -n, --numeric don't resolve names
      • --numeric-hosts don't resolve host names
      • --numeric-ports don't resolve port names
      • --numeric-users don't resolve user names
  • Estats TCP:
    • ESTABLISHED: Connexió establerta.
    • SYN_SENT: El socket està intentant establir de forma activa una connexió.
    • SYN_RECV: S'ha rebut una petició de connexió des de la xarxa
    • FIN_WAIT1: El socket està tancat i la connexió s'està apagant.
    • FIN_WAIT2: El socket està tancat i la connexió està esperant l'apagament de la connexió remota.
    • TIME_WAIT: El socket està esperant la recepció de paquets de la xarxa tot i haver-se apagat la connexió.
    • CLOSED: El socket està apagat.
    • CLOSE_WAIT: La connexió remota s'ha apagat i s'està esperant que el socket es tanqui.
    • LAST_ACK: La connexió remota s'ha apagat i el socket està apagat però en espera d'un acknowledgement.
    • LISTEN: El socket està a l'espera de peticions de connexió.
    • CLOSING: Els dos sockets estan tancats però encara no s'han rebut totes les dades.

  • Cal recordar que les traduccions de ports les agafa del fitxer /etc/services i els noms de màquina de DNS o del fitxer /etc/hosts.
  • Si volem obtenir ajuda sobre els diferents paràmetres i opcions podem executar: netstat --help
  • Una utilitat típica de nestat és identificar quin procés/aplicació està utilitzant un port concret de comunicacions.
  • Per exemple, podem consultar amb netstat els processos que estan utilitzant el port 80.
  • Les comandes possibles podrien ser:
    • netstat -lnp | grep '0.0.0.0:80'
    • netstat -lnp | grep '80'
    • sudo netstat -lnp | grep ":::80"
    • sudo netstat -lnp | grep apache
  • Si no encertem el filtre adequat (comanda grep) sempre podem mostrar tots els ports i processos amb la següent comanda: netstat -A inet -lnp
     tcpdump
  • Tcpdump és una eina de xarxa que ens permet fer un volcat de tot el tràfic que passa per una targeta de xarxa.
  • Tcpdump permet tant capturar el tràfic que li correspon a la màquina on s'executa, com el tràfic de la xarxa Local (promiscuous mode).
  • Tal i com podeu consultar a la secció ifconfig el mode promiscu s'activa amb la comanda ifconfig.
  • A vegades la comanda ifconfig s'ha reportat que falla al mostrar l'estat PROMISCUOUS. Podem utilitzar la comanda alternativa: ip link show
  • En veritat per executar tcpdump no cal posar la targeta en mode promiscu. Necessitem permisos de root per executar tcpdump perquè activa ell mateix el mode promiscu (si qualsevol usuari d'una màquina multiusuari pogués executar tcpdump, podria capturar el tràfic de la resta d'usuaris).
  • Tcpdump per defecte escolta la interfície eth0
  • Podem escoltar altres interfícies amb el paràmetre -i: sudo tcpdump -i lo
  • Tcpdump només mostra la informació de les capçaleres (no mostra pas les dades dels paquets).
  • Si volem veure les dades em d'utilitzar el paràmetre -X. Per exemple la captura d'uns pings: sudo tcpdump icmp -i lo -X
  • Podr eu observar que les dades són sempre les mateixes en el cas d'un ping.
  • Filtres:
    • type [host|net|port]: POdem filtrar segons una maquina en particular [host], rangs de xarxa [net] o ports [port].
    • dir [srt|dst|src or dst|src and dst]: Segons l'origen [src] o destinació de la informació.
    • proto [tcp|udp|ip|ether]: Segons el protocol.
    • Els filtres es poden combinar utilitzant expressions lògiques (or, and...).
  • Sortida de la comanda:
    • La estructura de la sortida de la comanda tcpdump és la següent: src > dst: flags [dataseq ack window urgent options]
    • Exemple: 15:23:44.772291 IP 192.168.1.17.52798 > 85.Red-83-37-170.dynamicIP.rima-tde.net.65000: . ack 1791 win 7851
      • src: Adreça i port d'origen.
      • dst: Adreça i port de destinació
      • flags: [Flags] de la capçalera TCP.
      • dataseq: Número de seqüència del primer byte de dades del segment TCP.
      • ack: Indica el següent número de següència.
      • window: Mida de la finestra de recepció.
      • urgent: Marca si hi ha dades urgents
      • options: Indica l'existència d'opcions.
  • Exemples:
    • Capturar tràfic segons la màquina origen del paquet (Segons la IP): sudo tcpdump src host 192.168.3.1
    • Capturar tràfic segons la màquina origen del paquet (Segons la MAC): sudo tcpdump ether src 50:43:A5:AE:69:55
    • Capturar tràfic que sigui origen o destinació en una màquina concreta: sudo tcpdump host 192.168.3.2
    • Capturar tràfic amb destinació/origen a un rang de xarxa: sudo tcpdump dst net 192.168.3.0, sudo tcpdump src net 192.168.3.0 mask 255.255.255.240 o sudo tcpdump src net 192.168.3.0/28
    • Capturar tràfic amb origen o destinació a un port concret: sudo tcpdump dst port 23 o sudo tcpdump src port 23
    • Capturar tràfic tant origen com destinació: sudo tcpdump port 110
    • Capturar paquets segons el seu protocol: sudo tcpdump ip, sudo tcpdump ip proto \\udp, sudo tcpdump udp, sudo tcpdump icmp
    • Capturar el tràfic web: sudo tcpdump tcp and port 80
    • Capturar les peticiones de DNS: sudo tcpdump udp and dst port 53
    • Capturar el tràfic de telnet o SSH: sudo tcpdump tcp and \(port 22 or port 23\)
    • Capturar tot el tràfic excepte el web: sudo tcpdump tcp and not port 80
    • Mostrar les MAC amb tcpdump (en comptes de les adreces IP): sudo tcpdump -e -n -i eth0
    • Mostrar els paquets ARP amb les seves MAC i els ping: sudo tcpdump -ennqti eth0 \( arp or icmp \)
    • Recollir MACS a partir de l'arrancada de xarxa: sudo tcpdump -qtel broadcast and port bootpc > /tmp/mac.list i iniciar l'arrancada de xarxa de les màquines de les quals es vol recollir la MAC. Després podem executar: sudo perl -ane 'print "\U$F[0]\n"' /tmp/mac.lis|sort|uniq per tal d'obtenir la llista de MACs.
    • Escoltar totes les interfícies de xarxa: tcpdump -i any not port 22
NOTA: Una de les confusions més comunes és pensar que una xarxa Ethernet amb un Switch és un medi compartit i que simplement amb activar el modebpromiscu podem capturar tot el tràfic de la xarxa. Això no és així ja que realment els switchs utilitzen el protocol ARP i les adreces MAC per tal de comunicar un port d'entrada amb el seu corresponent port de sortida sense enviar les dades a la resta de ports. Aquesta és la raó per la qual si posem la targeta en mode promiscu els únics paquets que detectem són aquells paquets que són de BROADCAST.
Icona iDevice Activitat tcpdump
Comprovació que els protocols d'accés remot com TELNET (protocol no xifrat) són insegurs usant tcpdump

 

Instal·leu un servidor de telnet a les vostres màquines

$ sudo apt-get install telnetd

Un cop instal.lat, amb dos ordinadors feu el següent. En una terminal obriu una connexió remota amb telnet:

$ telnet ip_maquina_remota

I en un altre terminal executeu el següent:

$ sudo tcpdump -X port 23

Ara podeu comprovar que tot el que escriviu a telnet es pot capturar.

Si a la màquina remota executeu:

$ hola
-bash: hola: command not found

Comprovareu com el text es pot llegir a la finestra on teniu executant-se tcpdump:

......................
12:13:15.859098 IP acacha.dyndns.org.telnet > casa-linux.local.52390: P 7:39(32) ack 6 win 1448
0x0000: 4510 0054 d3d8 4000 4006 e365 c0a8 0103 E..T..@.@..e....
0x0010: c0a8 0102 0017 cca6 2241 5d60 2dca e78f ........"A]`-...
0x0020: 8018 05a8 0437 0000 0101 080a 1a7c 399f .....7.......|9.
0x0030: 0035 4475 2d62 6173 683a 2068 6f6c 613a .5Du-bash:.hola:
0x0040: 2063 6f6d 6d61 6e64 206e 6f74 2066 6f75 .command.not.fou
0x0050: 6e64 nd


Icona iDevice Activitat Wireshark
Comprovació que el protocol HTTP sense SSL és insegur usant wireshark

En primer lloc cal tenir un servidor web instal·lat amb una pàgina web que demani usuari i contrasenya per accedir-hi de tipus http_auth_basic. Si no en teniu el professor us en proporciorarà una.

Perquè us feu una idea la finestra de sol·licitud d'usuari i password ha de ser similar a aquestes segons s'use iexplorer o firefox:

Ara es tracta d'executar wireshark (abans anomenat ethereal) per comprovar que les contrasenyes que viatgen per Internet sense xifrar són molt insegures.

Obrim Ethereal com a superusuaris: sudo wireshark


Imatge:Ethereal.png

Al menú capture seleccionem l'opció interfaces

Imatge:Ethereal1.png

Comencem una captura a la interfície connectada a Internet (normalment eth0, però també pot ser un altre com eth1 si es tracta de wireless). Seleccioneu eth0 i feu clic a Start:

Imatge:Ethereal2.png

Començara a capturar paquets:

Imatge:Ethereal4.png

Ara accediu a una URL que demani usuari i contrasenya de l'autenticació bàsica d'HTTP.

Introduïu un usuari i paraula de pas inventats! No poseu contrasenyes importants per què apareixeran per pantalla! No podreu entrar a la web però ara ja podeu aturar la captura. Aneu al menú Capture/Stop

Quan acabem la captura apliquem un filtre (HTTP) per localitzar la contrasenya:

Imatge:Ethereal5.png

La paraula de pas la trobareu a: Paquet GET --> Hypertext Transfer Protocol --> Authorization --> Credentials.

A més existeixen eines com Ettercap o dsniff que encara fan més fàcil la captura de la informació de protocols com telnet.

En el cas d'Ettercap fins i tot és possible interceptar la comunicació i escriure les nostres pròpies comandes en la comunicació interceptada.