Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

ShadowCallStack

ShadowCallStack (SCS) adalah LLVM instrumentasi modus yang melindungi terhadap menimpa alamat kembali (seperti tumpukan penyangga overflows) dengan menyimpan alamat kembali fungsi untuk sebuah ShadowCallStack secara terpisah dialokasikan dalam fungsi Prolog fungsi nonleaf dan memuat alamat pengirim dari ShadowCallStack di fungsi epilog. Alamat pengirim juga disimpan di tumpukan biasa untuk kompatibilitas dengan unwinder, tetapi sebaliknya tidak digunakan. Ini memastikan bahwa serangan yang mengubah alamat pengirim pada tumpukan biasa tidak berpengaruh pada aliran kontrol program.

Pada aarch64, yang merek instrumentasi menggunakan dari x18 mendaftar untuk referensi ShadowCallStack, yang berarti bahwa referensi ke ShadowCallStack tidak harus disimpan dalam memori. Ini memungkinkan untuk mengimplementasikan runtime yang menghindari memaparkan alamat ShadowCallStack ke 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 ruang pengguna

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

sanitize: {
  scs: true
}

SCS mengasumsikan bahwa x18 mendaftar dicadangkan untuk menyimpan alamat ShadowCallStack, dan tidak digunakan untuk tujuan lain. Sementara semua perpustakaan sistem dikompilasi untuk cadangan x18 register, ini berpotensi bermasalah jika SCS diaktifkan untuk komponen userspace yang beroperasi dengan kode dalam proses warisan (misalnya, perpustakaan yang bisa dimuat oleh aplikasi pihak ketiga), yang mungkin mengkritik yang x18 mendaftar. Karena itu, kami hanya menyarankan untuk mengaktifkan SCS di komponen mandiri yang tidak akan dimuat ke biner lama.

Validasi

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