Fundamentos de Variables en Bash
En sistemas operativos diseñados para auditoría como Kali Linux, las variables de entorno actúan como contenedores dinámicos de información. Funcionan mediante pares clave-valor y se dividen principalmente en dos categorías: variables de shell (limitadas a la sesión de terminal actual) y variables de entorno globales (heredadas por subprocesos y aplicaciones).
Consultas y Operaciones Básicas
Para visualizar la configuración del sistema, se pueden utilizar comandos integrados que listan las variables activas, permitiendo filtrar parámetros específicos relacionados con el comportamiento del shell.
# Listar variables de entorno globales
env
# Mostrar todas las variables disponibles
declare -p
# Filtrar una variable específica
declare -p | grep HISTSIZE
# Asignar y leer un valor
MI_VARIABLE="datos_secreto"
echo $MI_VARIABLE
# Eliminar una variable
unset MI_VARIABLE
Control Dinámico y Aislamiento
Es posible lanzar procesos en espacios aislados o restringir los permisos de las variables. Declarar variables locales dentro de funciones evita fugas de datos, mientras que las variables de solo lectura protegen configuraciones críticas contra modificaciones accidentales.
# Iniciar una terminal sin variables predefinidas
env -i bash
# Heredar únicamente rutas esenciales
env -i RUTA=$PATH DIRECTORIO=$HOME bash
# Declaración local y de solo lectura
local RUTA_TMP="/tmp/auditoria"
declare -r CLAVE_API="12345-ABC"
Gestión de Historial y Rutas (PATH)
El parámetro HISTSIZE controla el número de comandos almacenados. Anular este valer es una técnica común para evitar dejar rastros en el sistema durante operacionse sensibles.
# Desactivar el registro de comandos
export HISTSIZE=0
export HISTFILE=/dev/null
# Normalizar el tamaño del historial
export HISTSIZE=5000
La variable PATH define los directorios donde el sistema busca ejecutables. Mantenerla limpia optimiza la respuesta del sistema. Se puede implementar una función para eliminar rutas duplicadas:
depurar_ruta() {
local ruta_temp=""
local IFS=':'
for directorio in $PATH; do
if [[ ! ":$ruta_temp:" == *":$directorio:"* ]]; then
ruta_temp="$ruta_temp:$directorio"
fi
done
export PATH="${ruta_temp#:}"
}
Modos de Operación y Cifrado
A través de scripts de configuración personalizados, se pueden definir perfiles de trabajo que alteren el comportamiento del shell instantáneamente. Esto es útil para alternar entre tareas ofensivas, sigilo y administración estándar.
cambiar_modo() {
case "$1" in
invisible)
export HISTFILE=/dev/null
export HISTSIZE=0
export PS1="> "
;;
ofensivo)
export PATH="$PATH:/opt/exploits/bin:/opt/scanners"
export PS1="[Pentest]$ "
;;
default)
export HISTSIZE=5000
export HISTFILE=~/.bash_history
export PS1="\u@\h:\w$ "
;;
esac
}
Para proteger credenciales o variables sensibles, se pueden aplicar funciones que utilicen utilidades criptográficas como OpenSSL para almacenar y recuperar datos bajo demanda.
guardar_secreto() {
printf "%s" "$1" | openssl enc -aes-256-cbc -salt -pbkdf2 -out ~/.bodega_env
}
leer_secreto() {
openssl enc -aes-256-cbc -d -pbkdf2 -in ~/.bodega_env 2>/dev/null
}
Automatización de Toolkits y Proxies
La integración de herramientas de pentest y la redirección de tráfico se simplifican asignando bloques de rutas y configuraciones de red mediante funciones de bash.
integrar_toolkit() {
local directorios=("/opt/burp" "/opt/metasploit" "/opt/scripts")
for d in "${directorios[@]}"; do
[[ -d "$d" ]] && PATH="$PATH:$d"
done
export PATH
}
configurar_red_anonima() {
export ALL_PROXY="socks5://127.0.0.1:9050"
export http_proxy="http://127.0.0.1:8080"
export NO_PROXY="localhost,127.0.0.1"
}
Monitoreo y Diagnóstico del Entorno
Para asegurar la integridad del entorno, se pueden impleemntar rutinas de monitoreo que detecten alteraciones en tiempo real, así como diagnósticos rápidos para revisar permisos y configuraciones.
vigilar_entorno() {
local captura_anterior=$(env)
while true; do
local captura_actual=$(env)
if [[ "$captura_actual" != "$captura_anterior" ]]; then
echo "Alerta: Modificación detectada en el entorno"
diff <(echo "$captura_anterior") <(echo "$captura_actual")
captura_anterior="$captura_actual"
fi
sleep 2
done
}
auditar_sistema() {
echo "Variables críticas:"
for var in PATH LD_LIBRARY_PATH PYTHONPATH; do
printf "%s = %s\n" "$var" "${!var}"
done
echo "Archivos ocultos modificados recientemente:"
find ~ -maxdepth 1 -mtime -1 -type f -name ".*"
}