ShadowCallStack

.

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.