-
בניתי תוכנה בc# winform ובסיס הנתונים בSQL
התוכנה מתוקנת על מספר מחשבים, ומסד הנתונים יושב על שרת מקומי באותה רשת מחשבים פנימית,
אני מעוניין לאפשר את השימוש בתוכנה למחשבים שנמצאים במשרד שנמצא בעיר אחרת
וחושש מבחינת אבטחת מידע
כי התוכנה בשביל להתחבר ל SQL שולחת כמובן את כתובת השרת + שם משתמש + סיסמא
דוגמא: (SqlConnection con = new SqlConnection(@"Data Source=185.2.2.25\dbt;Initial Catalog=dbn;User ID=dbus;Password=pass"))
כעת שזה ברשת הפנימית, שגם מאובטחת בפני עצמה + הכתובת החיצונית לא מופיעה במחרוזת , אני די רגוע
אבל מה קורה כאשר מתקינים את התוכנה במיקום מנותק
שאז יש לשלוח בכתובת את כל הפרטים ש'הדייגים' מחפשים
האם וכיצד צריך להצפין בצורה כלשהיא את התקשורת(נקודה חשובה: השרת עם כתובת IP קבועה, וכמובן סגור לכניסה מכל העולם, ופתוח רק לכתובות IP שהוחרגו לאישור)
נ.ב.
אשמח להרחיב את ה(חוסר) ידע הכללי
(המתבסס על קליטת תדרים משידורי תחנת מוניות ב'ווקי-טוקי'...)כאשר מחברים את המחשב לאינטרנט, וינדוס שואל האם זה רשת פרטית או ציבורית
אני מניח שברשת ציבורית, משתמשים אחרים באותה רשת יכולים לזהות את תעבורת הרשת שאני שולח מהמחשב ו...
כאשר בוחרים ברשת פרטית
מתישהו המחשב שולח מידע החוצה לרשת הציבורית
לדוגמא: נכנסתי לאתר הבנק, והזנתי שם משתמש וסיסמא
כאשר לחצתי כניסה - פרטי ההקלדה נשלחו לאתר הבנק>נבדקו>והדפדפן אצלי קיבל תשובה
האם בין הראוטר שלי - לשרת של הבנק - המידע מוצפן?
נניח שמאחורי הקלעים של האתר המאובטח של הבנק יש הצפנה
שבכל פעם שאני מקליד את האות א האתר שולח את האות ג
ורק השרת של הבנק מפצח את התשדורת בחזרה
אזי גם ההאקר שמאזין לתשדורת שלי, יקבל שהדפדפן שלח את האות ג - וישלח את אותו שדר ישירות ללא המערבל של הבנק ויכול להכנס לחשבון
מה שאני מנסה להבין
זה איך עובד/נראה תעבורת רשת
ומה בעצם נשלח / מתקבל
ואיך עובד הצפנת תעבורה
(שמפעיל מזל"ט שולח פקודה מהג'ויסטיק למזל"ט לבצע המראה,
עצם פקודת התשדורת אמורה להיות גלויה היכןשהו
במידה ואיירט את הפקודה המוצפנת, ואשדר באותו תדר את הקלט שיירטתי, המזל"ט יבצע את אותה פעולה?) -
@mekev
לדייגים אין דרך קלה לדוג מידע כל ועוד הם לא יושבים על אחד הצינורות שדרכם אתה עובר (קרי: קווי האינטרנט והנתבים שבהם יעבור המידע כל הדרך עד לשרת)
כדי לעשות את זה הם יצטרכו או להשתלט על אחד הנתבים, או לגרום לאינטרנט לצרף נתב זדוני שלהם כחלק לגיטימי ממערכת הצינורות.בנוסף, גם אם יצליחו להשיג את הפרטים, אין אפשרות (בקלות. הכל אפשרי) לתקשר ככתובת IP שלא שייכת אליהם, כך שאם הגבלת את שרת הSQL לכתובות ספציפיות - אתה אמור להיות מוגן.
הבעיה היא שללא קשר לאבטחת פרטי החיבור, לא בריא לחשוף שירותים כמו SQL לרשת, מכיוון שמידי פעם בפעם מתפרסמים באגי אבטחה שעלולים לעקוף גם את מערכת האימות רשימה לבנה של SQL.
בקיצור, אם חשוב לך אבטחת מידע - אתה לא אמור לחשוף שום דבר לרשת אלא ליצור חיבור VPN בין הרשתות
-
@mekev רשת פרטית או ציבורית זה סה"כ סט של כללי חומת אש, כאשר רשת פרטית הכונה שאתה פחות חושש שיהיו בה איומים (כי היא פרטית שלך) וציבורית זה כמו ברכבת ישראל שאין לך מושג מי יחד איתך ברשת.
כעת בא נדבר על האבטחה. מי שהתעבורה שלך עוברת דרכו (ספק, ראוטריםׂ) או מי שהתעבורה שלך עוברת לידו (מחשבים שמחוברים לאותו רשת פנימית שלך, כלומר חולקים LAN משותף. שני המקרים האלו יכולים לראות תעבורה מהמחשב ואל המחשב שלך.
בגלל המקרים האלו יש https. כשאתה נכנס לבנק שלך, יש סיכום מתוחכם בין האתר של הבנק למחשב שלך, וככה מבטיחים שכל המשך התקשורת יהיה רק ביניכם + מוצפן לחלוטין בפני אחרים.
שאלת איך עובדת ההצפנה הזו, הרי המיירט של התקשורת רואה את התוכן המוצפן ויכול להשתמש בו בדיוק כמו המתקשר המקורי. התשובה היא שתלך לקרוא על הצפנה אסימטרית, או שתפתח על זה נושא (הערה: אני לא לגמרי שולט בחומר אבל נדון בעניין ונבין יותר).
בMSSQL SERVER לא ברור לי אם בברירת מחדל התעבורה מוצפנת.אבל אתה הגבלת את החשש שלך רק למאזינים ברשת. מה אם המשתמש במחשב עצמו? או מי שמצליח לקבל גישה למחשב? אתה סומך על כל המשתמשים שלך שהם טליתות שכולם תכלת? אולי משתמש מסויים בטעות ישתף את התכונה שלך באינטרנט ושמה יש את השם והסיסמה על מגש של כסף! בנוסף, שרת הSQL שלך חשוף למתקפות בכח גס שינסו למצוא את הסיסמה לבד. מה תוכל לעשות?
א. לסגור כניסה לשרת הSQL מבחוץ (ביטול המיפוי פורטים ל1443) ויצירת VPN. המשתמש צריך גם להתחבר לVPN ורק אחרי זה להפעיל את התכונה שלך שמתחברת כאילו ברשת הפנימית.
ב. לא לתקשר מול הSQL ישירות. זה אומר להקים שירות HTTP או אתר, שיספק את המידע למי שהאמת עם שם וסיסמה אישיים שתנפיק עבור כל אחד. שם תשלוט יותר טוב במי מתחבר ומאיפה (תוכל ביתר קלות להגביל IP וכדומה) ומתי. אתה גם מרויח שהתקשורת מאובטחת וגם שכל התחברות היא עם משתמש אחר (כפי שתפתח את השירות).אני יודע ששני הדרכים שאמרתי יהיו קשות לך (גם לי), אבל אתה שאלת אז עניתי.
-
@mekev תקשורת בין שני משרדים שונים לדעתי זה רק ipvpn או פתיחת פורטים לכתובות מסויימות, וזאת בכפוף לשירותים שבהם אתה משתמש, כי ישנם שירותים שלא עובדים בפורטים חיצוניים, (לדוג' שיתוף תיקיית smb ) ועוד.
כשאתה גולש ממשרד לאינטרנט תצא מנקודת הנחה שיושב בינך לבין הספק 'איש באמצע' ומקבל את כל הנתונים (ssl כמובן נותן לזה מענה ברור המקרים כפי שהסביר @dovid בטוב טעם ודעת) זאת במידה כמובן שאתה פתחת פורטים החוצה או יישום שמרחרח או במידה והפורטים סגורים אז זה יכול להיות מחשב ברשת הפנימית (בשביל זה אפשר לעבוד עם vlan)
-
-
@חגי באמת כיף להכיר את הכלי 'Wireshark' בעקבות התשובות המפורטות (תודה מיוחדת ל: @dovid @aaron )
אחדד
שניתן לפרוץ בצורות כאלו ואחרות לSQL - ידוע ואכמ"לנקודת השאלה היא
בהנחה שההגנה הקיימת בשרת וSQL תקינה ומעולה בפני עצמה
ובהנחה שכתבתי את השאילתה עם שימוש ב'פרמטרים' וטיפול בשגיאותאיך הויזואל סטודיו שולח את המידע
האם הוא מצפין אותם ברמה כלשהיא (מקביל ל https) או שלא...
בשביל שאני לא ייתן 'דלת אחורית' לשליפת הנתונים -
@mekev אמר באבטחת מידע:
איך הויזואל סטודיו שולח את המידע
ויזואל סטודיו אינו מתקשר עם מסד הנתונים, התוכנה שלך היא שעושה זאת.
בחירה בחיבור מאובטח TLS מתאפשרת בעת יצירתו ע"י הגדרת הפרמטרEncrypt
לTrue
בConnection String
.var builder = new SqlConnectionStringBuilder { DataSource = "ServerName", InitialCatalog = "DatabaseName", UserID = "UserName", Password = "UserPassword", Encrypt = true }; var connection = new SqlConnection(builder.ConnectionString);
כמובן שעליך לטפל ברמת המסד ביצירת תעודת אבטחה שתוכר ע"י הלקוח (ע"י יצירת תעודה חתומה ע"י CA כדוגמת Let’s Encrypt או ע"י יצוא התעודה והתקנה אצל הלקוח, לחלופין ניתן לבטל את האימות ע"י הוספת
TrustServerCertificate=True
לConnection String
[לא מומלץ])
כמו כן יש לאפשר במסד כניסת חיבורים מאובטחים. -
@חגי אמר באבטחת מידע:
@avramk אמר באבטחת מידע:
@חגי rdp לא יותר פריץ?
אתה מכיר דרך לפרוץ RDP?
זה מהשיטות אימות הגרועות ביותר
-
@חגי אין לי שום פרצה אבל תברר כמה אחוזים של כופר הגיעו מrdp פתוח לעולם , לא מובנה בווינדוס שום מנגנון להפלת נסיונות פריצה או הגבלת בקשות וזה מה שגורם להאקרים לשלוח מלא בקשות כניסה עם שמות משתמש וסיסמא לשרת עד שהם מקבלים כניסה. (אם אתה מאד מעוניין אני יעלה לך לוגים של כמות נסיונות הפריצה שיש לי לשרת שהrdp שלו פתוח)
-
@avramk
אז לא נראה לי שיש מה להשוות בין הפרצה של SQL SERVER לפרצה של RDP,
SQL SERVER נותן לך MITM שזאת פרצה במידה ואתה כבר יושב באותה רשת עם הSQL SERVER, אבל זאת פרצה מאוד פשוטה למימוש ומאוד מסוכנת.
RDP הוא יותר מצוי, אבל פחות פריץ, אז באופן כללי מי שיש לו RDP פתוח לרשת החיצונית חשוף יותר לסכנות, אבל כמו שכתבת, צריך בשביל זה לנסות הרבה סיסמאות, והפרוטוקול עצמו כן מונע במידת מה את הפריצות האלה ע"י השהיה בין ניסיון לניסיון, ובשביל לעקוף את זה צריך פרצת אבטחה שכרגע אין. -
@avramk אמר באבטחת מידע:
אין לי שום פרצה אבל תברר כמה אחוזים של כופר הגיעו מrdp פתוח לעולם
יש גם מתקפות דרך חשבונות VPN
לכאורה בהרבה מהמקרים זה פשוט מדליפה של הסיסמה
העובדים לא תמיד יודעים להגן על הסיסמה בצורה טובה,
ויש וירוסים שמתמקדים באיתור סיסמאות.