Korumalı Alana Sahip API Açıklaması

Sandboxed API (SAPI), köklü Sandbox2 projesi üzerine kurulmuştur. 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ırlama araçlarının yanı sıra C/C++ kitaplıklarının korumalı alan sürümüyle iletişim için gerekli API'leri sağlamak üzere tasarlanmıştır.

Bu şemada, SAPI korumalı alanında C/C++ kitaplığının mimarisi gösterilmektedir:

SAPI Diyagramı

SAPI ayrıca SAPI kitaplıkları ile ana makine kodu arasında manuel ve otomatik (özel işaretçi özelliklerine göre) 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 olmaları durumunda (ör. güvenlik ihlalleri, kilitlenmeler veya kaynak tükenmesi nedeniyle) bunları yeniden başlatır.

Sandbox2

Açık kaynak projesi Sandbox2, Google güvenlik mühendisleri tarafından geliştirilip sürdürülmektedir ve SAPI tarafından kullanılan temel korumalı alan teknolojisidir. Sandbox2 üç ana bileşen içerir: Sandbox Policy, Executor ve Sandboxee.

Korumalı Alan Politikası

Korumalı alan politikası, korumalı alan kitaplığı için kısıtlanmış yürütme ortamını tanımlar. Bu, hangi sistem çağrılarının yürütülebileceğini netleştirerek sağlanır. SAPI, Sandbox2 ile aynı mekanizmayı kullanır. Korumalı alan politikası tasarlama ve tanımlama hakkında daha fazla bilgi için Sandbox Policy (Korumalı Alan Politikası) bölümüne ve Sandbox2'nin Getting Started (Başlarken) sayfasına bakın.

SAPI varsayılan bir politika kullanır. Alternatif olarak, 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 alınmış 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ı alan kitaplığı, ana makine kodu tarafından kullanılabilen gerekli işlevleri kullanıma sunar.

Korumalı alan kitaplığı, 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 sahte kod 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 Stub'ı

SAPI nesnesi, korumalı alan kitaplığının API'sini kullanıma sunan bir C++ nesnesidir. Bu, ana makine kodundan gelen çağrıları, SAPI kitaplığına yerleştirilmiş olan RPC Stub'a ve Sandboxed Library'ye yönlendirir.

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

Yayıncı kodu

Ana Makine Kodu, SAPI kitaplığı tarafından sağlanan mantığı uygulayan koddur. Bu, normalde C/C++ kitaplığının korumalı alan dışındaki sürümünü tüketen şeydir. Bu nedenle, ana makine kodu, SAPI kitaplığı tarafından dışa aktarılan işlevleri çağırır, verileri korumalı alana geçirir ve korumalı alandan veri alır.

SAPI kitaplığının kullanılabilmesi için ana makine kodunun uyarlanması gerekir. En önemlisi, kitaplık ayrı bir korumalı alan sürecinde bulunduğundan kitaplığın işlevleri çağrılamaz. Bu nedenle SAPI, SAPI kitaplığına yapılan çağrıları proxy'leyen bir SAPI nesnesi oluşturan araçlar sağlar.

Kavramlar

Bazel Derleme Kuralları

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

  • sapi_library() – C/C++ kitaplığının Sandbox2 Sandboxee olarak korumalı alana alınması için gereken tüm çıkışları oluşturur. Derleme çıktısı, ana makine kodu ikilisini oluşturmak için kullanılan cc_binary() kuralı için bağımlılık olarak kullanılabilir.
  • sapi_interface(): Ana makine kodu ikilisine eklenebilecek başlığı otomatik olarak oluşturur.

Derleme kuralları hakkında daha ayrıntılı bilgi için Derleme Kuralları başlıklı makaleyi inceleyin.

Değişkenler

SAPI, SAPI Türleri olarak adlandırılan ve Ana Makine Kodunda kullanmanızı önerdiğimiz bir dizi özel tür sağlar. SAPI Türleri'nin gerekli olmasının temel nedeni, ana makine kodu ile korumalı alan kitaplığı arasındaki işlem ve dolayısıyla bellek izolasyonudur.

Bu konuyla ilgili daha kapsamlı bir açıklama ve yaygın olarak kullanılan bazı SAPI türlerine genel bakış için Değişkenler başlıklı makaleyi inceleyin.

İşlemler

Yukarıda açıklandığı gibi, korumalı alan kitaplığına yapılan tüm API çağrıları bir RPC katmanı üzerinden iletilir. Bu katmanda bir hatayı işleyebilmek için uygun hata işleme yöntemini uygulamanız gerekir. SAPI Transaction modülü, bir Sandboxed Library'ye yapılan tüm çağrıların RPC düzeyinde herhangi bir sorun olmadan tamamlanmasını veya ilgili bir hatayla döndürülmesini sağlamak için gerekli mekanizmayı sağlar.

Bu konuyla ilgili daha kapsamlı bir açıklama için İşlemler bölümüne bakın.

Başlarken

İlk Sandboxed API projenizi oluşturmak için Başlangıç sayfamızı okuyun.