Internet mungkin memiliki masalah serius karena bahasa seperti C dan C ++ yang berkontribusi terhadap kerentanan

Halo, Habr! Saya mempersembahkan kepada Anda terjemahan artikel " Masalah Internet aurait de sérieux à menyebabkan de langages comme C et C ++ favorisant la survenue de failles " (Prancis).

Tetapi beberapa pengembang peduli dengan hal ini.


Satu bug mempengaruhi iPhone, yang lain - Windows, dan yang ketiga - server berjalan di Linux. Sepintas, bug ini tidak ada hubungannya, karena mereka berhubungan dengan platform yang berbeda: Android, iOS, macOS, Windows, Linux. Namun, pada kenyataannya, semuanya berbeda, menurut Alex Gaynor, seorang insinyur keamanan perangkat lunak di Mozilla, yang sebelumnya bekerja untuk USDS (United States Digital Service).

[1]
Lebih detail - https://www.usds.gov , selanjutnya sekitar. penerjemah.

Selama Weakest Link ketiga, acara tahunan yang diselenggarakan oleh Motherboard Vice,

[2]

mengenai masalah peretasan komputer dan keamanan siber di masa depan, Alex Gaynor mengangkat masalah serius, yang, menurut pendapatnya, dapat mengancam Internet, tetapi, secara paradoks, itu membuat para pengembang benar-benar tidak peduli.

Gaynor menjelaskan bahwa ketiga kesalahan yang disebutkan sebelumnya ada, karena perangkat lunak yang mereka pengaruhi pada platform yang berbeda ditulis menggunakan bahasa pemrograman, yang memiliki kecenderungan tidak menyenangkan untuk menyebabkan kesalahan seperti "memori tidak aman", yang memungkinkan akses ke area memori yang tidak dialokasikan.

[3]
Kemungkinan besar, itu dimaksudkan bahwa merujuk ke elemen ke-6 dari sebuah array yang terdiri dari 5 elemen diperbolehkan, meskipun dalam bahasa pemrograman lain yang lebih "aman", setidaknya pesan kesalahan akan ditampilkan.

Kategori kesalahan ini dapat menyebabkan bug dan kerentanan keamanan saat mengakses memori.

Dengan membiarkan kesalahan seperti "memori tidak aman" terjadi, bahasa pemrograman seperti C dan C ++ dapat menyebarkan aliran kerentanan keamanan kritis yang hampir tak ada habisnya selama bertahun-tahun. Contoh dari kerentanan ini adalah:

  • ketik ketidakcocokan
  • buffer overflow
  • overflow variabel integer
  • gunakan setelah kerentanan gratis

Ketidakcocokan tipe dapat terjadi ketika sepotong kode tidak memeriksa jenis objek yang diteruskan dan menggunakannya secara membabi buta. Situasi ini bisa berbahaya. Selain itu, bersama dengan tipe ketidakcocokan, pointer fungsi yang salah atau data yang salah dikaitkan dengan bagian kode yang salah, yang dalam beberapa kasus dapat menyebabkan eksekusi.

Buffer overflow (atau “buffer overflow” dalam bahasa Inggris) adalah kerentanan keamanan kritis yang terjadi ketika pengguna memasukkan string yang akan berada dalam array karakter dengan ukuran tidak cukup. Ini menyebabkan data ditulis di luar area memori yang dialokasikan untuk array. HeartBleed, misalnya, yang berdampak pada 17% dari server aman di Internet, adalah kerentanan buffer overflow yang memungkinkannya untuk membaca 60 KB setelah akhir daftar, termasuk kata sandi dan data pengguna lainnya.

Integer overflow adalah kesulitan untuk mendeteksi kerentanan yang mengeksploitasi fakta bahwa angka tidak dapat melebihi nilai tertentu, yang tergantung pada jumlah bit yang digunakan untuk mewakili mereka dan metode pengkodean.

Kerentanan "use after free" biasanya terjadi ketika menggunakan pointer atau data dalam memori ketika pointer (atau blok memori) sudah dibebaskan.

Bersama-sama, kerentanan ini adalah eksploitasi yang paling umum ditemukan dalam perangkat lunak populer, seperti Firefox, Chrome, Windows, Android, atau iOS. Gaynor telah menghitung setidaknya 400 dan menyatakan: “Saya telah memantau keamanan proyek-proyek ini selama lebih dari setahun, dan di hampir semua versi produk-produk ini, lebih dari setengah kerentanannya adalah ketidakamanan memori. Dan yang lebih mengkhawatirkan lagi adalah kerentanan parah dan kritis [...] hampir selalu memiliki tipe ini. ”

Meskipun ada risiko keamanan yang signifikan dari perangkat lunak yang mereka dukung, memori yang tidak aman dalam bahasa pemrograman seperti C atau C ++ masih digunakan oleh pengembang, sementara alternatif yang sudah terbukti seperti Rust dan Swift dapat dipertimbangkan. karena bahasa "memori aman" jarang.

Ini mungkin disebabkan oleh fakta bahwa untuk proyek baru, pengembang, sebagai aturan, memilih bahasa pemrograman berdasarkan bahasa yang diketahui oleh tim mereka, kinerja, dan sistem perpustakaan yang dapat mengalir dari pilihan ini. Dalam membuat keputusan, komponen keamanan yang terkait dengan ini hampir tidak pernah dipertimbangkan, atau setidaknya tidak dianggap cukup, kata Gaynor.

Selain itu, sebagian besar proyek perangkat lunak, bahkan yang paling penting untuk keamanan Internet, bukanlah hal baru. Mereka diluncurkan sepuluh tahun yang lalu, jika tidak lebih. Linux, OpenSSL, dan server web Apache, misalnya, sudah berusia lebih dari dua puluh tahun. Untuk proyek skala besar seperti ini, menulis ulang semua kode dalam bahasa baru bukanlah suatu pilihan. Mereka harus diubah secara bertahap, yang berarti bahwa proyek harus ditulis dan disimpan dalam dua bahasa yang berbeda, bukan satu. Ini juga menyiratkan perlunya membentuk tim besar, yang membutuhkan banyak waktu dan membutuhkan lebih banyak uang.

Masalah terbesar, akhirnya, adalah bahwa banyak pengembang tidak percaya bahwa masalahnya ada. Mereka percaya bahwa masalahnya bukan bahwa bahasa seperti C atau C ++ berkontribusi terhadap kerentanan, tetapi programmer lain yang menulis kode dengan kesalahan. Mereka percaya bahwa tidak ada masalah dengan bahasa-bahasa yang dianggap “tidak ramah memori” ini, karena tidak ada kode yang sempurna, hanya saja orang tidak tahu cara menggunakannya.

Apa yang Anda pikirkan tentang ini?



Saya perhatikan bahwa kritik terhadap terjemahan juga diterima.

Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id432502/


All Articles