Sandbox2 tasarımı, iyi bilinen ve yerleşik teknolojiler, bir politika çerçevesi ve iki süreç (Sandbox Executor ve Sandboxee) üzerine kuruludur.
İlgili 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 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ı ve jetonlar ile tutma yerleri aracılığıyla kimlik bilgisi değişimini ileten Tür-Uzunluk-Değer (TLV) mesajlarını destekler.
Seccomp-BPF
Sandbox2, syscall'ları filtrelemek için Berkeley Packet Filter (BPF) kurallarının kullanılmasına olanak tanıyan Secure Computing Mode (seccomp) uzantısı olan seccomp-bpf'ye dayanır.
seccomp, bir işlemin sistem çağrılarını yalnızca exit
, sigreturn
, read
ve write
'e izin verecek şekilde kısıtlayan bir Linux çekirdek tesisidir. Bir işlem başka bir sistem çağrısı yürütmeye çalışırsa sonlandırılır. seccomp-bpf uzantısı, seccomp'a kıyasla daha fazla esneklik sağlar. Sabit bir syscall kümesine izin vermek yerine, seccomp-bpf, syscall verilerinde bir BPF programı çalıştırır ve programın dönüş değerine bağlı olarak syscall'ı yürütebilir, syscall'ı atlayıp sahte bir değer döndürebilir, işlemi sonlandırabilir, bir sinyal oluşturabilir veya izleyiciyi bilgilendirebilir.
Ptrace
ptrace (process trace) sistem çağrısı, izleyici işlemin izlenen işlemin yürütülmesini gözlemlemesine ve kontrol etmesine olanak tanıyan işlevsellik sağlar. İzleme işlemi, bağlandıktan sonra izlenen üzerinde tam kontrole sahiptir. ptrace hakkında daha fazla bilgiyi Wikipedia'da veya ilgili man sayfasında bulabilirsiniz.
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ı 2 bölümden oluşur:
- 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ş Sistem Çağrısı 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.
Sistem çağrılarını daha da kısıtlamak veya daha karmaşık kurallar gerektirmek istiyorsanız AddPolicyOnSyscall
ve AddPolicyOnSyscalls
ile ham BPF makroları belirtebilirsiniz. crc4 örneği, read
, write
ve close
sistem çağrıları için bağımsız değişkenleri kısıtlamak üzere bu mekanizmayı kullanır.
Genel olarak, kodda bulunan herhangi bir güvenlik açığının kötüye kullanımı politika tarafından sınırlandırılacağından korumalı alan politikası ne kadar katı olursa o kadar iyidir. 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ırlamalarla karşılaşır.
Çok sıkı bir Sandbox Politikası, standart giriş ve çıkış dosyası tanımlayıcılarındaki okuma ve yazma işlemleri hariç 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ü niyetli 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 sistemine ilişkin bağımsız 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, AddLibrariesForBinary
, belirtilen dinamik olarak bağlantılı yürütülebilir dosya tarafından gereken tüm kitaplıkları otomatik olarak eşlemek için 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ı iyileştirirken).
--sandbox2_danger_danger_permit_all
--sandbox2_danger_danger_permit_all_and_log
Korumalı alan yürütücüsü
Sandbox Executor kendi başına korumalı alan içermeyen bir işlemdir. Sandboxee'ye (ptrace tracee süreci) bağlanan ptrace izleyici sürecidir. 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: Stand-alone, Sandbox2 Forkserver ve Custom Forkserver. Forkserver kullanıyorsanız Sandboxee, Sandbox Executor'ın alt işlemi olarak oluşturulur. Bu modlar ayrıntılı olarak burada açıklanmıştır.
Sandboxee
Sandboxee, Korumalı Alan Politikası tarafından tanımlanan kısıtlanmış ve korumalı alan ortamında çalışan işlemdir. Sandbox Executor, IPC aracılığıyla politikayı Sandboxee'ye gönderir. Sandboxee daha sonra politikayı uygular. Politikanın herhangi bir şekilde ihlal edilmesi, aksi yapılandırılmadığı sürece sürecin sonlandırılmasına neden olur (Korumalı Alan Politikası'na bakın).