Red de conocimiento informático - Conocimiento de Internet de las cosas - Cómo prevenir ataques de desbordamiento de búfer en el sistema operativo Linux Hacker Martial Arts

Cómo prevenir ataques de desbordamiento de búfer en el sistema operativo Linux Hacker Martial Arts

Aunque sólo existen unos pocos virus para Linux, los ataques basados ​​en la vulnerabilidad BufferOverflow todavía sorprenden a muchos usuarios de Linux. ¿El llamado "primer virus Linux del mundo"? Reman, estrictamente hablando, no es un virus real. Es esencialmente un antiguo "desbordamiento de búfer" que existe desde hace mucho tiempo en el mundo Linux/Unix (incluido Windows y otros sistemas). "programa de ataque. reman es simplemente un programa de desbordamiento de búfer automatizado muy común, pero aun así, ha causado mucho pánico en la comunidad Linux.

La vulnerabilidad de desbordamiento del búfer es un problema que ha preocupado a los expertos en seguridad durante más de 30 años. En pocas palabras, es un error de memoria que ocurre en el software debido a mecanismos de programación. Estos errores de memoria permiten a los piratas informáticos ejecutar un código malicioso para interrumpir el funcionamiento normal del sistema o incluso obtener el control de todo el sistema.

Características del sistema Linux

El uso del desbordamiento del búfer para reescribir el contenido de la memoria relacionada y la dirección de retorno de la función, cambiando así el flujo de ejecución del código, solo es válido dentro de un cierto rango de permiso. Debido a que la ejecución del proceso está relacionada con los permisos de inicio de sesión y la identidad del usuario actual, la simple creación de un desbordamiento del búfer no puede romper la configuración de permisos del sistema para el usuario actual. Por lo tanto, aunque el desbordamiento del búfer se puede utilizar para hacer que un programa ejecute otros códigos específicos, el código ejecutado solo tiene permisos específicos y no puede completar tareas más allá de los permisos.

Sin embargo, algunas características del propio sistema Linux (incluido Unix) pueden aprovecharse para superar las limitaciones de este permiso, haciendo posible utilizar el desbordamiento del búfer para obtener permisos mayores o incluso completos. Se refleja principalmente en los dos aspectos siguientes:

1. El sistema Linux (incluido Unix) permite a otros usuarios utilizar el ID de usuario o el nombre de usuario del propietario del archivo ejecutable estableciendo el atributo de un archivo ejecutable en SUID o SGID ID de grupo para ejecutarlo. Si el atributo del archivo ejecutable es raíz y el atributo del archivo está establecido en SUID, entonces el archivo ejecutable tiene una vulnerabilidad de desbordamiento de búfer explotable, que puede usarse para ejecutar código específico, de lo contrario organizado como raíz. Dado que se puede ejecutar un código con permisos de root y generar un Shell con permisos de superusuario, surge el peligro de hacerse con el control de todo el sistema.

2. Muchos procesos demonio en Linux (incluido Unix) se ejecutan con privilegios de root. Si estos programas tienen desbordamientos de búfer explotables, se pueden usar directamente como root para ejecutar otro código organizado sin modificar los atributos SUID o SGID del programa. Esto facilitará el control del sistema.

Con el desarrollo de la tecnología de red moderna y la profundización de las aplicaciones de red, el mecanismo de inicio de sesión remoto, las llamadas remotas y el mecanismo de ejecución proporcionados por la red informática son necesarios. Esto le da a un usuario anónimo de Internet la oportunidad de explotar una vulnerabilidad de desbordamiento del búfer para obtener control parcial o total de un sistema. De hecho, los ataques que utilizan vulnerabilidades de desbordamiento de búfer representan la gran mayoría de los ataques a redes remotas, lo que representa una amenaza de seguridad extremadamente grave para los sistemas Linux.

Análisis de ruta

Por lo general, los atacantes primero atacarán el programa raíz y luego usarán el error de memoria que ocurre cuando el búfer se desborda para ejecutar código similar a "exec(sh)", por lo tanto Consigue un shell para root. Para obtener un shell con privilegios de root, el atacante debe completar las siguientes tareas:

1. Organizar el código específico apropiado en el espacio de direcciones del programa. Generalmente, se utilizan los dos métodos siguientes para organizar el código de ataque en el espacio de direcciones del programa atacado.

2. Al inicializar correctamente los registros y la memoria, el programa no puede regresar al lugar de ejecución original cuando se produce un desbordamiento del búfer, sino que salta al espacio de direcciones organizado para su ejecución.

El peligro de ataque surge cuando un atacante encuentra una manera de cambiar el código de ejecución y el proceso del programa original.

***2 páginas: 1 [2]

Navegación de contenido

Página 1: Características del sistema Linux

Medidas preventivas

p>

La amenaza de ataques de desbordamiento de búfer en Linux proviene tanto del mecanismo de escritura del software como de las características del propio sistema Linux (y Unix). De hecho, la razón fundamental por la que proliferan los ataques de desbordamiento del búfer y diversos virus informáticos es que los sistemas informáticos modernos adoptan el principio de funcionamiento del "programa almacenado" de von Neumann. Este principio básico permite reproducir, copiar y ejecutar tanto programas como datos en la memoria. Por lo tanto, si desea prevenir eficazmente ataques de desbordamiento de búfer, debe prestar atención a estos dos aspectos.

Asegúrese de que el código sea correcto y seguro

La causa principal de los ataques de desbordamiento del búfer radica en el mecanismo de escritura del programa. Por lo tanto, para evitar vulnerabilidades de desbordamiento del búfer, primero debe asegurarse de que el código del programa (incluido el software del sistema y el software de aplicación) que se ejecuta en el sistema Linux sea correcto y evitar situaciones en las que las variables, los tamaños del búfer y los límites no se verifiquen en el programa. . Por ejemplo, use la herramienta grep para buscar llamadas a bibliotecas que sean propensas a vulnerabilidades en el código fuente, detectar el tamaño de las variables, los límites de las matrices, proteger las variables de puntero y usar un compilador de C con funciones de detección de límites y tamaño, etc. .

Para configurar el sistema en función de una determinada política de seguridad

Un atacante que ataca un determinado sistema Linux debe tener de antemano el conocimiento necesario del sistema que va a ser atacado a través de ciertos canales. como información de versión, etc. Luego use ciertas configuraciones del sistema para obtener el control directa o indirectamente. Por lo tanto, el segundo aspecto de la protección contra ataques de desbordamiento del búfer es implementar políticas de seguridad efectivas para la configuración del sistema. Existen muchos tipos de estas estrategias. Debido al espacio limitado, solo se enumeran algunas medidas típicas:

(1) Cuando el servicio Telnet esté instalado, vuelva a escribir manualmente la configuración de Telnet en "/etc/inetd. .conf", para que los usuarios que inicien sesión de forma remota no puedan ver la información del sistema. El método específico es reescribir la configuración de Telnet como:

telnet stream tcp nowait root /usr/sbin/tcpd/in.telnetd -h

Agregue el parámetro "-h" en al final para hacer El demonio no muestra ninguna información del sistema, solo el mensaje de inicio de sesión.

(2) Vuelva a escribir el archivo "rc.local". De forma predeterminada, al iniciar sesión en un sistema Linux, el sistema ejecuta el archivo rc.local, que muestra información como el nombre, el número de versión, la versión del kernel y el nombre del servidor de la distribución de Linux. Esto permite que se almacene una gran cantidad de información del sistema. ser filtrado. Comente el código que muestra esta información en el archivo "rc.local" para evitar que el sistema muestre esta información.

Una forma es agregar "#" antes de la línea de código que muestra esta información:

......# echo "">/etc/issue# echo " $R" >>/etc/issue#echo”Kernel $ (uname -r)on $a $(uname -m)” >>/etc/issue##echo >>/etc/issue……

Otro método es eliminar los archivos /etc/issue.net y el problema que contienen información del sistema. Estos dos archivos se utilizan para proporcionar información relevante a los usuarios durante el inicio de sesión remoto y el inicio de sesión local, respectivamente. Mientras elimina estos dos archivos, aún debe completar el trabajo de anotación en el método uno; de lo contrario, el sistema regenerará automáticamente estos dos archivos cuando se inicie.

(3) Está prohibido proporcionar servicios con los dedos. En sistemas Linux, utilice el comando finger para mostrar información detallada sobre los usuarios actualmente conectados en el sistema local o remoto. Una forma eficaz de desactivar el servicio Finger es modificar los atributos y permisos del archivo (a 600) para que solo el usuario root pueda ejecutar el comando.

(4) Procese el archivo "inetd.conf". El sistema Linux carga programas de red de acuerdo con las solicitudes de la red a través del programa inetd (superservidor). Este programa obtiene información como qué puertos de red está escuchando inetd y qué servicios específicos se inician para cada puerto a través del archivo "/etc/inetd.conf".

Por tanto, el archivo también revelará una gran cantidad de información sensible. La solución al problema es cambiar sus permisos a 600 para permitir que sólo los usuarios root accedan a él, deshabilitar los programas de servicio innecesarios reescribiendo el archivo "/etc/inetd.conf" y finalmente modificar los atributos del archivo para que no pueda ser accedido por el usuario root.

Resumen

La razón por la que los ataques de desbordamiento de búfer se han convertido en un método de ataque común es que las vulnerabilidades de desbordamiento de búfer son ataques demasiado comunes y fáciles de implementar. Por lo tanto, el problema de desbordamiento de búfer siempre ha sido. un problema.

Afortunadamente, el equipo de desarrollo de OpenBSD ha adoptado tres estrategias nuevas y efectivas para resolver este problema de seguridad. Creo que en un futuro próximo los usuarios de Linux ya no tendrán que preocuparse por los ataques de desbordamiento del búfer.

Los archivos RAR se pueden usar en Linux

Para procesar archivos .rar en Linux, necesita instalar RARforLinux. El software se puede descargar de Internet, pero tenga en cuenta que no es gratuito. Puede descargar RARforLinux 3.2.0 desde /sort/125_1.htm y luego instalarlo con el siguiente comando:

# tar -xzpvf rarlinux-3.2.0.tar.gz

# cd rar

# make

Después de la instalación, hay dos programas rar y unrar es un programa de compresión y unrar es un programa de descompresión. Tienen muchas opciones de parámetros. Aquí hay solo una breve introducción y un ejemplo para ilustrar su uso:

# rar a all *.mp3

Este comando es para combinar todos los archivos .mp3. Comprímalo en un paquete rar llamado all.rar. El programa agregará automáticamente la extensión .rar al nombre del paquete.

# unrar e all.rar

Este comando es para extraer todos los archivos en all.rar.