Técnicas Defensivas
Estrategia de Defensa para la Ejecución de Comandos
1. Validación y Sanitización de Entradas
def secure_input_validation(user_input):
## Implementar un filtrado estricto de la entrada
patrones_peligrosos = [
';', '&&', '||', '|',
'$()', '`', '>', '<'
]
for patron in patrones_peligrosos:
if patron in user_input:
raise ValueError("Se detectó una posible inyección")
return user_input
2. Principio de Mínimos Privilegios
flowchart TD
A[Principio de Mínimos Privilegios] --> B[Acceso Mínimo al Sistema]
A --> C[Permisos Basados en Roles]
A --> D[Ejecución de Comandos Restringida]
3. Técnicas de Ejecución Segura de Comandos
| Técnica |
Descripción |
Nivel de Seguridad |
| Comandos Parametrizados |
Separar el comando de los argumentos |
Alto |
| Listado Blanco |
Permitir solo comandos predefinidos |
Crítico |
| Sanitización de Entradas |
Eliminar caracteres peligrosos |
Medio |
4. Manejo Seguro de Subprocesos
import subprocess
import shlex
def safe_command_execution(command):
## Usar shlex para dividir correctamente el comando
try:
## Prevenir la inyección de shell
args = shlex.split(command)
## Ejecutar con controles estrictos
result = subprocess.run(
args,
capture_output=True,
text=True,
check=True
)
return result.stdout
except subprocess.CalledProcessError as e:
## Manejar errores de ejecución
print(f"La ejecución del comando falló: {e}")
return None
Mecanismos de Defensa Avanzados
Técnicas de Contención (Sandboxing)
flowchart TD
A[Contenedores (Sandboxing)] --> B[Aislamiento de Procesos]
A --> C[Limitación de Recursos]
A --> D[Entorno de Ejecución Controlado]
Estrategia de Defensa Integral
- Validación de Entradas
- Listado Blanco de Comandos
- Controles de Acceso Estrictos
- Registros y Monitoreo
- Auditorías de Seguridad Periódicas
Ejemplo de Implementación Práctica
#!/bin/bash
## Script de ejecución segura de comandos
## Definir comandos permitidos
COMANDOS_PERMITIDOS=("ls" "pwd" "date" "whoami")
## Función para validar el comando
validar_comando() {
local cmd="$1"
for permitido in "${COMANDOS_PERMITIDOS[@]}"; do
if [[ "$cmd" == "$permitido"* ]]; then
return 0
fi
done
return 1
}
## Ejecutar comando con validación
ejecutar_comando_seguro() {
if validar_comando "$1"; then
eval "$1"
else
echo "Intento de comando no autorizado"
exit 1
fi
}
Recomendaciones de Seguridad de LabEx
Utilice los entornos controlados de LabEx para practicar e implementar estas técnicas defensivas de forma segura.
Principios Clave de Defensa
- Siempre validar y sanitizar las entradas.
- Usar comandos parametrizados.
- Implementar controles de acceso estrictos.
- Monitorear y registrar las ejecuciones de comandos.
- Actualizar y parchear los sistemas regularmente.
Técnicas de Mitigación
1. Filtrado con Expresiones Regulares
import re
def advanced_input_filter(user_input):
## Filtrado de entrada completo
patron_peligroso = re.compile(r'[;&|`$()]')
if patron_peligroso.search(user_input):
raise ValueError("Entrada potencialmente maliciosa detectada")
return user_input
2. Envoltorio de Ejecución de Comandos
def secure_command_wrapper(command, allowed_commands):
## Control estricto de la ejecución de comandos
if command.split()[0] not in allowed_commands:
raise PermissionError("Comando no autorizado")
try:
return subprocess.check_output(
command.split(),
stderr=subprocess.STDOUT
).decode('utf-8')
except subprocess.CalledProcessError as e:
print(f"Error en la ejecución del comando: {e}")
Conclusión
Las técnicas defensivas efectivas requieren un enfoque multicapa que combine controles técnicos, validación de entradas y monitoreo de seguridad continuo.