על OpenBSD ו - Linux

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

לדוגמא:

int
main(void)
{


}

או:

int main(void) {

}

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

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

OpenBSD

openbsd

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

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

את הקרנל של - OpenBSD, מפתחים קבוצה מצומצמת של מפתחים, ולכן לא כל חומרה נתמכת ישר מהקופסא, רוב המפתחים של OpenBSD משתמשים ב - ThinkPad ולכן התמיכה בו הכי טובה. לא אישית אין ThinkPad וכשהתקנתי לראשונה את המערכת, קבלתי Kernel Panic ב - Boot. בכדי להתגבר על זה הייתי צריך לכתוב פאטץ’ ל - ACPI, ולהחיל אותו על הקרנל כל שידרוג (משתמשי OpenBSD יבינו על מה אני מדבר (:). שלא תטעו, OpenBSD היא מערכת מעולה אבל מצריכה נסיון, לא הייתי ממליץ אותה לאנשים שעוברים מ - Windows למשל.

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

אבטחה ו - Crypto

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

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

עדכון:

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

מתוך Wikipedia

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

1. w XOR x

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

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

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

2. Pledge

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

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

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

#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 (קריאה בלבד) מה שאומר שאם יש לכם HD עם EXT2/EXT3 אתם תוכלו להשתמש בו אבל לא ב - EXT4.

3. SSD

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

4. ביצועים

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

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

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