Korzystam z instalacji systemu Ubuntu 14.04, którą skonfigurowałem na ponad 6 miesięcy. Mniej więcej tydzień temu zacząłem otrzymywać komunikat o błędzie:
Could not grab keyboard. A malicious client may be eavesdropping on your session.
Widziałem to tylko po powrocie do komputera po dłuższej nieobecności (zwykle z dnia na dzień). Kilka razy zapobiegało to blokowaniu ekranu po upływie określonego czasu (zacząłem aktywnie blokować go przed wyjściem).
Używam klawiatury USB (Kinesis Advantage) bezpośrednio podłączonej do portu USB na płycie głównej. Używam bezprzewodowej myszy ELECOM .
Przed wyjściem spróbuję odłączyć klucz myszy. Jak inaczej mogę sprawdzić, czy złośliwy klient śledzi moje naciśnięcia klawiszy lub czy jest to problem z łącznością?
Odpowiedzi:
Oto jak rozwiązać swoją tajemnicę. Celem jest raczej nauczenie użytkowników „jak łowić ryby” za pomocą standardowych narzędzi Ubuntu do zagłębiania się w szczegóły dowolnego procesu w ich systemie.
Krok # 1 (głównie z ciekawości): określ, który program wyświetla ten błąd:
W mojej env jedynym programem, który zawiera ten ciąg ostrzegawczy w swoim pliku binarnym, jest
gnome-ssh-askpass
. Mogę wyszukać, czy w tym konkretnym programie jest zgłoszony błąd, a nawet pobrać jego źródłoapt-get source ssh-askpass-gnome
(zauważ, że nazwa pakietu jest inna niż nazwa programu) w celu dalszej kontroli.Podejrzewam jednak, że podstawowa przyczyna nie stanowi problemu
gnome-ssh-askpass
. Ponieważgnome-ssh-askpass
prosi o podanie hasła, jego twórcy po prostu wybrali ostrożność, jeśli nie złapali klawiatury, przyjęli najgorszy scenariusz i sprawili, że wiadomość brzmiała uber-paranoidalnie. Pamiętaj jednak, że wpisanie hasła lub hasła w przypadkowym oknie dialogowym strony internetowej prawdopodobnie nie jest dobrym pomysłem, więc w tym sensiegnome-ssh-askpass
programiści wykonali prawidłowe połączenie.Ostatnio coraz więcej stron internetowych zaczęło angażować się w wyświetlanie wyskakujących okienek, zanikanie wszystkiego poza oknem wyskakującym i agresywne przyciąganie uwagi. Może to być podstawowa przyczyna
gnome-ssh-askpass
niepowodzenia pobierania klawiatury. Jeśli przeglądarka jest otwarta na takiej stronie, pomocne może być jej zamknięcie lub odejście od agresywnej strony internetowej. Jeśli jest to przyczyną, możesz zainteresować się ustawieniem pulpitu, które uniemożliwi pojedynczym procesom przechwycenie całego (pełnego pulpitu) fokusa. Na przykład w KDE to ustawienie można znaleźć w ( Ustawienia systemu -> Zachowanie okna -> Ostrość -> Zapobieganie kradzieży ostrości ). Jeśli czujesz się naprawdę paranoikiem, polecam ustawienie go naHigh
lubExtreme
. Oczywiście może to również zapobiecgnome-ssh-askpass
sam z chwytania klawiatury, a ściślej: chwytanieX
ostrości.Krok # 2: Zidentyfikuj podejrzane procesy:
Wiedząc, że w systemie Unix urządzenia wyglądają jak pliki po użyciu
/dev
, następne pytanie brzmi, które urządzenie reprezentuje „klawiaturę” w hierarchii systemu plików. W tym celu możemy użyć narzędzialsof
(wyświetl listę otwartych plików).Zauważ, że większość procesów utrzymujących urządzenia otwarte w typowym środowisku komputerowym trzyma
Podstawowe informacje o tym, co się tutaj dzieje:/dev/pts/<N>
( pseudo tty ) otwarte. Są to „urządzenia” będące przedmiotem zainteresowania.Na typowym graficznym pulpicie systemu Linux procesy nie komunikują się bezpośrednio z klawiaturą. Zamiast tego
X
program (Xorg) kontroluje wszystkie zdarzenia klawiatury za pomocą urządzenia/dev/input/event<N>
.X
używa modułu obsługi zdarzeń (evdev), który między innymi obsługuje zdarzenia klawiatury. Możesz to również sprawdzić, patrząc naX
dziennik:/var/log/Xorg.0.log
gdziekeyboard
jest wspomniany.Zdarzenia na klawiaturze są przekazywane z
X
procedury obsługi zdarzeń do procesu, który skupia wskaźnik myszy w dowolnym momencie, poprzez standardowe wejście procesu, które jest otwarte/dev/pts/<N>
. Ściśle mówiąc: proces tak naprawdę nie „chwyta klawiatury”, klawiatura jest utrzymywanaX
, proces ma tylko (lub chwyta) „skupienie” lub uwagę,X
dzięki czemuX
może przekazywać do niego zdarzenia klawiatury poprzez otwarty deskryptor pliku stdin na/dev/pts/<N>
.Krok # 3: na którym procesie Xorg koncentruje się w danym momencie?
Jak obliczyć, na którym procesie koncentruje się w danym momencie? Oto odpowiedź na pytanie askubuntu:
Podsumowaniem odpowiedzi jest uruchomienie skryptu w terminalu podczas nawigacji za pomocą myszy:
Krok # 4: zagłęb się w aktywność procesu
Po zidentyfikowaniu podejrzanego procesu ostatnim krokiem jest zbadanie tego indywidualnego procesu. W tym celu możesz przejść do systemu
/proc
plików Linux (man 5 proc
).Prawie wszystko, co możesz chcieć wiedzieć o procesie, jest dostępne pod
/proc
. W rzeczywistości programy takie jaklsof
(wyświetlają listę otwartych plików), debugery, które badają stan procesu, oraz narzędzia do listowania procesów, takie jakps
lubtop
, wszystkie oparte na/proc
jądrze, dla danych.Za pomocą
proc
można znaleźć, gdzie program wykonywalny procesu znajduje się na dysku (np. Dowolny program spoza standardowych katalogów systemowych, zwłaszcza jeśli próbuje się ukryć pod nazwą typu „nie zwracaj na mnie uwagi” , może być podejrzany) i użycie debugger lub moduł śledzenia wywołań systemowych możesz sprawdzić, co dokładnie robią na poziomie wywołań systemowych (nawet jeśli nie masz ich kodu źródłowego).Kroki # 2 i # 3 powinny dać ci wszystkie identyfikatory procesów,
PID
które potencjalnie mogą odczytywać twoją klawiaturę. Dla każdego z tych PIDS (oznaczmy każdy jako$pid
) możesz:Mapuj $ pid do pełnego wiersza poleceń:
Zamapuj $ pid na jego wykonywalnym dysku:
Zamapuj $ pid na bieżący katalog roboczy:
Odwzoruj $ pid na oryginalne środowisko
Śledź aktywność $ pid (i jej procesów potomnych) w czasie rzeczywistym:
(Jest więcej: patrz
man 5 proc
)Jeśli zobaczysz nieznany proces, który reaguje na każde naciśnięcie klawisza, zapisując go w pliku (przez
write
) lub wysyłając go przez sieć dosendto
, możesz znaleźć sniffer klawiatury.Możesz także sprawdzić, które procesy mają otwarte punkty końcowe sieci (tcp + udp):
Dolna linia:
Najbardziej prawdopodobną przyczyną błędu nie jest złośliwe oprogramowanie, ale wiele procesów próbujących jednocześnie uzyskać kontrolę nad klawiaturą. Jednym z dwóch jest
gnome-ssh-askpass
(ten, który drukuje błąd). Druga może być otwartą przeglądarką w witrynie z agresywnym oknem dialogowym skupiającym fokus.Dobrą wiadomością jest to, że nawet jeśli zdalnie masz zainstalowane złośliwe oprogramowanie, ponieważ korzystasz z systemu Linux, wszystkie procesy są przejrzyste, dzięki czemu możesz je badać i sprawdzać. Bardzo trudno byłoby złośliwemu oprogramowaniu naprawdę się przed tobą ukryć lub uniemożliwić łatwe zlokalizowanie go przy użyciu powyższych technik, zabicie jego procesów i usunięcie wszystkich jego plików.
źródło
/dev/pts/7
(tylko 3 unikalne wartości pid). Przewijając wyniki, wydaje się, że najbardziej jest to urządzenie pomocnicze,/dev/pts/15
chociaż niektóre trzymają1, 3, 12, 16, 17, 21, 22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34
. Czy klawiatura jest zawsze7
? Jak rozpoznać, która z nich jest moją klawiaturą?/usr/bin/X
), a/dev/input/eventN
gdzie można znaleźć swojąN
patrząc na ciągevdev
w/var/log/Xorg.0.log
. Następnie Xorg „przesyła” każde kliknięcie na klawiaturze do indywidualnego procesu, w którym wskaźnik myszy „skupia się” w danym momencie. Po uruchomieniussh-askpass
widzę, że jest/dev/pts/3
otwarty, ale w dowolnej env może to być dowolne pseudo urządzenie tty. Więc każdy z was/dev/pts/N
może mieć znaczenie tutaj.{firefox}
kiedy klikam Firefox, przełącza się ponownie na,{thunderbird}
kiedy wybieram Thunderbirda. Nic nie wyróżnia się jako nieoczekiwane. Być może idzie to do dolnej linii: problem nie pochodzi z czegoś, co chwyta klawiaturę. Chciałbym mieć pewność, że to zawiadomienie jest bez znaczenia lub może je wyeliminować.firefox
) podczas odwiedzania strony internetowej z wyskakującym oknem wyskakującym. O ile nie pobierasz regularnie i nie instalujesz oprogramowania z podejrzanych (niekanonicznych) źródeł, wątpię, czy przypadkowo zainstalowałeś sniffer klawiatury na Ubuntu. Dobrze jest być trochę paranoikiem, ale nie trzeba go nadmiernie pocić.Mój problem był spowodowany dwoma równoległymi
gnome-ssh-askpass
oknami. Miałem dwa zadania rsync na tym samym serwerze za pośrednictwem SSH i oba próbowały poprosić o hasło do certyfikatu SSH. Grupowanie (i łączenie) ich razem rozwiązało dla mnie!źródło