การตั้งค่าเพื่อป้องกัน gnome-terminal จากการบันทึกคีย์


15

ดูเหมือนว่าเป็นการง่ายที่จะบันทึกการกดแป้นของกระบวนการทั้งหมดของผู้ใช้เดียวกัน keylogger พื้นฐานคือ 'xinput'

xinput test-xi2

คำสั่งสร้างบันทึกของการกดปุ่มทั้งหมด น่าเสียดายที่รหัสผ่านนี้รวมอยู่ใน gnome-terminal Googling แนะนำว่าคีย์บอร์ดที่จับอาจป้องกันไม่ให้หน้าต่างอื่นจับจังหวะสำคัญ

มีวิธีป้องกันการบันทึก XI2 ใน gnome-terminal หรือไม่? หรือมีเทอร์มินัล X ที่มีคุณสมบัตินี้


คือนี้แก้ปัญหาได้หรือไม่
Radu Rădeanu

คำตอบ:


13

มันเป็นไปไม่ได้เลยกดแป้นส่งผ่านไปยังเซิร์ฟเวอร์ X จะใช้งานได้สำหรับ xinput / โปรแกรมใด ๆ (อันที่จริงมันเป็นส่วนหนึ่งของการออกแบบ) เซิร์ฟเวอร์ดิสเพลย์ใหม่เช่น Wayland และ Mir กำลังแก้ไขปัญหาความปลอดภัยใน X วิธีแก้ปัญหาที่แท้จริงเพียงอย่างเดียวคือการใช้ Wayland หรือ Mir แทนที่จะเป็น X ซึ่งบล็อกนี้แสดงรายละเอียดของปัญหานี้


ดังนั้นการป้อน gksu สำหรับรหัสผ่านก็ไปที่ xinput?
yanychar

1
@yanychar yup จริงๆแล้วฉันค้นพบเกี่ยวกับวิธีการบันทึกคีย์ผ่านโพสต์บล็อกนี้: theinvisiblethings.blogspot.in/2011/04/… (แม้ฉันรู้สึกประหลาดใจครั้งแรกที่ฉันอ่านโพสต์บล็อก)
Ramchandra Apte

2
X11 จริงมีโหมดที่ไม่น่าเชื่อถือซึ่งคุณสามารถใช้เพื่อป้องกันไม่ให้โปรแกรมเข้าถึง "เลวร้าย" ส่วนขยาย - x.org/wiki/Development/Documentation/Security
MichałZieliński

-1

ไม่ได้จริงๆ แม้ว่าคุณจะจัดการคว้าแป้นพิมพ์ภายใน X (ฉันไม่ทราบว่าเป็นไปได้หรือไม่ฉันสงสัยว่า) ยูทิลิตี้ keylogger ที่ทำงานในฐานะรูทจะเข้าถึงแป้นพิมพ์ได้ตลอดเวลา


4
คำสั่งด้านบนจะคว้าคีย์บอร์ดภายใน X โดยไม่มีสิทธิ์รูท ดังนั้นจึงเป็นการง่ายที่จะติดตั้ง keylogger ไปยังเดสก์ท็อป Ubuntu คำถามคือจะหลีกเลี่ยงปัญหานี้ได้อย่างไร
yanychar

-3

ดังที่คนอื่น ๆ กล่าวไว้ที่นี่เป็นไปไม่ได้ที่จะป้องกันโปรแกรมเช่น gnome-terminal หรือเทอร์มินัลอื่น ๆ จากการบันทึกคีย์เท่านั้นหากคุณ จำกัด ผู้ใช้มาตรฐานให้รันตัวบันทึกคีย์ใด ๆ หรือถ้าคุณหยุด / หยุดกระบวนการล็อกคีย์

ต่อไปฉันจะแสดงให้คุณเห็นว่าคุณสามารถทำสิ่งเหล่านี้ได้อย่างไรในกรณีที่มีxinputคำสั่ง แต่สามารถใช้วิธีการเดียวกันกับตัวบันทึกคีย์อื่น ๆ ได้ ถ้าใช้ตัดไม้ที่สำคัญคำสั่งก็ไม่จำเป็นต้องใช้วิธีการที่อยู่กับมันนานเท่าที่คุณใช้มันเมื่อxinputxinput

1. จำกัด ผู้ใช้มาตรฐานให้ใช้xinputคำสั่ง

คุณสามารถจำกัด ผู้ใช้มาตรฐานให้ใช้xinputคำสั่งโดยใช้คำสั่งต่อไปนี้:

sudo chmod go-x /usr/bin/xinput

2. จำกัด ผู้ใช้มาตรฐานที่จะใช้xinputคำสั่งด้วยtest-xi2อาร์กิวเมนต์

คุณสามารถจำกัด ผู้ใช้มาตรฐานให้ใช้xinputคำสั่งด้วยการtest-xi2โต้แย้งโดยเขียน wrapper สำหรับคำสั่งนี้ หากต้องการทำสิ่งนี้ให้ไปที่เทอร์มินัลแล้วทำตามคำแนะนำด้านล่าง:

  • รับสิทธิ์รูท:

    sudo -i
    
  • ย้ายxinputไฟล์ในไดเร็กทอรีอื่นซึ่งไม่ได้อยู่ใน PATH ของผู้ใช้ (ตัวอย่าง/opt):

    mv /usr/bin/xinput /new/path/to/xinput
    
  • สร้าง wrapper ของคุณสำหรับxinputคำสั่งใน/usr/bin:

    gedit /usr/bin/xinput
    

    เพิ่มสคริปต์ต่อไปนี้ภายใน:

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

    บันทึกไฟล์และปิด

  • กำหนดให้ wrapper ใหม่ทำงานได้:

    chmod +x /usr/bin/xinput
    

ในขณะที่วิธีแรกคือความปลอดภัยโดยใช้วิธีที่สองผู้ใช้อาจยังคงหลบเลี่ยงมันได้โดยโทรหาต้นฉบับxinputโดยตรงหากเขารู้ตำแหน่งใหม่

3. หยุด / หยุดxinputกระบวนการใด ๆ

คุณสามารถหยุดหรือหยุดxinputกระบวนการใด ๆก่อนที่จะป้อนรหัสผ่านหรือสิ่งอื่นที่คุณไม่ต้องการเข้าสู่ระบบ หากต้องการทำสิ่งนี้ให้เพิ่มฟังก์ชั่นทุบตีต่อไปนี้ที่ท้าย~/.bashrcไฟล์ของคุณ:

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
}

ตอนนี้หลังจากที่คุณเปิดเทอร์มินัลใหม่ทุกเวลาที่คุณต้องการโดยใช้ฟังก์ชั่นนี้คุณสามารถ:

  • หยุด / ฆ่าxinputกระบวนการทั้งหมด:

    processof xinput stop
    
  • หยุดxinputกระบวนการทั้งหมดชั่วคราว:

    processof xinput pause
    
  • กลับสู่xinputกระบวนการทั้งหมด:

    processof xinput continue
    

อันที่จริงแล้วด้วยฟังก์ชั่นนี้คุณสามารถหยุด / หยุดกระบวนการใด ๆ ที่คุณต้องการก่อนที่จะทำอะไรบางอย่าง (เช่นการป้อนรหัสผ่าน):

processof [process_name] [stop|pause|continue]

หากคุณไม่ทราบวิธีการตรวจหาวิธีการตรวจสอบ keylogger ที่ใช้งานอยู่ในระบบของคุณดู:

วิธีการเหล่านี้อาจไม่ใช่วิธีแก้ปัญหาที่ดีที่สุด แต่ฉันหวังว่าจะให้แนวคิดเกี่ยวกับสิ่งที่คุณสามารถทำได้ ...


5
xinput เป็นเพียงตัวอย่างของ keylogger คำถามคือเกี่ยวกับการปกป้องข้อมูลจาก keylogger ที่เป็นไปได้ทั้งหมด
yanychar

5
โปรแกรมใด ๆ สามารถเชื่อมต่อกับเซิร์ฟเวอร์ X ผ่านซ็อกเก็ตและคีย์ล็อกไม่จำเป็นต้องมีแม้แต่ตัวบันทึกคีย์ใช้โปรแกรมภายนอก
Ramchandra Apte

3
@ RaduRădeanuทางออกของคุณไม่มีประสิทธิภาพและไร้ประโยชน์ xinputไม่ใช่แม้แต่ SUID (-rwxr-xr-x 1 รูทราก 48504 15 ส.ค. 2012 / usr / bin / xinput)
Ramchandra Apte

1
@ RaduRădeanuเพราะคุณไม่จำเป็นต้องมี xinput ในการเข้าสู่ระบบ (ไม่ต้องใช้คำสั่งภายนอกหรือโปรแกรมที่เป็นอันตรายต้องเป็น SUID) โซลูชันของคุณจะอนุญาตให้ผู้ใช้ควบคุมการดำเนินการของ xinput ได้
Ramchandra Apte

3
ตัวอย่างพื้นฐานที่สุดในการพิสูจน์ว่าไม่มีประสิทธิภาพ: คัดลอกสต็อกของ xinput (ubuntu) จาก usb stick ดาวน์โหลดจากเว็บหรือส่งอีเมลถึงตัวคุณเองและเรียกใช้ในโฟลเดอร์บ้านของคุณ ผลเช่นเดียวกับการใช้ / usr / bin / xinput ที่ไม่ จำกัด
อัลโล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.