35babe0ae5
set on some files as a workaround for binary check. - Fix pathname for svn co in the webupdate script. Approved by: doceng (implicit)
501 lines
25 KiB
Text
501 lines
25 KiB
Text
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
|
|
<!ENTITY base CDATA "..">
|
|
<!ENTITY date "$FreeBSD$">
|
|
<!ENTITY title "Información de Seguridad en FreeBSD">
|
|
<!ENTITY % navinclude.support "INCLUDE">
|
|
]>
|
|
<!-- $FreeBSD$ -->
|
|
|
|
<html>
|
|
&header;
|
|
|
|
<H2>Introducción</H2>
|
|
|
|
<P>El objetivo de esta página es orientar a los usuarios, tanto noveles
|
|
como experimentados, en el área de seguridad del Sistema Operativo
|
|
FreeBSD. El equipo de Desarrollo de FreeBSD se toma la seguridad muy en
|
|
serio y trabaja constantemente para hacer el Sistema Operativo tan
|
|
seguro como sea posible.</P>
|
|
|
|
<P>Aquí podrás encontrar información adicional, o enlaces
|
|
a información, acerca de cómo proteger tu sistema contra varios
|
|
tipos de ataque del exterior, con quién contactar si encuentra un error
|
|
de software relacionado con la seguridad, etc. También hay una
|
|
sección que trata de las distintas formas en que el programador de
|
|
sistemas puede concienciarse acerca de la seguridad, de modo que sea menos
|
|
probable la introducción de defectos de seguridad en el software.</P>
|
|
|
|
<H2>Contenidos</H2>
|
|
<UL>
|
|
<LI><A HREF="#sec">Información acerca del FreeBSD Security Officer</A></LI>
|
|
<LI><A HREF="#adv">FreeBSD Security Advisories</A></LI>
|
|
<LI><A HREF="#ml">Información sobre Listas de Distribución sobre seguridad en FreeBSD</A></LI>
|
|
<LI><A HREF="#tat">Consejos sobre seguridad en FreeBSD</A></LI>
|
|
<LI><A HREF="#spg">Pautas para la programación segura</A></LI>
|
|
<LI><A HREF="#misc">Otra información relacionada con la seguridad</A></LI>
|
|
</UL>
|
|
|
|
<A NAME=sec></A>
|
|
<H2>El FreeBSD Security Officer</H2>
|
|
|
|
<P>Con el objetivo de coordinar mejor el intercambio de información con
|
|
otras personas o entidades relacionadas con el ámbito de la seguridad,
|
|
FreeBSD tiene un punto focal para las comunicaciones relacionadas con la
|
|
seguridad: el FreeBSD <a href="mailto:security-officer@FreeBSD.org">security officer</a>.
|
|
El puesto está actualmente ocupado por un equipo de security officers
|
|
dedicados, siendo sus tareas principales emitir advisories cuando hay
|
|
defectos de seguridad conocidos y actuar ante los informes de posibles
|
|
problemas de seguridad con FreeBSD.</P>
|
|
|
|
<P>Si necesitas contactar con alguien del equipo de FreeBSD acerca
|
|
de un posible error de software relacionado con la seguridad por favor
|
|
hazlo por <A HREF="mailto:security-officer@FreeBSD.org"> correo al
|
|
Security Officer</A>, incluyendo una descripción de lo que has encontrado
|
|
y el tipo de vulnerabilidad que representa. El Security Officer también
|
|
está en contacto con los diferentes equipos <A HREF="http://www.cert.org">
|
|
CERT </A>y <A HREF="http://www.first.org/"> FIRST</A> en todo el mundo,
|
|
con los que comparte información acerca de posibles vulnerabilidades en
|
|
FreeBSD o programas de utilidad usados por FreeBSD. Los Security Officers
|
|
también son miembros activos de dichas organizaciones.</P>
|
|
|
|
<P>Si necesitas contactar con el Security Officer acera de algún
|
|
asunto especialmente delicado, usa su <A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">
|
|
clave PGP</A> para encriptar el mensaje antes de enviarlo.</P>
|
|
|
|
<A NAME=adv></A>
|
|
<H2>FreeBSD Security Advisories</H2>
|
|
|
|
<P>Los FreeBSD Security Officers proporcionan security advisories para las
|
|
releases de FreeBSD siguientes:</P>
|
|
|
|
<UL>
|
|
<LI> La release oficial de FreeBSD más reciente.
|
|
<LI> FreeBSD-current.
|
|
<LI> FreeBSD-stable, cuando hay al menos 2 releases basadas en él.
|
|
<LI> FreeBSD-stable anterior cuando un "nuevo stable" aun no tiene
|
|
2 releases basadas en él.
|
|
</UL>
|
|
|
|
En este momento hay disponibles security advisories para:
|
|
<UL>
|
|
<LI> FreeBSD 2.2.8
|
|
<LI> FreeBSD 3.1
|
|
<LI> FreeBSD 3.2
|
|
<LI> FreeBSD-current
|
|
<LI> FreeBSD-stable
|
|
</UL>
|
|
|
|
<P>No hay mantenimiento para releases anteriores a estas. Se recomienda
|
|
a los usuarios se actualicen a una de las releases arriba mencionadas.
|
|
</P>
|
|
|
|
<P>Como todos los esfuerzos de desarrollo, las reparaciones de seguridad
|
|
se incorporan primero en la rama
|
|
<A HREF="../../handbook/cutting-edge.html#CURRENT">FreeBSD-current</A>.
|
|
Después de un par de días de prueba la reparación se
|
|
incorpora en las ramas FreeBSD-stable soportadas y se emite un advisory. </P>
|
|
|
|
<P>Los advisories se envían a las siguientes listas de
|
|
distribución de FreeBSD:
|
|
<UL>
|
|
<LI>FreeBSD-security-notifications@FreeBSD.org
|
|
<LI>FreeBSD-security@FreeBSD.org
|
|
<LI>FreeBSD-announce@FreeBSD.org
|
|
</UL>
|
|
|
|
|
|
<P>Los advisories se firman siempre usando la
|
|
<A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/public_key.asc">
|
|
clave PGP</A> del FreeBSD Security Officer y se archivan, junto con los
|
|
patches asociados, en nuestro
|
|
<A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/index.html">
|
|
repositorio FTP CERT</A>. En el momento de escribir esto están
|
|
disponibles los advisories siguientes:</P>
|
|
|
|
<UL>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:01.sliplogin.asc">FreeBSD-SA-96:01.sliplogin.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:02.apache.asc">FreeBSD-SA-96:02.apache.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:03.sendmail-suggestion.asc">FreeBSD-SA-96:03.sendmail-suggestion.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:08.syslog.asc">FreeBSD-SA-96:08.syslog.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:09.vfsload.asc">FreeBSD-SA-96:09.vfsload.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:10.mount_union.asc">FreeBSD-SA-96:10.mount_union.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:11.man.asc">FreeBSD-SA-96:11.man.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:12.perl.asc">FreeBSD-SA-96:12.perl.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:13.comsat.asc">FreeBSD-SA-96:13.comsat.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:14.ipfw.asc">FreeBSD-SA-96:14.ipfw.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:15.ppp.asc">FreeBSD-SA-96:15.ppp.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:16.rdist.asc">FreeBSD-SA-96:16.rdist.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:17.rzsz.asc">FreeBSD-SA-96:17.rzsz.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:18.lpr.asc">FreeBSD-SA-96:18.lpr.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:19.modstat.asc">FreeBSD-SA-96:19.modstat.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:20.stack-overflow.asc">FreeBSD-SA-96:20.stack-overflow.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-96:21.talkd.asc">FreeBSD-SA-96:21.talkd.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:01.setlocale">FreeBSD-SA-97:01.setlocale</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:02.lpd.asc">FreeBSD-SA-97:02.lpd.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:03.sysinstall.asc">FreeBSD-SA-97:03.sysinstall.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:04.procfs.asc">FreeBSD-SA-97:04.procfs.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:05.open.asc">FreeBSD-SA-97:05.open.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-97:06.f00f.asc">FreeBSD-SA-97:06.f00f.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:01.land.asc">FreeBSD-SA-98:01.land.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:02.mmap.asc">FreeBSD-SA-98:02.mmap.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:03.ttcp.asc">FreeBSD-SA-98:03.ttcp.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:04.mmap.asc">FreeBSD-SA-98:04.mmap.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:05.nfs.asc">FreeBSD-SA-98:05.nfs.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:06.icmp.asc">FreeBSD-SA-98:06.icmp.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:07.rst.asc">FreeBSD-SA-98:07.rst.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-98:08.fragment.asc">FreeBSD-SA-98:08.fragment.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:01.chflags.asc">FreeBSD-SA-99:01.chflags.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:02.profil.asc">FreeBSD-SA-99:02.profil.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:03.ftpd.asc">FreeBSD-SA-99:03.ftpd.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:04.core.asc">FreeBSD-SA-99:04.core.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:05.fts.asc">FreeBSD-SA-99:05.fts.asc</A></LI>
|
|
<LI><A HREF="ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-99:06.amd.asc">FreeBSD-SA-99:06.amd.asc</A></LI>
|
|
</UL>
|
|
|
|
<A NAME=ml></A>
|
|
<H2>Información acerca de las Listas de Distribución sobre
|
|
Seguridad en FreeBSD</H2>
|
|
|
|
<P>Si eres administrador o usuario de uno o más sistemas FreeBSD,
|
|
quizás quieras suscribirte a alguna de las listas siguientes:</P>
|
|
|
|
<PRE>
|
|
FreeBSD-security Discusiones relacionadas con la seguridad en general
|
|
FreeBSD-security-notifications Notificaciones sobre seguridad (lista moderada)
|
|
</PRE>
|
|
|
|
Envíe un mensaje a <A HREF="mailto:majordomo@FreeBSD.org">
|
|
majordomo@FreeBSD.ORG</A> con
|
|
<PRE>
|
|
subscribe <nombre_de_la_lista> [<dirección_email_opcional>]
|
|
</PRE>
|
|
en el cuerpo del mensaje para suscribirse.
|
|
Por ejemplo:
|
|
<PRE>
|
|
% echo "subscribe FreeBSD-security" | mail majordomo@FreeBSD.org
|
|
</PRE>
|
|
y si quieres desuscribirte de una lista de distribución:
|
|
<PRE>
|
|
% echo "unsubscribe FreeBSD-security" | mail majordomo@FreeBSD.org
|
|
</PRE>
|
|
|
|
<A NAME=spg></A>
|
|
<H2>Pautas para la Programación Segura</H2>
|
|
<P><P><UL>
|
|
<LI>Nunca te fíes de ninguna fuente de entrada, i.e. argumentos en la
|
|
línea de comando, variables de entorno, ficheros de
|
|
configuración, paquetes TCP/UDP/ICMP entrantes, argumentos de funciones,
|
|
etc. Si la longitud o el contenido de los datos recibidos están
|
|
sujetos, siquiera mínimamente, al control desde el exterior, el
|
|
programa o la función debería tenerlo en cuenta cuando maneja
|
|
dichos datos. Podemos considerar los apartados siguientes desde el punto de
|
|
vista de la seguridad:
|
|
|
|
<P></P>
|
|
<UL>
|
|
|
|
<LI>Llamadas a strcpy() y sprintf() para datos de longitud ilimitada.
|
|
Usa strncpy() y snprintf() cuando la longitud sea conocida (o implementa
|
|
algun otro método de control de límites cuando sea desconocida).
|
|
No uses nunca gets() ni sprintf(), punto. Si lo haces, te acosarán sin
|
|
tregua duendes malvados.<P></P></LI>
|
|
|
|
<LI>Si tienes que validar los datos de entrada del usuario para evitar que
|
|
contengan caracteres erróneos de cualquier clase, NO valides la presencia
|
|
de dichos caracteres erróneos. Simplemente verifica que la entrada
|
|
consiste SOLO en los caracteres permitidos. La idea es: todo lo que no
|
|
está explícitamente permitido está prohibido.
|
|
<P></P></LI>
|
|
|
|
<LI>Lee las páginas del manual para las llamadas strncpy() y strncat().
|
|
Asegúrate de entender cómo funcionan!!! Así como
|
|
strncpy() puede no añadir un \0 final, strncat() sí lo
|
|
añade.
|
|
<P></P></LI>
|
|
|
|
<LI>Vigila el abuso de strvis() y getenv(). Con strvis() es fácil cometer
|
|
un error con la cadena de destino, y getenv() podría devolver cadenas
|
|
mucho más largas de lo que el programa espera. Estas dos funciones son,
|
|
a menudo, una de las vías principales de ataque contra un programa,
|
|
provocando que este sobreescriba la pila o las variables al recibir variables
|
|
de entorno con valores no contemplados. Si tu programa lee variables de
|
|
entorno, se paranoico. Se muy paranoico!
|
|
<P></P></LI>
|
|
|
|
<LI>Cada vez que uses las llamadas open() o stat() pregúntate: " Y si es
|
|
un enlace simbólico ?"
|
|
<P></P></LI>
|
|
|
|
<LI>Asegúrate de usar mkstemp() en lugar de mktemp(), tempnam(),
|
|
etc. Asegúrate también de buscar problemas de acceso
|
|
concurrente en general en /tmp, teniendo en cuenta que hay muy pocas
|
|
cosas que pueden ser atómicas en /tmp:
|
|
<UL>
|
|
<LI>Crear un directorio. O funciona o no funciona.</LI>
|
|
<LI>Abrir un fichero O_CREAT | O_EXECL</LI>
|
|
</UL>
|
|
Si se usa mkstemp() la función tratará por tí estos casos
|
|
adecuadamente. De aquí que todos los ficheros temporales
|
|
deberían usar mkstemp() para garantizar que no se produzcan problemas
|
|
de acceso concurrente y que los permisos son correctos.
|
|
<P></P></LI>
|
|
|
|
<LI>Un atacante que consiga que los paquetes vayan a/vengan de un
|
|
sistema arbitrario tendrá el control completo de los datos que recibimos,
|
|
por lo tanto <B>NINGUNO</B> de estos datos será de fiar.
|
|
<P></P></LI>
|
|
|
|
<LI>Nunca dés por hecho que un fichero de configuración
|
|
estará correctamente formateado o que habrá sido generado por
|
|
el programa de utilidad apropiado. No confíes en que las entradas del
|
|
usuario tales como nombres de terminal o cadenas del lenguaje estarán
|
|
libres de '/' o '../../../' si hay la mínima posibilidad de que puedan
|
|
ser usadas en un nombre de path. No confíes en <B>NINGUN</B> path
|
|
proporcionado por el usuario cuando el programa se ejecuta setuid root.
|
|
<P></P></LI>
|
|
|
|
<LI>Busca fallos o puntos débiles en la forma de almacenar los datos.
|
|
Todos los ficheros temporales deberían tener permisos de la forma
|
|
600 para protegerlos de ojos curiosos.
|
|
<P></P></LI>
|
|
|
|
<LI>No te limites a buscar con grep los sospechosos habituales en
|
|
programas que se ejecutan con privilegios elevados. Busca los
|
|
posibles desbordamientos línea a línea, hay muchísimas
|
|
más formas de provocar un desbordamiento de memoria además de
|
|
mediante el abuso de strcpy() y sus amigos.
|
|
<P></P></LI>
|
|
|
|
<LI>El simple hecho de restringir privilegios en algún punto no
|
|
significa que no haya manera de explotar el recurso en cuestión.
|
|
El atacante podría colocar el código necesario en la pila para
|
|
recuperar los privilegios antes de ejecutar /bin/sh.</LI></UL>
|
|
<P></P></LI>
|
|
|
|
<LI>Administra los uid. Elimina privilegios tan pronto como sea posible,
|
|
y elimínalos de verdad. Cambiar entre euid y uid NO es suficiente. Usa
|
|
setuid() siempre que puedas.
|
|
<P></P></LI>
|
|
|
|
<LI>Nunca muestres el contenido de ficheros de configuración cuando
|
|
ocurra un error. Un número de línea y quizás un contador
|
|
de posición es suficiente.
|
|
Esto mismo es igualmente cierto para todas las librerías y todos los
|
|
programas suid/gid.
|
|
<P></P></LI>
|
|
|
|
<LI>Consejos para quienes revisen código existente debido a problemas de
|
|
seguridad:<P></P><UL>
|
|
|
|
<LI>Si no estás seguro de tus reparaciones de seguridad, envíalas
|
|
para ser revisadas a alguien con quien así lo hayas acordado
|
|
previamente. No entregues código del que no estás seguro, llegar
|
|
a estropear algo en nombre de las reparaciones de seguridad resulta bastante
|
|
embarazoso.
|
|
<P></P></LI>
|
|
|
|
<LI>Aquellos con privilegios de entrega ("commit") para CVS deberían
|
|
asegurarse de que alguien con dichos privilegios esté entre los
|
|
últimos en revisar los cambios. Dicha persona revisará e
|
|
incorporará la versión final que se desea tener en el
|
|
árbol.
|
|
<P></P></LI>
|
|
|
|
<LI>Cuando distribuyas cambios para ser revisados usa siempre diffs con
|
|
formato context o unidiff. De este modo los diffs pueden ser fácilmente
|
|
proporcionados como entrada a patch(1). No te limites a enviar los ficheros
|
|
enteros. Los diffs son más fáciles de leer y aplicar al
|
|
código fuente local (especialmente a aquel en el que podrían
|
|
tener lugar múltiples cambios simultáneamente). Todos los cambios
|
|
deberían referirse a la rama de desarrollo -current.
|
|
<P></P></LI>
|
|
|
|
<LI>Prueba tu mismo todos los cambios (i.e. compila y ejecuta el
|
|
código fuente afectado) antes de enviarlos a otra persona para que los
|
|
revise. A nadie le gusta que le envíen material averiado para revisar,
|
|
y además produce la impresión de que el remitente ni siquiera se
|
|
fijó en lo que estaba haciendo (lo que no contribuye precisamente a dar
|
|
una sensación de confianza). Si necesita una cuenta en una
|
|
máquina donde hay una versión específica que no tienes a
|
|
mano, simplemente pregunta. El proyecto tiene recursos asignados para ese
|
|
propósito en concreto.
|
|
<P></P></LI>
|
|
|
|
<LI>Nota para los responsables de la entrega de código ("commit"): no
|
|
se debe olvidar incorporar a la rama -stable los patches hechos sobre
|
|
-current, de la forma que sea adecuada.
|
|
<P></P></LI>
|
|
|
|
<LI>No reescribas código innecesariamente para acomodarlo a tu estilo/
|
|
gustos. Esto sólo hace el trabajo de quienes lo revisan más
|
|
difícil.
|
|
Hazlo sólo si hay razones claras para ello.</LI></UL
|
|
<P></P></LI>
|
|
|
|
<LI>Busca programas que hagan cosas complicadas con los gestores de
|
|
señales. Muchas rutinas en varias bibliotecas no son lo suficientemente
|
|
reentrantes como para hacerlo con seguridad.
|
|
<P></P></LI>
|
|
|
|
<LI>Presta especial atención al uso de realloc(). Lo habitual es no
|
|
usar la función correctamente.
|
|
<P></P></LI>
|
|
|
|
<LI>Cuando uses áreas de memoria de longitud fija use sizeof() para
|
|
evitar pérdidas cuando se cambia el tamaño del área pero
|
|
no el código que la usa. Por ejemplo:
|
|
<PRE>
|
|
char buf[1024];
|
|
struct foo { ... };
|
|
...
|
|
MAL:
|
|
xxx(buf, 1024)
|
|
xxx(yyy, sizeof(struct foo))
|
|
BIEN:
|
|
xxx(buf, sizeof(buf))
|
|
xxx(yyy, sizeof(yyy))
|
|
</PRE>
|
|
Ten cuidado al aplicar sizeof a un puntero cuando lo que quieres es
|
|
el tamaño del objeto referenciado!
|
|
<P></P></LI>
|
|
|
|
<LI>Siempre que veas "char foo[###]", comprueba cada uso de foo para
|
|
asegurarte de que no se desbordará. Si no puedes evitar el desbordamiento
|
|
(se han dado casos), usa malloc como mal menor para ubicar el área de
|
|
memoria, de este modo evitarás sobreescribir la pila.
|
|
<P></P></LI>
|
|
|
|
<LI>Cierra siempre los descriptores de ficheros tan pronto como puedas, lo
|
|
que hará más probable que los contenidos del área de
|
|
memoria de entrada de stdio() sean desechados. En rutinas de biblioteca,
|
|
dispon siempre los descriptores de ficheros que abras de modo que se cierren
|
|
tras lanzar con éxito otro proceso.
|
|
<P><P></LI>
|
|
</UL>
|
|
|
|
<A NAME=tat></A>
|
|
<H2>Consejos sobre seguridad en FreeBSD</H2>
|
|
<P>Se deben ejecutar varios pasos para hacer seguro un sistema FreeBSD
|
|
(para el caso, cualquier sistema &unix;):
|
|
<UL>
|
|
|
|
<LI>Inhabilitar todo software potencialmente peligroso<BR><P></P>
|
|
Gran cantidad de software debe ser ejecutado con un usuario privilegiado
|
|
especial para poder hacer uso de recursos específicos, haciendo el
|
|
ejecutable set-uid. Un ejemplo es el software UUCP o PPP, que hacen uso
|
|
del puerto serie, o sendmail, que tiene que escribir en el spool de correo
|
|
y conectar con un puerto de red privilegiado. Si no usas UUCP de poco
|
|
sirve tener en su sistema el software asociado; sería prudente
|
|
inhabilitarlo.
|
|
Desde luego, esto requiere saber a ciencia cierta lo que puede ser eliminado
|
|
y lo que no, así como tener claro si se va a necesitar o no dicha
|
|
funcionalidad en el futuro.<BR><P></P>
|
|
Lo mismo se puede decir de aquellos programas de utilidad que no consideres
|
|
lo bastante útiles y que supongan un posible riesgo para la seguridad,
|
|
como swapinfo. Si elminas el bit set-uid del ejecutable (por medio del
|
|
comando "chmod ug-s nombre-de-fichero") siempre habrá la posibildad de
|
|
que el usuario root pueda usar swapinfo. Sin embargo no es una buena idea
|
|
elminar tantos sbits que se haga necesario ser root contínuamente.<BR><P></P>
|
|
No sólo elimines programas que no uses, elimina también servicios
|
|
que no quieras o necesites suministrar. Esto se puede hacer editando los
|
|
ficheros <TT>/etc/inetd.conf</TT> y <TT>/etc/rc.conf</TT> e inhabilitando los
|
|
servicios que no quieras usar.<P></P>
|
|
|
|
<LI>Reparar el software con errores que afecten a la seguridad (o cómo
|
|
mantenerse un paso por delante de los crackers)
|
|
<BR><P></P>
|
|
Asegúrate de suscribirte a las diferentes <A HREF="#ml">Listas de
|
|
ditribución sobre seguridad en FreeBSD</A> para obtener actualizaciones
|
|
relacionadas con los errores que afectan a la seguridad y reparaciones.
|
|
Aplica las reparaciones inmediatamente.<P></P>
|
|
|
|
<LI>Copias de seguridad. Repare su sistema si una violación de la seguridad
|
|
llegara a ocurrir<BR><P></P>
|
|
Disponga siempre de copias de seguridad y de una versión limpia del sistema
|
|
operativo (por ejemplo en CD-Rom). Asegúrese de que sus copias de seguridad
|
|
no contienen datos alterados o modificados por el atacante.<P></P>
|
|
|
|
<LI>Instala software pare vigilar el estado del sistema<BR><P></P>
|
|
Programas como tcp wrappers y tripwire (ambos en packages/ports) pueden
|
|
ayudarte a monitorizar la actividad en tu sistema. Esto hace más
|
|
fácil la detección de irrupciones. Lee también la salida
|
|
de los scripts de /etc/security, que se ejecutan diariamente y se envían
|
|
por correo a la cuenta root.<P></P>
|
|
|
|
<LI>Educa a la gente que trabaja en el sistema<BR><P></P>
|
|
Los usuarios deberían ser conscientes de lo que hacen. Deberías
|
|
indicarles que nunca revelen su password a nadie y que usen passwords
|
|
difíciles de adivinar. Hazles entender que la seguridad del
|
|
sistema/de la red está parcialmente en sus manos.<P></P>
|
|
</UL>
|
|
|
|
|
|
<P>También hay un documento PASO a PASO ("HowTo") sobre seguridad en
|
|
FreeBSD disponible que proporciona algunos consejos avanzados acerca de
|
|
cómo mejorar la seguridad de su sistema. Puede ser consultado en
|
|
<A HREF="http://www.FreeBSD.org/~jkb/howto.html">
|
|
http://www.FreeBSD.org/~jkb/howto.html</A>.</P>
|
|
|
|
<p>La seguridad es un proceso contínuo. Asegúrate de estar al
|
|
día con los avances en el campo de la seguridad.</P>
|
|
|
|
<A NAME=misc></A>
|
|
<H2>Qué hacer si detectas que la seguridad ha sido comprometida</H2>
|
|
|
|
<UL>
|
|
<LI><B>Determina el alcance de la violación de seguridad</B><BR>
|
|
Qué privilegios consiguió el atacante ? Consiguió
|
|
acceso de root ?
|
|
Consiguió acceso sólo en el nivel de usuario ?</LI>
|
|
|
|
<LI><B>Determina si se ha alterado el estado del sistema (ámbito del
|
|
kernel o de usuario)</B><BR>
|
|
Qué software ha sido alterado? Se instaló un nuevo kernel ?
|
|
Ha sido modificado alguno de los archivos binarios del sistema (tales como
|
|
telnetd, login, etc.) ? Si sospechas que un atacante puede haber
|
|
causado cualquier alteración en un sistema operativo, podrías
|
|
considerar conveniente reinstalar el sistema operativo desde un medio seguro.</LI>
|
|
|
|
<LI><B>Averigua cómo se logró la irrupción</B><BR>
|
|
Ocurrió por medio de un error de seguridad bien conocido ? Si este es
|
|
el caso, asegúrate de instalar los patches correctos. Tuvo éxito
|
|
la irrupción debido a una mala configuración ? Fue el resultado
|
|
de un error desconocido hasta el momento ? Si sospechas que la
|
|
irrupción ocurrió por medio de un error nuevo, deberías
|
|
advertir al <A HREF="mailto:security-officer@FreeBSD.org"> FreeBSD Security
|
|
Officer</A>.</LI>
|
|
|
|
<LI><B>Repara el defecto de seguridad</B><BR>
|
|
Instala nuevo software o aplica patches al antiguo para reparar los
|
|
problemas. Inhabilita las cuentas que ya han sido comprometidas.</LI>
|
|
|
|
<LI><B>Otros recursos</B><BR>
|
|
<A HREF="http://www.cert.org">CERT</A> también ofrece
|
|
<A HREF="http://www.cert.org/nav/recovering.html">información detallada</A>
|
|
acerca de qué pasos seguir en caso de que un sistema se vea comprometido.
|
|
</LI>
|
|
</UL>
|
|
|
|
<H2>Otra Información Relacionada Con La Seguridad</H2>
|
|
<UL>
|
|
<LI><A href="http://www.cs.purdue.edu/coast/archive/index.html">El archivo
|
|
COAST</A> contiene una vasta colección de materiales relacionados con la
|
|
securidad.</LI>
|
|
|
|
<LI><A href="http://www.cs.purdue.edu/coast/hotlist/">La COAST Security
|
|
Hotlist</A> es el lugar donde empezar a buscar materiales relacionados con
|
|
la seguridad. Contiene cientos de enlaces útiles. Todo lo que siempre
|
|
quiso saber sobre seguridad ... y más.</LI>
|
|
|
|
<LI>Los diferentes equipos CERT tales como <A href="http://www.cert.org">
|
|
http://www.cert.org</A> y <A href="http://www.auscert.org.au">
|
|
http://www.auscert.org.au</A>.</LI>
|
|
|
|
<LI>Listas de distribución como <A HREF="http://www.ecurityfocus.com/forums/bugtraq/intro.html">
|
|
Bugtraq</A> y <A HREF="http://www.nfr.net/forum/firewall-wizards.html">
|
|
Firewall Wizards</A>.</LI>
|
|
</UL>
|
|
|
|
&footer
|
|
</body>
|
|
</html>
|