[LUG.ro] Denegación de servicio en pop3 por mala configuración en inetd.conf

Sebastián D. Criado lugro@lugro.org.ar
Mon, 4 Dec 2006 16:49:56 -0300


--nextPart1563078.Wik3J7Ygyx
Content-Type: text/plain;
  charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Les paso una nota para que me digan que les parece. La colgue del blog=20
tambi=C3=A9n:

http://www.criadoindomable.info/2006/12/04/denegacion-de-servicio-en-pop3-p=
or-mala-configuracion-en-inetdconf/

Al preparar un esquema de seguridad para una red, generalmente se comete el=
=20
error de pensar que hay servicios que est=C3=A1n configurados bien por defe=
cto. Es=20
muy com=C3=BAn que los implementadores de soluciones libres tengan la falsa=
=20
confianza de seguridad y dejen las cosas como vienen de fabrica sin siquier=
a=20
poner un m=C3=ADnimo de atenci=C3=B3n a la configuraci=C3=B3n de otros serv=
icios=20
involucrados.

El caso que comentare es sobre una denegaci=C3=B3n de servicio (DoS) sobre =
un=20
servidor pop3 utilizando solid-pop3d como servidor y inetd para atender la=
=20
conexiones en un servidor Debian GNU/Linux.

En este caso, no se tiene habilitado el acceso a pop3 desde el mundo, siend=
o=20
utilizado solamente en la red interna.
Aplico este ejemplo por lo conversado en post anteriores en cuanto a los=20
ataques desde el interior, intencionales o no, pero que suceden con m=C3=A1=
s=20
frecuencia que lo que se desear=C3=ADa.

Ataque:

Un usuario est=C3=A1 esperando un mail y reiteradamente le da al bot=C3=B3n=
 enviar y=20
recibir para chequear si ha llegado.
El demonio inet.d detecta estos pedidos reiterados como un ataque DoS y dej=
a=20
de atender pedidos para pop3 por un tiempo X. Se ha provocado con esto,=20
efectivamente, una ataque de DoS ya que el servicio no esta disponible. Si=
=20
tenemos una red mediana, unos 50 usuarios, tendremos varias llamadas=20
solicitando una soluci=C3=B3n al problema en ese lapso.
Seg=C3=BAn un an=C3=A1lisis posterior de los logs, el usuario impaciente ch=
equeo correo=20
a raz=C3=B3n de unas 6 veces por segundo durante un lapso de 10 segundos, l=
o que=20
dio un total de 60 pedidos al servicio pop3 en menos de un minuto, a esto s=
e=20
le puede sumar los pedidos de los dem=C3=A1s usuarios.
El demonio inet.d, por defecto, atiende unos 40 pedidos por minuto, superad=
o=20
este m=C3=A1ximo, deshabilitara el servicio en cuesti=C3=B3n y la saturaci=
=C3=B3n de la=20
linea telef=C3=B3nica por reclamos.

Configuraciones:

Veamos un poco la configuraci=C3=B3n que se utilizo.
La misma fue por defecto con lo cual, recordemos, atender=C3=A1 40 pedidos =
por=20
minuto. Para ver m=C3=A1s detalles sobre la configuraci=C3=B3n del inet.d h=
acer man=20
inetd.conf.

El archivo de configuraci=C3=B3n indica:


pop3 stream tcp nowait root.mail /usr/sbin/tcpd /usr/sbin/solid-pop3d

Los campos por numero son:
1: es el nombre del servicio, en nuestro caso, pop3. El mismo tiene que est=
ar=20
detallado en /etc/services para ser considerado correcto.

2: describe el tipo socket asociado a la conexi=C3=B3n.
3: protocolo de red utilizado por el servicio.
4: Concurrencia: puede ser waith o no waith
5: usuario que ejecuta el servicio
6: Programa a ejecutar

Configuraci=C3=B3n correcta:

Con esta configuraci=C3=B3n tenemos el problema que como por defecto se ten=
dr=C3=A1n 40=20
conexiones por minuto, el usuario impaciente tiene todas las herramientas=20
para hacer una denegaci=C3=B3n de servicio.

El manejo de las conexiones se debe a que el servicio pop3 es multihilo (pu=
ede=20
atender m=C3=A1s de una conexi=C3=B3n al mismo tiempo) con lo cual no tiene=
 que esperar=20
a terminar una conexi=C3=B3n para iniciar otra y por eso en el campo 4 se p=
one=20
nowait.

Para poder solucionar este inconveniente, bastara con agregar la cantidad d=
e=20
atenciones que queramos tener y una configuraci=C3=B3n en el cron para que =
cargue=20
cada cierto tiempo el demonio inet.d a fin de que no se provoque un DoS=20
superado este punto.
Para saber cuantas conexiones se necesitan , bastara con ver los logs de po=
p3=20
y ver cuanto es lo normal en un minuto. Sabiendo el tipo de servidor que se=
=20
tenga, se podr=C3=A1 determinar una cantidad de conexiones =C3=B3ptima para=
 brindar el=20
servicio pop3 sin que se produzcan ca=C3=ADdas.
Tomemos por ejemplo el doble de lo que esta por default, es decir, 80=20
conexiones por minuto.

La configuraci=C3=B3n necesaria para esto es muy simple. Bastara con poner =
la=20
cantidad de conexiones en el campo 4 (concurrencia) separado del nowait con=
=20
un punto:


pop3 stream tcp nowait.80 root.mail /usr/sbin/tcpd /usr/sbin/solid-pop3d

Luego configuraremos el /etc/crontab para que recargue el inetd cada 10=20
minutos.

0,10,20,30,40,50 * * * * root /etc/init.d/inetd restart

Con estas configuraciones, estaremos menos propensos a un ataque DoS intern=
o o=20
externo (si es el caso).
El ver la simplicidad con la que se puede dejar sin un servicio, aunque sea=
=20
por un corto tiempo, tiene que hacer recapacitar al administrador para tene=
r=20
en cuenta las configuraciones por defecto como una soluci=C3=B3n general.
=E2=80=9CCuando se requiere brindar un servicio con un alto nivel de seguri=
dad, se=20
requiere una configuraci=C3=B3n especifica, adaptada a los requerimientos y=
=20
caracter=C3=ADsticas de lo que se est=C3=A1 cuidando=E2=80=9D.



Saludos y espero opiniones.

=2D-=20

Sebasti=C3=A1n D. Criado - scriado{en}ciudad.com.ar
L.U.G.R.o - http://www.lugro.org.ar
GNU/Linux Registered User # 146768
=2D------------------------------------------------------------------
"Si el Universo fuera un programa estar=C3=ADa hecho en C, y correr=C3=ADa =
sobre
un sistema UNIX"
                                                   An=C3=B3nimo.

		=09

--nextPart1563078.Wik3J7Ygyx
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)

iD8DBQBFdHvr8hmHQ8ZCg0IRAqROAJ45CxtH/prxglhT5UbJlUue190mSgCglRaI
9mWXweBiarlIFbX7angLNPk=
=KEqb
-----END PGP SIGNATURE-----

--nextPart1563078.Wik3J7Ygyx--