MySQL היא אחת ממערכות ניהול מסדי הנתונים היחסיות הפופולריות ביותר המהווה קופה עבור תוקפים המנסים להתגנב אל מסדי הנתונים. שרת מסד נתונים MySQL שהותקן לאחרונה יכול להיות בעל נקודות תורפה ופרצות רבות. מכיוון שאבטחת מידע היא בעלת חשיבות רבה, חובה להבין כל היבט של אבטחת MySQL.
מאמר זה מתמקד בביקורת ובאבטחה של מסד הנתונים MySQL שלך ומספק תשעה טיפים להקשיח את האבטחה שלו.
1. הימנע ממענקי פריבילגיה מיותרים
MySQL מאפשר מספר הצהרות הרשאות שכאשר הן מוקצות ללא צורך למשתמש מוחלש עלולות להוביל לקריאה/כתיבה של קבצים ולערעור הרשאות משתמש אחרות. כמה מהצהרות ההרשאות העלולות להיות מסוכנות ביותר הן FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN וכן הלאה. אתה יכול לקרוא עוד על אלה מהתיעוד הרשמי של MySQL. לפיכך, אל תקצה הרשאות משתמש-על כמו FILE, GRANT, SUPER ו-PROCESS לחשבונות שאינם ניהוליים. אתה יכול לבטל את ההרשאות הגלובליות המיותרות האלה, ברמת מסד הנתונים וברמת הטבלה באופן הבא:
REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #הרשאות גלובליות
REVOKE CREATE, שחרר על database_name.* FROM 'user_name'@'host_name'; #הרשאות מסד נתונים
בטל הוספה, עדכון, מחק ב-database_name.table_name מ-'user_name'@'host_name'; #הרשאות שולחן
הרשאות שטיפה;
2. הגבל כניסות מרחוק
גישה מרחוק מקלה על עבודתם של מנהלי מסד נתונים, אך היא מסכנת את השרת לפגיעויות וניצול פוטנציאליים. אתה יכול להשבית גישה מרחוק עבור כל סוגי חשבונות המשתמש MySQl על ידי הוספת משתנה דילוג ברשת לקובץ התצורה הראשי והפעלה מחדש של השירות.
[mysqld]
דילוג על רשתות
הפעלה מחדש של שירות sudo mysql
באופן דומה, עליך להשבית את הגישה לחשבון השורש, אם לא הכל כדי להגביל כניסות מרחוק לחשבון השורש. אמצעי זהירות זה מונע דחיפה של חשבון השורש של MySQL.
mysql> מחק מ-mysql.user כאשר user='root' והמארח אינם ב-('localhost', '127.0.0.1', '::1'); mysql> הרשאות שטיפה;
3. השבת פונקציות (load_file, outfile, dumpfile)
אמצעי זהירות נוסף לאבטחת MySQL מפני הזרקת קבצים מקומית הוא השבתת פונקציות הנגישות רק באמצעות הרשאת FILE grant. ה-FILE הוא אפשרות המאפשרת למשתמשים בעלי הרשאות נמוכות עם אפשרויות פקודה גלובליות לקרוא או לכתוב קבצים בשרת.
- load_file
הפונקציה load_file טוענת את תוכן הקובץ מהשרת כמחרוזת. לדוגמה, הפקודה הבאה תטען את כל התוכן מה- /etc/passwd קובץ באופן הבא:
בחר load_file('/etc/passwd')
- outfile
באופן דומה, הפונקציה Outfil כותבת תוכן לקבצי השרת המקומי. תוקפים יכולים להשתמש בפונקציה זו כדי לכתוב מטען לקובץ בשרת, באופן הבא:
בחר 'הזרקת SQL מקומית של קבצים' לתוך קובץ outfile '/tmp/file.txt';
cat /tmp/file.txt
תְפוּקָה:
הזרקת SQL מקומית לקובץ
- dumpfile
פונקציה זו משתמשת בגורם הבחירה כדי לכתוב לקובץ מבלי להחזיר פלט למסך.
cat /tmp/file.txt
בחר 'שלום עולם!' לתוך ה-dumpfile '/tmp/world';
תְפוּקָה:
השאילתה בסדר, שורה אחת מושפעת (0.001 שניות)
אתה יכול להשבית פונקציות אלה על ידי ביטול הרשאת FILE באופן הבא:
בטל FILE ב-*.* מ-'user_name'@'localhost';
קָשׁוּר: מדריך למתחילים ל- Metasploit בקאלי לינוקס (עם דוגמאות מעשיות)
4. השבת את יציאת ברירת המחדל
אנו יודעים ששירותי MySQL פועלים על יציאה 3306, ותוקפים סורקים את היציאות כדי לבדוק שירותים הפועלים ברשת. כדי להוסיף אבטחה על ידי ערפול ולשנות את יציאת ברירת המחדל של MySQL על ידי עריכת משתנה מערכת היציאה בקובץ התצורה הראשי שלו, תצטרך להזין את הפרטים הבאים:
vim /etc/mysql/my.cnf
port=XXXX
הפעלה מחדש של שירות sudo mysql
5. הימנע מתווים כלליים בשמות החשבונות
שמות חשבונות ב-MySQL מורכבים משני חלקים שהם משתמש ושם מארח "user_name"@"host_name". זה מאפשר למנהל המערכת ליצור חשבונות עבור המשתמשים עם אותו שם שמתחברים ממארחים שונים. עם זאת, החלק המארח של שם חשבון מתיר מוסכמות של תווים כלליים שיכולים להוות נקודת גישה למסד הנתונים מכל מקום.
השימוש האופציונלי בשם המארח או כתובת ה-IP שווה ערך ל-'user_name'@'%' כאשר % תואם את דפוס MySQL התואם פעולת LIKE, ו-% פירושו כל שם מארח. בינתיים, גישה מה-'192.168.132.%' פירושה כל ניסיון מרשת Class C. חוץ מזה, כל אחד יכול לגשת למסד הנתונים על ידי שם החלק המארח בשם '192.18.132.mysql.com'.
כדי להימנע מניסיונות כאלה, MySQL מאפשר להגדיר מסיכת רשת עם ערך המארח לזיהוי סיביות הרשת של כתובת IP:
client-ip_add & netmask = host_name
התחביר ליצירת שם מארח הוא host_ip/netmask:
CREATE USER 'jhon'@'192.168.132.0/255.255.255.0';
ערך המארח לעיל מאפשר למשתמש ג'ון לגשת למסד הנתונים מכל IP בטווח של 192.168.132.0-192.168.132.255. באופן דומה, ערכי המארח של 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 יאפשרו מארחים מרשתות Class A ו-B. בעוד ש-192.168.132.5 יאפשר גישה רק מה-IP הספציפי.
6. השבת גישה מפורשת
שם המשתמש ב-MySQL הוא או שם שאיתו מסדי הנתונים מקבלים חיבורים נכנסים או שם משתמש ריק "@"host_name" שיוצר משתמש אנונימי. עם זאת, נוכחות של משתמש אנונימי יכולה למנף תוקפים לגשת לשרת מסד הנתונים. חוץ מזה, גרסאות MySQL לפני MySQL 5.7 יוצרות קבוצה אנונימית של משתמשים, והתקנה לאחר שדרוג הגרסה עדיין מוסיפה משתמשים אלו.
בחר משתמש, מארח, סיסמה מ-mysql.user שבו משתמש כמו '';
אתה יכול לשים לב שעמודות המשתמש והסיסמה ריקות, והגישה מוגבלת ל-localhost. עם זאת, אינך רוצה שמישהו ייגש למסד הנתונים. השתמש בפקודה הבאה כדי למחוק משתמשים אנונימיים:
שחרר את המשתמש " "@"localhost"
הרשאות שטיפה;
7. הגדר חשבון שאינו שורש כבעלים או כקבוצה
הגדרת חשבון משתמש שאינו שורש אינו קשור למשתמש השורש של MySQL. התקנת MySQL במערכות Linux/Unix מחבילות tar ו-tar.gz מאפשרת לשרת לפעול על ידי כל משתמש מוחלש. זהו חסרון אבטחה מכיוון שכל משתמש עם אפשרות הענקת FILE יכול לערוך או ליצור קבצים בשרת. עם זאת, הוא מחזיר שגיאה כאשר משתמש מנסה לגשת אליו ללא -משתמש=שורש שְׁגִיאָה.
אתה יכול להימנע מכך על ידי תרגול כלל האצבע של גישה לשרת מסד הנתונים כמשתמש לינוקס נפרד. כדי להפעיל את mysqld כמשתמש לינוקס רגיל, עצור את השרת ושנה הרשאות קריאה/כתיבה של שרת MySQl ל-mysql, באופן הבא:
chown -R mysql /path/to/mysql/datadir
פתח את קובץ התצורה הראשי של MySQL, הוסף משתמש MySQL חדש, והפעל מחדש את השירות כדי למנוע גישה בלתי נדרשת לשרת:
vim /etc/mysql/my.cnf
user=mysql
הפעלה מחדש של שירות sudo mysql
8. הגדר סיסמה עבור חשבון שורש
התקנת MySQL באמצעות מעטפת אינטראקטיבית בהפצות לינוקס מבוססות דביאן יוצרת את חשבון המשתמש השורש ומבקשת ממך להגדיר סיסמה. עם זאת, זה לא קורה בהתקנת מעטפת לא אינטראקטיבית ובהפצות מבוססות Red-Hat. כפי שצוין לעיל, משתמש שאינו שורש של מחשב לינוקס יכול לגשת לחשבון משתמש mysql root באמצעות ה- -משתמש=שורש אוֹפְּצִיָה. אתה יכול להימנע מכך על ידי הגדרת הסיסמה באופן הבא:
סיסמת sudo mysqladmin
vim /etc/mysql/my.cnf
סיסמה=
הפעלה מחדש של שירות sudo mysql
9. ודא הצפנת נתונים במעבר ובמנוחה
ברירת המחדל של התקשורת הלא מוצפנת בין הלקוח לשרת מהווה סיכון של יירוט נתונים על ידי כל אדם באמצע. באופן דומה, נתוני משתמש לא מוצפנים במסד הנתונים מסכנים את סודיות המשתמש ושלמותו. MySQL תומך בהצפנת נתונים בין הלקוח לשרת באמצעות פרוטוקול TLS/SSL, בעוד שתקשורת לא מוצפנת מקובלת רק כאשר שני הצדדים המתקשרים נמצאים באותה רשת.
MySQL תומך כעת בהצפנה במנוחה כדי להגן על נתונים המאוחסנים בשרת גם כאשר המערכת נפרצה.
MySQL אבטחה מתקדמת: הגן על עצמך
חשוב לוודא שיש לך את הרמות הגבוהות ביותר של אבטחה מקוונת, והמאמר הזה ייתן לך כמה עצות שימושיות בכיוון הנכון. השלבים שלעיל שימושיים לאבטחת שרת מסד הנתונים שלך, אבל גם ללמוד כיצד להקצות הרשאות מינימום למשתמשים שאינם מנהלי מערכת חיוני.
צור מסד נתונים MySQL משלך עם עורך טקסט בלבד ומתאר המבנה הבסיסי הזה, או "סכימה".
קרא הבא
- תִכנוּת
- בִּטָחוֹן
- תִכנוּת
- עצות אבטחה
- בִּטָחוֹן
Rumaisa היא סופרת עצמאית ב-MUO. היא חבשה כובעים רבים, ממתמטיקאית ועד חובבת אבטחת מידע, וכעת היא עובדת כאנליסטית SOC. תחומי העניין שלה כוללים קריאה וכתיבה על טכנולוגיות חדשות, הפצות לינוקס וכל דבר סביב אבטחת מידע.
הירשם לניוזלטר שלנו
הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!
לחץ כאן כדי להירשם