Como siempre, sin nombres, y dado que también estoy asociado con una firma de no divulgación, también tiene un historial ligeramente modificado (y omitiendo algunos detalles para la publicación de los cuales no recibí permiso).
La siguiente es la historia real de un empleado que penetra en una computadora ... bueno, digamos un banco privado. Los eventos sobre los que narra su humilde servidor tuvieron lugar en algún país europeo no hace mucho tiempo, antes del DSGVO (GDPR, RGPD), pero en el proceso de convertirse en uno, en anticipación de la llamada.
En realidad, todo comenzó con una auditoría de seguridad - ..., una entrevista, mirando bajo la lupa de todo y todo, buscando y resolviendo posibles lagunas y cuellos de botella para atravesar (tanto allí como desde allí), ..., y en realidad el informe. En el que el cliente recibió al final una conclusión decepcionante para él: "Calificación C con un estiramiento".
Omitamos las palabras de que los trabajadores de seguridad de TI se sonrojaban ante sus ojos, pero el mensaje lírico general es que estoy lanzando acusaciones infundadas, y tienen todo bloqueado, y la clave de OSC está en mi bolsillo debajo de mi corazón.
Intenta explicar que el sistema de seguridad está construido alrededor de firewall + proxy + web web como filtro de contenido y antivirus, sin IDS híbridos (HIDS + APIDS) mal configurados, honepots, etc. etc., en primer lugar, por definición, no es seguro, en segundo lugar, por así decirlo, ya he mostrado varios lugares en los que al menos no es lo que ocurre. Los intentos de volver a un diálogo constructivo (en realidad volviendo al análisis) se estrellaron contra un muro de resentimiento de tres pisos construido por todo el departamento.
Acortando la reunión y liberando a los empleados, CSO, junto con dos jefes importantes, sin embargo, trató de averiguar honestamente de mí dónde hurgaba y entendía el perro. como vivir mas de hecho y qué es exactamente, en mi humilde opinión, hay que hacer.
Porque Tampoco se observó un atisbo de comprensión en el futuro, con entusiasmo conocí una propuesta para mostrar en la práctica. Después de explicar que en este momento no funcionará, resolviendo los trámites (firmando algunos documentos más, etc.), obtuve el visto bueno.
Realmente no me gusta el hecho de que trabajo "a ciegas" (es una tarea ardua, larga y costosa, y el pentesting es una cuestión de suerte) y proporcione información adicional (por ejemplo, algunos datos personales de empleados individuales, como desarrolladores y personal de seguridad ), Tampoco encontré un contra entendimiento.
¿Eres un hacker o no? (En realidad, no, soy desarrollador, de lo contrario es más un pasatiempo).
No me detendré en más discusiones durante mucho tiempo; como siempre, convencí al factor del dinero y el tiempo (es decir, en realidad el mismo dinero).
Es decir Como resultado, tenemos algún tipo de conocimiento sobre la estructura de defensa de la empresa (obtenida como resultado de una auditoría preliminar), así como un nombre completo y una breve biografía de 4 administradores y 3 desarrolladores.
¿Por qué los administradores y desarrolladores son adecuados, después de todo, uno podría pedir "contadores de niñas", enviarles algún tipo de "gato" con un animal mucho menos seguro adjunto además (o poner en marcha algo similar desde el campo de la ingeniería social) . Pero ...
Sin embargo, a muchas empresas, por regla general, no les gusta realmente cuando comienzan a hablar de ello en la presentación de PoC , es decir. El "sistema de hackeo" basado en intrigas del campo de la ingeniería social no es bienvenido, por muy brillante que sea.
Volviendo a los técnicos, en primer lugar no son menos "sociales" (lo que no significa en absoluto que lanzarán algún tipo de "gato", pero el hecho en sí mismo es importante), y en segundo lugar, generalmente tienen una computadora más "funcionalmente desarrollada" ( que simplemente no cumplirás). Y lo que es más interesante, además, a menudo tienen algún tipo de "privilegio", a diferencia de la misma chica contable, es decir, pueden ser menos infringidos en términos de seguridad y restricciones del sistema (tales como políticas y co - es necesario, por ejemplo, ejecutar un exe-shnik recién compilado de alguna manera) y / o pueden atravesar un "muro" construido por guardias de seguridad (por ejemplo, forzando un túnel a través de un proxy), etc. etc.
Nuevamente, gatear a través de la protección, usando el programador de la computadora o el administrador al mismo tiempo, suena completamente diferente a, por ejemplo, "forzar" a ejecutar el troyano contable.
Es decir inicial recibida, tareas expresadas - vamos ...
El primer paso es recopilar información sobre "clientes": quién, qué, dónde y cuándo.
No voy a estar muy distraído aquí, el artículo no trata completamente de eso, así que solo diré: me decidí por un chico muy social, con Facebook y compañía, incluido su propio canal de YouTube (YouTube, Vasya), varios proyectos de código abierto (tanto en el grupo como en el y propio) y solo una actividad de contribución gigante (pregunta, pero generalmente trabaja en el lugar principal) .
Descubrir hoo-hoo hoy en día generalmente no es un problema (en algún lugar usé mi nombre real en un lugar con un apodo, en algún lugar obtuve una dirección IP proxy de la compañía y se formó la imagen), pero nadie realmente lo oculta.
Me vi obligado a reducir la velocidad, incluyendo mi estilo natural el hecho de que en una de las comunidades nuestro héroe estaba involucrado en un soporte más o menos activo en el chat y usaba el cliente IRC, que en la información del usuario proporcionaba además de IP, de donde crecían las piernas, el nombre y la versión de sí mismo amaban, bueno, eso era famoso errores / agujeros y por defecto estaba envuelto por complementos cuánto en vano.
Bueno, como siempre, una tarde, la casa se durmió, uno se queda en la caja, el nuestro vuelve a perder :) En ese chat encontré un apodo familiar como usuario activo con una conexión de más de 12 horas (a juzgar por el registro con desconexiones / reconexiones intermedias, porque un proxy corporativo es tal cosa, pero más de medio día desde la primera conexión), desde la dirección IP que necesito es decir con un inicio de sesión del formulario max.mustermann@proxyext.our-company.example.com
.
Es decir, nuestro cliente tiene un día: 24 horas, o más probablemente (porque han pasado 2 horas desde su último mensaje), simplemente no apagó la computadora en funcionamiento y dejó al cliente IRC activo.
O tal vez puso la computadora en suspensión, pero (nuevamente, el error de seguridad o de los administradores) sucede que este último se despierta solo, por ejemplo, para actualizar las actualizaciones de Windows (y después de una pausa de 4 horas para reiniciar) o simplemente capta estúpidamente una señal de activación en el LAN ... .
Sea como fuere, tuve algo de tiempo para dar palmaditas a la computadora, o más bien al cliente IRC de nuestra "víctima".
No encontrar un solo agujero conocido en esta versión específica (incidentalmente relevante en ese momento) del cliente IRC, armado con un ida, ollydbg, etc. y mirando a la fuente (¡horror silencioso, Vasya!) comenzó a buscar algún tipo de vulnerabilidad que le permitiera al menos ejecutar algo allí, con el objetivo de controlar al menos remotamente el cliente IRC (y recordamos los complementos).
¡Y fue encontrado, incluso relativamente rápido!
Interceptar el control permitió la llamada insegura de sprintf
al búfer desde la pila con %s
dentro de la entrada extranjera mal filtrada (junto con la inyección de codificación), lo que permite escribir el "cargador de código de explotación" en la pila en el lugar correcto (gracias a los desarrolladores del cliente por el código, Microsoft para lowland stack y suerte).
Aunque el tormento todavía tenía que hacerlo, porque tenemos DEP, no puede ejecutar directamente desde la pila, necesita escribir una copia del "código de programa" en la pila para la ejecución, encontrar la llamada de memcpy
con ret
al final para copiar en el lugar correcto (reescribir la clase menos utilizada), redirigir la salida de varios procedimientos al lugar correcto, sobrescriba varios valores VTABLE para generar un evento llamando al siguiente método virtual que causa algún código de Python como un complemento (y cambie este código de Python al suyo, como un cargador de mensajes rotos, para ensamblar un código ya hecho ployt-toolkit).
Ah, sí, aún tenía que construir un complemento (gracias de nuevo a los desarrolladores del cliente por su generosa funcionalidad), como proxy, cambiar mensajes sobre la marcha (agregar un contenedor para iniciar una inyección, romper la codificación, mientras inserta sustitutos incompletos en el lugar correcto, y t etc.), codifique el cargador inicial del mensaje de inyección, etc.
Además, tuve que construir un pequeño script de Python como un nuevo complemento de cliente para el sistema de destino como un emulador de consola (recibir mis mensajes en su stdin y enviar stdout + stderr en un mensaje privado de nuevo a mi apodo).
Habiendo recogido todo esto en su rodilla, lanzó ese cliente IRC para probarse a sí mismo como víctima, es decir. vea cómo estará en forma completa y terminada.
Y enviando a través de mi complemento desde otra sesión desde la segunda versión lanzada de la aplicación, varias inyecciones de mensajes privados, me encantó ver el saludo habitual de Python >>>
(que pegué en el emulador, en aras de la claridad: la pitón).
Satisfecho como un elefante (notando que la aplicación atacada no se cayó), vio lo que estaba sucediendo en su ventana de salida de mensajes: estaba lleno de varios caracteres no ascii, el más notable de los cuales era
con el número de serie 90h (que al menos no es falso, incluso te da un intento de piratería), pensé que aún tenía que rehacer el gestor de arranque para enmascarar los siguientes mensajes (de repente, todavía funciona y se da cuenta).
Miró el código, y allí estaban esperando la línea NTS en la salida, decidió no molestarse mucho y reescribir estúpidamente el primer byte del mensaje después de cargar cero (con la esperanza de que el mensaje se muestre en la pantalla un poco más tarde).
Repitiendo todo el proceso y esperando el >>>
deseado nuevamente, miré a otra ventana y descubrí que no había nada superfluo en el chat. (Todavía soy un genio) , decidió continuar la prueba.
El mensaje from glob import glob as ls; ls('*')
from glob import glob as ls; ls('*')
y alegremente vi la respuesta como una lista de carpetas y archivos contenidos en la carpeta de la aplicación.
Es cierto que vi el mismo mensaje en la ventana del cliente atacante enviado a mi apodo. También tuve que poner 0 bytes (NTS) al comienzo de la línea después de enviármelo.
Habiendo terminado así con la fase preparatoria, notó que nuestro amigo experimental todavía estaba charlando (¡sin mensajes, Vasya!), Él ya había preparado una hazaña para nuestro candidato.
Vamos ...
Los mensajes de inyección habían desaparecido ... Y después de unos largos segundos (aparentemente el disco estaba inactivo o el proxy estaba tonto) volví a ver la invitación >>>
.
Mientras saltaba por la habitación, todavía no lo diría (ese espectáculo no es para los débiles de corazón, porque como resultado de un proceso descontrolado de manifestar alegría, todavía empujé mis pequeños pies sobre la pata de una silla).
Con una mueca de dolor e inmediatamente pensando: "¿y si algo no es visible en su ventana de retroceso, de repente me equivoqué en algún lugar y la aplicación se bloquea como resultado", recordó un posible reinicio forzado después de la actualización (si de repente la computadora se despertó de eso y ya estaba actualizada), sudando frío (mirando el dedo meñique hinchado y quitando las manos temblorosas) aceleré.
El primer paso es verificar en caso de que estemos allí.
>>> import os; os.environ['userdomain']
y la respuesta es:
'OUR-COMPANY' >>>
Bueno, todo, las manos están desatadas ... Vamos.
Después de verificar con un pequeño script que logonui está bloqueado, después de haberme calmado un poco, decidí ver qué hay disponible en la computadora en general:
>>> from glob import glob as ls; ls(r'C:\Program Files\*')
y en la respuesta, sin creer su suerte, entre muchas cosas interesantes vi lo siguiente:
[...,'C:\\Program Files\\TeamViewer',...] >>>
Es decir no es necesario hacer gestos adicionales: no necesita descargar nada, compilar y buscar una carpeta donde pueda escribir todo sin violar ninguna política.
Y mientras tanto voló:
>>> import subprocess; subprocess.call([r'C:\Program Files\TeamViewer\TeamViewer.exe'])
Bueno, después de la respuesta de regreso:
0 >>>
Después de esperar un tiempo para que TeamViewer atraviese el proxy y el servidor le dio una identificación (con contraseña), ejecuté un script allí, buscando la ventana de TeamViewer, tomándole una captura de pantalla y enviándomela en forma de una línea base64, en la cual, expandiéndola nuevamente a mapa de bits, me complace encontrar tanto el ID como la contraseña para la conexión.
...
A la mañana siguiente, un CSO sorprendido me llamó, quien primero recibió una carta mía (pero por alguna razón vino de la cuenta interna de Exchange de su empleado), y luego una llamada asustada del mismo empleado con las palabras "Chef, lo perdimos, nos rompieron", que encontró una ventana abierta en la mañana Palabra con un texto grande dentro de "Dos por su seguridad. ¡Ha sido pirateado!", Fecha, firma.
Después de eso, la comunicación con los guardias de seguridad ya era más fructífera, sin rocío de saliva, camisas rasgadas y gritos. Enseñado por la amarga experiencia ( por ejemplo, como se describe en este artículo ), intenté todo lo posible para posponer el robo en sí mismo más tarde (porque al principio quería recibir un giro postal por un nuevo "concepto de seguridad"), pero después de mucha persuasión, indicios de cooperación a largo plazo, etc. n., además de las promesas de su parte de "no tocar" al empleado culpable (colega después de todo), tuvieron que exponer casi todos los puntos principales.
Luego recibí la recompensa negociada por piratería (así como el costo de la auditoría preliminar) por completo, pero luego la oficina se comportó ... digamos, no del todo deporte. Para continuar el concierto, contrataron a una firma de auditoría prominente y conocida, que básicamente se negó a trabajar con terceros en mi nombre.
Pues bien, como dicen en Alemania, "Man sieht sich immer zweimal im Leben", que significa "Asegúrate de volver a vernos".