นี่คือวิธีแก้ปริศนาของคุณ เป้าหมายมีมากขึ้นในการสอนผู้ใช้ "วิธีตกปลา" โดยใช้ยูทิลิตี้ Ubuntu มาตรฐานเพื่อขุดลงในรายละเอียดของกระบวนการใด ๆ ในระบบของพวกเขา
ขั้นตอนที่ # 1 (สำหรับความอยากรู้ส่วนใหญ่): ระบุโปรแกรมที่ให้ข้อผิดพลาดนี้กับคุณ:
# -- 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
ใน env gnome-ssh-askpass
ฉันโปรแกรมเดียวที่มีสตริงคำเตือนนี้ในไบนารีของมันคือ ฉันสามารถค้นหาว่ามีข้อผิดพลาดในโปรแกรมนี้หรือไม่และดาวน์โหลดแหล่งที่มาapt-get source ssh-askpass-gnome
(โปรดทราบว่าชื่อแพคเกจนั้นแตกต่างจากชื่อโปรแกรม) เพื่อการตรวจสอบเพิ่มเติม
gnome-ssh-askpass
แต่ผมสงสัยว่าสาเหตุที่แท้จริงไม่ได้เป็นปัญหาใน เนื่องจากgnome-ssh-askpass
มีการขอข้อความรหัสผ่านของคุณผู้พัฒนาก็เลือกที่จะทำผิดด้านข้างของข้อควรระวังเมื่อล้มเหลวในการคว้าคีย์บอร์ดสันนิษฐานว่าเป็นสถานการณ์ที่เลวร้ายที่สุดและทำให้ข้อความนั้นเป็นเสียง uber-paranoid แต่โปรดทราบว่าการพิมพ์ข้อความรหัสผ่านหรือรหัสผ่านของคุณลงในกล่องโต้ตอบเว็บไซต์สุ่มโดยบังเอิญอาจไม่ใช่ความคิดที่ดีดังนั้นในแง่นี้gnome-ssh-askpass
นักพัฒนาจึงได้โทรออกอย่างถูกต้อง
เมื่อเร็ว ๆ นี้เว็บไซต์มากขึ้นเรื่อย ๆ เริ่มมีส่วนร่วมในการฝึกการแสดงป๊อปอัปซีดจางทุกอย่างอื่นนอกกล่องโต้ตอบป๊อปอัพและจับโฟกัสอย่างจริงจัง นี่อาจเป็นสาเหตุหลักที่ทำให้gnome-ssh-askpass
คีย์บอร์ดไม่ทำงาน หากเบราว์เซอร์ของคุณเปิดอยู่ในเว็บไซต์ดังกล่าวการปิดเบราว์เซอร์หรือการนำทางจากเว็บไซต์ที่ก้าวร้าวอาจช่วยได้ หากนี่คือสาเหตุคุณอาจสนใจการตั้งค่าเดสก์ท็อปเพื่อป้องกันไม่ให้แต่ละกระบวนการจับโฟกัสที่สมบูรณ์ (เต็มเดสก์ท็อป) ใน KDE ตัวอย่างการตั้งค่านี้สามารถพบได้ใน ( การตั้งค่าระบบ -> พฤติกรรมของหน้าต่าง -> โฟกัส -> การป้องกันการขโมยโฟกัส ) ถ้าคุณรู้สึกหวาดระแวงจริงๆผมจะแนะนำการตั้งค่าให้หรือHigh
Extreme
แน่นอนว่าสิ่งนี้อาจป้องกันได้gnome-ssh-askpass
ตัวเองจากการคว้าคีย์บอร์ดหรือแม่นยำกว่า: การจับX
โฟกัส
ขั้นตอนที่ 2: ระบุกระบวนการที่น่าสงสัย:
เมื่อรู้ว่าในระบบปฏิบัติการ Unix อุปกรณ์จะดูเหมือนไฟล์ uder /dev
คำถามต่อไปคืออุปกรณ์ใดที่ใช้แทน "คีย์บอร์ด" ในลำดับชั้นของระบบไฟล์ เราสามารถใช้lsof
ยูทิลิตี้ (เปิดรายการไฟล์) สำหรับสิ่งนี้
# look for processes holding devices open, filter out some common ones:
$ sudo lsof | grep /dev | grep -vE '/(null|urandom|zero)'
โปรดสังเกตว่ากระบวนการส่วนใหญ่ที่ถืออุปกรณ์ที่เปิดอยู่ในเดสก์ท็อปทั่วไป env กำลังถือ/dev/pts/<N>
(แบบหลอก ) ที่เปิดอยู่ นี่คือ "อุปกรณ์" ที่น่าสนใจ
พื้นหลังบางอย่างเกี่ยวกับสิ่งที่เกิดขึ้นที่นี่:
ในเดสก์ท็อปกราฟิก Linux ทั่วไปกระบวนการจะไม่พูดกับแป้นพิมพ์โดยตรง แต่X
โปรแกรม (Xorg) จะควบคุมเหตุการณ์แป้นพิมพ์ทั้งหมดผ่านอุปกรณ์/dev/input/event<N>
แทน X
ใช้ตัวจัดการเหตุการณ์ (evdev) ซึ่งเหนือสิ่งอื่นใดจัดการกับเหตุการณ์แป้นพิมพ์ นอกจากนี้คุณยังสามารถตรวจสอบได้โดยดูที่X
บันทึก: /var/log/Xorg.0.log
ที่keyboard
ถูกกล่าวถึง
เหตุการณ์ที่เกิดขึ้นแป้นพิมพ์จะถูกส่งต่อจากตัวจัดการเหตุการณ์ในการประมวลผลที่มีการมุ่งเน้นตัวชี้เมาส์ได้ตลอดเวลาผ่านกระบวนการมาตรฐานการป้อนข้อมูลที่เปิดให้บริการในX
/dev/pts/<N>
พูดอย่างเคร่งครัด: กระบวนการไม่ได้ "คว้าแป้นพิมพ์" แป้นพิมพ์ถูกยึดโดยX
กระบวนการมีเพียง (หรือจับ) "โฟกัส" หรือความสนใจX
จึงX
สามารถส่งต่อเหตุการณ์แป้นพิมพ์ผ่านทางตัวอธิบายไฟล์ stdin ที่เปิดอยู่/dev/pts/<N>
.
ขั้นตอนที่ # 3: กระบวนการใดที่ Xorg ให้ความสำคัญในเวลาใดเวลาหนึ่ง
วิธีการคิดกระบวนการที่มีความสำคัญในเวลาใดเวลาหนึ่ง? นี่คือคำถาม Askubuntu ตอบคำถามนี้:
ค้นหาแอปพลิเคชั่นภายใต้เม้าส์
บทสรุปของคำตอบคือการเรียกใช้สคริปต์เช่นต่อไปนี้ในเทอร์มินัลในขณะที่นำทางไปรอบ ๆ ด้วยเมาส์:
#!/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
ขั้นตอนที่ # 4: ขุดลึกลงไปในกิจกรรมกระบวนการ
เมื่อคุณมีกระบวนการสงสัยที่ระบุขั้นตอนสุดท้ายคือการตรวจสอบกระบวนการนี้ เพื่อที่คุณอาจหันไปใช้/proc
ระบบไฟล์Linux ( man 5 proc
)
/proc
เกือบทุกอย่างที่คุณอาจต้องการที่จะรู้เกี่ยวกับกระบวนการที่อยู่ภายใต้ ในความเป็นจริงโปรแกรมเช่นlsof
(แสดงรายการไฟล์ที่เปิด) debuggers ที่ตรวจสอบสถานะกระบวนการและยูทิลิตี้รายการกระบวนการเช่นps
หรือtop
ทั้งหมดขึ้นอยู่กับ/proc
ที่มีประชากรโดยเคอร์เนลสำหรับข้อมูล
การใช้proc
คุณสามารถค้นหาตำแหน่งที่โปรแกรมปฏิบัติการของกระบวนการอยู่บนดิสก์ (เช่นโปรแกรมใด ๆ ที่อยู่นอกไดเรกทอรีระบบมาตรฐานโดยเฉพาะอย่างยิ่งหากพยายามซ่อนอยู่ภายใต้ชื่อ"ไม่ต้องสนใจฉัน"อาจเป็นที่สงสัย) และการใช้ ตัวดีบักหรือระบบติดตามการโทรคุณสามารถตรวจสอบสิ่งที่พวกเขากำลังทำอยู่ในระดับการโทรของระบบ (แม้ว่าคุณจะไม่มีซอร์สโค้ด)
ขั้นตอนที่ 2 และ # 3 ควรให้รหัสกระบวนการทั้งหมดPID
ที่สามารถอ่านคีย์บอร์ดของคุณได้ สำหรับ PIDS เหล่านี้แต่ละอัน (เรามาแทนแต่ละอัน$pid
) คุณอาจ:
แม็พ $ pid กับบรรทัดคำสั่งแบบเต็ม:
cat /proc/$pid/cmdline
แม็พ $ pid กับดิสก์ที่รันได้:
ls -l /proc/$pid/exe
แม็พ $ pid กับไดเร็กทอรีการทำงานปัจจุบัน:
ls -l /proc/$pid/cwd
แม็พ $ pid กับสภาพแวดล้อมดั้งเดิม
cat /proc/$pid/environ | tr '\000' '\012'
ติดตามกิจกรรมการเรียกใช้ระบบ $ pid (และ children-procs) แบบเรียลไทม์:
strace -f -p $pid
(มีมากขึ้น: ดูman 5 proc
)
หากคุณเห็นกระบวนการที่ไม่คุ้นเคยซึ่งตอบสนองต่อทุกการกดปุ่มโดยเก็บไว้ในไฟล์ (ผ่านwrite
) หรือส่งผ่านเครือข่ายไปยังผ่านsendto
คุณอาจพบแป้นดมกลิ่น
คุณยังสามารถตรวจสอบว่ากระบวนการใดที่มีจุดปลายเครือข่าย (tcp + udp) ที่เปิดอยู่:
# See 'man netstat' for details on all options used below
$ sudo netstat -tunapee
บรรทัดล่างสุด:
สาเหตุที่เป็นไปได้มากที่สุดสำหรับข้อผิดพลาดไม่ใช่มัลแวร์ แต่มีหลายกระบวนการที่พยายามควบคุมแป้นพิมพ์ในเวลาเดียวกัน หนึ่งในสองคือgnome-ssh-askpass
(หนึ่งที่พิมพ์ข้อผิดพลาด) อีกอันอาจเป็นเบราว์เซอร์ที่เปิดอยู่บนไซต์ที่มีกล่องโต้ตอบการรับโฟกัสที่ก้าวร้าว
แม้ในโอกาสที่คุณติดตั้งมัลแวร์ระยะไกล แต่ข่าวดีก็คือว่าเนื่องจากคุณใช้งานบน Linux กระบวนการทั้งหมดจึงโปร่งใสสำหรับคุณในการวิจัยและตรวจสอบ มันจะยากมากสำหรับมัลแวร์ที่จะซ่อนตัวจากคุณหรือเพื่อป้องกันไม่ให้คุณหาได้ง่ายโดยใช้เทคนิคด้านบนการฆ่ากระบวนการและการลบไฟล์ทั้งหมด