
הטקסט המלא של הדקות הראשונות בהרצאה «מה זה cookies ?» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
ברוכים הבאים להרצאה על קוקיז, עוגיות. עוגיות שהשרת שולח ליוזר והיוזר מחזיר לו וכך הוא מזהה אותם. אנחנו נראה בדיוק איך זה עובד.
אנחנו נגנוב את הקוקי. נצליח להתחזות למשתמש בלי לדעת שם והסיסמה שלו, רק על ידי זה שגנבנו לו את הקוקי הזה. אנחנו נבין בדיוק איך הכל עובד.
ניכנס לפייסבוק, פה במכונה וירטואלית. אתם רואים כבר הכנתי פייסבוק כדי להיכנס אליו בלי שיהיה לנו שם וסיסמה. זאת הולכת להיות הרצאה מאוד מאוד מעניינת.
בואו נתחיל מפשוט לעשות לכם הדגמה כמה שהקוקיז זה דבר חשוב. זה המחשב הפיזי שלי. שימו לב, יש לי פה פייסבוק שלי ואני יכול לכתוב פה אפילו כתבה.
אני מייצא את כל הקוקיז החוצה עם התוסף הזה בפינה שיודע לעשות אקספורט לקוקיז. אני כאילו גונב לעצמי את הקוקיז. הוא הולך למכונה וירטואלית ששימו לב במכונה הווירטואלית הזאת פייסבוק פה לא יודע מה השם והסיסמה שלי אף פעם לא נכנסתי פה לפייסבוק הוא לא יודע אני לא כותב את השם והסיסמה במקום לכתוב שם וסיסמה אני עושה אימפורט לקוקיז מייבא את כל הקוקיז
ואני אלחץ פה על להביא למטה לחצתי על להביא למטה נהיה לי הרבה קוקיז של פייסבוק ועכשיו שימו לב אחרי שעשיתי v אני עושה enter ואני בתוך הפייסבוק תסתכלו אתם רואים נכנסתי לתוך הפייסבוק והפייסבוק חושב שזה אני, אתם רואים?
פייסבוק חושב שזה אני. הנה, אתם יכולים לראות שזה מבחינתו זה אני, והנה הכתבות שלי וזה אני מבחינתו. אתם רואים, זה בו זמנית, אני גם פה וגם שם. אוקיי, גם פה וגם שם.
יפה מאוד. מה אנחנו רואים? אנחנו רואים שאם גונבים לי את הקוקיז אפשר להתחזות אליי בלי לדעת את השם והסיסמה שלי, זה מה שבאתי להראות לכם.
זאת אומרת קוקיז הם כל כך כל כך חשובים שאם מישהו יצליח לגנוב לי את הקוקיז הוא יוכל להתחזות אליי בלי לדעת את השם והסיסמה שלי.
עכשיו תשאלו אותי מה יש בתוך הקוקיז האלו? איך זה עובד? למה צריך את זה? אז בואו נענה על כל השאלות האלו. איפה נמצאים הקוקיז? כל דבדפן שומר אותם במקום אחר ואני אראה לכם לדוגמה איפה שומר אותם הדבדפן חרום.
חרום שומר אותם ב-C-Users השם שלכם וכל הנתיב הזה. בתוך היוזר יש אפליקיישן דאטה ובתוכו יש את כל הנתיב הזה וכאן יש קובץ שבפנים הוא שומר את כל הקוקיז.
תכף אנחנו ניכנס פנימה ונראה בדיוק מה יש בתוך הקוקיז האלו ואחרי זה נבין בדיוק איך זה עובד. אז כדי לראות את הקובץ הזה צריך תוכנה שנקראת sqlite, אתם רואים תוכנה שנקראת sqlite, הורדתי אותה מsqlitebrowser.org הלכתי פה והורדתי את ה-32 ביט הזה, אחרי שהורדתי פתחתי אותה,
ופה יש Open Database ואתם אומרים לו איפה נמצא הדאטאבייס של הקוקיז וזה בדיוק מה שעשיתי ופתחתי את הקוקיז והנה הוא פתח לי את הדאטאבייס, אני עושה Browse Data והנה אני רואה את הפייסבוק את כל הקוקיז של פייסבוק אז הם מחזיקים את זה בכזה קובץ אחד של דאטאבייס שאפשר לפתוח אותו ולראות מה יש בפנים
דרך אגב אם אני אכנס עוד פעם אתם תראו שהוא שהולך לשרת אוטומט את כל הקוקיז ונכנס ואני כהאקר אפילו לא יודע את השם והסיסמה עכשיו למה צריך את הקוקי הזה בדיוק למטרה הזאת שאני אוכל לסגור ולפתוח בלי להכניס את השם וסיסמה קוקי זה משהו שהשרד שולח אליי וכשאני מתחבר אליו שוב אני אעביר לו חזרה את הקוקי הזה ועל ידי הקוקי הזה הוא ידע שזה אני ברגע שאני אמחק את הקוקיז ברגע שאני אעשה לו פה
קוקי למחוק אותו הפייסבוק כבר לא יזהה אותי עוד פעם טוב אז באתי להראות לכם עד כמה שהקוקי זה דבר חשוב כי אפשר להזדהות באתר בלי שם וסיסמה תשאלו אותי בשביל מה המציאו את הדבר הזה וזאת שאלה מאוד מעניינת ואני אראה לכם אני נכנס לאתר נניח פייסבוק עובר בדיקה של שם וסיסמה הוא שולח לי קוקי עכשיו הקוקי הזה אומר עברת
שם וסיסמה ואתה יונתן אחרי זה השרת שוכח הכל שרת שוכח מי אני ומה אני הוא שוכח ממני לגמרי אני לא משאיר בזיכרון שלו שום מידע עליי כי אין לו כוח בשביל בן אדם אחד יש לו מיליונים כמוני אחרי זה כשאני בא להתחבר אליו שוב בבקשה מספר 3 מה שקורה שאני אומר תקשיב תן לי את החדשות של יוני אני יוני עושה רגע איך תוכיח לי שאתה יוני אני שכחתי הכל אומר
הנה יש לי פה קוקי השרת לוקח את הקוקי הזה שיש בו איזשהו מידע ואומר וואלה נכון זה הקוקי שאני הבאתי לך ואתה באמת יונתן כמובן שהקוקי הזה צריך להיות עשוי ככה שהיוזר לא יוכל לזייף אותו כי אם אני אצליח לזייף אותו, אני אוכל להתחזות למישהו אחר.
קוקי הזה צריך להיות ככה שהיוזר לא יוכל לשנות אותו בלי שהשרת יעלה על זה. כמו חותמת במועדון, ששילמתם כסף, שמו לכם חותמת ושכחו ממכם, לא יודעים מי אתם באמת.
וכשתבואו לדלת הכניסה לאיזשהו מועדון, תראו את החותמת ולפי החותמת תדע שזה באמת אתם. אבל צריך חותמת כזאת שבן אדם שרוצה להתחזות, יהיה לו קשה למצוא בדיוק את אותה החותמת, זה הרעיון.
אם מישהו גונב את הקוקי הזה, השרת כבר לא ידע לזהות את זה. בואו אני אראה לכם לדוגמה קוקי שיש לי. יש לי באתר של פרקטיקיו קוקי. אתם רואים, אני עכשיו בשפה העברית, עובר נניח לרוסית, עברתי שפה, אם אתם תסתכלו טוב טוב טוב טוב, יש לי פה את הקוקי של פרקטיקיו.קום, והקוקי הזה כתוב שהשפה שלי היא רוסית.
ואז זה אומר שפעם הבאה כשאני אכנס, הוא ייזהה אותי וייתן לי דף ברוסית. תסתכלו, אני נהיה רבן להיכנס, הופה, הוא נותן לי ישר דף ברוסית.
ואם אני אלחץ לדוגמה עברית, הוא פעם הבאה שאני אכנס ייתן לי עברית. אתם רואים, נתן לי עברית. למה? כי הקוקי עכשיו עברית.
ועכשיו הקוקי רוסית. אם אני מחליף את הקוקי, נניח החלפתי את הקוקי, אתם רואים, האתר התחלף לרוסית. זאת אומרת, הקוקי הזה הוא יכול להיות לא סודי, הוא יכול להיות לנוחות של היוזר, והוא יכול להיות מאוד מאוד צודק כי הוא בעצם מנהל את ה-Session ID, את המספר של ה-Session
שלי ומי אני. למעשה Session זה שיחה מסודרת עם השרת. אז כדי להגן על הקוקי הזה יש כמה שיטות. השיטה הראשונה היא לשלוח אותו רק בתקשורת מוצפנת.
זאת אומרת שאם אני אשים פה את ה-V, כשהשרת שולח לי את הקוקי הזה הוא יכול לשים את ה-V הזה. אם הוא שם פה V זה אומר Secure Only, זה אומר שרק אם תקשורת היא HTTPS הקוקי עובר.
אם התקשורת היא לא HTTPS, הדפדפן לא ישלח את הקוקי הזה לשרת, לא ישלח אותו. כדי למנוע התקפה man in the middle. אם מישהו מאזין על הקו, הוא יכול לראות את כל הקוקיז.
כי הם עוברים כClear Text, כטקסט נקי ופתוח. אפשר גם להגן עליהם ב-HTTP Only. HTTP Only אומר שJavaScript לא יכול לגעת בקוקי הזה. זה אומר שהקוד של ה-JavaScript לא יכול לגעת בקוקי הזה.
ואני הולך בדיוק דרך זה, דרך JavaScript זדוני, לפרוץ ולגנוב את הקוקי, ככה אפשר יהיה לעצור אותי, אבל את זה עוד 10 דקות תראו.
סשן זה אומר שאם אני סוגר דפדפן הוא פאק תוקף מיידית, אם אני לא סוגר דפדפן הוא עד שנת 2000 ומה שאתם רוצים אתם רואים, עד מתי שאני רוצה אני יכול לתת לו תוקף, עד 2047 הוא יהיה.
אני נותן לו פה את התוקף עד 1 לראשון 2007 אחרי זה הקוקי הזה נמחק או פאק תוקף. סיקיור אונלי עובר רק ב-HTTPs נגד Man in the Middle מישהו לא יאזין לי על הקו ו-HTTP only זה נגד גניבה דרך Java Script.
ועוד מעט אני הולך לעשות את הגניבה הזאת, ואתם תראו איך זה מתבצע. אני יכול גם למחוק את הקוקי הזה, אתם רואים? אני מוחק את הקוקי הזה. אם אני מוחק את הקוקי שלי, הוא ייזהה לפי כתובת IP איפה אני נמצא, ולפי כתובת IP יחליט לתת לי דוגמה סרט בעברית.
כמובן שיש קוקי סודי ויש קוקים לא סודיים, יש קוקים שאני יכול לפני שאני מעביר מידע להצפין אותו. שימו לב למשהו מעניין שהדפדפן תמיד שולח את הקוקייס באוטומטי, אי אפשר להגיד לו כן תשלח או אל תשלח, כל פעם שהוא מתחבר לדומיין שלי הוא שולח את כל הקוקי של אותו הדומיין והשרת עונה לו, שימו לב השרת לא זוכר מידע על היוזר, כמובן שהשרת כן יכול לזכור,
אפשר לכתוב לו שיזכור אבל כל הרעיון זה שלא נהיה חייבים את זה, כל הרעיון הזה שקליינט יקבל קוקי ישלח אותם חזרה, יקבל ישלח אותם חזרה והשרת לא יצטרך לזכור שום דבר ואנחנו קוראים לזה The Station State, מצב השיחה, כולו מוחזק על ידי הקליינט.
השרת כן יכול לשמור בדאטה-בייס, אף אחד לא אומר לו אל תעשה את זה. אבל הרעיון הבסיסי שלא נהיה חייבים בצד של השרת לשמור את המידע על היוזר, וזה הרעיון המרכזי שנקרא State-less, חסר מצב, כאילו השרת לא זוכר את המצב של השיחה שלנו.
זה כמו שבמועדון לא זוכרים מי אתם אחרי ששילמתם בקופה כסף, רק שמים לכם חותמת, ועם החותמת הזאת אתם מגיעים לשער ונותנים לכם להיכנס.
אבל המערכת, הקופה, לא רשמה את השם האישי שלכם בשום מקום ואף אחד לא יודע באמת מי אתם. זה אומר שהם סטייטלס, אין להם מעקב אחרי לקוחות באופן פרטני.
וזה הרעיון של סטייטלס, כדי לא להקשות על המערכת של הקופות ועל הניהול של המועדון. אז אתם משלמים בקופה, מקבלים חותמת, הם שוכחים מי אתם ואתם מגיעים עם החותמת הזאתי לכניסה והם יודעים ששילמתם.
זה מקל על הניהול של המועדון וזה אותו המצב בשרת. תחשבו שבשרת יש אלפי, עשרות אלפי ומיליוני לקוחות שמתחברים אליו. עכשיו אם האקר יבוא לנצל את זה הוא יכול לגנוב את הקוקיז והוא יכול גם לשנות אותם.
בגלל זה לרוב קוקי גם מוצפנים אם זה קוקי סודי. בוא נתחיל להיות האקרים עכשיו אחרי שהבנו מה זה קוקי ואיך זה עובד בוא נתחיל להיות האקרים.
נכנסים לאתר אינטרנט יש יוזר בבית שאני רוצה להתחזות אליו. הבן אדם בבית מכניס שם וסיסמה ולא חושד בשום דבר ואין פה שום דבר מפחיד. והנה בבקשה הוא עשה יוזרות אתיקטד והנה אנחנו רואים שהוא סמוראי.
מה הסיסמה שלו אני לא יודע, זה בן אדם בבית. אני שולח לו לינק להיכנס לאתר האהוב עליו. בלינק אני שולח לו לינק, בואו נשלח לו איזשהו לינק הביתה.
עכשיו מה שאני עושה עכשיו זה נקרא פריצה על ידי שיקוף. יש על זה סרט, בקיצור, עשינו על זה סרט.
מה זה הסקריפט הזה בדיוק שאני כותב? אני עשיתי אותו פשוט בשיעור קודם. מי שלא זוכר ולא יודע מה זה התקפה על ידי שיקוף, זה היה בהרצאה קודמת. בגדול, יש איזשהו לינק שמה שכותבים פה בפרמטר שהיוזר מכניס משתקף כאן למטה בתוך הגוף, זה אומר פרמטר שאני מכניס משתקף בגוף, אני במקום שם של יוזר
מכניס לו קוד זדוני ומשתלט על המחשב שלו. בואו נראה, נעשה F12, נעשה פה Enter. והנה ההשתקפות הזאת פתחה לי חוק GS, איזשהו קוד שהוא לא רואה שהוא רץ והוא מתחבר לי לשרת ואני יכול לשלוט עליו.
אז ההשתקפות הזאת ניצלתי אותה כדי להריץ את הקוד הזדוני שלי שמתחבר לי לשרת השליטה של האקר. ועכשיו אני אגנוב לו את הקוקיז. בואו נגנוב לו את הקוקיז.
הנה השרת שלי והנה הוא התחבר אליו ואני יכול להריץ עליו פקודות של לגנוב קוקי. בואו נראה, גט קוקיז. הנה הרצתי עליו את ההתקפה גט קוקיז והנה אני אמור לקבל כאן את הקוקי שלו.
או, קיבלתי את הקוקי. בואו תראו מה אני רואה, יוזרניים סמוראי, יוזר איי-די 6 ו-php-session-איי-די ואת כל הקוקי שלו.
אני לוקח את כל הקוקיז שלו ומכניס אותם אצלי, אני אתיק אותם רק שני קוקיז כי אני יודע שאני אצטרך רק שניים 179, אני עושה לו פה פלוס יוזרניים סמוראי.
אני למעשה מזייף קוקי ומכניס לדפדפן קוקי שגנבתי. אתם רואים, לכל אתר יש את הקוקיז שלו. לאתר 179 אני מוסיף פה עוד קוקיז דרך פלאגין שנקרא Advanced Cookie Manager.
זה פלאגין שאתם יכולים להוריד לפיירפוקס. זה השם של הקוקי וזה ה-value שלו. יופי, אז יש לנו את השדות האלו. בואו נצא, שימו לב, Not Logged In. אני עושה פה enter ואני נהייתי סמוראי זאת אומרת שברגע שאני גונב את הקוקיז האלו אצל היוזר ואני גנבתי אותם על ידי זה ששלחתי לו איזשהו סקריפט שגנב לו את הקוקיז אני יכול להתחזות ליוזר הזה באתר האינטרנט ולעשות דברים
בשמו זה למעשה התחזות איך מונעים את זה איך מונעים את ההתקפה הזאת כדי למנוע את ההתקפה הזאת צריך לשים שג'אווה סקריפט לא יכול לגשת לקוקי htp only וזה היה פותר את כל הבעיה אז מי שבנה את האתר, אם הוא היה עושה HTTP only זה לא היה עובד.
בואו נראה איך אפשר לעשות את זה. אתם רואים פה את ה-HTTP only? אם אני אשים HTTP only על ה-cookie של user name, שם פה v, אתם רואים? שמתי פה v של HTTP only, בואו נראה שזה באמת עובד.
וזה המתכנת של האתר היה צריך לעשות, והוא לא יודע מה זה בדיוק הדבר הזה, ה-HTTP only, אז הוא לא שם אותו. ואני שוב מפעיל אותה התקפה, execute. תסתכלו מה קרה, אתם רואים יוזרניים פה היה סמוראי, פה כבר אין סמוראי, אתם רואים כבר אין סמוראי, כי ג'אווה סקריפט לא הצליח לקבל גישה למידע