คำสัญญาของ OpenBSD ในระยะสั้นคืออะไร?


18

ใครสามารถช่วยอธิบายสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ แต่บุคคล IT คำมั่นสัญญาคืออะไร

เช่นมีโปรแกรมเช่น: "xterm" การจำนำจะทำให้ปลอดภัยมากขึ้นได้อย่างไร มันจำนำภายในรหัสโปรแกรมหรือภายนอกในระบบปฏิบัติการของตัวเอง?

การจำนำอยู่ที่ไหน มันอยู่ในรหัสโปรแกรม หรือ OS มีรายการไบนารีที่สามารถเรียก xy syscalls ได้เท่านั้น

คำตอบ:


13

จำนำคืออะไร

pledge เป็นการเรียกระบบ

การโทรpledgeในโปรแกรมคือสัญญาว่าโปรแกรมจะใช้ทรัพยากรบางอย่างเท่านั้น

อีกวิธีในการพูดคือ จำกัด การทำงานของโปรแกรมให้ตรงกับความต้องการเช่น

"ฉันสัญญาว่าจะไม่ใช้พอร์ตอื่นยกเว้นport 63"
"ฉันสัญญาว่าจะไม่ใช้ระบบอื่นยกเว้นlseek()และfork()"

มันทำให้โปรแกรมมีความปลอดภัยมากขึ้นได้อย่างไร?

มัน จำกัด การทำงานของโปรแกรม ตัวอย่าง:

  • คุณเขียนโปรแกรมชื่อxyzที่ต้องการเพียงการreadเรียกระบบ
  • จากนั้นคุณเพิ่มpledgeเพื่อใช้เท่านั้นreadแต่ไม่มีอะไรอื่น
  • จากนั้นผู้ใช้ที่เป็นอันตรายพบว่าในโปรแกรมของคุณมีช่องโหว่ที่สามารถเรียกrootเชลล์ได้
  • การใช้ประโยชน์จากโปรแกรมของคุณเพื่อเปิดrootเชลล์จะส่งผลให้เคอร์เนลจะฆ่ากระบวนการด้วยSIGABRT(ซึ่งไม่สามารถจับ / เพิกเฉยได้) และสร้างบันทึก (ซึ่งคุณสามารถหาได้dmesg)

มันเกิดขึ้นเพราะก่อนที่จะรันโค้ดอื่น ๆ ของโปรแกรมของคุณมันจะpledgeไม่ใช้สิ่งอื่นใดนอกจากการreadเรียกของระบบ แต่เปิดrootเปลือกจะเรียกหลายระบบสายอื่น ๆ ที่เป็นสิ่งต้องห้ามเพราะสัญญาอยู่แล้วที่จะไม่ใช้อื่น ๆ readแต่

จำนำอยู่ที่ไหน

มันมักจะอยู่ในโปรแกรม การใช้งานจากOpenBSD 6.5 man page :

#include <unistd.h>

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

รหัสตัวอย่าง: รหัสตัวอย่างของcatคำสั่งจากcat.c

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

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

5

โดยปกติโปรแกรมจะใช้การเรียกระบบหรือไลบรารีที่แน่นอนเท่านั้น ด้วยpledgeคุณสามารถ จำกัด ชุดการเรียกใช้ระบบที่อนุญาตเฉพาะชุดนี้ ตัวอย่างเช่นหากโปรแกรมไม่จำเป็นต้องอ่านฐานข้อมูลรหัสผ่านคุณสามารถห้ามการเรียกใช้getpwnam()ฟังก์ชัน

สิ่งนี้มีประโยชน์อย่างไร? มันเป็นแนวป้องกันพิเศษสำหรับช่องโหว่ หากโปรแกรมมีข้อบกพร่องบางคนอาจสามารถใช้ประโยชน์จากข้อผิดพลาดเพื่อเปลี่ยนลำดับการดำเนินการของโปรแกรมหรือฉีดรหัสพิเศษบางอย่างลงในกระบวนการ ยกตัวอย่างเช่นข้อผิดพลาดอาจเกิดข้อผิดพลาดบัฟเฟอร์ล้นในเครือข่ายหันภูตซึ่งผู้โจมตีสามารถเรียกโดยการส่งข้อมูลมากกว่าที่โปรแกรมสามารถจัดการอาจจัดให้โปรแกรมอ่านและส่งเนื้อหาของ/etc/passwdไฟล์ไปที่ เครือข่าย


4

โปรแกรม "คำมั่นสัญญา" ของคุณที่จะใช้ฟังก์ชั่นเท่านั้น {A, B, C}

หากแฮ็กเกอร์สามารถฉีดรหัสเข้าสู่กระบวนการที่คุณให้ไว้และลองใช้ฟังก์ชันการทำงาน D ระบบปฏิบัติการจึงขัดข้องโปรแกรม

ตัวอย่างเช่นสมมติว่าคุณมีเซิร์ฟเวอร์ NTP มันให้คำมั่นว่าจะใช้ฟังก์ชั่น DNS และ CLOCK เท่านั้น แต่มันมีข้อบกพร่องที่อนุญาตให้เรียกใช้โค้ดจากระยะไกล Hacker ขอให้เขียนไฟล์ แต่pledgeจะตรวจจับสิ่งนี้และปิดโปรแกรมและบันทึกข้อผิดพลาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.