ShadowCallYığın

ShadowCallStack (SCS), bir işlevin dönüş adresini yaprak olmayan işlevlerin işlev prologunda ayrı olarak tahsis edilmiş bir ShadowCallStack'e kaydederek ve dönüş adresini işlevdeki ShadowCallStack'ten yükleyerek dönüş adresinin üzerine yazılmasına (yığın arabellek taşmaları gibi) karşı koruma sağlayan bir LLVM enstrümantasyon modudur. sonsöz. Dönüş adresi aynı zamanda çözücülerle uyumluluk açısından normal yığında da saklanır, ancak bunun dışında kullanılmaz. Bu, normal yığındaki dönüş adresini değiştiren saldırıların program kontrol akışı üzerinde hiçbir etkisinin olmamasını sağlar.

Aarch64'te enstrümantasyon, ShadowCallStack'e referans vermek için x18 kaydını kullanır; bu, ShadowCallStack'e yapılan referansların bellekte saklanmasına gerek olmadığı anlamına gelir. Bu, ShadowCallStack adresinin rastgele belleği okuyabilen saldırganlara ifşa edilmesini önleyen bir çalışma zamanının uygulanmasını mümkün kılar.

Uygulama

Android, hem çekirdek hem de kullanıcı alanı için ShadowCallStack'ı destekler.

Çekirdek için SCS'yi etkinleştirme

Çekirdek için ShadowCallStack'i etkinleştirmek amacıyla çekirdek yapılandırma dosyasına aşağıdaki satırı ekleyin:

CONFIG_SHADOW_CALL_STACK=y

Kullanıcı alanında SCS'yi etkinleştirme

Kullanıcı alanı bileşenlerinde ShadowCallStack'i etkinleştirmek için aşağıdaki satırları bir bileşenin plan dosyasına ekleyin:

sanitize: {
  scs: true
}

SCS, x18 kaydının ShadowCallStack adresini depolamak için ayrıldığını ve başka amaçlarla kullanılmadığını varsayar. Tüm sistem kitaplıkları x18 kaydını rezerve edecek şekilde derlenmiş olsa da, SCS'nin işlem içi eski kodla birlikte çalışan kullanıcı alanı bileşenleri için etkinleştirilmesi durumunda (örneğin, üçüncü taraf uygulamalar tarafından yüklenebilecek kitaplıklar) bu durum potansiyel olarak sorunlu olabilir; x18 kaydı. Bu nedenle, SCS'yi yalnızca eski ikili dosyalara yüklenmeyecek bağımsız bileşenlerde etkinleştirmenizi öneririz.

Doğrulama

SCS'ye özel bir CTS testi yoktur. Bunun yerine, SCS'nin cihazı etkilemediğini doğrulamak için CTS testlerinin SCS etkinken veya SCS etkin değilken geçtiğinden emin olun.