Identificar servicios RPC

Publicado el 15 de Abril ,2008 por ekhtor

Los servicios RPC (Remote Procedure Calls) son un tipo de servicios en Linux que no tienen asignado un puerto determinado, por ello, necesitan registrarse utilizando el demonio portmap. RPC permite a un sistema, realizar llamadas a procedimientos de otras máquinas a través de la red.

Portmap no es mas que un servicio RPC que está a la escucha en el puerto 111 y su labor es asignar números RPC en /etc/rpc a puertos locales. Cuando se arranca un nuevo servido RPC como nfs, se pone a escuchar en un puerto y le comunica a portmap su número, por ejemplo el 100003, y el puerto en que se ha puesto a la escucha, en este caso el 2049. Ahora, cuando un cliente quiera contactar con el servicio nfs, primero deberá conectar al puerto de portmap y preguntarle en qué puerto está escuchando nfs. De ésta forma se realiza una conexión más ordenada en la que portmap actúa de policía de tráfico.

En el caso de querer visualizar los servicios RPC activos en nuestra máquina de forma rápida, usaremos el comando “rpcinfo -p”:

ekhtor@servidor:~$ rpcinfo -p localhost
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  32769  status
    100024    1   tcp  58208  status
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  32771  nlockmgr
    100021    3   udp  32771  nlockmgr
    100021    4   udp  32771  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  49665  nlockmgr
    100021    3   tcp  49665  nlockmgr
    100021    4   tcp  49665  nlockmgr
    100005    1   udp  32772  mountd
    100005    1   tcp  51593  mountd
    100005    2   udp  32772  mountd
    100005    2   tcp  51593  mountd
    100005    3   udp  32772  mountd
    100005    3   tcp  51593  mountd

En algunos casos el puerto 111 de portmap está filtrado, por lo que el comando rpcinfo nos devolvería un mensaje como el siguiente:

rpcinfo: no se puede contactar portmapper: RPC: Error remoto de sistema - Expiró el tiempo de conexión

Otra alternativa en éste caso, es el uso de Nmap. El escaneador de puertos Nmap, tiene la posibilidad de inundar los puertos que va recorriendo con comandos RPC NULL para saber si se trata de un servicio RPC, y de ser así, nos muestra el protocolo y la versión del servicio en ejecución.

Ejemplo de escaneo de servicios RPC con Nmap:

ekhtor@servidor:~$ sudo nmap -sS -sR 192.168.2.4

Starting Nmap 4.53 ( http://insecure.org ) at 2008-04-15 17:56 CEST
Interesting ports on 192.168.2.4:
Not shown: 1706 closed ports
PORT     STATE SERVICE              VERSION
22/tcp   open  ssh
111/tcp  open  rpcbind (rpcbind V2)  2 (rpc #100000)
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
2049/tcp open  nfs (nfs V2-4)        2-4 (rpc #100003)
4000/tcp open  remoteanything
4444/tcp open  krb524
6881/tcp open  bittorent-tracker

Si cualquier usuario de la red es capaz de ver los servicios que tenemos en ejecución, le resultará mucho más fácil lanzar un ataque contra un servicio determinado, por lo que debemos evitar esta situación. Para prevenir que cualquier usuario de la red pueda acceder a ésta información, podemos usar los archivos /etc/host.allow y /etc/host.deny y permitir el acceso al demonio portmap sólo a las máquinas que realmente lo necesiten.

Entradas Relaccionadas

Publica un comentario

Comenta