מדריך האבטחה

מתוך הויקי של ג'נטו.

קפיצה אל: ניווט, חיפוש

מדריך זה הוא תרגום של מדריך האבטחה הרשמי של ג'נטו [1].

התרגום בוצע באישור הרשיון שבו פורסם המסמך המקורי, Creative Commons - Attribution / Share Alike.
על התרגום חלים אותם תנאי רשיון כמו למקור התוכן. המדריך תורגם על ידי oldie.

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

הגבלת משתמשים וקבוצות הרשאות קבצים PAM אבטחת הגרעין אבטחת שרותים

שינוי שורש (chroot) ושרתים וירטואליים - חומות אש מציאת חדירות שמירה על עדכניות

תוכן העניינים

[עריכה] אבטחה פיזית

לא משנה בכמה אמצעי אבטחה תשתמש, את כולם יכול לעקוף מי שיש לו גישה פיזית למחשב. למרות זאת, יש לפחות כמה אמצעים שיכולים לספק רמה מסויימת של אבטחה נגד תוקף עם גישה פיזית למחשב. נעילת החומרה בארון תמנע מהתוקף לנתק אותו ולקחת אותו איתו. לנעול את המארז זה גם רעיון טוב, ע"מ לוודא שתוקף לא יכול פשוט להסתלק עם הדיסק הקשיח שלך. כדי למנוע מתוקף לאתחל עם דיסק אחר, וכך לעקוף את כל ההרשאות והגבלות הכניסה, נסה לקבוע את הדיסק הקשיח כהתקן האתחול הראשון ב-BIOS, וקבע ססמת BIOS. חשוב גם לקבוע ססמה ל-lilo או grub ע"מ למנוע מתוקף לאתחל במצב משתמש יחיד ולקבל גישה מושלמת למערכת שלך. נושא זו מכוסה ביתר פרוט בפרק הידוק האבטחה.

הערת המתרגם: דוגמא טובה ורעה היא מעבדות המחשבים של הפקולטה להנדסה באונ' ת"א. המחשבים נעולים במעטפת מתכת, כך שאי אפשר לקחת אותם איתך. יש גם סיסמה על ה-BIOS. אבל ניתן להכניס דיסק Knoppix ולעבוד כמו בנאדם (וגם לחרב את כל המערכת אם אתה לא בנאדם נחמד כמוני).

[עריכה] תכנון שרותים

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

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

[עריכה] חלוקה למחיצות

כללי חלוקה:

  • כל עץ ספריות שמשתמש יוכל לכתוב אליו (למשל ‎/home, ‎/tmp) צריך להיות במחיצה נפרדת ולהשתמש בהקצאות דיסק (disk quota), ע"מ להפחית את הסיכון שמשתמש ימלא את כל מערכת הקבצים. פורטג' משתמשת ב-‎/var/tmp, כך שמחיצה זו צריכה להיות גדולה.
  • כל עץ ספריות שבו יותקנו תוכנות שלא שייכות להפצה צריך להיות במחיצה נפרדת. לפי "סטנדרט היררכיית הקבצים" הכונה היא ל-‎/usr/local או ‎/opt. אם אלו מחיצות נפרדות, הן לא יימחקו אם תצטרך להתקין מחדש את המערכת.
  • לאבטחה נוספת, מידע סטטי יכול להשמר במחיצה נפרדת שעגונה במצב קריאה בלבד. פרנואידים קשים יכולים לנסות מדיה לקריאה בלבד כמו CD-ROM.

[עריכה] מנהל המערכת

משתמש root (מנהל המערכת) הוא המשתמש החיוני ביותר במערכת ויש להמנע משימוש בו לכל פעולה מלבד פעולות שמחייבות זאת. אם תוקף מצליח לקבל גישת root, תוכל לבטוח באמת במערכת שלך רק אחרי התקנה מחדש.

כללי זהב בנוגע ל-root:

  • צור תמיד משתמש רגיל לשימוש יומיומי. אם משתמש צריך גישת root, הוסף אותו לקבוצת wheel כך שיוכל להשתמש בפקודה su כדי לקבל גישת root.
  • אל תפעיל את X או יישומים רגילים כ-root. יש להשתמש ב-root רק כשיש בכך צורך מוחלט; אם יש פרצה ביישום שמופעל כמשתמש רגיל, התוקף יקבל הרשאות מופחתות. אבל אם היישום מופעל כ-root, התוקף יקבל הרשאות מלאות.
  • השתמש תמיד בנתיבים מוחלטים כשאתה עובד כ-root (או השתמש תמיד ב-su שמחליף את משתני הסביבה של המשתמש באלו של root ומבטיח שהPATH של root מכיל רק ספריות מוגנות כמו ‎/bin ו-‎/sbin). ניתן לעבוד על root ולגרום לו להריץ ישום שונה מכוונת המפעיל, אך אם ב-PATH יש רק ספריות מוגנות או ע"י שימוש בנתיבים מוחלטים, אפשר להיות בטוחים שדבר זה לא יקרה.
  • אם משתמש צריך להפעיל רק פקודות מסויימות כ-root, שקלי להשתמש ב-sudo במקום. אך היזהרי שלא לתת גישה זו למי שישתמש בה לרעה!
  • אל תעזבי את המסוף כשאת פועלת כ-root.

לג'נטו יש הגנה מסויימת נגד הרצת su ע"י משתמשים רגילים: הגדרות ברירת המחדל של PAM דורשות שמשתמש יהיה חבר בקבוצת wheel ע"מ שיוכל להשתמש ב-su.

[עריכה] מדיניות אבטחה

ישנן כמה סיבות לנסח מדיניות אבטחה למערכת/מערכות ולרשת שלך.

  • מדיניות אבטחה מאפשרת לך להתייחס לאבטחה ב"מערכת" ולא כתערובת של תכונות שונות. לדוגמה, ללא מדיניות אבטחה עלול מנהל מערכת להחליט לכבות את telnet, כי שרות זה מעביר סיסמאות לא מוצפנות ברשת, אבל להשאיר את ftp, שחשוף לאותה חולשה בדיוק. מדיניות אבטחה טובה מאפשרת לך לזהות אילו אמצעי אבטחה שווים את המאמץ ואיזה לא.
  • על מנת לאבחן בעיות, לפקח ולמצוא פולשים, ייתכן צורך בפיקוח על תנועה ברשת, היסטורית הפקודות והכניסה למערכת של משתמשים ולהסתכל בספריות בית. אם אמצעים אלה לא כתובים במפורש ומובאים לידיעת המשתמשים, הם עלולים להיות בלתי-חוקיים ולהעמיד אותך במצב מסוכן.
  • חשבונות-משתמש "חטופים" מציבים את אחד הסיכונים השכיחים ביותר לאבטחת המערכת. בלי הסברה למשתמשים על חשיבות האבטחה ואיך לנהוג נכון בנושא אבטחה, נראה שאפסו סיכוייך לחשבונות משתמש בטוחים.
  • מבנה מערכת ורשת מתועדים היטב יסייעו לך, ולנציגי החוק במידת הצורך, באיתור חדירות וחולשות בדיעבד. הודעה המציגה את מדיניות הבטיחות בכניסה למערכת ומכריזה על הרשת שלך כרשת פרטית גם תעזור לך לתבוע מסיג-גבול במידת הצורך.

הצורך במדיניות אבטחה צריך להיות ברור יותר עכשיו.

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

שים לב: צור מסמכי מדיניות שיהיו קלים לקריאה, ודייק מאוד בכל נושא.

מדיניות אבטחה צריכה להכיל לפחות את הנושאים הבאים:

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

למשתמשים שונים ייתכן ויידרשו רמות שונות או סוגים שונים של גישה, והמדיניות שלך צריכה לשקף זאת.

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

תוכל למצוא דוגמאות ב[2]. אם יש לך רשת קטנה ונראה לך שהדוגמאות האלו מוגזמות, תוכל להסתכל ב-[3].

[עריכה] דגלי שימוש

הקובץ make.conf מכיל דגלי שימוש מוגדרים ע"י המשתמש, והקובץ ‎/etc/make.profile/make.defaults מכיל את ברירות המחדל לדגלי השימוש של ג'נטו לינוקס. למטרות מדריך זה, הדגלים החשובים הם pam (מערכת מודולרית לאימות), tcpd (מעטפת TCP) ו-ssl. כל אלה נמצאים בברירת המחדל.

[עריכה] הגנה בססמה על GRUB

GRUB מאפשרת שתי דרכים להוספת סיסמה למנהל האיתחול. הדרך הראשונה משתמשת בטקסט פשוט, והשניה בהצפנת md5+salt.

timeout 5
password changeme

שורות אלו בקובץ ‎/boot/grub/grub.conf יקבעו את הסיסמה ל-changeme. אם לא תוכנס ססמה בזמן ההפעלה, GRUB לא ייתן לשנות את ההגדרות שלו מהתפריט.


כדי להצפין עם md5 תצטרך להמיר את הססמה שלך לפורמט crypt, כמו הפורמט שמשמש את ‎/etc/shadow. למידע נוסף ראה man crypt. הססמה changeme, למשל, תוכל להראות כך: $1$T7/dgdIJ$dJM.n2wZ8RG.oEiIOwJUs.

תןכל להצפין את הססמה שלך ישירות ממעטפת grub:

‎#/sbin/grub

GRUB version 0.92 (640K lower / 3072K upper memory)

   [ Minimal BASH-like line editing is supported. For the first word, TAB lists
     possible command completions. Anywhere else TAB lists the possible
     completions of a device/filename. ]

grub> md5crypt

Password: ********
(Typed changeme at the prompt) 
Encrypted: $1$T7/dgdIJ$dJM.n2wZ8RG.oEiIOwJUs.

grub> quit

העתק והדבק את הססמה שהתקבלה לקובץ ההגדרות:

timeout 5
‎password --md5 $1$T7/dgdIJ$dJM.n2wZ8RG.oEiIOwJUs.

הגבלת הזמן של 5 שניות שימושית כאשר המערכת היא מרוחקת וצריכה לאפשר אתחול מחדש ללא התערבות. למידע נוסף על ססמאות ב-grub הקלד info grub.

[עריכה] הגנה בססמה על LILO

גם lilo מאפשרת שתי דרכים לטיפוול בסיסמאות: מקיפה ופרטית; שתיהן עם טקסט חשוף. הססמה הכללית נקבעת בראש קובץ ההגדרות ופועלת על כל הפריטים:

password=changeme 
restricted 
delay=3

הססמה הפרטית נקבעת כך:

image=/boot/bzImage 
      read-only 
      password=changeme 
      restricted

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

כדי לאחסן את ההגדרות החדשות, הרץ את ‎/sbin/lilo.

[עריכה] הגבלת שימוש במסוף

הקובץ ‎/etc/securetty מאפשר לך להגדיר את התקני ה-tty (מסוף) שמהם יכול root להתחבר. מומלץ שתהפוך להערות את כל השורות מלבד vc/1. שורה זו מגדירה ש-root יוכל להתחבר רק פעם אחת ורק מטרמינל אחד. משתמשים בקבוצה wheel עדיין יוכלו להשתמש ב-su על מסופים אחרים.

[עריכה] הקדמה

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

בג'נטו ניתן לבחור בין 3 תוכנות רישום.

[עריכה] רישום עם syslogd

syslogd היא תוכנת הרישום הנפוצה ביותר בלינוקס ובכלל ביוניקס. יש לה שרותי החלפת יומנים (log rotation), אבל שימוש ב-‎/usr/sbin/logrotate כמשימת cron יכול להוכיח את עצמו כבעל עוצמה רבה יותר, מאחר של-logrotate יש הרבה יכולות. תדירות החלפת היומנים צריכה להקבע לפי העומס על המערכת.

למטה נמצא קובץ syslog.conf הסטנדרטי עם כמה תוספות. ביטלנו את הסימון כהערה לשורות של cron ושל tty, והוספנו שרת רישום מרוחק. לשיפור נוסף של האבטחה, תוכל להוסיף רישום לשני מקומות.

‎#  /etc/syslog.conf      Configuration file for syslogd.
#
#                       For more information see syslog.conf(5)
#                       manpage.
#                       This is from Debian, we are using it for now
#                       Daniel Robbins, 5/15/99

#
# First some standard logfiles.  Log by facility.
#

auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
cron.*                         /var/log/cron.log
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          /var/log/mail.log
user.*                          -/var/log/user.log
uucp.*                          -/var/log/uucp.log
local6.debug                    /var/log/imapd.log

#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

# Logging for INN news system
#
news.crit                       /var/log/news/news.crit
news.err                        /var/log/news/news.err
news.notice                     -/var/log/news/news.notice

#
# Some `catch-all' logfiles.
#
*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

#
# Emergencies and alerts are sent to everybody logged in.
#
*.emerg                         *
*.=alert                        *

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
daemon,mail.*;\
       news.=crit;news.=err;news.=notice;\
       *.=debug;*.=info;\
       *.=notice;*.=warn       /dev/tty8

#Setup a remote logging server
*.*                        @logserver

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
# 
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
#daemon.*,mail.*;\
#       news.crit;news.err;news.notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       |/dev/xconsole

local2.*                --/var/log/ppp.log

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

[עריכה] Metalog

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

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

לפוסטפיקס:

‎#! /bin/sh
echo "$3" | mail -s "Warning (program : $2)" root

ל-qmail:

‎#!/bin/sh
echo "To: root
Subject:Failure (Warning: $2) 
$3
" | /var/qmail/bin/qmail-inject -f root

זכור לשנות את התסריט למצב בר הרצה (chmod +x). אז בטל את סימון ההערה לשורה הבאה מהקובץ ‎/etc/metalog/mtalog.conf:

‎command  = "/usr/local/sbin/mail_pwd_failures.sh"

[עריכה] syslog-ng

Syslog-ng מספקת חלק מהתכונות של syslogd ו-Metalog בהבדל קטן. היא יכולה לסנן הודעות לפי רמה ותוכן (כמו Metalog), לספק רישום מרוחק (כמו syslog) לטפל ביומנים של syslogd (ואפילו זרמי מידע מסולאריס), לכתוב למסוף, להפעיל תוכניות ולפעול כשרת רישום. בעיקרון היא שילוב של הטוב מבין שתי תוכנות הרישום האחרות עם יכולת הגדרה משוכללת.

זהו קובץ הגדרות קלאסי עם שינוים קטנים:

‎options { long_hostnames(off); sync(0); };

#source where to read log
source src { unix-stream("/dev/log"); internal(); };
source kernsrc { file("/proc/kmsg"); };

#define destinations
destination authlog { file("/var/log/auth.log"); };
destination syslog { file("/var/log/syslog"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination mail { file("/var/log/mail.log"); };

destination mailinfo { file("/var/log/mail.info"); };
destination mailwarn { file("/var/log/mail.warn"); };
destination mailerr { file("/var/log/mail.err"); };

destination newscrit { file("/var/log/news/news.crit"); };
destination newserr { file("/var/log/news/news.err"); };
destination newsnotice { file("/var/log/news/news.notice"); };

destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };
destination console { usertty("root"); };
destination console_all { file("/dev/tty12"); };
destination xconsole { pipe("/dev/xconsole"); };

#create filters
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(authpriv, mail); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info..warn) 
        and not facility(auth, authpriv, mail, news); };
filter f_emergency { level(emerg); };

filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_failed { match("failed"); };
filter f_denied { match("denied"); };

#connect filter and destination
log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_syslog); destination(syslog); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_daemon); destination(daemon); };
log { source(kernsrc); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };

log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); filter(f_emergency); destination(console); };

#default log
log { source(src); destination(console_all); };

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

עוד יתרון ל-syslog-ng: היא לא צריכה לרוץ כ-root!

[עריכה] ניתוח יומנים עם logcheck

כמובן, רישום יומן ותו-לא הוא רק מחצית הקרב. יישום כמו logcheck יהפוך את הניתוח הסדיר של היומן לקל יותר. logtail הוא תסריט מלווה בתוכנית בשם logtail, שמורצת על ידי cron ובודקת את היומנים שלך מול ערכת כללים לגילוי פעילות חשודה. לאחר מכן היא שולחת את הפלט לתיבת הדואר של root.

logcheck ו-logtail הן חלק מחבילת app-admin/logsentry.

Logcheck משתמשת בארבעה קבצים כדי להפריד הודעות יומן חשובות מלא חשובות. קבצים אלו הם logcheck.hacking שמכיל הודעות ידועות הקשורות לנסיונות פריצה, logcheck.violations המכיל תבניות המעידות על הפרות של כללי האבטחה, logcheck.violations.ignore המכיל מילות מפתח שיש סיכוי רב שיותאמו ע"י קובץ ההפרות, כך שיהיה אפשר להתעלם מהודעות רגילות, ו-logcheck.ignore המכיל את ההודעות שיש להתעלם מהן.

אזהרה: אל תשאיר את הקובץ logcheck.violations.ignore ריק. Logcheck משתמשת ב-grep לפיענוח היומנים; כמה מהגרסאות של grep יתייחסו לקובץ ריק כתופס-הכל, ואז logcheck תתעלם מכל ההפרות.

כשטוענים מחיצות מסוג ext2, ext3 או reiserfs, יש כמה אופציות שניתן להפעיל בקובץ &ltm;/etc/fstab. האופציות הן:

  • nosuid - כדי להתעלם מביט suid ולהתייחס לקבצים עם מצב זה כקבצים רגילים (כלומר הרצת קובץ כזה תעשה רק בשם המשתמש שהריץ אותו ולא בשם המשתמש שהקובץ שייך לו).
  • noexec ימנע הרצת תוכניות מהמחיצה.
  • nodev יתעלם מקבצי התקנים.

לצערנו, את ההגדרות האלה ניתן לעקוף על ידי הרצה של נתיב עקיף (symlink למשל); למרות זאת, קביעת ‎/tmp כ-noexec תמנע הרבה מההתקפות שתוכננו כך שיפעלו ישר מ-‎/tmp.

דוגמא לקובץ fstab:

‎/dev/sda1 /boot ext2 noauto,noatime 1 1
/dev/sda2 none swap sw 0 0
/dev/sda3 / reiserfs notail,noatime 0 0
/dev/sda4 /tmp reiserfs notail,noatime,nodev,nosuid,noexec 0 0
/dev/sda5 /var reiserfs notail,noatime,nodev 0 0
/dev/sda6 /home reiserfs notail,noatime,nodev,nosuid 0 0
/dev/sda7 /usr reiserfs notail,noatime,nodev,ro 0 0
/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0
proc /proc proc defaults 0 0

אזהרה: קביעת מצב noexec למחיצת ‎/tmp עלולה לפגוע בפעולה התקינה של תסריטים מסויימים.

טיפים:

  • מחיצת /var לפעמים צריכה יכולות הרצה. למשל, ‎/var/qmail היא הסיפריה בה מותקן qmail ויש לאפשר הרצה משם. עוד מחיצה כזו היא ‎/var/tmp שבה פורטג' בונה חבילות.
  • את מחיצת ‎/usr ניתן לחבר ב-noexec אבל אז יש לחבר אותה מחדש ללא אופציה זו כשרוצים לעדכן את המערכת.

[עריכה] ‎/etc/security/limits.conf

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

‎*    soft core 0
*    hard core 0
*    hard nproc 15
*    hard rss 10000
*    -    maxlogins 2
@dev hard core 100000
@dev soft nproc 20
@dev hard nproc 35
@dev -    maxlogins 10

אם אתה מוצא את עצמך מנסה לקבוע את nproc או maxlogin לאפס, אולי כדאי שתמחק את המשתמש. הדוגמה למעלה קובעת את ההגדרות של הקבוצה dev לתהליכים, קבצי תמונת זיכרון (core) ו-maxlogins. השאר מקבל ערך ברירת מחדל.

שים לב: הקובץ הזה הוא חלק מחבילת PAM וישפיע רק על חבילות שמשתמשות ב-PAM.

[עריכה] ‎/etc/limits

קובץ זה דומה מאד לקובץ ‎/etc/security/limits.conf/. ההבדלים היחידים הם בתסדיר ובכך שהקובץ עובד רק על משתמשים ועל תווי התאמה כללית (wildcards). הנה קובץ הגדרות לדוגמא:

‎*   L2 C0 U15 R10000
kn L10 C100000 U35

בדוגמא זו אנו משנים את ברירות המחדל והגדרות ספציפיות למשתמש kn.

קובץ זה הוא חלק מהחבילה sys-apps/shadow. אין צורך לקבוע הגבלות כלשהן בקובץ זה אם ביטלת את pam בקובץ make.conf או ש-PAM לא מוגדרת כהלכה.

[עריכה] מכסות

אזהרה: שימי לב שמערכות הקבצים שאת עובדת איתן תומכות במכסות. כדי להשתמש במכסות על ReiserFS, עליך להטליא את הגרעין עם טלאים שזמינים מ-[Namesys]. כלי ניהול זמינים מ[פרוייקט המכסות ללינוקס]. אף כי מכסות עובדות ב-ReiserFS, את עלולה להתקל בבעיות - ראי הוזהרת!

קביעת מכסות על מערכת קבצים מגבילה את השימוש בדיסק על בסיס משתמש או קבוצה. מכסות מופעלות ע"י הגרעין ומוספות לנקודת עיגון ע"י ‎/etc/fstab. האפשרות המתאימה בגרעין מופעלת ע"י File systems->Quota support. קבע את ההגדרות הבאות, בנה את הגרעין ואתחל מחדש את המחשב עם הגרעין החדש.

ראשית יש להתקין את כלי המכסות ע"י emerge quota. אז יש לשנות את ‎/etc/fstab ולהוסיף את האפשרויות usrquota ו-grpquota למחיצות שבהן נרצה להגביל את השימוש בדיסק.

[עריכה] ‎/etc/login.defs

[עריכה] ‎/etc/login.access

תבנית:מדריך האבטחה - הרשאות קבצים

תבנית:מדריך האבטחה - PAM

[עריכה] הפחתת תפקודים

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

כמו כן, שקול לכבות את האפשרות לטעינת מודולים (Loadable Kernel Modules בתפריט הגדרת הגרעין). אם כי ניתן להוסיף פרצות root גם ללא אפשרות זו, הסרתה תקשה על עבודת הפורץ.

[עריכה] מערכת הקבצים proc

פרמטרים רבים של הגרעין ניתנים לכוונון דרך מערכת הקבצים /proc או ע"י sysctl.

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

‎# /bin/echo "0" > /proc/sys/net/ipv4/ip_forward

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

 ‎# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

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

‎# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


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

‎# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

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

‎# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

‎# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects

חוסם מנות ICMP redirect. מנות אלו עלולות לשמש לשינוי טבלת הניתוב שלך לצרכים מרושעים.

‎# /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

הפעל הגנה נגד מנות המכילות הודעות שגיאה מזוייפות

‎# for i in /proc/sys/net/ipv4/conf/*; do
       /bin/echo "1" > $i/rp_filter
 done

מפעיל סינון נתיב הפוך: תכונה זו עוזרת להבטיח שמנות משתמשות בכתובות מקור נכונות, ע"י השוואת מנשק הרשת דרכו נכנסה המנה למנשק הרשת דרכו היתה צריכה להכנס לפי טבלת הניתוב. כך נמנעת התחזות כתובות IP. יש להפעיל תכונה זו לכל net/ipv4/conf/* כדי שהסינון יהיה פעיל במלואו.

אזהרה: הפעלת תכונה זו יכולה להיות בעייתית אם אתה משתמש בניתוב אסימטרי (מנות יוצאות ממנשק שונה מזה שדרכו נכנסו) או אם למחשב שלך מספר כתובות ip המוקצות למנשקי רשת שונים.

‎# /bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

רושם מנות מזוייפות, מנותבות-מקור ומוכוונות מחדש.

כל ההגדרות האלו יחזרו למצבן המקורי כאשר המחשב יופעל מחדש. אני מציע להוסיף אותן לקובץ ‎/etc/sysctl.conf שנקרא אוטומטית ע"י ‎/etc/init.d/bootmisc

התחביר של ‎/etc/sysctl.conf הוא די פשוט: הורד את ‎/proc/sys/ מהנתיבים שהוזכרו קודם, והחלף / ב- . (נקודה). לדוגמא:

‎# /bin/echo "0" > /proc/sys/net/ipv4/ip_forward

הופך ל-

‎net.ipv4.ip_forward = 0

[עריכה] Grsecurity

הטלאי מ-Grsecurity נמצא בחבילת hardened-sources. סקירה מקיפה שלו נמצאת באתר הפרוייקט ג'נטו מוקשח.

תבנית:מדריך האבטחה - אבטחת שרותים

תבנית:מדריך האבטחה - שינוי שורש (chroot) ושרתים וירטואליים

תבנית:מדריך האבטחה - חומות אש

תבנית:מדריך האבטחה - מציאת חדירות

תבנית:מדריך האבטחה - שמירה על עדכניות

כלים אישיים