Ustawienie chroniące terminal gnome przed logowaniem klucza

15

Wygląda na to, że rejestrowanie naciśnięć klawiszy wszystkich procesów tego samego użytkownika jest łatwe. Podstawowym keyloggerem jest „xinput”.

xinput test-xi2

Polecenie generuje dziennik wszystkich naciśnięć klawiszy. Niestety, obejmuje to hasła w gnome-terminal. Googling zasugerował, że chwytanie klawiatury może uniemożliwić innym oknom przechwytywanie naciśnięć klawiszy.

Czy istnieje sposób, aby zapobiec logowaniu XI2 w terminalu gnome? Czy istnieje terminal X, który ma tę funkcję?

yanychar
źródło
Czy to jest rozwiązanie?
Radu Rădeanu,

Odpowiedzi:

13

Nie jest to możliwe, ponieważ jakiekolwiek naciśnięcia klawiszy przekazywane na serwer X będą dostępne dla xinput / dowolnego dowolnego programu. (W rzeczywistości jest to część projektu). Nowe serwery wyświetlania, takie jak Wayland i Mir, naprawiają takie problemy bezpieczeństwa w X. Jedynym prawdziwym rozwiązaniem byłoby użycie Wayland lub Mir zamiast X. Ten post na blogu szczegółowo opisuje ten problem.

Ramchandra Apte
źródło
Więc wejście do gksu dla hasła również przechodzi do xinput?
yanychar
1
@ yanychar tak, faktycznie dowiedziałem się o tej metodzie logowania za pomocą tego wpisu na blogu: theinvisiblethings.blogspot.in/2011/04/… (nawet byłem zaskoczony, kiedy czytałem ten wpis na blogu)
Ramchandra Apte
2
X11 faktycznie ma niezaufany tryb, którego można użyć, aby uniemożliwić programom dostęp do „złych” rozszerzeń - x.org/wiki/Development/Documentation/Security
Michał Zieliński
-1

Nie całkiem. Nawet jeśli jakoś uda ci się złapać klawiaturę w X (nie wiem, czy to w ogóle możliwe, wątpię w to), narzędzie keylogger działające jako root zawsze będzie miało dostęp do klawiatury.

styczeń
źródło
4
Powyższe polecenie pobiera klawiaturę w X bez uprawnień roota. Tak więc instalacja keyloggera na pulpicie Ubuntu jest banalna. Pytanie brzmi, jak tego uniknąć.
yanychar
-3

Jak powiedzieli tutaj inni, nie można chronić tylko programu takiego jak terminal gnome lub inny terminal przed rejestrowaniem kluczy, tylko jeśli ograniczysz standardowych użytkowników do uruchamiania dowolnego rejestratora kluczy lub zatrzymasz / wstrzymasz dowolny proces rejestratora kluczy.

Następnie pokażę ci, jak możesz to zrobić w przypadku xinputpolecenia, ale te same metody mogą być użyte w każdym innym rejestratorze kluczy. Jeśli program rejestrujący klucze używa xinputpolecenia, nie jest konieczne stosowanie do niego metody tak długo, jak się ją stosuje xinput.

1. Ogranicz standardowych użytkowników do korzystania z xinputpolecenia

Możesz ograniczyć standardowym użytkownikom korzystanie z xinputpolecenia za pomocą następującego polecenia:

sudo chmod go-x /usr/bin/xinput

2. Ogranicz standardowych użytkowników do używania xinputpolecenia z test-xi2argumentem

Możesz ograniczyć standardowych użytkowników do używania xinputpolecenia z test-xi2argumentem , pisząc opakowanie dla tego polecenia. Aby to zrobić, przejdź do terminalu i postępuj zgodnie z instrukcjami poniżej:

  • Uzyskaj uprawnienia roota:

    sudo -i
    
  • Przenieś xinputplik do innego katalogu, który nie znajduje się w ŚCIEŻCE żadnego użytkownika (na przykład /opt):

    mv /usr/bin/xinput /new/path/to/xinput
    
  • Utwórz opakowanie dla xinputpolecenia w /usr/bin:

    gedit /usr/bin/xinput
    

    Dodaj następujący skrypt w środku:

    #!/bin/bash
    if [ "$@" != "${@/test-xi2/}" -a "$(whoami)" != "root" ]; then
        echo "`basename $0` $@: Permission denied"
    else
        /new/path/to/xinput $@
    fi
    

    Zapisz plik i zamknij go.

  • Spraw, aby nowe opakowanie było wykonywalne:

    chmod +x /usr/bin/xinput
    

Podczas gdy pierwszą metodą jest bezpieczeństwo, stosując drugą metodę, użytkownik może nadal ją obejść, dzwoniąc xinputbezpośrednio do oryginału, jeśli zna jego nową lokalizację.

3. Zatrzymaj / wstrzymaj dowolny xinputproces

Możesz zatrzymać lub wstrzymać dowolny xinputproces przed wprowadzeniem hasła lub cokolwiek innego, czego nie chcesz rejestrować. Aby to zrobić, dodaj następującą funkcję bash na końcu ~/.bashrcpliku:

processof () {
    xinput_pids=" $(pidof $1) "
    if [ "$xinput_pids" = "  " ]; then
        echo "Nothing to stop/pause/continue. $1: no such process!"
        return
    fi
    for pid in $xinput_pids; do
        case $2 in
        "stop") 
            kill $pid
            echo "$1: stopped"
            ;;
        "pause")
            kill -stop $pid
            echo "$1: paused"   
            ;;
        "continue")
            kill -cont $pid
            echo "$1: continue"
            ;;
        *)
            echo "$1 is runnig"
            ;;
        esac
    done
}

Teraz, po ponownym otwarciu terminala, w dowolnym momencie, korzystając z tej funkcji, możesz:

  • zatrzymaj / zabij wszystkie xinputprocesy:

    processof xinput stop
    
  • wstrzymaj wszystkie xinputprocesy:

    processof xinput pause
    
  • wznowić wszystkie xinputprocesy:

    processof xinput continue
    

W rzeczywistości za pomocą tej funkcji możesz zatrzymać / wstrzymać dowolny proces, który chcesz wykonać (np. Wprowadzenie hasła):

processof [process_name] [stop|pause|continue]

Jeśli nie wiesz, jak wykryć, jak wykryć aktywny keylogger w systemie, zobacz:

Te metody nie są może najlepszymi rozwiązaniami, ale mam nadzieję, że dam ci pojęcie o tym, co możesz zrobić ...

Radu Rădeanu
źródło
5
xinput to tylko przykład keyloggera. Pytanie dotyczy ochrony danych wejściowych z każdego możliwego keyloggera.
yanychar
5
Każdy program może połączyć się z serwerem X za pomocą gniazd i keylogu, nawet nie jest wymagane, aby rejestrator kluczy używał zewnętrznego programu.
Ramchandra Apte
3
@ RaduRădeanu Twoje rozwiązanie jest nieskuteczne i bezużyteczne. xinputnie jest nawet SUID (-rwxr-xr-x 1 root root 48504 15 sierpnia 2012 / usr / bin / xinput)
Ramchandra Apte
1
@ RaduRădeanu Ponieważ nie potrzebujesz xinput do keylogu. (nie wymaga zewnętrznego polecenia, ani złośliwego programu nie musi być SUID) Twoje rozwiązanie pozwoli po prostu kontrolować wykonywanie xinput
Ramchandra Apte
3
Najbardziej podstawowy przykład, aby udowodnić, że jest nieskuteczny: Skopiuj wersję zapasową (ubuntu) xinput z pamięci USB, pobierz ją z Internetu lub wyślij e-mailem do siebie i uruchom w folderze domowym. Taki sam efekt, jak przy użyciu nieograniczonego / usr / bin / xinput.
allo