Seorang pembangun yang menyiasat kod perhimpunan ARM yang misteri telah menemui pepijat penting dalam penghubung LLD yang berpotensi mencipta kelemahan keselamatan. Apa yang sepatutnya menjadi ciri keselamatan yang direka untuk mencegah eksploitasi sebaliknya telah menghasilkan arahan lompat yang boleh dieksploitasi dalam kod ARM Thumb.
Isu ini berpusat pada corak arahan 0xd4d4 yang LLD masukkan untuk padding antara fail objek. Corak ini bertujuan untuk bertindak sebagai arahan perangkap - kod yang akan menghentikan pemproses jika tidak sengaja dilaksanakan. Walau bagaimanapun, perbincangan komuniti mendedahkan ini sebenarnya adalah sebahagian daripada mitigasi keselamatan yang dipanggil trapsleds, yang direka untuk mencegah serangan pengaturcaraan berorientasikan pulangan dengan menggantikan padding arahan NOP yang tidak berbahaya dengan sesuatu yang lebih defensif.
Masalah Teknikal
Isu teras ialah pada seni bina ARM Thumb, corak 0xd4d4 tidak mencipta perangkap langsung. Sebaliknya, ia menghasilkan arahan cawangan bersyarat yang melompat ke alamat relatif. Apabila dinyahpasang, ini muncul sebagai bmi 0x200ae @imm = #-0x58 - satu cawangan yang mengalihkan pelaksanaan ke lokasi memori yang berbeza dan bukannya menghentikannya.
Tingkah laku ini berbeza dengan ketara daripada seni bina lain di mana LLD dengan betul menggunakan arahan perangkap sebenar. Pada sistem x86, LLD menggunakan arahan 0xCC (INT3), yang dengan betul menghentikan pelaksanaan apabila dicapai. Pelaksanaan ARM nampaknya terlepas butiran penting ini.
Arahan perangkap: Arahan pemproses khas yang direka untuk menghentikan pelaksanaan, sering digunakan untuk penyahpepijatan atau tujuan keselamatan Pengaturcaraan berorientasikan pulangan: Teknik serangan di mana kod hasad merangkaikan urutan arahan sedia ada untuk memintas langkah keselamatan
Pecahan Arahan ARM Thumb 0xd4d4:
- Pengekodan: 0b1101010011010100
- Jenis Arahan: Cabang bersyarat (BMI)
- Syarat: (ASPR.C == '1') && (ASPR.Z != '0')
- Offset: -88 bait (-0x58 hex)
- Tingkah Laku Dijangka: Perangkap/hentikan pemproses
- Tingkah Laku Sebenar: Lompat ke alamat relatif
Implikasi Keselamatan dan Respons Komuniti
Komuniti telah mengenal pasti ini sebagai lebih daripada sekadar keingintahuan teknikal. Walaupun seorang pengulas menyatakan bahawa mengeksploitasi ini memerlukan kawalan ke atas aliran pelaksanaan terlebih dahulu, yang lain menegaskan bahawa ia boleh berfungsi sebagai trampolin untuk meningkatkan jangkauan eksploit dalam senario serangan tertentu.
Pepijat ini menjadi amat membimbangkan kerana ia bercanggah dengan tujuan keselamatan yang dinyatakan. Daripada mencegah eksploitasi kawasan padding, pelaksanaan yang rosak berpotensi mencipta vektor serangan baharu. Seperti yang diperhatikan oleh seorang ahli komuniti, ini boleh membawa kepada kelemahan aktor negara rantaian bekalan yang disamarkan jika tidak ditangani dengan betul.
Perbandingan dengan Penghubung Lain
Siasatan mendedahkan bahawa GNU ld mengendalikan situasi ini secara berbeza, menggunakan bait sifar (0x0000) untuk padding dan bukannya arahan seperti perangkap. Walaupun tidak berfokus keselamatan seperti pendekatan trapsled yang dimaksudkan, kaedah ini mengelakkan penciptaan laluan kod boleh laksana yang tidak diingini.
Kontras ini menyerlahkan bagaimana pelaksanaan toolchain yang berbeza boleh mempunyai implikasi keselamatan yang berbeza-beza, walaupun ketika melakukan tugas yang kelihatan mudah seperti penjajaran memori.
Perbandingan Arahan mengikut Linker:
- LLD (ARM Thumb): 0xd4d4 (cawangan bersyarat - bermasalah)
- LLD (x86): 0xCC (perangkap INT3 - betul)
- GNU ld: 0x0000 (padding sifar - selamat tetapi tidak fokus kepada keselamatan)
Kesimpulan
Penemuan ini menunjukkan bagaimana ciri keselamatan boleh menjadi bumerang apabila tidak dilaksanakan dengan betul merentas seni bina pemproses yang berbeza. Pasukan pembangunan LLD berkemungkinan perlu menangani ini dengan sama ada melaksanakan arahan perangkap yang betul untuk ARM Thumb atau menggunakan pendekatan padding yang lebih selamat. Sehingga itu, pembangun yang menggunakan LLD untuk sasaran ARM Thumb perlu sedar bahawa binari mereka mungkin mengandungi arahan cawangan bersyarat yang tidak diingini dalam kawasan padding.
Rujukan: D4D4