על OpenBSD ו - Linux

מבחינתי קריאת קוד זה כמו לקרוא ספר. כל חלק בקוד המקור הוא פרק בספר, כשאתם עובדים לפי הטרמינולוגיה הזאת אתם משפרים את היכולת שלכם, לומדים טכניקות חדשות, ומעצבים את סגנון הכתיבה שלכם. לכל אחד יש סטייל שונה, צורה שבה הוא כותב קוד, מעיין טביעת אצבע.

לדוגמה:

int
main(void)
{


}

או:

int main(void) {

}

בשנים האחרונות אני קורא קוד כמה ספרים לפני שאני הולך לישון, ברכבת או סתם בתור למשרד הרישוי. אם אני מגלה משהו מעניין כמו חולשה בקוד, או קטע שאני לא מבין אני פשוט רושם הערה עם מספר השורה ומאוחר יותר אני מתעמק בזה יותר.

אחת מתופעות הלוואי של קריאת קוד של אחרים, היא להיות סימפטי כלפי מתכנתים מתחילים, ללמוד כל יום משהו חדש.

OpenBSD

openbsd

אחד “מהספרים” שאני קורא בשנים האחרונות היא מערכת ההפעלה OpenBSD, במערכות הפעלה מבוססות - BSD כל קוד המקור של המערכת נמצא במקום אחד: הקרנל, וה - userland tools. לעומת זאת במערכת הפעלה מבוססת לינוקס, הכל מפוזר, אתם צריכים למשוך את util-linux/coreutils ממקור אחד, את הקרנל ממקור שני ולהרכיב את הכול ביחד.

יש הרבה מאוד תכונות טובות ב - OpenBSD: כתיבת קוד בצורה נכונה, גישה בלתי מתפשרת, awesome man pages ותכונות אבטחה כמו: w^x, pledge, pf ועוד שעליהם נדבר בהמשך.

את הקרנל של - OpenBSD, מפתחת קבוצה מצומצמת של מפתחים, ולכן לא כל חומרה נתמכת ישר מהקופסה OpenBSD. התמיכה בחומרה משתפרת מיום ליום, אומנם בקצב איטי אחרי הכל זה לא לינוקס שלחברות גדולות יש אינטרס בפיתוח שלו (:

אבטחה ו - Crypto

אחד הדברים שאני מאוד אוהב ב - OpenBSD, היא התמיכה החזקה בקריפטוגרפיה ישר מהקופסה. מרכז הפיתוח של הפרויקט הוא מביתו של המייסד תאו דה ראדט בקנדה וזה מאוד חשוב כי בקנדה, לעומת ארצות הברית אין מגבלות קריטיות על יצוא קריפטוגרפיה (לפחות זה מה שהם אומרים) אני לא יודע מה המצב פה בישראל לגבי הנושא, אבל אני אשמח לדעת ולעדכן את הפוסט אם מישהו מהקוראים בקי בנושא

עדכון:

בישראל קיים החל מ-1974 "צו צופן" המחייב כל גורם המעוניין לעסוק בהצפנה בקבלת רישיון עיסוק בהצפנה ממנכ"ל משרד הביטחון.

מתוך Wikipedia

(תודה לנחום שהפנה אותי למאמר).

1. w^x

במערכת הפעלה מודרנית, יש הגנה לדפי זכרון: קריאה, כתיבה, והרצה. קוד בזכרון יכול לרוץ רק אם דף הזכרון סומן עם סיבית ההרצה (execute bit). לדוגמה החלק בזכרון שמכיל את קוד התוכנה, יסומן כניתן להרצה אבל לא לכתיבה. חלקים אחרים יהיו ניתנים לכתיבה אבל לא להרצה.

כאשר אתם מקצים זכרון עם malloc הזכרון שיקוצה יהיה ניתן לכתיבה וקריאה בלבד. כל זה מקשה מאוד על תוקף להריץ קוד זדוני, ומאלץ אותו להשתמש בטכניקות כמו ROP.

w^x הוא לא קונספט חדש (DEP on Windows) וכשמו כן הוא: דף הזכרון יכול להיות נתון לכתיבה או הרצה אבל לא שניהם ביחד מה שעוד יותר מקשה על ניצול קוד זדוני.

2. Pledge

היא קריאת מערכת שמגבילה תהליך מלגשת לקריאות מערכת אחרות ללא הרשאות.

רוב ה - userland ב - OpenBSD כבר מכיל את הקריאות המתאימות. הוא עובד בצורה כזאת, שכל תוכנה מקבלת בדיוק את ה - syscalls שהיא צריכה, אם היא תנסה לגשת לקריאת מערכת אחרת כמו: execve בלי הרשאות מתאימות, התוכנית תסתיים מיד עם SIGABRT.

כמו כן, לא ניתן לשנות את ה - flags שמעוברים ל - pledge בזמן ריצת התוכנית.

#include <stdio.h>
#include <unistd.h>

int main(void) {
    if (pledge("stdio") < 0)
        err(1, "pledge");

    char *x[] = { "/bin/ls", 0, 0, 0 };
    execve(x[0], &x[0], NULL);
    return 0;
}

3. Kernel re-linking

ב - OpenBSD בכל הפעלה מחדש של המערכת, הקרנל מקבל מרחב כתובת חדש.

4. PF

ל - OpenBSD יש Firewall בשם PF, עם תחביר מאוד חזק אני לא ארחיב עליו בפוסט הנוכחי כי אני רוצה לכתוב עליו מאמר נפרד, אם זה מעניין אותכם יש מדריך קצר פה.

אם אתם רוצים לקרוא עוד על תכונות האבטחה ב - OpenBSD תוכלו לקרוא בהרחבה כאן.

סיכום

הפוסט עשה לכם חשק לנסות את OpenBSD? הנה כמה דברים שכדאי שתקחו בחשבון אם אתם מהגרים מלינוקס:

1. Bash

מאז שאני זוכר את עצמי השתמשתי ב - Bash כ - Shell שלי, אבל אז גילית שהחבילה bash-completion שבורה על OpenBSD. אני יכול לחיות בלי השלמה אוטומטית אבל למה להתפשר? עברתי להשתמש ב - ZSH.

2. אחסון

OpenBSD תומכת רק ב - EXT2

3. SSD

OpenBSD (נכון לגרסא 6.3) לא תומכת ב - TRIM לינוקס תומכת ב: TRIM עוד מ - 2008!

4. ביצועים

אתם תרגישו את הבדלי הביצועים באופן משמעותי, אני ממליץ לכם להשתמש ב - SSD על כל מערכת שמריצה OpenBSD.

לסיום, OpenBSD היא מערכת טובה, אני בטוח שלחלק מהקוראים יש נסיון איתה. לפי דעתי אם אתם רוצים שרת עם ביצועים גבוהים תבחרו ב - Linux.

אם אתם צריכים ראוטר או שרת מייל עם אבטחה גבוהה תבחרו ב - OpenBSD.