Dlinject

1 minuto(s) de lectura

Dlinject es una biblioteca compartida (es decir, c贸digo arbitrario) inyectable en un proceso de Linux en vivo, sin la necesidad de ptrace.

Dlinject se creo Inspirado por Cexigua y linux-inject, entre otros.

驴Por qu茅?

  • Porque puedo.
  • Existen varias t茅cnicas anti-ptrace , que esto evade simplemente al no usar ptrace.
  • No me gusta ptrace.
  • El uso a LD_PRELOADveces puede ser complicado o imposible, si el proceso en el que desea inyectarse es generado por otro proceso con un entorno limpio.

C贸mo funciona

  • Env铆e la se帽al de parada al proceso de destino. (Opcional)
  • Localiza el _dl_open()s铆mbolo.
  • Recuperar RIPy RSPv铆a /proc/[pid]/syscall.
  • Haga una copia de seguridad de parte de la pila y del c贸digo que estamos a punto de sobrescribir con nuestro c贸digo shell, leyendo /proc/[pid]/mem.
  • Generar buffers de c贸digo de shell primario y secundario.
  • Inserte el shellcode primario en RIP, escribiendo a /proc/[pid]/mem.
  • El shellcode primario:
    • Empuja registros comunes a la pila.
    • Carga el shellcode secundario a trav茅s de mmap().
    • Salta al shellcode secundario.
  • El shellcode secundario:
    • Restaura la pila y el c贸digo del programa a sus estados originales.
    • Pivota la pila (para que no toquemos la original).
    • Llamadas _dl_open()para cargar la biblioteca especificada por el usuario. Cualquier constructor se ejecutar谩 en carga, como de costumbre.
    • Restaura el estado del registro, des-pivota la pila y salta de nuevo a donde estaba en el momento del original SIGSTOP.

Limitaciones:

  • El env铆o SIGSTOPpuede causar efectos secundarios no deseados, por ejemplo, si otro hilo est谩 esperando waitpid(). La --stopmethod=cgroup_freezeopci贸n evita esto, pero requiere root (en la mayor铆a de las distribuciones, al menos).
  • No estoy completamente seguro de c贸mo interactuar谩 esto con aplicaciones complejas de subprocesos m煤ltiples. Ciertamente hay potencial de rotura.
  • x86-64 Solo Linux (por ahora, se podr铆a agregar soporte de 32 bits).
  • Requiere root o configuraci贸n de YAMA relajada ( echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scopees 煤til al realizar pruebas).
  • Si el proceso de destino est谩 protegido (por ejemplo, filtros seccomp), es posible que no tenga permiso para mmap()el shellcode de la segunda etapa o para dlopen()la biblioteca.

Categor铆as: Depuraci贸n

INF.: Esta obra contiene una traducci贸n total derivada de Dlinject de Github en ingl茅s, publicada por sus editores bajo Licencia MIT.

Actualizado: