Saya mengalami masalah yang sama dan pada awalnya saya berpikir sama seperti di atas bahwa mungkin gdb mengabaikan kemampuan yang dapat dieksekusi karena alasan keamanan. Namun, membaca kode sumber dan bahkan menggunakan gerhana debugging gdb itu sendiri ketika sedang men-debug ext2fs-prog saya yang membuka /dev/sda1
, saya menyadari bahwa:
- gdb tidak istimewa seperti program lainnya. (Sama seperti dalam matriks, bahkan agen itu sendiri mereka mematuhi hukum fisika yang sama, gravitasi, dll., kecuali bahwa mereka semua adalah penjaga pintu.)
- gdb bukan proses induk dari debug yang dapat dieksekusi, melainkan grand father.
- Proses induk sebenarnya dari debug executable adalah "shell", yaitu
/bin/bash
dalam kasus saya.
Jadi, solusinya sangat sederhana, selain menambahkan cap_net_admin,cap_net_raw+eip
ke gdb, Anda juga menerapkan ini ke shell Anda. yaitu setcap cap_net_admin,cap_net_raw+eip /bin/bash
Alasan Anda juga harus melakukan ini ke gdb adalah karena gdb adalah proses induk dari /bin/bash
sebelum membuat proses debug.
Baris perintah yang dapat dieksekusi sebenarnya di dalam gdb adalah seperti berikut:
/bin/bash exec /my/executable/program/path
Dan ini adalah parameter untuk vfork di dalam gdb.
Bagi mereka yang memiliki masalah yang sama, Anda dapat melewati yang ini dengan menjalankan gdb dengan sudo.
Beberapa waktu yang lalu saya mengalami masalah yang sama. Dugaan saya adalah menjalankan program debug dengan kemampuan tambahan merupakan masalah keamanan.
Program Anda memiliki lebih banyak hak istimewa daripada pengguna yang menjalankannya. Dengan debugger, pengguna dapat memanipulasi eksekusi program. Jadi jika program berjalan di bawah debugger dengan hak istimewa tambahan maka pengguna dapat menggunakan hak istimewa ini untuk tujuan lain selain yang dimaksudkan oleh program untuk menggunakannya. Ini akan menjadi lubang keamanan yang serius, karena pengguna tidak memiliki hak istimewa.