Yeteneğe dayalı güvenlik - Capability-based security

Yeteneğe dayalı güvenlik tasarımında bir kavramdır güvenli bilgi işlem mevcut sistemlerden biri güvenlik modelleri. Bir kabiliyet (bazı sistemlerde bir anahtar) bulaşıcıdır, taklit edilemez jeton otorite. Bir değeri ifade eder Referanslar bir nesne ilişkili bir dizi ile birlikte erişim hakları. Bir kullanıcı program bir yetenek tabanlı işletim sistemi bir nesneye erişmek için bir yetenek kullanmalıdır. Yetenek tabanlı güvenlik, kullanıcı programlarının, yetenekleri doğrudan birbirleriyle paylaşacak şekilde tasarlanması ilkesini ifade eder. en az ayrıcalık ilkesi ve bu tür işlemleri verimli ve güvenli hale getirmek için gerekli olan işletim sistemi altyapısı. Yeteneğe dayalı güvenlik, kullanan bir yaklaşımla karşılaştırılmalıdır. hiyerarşik koruma etki alanları.

Çoğu işletim sistemi, yeteneklere benzeyen bir tesis uygulamasına rağmen, tipik olarak, sistem genelinde erişim haklarını vermenin ve dağıtmanın birincil yolu olmak üzere, muhtemelen karşılıklı olarak güvenmeyen varlıklar arasında yetenek değişimine izin verecek kadar yeterli desteği sağlamaz. Aksine, kabiliyet tabanlı bir sistem bu amaç göz önünde bulundurularak tasarlanmıştır.

Bu makalede tartışılan yetenekler ile karıştırılmamalıdır POSIX 1e / 2c "Yetenekler ". İkincisi, işlemler arasında aktarılamayan kaba ayrıcalıklardır.

Giriş

Yetenekler, taklit edilebilirler yerine kullanılarak sistem güvenliğini geliştirme hedeflerine ulaşırlar. Referanslar. Taklit edilebilir bir referans (örneğin, yol adı ) bir nesneyi tanımlar, ancak bu nesne ve bu referansı tutan kullanıcı programı için hangi erişim haklarının uygun olduğunu belirtmez. Sonuç olarak, başvurulan nesneye herhangi bir erişim girişimi, işletim sistemi tarafından, ortam yetkisi talep eden programın, tipik olarak bir erişim kontrol Listesi (ACL). Bunun yerine, yeteneklere sahip bir sistemde, yalnızca bir kullanıcı programının bu yeteneğe sahip olması gerçeği, ona atıfta bulunulan nesneyi bu yetenek tarafından belirlenen haklara uygun olarak kullanma yetkisi verir. Teoride, yeteneklere sahip bir sistem, tüm varlıklara sadece gerçekten ihtiyaç duyacakları yetenekleri vererek herhangi bir erişim kontrol listesi veya benzer mekanizma ihtiyacını ortadan kaldırır.

Bir yetenek tipik olarak bir ayrıcalıklı veri yapısı erişim haklarını belirten bir bölümden ve erişilecek nesneyi benzersiz şekilde tanımlayan bir bölümden oluşur. Kullanıcı veri yapısına veya nesneye doğrudan erişmez, bunun yerine bir üstesinden gelmek. Uygulamada, bir dosya tanımlayıcı geleneksel bir işletim sisteminde (geleneksel bir tutamaç), ancak sistemdeki her nesneye erişmek için. Yetenekler tipik olarak, programın yetenek içeriğini doğrudan değiştirmesini önlemek için bazı mekanizmalarla (erişim haklarını taklit etmek veya işaret ettiği nesneyi değiştirmek için) işletim sistemi tarafından bir listede saklanır. Bazı sistemler de temel alınmıştır kabiliyet tabanlı adresleme (yetenekler için donanım desteği), örneğin Plessey Sistemi 250.

Yeteneklere sahip programlar, üzerlerinde onları başka programlara geçirmek, daha az ayrıcalıklı bir sürüme dönüştürmek veya silmek gibi işlevleri gerçekleştirebilir. İşletim sistemi, güvenlik politikasının bütünlüğünü korumak için, sistemdeki yeteneklerde yalnızca belirli işlemlerin gerçekleştirilebilmesini sağlamalıdır.

Örnekler

Bir yetenek, korumalı olarak tanımlanır nesne Bir kullanıcı sürecine sahip olması nedeniyle, işleme yeteneğini (dolayısıyla adı) bir nesneyle belirli şekillerde etkileşim kurma yeteneği veren referans. Bu yollar, bir nesneyle ilişkili verileri okumayı, nesneyi değiştirmeyi, nesnedeki verileri bir işlem olarak yürütmeyi ve diğer makul erişim haklarını içerebilir. Yetenek, mantıksal olarak, belirli bir nesneyi benzersiz şekilde tanımlayan bir referanstan ve bu haklardan bir veya daha fazlasından oluşur.

Bir kullanıcı işleminin bellek alanında aşağıdaki dizenin bulunduğunu varsayalım:

/ etc / passwd

Bu, sistemdeki benzersiz bir nesneyi tanımlasa da, erişim haklarını belirtmez ve dolayısıyla bir yetenek değildir. Bunun yerine aşağıdaki iki değerin olduğunu varsayalım:

/ etc / passwdO_RDWR

Bu, bir dizi erişim hakkı ile birlikte bir nesneyi tanımlar. Ancak yine de bir yetenek değildir çünkü kullanıcı süreci kontrol altına alma Bu değerlerin% 50'si, bu erişimin gerçekten meşru olup olmayacağı hakkında hiçbir şey söylemiyor.

Şimdi, kullanıcı programının aşağıdaki ifadeyi başarıyla yürüttüğünü varsayalım:

int fd = açık("/ etc / passwd", O_RDWR);

Değişken fd artık işlemin dosya tanımlayıcı tablosunda bir dosya tanımlayıcısının dizinini içeriyor. Bu dosya tanımlayıcı dır-dir bir yetenek. İşlemin dosya tanımlayıcı tablosundaki varlığı, sürecin gerçekten nesneye meşru erişime sahip olduğunu bilmek için yeterlidir. Bu düzenlemenin önemli bir özelliği, dosya tanımlayıcı tablosunun çekirdek belleği ve kullanıcı programı tarafından doğrudan değiştirilemez.

İşlemler arasında paylaşım

Geleneksel işletim sistemlerinde, programlar genellikle ilk iki örnektekine benzer referanslar kullanarak birbirleriyle ve depolama ile iletişim kurar. Yol adları genellikle komut satırı parametreleri olarak aktarılır, soketler aracılığıyla gönderilir ve diskte depolanır. Bu referanslar yetenekler değildir ve kullanılmadan önce doğrulanmaları gerekir. Bu sistemlerde, temel soru "kimin yetki Değerlendirilecek bir referans mı? "Bu, özellikle iki farklı otorite taşıyan varlık adına hareket etmesi gereken süreçler için kritik bir konu haline gelir. şaşkın milletvekili sorunu, sıklıkla bir güvenlik açığı.

Yetenek tabanlı bir sistemde, yetenekler, bu yeteneklerin bütünlüğünü korumak için işletim sistemi tarafından bilinen bir mekanizma kullanılarak işlemler ve depolama arasında aktarılır.

Bu sorunu çözmek için yeni bir yaklaşım, bir ortogonal olarak kalıcı işletim sistemi. Böyle bir sistemde, varlıkların atılmasına ve yeteneklerinin geçersiz kılınmasına gerek yoktur ve bu nedenle, bu yetenekleri daha sonra geri yüklemek için ACL benzeri bir mekanizma gerektirir. İşletim sistemi, her zaman hem geçici hem de kalıcı olmak üzere tüm depolamada yer alan özelliklerin bütünlüğünü ve güvenliğini korur; kısmen gerçekleştirerek serileştirme Çoğu işletim sisteminde olduğu gibi, kullanıcı programlarının bunu yapmasını gerektirmekten ziyade kendi başına görevler. Kullanıcı programları bu sorumluluktan kurtarıldığından, yalnızca yasal yetenekleri yeniden üretmeleri için bunlara güvenmeye veya erişim isteklerini doğrulamaya gerek yoktur. giriş kontrolu mekanizma. Örnek bir uygulama, Flex makinesi 1980'lerin başından itibaren.

POSIX yetenekleri

POSIX taslağı 1003.1e, "yetenekler" adı verilen bir izin kavramını belirtir. Ancak, POSIX yetenekleri bu makaledeki yeteneklerden farklılık gösterir — POSIX yeteneği herhangi bir nesneyle ilişkilendirilmez; CAP_NET_BIND_SERVICE yeteneğine sahip bir işlem 1024'ün altındaki herhangi bir TCP bağlantı noktasını dinleyebilir. Bu sistem Linux'ta bulunur.[1]

Tersine, kırmızıbiber Gerçek bir yetenek sistemi modelini UNIX tasarımı ve POSIX API ile melezleştirir. Capsicum yetenekleri, iyileştirilmiş bir dosya tanımlayıcı biçimidir, süreçler arasında devredilebilir bir hak ve süreçler gibi klasik POSIX dışındaki ek nesne türleri, yetenekler aracılığıyla başvurulabilir. Capsicum yetenek modunda, işlemler nesneleri aramak için genel ad alanlarını (dosya sistemi ad alanı gibi) kullanamazlar ve bunun yerine onları devralmalı veya devralmalıdır. Bu sistem yerel olarak FreeBSD'de bulunur, ancak yamalar diğer sistemler tarafından kullanılabilir.[2]

Uygulamalar

Yeteneğe dayalı güvenlik kullanan dikkate değer araştırma ve ticari sistemler aşağıdakileri içerir:

Referanslar

  1. ^ yetenekler (7) – Linux Programcı Manuel - Genel Bakış, Kurallar ve Çeşitli
  2. ^ kırmızı biber (4) – FreeBSD Çekirdek Arayüzleri Manuel
  3. ^ https://www.freebsd.org/cgi/man.cgi?capsicum(4)
  4. ^ https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf
  5. ^ "Genode OS: işletim sistemi ve yazılım güvenliğinde yeni bir soluk".
  6. ^ https://www.engadget.com/2016/08/13/google-fuchsia-operating-system/

daha fazla okuma

Linux'ta POSIX "yetenekleri":

Dış bağlantılar