proteksi memori dan keamanan di dunia nyata

Saya baru saja membaca sebuah posting di built-in komunitas ilmiah, saya ingin menjawab. John selalu menempatkan konten yang besar di C / C ++ keanehan bahasa dan sering konten keamanan jika itu tidak ada hubungannya dengan keselamatan orang dalam beberapa cara. Posting terkait di atas, pendek, dengan beberapa link ke beberapa proyek penelitian menyelidiki mendapatkan keselamatan memori di memori bahasa inheren berbahaya seperti C / C ++. Daripada harus meninggalkan komentar di blog saya, seperti orang normal, saya menulis posting tidak jelas ini sebagai jawaban.

Saya melihat dua pendekatan yang masuk akal untuk mengurangi risiko kerentanan keamanan diperkenalkan oleh memori dalam waktu dekat. Perhatikan Aku tidak mengatakan “menghentikan kerentanan keamanan memori.” Untuk menghentikan mereka sepenuhnya, kemungkinan memerlukan sejumlah besar kelebihan yang tidak dapat diterima atau radikal mengubah atau memperpanjang bahasa ini, pada dasarnya. Tapi kita bisa mengurangi risiko kesalahan memori nyata dengan langkah-langkah keamanan yang sudah ada dan digunakan dalam praktek.

Yang pertama sudah ada, dan kau tahu itu sebagai ASLR, DEP, SEHOP, kenari stack dan berbagai jenis lain dari pengacakan dan ketidakpastian ditambahkan ke pelaksanaan program (lihat Pax atau MSDN dokumentasi untuk informasi lebih lanjut pada beberapa dari mereka). Sebagian besar perlindungan ini ditambahkan pada waktu kompilasi atau diaktifkan sedangkan sistem operasi Anda. Mereka dirancang untuk menjadi sesederhana mungkin dan memperkenalkan masalah kompatibilitas sedikit atau tidak ada. Itu tidak berarti itu tidak ditambahkan ke pengaturan konfigurasi, atau pengguna, mereka hampir tak terlihat menunjukkan perlindungan keamanan operasional yang efektif. Bahkan ada solusi untuk aplikasi warisan dikompilasi dengan kompiler yang lebih tua. Meskipun kekurangannya, alat EMET Microsoft yang sempurna untuk ini sarana modern perlindungan untuk aplikasi warisan, Anda tidak bisa melakukan bisnis tanpa itu. Obat ini ditambahkan overhead yang sangat kecil dan melakukan pekerjaan yang baik di semua aplikasi, besar dan kecil. Tapi sebagai skala program dalam kompleksitas efektivitasnya berkurang. Contoh terbaik adalah web browser dengan entri yang kaya, seperti JavaScript. Mungkin penyerang mengalahkan mereka menggunakan kerentanan? Ya. Mereka masih layak disimpan di sekitar, namun, dan overhead kinerja rendah? Kau benar. Jadi, ini adalah pendekatan pertama untuk mengurangi risiko kerentanan keamanan memori. Dia sudah di tempat dan efektivitas mereka.

Pendekatan kedua, yang saya tidak setuju dengan John dan penelitian akademis yang paling. Saya tidak melihat perlindungan umum yang menangkap segala sesuatu sebagai kesempatan atau di mana kita harus memfokuskan upaya kami pada penelitian. Hal ini terutama untuk alasan yang sama bahwa langkah-langkah pengurangan risiko yang dijelaskan di atas jatuh dalam menghadapi lingkungan runtime yang kompleks. Sebaliknya, saya melihat program khusus untuk digunakan sebagai risiko berkurang, itu adalah keputusan yang sangat baik untuk menghentikan serangan dunia nyata yang mempengaruhi kita hari ini. Tren ini, yang tidak sepenuhnya baru, tapi itu tidak benar-benar mengambil dalam arus utama belum, dan saya pikir saya tahu mengapa. Sebelum melanjutkan, kita perlu membahas sedikit sejarah. Sepuluh tahun yang lalu itu mungkin untuk menulis mengeksploitasi dengan metode umum seperti metadata tumpukan membusuk dan menyimpan alamat pada catatan pulang. Teknik ini terutama untuk kerentanan portabel dari program lain dalam ukuran dan kompleksitas. Tapi seiring waktu, pengembang dan perpustakaan sistem operasi telah menjadi bijaksana untuk ini dan memperkenalkan kode untuk melakukan teknik-teknik serbaguna mustahil. Hal ini dilakukan dengan berbagai metode, seperti pemindaian daftar ganda terkait pointer, XORing tabel virtual sensitif dari pointer ke fungsi dengan bantuan nilai sihir, dan sebagainya. Mereka sebenarnya obat umum yang saya bahas di atas. Mereka bekerja di semua program dengan overhead minimal dan membunuh banyak metode yang umum digunakan dalam satu frame. Sejak tahun 2000-an pertengahan terlambat untuk mengeksplorasi pengembang telah mengandalkan pada penggunaan data tertentu, untuk memastikan bahwa setelah ini mungkin dengan override pointer tunggal. Jelajahi pengembang untuk melakukan hal ini melalui studi tentang struktur data program khusus yang dapat dengan aman diganti atau kebocoran adalah untuk mengalahkan semua perlindungan umum tersebut. Fakta ini tampaknya hilang dalam akademik, setidaknya di sebagian besar penelitian saya datang di. Tentu saja, langkah evolusi berikutnya dalam pertahanan ingatan kita harus menjadi aplikasi tertentu. Langkah pertama dalam mengembangkan mengeksplorasi mengurangi risiko yang program khusus adalah studi tentang kerentanan individu yang berkaitan dengan mereka. Pengembang sudah melakukan hal ini, tetapi biasanya hanya menghasilkan patch yang memperbaiki masalah. Langkah berikutnya adalah untuk menentukan apakah ada model atau kesalahan dasar kelas untuk kerentanan ini, dan akhirnya memahami bagaimana menggunakan penulis menggunakan standar ini.

Sebuah contoh yang bagus dari program khusus menjelajahi Firefox kerangka mitigasi keracunan. Mozilla pengembang telah melihat kecenderungan umum di Firefox eksplorasi dan mitigasi diperkenalkan, untuk membuatnya lebih sulit. Ini adalah langkah ke arah yang benar. Jika setiap mengeksplorasi menyalahgunakan struktur tertentu dari data dalam aplikasi Anda, mungkin masuk akal untuk melindungi akses ke struktur dan mengurangi kemampuan untuk mencari aman penyerang atau kerusakan. pelaksanaan mitigasi dapat sepele, dan memaksa penyerang untuk menemukan pendekatan yang sama sekali baru. Setelah menaikkan bar cukup tinggi, mereka harus beralih ke target lain. Kadang-kadang desain komponen perangkat lunak asli memiliki konsekuensi yang tidak diinginkan dari pengembang frustrasi dieksplorasi, seperti halnya dengan RenderArena di WebKit (membaca seluruh topik). Intinya adalah untuk belajar bagaimana menggunakan dan memanfaatkan internal yang penulis pegangan yang unik untuk aplikasi mereka, dan kemudian membuat hidup Anda lebih sulit.

Jadi mengapa tidak ditangkap di sarana utama software belum? Nah, para pengembang hampir tidak pernah belajar eksploitasi untuk aplikasi yang mereka dukung. Ini banyak waktu dan kerja keras untuk rakyat, tidak terkait dengan keamanan yang tidak menyadari hal tersebut. Akademisi cenderung memperlakukan masalah keamanan memori sebagai salah satu yang memerlukan semua solusi yang komprehensif. Tapi saya pikir langkah-langkah pengurangan risiko spesifik program harus menjadi langkah penting dalam setiap program SDL sebagai kelanjutan dari studi dan koreksi kerentanan individu. Jangan memperhatikan rincian tentang bagaimana penyerang untuk kompromi sistem dengan menggunakan kode adalah hilangnya informasi berharga. Anda mungkin dapat membuat mitigasi, yang membuat pengoperasian kelas kesalahan sebagai program yang sangat sulit. Ini adalah biaya awal, tetapi dapat membantu untuk mengurangi keparahan kerentanan masa depan.

Sandbox merupakan langkah dalam evolusi ini, tetapi pada dasarnya berbeda dalam pendekatan mereka untuk mengurangi risiko kerentanan keamanan memori. Serta program mitigasi tertentu, mereka memiliki biaya awal untuk mengembangkan dan sulit untuk Nha pengembang peduli dengan masalah keamanan dalam rangka memenuhi syarat untuk pertama kalinya.

Tentu saja, ini adalah gejala dari masalah yang sebenarnya, yang merupakan kerentanan dalam memori dari bahasa berbahaya. pendekatan akademik sering menyajikan ekstensi untuk bahasa atau mekanisme pengiriman yang mencoba untuk memecahkan semua masalah yang terkait dengan tingginya biaya overhead. Pendekatan umum mempengaruhi kinerja terlalu banyak, atau tidak mengambil aplikasi yang ada untuk kompleks. tes dunia nyata untuk ini, sebagai aturan, “itu dapat membangun Chrome atau Firefox.” Jika jawabannya tidak, maka itu belum siap. Pendekatan terbaik untuk mengurangi risiko kesalahan untuk pergi ke berhenti mencari perpanjangan penuh program dalam memori bahasa berbahaya. Masalah ini hampir tidak mungkin untuk memecahkan dalam dunia tenggat waktu, anggaran dan 30 tahun rusak bahasa pilihan desain pemrograman. Sebaliknya, upaya penelitian kami harus difokuskan pada bagaimana kita dapat menghentikan serangan yang mempengaruhi kita hari ini.


Leave a Reply

Name *
Email *
Website