Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

ShadowCallStack

ShadowCallStack (SCS) adalah mode instrumentasi LLVM yang melindungi dari alamat pengembalian overwrites (seperti stack buffer overflows) dengan menyimpan alamat pengembalian fungsi ke ShadowCallStack yang dialokasikan secara terpisah dalam prolog fungsi fungsi nonleaf dan memuat alamat pengembalian dari ShadowCallStack dalam fungsi epilog. Alamat pengirim juga disimpan di tumpukan biasa untuk kompatibilitas dengan unwinder, tetapi sebaliknya tidak digunakan. Ini memastikan bahwa serangan yang mengubah alamat pengembalian pada tumpukan biasa tidak berpengaruh pada aliran kontrol program.

Pada aarch64, instrumentasi menggunakan register x18 untuk mereferensikan ShadowCallStack, yang berarti bahwa referensi ke ShadowCallStack tidak harus disimpan dalam memori. Hal ini memungkinkan penerapan runtime yang menghindari pengungkapan alamat ShadowCallStack kepada penyerang yang dapat membaca memori arbitrer.

Penerapan

Android mendukung ShadowCallStack untuk kernel dan ruang pengguna.

Mengaktifkan SCS untuk kernel

Untuk mengaktifkan ShadowCallStack untuk kernel, tambahkan baris berikut ke file konfigurasi kernel:

CONFIG_SHADOW_CALL_STACK=y

Mengaktifkan SCS di userspace

Untuk mengaktifkan ShadowCallStack di komponen ruang pengguna, tambahkan baris berikut ke file cetak biru komponen:

sanitize: {
  scs: true
}

SCS mengasumsikan bahwa register x18 dicadangkan untuk menyimpan alamat ShadowCallStack, dan tidak digunakan untuk tujuan lain. Sementara semua pustaka sistem dikompilasi untuk mencadangkan register x18 , hal ini berpotensi menjadi masalah jika SCS diaktifkan untuk komponen ruang pengguna yang beroperasi dengan kode warisan dalam proses (misalnya, pustaka yang dapat dimuat oleh aplikasi pihak ketiga), yang dapat mengganggu register x18 . Karena itu, kami hanya menyarankan mengaktifkan SCS di komponen mandiri yang tidak akan dimuat ke biner lama.

Validasi

Tidak ada tes CTS khusus untuk SCS. Sebagai gantinya, pastikan tes CTS lulus dengan dan tanpa SCS diaktifkan untuk memverifikasi bahwa SCS tidak memengaruhi perangkat.