GCC racun

Microsoft telah mengambil peran lebih aktif dalam alat-alat keamanan pengembang sejak SDLC pada pertengahan 2000. Salah satu tahapan sebelumnya dari SDLC digunakan untuk mengurangi kerentanan kode diperkenalkan dengan nama banned.h file header . Apa adalah file header yang menggunakan Pragma MSVC untuk mengutuk fitur yang pengembang sering salah digunakan dan, karena itu, pelaksanaan eksekusi kode jauh kerentanan dalam aplikasi mereka. Fungsi-fungsi ini adalah tersangka: strcpy, sprintf, memcpy, CopyMemory, RtlCopyMemory, strcat, alloca dan banyak spesifik Win32 lainnya. Jalan kembali dalam versi aslinya adalah dukungan serupa banned.h untuk GCC, namun dilepas pada tahun 2008, saya tidak ingat persis mengapa atau kapan, tapi masuk akal bagi Microsoft untuk mendukung fungsi ini dengan cara apapun.

Bahkan saat ini, pada tahun 2013, sebagian besar perangkat lunak warisan yang sangat penting bagi banyak perusahaan masih berisi kode yang memanggil fungsi perpustakaan rentan. Meskipun perlindungan memori modern sebagai ASLR dan DEP kerentanan fungsi-fungsi ini untuk lebih memperkenalkan berguna di bawah kondisi yang tepat.

Sayangnya, sejauh ini, tampaknya tidak setara dengan proyek banned.h menggunakan GCC, jadi saya mulai proyek ke halaman lain di GitHub. Menggunakan GCC racun Pragma spesifik pengenal larangan kode Anda. Sejauh yang saya tahu, GCC tidak merekomendasikan penggunaan pragma (tapi, untuk menjadi adil, saya tidak merekomendasikan menggunakan GCC, untuk versi dentang). Ada beberapa keterbatasan pendekatan ini, bahkan jika pegangan adalah bagian dari makro ID diperluas telah diracuni, tidak akan menghasilkan kesalahan. Itu sebabnya Anda tidak ingin bermain kesalahan GCC dalam panggilan berbahaya dibuat dalam file header di luar kendali Anda. Berikut adalah contoh bagaimana direktif:

# include dan L; stdio.h & amp; amp; GT
# include dan L; string.h & amp; amp; Gt;

# Pragma GCC racun strcpy

main (int argc int, simbol * ARGV [ ]) {
simbol BUF [10];
strcpy (BUF, ARGV [1]);
return 0;
}

$ GCC – string.c urutan
string.c: Dalam fungsi ‘utama':
string.c: 8: 2: ERROR: upaya untuk menggunakan diracuni “strcpy”

ini sederhana namun dapat sangat berguna jika Anda memiliki banyak C kode warisan duduk di sekitar bahwa Anda ingin menghapus fungsi tersebut dan menjaga pengembang dari membuat dan menyusun kode baru yang berisi mereka. Untuk versi pertama dari GCC-racun, kami membuat daftar singkat dari fungsi C berbahaya dalam file header untuk menyertakan sumbernya, seperti yang Anda lakukan dengan banned.h. Saya menekankan “kecil” di sini selama beberapa alasan penting.

Microsoft dapat melarang banyak fungsi sederhana lainnya karena mereka Libc setara aman, tetapi tidak memiliki GNU Libc mereka untuk daftar kami adalah tidak komprehensif,. Sebuah contoh yang baik adalah fungsi memcpy. Ada kemungkinan bahwa sumber dari sejumlah besar serangan buffer overflow, tapi itu hanya tidak praktis untuk menghapusnya dari sebagian besar program. Memperbaiki masalah ini memerlukan fitur yang tidak meracuni Pragma memberikan ekstensi seperti compiler dan asuransi setara. Standar C11 baru mendefinisikan beberapa fitur keamanan ini menyimpan dalam “‘interface perbatasan, tetapi sejauh yang saya tahu, baik Glibc menemani memutuskan untuk tidak melaksanakannya, dan mereka melampaui perkembangan CVD.

Tujuan menggunakan poison.h kami (atau yang serupa) untuk membantu kode warisan aman. Hal ini jauh dari sempurna, tapi Anda harus dapat menggunakannya dalam proyek internal, menambahkan semua API kustom, itu usang 2004 tetapi tidak bisa berhenti dengan bantuan pengembang.


Leave a Reply

Name *
Email *
Website