Querido Diario…

Desperté a media noche, fui al baño; y de vuelta levanté a Shellcode del suelo y la subí a la cama. Me acerqué hacía el marco de la puerta de la otra habitación, y vi a Becario durmiendo, al menos él podía dormir.

Bajé a la cocina por agua, escuche ruido; era Shellcode, me había seguido. Se quedo parada frente a mi esperando a que sacase un premio de la alacena para dárselo, por una fracción de segundo, giró, por un ruido mínimo fuera.

Me arrojé sobre ella, y giré cubriéndonos con el sofá cuando los disparos rompieron las ventanas. Veía las ráfagas golpear la pared, y temía que apareciesen por la puerta detrás.

Escuche movimiento en el piso de arriba, los pasos se dirigían hacía abajo. Por el reflejo del ventanal vi a Becario lanzarse sobre los sillones disparando. Se acercó a la ventana, cubriendose con el marco y tomó su posición. Arrojé a Shellcode hacía el baño, mientras Becario me corría un arma por el suelo.

Tenía meses, años de ni siquiera tocar una. El metal frío, el arnés… con el indicé quité el seguro, corte el cartucho…

- Jove... eso nooo... - no le hice caso

Abrí la puerta, y apenas lo vi, le perforé la garganta con una bala. Cayó al suelo, miraba hacia el cielo mientras se ahogaba con su sangre. Becario se me acercó, apuntando a todos lados, para cubrirme.

- ¿Lo habías visto? - pregunté
- Si, es de los tipos a los que les debo
- Genial Becario... te siguieron, ahora tenemos problemas
- ¿A dónde vas joven?
- A marcar al 066
- ¡Nooo joven!, nos van a meter a la cárcel
- Hay un matón tirado frente a la casa, no te preocupes Becario. Es Mexicali, aquí todo se resuelve con una Sor Juana.

Fue más que una Sor Juana.

Después de unas horas, las ventanas estaban cubiertas con plásticos, y Becario y yo estábamos sentados bebiendo café en la sala.

- Joven
- ¿Eu?
- ¿Dónde quedaron los procesos?
- ¿Qué procesos?
- Los procesos que nos enseñaste; tenías que cubrirte, abrir la puerta, yo me movía a la derecha, te cubría, y entonces salías tu a dar el disparo
- Esas cosas siempre se olvidan cuanto las cosas se ponen feas
- No has perdido el tino
- Hum... esas cosas tampoco se olviden, se quedan para siempre. Sueño tantas pesadillas, que... podría decirte paso a paso, y con todo detalle cada ocasión que he presionado el gatillo.
- Traumas
- Si, nunca pensé que algún día tendría que hacer cosas turbias e ilegales, yo revisaba aplicaciones y vivía en un pueblito
- Ouuu
- Bueno, hay que hacer algo para ayudarte. No podemos sólo esperar aquí, habrá que ir a dar tehuacanazos.
- No lo sé joven, creo que ya viste que esa gente es peligrosa
- Entonces tenemos que ser más peligrosos ;)

Nuestra conversación fue interrumpida por un sonido de que algo vibraba. Era el celular del matón al que le estaba entrando una llamada por Whatsapp

- ¡Rápido Becario!, mi laptop

Empecé a interceptar el tráfico para poder romper la llamada; mi objetivo era sobre todo encontrar desde donde la hacían.

- Joven, ¿qué haces? - preguntó Becario mientras veía mi pantalla
- Analizó el tráfico de la llamada, el punto es centrarse en srtp_aes_icm_encrypt(), esa cosa manda el secret key cada que se establece una llamada, así podemos manipularla, interceptarla, o poder averiguar de donde viene.

static srtp_err_status_t srtp_aes_icm_encrypt(void *cv,
                                               unsigned char *buf,
                                               unsigned int *enc_len)
 {
     srtp_aes_icm_ctx_t *c = (srtp_aes_icm_ctx_t *)cv;
     unsigned int bytes_to_encr = *enc_len;
     unsigned int i;
     uint32_t *b;

/* check that there's enough segment left*/
if ((bytes_to_encr + htons(c->counter.v16[7])) > 0xffff) {
    return srtp_err_status_terminus;
}

debug_print(srtp_mod_aes_icm, "block index: %d", htons(c->counter.v16[7]));
if (bytes_to_encr <= (unsigned int)c->bytes_in_buffer) {
    /* deal with odd case of small bytes_to_encr */
    for (i = (sizeof(v128_t) - c->bytes_in_buffer);
         i < (sizeof(v128_t) - c->bytes_in_buffer + bytes_to_encr); i++) {
        *buf++ ^= c->keystream_buffer.v8[i];
    }

    c->bytes_in_buffer -= bytes_to_encr;

    /* return now to avoid the main loop */
    return srtp_err_status_ok;

} else {
    /* encrypt bytes until the remaining data is 16-byte aligned */
    for (i = (sizeof(v128_t) - c->bytes_in_buffer); i < sizeof(v128_t);
         i++) {
        *buf++ ^= c->keystream_buffer.v8[i];
    }

    bytes_to_encr -= c->bytes_in_buffer;
    c->bytes_in_buffer = 0;
}

/* now loop over entire 16-byte blocks of keystream */
for (i = 0; i < (bytes_to_encr / sizeof(v128_t)); i++) {
    /* fill buffer with new keystream */
    srtp_aes_icm_advance(c);

- Joven, no creo que eso sea necesario
- Lo sé, si tuviésemos un Capture esto sería más fácil, pero es lo mejor que puedo hacer
- Joven, les fui a pedir dinero
- Ajá, por eso todo este problema
- Si les fui a pedir dinero, sé donde están
- Ouuuu
- Ajá
- Brillante Becario, brillante...

Nos fuimos a dormir. Al día siguiente, desperté, compre los boletos de avión y pedí un taxi a casa para que pasase por nosotros.

Becario cargó la caja de Shellcode, y nos quedamos esperando en la sala de espera. No había nada que comer por la pandemia, y constantemente pasaba gente a rociarnos de desinfectante.

Después de una larga espera, subimos al avión.

- Caballeros, ¿qué les puedo ofrecer? - nos dijo la aeromosa al subir
- Bourbón solo por favor, ¿Becario?
- Hum.. lo mismo

Nos sentamos en nuestros lugares mientras nos servían.

- Que elegancia la de Francia, parece que las finanzas de la H. Organización Turbia e Ilegal son sólidas, a pesar del Coronavirú
- No, en realidad es que todos los boletos de avión que les recompré en noviembre no me los regresaron en dinero, sólo en puntos, así que ahora puedo viajar por mucho tiempo en primera clase
- Oh.. ¿puedo pedir un cuernito?, tengo hambre
- Claro Becario, mi riqueza es tu riqueza
- Si, si... ¿me puede traer un cuernito, un jugo, unos cacahuates, una agua alcalina y uno de esos cojines para que no se me canse el cuello durante el viaje?.... ah... ¿tiene audífonos
- [Inserte aquí emotición pensante del Wassab]

No sé en que momento del vuelo pedimos la botella completa de bourbon y una tabla de quesos y carnes frías. Lo que fuese con tal de animar al joven Becario.

Al llegar a la Ciudad de México, lo dejé en su casa y quedé de verlo al día siguiente. Sería el momento de la acción.

Al día siguiente, pasé por él a su casa. Se veía de menos limpio, se había arreglado la barba y hasta había tomado un poco de color, gracias al calor infernal del desierto.

Subió al coche y llegamos a la H. Organización Turbia e Ilegal. Todo estaba vacío, incluso parecía estar en ruinas. Había cajas sobre las pasillos, la Señora Esthela no había ido en mucho tiempo, no había el típico aroma a café, y mi thermo tenía el café de hacía medio año que era la última vez que había ido, había vida allí.

Mientras dejamos nuestras cosas en el área de PMs, cruzamos al laboratorio y sacamos nuestras cajas. Por falta de proyectos no teníamos mucho material; le di una Glock y yo me quedé con dos Colt; dividí los escasos cartuchos y dejé en su lugar un papelito que decía «vale por 50 balas».

Salímos del laboratorio y nos fuimos al Red Team, allí prendió el Anafre, mientras me miró con cara de «¿y ahora qué?». Con la mirada respondí un «no tengo idea».

Esos tipos eran peligrosos, al menos frontalmente no les podíamos hacer nada; no eran profesionales, pero eran maleantes que se encargaban de la distribución de drogas en el borde de la ciudad con el Estado de México, y parte de Neza, Ecatepec, Ciudad Azteca, Aragón y todos esos sitios inhabitables de las afueras… y nosotros teníamos 50 balas. Había que ser inteligentes. Sabíamos que tenían algunos servicios que utilizaban para la distribución, y un par de ñoños que les trabajaban para buscar información de cárteles con los cuales trabajar. Mientras Becario veía Facebook, apareció un mensaje en la esquina del monitor, y eso me dio una idea.

- Becario, ¿qué es eso?
- Ahhh... tenía unas sesiones de Metasploit abiertas, y ahorita que prendí el Anafre algo debe de haber pasado

Las notificaciones de Metasploit usan una librería llamada Libnotify; y hay un CVE público para ello. Era justo lo que necesitábamos, nos aprovecharíamos de sus ñoños; tenía un plan.

El siguiente código refleja lo necesario para enviar la notificación:

def initialize(framework, opts)
super
@bin = opts[:bin] || opts['bin'] || `which notify-send`.chomp
@bin_opts = opts[:opts] || opts['opts'] || '--app-name=Metasploit'
raise 'libnotify not found' if @bin.empty?

self.framework.events.add_session_subscriber(self)
self.framework.events.add_db_subscriber(self)
def on_db_host(host)
notify_send('normal', 'New host',
"Addess: #{host.address}\nOS: #{host.os_name}")
end
def on_db_host_state(host, ostate)
notify_send('normal', "Host #{host.address} changed",
"OS: #{host.os_name}\nNb Services: #{host.service_count}\nNb vulns: #{host.vuln_count}\n")
end
def on_db_service(service)
notify_send('normal', 'New service',
"New service: #{service.host.address}:#{service.port}")
end
def on_db_service_state(service, port, ostate)
notify_send('normal', "Service #{service.host.address}:#{service.port} changed",
"Name: #{service.name}\nState: #{service.state}\nProto: #{service.proto}\nInfo: #{service.info}")
end
def notify_send(urgency, title, message)
system("#{@bin} #{@bin_opts} -u #{urgency} '#{title}' '#{message}'")

Como se puede ver, si se taperea el host o el nombre del servicio, es posible inyectar comandos para ejecutar cualquier system call. Sin embargo, esto no se puede hacer directamente porque todo se hace usando la misma información de scouting que Metasploit va generando, por lo que utilice la salida de un Nmap:

[No pude incrustar el XML del Nmap, por las validaciones del blog, pero imagen un XML de un Nmap]

En donde la línea inyectada es:

<port protocolo="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="0"><service name="ssh';ls -la" method="table" conf="3"></port>

Y entonces, a cargar el archivo.

Configuré una VPN y dejé copiando el contenido de toda la NAS que tenían los ñoños del objetivo. Esto a penas comenzaba.

Becario decidió salir a caminar y regresar por su cuenta; creo que necesitaba algo de aire. Yo, por mientras fui al «Villas», esperé en el sillón junto al ascensor; y entonces lo vi pasar, sabía que seguro lo encontraría allí en un viernes.

Iba vestido de traje, siempre elegante; con una bolsa del súper en la mano que dejaba ver una botella de whisky japones. Pasó su tarjeta por la puerta y entró, cuando iba a cerrar puse mi pie.

Giró para ver que era lo que había detenido la puerta, miró al suelo y fue subiendo la mirada; al llegar a mis ojos su cara palideció. Sintió miedo de verte. Di un empujoncito a la puerta y se abrió.

Sin decir nada, se sentó en la cama, no sabía que decir; el pecho evidenciaba que su respiración estaba muy acelerada. Me acerqué y tomé la bolsa, saqué la botella y serví a partes iguales en los vasos; le dí el suyo y me senté en la silla frente a la televisión.

- Te ves asustado - rompí el hielo
- No he hecho nada, lo juro, solo contrato - ¿qué tanto le habría pasado desde entonces para tenerme tanto miedo?
- Ya se acabó eso, vengo a pedirte un favor - el color le regreso
- Tal vez no deberías de decir eso
- Yo no hice nada malo a nadie, cumplí mi servicio, tú lo sabes
- ¿Qué necesitas?

Bebí un trago largo, caray que bueno estaba; puede que le hayan pasado cosas por mi culpa, pero económicamente no le afectaron; ese whisky sabía a dinero, mucho dinero.

- Yo no te puedo ayudar a esto, soy un juez federal; esto lo ven en los juzgados familiares
- Lo sé, pero al menos me puedes recomendar a alguien
- Es muy complicado y caro, si aceptas un consejo, usa el método tradicional
- Hum.. déjame intentarlo

Tomó una hojita del buró y anotonó un número.

- Es un compadre mío, dile que vas de mi parte. Y por favor, no le digas como me conoces

Hice un gesto de agradecimiento mientras guardaba el número en el celular; me puse de pie y de un trago me terminé el contenido del vaso. Que rico, tuve que servirme una vez más y terminarlo nuevamente. Estaba muy rico, tenía que pasar por uno de esos antes de ir a casa.

Me dirigí hacía la puerta y me despedí antes de irme.

- ¿Viernes de reinitas?
- Es de los mejores placeres de la vida
- Hum... no lo sé Rick... gracias por la ayuda; pásala bien

Me dirigí al estacionamiento, y mandé un mensaje al número que me dio. Estaba cansado, ya lo había intentado por mi cuenta dos veces y me habían rechazado; era algo que había querido desde siempre, ahora la corrupción era mi única oportunidad.

Querido Diario…

Llegando a casa verifiqué y la información se había terminado de descargar, así que me puse a revisar algunos archivos que se viesen interesantes, sobre todo puse enfasis en archivos de Excel.

A pesar de lo burdo, el peligro con estos tipos no era menor; Becario estaba metido en un grave problema.

Mi teléfono sonó, era Janey

- Tururururu
- ¿Cómo hace el Metro? - le respondí
- ¿Qué haces?, me dijo Becario Papá que estas aquí
- Ots
- Te vas a coronovirulear
- Nah, estoy maldito; podría meterme a un hospital de infectados y te aseguro que saldría sin nada
- Hum.. - hizo una pausa de inconformidad, pero sabía que tenía que aceptar que era muy probable que pasase eso - ¿vienes a ayudar a Becario Papá?
- ¿Les dijo?
- No, pero lo intuyo
- Si... ¿nos quieres ayudar?
- Va, ¿mañana a que hora?
- 10am... en la H. Organización Turbia e Ilegal
- Ya'staz
- Bye

Estaba aburrida, le faltaba acción. Seguí revisando los archivos… esa noche no dormiría; al igual que todas las noches de las últimas dos semanas.

Abrí Amazon y busqué ese whisky, que bien sabía.