Hari ini tiba-tiba sebuah file bernama Program
muncul di root C:\
, dan ketika masuk ke sistem, popup menunjukkan pesan:
Peringatan Nama File
Ada file atau folder di komputer Anda yang disebut "C: \ Program" yang dapat menyebabkan aplikasi tertentu tidak berfungsi dengan benar. Mengganti nama menjadi "C: \ Program1" akan menyelesaikan masalah. Apakah Anda ingin mengganti nama sekarang?
Sementara pesan itu menjelaskan sendiri, saya bertanya-tanya mengapa file ini bisa memiliki pengaruh besar? Memang, beberapa program (mungkin semua, saya tidak periksa) yang berada di C:\Program Files...
tidak memulai sama sekali. Saya dapat memahami bagaimana file tersebut dapat dibuat (misalnya, mencoba menulis ke folder C:\Program Files\Something...
tetapi tanpa tanda kutip), tetapi saya tidak mengerti bagaimana hal itu dapat berdampak pada program lain.
sumber
Program Files*
untuk konsumen biasa. Tetapi saya akan berpikir itu karena pencocokan yang buruk untuk pencarian dapat menemukannyaProgram Files
.Jawaban:
Ini memiliki pengaruh yang sangat besar karena kelemahan yang telah lama diketahui dalam Win32 API.
Program muncul di Win32 melalui
CreateProcess()
panggilan sistem. Ini dapat digunakan dalam beberapa cara. Orang-orang yang berasal dari latar belakang Unix, Linux, atau OS / 2 biasanya akan menganggapnya sebagai mengambil dua argumen terpisah untuk program (file gambar) untuk muncul dan perintah ekor untuk lolos ke proses baru, karena nama file dan argumen vektor / perintah ekor. adalah dua hal terpisah dalam API sistem operasi tersebut. Tetapi pada kenyataannya panggilan sistem dapat dipanggil dalam bentuk alternatif dengan nama program dan argumen yang dihancurkan bersama dalam satu string besar.CreateProcess()
akan mencoba untuk memisahkan nama file program dari ekor perintah.Masalahnya adalah ia melakukan ini dengan secara progresif membelah string menjadi dua pada setiap karakter spasi berturut-turut, sampai bagian kiri cocok dengan file atau direktori. Banyak program Win32 akan mencoba memberikan string seperti
C:\Program Files\Contoso\TakeOver.exe StackExchange.com
ke pemanggilan sistem. Ini akan menjalankan program yang tepat -C:\Program Files\Contoso\TakeOver.exe
- dengan ekor perintah yang benar -StackExchange.com
- sampai pada titik di mana beberapa orang yang berbahaya datang dan membuatC:\Program
file seperti yang Anda lakukan.Pada saat itu, panggilan sistem akhirnya mencoba menjalankan file gambar program
C:\Program
dengan ekor perintahFiles\Contoso\TakeOver.exe StackExchange.com
. Surga membantu Anda jikaC:\Program
sebenarnya gambar program yang dapat dieksekusi.Ini adalah kelemahan umum, dan itu berlaku untuk setiap nama file program yang berisi spasi dalam kombinasi dengan program apa pun yang menggunakan One Big String untuk menelurkan program lain. Tetapi kasus paling umum yang terkena dampak ini adalah semua program yang hidup di bawah
C:\Program Files\
dan sejumlah besar program Win32 yang menggunakan pendekatan One Big String.Sudah terlambat untuk mengubah API Win32. Sudah terlambat satu dekade yang lalu. Dan Microsoft tidak dapat mengubah semua program yang ditulis oleh orang lain yang meneruskan satu string besar, bukan dua
CreateProcess()
. Jadi Microsoft membuat Windows memeriksa, pada login pengguna, untuk keberadaanC:\Program
dan menampilkan peringatan yang Anda lihat.Dan, seperti yang Anda lihat, ada peringatan "Keamanan" dalam dokumen Win32 Microsoft yang memberitahu pengembang untuk tidak menulis program menggunakan pendekatan One Big String, yang telah ada di sana selama beberapa tahun sekarang.
Bacaan lebih lanjut
sumber
C:\Program.exe
yang mencatat semua parameter baris perintahnya. Kita akan lihat siapa yang menggunakannya!