Seberapa amankah menyimpan file sewenang-wenang?

77

Kadang-kadang ketika saya catsecara tidak sengaja file biner, terminal saya rusak. Tidak ada yang cepat resettidak bisa perbaiki, tetapi tidak bisa seorang penyerang secara teoritis membuat file yang, ketika ditampilkan pada terminal, akan mengeksekusi beberapa kode arbitrer? Melalui exploit di terminal emulator atau lainnya.

Gunchar
sumber
3
Terkadang ketika saya melakukan itu shell saya akan mengatakan di akhir "<garbage> command tidak diketahui". Itu membuat saya bertanya-tanya apakah ini benar-benar mungkin.
Keith
5
Ada eksploitasi untuk emulator terminal, misalnya linuxsecurity.com/content/view/104657 atau securityfocus.com/bid/6936/discuss sehingga tidak perlu aman khusus
Ulrich Dangel
1
Inilah sebabnya mengapa lebih baik menggunakan sesuatu yang akan menolak pada file biner (seperti more) atau terminal-aware ( less) untuk memeriksa isi file. Tidak hanya itu tidak akan membuat terminal Anda dalam keadaan aneh, seluruh file tidak akan terbang dalam satu kesempatan.
Blrfl
The stty saneperintah mereset xterm (atau serupa) yang telah beralih ke misalnya set karakter yang berbeda.
Thorbjørn Ravn Andersen
moshdokumentasi memiliki beberapa pemikiran tentang itu: mosh.mit.edu/#techinfo
Max Ried

Jawaban:

34

Apakah keluaran seperti itu dapat dieksploitasi tergantung pada program terminal, dan apa yang dilakukan terminal itu tergantung pada kode pelarian yang dikirim. Saya tidak mengetahui program terminal memiliki fitur yang dapat dieksploitasi, dan satu-satunya masalah sekarang adalah jika ada buffer overflow yang tidak diketahui atau sesuatu seperti itu, yang dapat dieksploitasi.

Dengan beberapa hardwareterminal yang lebih lama, ini bisa menjadi masalah ketika Anda memprogram mis. Tombol fungsi dengan jenis urutan pelarian ini, dengan menyimpan urutan perintah untuk kunci tersebut dalam perangkat keras. Anda masih memerlukan penekanan tombol fisik untuk mengaktifkannya.

Tapi selalu ada (seperti Hauke ​​yang ditandai dengan sangat tajam sebagai 'braindead') orang yang mau menambahkan fitur seperti itu jika itu memecahkan masalah bagi mereka, tidak memahami celah yang mereka buat. Dalam pengalaman saya dengan perangkat lunak open source adalah bahwa, karena banyak mata melihat kode, ini lebih kecil kemungkinannya terjadi seperti halnya dengan sumber tertutup. (Saya ingat bahwa dalam program surat pada Silicon Grahpics 'Irix, pada pertengahan ninetees, Anda dapat menyertakan perintah yang akan dieksekusi pada mesin penerima, jalur nyata ke executable, ....)

Anthon
sumber
3
"Anda dapat memasukkan perintah yang akan dieksekusi pada mesin penerima" Maksud Anda seperti memasukkan dalam VBScript email yang memanggil ke Host Scripting Windows? :)
CVn
Tidak persis, Anda bisa memulai executable yang sudah ada di mesin, seperti memainkan suara. Saya tidak ingat sintaks yang tepat (itu hampir 20 tahun yang lalu) atau apakah Anda dapat menonaktifkan 'fitur' dalam pengaturan. Kami bersenang-senang dengan video yang diputar otomatis yang tersimpan di jaringan kami.
Anthon
Anda tidak berbicara tentang NeWS, bukan? IIRC SGI adalah salah satu dari penolakan terakhir.
luser droog
@luserdroog Tidak, ini adalah program surat berbasis GUI standar di bawah Irix
Anthon
1
@Anthon Saya tidak yakin apakah itu masih mungkin, tetapi kemungkinan menggunakan kode escape untuk mendapatkan terminal untuk "mengulangi" teks yang datang dari writeperintah - sehingga menjalankan perintah / skrip sebagai pengguna yang memiliki terminal. Seharusnya alasan mengapa banyak merekomendasikan mematikan pesan mesg -nuntuk pengguna sebagian besar waktu, dan untuk root selalu . AFAIK, ini sebenarnya dilakukan - walaupun saya tidak tahu apakah itu pernah dieksploitasi. Jadi teks acak dari catexecutable ted, bisa mungkin akan dieksekusi.
Baard Kopperud
33

Kebanyakan emulator terminal akan mengirimkan kembali beberapa respons, jika mereka menerima urutan pelarian tertentu (lihat dokumentasi urutan kontrol xterm ). Misalnya, Anda dapat mengirim \e[0cke emulator mirip VT100 dan itu akan mengirim kembali atribut perangkat, seperti \e[?1;2c (Ini mungkin apa yang diamati Keith.) Tetapi jawaban ini bukan string acak. Namun, memiliki executable yang bernama di 2csuatu tempat di sistem Anda yang melakukan sesuatu yang fatal adalah ide yang buruk.

Pembaruan: Risiko sebenarnya lebih besar dari yang saya kira, karena kemungkinan untuk mengatur judul jendela xterm dan mengirim kembali judul menggunakan urutan pelarian yang sesuai ( http://www.securityfocus.com/bid/6940/ ) . Berbeda dengan contoh di atas, judul dapat berupa string yang hampir sewenang-wenang.

Uwe
sumber
Itu sudah memotongnya sangat dekat.
Gunchars
Ada fitur yang bahkan lebih tua - 'pesan balasan', dikirim sebagai respons terhadap karakter ENQ (Ce). Pada VT100 yang sebenarnya, ini diatur oleh pengguna di menu SETUP terminal; mungkin ada emulator terminal yang memungkinkan pengaturannya dari jarak jauh ...
sendmoreinfo
16

Ini mengubah judul terminal di Terminal GNOME 3.6.1, kecuali diganti oleh sesuatu seperti PS1 :

printf "\033]2;Script Kiddie was here\007"

Sekarang buka jendela Terminal GNOME baru untuk menguji catversinya:

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

Yap, ini juga menentukan judul terminal.

Dulu ada masalah keamanan dengan kode pelarian yang menghasilkan judul yang dicetak ke baris perintah , sehingga Anda dapat secara efektif membuat file, yang ketika cated akan dicetak (saya tidak yakin apakah Anda bisa meletakkan baris baru di sana) perintah sewenang-wenang. Aduh!

l0b0
sumber
8

Meskipun menggunakan catmungkin tidak menghasilkan eksekusi kode, kode melarikan diri akan diproses sehingga Anda dapat dengan mudah disesatkan sehingga menganggap skrip tidak berbahaya padahal sebenarnya itu berbahaya.

Berikut adalah contoh perintah yang dapat Anda jalankan yang akan membuat skrip shell "jahat":

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

Saat Anda memeriksa file, tampaknya tidak cukup berbahaya:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

Tetapi jika Anda benar-benar menjalankannya ...

$ ./demo.sh 
...doing something bad here...

Skrip bekerja dengan memasukkan kode pelarian mentah untuk menggerakkan kursor ke atas beberapa baris, sehingga skrip lainnya ditulis di atas kode berbahaya, menyembunyikannya.

Hampir semua program lain akan mengungkapkan skrip untuk apa itu. Hanya program yang tidak memproses konten file (seperti cat, moredan less -r) yang akan menghasilkan output yang menyesatkan.

Perhatikan itu taildan headjuga hasilkan keluaran menyesatkan yang sama. Oleh karena itu, menggunakan "less + F" lebih aman daripada "tail -f".

Malvine
sumber
Ini cukup bermasalah ... Anda dapat melihat apa yang sebenarnya terjadi dengan menjalankan echo $(cat demo.sh), cat demo.sh | grep . --color=yes(Catatan: --color=yesadalah apa yang menunjukkan kode "jahat" di sini) atau bawaan cat -v demo.sh.
Charlie
Benar atau salah, ini adalah jawaban untuk pertanyaan yang berbeda: seberapa tepercaya catdalam menampilkan konten file .
Incnis Mrsi
@IncnisMrsi: Ini sebenarnya bukan jawaban untuk pertanyaan yang berbeda. Jawaban ini memperingatkan bahwa kucing akan menunjukkan kode pelarian, dan memberikan contoh sederhana dengan hanya satu jenis kode pelarian, tetapi ada banyak lainnya. Ketika dikombinasikan dengan terminal tertentu, ini dapat memetakan kembali kunci, menimpa file dan secara teori, bahkan menjalankan perintah . Jadi, begitu Anda menyadari bahaya menampilkan kode pelarian, Anda akan memahami bahwa kadang-kadang tidak aman untuk catfile sewenang-wenang, seperti pertanyaan yang diajukan!
Malvineous
6

Saya benar-benar mengalami xtermmemasukkan karakter sewenang-wenang ke dalam dirinya sendiri seolah-olah saya telah mengetiknya. Dan kadang-kadang ini rupanya termasuk karakter baris baru, sehingga saya mendapat ngwerm:0riu: command not foundtanggapan. Saya tidak melihat alasan mengapa seseorang tidak dapat membuat file yang akan mengirim perintah spesifik dan berbahaya. Jadi ya, setidaknya beberapa terminal rentan terhadap serangan dengan dampak sewenang-wenang.

Kilian Foth
sumber
2

Emulator terminal pada dasarnya hanya mencetak karakter yang dikirim ke sana.

Apa pun selain hanya mencetak karakter pada posisi saat ini, seperti mengatur posisi baru, mengubah warna, mengubah judul, dll., Dilakukan dengan urutan melarikan diri.

Himpunan urutan pelarian yang didukung biasanya terdiri dari standar yang didefinisikan dengan baik seperti ANSI , yang tidak menentukan cara untuk memulai proses lain. Meskipun mungkin untuk mengimplementasikan urutan seperti itu, saya tidak mengetahui adanya emulator terminal yang sengaja membiarkan hal-hal seperti itu.

Secara teori, bug seperti buffer overflow dapat digunakan untuk memicu fungsi sewenang-wenang. Tetapi ini juga bisa dilakukan di hampir semua biner lainnya.

michas
sumber
0

Secara umum biasanya tidak ada risiko untuk melakukan capping file arbitrer. Metode biasa saya untuk menganalisis file adalah dengan melakukan hal berikut:

$ file <mystery file>
$ strings <mystery file> | less

Di atas memungkinkan saya untuk menentukan jenis file melalui fileperintah dan stringsperintah memungkinkan saya untuk membuang string yang dapat diidentifikasi dari file biner calon yang saya tidak yakin tentang garis keturunan mereka.

contoh

keluaran file
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
output string
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...
slm
sumber
3
menjalankan string pada file yang tidak dikenal juga dapat memiliki konsekuensi yang bermasalah. lcamtuf.blogspot.fi/2014/10/…
Jan Wikholm
@IncnisMrsi - baca kalimat pertama !!!!
slm
OK, menarik kembali pernyataan saya sebelumnya, jawabannya pendek, menggunakan terminologi yang membingungkan, tidak berdasar, dan jelas tidak lengkap. Perhatikan bahwa dalam keamanan, "sewenang-wenang" ≠ acak seperti yang didistribusikan di OS favorit Anda.
Incnis Mrsi