Làm cách nào để gỡ lỗi Lỗi không thể lấy bàn phím. Một khách hàng độc hại có thể đang nghe lén phiên của bạn.


14

Tôi đang chạy cài đặt Ubuntu 14.04 mà tôi đã thiết lập hơn 6 tháng. Khoảng một tuần trước, tôi bắt đầu nhận được thông báo lỗi:

Could not grab keyboard. A malicious client may be eavesdropping on your session.

Tôi chỉ từng thấy nó khi trở lại máy tính sau khi đi vắng khá lâu (thường là qua đêm). Một vài lần nó đã ngăn màn hình khóa sau khi hết thời gian cài đặt (tôi đã bắt đầu chủ động khóa màn hình trước khi rời đi).

Tôi đang sử dụng bàn phím usb (Kinesis Advantage) được kết nối trực tiếp với cổng usb trên bo mạch chủ. Tôi đang sử dụng chuột ELECOM không dây .

Tôi sẽ thử ngắt kết nối khóa chuột trước khi rời đi. Làm thế nào khác tôi có thể xác định nếu có một khách hàng độc hại theo dõi tổ hợp phím của tôi hoặc nếu đây là một vấn đề kết nối?


1
ĐỪNG BỎ QUA CÁC QUY TẮC SUDO NẾU BẠN NGHINK NHỮNG KHÓA HỌC CỦA BẠN ĐANG ĐƯỢC ĐĂNG KÝ !!! thay vào đó, khởi động một phương tiện sống sạch và đi từ đó.
j0h

Câu trả lời:


13

Đây là cách giải quyết bí ẩn của bạn. Mục tiêu là để dạy người dùng "cách câu cá" bằng cách sử dụng các tiện ích Ubuntu tiêu chuẩn để tìm hiểu chi tiết về bất kỳ quy trình nào trên hệ thống của họ.

Bước # 1 (vì tò mò là chủ yếu): xác định chương trình nào gây ra lỗi này cho bạn:

# -- You may need to search under more dirs, YMMV
#    List files (incl. binaries) which contain the warning string

$ sudo grep -ral 'malicious client may be eavesdropping' /usr /bin /lib
/usr/lib/openssh/gnome-ssh-askpass

Trong env của tôi, chương trình duy nhất chứa chuỗi cảnh báo này trong tệp nhị phân của nó là gnome-ssh-askpass. Tôi có thể tìm kiếm nếu có lỗi được gửi trên chương trình cụ thể này và thậm chí tải xuống nguồn của nó apt-get source ssh-askpass-gnome(lưu ý rằng tên gói khác với tên chương trình) để kiểm tra thêm.

Tuy nhiên, tôi nghi ngờ nguyên nhân gốc rễ không phải là một vấn đề trong gnome-ssh-askpass. Vì gnome-ssh-askpassđang yêu cầu mật khẩu của bạn, các nhà phát triển của nó chỉ đơn giản chọn cách thận trọng khi không lấy bàn phím, giả sử trường hợp xấu nhất và làm cho thông điệp nghe có vẻ hoang tưởng. Nhưng lưu ý rằng việc nhập cụm mật khẩu hoặc mật khẩu của bạn vào một hộp thoại ngẫu nhiên của trang web ngẫu nhiên có thể không phải là một ý tưởng hay, vì vậy theo nghĩa đó, các gnome-ssh-askpassnhà phát triển đã thực hiện cuộc gọi đúng.

Gần đây, ngày càng có nhiều trang web bắt đầu tham gia vào việc thực hiện hiển thị cửa sổ bật lên, làm mờ mọi thứ khác bên ngoài hộp thoại bật lên và tích cực lấy tiêu điểm. Đây có thể là nguyên nhân gốc rễ cho gnome-ssh-askpassviệc không lấy bàn phím. Nếu trình duyệt của bạn đang mở trên trang web đó, việc đóng trình duyệt hoặc điều hướng khỏi trang web tích cực có thể giúp ích. Nếu đây là nguyên nhân, bạn có thể quan tâm đến cài đặt máy tính để bàn ngăn các quy trình riêng lẻ lấy toàn bộ tiêu điểm (máy tính để bàn đầy đủ). Ví dụ, trong KDE, có thể tìm thấy cài đặt này trong ( Cài đặt hệ thống -> Hành vi cửa sổ -> Tập trung -> Ngăn chặn ăn cắp tiêu điểm ). Nếu bạn cảm thấy thực sự hoang tưởng, tôi khuyên bạn nên đặt nó thành Highhoặc Extreme. Tất nhiên, điều này cũng có thể ngăn chặngnome-ssh-askpasschính nó từ việc nắm lấy bàn phím, hay chính xác hơn là: lấy Xnét.

Bước # 2: Xác định các quy trình đáng ngờ:

Biết rằng trong Unix, các thiết bị xuất hiện giống như trình phát tệp /dev, câu hỏi tiếp theo là thiết bị nào đại diện cho "bàn phím" trong hệ thống phân cấp hệ thống tệp. Chúng ta có thể sử dụng lsoftiện ích (liệt kê các tệp đang mở) cho việc này.

# look for processes holding devices open, filter out some common ones:
$ sudo lsof | grep /dev | grep -vE '/(null|urandom|zero)'

Lưu ý rằng hầu hết các quá trình giữ các thiết bị mở trong một máy tính để bàn điển hình đang giữ /dev/pts/<N>(một giả giả ) mở. Đây là những "thiết bị" quan tâm.

Một số nền tảng về những gì đang xảy ra ở đây:

Trong máy tính để bàn đồ họa Linux điển hình, các quy trình không nói chuyện trực tiếp với bàn phím. Thay vào đó, Xchương trình (Xorg) điều khiển tất cả các sự kiện bàn phím thông qua một thiết bị /dev/input/event<N>. Xsử dụng một trình xử lý sự kiện (evdev) trong số những thứ khác, xử lý các sự kiện bàn phím. Bạn cũng có thể xác minh điều này bằng cách xem Xnhật ký: /var/log/Xorg.0.lognơi keyboardđược đề cập.

Các sự kiện bàn phím được chuyển tiếp từ bộ Xxử lý sự kiện đến quy trình có tiêu điểm con trỏ chuột bất cứ lúc nào thông qua đầu vào tiêu chuẩn quy trình được mở /dev/pts/<N>. Nói một cách chính xác: một quá trình không thực sự "lấy bàn phím", bàn phím được giữ bởi X, quá trình chỉ có (hoặc lấy) "tập trung" hoặc sự chú ý của Xvì vậy Xcó thể chuyển tiếp các sự kiện bàn phím đến nó thông qua một mô tả tệp stdin mở /dev/pts/<N>.

Sơ đồ các sự kiện bàn phím được ghép qua X evdev

Bước # 3: quá trình nào có trọng tâm Xorg tại bất kỳ thời điểm cụ thể nào?

Làm thế nào để tìm ra quá trình nào có trọng tâm tại bất kỳ thời điểm cụ thể? Đây là một câu hỏi Askubfox trả lời điều này:

tìm ra ứng dụng dưới chuột

Tóm tắt câu trả lời là chạy một đoạn script như sau trong một thiết bị đầu cuối trong khi điều hướng xung quanh bằng chuột:

#!/bin/bash
# Print the process tree of the window currently in focus.
# prereqs:
#   sudo apt-get install xdotool psmisc

while true; do
   pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")
   sleep 2
done

Bước # 4: đào sâu hơn vào hoạt động của quy trình

Khi bạn đã xác định được quy trình nghi ngờ, bước cuối cùng là điều tra quy trình cá nhân này. Cho rằng bạn có thể chuyển sang /prochệ thống tập tin Linux ( man 5 proc).

Hầu như bất cứ điều gì bạn có thể muốn biết về một quá trình có sẵn theo /proc. Trong thực tế, các chương trình như lsof(liệt kê các tệp đang mở), các trình gỡ lỗi kiểm tra trạng thái quy trình và các tiện ích liệt kê quy trình như pshoặc top, tất cả đều dựa vào /procđó được nhân bởi dữ liệu.

Sử dụng procbạn có thể tìm thấy nơi chương trình thực thi quy trình nằm trên đĩa (ví dụ: bất kỳ chương trình nào bên ngoài các thư mục hệ thống tiêu chuẩn, đặc biệt nếu nó đang cố ẩn dưới loại tên "không chú ý đến tôi" , có thể bị nghi ngờ) và sử dụng trình gỡ lỗi hoặc trình theo dõi cuộc gọi hệ thống, bạn có thể kiểm tra chính xác họ đang làm gì ở cấp độ gọi hệ thống (ngay cả khi bạn không có mã nguồn của họ).

Bước # 2 và # 3 sẽ cung cấp cho bạn tất cả ( PIDcác) ID quy trình có khả năng đọc bàn phím của bạn. Đối với mỗi PIDS này (hãy biểu thị từng người như $pidbạn): bạn có thể:

Ánh xạ $ pid vào dòng lệnh đầy đủ của nó:

cat /proc/$pid/cmdline

Ánh xạ $ pid vào đĩa thực thi của nó:

ls -l /proc/$pid/exe

Ánh xạ $ pid vào thư mục làm việc hiện tại của nó:

ls -l /proc/$pid/cwd

Ánh xạ $ pid vào môi trường ban đầu của nó

cat /proc/$pid/environ | tr '\000' '\012'

Theo dõi hoạt động gọi hệ thống $ pid (và con-procs) trong thời gian thực:

strace -f -p $pid

(Còn nữa: xem man 5 proc)

Nếu bạn thấy một quy trình không quen thuộc phản ứng với mọi lần bấm phím bằng cách lưu nó vào một tệp (thông qua write) hoặc gửi qua mạng để qua sendto, bạn có thể đã tìm thấy một bàn phím sniffer.

Bạn cũng có thể kiểm tra các tiến trình nào có (tcp + udp) điểm cuối mạng mở:

# See 'man netstat' for details on all options used below
$ sudo netstat -tunapee

Dòng dưới cùng:

Nguyên nhân rất có thể gây ra lỗi không phải là phần mềm độc hại, mà là nhiều quá trình cố gắng kiểm soát bàn phím cùng một lúc. Một trong hai là gnome-ssh-askpass(một in lỗi). Cái còn lại có thể là một trình duyệt mở trên một trang web với hộp thoại lấy nét tập trung.

Ngay cả trong trường hợp từ xa mà bạn thực sự đã cài đặt một số phần mềm độc hại, thì tin tốt là vì bạn đang sử dụng Linux, nên tất cả các quy trình đều minh bạch để bạn nghiên cứu và kiểm tra. Sẽ rất khó để phần mềm độc hại thực sự ẩn khỏi bạn hoặc để ngăn bạn dễ dàng xác định vị trí của nó bằng các kỹ thuật trên, giết chết các quy trình của nó và xóa tất cả các tệp của nó.


Trong bước # 2, tôi không thấy nhiều quá trình giữ /dev/pts/7(chỉ có 3 giá trị pid duy nhất). Cuộn qua các kết quả, có vẻ như thiết bị helf nhất là /dev/pts/15mặc dù một số đang giữ 1, 3, 12, 16, 17, 21, 22, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34. Là bàn phím luôn 7? Làm thế nào tôi có thể xác định cái nào trong số này là bàn phím của tôi?
Steven C. Howell

Nó có thể là bất kỳ ở trên. Thiết bị bàn phím vật lý thực sự được mở bởi Xorg ( /usr/bin/X) như là /dev/input/eventNnơi bạn có thể tìm thấy Nbằng cách nhìn vào chuỗi evdevtrong /var/log/Xorg.0.log. Xorg sau đó "chuyển tiếp" mỗi bàn phím nhấp vào quy trình riêng có con trỏ chuột "tập trung" ngay lập tức. Khi tôi chạy ssh-askpasstôi thấy nó đã /dev/pts/3mở nhưng trong bất kỳ env nào, nó có thể là bất kỳ thiết bị giả nào. Vì vậy, bất kỳ một trong những của bạn /dev/pts/Ncó thể có liên quan ở đây.
arielf

@ stvn66 Tôi đã thêm một đoạn script nhỏ cho bạn biết quá trình nào có "tiêu điểm" liên tục (tham khảo một câu hỏi liên quan trên Askubfox). HTH.
arielf

Sau khi chạy tập lệnh để xác định quá trình nào đang giữ chuột, làm cách nào để xác định một nghi phạm? Nó dường như là bất cứ ứng dụng nào tôi chọn, ví dụ, bắt đầu khi thiết bị đầu cuối tôi chạy tập lệnh, chuyển sang {firefox}khi tôi nhấp vào firefox, chuyển lại thành {thunderbird}khi tôi chọn thunderbird. Không có gì nổi bật như bất ngờ. Có lẽ điều này đi đến điểm mấu chốt của bạn : về vấn đề không đến từ thứ gì đó lấy bàn phím. Tôi muốn chắc chắn rằng thông báo này là vô nghĩa hoặc có thể loại bỏ nó.
Steven C. Howell

@ stvn66 Tôi nghe thấy bạn :) bạn không thể quay ngược thời gian và tìm ra quy trình có trọng tâm ban đầu. Quá trình đó có thể đã thoát ra kể từ đó. Để thực sự chắc chắn, bạn cần có khả năng sinh sản. Tôi đoán tốt nhất là trình duyệt của bạn ( firefox) trong khi truy cập một trang web với cửa sổ bật lên lấy nét. Trừ khi bạn thường xuyên tải xuống và cài đặt phần mềm từ các nguồn không rõ ràng (không chính tắc), tôi rất nghi ngờ bạn đã vô tình cài đặt một bàn phím sniffer trên Ubuntu. Thật là một chút hoang tưởng, nhưng không cần phải đổ mồ hôi quá nhiều.
arielf

1

Vấn đề của tôi là do hai gnome-ssh-askpasscửa sổ đồng thời . Tôi đã có hai công việc rsync đến cùng một máy chủ thông qua SSH và cả hai đều cố gắng hỏi mật khẩu của chứng chỉ SSH. Nhóm (và chuỗi) họ cùng nhau giải quyết cho tôi!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.