2013-03-29 3 views
6

Chciałbym uchwycić wszystkie polecenia napisane w systemie Unix/Linux przez dowolnego użytkownika. Istnieje kilka alternatyw, takich jak użycie polecenia skryptu lub narzędzia acct. Ale problem z nimi polega na tym, że odrzucają wszystko od terminala do pliku lub po prostu dostarczają podsumowanie poleceń. Szukam narzędzia, w którym dostarczy mi wszystkie polecenia wpisane przez dowolnego użytkownika z argumentami dla poleceń. Czy to możliwe? Czy istnieją jakieś alternatywy, takie jak wykonywanie haka w wywołaniach systemowych, aby to uzyskać?Jak przechwycić wszystkie polecenia napisane w systemie Unix/Linux przez dowolnego użytkownika?

+2

Czy historia powłoki jest realną opcją? – wei2912

+0

Nie chcę używać historii dostarczonej przez bash lub jakąkolwiek inną powłokę. – vinayag

+1

Doskonała odpowiedź na: http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD

Odpowiedz

4

Wydaje się, że istnieje całkiem dobry artykuł na temat kontroli powłoki pod numerem http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/.

Uwzględnia takie elementy, jak niezawodność plików historii użytkownika (i dostarcza informacji na temat poprawy tego stanu), ale omawia także jawne funkcje inspekcji wbudowane w powłoki. Możliwe, że jakiekolwiek środowisko, z którego korzystasz, nie ma powłok skompilowanych z włączonymi opcjami inspekcji, ale jeśli masz dostępne źródło i konfigurację dla twoich kompilacji (tak jak zrobiłbyś to przynajmniej dla każdej dystrybucji Linuksa), to nie powinno. • zbyt trudne jest włączenie funkcji audytu przy zachowaniu reszty konfiguracji, ponieważ znajduje się ona w domyślnej dystrybucji.

To, co jeszcze pozostało do otwarcia, to polecenia wykonywane przez inne polecenia - lub funkcje systemu operacyjnego wywoływane z poziomu jakiegoś programu. Tak więc, np. jeśli masz perla lub inny interpreter języka programowania dostępny na maszynie, podczas gdy możesz kontrolować wykonanie perla, nie możesz powiedzieć tego, co użytkownik powiedział do interpretera perla. Z drugiej strony, nawet przy inspekcji powłoki, nie jestem pewien, czy wykonanie perl będzie widoczne, jeśli zostało wykonane, np. z poziomu edytora (np. vi) jako filtr do przetworzenia tego, co zostało napisane w edytorze.

Tak więc, podczas gdy inspekcja powłoki zapewni jedną warstwę kontroli, wzmocnienie nie jest zbyt duże, chyba że środowisko jest naprawdę zaostrzone względem innych ścieżek wykonywania niż powłoka.

Należy rozważyć, czy użytkownicy, którzy mają być poddani audytowi, faktycznie potrzebują dostępu do powłoki, a jeśli nie, powinni zapewnić im coś bardziej ograniczonego, z możliwością audytu. Może mały system menu oparty na tekście?

0

Grab /home/victim/.bash_history lub /home/victim/.config/fish/fish_history

To pozwoli Ci zobaczyć wszystkie polecenia bash i skorupiaków z argumentami, że ws wprowadzonych przez użytkownika.

+0

Twórca pytań wyraźnie chciał NIE używać historii. –

0

Najprostszym sposobem, aby rozwiązać ten problem, to jeśli korzeń i w stanie zmienić system plików przez przekierowanie samej konsoli w ten sposób:

Jeśli używasz na przykład /bin/sh jako domyślny konsoli, przenieść go do /bin/hs i utworzyć plik takiego pod /bin/sh:

#!/bin/hs 

ORIGSHELL=/bin/hs 
LOGFILE=/var/log/whatyoulike 

OPTIONS="[email protected]" 

USER=`whoami` 
WEBUSER=web 
WILD=NO 
WARN=NO 



if [ "$USER" = "$WEBUSER" ] 
then 

    #Ok then - are we doing something wild? 
    for ARG in [email protected] 
    do 
    case "$ARG" in 
    *\/lynx) 
     WILD=YES 
     ;; 
    *\/wget) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/curl) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/links) 
     WILD=YES 
     WARN=YES 
     ;; 
    *\/fetch) 
     WILD=YES 
     WARN=YES 
     ;; 
    esac 
    done 

    #Are we wild? 
    if [ "$WILD" = "YES" ] 
    then 
    HOST=`hostname` 
    IPADDR=`resolveip -s $HOST` 
    NETSTAT=`/usr/bin/nighthawk -ape --numeric-hosts --numeric-ports --tcp | grep 'ESTABLISHED web'` 

    # Log it. 
    echo "`date` [$USER] $IPADDR "[email protected]"" >> $LOGFILE 
    echo "$NETSTAT" >> $LOGFILE 
    fi 
    #Are we REALLY wild? 
    if [ "$WARN" = "YES" ] 
    then 
    # Mail it! 
    mail -s 'HACKATTACK' [email protected] < $LOGFILE & 
    fi 
fi 

# Now, do it. 
exec $OPERATION "[email protected]" 

#we never come here... 
exit 0 

Jest to tylko przykład, w jaki sposób może być wykorzystywane do śledzenia wszystkiego przejrzysty. Możesz zrobić to, co chcesz, aby sprawdzić dane wejściowe. Powyższy skrypt służy do znajdowania nawet twórcy bieżącej powłoki, dzięki czemu można na nią reagować. Oczywiście powyższe sprawdzenia nie są tymi, których naprawdę używamy;) - ale dobra próbka.

nadzieję, że to pomaga, Jimmy

+0

To wygląda na bardzo niebezpieczny pomysł, ponieważ zastępuje powłokę systemu. –

1

Grab źródłem bash. Dodaj rejestrator wokół wywołania exec. Skompiluj to. Uruchom to jako pierwsze polecenie po zalogowaniu.

Wszystko inne naprawdę chce mocy root.

0

Nie jest umożliwienie kontroli, nagrywanie tty, hacki i darmowe narzędzia do tego, co chcesz, jednak, w zależności od skali środowisku jesteś stara się kontrolować, może być lepiej za pomocą zarówno Audit, jak i produktów skoncentrowanych na radzeniu sobie z wyzwaniem, któremu chcesz sprostać. Niektóre dość popularne, używane na kilku klientów usług finansowych [Observe-IT, Centrify i PowerBroker

Nadzieja to pomaga

2

Można użyć Snoopy Logger

Co to jest: prosta biblioteka, która wstawia pomiędzy procesami a execv/e() dzięki wstępnemu załadowaniu LD. Loguje wszystkie wykonane polecenia do syslog.

Co to jest: Rozwiązanie bezpieczeństwa/audytu - można go łatwo obejść. Nie rejestruje wbudowanych poleceń powłoki (ponieważ są one wewnętrzne i po wywołaniu, powłoka nie tworzy nowego procesu - na przykład echo vs/bin/echo).

Ujawnienie: obecny opiekun snoopy tutaj.

1

Do sporadycznego nagrywania zwykle uruchamiam

ssh localhost | tee - zarejestrowana sesja.log

Działa to całkiem dobrze.

Powiązane problemy