Un coloquio de: Ciro Durán <ciro(at)ldc.usb.ve>
Fecha: XX/XX/2003
En un mundo perfecto, los usuarios introducirían bien sus datos, serían cuidadosos con lo que hacen con su computadora, los servidores nunca se caerían y no habrían personas entrando en las computadoras de otros con fines malignos, las preocupaciones y los gastos en seguridad nunca se necesitarían. Desafortunadamente para unos, afortunadamente para otros, esto no es así, continuamente las computadoras que están conectadas en Internet son víctimas de ataques con el fin de ganar acceso sobre ellas y obtener su información, eso con infinidad de objetivos: fama, dinero, o simplemente pura diversión.
A la hora de diseñar un esquema de protección de una red, es primordial incluir dos aspectos: una manera de proteger la red con las computadoras mismas, y una manera de proteger la red de sus usuarios (pues muchos ataques se originan dentro del espacio físico de la red). En este coloquio trataremos ambos aspectos.
Un firewall es una computadora confiable que separa una red privada de una red pública(Internet). El objetivo que se desea cumplir con eso es doble: prevenir que la gente de afuera (crackers sobre todo) acceda a los servicios de la red privada, y además, prevenir que la gente de adentro(los usuarios) caigan en la tentación de utilizar ciertos servicios de Internet. Debemos notar que aunque el firewall es una parte importante en la seguridad de la red, no abarca todo el tema, pues también es necesario controlar a los usuarios internos (como ya lo hemos dicho, la mayoría de las veces los ataques provienen dentro de la misma red), y para eso se establece una Política de Seguridad, la cual establece lo que los usuarios pueden y no pueden hacer, y las sanciones que puede acarrear no seguir la política.
Pepito, un buen hombre, empleado de una empresa, desea utilizar los servicios de telnet de una máquina que no está en su red que proporciona información acerca de las fiestas que se llevan los fines de semana en su ciudad. Sin embargo, la gerencia no desea que Pepito haga esto, porque representa una pérdida de tiempo para la empresa, por lo tanto le piden al administrador del firewall que ponga coto a esta actividad. El administrador considera que con filtrar el tráfico de paquetes hacia afuera es suficiente.
La primera y más básica forma de seguridad en la red (no por ello inútil) es el filtrado de paquetes IP [IP Filtering]. Un filtro de paquetes es simplemente un mecanismo que decide que datagramas IP serán procesados normalmente y cuales serán descartados. Un datagrama procesado de forma normal llega al firewall y pasa sin ningún problema, y uno descartado simplemente es ignorado y destruído, como si no hubiese llegado. Este mecanismo filtra los paquetes de acuerdo a una serie de normas dadas, y estas normas se clasifican por los criterios que abarcan: filtrar el protocolo utilizado (TCP, UDP, ICMP), el número de socket (en caso de ser TCP o UDP), el tipo de datagrama (SYN/ACK, datos, una solicitud de eco para ICMP, etc.) y el destino y la fuente de estos datagramas.
El administrador en este caso bloquearía los paquetes que salen de cualquier dirección hacia cualquier detino que desee contactar el puerto de Telnet [Puerto 23]. Pepito no podría entonces conectarse al servidor de Telnet que tanto le gusta. Sin embargo, si Pepito es inteligente y tiene a algún amigo que maneje el servidor de Telnet, podría arreglar ese servidor para que en vez de utilizar el puerto 23 para conectarse a Telnet, se utilice el puerto 80, el de HTTP, para seguir conectándose. Y ya la barrera que había puesto el administrador se perdió totalmente.
Esto ocurre porque el filtrado de IP solamente ocurre a nivel de red: el filtro no entiende la información que contega el paquete, sólo de donde viene, hacia donde va, y todas estas cosas. El administrador necesita poner una segunda capa de filtrado que trabaje a nivel de aplicación: los servidores proxies (proxy en singular) cumplen exactamente esta función, los proxies entienden la aplicación para la que fueron diseñados, por lo tanto son los que se encargan de hacer las conexiones por uno.
Volviendo a nuestro ejemplo, el administrador pondría un proxy para el puerto de HTTP, el cual dejaría pasar los requests de HTTP, y bloquearía los otros, y ya tendríamos (más o menos) resuelto el problema de seguridad desde la parte interna, el administrador también tendría que lidiar con el resto de los puertos, pero eso ya quedará a discreción de él. Es de notar que como los proxies son los que hacen el trabajo de las conexiones (como hacer telnet a una máquina externa y de allí hacer telnet al exterior), es posible conocer, loguear, y filtrar las actividades que estos programas (y por lo tanto el usuario) hacen, en el caso de un proxy para HTTP, los URLs y el contenido de las páginas.
Existen varios métodos para vulnerar la seguridad
El kernel de Linux desde su versión 2.0.x posee integrado un filtro de IP, lo cual hace a Linux un rápido filtro, ya que estas operaciones se hacen a nivel de paquete IP
http://www.tldp.org/LDP/nag2/index.html - Linux Network Administration Guide. Capítulo 9. TCP/IP Firewall.
http://www.tldp.org/HOWTO/Firewall-HOWTO.html - Firewall and Proxy Server HOWTO, de Mark Grennan.
http://grc.com/dos/drdos.htm - La página de Gibson Research Company, cuyo dueño ha tenido que tratar directamente con ataques a su página, ataques que ha podido describir muy bien, y sus experiencias las comparte aquí. En este artículo habla del Distributed Reflection Denial of Service Attack (DRDoS)
http://grc.com/dos/grcdos.htm - En la misma página también se habla del Distributed Denial of Service (DDoS), también excelentemente documentado.