Un atacante que realmente quisiera ocultar sus pistas simplemente editaría el archivo de historial a mano.
Puede hacer que sea más difícil para un usuario no root ocultar los comandos que ya ha escrito en bash. Pero esto solo requiere que el atacante sea moderadamente competente.
- Si hace que la variable
HISTFILE
sea de solo lectura, bash guardará los últimos comandos $HISTFILESIZE
en ese archivo cuando salga. También puede hacer que HISTFILESIZE
(y HISTSIZE
) sea de solo lectura y establecerlos en un valor alto. Sin embargo, esto es muy fácil de vencer, por ejemplo, utilizando el history
incorporado para sanear el historial antes de salir. Y dado que bash escribe las entradas del historial cuando sale y no después de cada comando, simplemente salga de bash con kill -9 $$
y no se guardará ningún historial. Se le puede indicar a Zsh que guarde el historial después de cada comando, pero no de ninguna manera que el atacante no pueda deshacer trivialmente.
- En Linux, puede hacer que el archivo histórico se agregue solo con
chattr +a ~user/.bash_history
. Solo la raíz puede eliminar el atributo de solo agregado de un archivo. Como se vio anteriormente, esto solo significa que si el atacante comete un error , no podrá borrar sus huellas.
Incluso si lograste tener todos los comandos de un shell en particular registrados, esto no sería útil para la seguridad. El atacante podría simplemente emitir comandos desde otra aplicación, de una manera que no levantaría ninguna bandera roja y sería plausiblemente denegable. ( zsh
, fish
: ok, entonces él prefiere esa shell. emacs
, vi
: así que editó un archivo de texto. ssh
: probablemente solo quería conectarse a otra máquina. ~/bin/foo
: es solo un guión inocente, pero ¿quién sabe lo que era hace dos horas?)
Linux (como la mayoría de las unidades unicas) tiene un sistema simple de auditoría de comandos llamado contabilidad de procesos que generalmente está habilitado de forma predeterminada: el El nombre del ejecutable, la hora y el usuario en ejecución para cada comando ejecutado se almacenan en /var/log/account
(la ubicación exacta puede variar entre las distribuciones). Puede ver ese archivo de registro con lastcomm
. Esto puede ayudarlo en su actual esfuerzo forense, pero puede ser derrotado por un atacante moderadamente competente (por ejemplo, al vincular cada ejecutable con /var/tmp/$name/ls
), todo lo que puede saber de manera confiable es que hubo actividad de ese usuario en un cierto tiempo.
Hay paquetes de auditoría más completos, en particular el subsistema de auditoría que john sugerido . Busque auditctl
para encontrar algunos ejemplos de cómo configurarlo. Por lo general, esto no está activado de manera predeterminada, ya que viene con un impacto de rendimiento (no sé qué tan malo es esto en la práctica).
Otra herramienta simple que está (al menos parcialmente) predeterminada es el tiempo de archivo. Si el tiempo de espera de un archivo es anterior a la intrusión, el atacante no lo modificó. Si tiene habilitados los tiempos de acceso a los archivos (esto solía ser el caso de forma predeterminada, pero ahora con frecuencia está deshabilitado para el rendimiento; verifique las opciones de montaje *atime
),.
Todo eso asume que el atacante no ganó la raíz, de lo contrario todas las apuestas están desactivadas. Tenga en cuenta que la atacante incluso puede haber dejado huellas deliberadamente que hacen que parezca que no aumentó su acceso al limpiar inteligentemente solo las huellas más comprometidas. Si le preocupa algo, vuelva a instalar el sistema desde copias de seguridad limpias (así como a otros sistemas a los que el atacante pueda haber llegado después de la interrupción inicial).