Korumalı Alana Sahip API Açıklaması

Sandboxed API (SAPI), köklü Sandbox2 projesinin temelini oluşturur. Bu sayfada SAPI'nin tasarım mimarisi ve temel kavramlar açıklanmaktadır.

Genel bakış

SAPI, geliştiricilere C/C++ kitaplıklarını korumalı alan için hazırlamaya yönelik araçların yanı sıra, C/C++ kitaplıklarının korumalı alan sürümüyle iletişim için gerekli API'ları sağlamak üzere tasarlanmıştır.

Bu şema, SAPI korumalı alana alınmış bir C/C++ kitaplığının mimarisini göstermektedir:

SAPI Şeması

SAPI, SAPI Kitaplıkları ile ana makine kodu arasında manuel ve otomatik (özel işaretçi özelliklerine bağlı) bellek senkronizasyonu (diziler, yapılar) için temel öğeler de sağlar.

Son olarak, üst düzey İşlemler API'si SAPI Kitaplıklarının izlenmesini sağlar ve başarısız olursa (ör. güvenlik ihlalleri, kilitlenmeler veya kaynakların tükenmesi nedeniyle) bu kitaplıkları yeniden başlatır.

Sandbox2

Açık kaynaklı Sandbox2 projesi, Google güvenlik mühendisleri tarafından geliştirilip yönetilmekte olup SAPI tarafından kullanılan temel korumalı alan teknolojisidir. Sandbox2 üç ana bileşen içerir: Korumalı Alan Politikası, Yürütücü ve Korumalı Alan.

Korumalı Alan Politikası

Korumalı alan politikası, Korumalı Alana Sahip Kitaplık için kısıtlanmış yürütme ortamını tanımlar. Bu, hangi syscall'ların yürütülebileceğini açıklığa kavuşturularak sağlanır. SAPI, Korumalı Alan2 ile aynı mekanizmayı kullanır; bir korumalı alan politikasının nasıl tasarlanacağı ve tanımlanacağı hakkında daha fazla bilgi için Korumalı Alan Politikası bölümüne ve Korumalı Alan2 için Başlarken sayfasına bakın.

SAPI varsayılan bir politika kullanır. Alternatif olarak, onu bir sandbox.h başlık dosyasında tanımlayıp sapi_library derleme kuralında bağımsız değişken olarak ileterek özel bir korumalı alan politikası kullanabilirsiniz.

Korumalı Alana Sahip Kitaplık

Bu, Sandbox2 tarafından sağlanan kısıtlanmış korumalı alan ortamında yürütülecek korumalı alana alınmış C/C++ kitaplığıdır. Sonuç olarak Korumalı Alana Sahip Kitaplık, Ana Makine Kodu tarafından kullanılabilen gerekli işlevleri sunar.

Korumalı Alana Sahip Kitaplık, sapi_library derleme kuralıyla oluşturulur. Bu kuralda, kısıtlanmış yürütme ortamını tanımlayan özelleştirilmiş bir korumalı alan politikası belirtebilirsiniz. Kitaplığa bağlı olarak, sarmalayıcı veya saplama kodu yazmanız gerekebilir (bkz. libcurl), ancak SAPI sürümünü hazırlarken C/C++ kitaplığının kaynak kodunu değiştirmeniz beklenmez.

SAPI Nesnesi ve RPC Kökü

SAPI Nesnesi, Korumalı Alana Sahip Kitaplık API'sini gösteren bir C++ nesnesidir. Çağrıları, Ana Makine Kodu'ndan gelen ve Korumalı Alana Sahip Kitaplık ile birlikte SAPI Kitaplığı'na yerleştirilen RPC Stub'a yönlendirir.

Bu iki öğe, sapi_library() derleme kuralı ile derleme sistemi tarafından otomatik olarak oluşturulur. SAPI, Google Bazel ve CMake olmak üzere iki derleme sistemini destekler.

Ana Makine Kodu

Ana Makine Kodu, SAPI kitaplığı tarafından sağlanan mantığı uygular. Normalde C/C++ kitaplığının korumalı alana alınmayan sürümünü kullanan dosya budur. Aynı şekilde, Ana Makine Kodu, SAPI kitaplığı tarafından dışa aktarılan ve verileri korumalı alana aktararak ve buradan verileri alan işlevleri çağırır.

Ana Makine Kodunun, SAPI kitaplığını kullanacak şekilde uyarlanması gerekir. En önemlisi, kitaplık ayrı bir korumalı alanda bulunduğu için kitaplığın işlevlerinin çağrılması mümkün değildir. Bu nedenle SAPI, proxy aracılığıyla bir SAPI kitaplığına çağrıda bulunan SAPI nesnesi oluşturan araçlar sağlar.

Kavramlar

Bazel Derleme Kuralları

SAPI projesi, bir C/C++ kitaplığını korumalı alana almak için iki Bazel derleme kuralı sağlar:

  • sapi_library() – C/C++ kitaplığının Sandbox2 Sandboxee'si olarak korumalı alana alınması için gereken tüm çıkışları oluşturur. Derleme çıkışı, ana makine kodu ikili programını oluşturmak amacıyla kullanılan cc_binary() kuralı için bir bağımlılık olarak kullanılabilir.
  • sapi_interface() – Ana makine kodu ikili programına eklenebilecek üst bilgiyi otomatik olarak oluşturur.

Derleme Kurallarının daha kapsamlı bir açıklaması için Derleme Kuralları bölümünü inceleyin.

Değişkenler

SAPI, Ana Makine Kodunda kullanmanızı önerdiğimiz, SAPI Türleri adlı bir dizi özel tür sağlar. SAPI Türlerinin gerekli olmasının birincil nedeni, işlem ve dolayısıyla Ana Makine Kodu ile Korumalı Alana Sahip Kitaplık arasındaki bellek yalıtımıdır.

Bu konuyla ilgili daha kapsamlı bir açıklama ve yaygın olarak kullanılan bazı SAPI Türlerine genel bir bakış için Değişkenler bölümünü inceleyin.

İşlemler

Yukarıda açıklandığı gibi, Korumalı Alana Sahip Kitaplık'a yapılan herhangi bir API çağrısı RPC katmanı üzerinden aktarılır. Bu katmandaki bir hatayı işleyebilmek için uygun hata işlemeyi uygulamanız gerekir. SAPI Transaction modülü, Korumalı Alana Sahip Kitaplık'a yapılan tüm çağrıların RPC düzeyinde sorun olmadan tamamlandığından veya ilgili bir hata ile döndürüldüğünden emin olmak için gereken mekanizmayı sağlar.

Bu konunun daha kapsamlı bir açıklaması için İşlemler bölümünü inceleyin.

Kullanmaya başlama

İlk Korumalı Alana Sahip API projenizi oluşturmak için Başlarken sayfamızı okuyun.