Co z .bash_history ?
Napisał: Patryk Krawaczyński
23/12/2018 w Bezpieczeństwo 1 komentarz. (artykuł nr 670, ilość słów: 346)
W
ramach “Uciekiniera z zastrzeżonej powłoki” wielu z Was dziwiło się jak prosto można uruchomić powłokę bash bez oficjalnego profilu ładowanego z systemu. Tym samym powstało wiele pytań o wiarygodność pliku .bash_history w kontekście śledzenia aktywności użytkowników. Na początku może skonfigurujmy dla tego pliku środowisko systemu najlepiej, jak umiemy.
Odświeżając koncepcje z “Ograniczenia z poziomu powłoki” na początku dodajmy do /etc/profile.d/
(Ubuntu LTS) plik bash_security.sh:
#!/bin/bash if [ `id -g` = "1000" ]; then HISTSIZE=10000 HISTFILESIZE=10000 HISTTIMEFORMAT="[%F %T %Z] " HISTFILE=.bash_history HISTIGNORE="" HISTCONTROL="" TMOUT=300 export HISTSIZE HISTFILESIZE HISTTIMEFORMAT HISTFILE HISTIGNORE HISTCONTROL TMOUT typeset -r HISTSIZE typeset -r HISTFILESIZE typeset -r HISTTIMEFORMAT typeset -r HISTFILE typeset -r HISTIGNORE typeset -r HISTCONTROL typeset -r TMOUT fi
Do pliku $HOME/$HISTFILE
dodajemy jeszcze atrybut append only (chattr +a
) i rozpoczynamy serię testów:
- unset HISTFILE – chroni nas ustawienie zmiennej jako read only,
- export HISTIGNORE=”ls*:cat*” – chroni nas ustawienie zmiennej jako read only,
- export HISTFILESIZE=1 – chroni nas ustawienie zmiennej jako read only,
- echo -n > .bash_history – chroni nas atrybut append only,
- [spacja przed poleceniem] – chroni nas wyzerowanie zmiennej HISTCONTROL,
- kill -9 $BASH_PID – zabicie procesu powłoki bash uruchomione po stronie serwera powoduje szok dla procesu i brak zapisu historii do pliku,
- set +o history – wyłącza w dowolnym momencie logowanie historii dla aktualnej sesji,
- history -c – czyści całą historię wszystkich poleceń aktualnej sesji – jeśli stosujemy to polecenie zawsze to nic nie zostanie do niej zapisane.
Ostatnie trzy przypadki powinny dać nam świadomość, że jeśli użytkownicy danego systemu są wystarczająco zaawansowani, aby uruchamiać złośliwe oprogramowanie – prawdopodobnie będą też wiedzieli, jak ominąć tego typu rejestrowanie poleceń. Historia powłoki bash mimo wielu starań nie jest systemem audytu i nigdy nie miała za taką uchodzić. Jest to tylko pomoc w nawigacji po systemie dla zwykłego użytkownika systemu.
Więcej informacji: Bash History, HISTCONTROL, Hiding from Bash history
W standardzie bash zapisuje tylko historię poleceń do
.bash_history
, gdy bieżąca sesja dobiega końca. Oznacza to, że jeśli nasza sesja zostanie zamknięta w nieprawidłowy sposób – cała historia zostanie utracona. Możemy to zmienić ustawiając zmienną$PROMPT_COMMAND
: