Kısaca OpenBSD'nin taahhüdü nedir?


18

Birisi programcı olmayan bir kişi için lütfen tarif edebilir mi, ancak BT kişisi rehin nedir?

Örn .: bir program var, ör .: "xterm". Rehin nasıl daha güvenli hale getirebilir? Program kodunun içinde mi yoksa işletim sisteminin kendisinde mi?

Rehin nerede? Program kodunda mı; veya işletim sisteminin yalnızca xy sistem çağrılarını çağırabilecek ikili dosyaların bir listesi var mı?

Yanıtlar:


13

Rehin nedir?

pledge bir sistem çağrısıdır.

pledgeBir programı çağırmak , programın yalnızca belirli kaynakları kullanacağına dair söz vermektir.

Söylemenin başka bir yolu, bir programın çalışmasını kendi gereksinimlerine sınırlamaktır, örneğin

"Dışında başka herhangi bir bağlantı noktası kullanmamayı taahhüt ediyorum port 63"
" lseek()ve fork()"

Bir programı nasıl daha güvenli hale getirir?

Bir programın çalışmasını sınırlar. Misal:

  • xyzYalnızca readsistem çağrısına ihtiyaç duyan bir program yazdınız .
  • Sonra pledgesadece kullanmak için eklemek readama başka hiçbir şey.
  • Daha sonra kötü niyetli bir kullanıcı, programınızda bir rootkabuğun çağırabileceği bir güvenlik açığı olduğunu öğrendi .
  • Bir rootkabuk açmak için programınızı kullanmak , çekirdeğin işlemi SIGABRT(yakalanamayan / yoksayılamayan) ile öldürmesine ve (bulabileceğiniz) bir günlük oluşturmasına neden olur dmesg.

Bunun nedeni, programınızın diğer kodlarını çalıştırmadan önce, sistem çağrısı pledgedışında bir şey kullanmamasıdır read. Ancak açılış rootkabuğu yasaklanmış olan başka sistem çağrılarını çağıracaktır çünkü zaten başka birini kullanmayacağına söz vermişti read.

Rehin nerede?

Genellikle bir programda. Dan Kullanımı OpenBSD 6.5 kılavuz sayfasında :

#include <unistd.h>

int pledge(const char *promises, const char *execpromises);

Örnek Kod: cat.ccat komutunun örnek kodu

........
#include <unistd.h>
........
int ch;
if (pledge("stdio rpath", NULL) == -1)
    err(1, "pledge");

while ((ch = getopt(argc, argv, "benstuv")) != -1)
..........

5

Bir program normalde yalnızca belirli bir sistem veya kütüphane çağrısından yararlanır. İle pledge, izin verilen sistem çağrıları kümesini sadece bu kümeyle sınırlandırabilirsiniz. Örneğin, bir programın şifre veritabanını okuması gerekmiyorsa, getpwnam()işlev çağrılmasını engelleyebilirsiniz .

Bu nasıl faydalı? Güvenlik açıklarına karşı ekstra bir savunma hattıdır. Program bir hata içeriyorsa, birisi programın yürütme akışını değiştirmek veya işleme fazladan bir kod enjekte etmek için hatadan yararlanabilir. Hata, örneğin, saldırganın programın işleyebileceğinden daha fazla veri göndererek tetikleyebileceği, muhtemelen programın /etc/passwddosyanın içeriğini ağ.


4

Programınız yalnızca {A, B, C} işlevlerini kullanmaya "söz veriyor"

Bir bilgisayar korsanı rehin verilen işleminize kod ekleyebilir ve D işlevselliğini deneyebilirse, işletim sistemi programınızı kilitler

Örneğin, bir NTP sunucunuz olduğunu varsayalım. Yalnızca DNS ve CLOCK işlevlerini kullanma sözü verdi. Ancak uzaktan kod yürütülmesine izin veren bir kusuru vardır. Hacker DOSYAYI YAZIN. Ancak pledgebunu algılar ve programı kapatır ve hatayı günlüğe kaydeder

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.