ShadowCallStack (SCS), kötü amaçlı yazılımlara karşı koruma sağlayan bir LLVM aracı modudur. bir fonksiyonun ShadowCallStack yapraksız fonksiyonların fonksiyon listesini ve dönüş adresini ShadowCallStack'i kullanır. İade adresi de saklanıyor üzerinde yer alır ancak kullanılmamaktadır. Bu, normal yığında iade adresini değiştiren saldırılara program kontrol akışı üzerinde hiçbir etkisi yoktur.
Aarch64'ta, enstrümantasyon x18
(bu, referans değer referansları hakkında
bellekte depolanması gerekmez.
Bu, birden fazla reklam öğesinin gösterilmesini önleyen bir çalışma zamanı
ShadowCallStack'ın adresini, verileri okuyabilen saldırganlara
rastgele belleğe alma.
Uygulama
Android, hem çekirdek hem de kullanıcı alanı için ShadowCallStack'ı destekler.
Çekirdek için SCS'yi etkinleştir
Çekirdek için ShadowCallStack'ı etkinleştirmek üzere aşağıdaki satırı çekirdek yapılandırma dosyası:
CONFIG_SHADOW_CALL_STACK=y
Kullanıcı alanında SCS'yi etkinleştir
Kullanıcı alanı bileşenlerinde ShadowCallStack'i etkinleştirmek için bir bileşenin şema dosyasına aşağıdaki satırları ekleyin:
sanitize: { scs: true }
SCS, x18
kaydının
ShadowCallStack'dır, başka hiçbir amaçla kullanılmaz. Tüm sistem
kitaplıkları x18
kaydını ayırmak üzere derlenmiştir.
birlikte çalışan kullanıcı alanı bileşenleri için SCS'nin etkinleştirilmesi durumunda
işlemdeki eski kod (örneğin, üçüncü tarafın yükleyebileceği kitaplıklar)
uygulamaları) engellemesi gerekir. Bu da x18
kaydını engelleyebilir. Bu nedenle,
eskiye yüklenmeyecek bağımsız bileşenlerde SCS'yi etkinleştirme
her zaman daha iyidir.
Doğrulama
Özellikle SCS'ye yönelik bir CTS testi yoktur. Bunun yerine CTS testlerinin SCS'nin olanak tanır.