אבטחת מידע

  • פותח הנושא arps
  • פורסם בתאריך

arps

New member
אבטחת מידע

הי חברים,

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


mysql> INSERT INTO users (username, password) VALUES ('Ariel', ENCODE('guessmypassword', 'mysecretkey123'));

הסיסמא כמובן תוצפן והדרך היחידה לפיענוח תהיה באמצעות המפתח שבמקרה הנל הוא "mysecretkey123".

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

איך אתם פותרים את הסכנה הזאת?
 

intval

New member
למקרה שמישהו מקבל גישה למסד ולא לקוד

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

bnayal

New member
מספק שכבת הגנה נוספת על המידע

 

arps

New member
ברור

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

arps

New member
כשאני אומר פתרונות אבטחה

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

intval

New member
אם קיבלו גישה מלאה לשרת שלך - אתה עבוד

כי לרשותו עומדים כל אותם כלים שעומדים לרשותך.
מה שאתה יכול לעשות - זה להעלות את "מחיר" השגת הגישה לשרת שלך.

כאשר להשיג גישה לשרת הרבה יותר קשה מאשר להשיג את קוד ה PHP
מה שאומר שאפשר להחביא את סיסמת ההצפנה ב dll/so חיצוני ולטעון עם הפונקציה dl

אבל אתה יכול בכיף לצאת מנקודת הנחה שאין לך דרך להצפין משהו ממי - שקיבל גישה לשרת. אפשר לנסות להחביא בכל מיני דרכים.
למשל לטעון את סיסמת ההצפנה מאיזשהו קובץ חיצוני מתיקיה אפלולית כלשהי איפשהו ואת קוד ה PHP עצמו להצפין עם zend/ioncube encoder

למרות שגם זה לא יעצור להרבה זמן אף אחד. זה רק יעלה את "מחיר" השגת הגישה. תמיד יהיה אפשר לראות את נתוני ה i/o או לשים סניפר שקורא את הנתונים ששולח PHP למסד.
 
לעשות HASH לסיסמה זה לא כדי להצפין

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

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

arps

New member
אכן

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

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

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

intval

New member
זה במקרה של סיסמה

אבל אם אתה שומר את האימייל של המשתמש
או את כרטיס האשראי / ת.ז. של קונה ?
 
למעלה