Sandbox2 tasarımı, iyi bilinen ve yerleşik teknolojiler, bir politika çerçevesi ve iki süreç (Sandbox Executor ve Sandboxee) üzerine kuruludur.
Kullanılan Teknolojiler
Aşağıdaki bölümlerde, Sandbox2'nin temel katmanını oluşturan teknolojiler ele alınmaktadır.
Linux Ad Alanları
Linux ad alanları, işletim sistemi düzeyinde sanallaştırma sağlamaya yönelik bir girişimdir. Birden fazla kullanıcı alanı birbirinden bağımsız olarak çalışıyor gibi görünse de tek bir çekirdek örneğini paylaşır. Sandbox2 aşağıdaki ad alanlarını kullanır:
- IPC
- Ağ (
PolicyBuilder::AllowUnrestrictedNetworking()aranarak açıkça devre dışı bırakılmadığı sürece) - Bağlama (dosya sistemi ağacının özel bir görünümünü kullanarak)
- PID
- Kullanıcı
- UTS
Linux ad alanları hakkında daha fazla bilgiyi Wikipedia'da veya ilgili man sayfasında bulabilirsiniz.
IPC
Sandbox2, Sandbox Executor ile güvenilmeyen Sandboxee arasında rastgele verilerin değiştirilmesine olanak tanır. Dosya tanımlayıcılarını iletme ve jetonlar ile tutma yerleri aracılığıyla kimlik bilgisi değişimi gibi Tür-Uzunluk-Değer (TLV) mesajlarını destekler.
Seccomp-BPF
Sandbox2, seccomp-bpf'yi kullanır. Bu, sistem çağrılarını filtrelemek için Berkeley Paket Filtresi (BPF) kurallarının kullanılmasına olanak tanıyan Güvenli Bilgi İşlem Modu'nun (seccomp) bir uzantısıdır.
seccomp, bir işlemin sistem çağrılarını yalnızca exit, sigreturn, read ve write'ye izin verecek şekilde kısıtlayan bir Linux çekirdeği özelliğidir. Bir işlem başka bir sistem çağrısı yürütmeye çalışırsa sonlandırılır. seccomp-bpf uzantısı, seccomp'tan daha fazla esneklik sağlar. seccomp-bpf, sabit bir sistem çağrısı kümesine izin vermek yerine sistem çağrısı verileri üzerinde bir BPF programı çalıştırır ve programın dönüş değerine bağlı olarak sistem çağrısını yürütebilir, sistem çağrısını atlayıp sahte bir değer döndürebilir, işlemi sonlandırabilir, sinyal oluşturabilir veya izleyiciyi bilgilendirebilir.
Ptrace
ptrace (process trace) syscall, izleyici işlemin izlenen işlemin yürütülmesini gözlemlemesine ve kontrol etmesine olanak tanıyan işlevsellik sağlar. İzleyici işlemi, izlenen işlem üzerinde tam kontrole sahiptir. Wikipedia'da veya ilgili kılavuz sayfasında ptrace hakkında daha fazla bilgi edinebilirsiniz.
Korumalı Alan Politikası
Sandbox Politikası, Sandboxee'nin gerçekleştirebileceği ve gerçekleştiremeyeceği işlemleri belirttiği için Sandbox'ın en önemli parçasıdır. Bir sanal alan politikasının 2 bölümü vardır:
- Sistem çağrısı politikası
- Ad alanı kurulumu
Varsayılan Syscall Politikası
Varsayılan politika, her zaman tehlikeli olan sistem çağrılarını engeller ve kullanıcı tarafından sağlanan genişletilmiş politikaya göre önceliklidir.
Genişletilmiş Syscall Politikası
Genişletilmiş syscall politikası, PolicyBuilder sınıfımız kullanılarak oluşturulabilir. Bu sınıf, politikanızın okunabilirliğini artırmak için kullanılabilecek bir dizi kolaylık kuralı (ör. AllowStaticStartup, AllowDynamicStartup, AllowOpen) tanımlar.
Çoğu durumda, DefaultPolicyBuilder(sapi::Sandbox2Config::DefaultPolicyBuilder()) ile başlamayı tercih etmelisiniz. Bu yöntem, tipik tek iş parçacıklı kitaplıklar için temel bir politikayla önceden yapılandırılmış bir PolicyBuilder döndürür ve ek kurallarla (ör. bir ikili dosya için korumalı alan oluştururken .AllowDynamicStartup() ve .AddLibrariesForBinary()) daha da özelleştirilebilir. Sandboxed API'de (SAPI) DefaultPolicyBuilder(), sapi::SandboxConfig::DefaultConfig() tarafından sapi::SandboxConfig::DefaultFlags(), sapi::SandboxConfig::DefaultEnvironmentVariables() ve sapi::Sandbox2Config::DefaultLimits() ile birlikte kullanılır. Doğrudan PolicyBuilder oluşturma, yalnızca DefaultPolicyBuilder() kullanılamadığında veya hassas bir yapılandırma gerektiğinde kullanılmalıdır.
Sistem çağrılarını daha fazla kısıtlamak veya daha karmaşık kurallar uygulamak istiyorsanız AddPolicyOnSyscall ve AddPolicyOnSyscalls ile ham BPF makroları belirtebilirsiniz. crc4 örneği, read, write ve close sistem çağrılarının bağımsız değişkenlerini kısıtlamak için bu mekanizmayı kullanır.
Genel olarak, korumalı alan politikası ne kadar sıkı olursa o kadar iyidir. Çünkü kodda bulunan güvenlik açıklarının kötüye kullanılması politika tarafından sınırlandırılır. Programın normal çalışması için hangi sistem çağrılarının ve bağımsız değişkenlerin gerektiğini tam olarak belirleyebiliyorsanız kod yürütme güvenlik açığından yararlanan saldırganlar da aynı sınırlamalara tabi olur.
Çok sıkı bir korumalı alan politikası, standart giriş ve çıkış dosya tanımlayıcılarındaki okuma ve yazma işlemleri dışındaki tüm sistem çağrılarını reddedebilir. Bu korumalı alanda bir program, giriş alabilir, işleyebilir ve çıkışı döndürebilir. Ancak işlem başka bir sistem çağrısı yapmaya çalışırsa politika ihlali nedeniyle sonlandırılır. Bu nedenle, süreç tehlikeye girerse (kötü amaçlı bir kullanıcı tarafından kod yürütülürse) kötü çıktı üretmekten daha kötü bir şey yapamaz (yürütücünün ve diğerlerinin yine de doğru şekilde ele alması gerekir).
Ad Alanı Kurulumu
PolicyBuilder nesnesi, Sandboxee'nin dosya sisteminin ayrı görünümünü ayarlamak için de kullanılır. Tek dosyalar (AddFile / AddFileAt), dizinlerin tamamı (AddDirectory / AddDirectoryAt) ve geçici depolama alanı (AddTmpfs) Sandboxee'nin ortamına eşlenebilir. Ayrıca, belirtilen dinamik olarak bağlı yürütülebilir dosyanın ihtiyaç duyduğu tüm kitaplıkları otomatik olarak eşlemek için AddLibrariesForBinary kullanılabilir.
Komut satırı işaretleri
Aşağıdaki komut satırı işaretlerinden biri belirtilerek herhangi bir Sandbox2 politikası devre dışı bırakılabilir. Bu işaretler test amaçlıdır (ör. genişletilmiş sistem çağrısı politikasını hassaslaştırırken).
--sandbox2_danger_danger_permit_all--sandbox2_danger_danger_permit_all_and_log
Korumalı Alan Yürütücüsü
Korumalı alan yürütücüsü, korumalı alana alınmayan bir işlemdir. Sandboxee'ye (ptrace tracee işlemi) eklenen ptrace tracer işlemidir. Sandbox Executor ayrıca, Sandboxee'yi izleyen ve durum bilgileri sağlayan bir Monitor örneği oluşturup çalıştırır.
Sandbox2 üç yürütme moduna izin verir: Bağımsız, Sandbox2 Forkserver ve Özel Forkserver. Forkserver kullanıyorsanız Sandboxee, Sandbox Executor'ın alt işlemi olarak oluşturulur. Bu modlar burada ayrıntılı olarak açıklanmıştır.
Sandboxee
Sandboxee, Sandbox Politikası tarafından tanımlanan kısıtlanmış ve korumalı alan ortamında çalışan işlemdir. Korumalı Alan Yürütücüsü, politikayı IPC aracılığıyla Korumalı Alan'a gönderir. Sandboxee daha sonra politikayı uygular. Politikanın ihlal edilmesi, aksi yapılandırılmadığı sürece işlemin sonlandırılmasına neden olur (Korumalı Alan Politikası'na bakın).