Pen Testing - הקדמה

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

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

  1. הכנות
  2. מונחים בסיסיים
  3. סביבת עבודה
  4. אנונימיות

 

1. הכנות

מכיוון שאני רק מתחיל לחקור את העולם הזה ועדיין אין ברשותי את הידע לאן ללכת או מה לעשות, התחלתי בלהוריד ולהתקין הפצת לינוקס המגיעה עם מספר כלים לביצוע בדיקות חדירה (penetration testing) הנקראת Kali Linux (שמעתי עליה מראש, ואפשר גם לקרוא עליה ב wikipedia).

 

2. מונחים בסיסיים

בזמן שהפצת Kali יורדת (3.1GB), הלכתי ל Google והתחלתי לקרוא על המושגים השונים ששמעתי במשך השנים:

  • Footprinting - זהו שם המייצג את תהליך איסוף המידע. מידע זה יכול להיות ווירטואלי כמו כתובת IP של השרת, או פיזי כמו לזהות עובדים באותה החברה או תדפיסים שנזרקו לפח וכד’.
  • DDoS - (ראשי תיבות של Distributed Denial-of Service או בעברית התקפת מניעת שירות) היא התקפה המשביתה מערכת ע”י יצירת עומס חריג על משאביה (עד שאינה יכולה לשרת אף משתמש אחר). בדר”כ התקפה כזאת דורשת משאבים נוספים ולכן ההכנה שלה יכולה להיות מורכבת (במידה ואתם עושים זאת לבד ולא קונים את המשאבים, ודורשת השתלטות על מספר רב של מחשבים נוספים), אך ביצוע קל יחסית ולכן נחשבת לילדותית. לדוגמה אם אני זוכר נכון, לשרת Apache יש מגבלה (כברירת מחדל) של 10,00 בקשות, ואם אתם יכולים לשלוח 10,000 בקשות לשניה בעיקרון סתמתם את השרת, והוא לא ישרת אף חיבור אחר.
  • RAT - (ראשי תיבות של  Remote Administration Tools) הוא מושג המתאר כלים המאפשרים למישהו לשלוט באופן במלא במכשירכם, מרוחק. הטריק עם הכלים האלו הוא לגרום להם להיות FUD (ראשי תיבות של Fully UnDetectable).
  • RootKit - הוא כינוי לכלי המתקינים על מערכת ההפעלה, המסוגל להסתיר תהליכים הרצים ברקע מהמערכת עצמה (לדוג’ כדי שהמשתמש לא יראה את התהליך רץ ב Task Manager). בה בעת, כמו כלי RAT, כלי זה מאפשר גישה מלאה למכשירכם.
  • Phishing - הוא ניסיון גניבת מידע ע”י התחזות. ז”א כשמישהו משתמש בפיתיון כלשהו כדי להוליך אתכם שולל, ואתם “בולעים” אותו. לדוג’ שליחת מייל עם לינק להורדת איזשהו קובץ, או שליחת לינק לאתר שנראה כמו האתר המקורי אך בפועל זה אתר שאתם הקמתם (וזאת על מנת לגנוב את שם המשתמש והסיסמה שלכם), וכד’.
  • SQL Injections - זהו מקרה פרטי של קבוצת פרצות אבטחה הנגרמות עקב היכולת ל”הזריק קוד” לשירות (מדובר על היכולת ליצור קוד בזמן ריצה, כאשר תוכן הקוד אינו נוצר על ידי המתכנת ואינו נבדק על ידו). במקרה הזה מדובר על שליחת שאילתות SQL לבקשות HTTP (בדרך כלל דרך שדה קלט כלשהו), כאשר המבנה / תבנית של השאליתה אינו מסודר כמו שצריך בשרת הדבר מאפשר חשיפה של נתונים ממסד הנתונים.
  • VPN - (ראשי תיבות של Virtual Private Network או בעברית רשת פרטית ווירטואלית), היא שיטה להעברת מידע פרטי על גבי רשת ציבורית. ארגונים רבים בעולם משתמשים בשיטה זו על מנת לחבר עובדים באופן מרוחק לרשת הארגונית שלהם. ומשתמשים רבים מבצעים שימוש בחברות המאפשרות להתחבר לרשת שלהם (בתמורה לסכום כספי כלשהו) על מנת שישמשו חוצץ אל מול התקשורת החיצונית (ז”א כדי שהמיקום שלך לא יוודע, אתה מתחבר ל VPN של אותה חברה וגולש דרכם כשהם מנתבים אלייך, דרך הרשת הפנימית שלהם, את המידע שמגיע אליהם מבחוץ (לאחר שעבר הצפנה). כך שמי ששלח את המידע אינו יודע שבפועל זאת הייתה הבקשה שלך). היישומים המפורסמים ביותר של רשתות VPN הם OpenVPN ו IPsec.
Proxy Concept
  • Proxy - בדומה ל VPN, שרת פרוקסי מספק גישה למשאבים חיצוניים ברשת, ז”א שדרכו עוברים כל הבקשות (הנתונים נשלחים אליו והוא שולח אותם אל היעד, היעד מחזיר אליו את התשובה והוא שולח אותה אליכם). משמאל ניתן לראות תמונה המתארת (באופן מושפט למדי) את תהליך התקשורת מול השרת פרוקסי. השרת משמש כנקודת הפרדה בין רשת המחשבים הפנימית של הארגון ובין הרשת החיצונית, ומאפשר ניתוח של המידע לפני כניסתו לרשת הפנימית. Proxy נחשבת לשיטה פחות אמינה בכל הקשור לשמירה על פרטיות (אינני יודע עדיין למה, אך זה מה שעולה מהחפירה הקטנה שלי באינטרנט, ולכן ראיתי שלרוב מבצעים שרשור Proxy). 
  • Tor - (ראשי תיבות של The Onion Router) זוהי תוכנת קוד פתוח הנועדה לאפשר גלישה אנונימית באינטרנט. התוכנה מנתבת את החבילות (Packets) דרך מחשבים אחרים המחוברים לרשת Tor עם התוכנה, עד שהחבילה יוצאת דרך אחד הצמתים (Nodes). כאשר החבילה מתחילה את דרכה, שכבת האפליקציה מוצפנת (ז”א המידע המקורי כולל כתובת ה IP של היעד מוצפן) כמה פעמים, והחבילה נשלחת “לטיול ווירטואלי” בין הצמתים (שנבחרו באופן אקראי) עד שיוצאת באחד מהם. כל אחד מהצמתים מפענח את השכבה הבאה המכילה את המידע לאן לשלוח את הבקשה הלאה, ושולח אותה מבלי לחשוף את כתובת המקור (ממנה הבקשה נשלחה). וכך גם מפחית את הסיכוי לחשיפה (גם אם מקור אחד יחשוף את היעד שלו, הבקשה עוברת דרך כמה צמתים עד שיוצאת, ובהסתמך על זה שאחד יקיים את ההסכם ולא יחשוף את המידע, הבקשה תיהיה אנונימית). יש לציין כי כבר הוכח בעבר שמפעלי הצמתים כן יכולים לנתח ולחשוף את המידע שעובר מהצומת האחרונה אל היעד במידה והתקשורת אינה משתמשת בפרוטקול SSL (או TLS), דבר המאפשר לדלות מידע על מי המקור של הבקשה. ואף כי ישנם אתרים שחוסמים גישה דרך צמתי Tor ידועים (לדוג’ לא ניתן לערוך ערכים בוויקיפדיה דרך Tor).
  • VPS - (ראשי תיבות של Virtual Private Server) הוא מכונה ווירטואלית הנמכרת כשירות (ז”א חברה שבבעלותה מחשב גדול מחלקת אותו ומשכירה לך מפרט שלך עליו אתה יכול לעשות מה שאתה רוצה). מפתחים רבים משתמשים במכונות אלה בשביל להתקין סביבת פיתוח מרוחקת (או לפתח או לבצע בדיקות כנגד סביבה ספציפית). משתמשים בשירותים אלה גם כדי לאחסון שירותים שלא צריכים שרתים פיזיים אך גם שירותי אחסון כבר אינם מספיקים להם.
  • Key Loggers - המונח מתאר כלים המאפשרים לחלץ מידע (הקשות מקלדת) ממקור כלשהו. ז”א להקליט את הקשות המקלדת במחשב כלשהו ושלוח אותם לאימייל ספציפי או לשרת FTP בשביל ניתוח והוצאת מידע בעל ערך. היום כלים אלה יכולים לעשות יותר מאשר להקליט הקשות מקלדת, כמו לנתר אחר תיקייה ספציפית, לקחת תמונות מסך, וכד’.
  • Terminal - (או System Console) היא מעטפת גרפית ל Shell שהוא כלי שורת פקודה, המעבד את בקשות המשתמש, ואומר למערכת ההפעלה מה לעשות בהתאם. לכלים המבוססים על ה Terminal יש יתרונות רבים, בינהם פחות תלויות בספריות חיצוניות (בדר”כ ספריות GUI), קלים יותר מבחינת משקל בדיסק ומבחינת תקשורת באינטרנט (לשלוח שורת טקסט באינטרנט יהיה מהיר יותר משלוח צילום מסך, לדוג’), ועוד.
  • Firewall - במקרה הזה אני מדבר על מערכת לניטור וחסימת תקשורת לא רצויה (לרשת המקומית או למחשב ספציפי), ולא Computer Firewall שהוא מחשב ייעודי המנתר את התקשורת. 
  • Virus - היא תוכנה המסוגלת לבצע שכפול עצמי, ולרוב גם מסוגלת לבצע פעולות נוספות כגון מחיקת מידע, הצגת הודעה מעצבנת וכד’.
  • Reverse Shells - הוא סוג של Shell בו המכונה המדובקת פותחת חיבור ומתקשרת חזרה עם המכונה התוקפת.

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

 

3. סביבת עבודה

נתחיל בהתקנת Kali על Virtual Box. מכיוון שההתקנה זו דומה לכל התקנת מכונה ווירטואלית רגילה אני לא אעבור על כל התהליך, אך אציין כי כשאתם יוצרים מכונה ווירטואלית חדשה ה Type שלה כמובן צריך להיות Linux וב Version בחרו Debian (דביאן) (מכיוון שהיא מבוססת עליה) 64bit. הזיכרון המומלץ הוא 2GB, והאחסון המומלץ הוא 20GB.

כשהתחלתם להתקין, תידרשו לבחור שפה, אזור זמן וכד’ (שאר הדברים הרגילים בעת התקנת מערכת הפעלה). במהלך ההתקנה תגיעו למסך בו תתבקשו להכניס את שם ה host של המערכת שזה יהיה שם המחשב (תכתבו מה שבא לכם), לאחר מכן תתבקשו להכניס את ה domain לא אבצע בו שימוש אז מחקתי את ערך ברירת המחדל שהיה שם ולחצתי על continue (כמובן שהכל ניתן לשנות גם אח”כ מתוך המערכת), ולבסוף את הסיסמה של ה Root. ותמשיכו כמו כל התקנת Linux רגילה. באמצע תשאלו האם להשתמש ב Network Mirror אתם יכולים לסמן No, לאחר מכן תשאלו האם להתקין GRUB אני סמנתי Yes (ניתן לקרוא עליו  כאן), ולבסוף מסך המודיע על סיום התקנה.

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

 

פקודות טרמינל

הרבה מהכלים בהם נשתמש יפעלו באופן בלעדי ב Terminal ולכן עלינו להכיר לפחות כמה פקודות בסיסיות על מנת שנוכל להתנהל דרכו. אז כעת אפרט על כמה פקודות בסיסיות שיעזרו לכם בהתנהלות היום – יומית שלכם בטרמינל (מכיוון שזה לא קשור לנושא המרכזי מוקדש לטרמינל רק חלק קטן, בעתיד ארחיב על נושא הפקודות / טרמינל / ו bash scripting יותר).

  • cd - (ראשי תיבות של change directory), תאפשר לנו להחליף להיכנס או לצאת מתיקייה כלשהי. אחרי המילה cd נכתבת שם התיקייה (או הנתיב המוביל אליה), וכדי לחזור לתיקיית האב (שמעלינו בעץ) נכתוב cd ...
  • ls - (ראשי תיבות של list directory), תדפיס לנו את תוכן התיקייה (קבצים, תיקיות, וכד’ שנמצאים בתיקייה שאנו כעת). בנוסף ניתן לבקש את התוכן של תיקייה בה אנו לא נמצאים כעת אם נכתוב את הפקודה (ls) ואח”כ הנתיב המלא לתיקייה המבוקשת. לדוגמה: ls /nirgn/home/Downloads</span> (שימו לב שמערכת הקבצים בלינוקס היא case sensitive). לפקודה ישנם דגלים (flags), ז”א דגלים שאנו יכולים “להרים” כדי להרחיב את הפקודה, כמו ls -l כדי לקבל את רשימה של תוכן התיקייה עם פירוט נרחב הכולל לדוגמה תאריך היצירה, הרשאות, קבוצה, וכד’. או הדגל ls -a (כדי להראות קבצים נסתרים). ואף אפשר לשלב בין הדגלים כך ls -la.
  • pwd - (ראשי תיבות של print working directory), ידפיס לנו את הנתיב המלא של התיקייה בה אנו נמצאים.
  • cp - (ראשי תיבות של copy), מאפשר לנו להעתיק קבצים ותיקיות. השימוש מתבצע ע”י כתיבת הפקודה (cp) ולאחריה הקובץ / תיקייה אותה אנו רוצים להעתיק, ואחריה הנתיב אליו אנו רוצים להעתיק (כשרווח מפריד בין הכל). לדוגמה: cp path/item.txt /path2/someRandomDir. כשנבצא את הפקודה, אם היא הצליחה לא נקבל פלט אישור חזרה. כדי לראות בדיוק מה קרה נשתמש בדגל v, כך: cp -v path/item.txt /path2/someRandomDir.
  • mv - (ראשי תיבות של move), תגזור, תעביר את הקובץ / תיקייה ליעד המבוקש. בדיוק כמו cp, אנחנו כותבים את הפקודה (mv) ולאחריה את הקובץ / תיקייה אותה אנו רוצים להעביר / לגזור, ולאחר מכן את הנתיב אליו אנו רוצים להעביר / לגזור את הפריט המבוקש. לדוגמה: mv item.txt /path/someRandomPath. ניתן גם לשנות שם של קובץ עם הפקודה הנל, כך: mv item.txt item2.txt (כך הקובץ יועבר לאותו מקום עם שם שונה, ובעצם כל שעשינו הוא לשנות את שם הקובץ).
  • cat - (ראשי תיבות של concatenate), מאפשר לנו להציג את תוכן הקובץ. לדוגמה: cat item.txt תציג לנו את התוכן הכתוב בתוך הקובץ item.txt בתוך הטרמינל.
  • echo - תדפיס את הטקסט המתקבל אחריה, וכמובן של הטקסט להיות בין גרשיים, לדוגמה: "echo "hi there. ואנחנו יכולים להיעזר בסימן ה”גודל מ..” כדי להכניס את הטקסט לקובץ, לדוגמה: echo "This text will be in the file" > testFile.
  • touch - היא דרך מהירה ליצור קבצים חדשים. כדי ליצור קובץ חדש נכתוב את הפקודה (touch) ואז את שם הקובץ. ניתן כמובן גם ליצור כמה קבצים באותה פקודה, ע”י רווח ואז לכתוב את שם הקובץ הבא, לדוגמה: touch file1 file2.
  • mkdir - (ראשי תיבות של make directory), יצור לנו תיקייה חדשה. השימוש בפקודה מתבצע ע”י כתיבתה ואחריה השם שאנו רוצים לתת לתיקייה החדשה, לדוגמה: mkdir placeToBe.
  • rm - (ראשי תיבות של remove), הפקודה תמחוק את הקובץ / תיקייה שתכתבו אחריה (צריכה להיות בתיקייה בה אתם נמצאים כעת, ואם לא נמצאת שם עליכם לפרט את הנתיב המלא).
  • help - כמובן שלכל הפקודות יש עוד דגלים, ואנחנו גם לא צריכים לשנן את הדגלים, מספיק שנכתוב help- אחרי הפקודה (כך: cp &#8211;help) כדי לקבל את כל התיעוד והדגלים של פקודת ה cp.
  • clear - מידי פעם, בעיקר אחרי שאנחנו כותבים הרבה פקודות, נרצה לנקות את המסך. אין צורך לפתור חלון טרמינל חדש, אפשר פשוט לכתוב את הפקודה clear.

 

4. אנונימיות

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

Tor Logo

תחילה נתקין את tor במשתמש root (אך לא את הדפדפן, כי לא נגלוש דרך המשתמש הזה) עם הפקודה apt-get install tor -y. לאחר מכן, כדי לגלוש ב Tor ניצור משתמש חדש עם הפקודה adduser userName (החליפו את userName בשם שתבחרו, הקלידו אח”כ את הסיסמה ואת שאר הפרטים אתם יכולים להשאיר ריקים). צעד זה אינו חובה, אך הגיוני מכיוון שאיננו רוצים להריץ את Tor עם הרשאות Root מהסיבה שאנו לא מכירים את הקוד שעומד לרוץ באתרים אליהם ניכנס, ואיננו רוצים ליצור מצב שקוד זדוני ירוץ (ועוד בלי שאנו יודעים זאת) עם הרשאות Root. 

לאחר שיצרנו משתמש חדש, נצא מהמשתמש root וניכנס למשתמש שיצרנו (ע”י לחיצה על root בפינה הימנית עליונה -> Switch User), ומתוך המשתמש החדש ניכנס לאתר הפרויקט של Tor ונוריד את הגרסה המתאימה (בפינה הימנית עליונה, מתחת לתפריט הניווט ישנו כפתור Download). הקובץ שירד לנו יהיה קובץ tar.xz וממנו נלחץ את התיקייה עם הפרויקט, כדי להפעיל את הדפדפן של Tor (ישנם 2 חלקים: הדפדפן שמבוסס Firefox והתוכנה עצמה) נלחץ על “Tor Browser” שנמצא בתוך התיקייה שחילצנו ובחלון שיפתח נלחץ על “Connect”.

בפשטות, מה שהדפדפן Tor נותן לנו הוא גישה לסיומות onion שאינם נגישים משאר הדפדפנים. נתחיל בלכתוב בשורת החיפוש “hiddenwiki url” שהוא בעצם אתר המהווה אינדקס של אתרים בעלי סיומות onion בכתובת. הסיבה שאנו מחפשים את האתר ולא כותבים כבר את הכתובת שלו היא שהכתובת שלו משתנה מעת לעת (בעיקר בגלל שהוא נפרץ). בזמן שכתבתי את הפוסט הזה הכתובת הייתה “http://kpvz7ki2v5agwt35.onion” אך יכול להיות שזה כבר השתנה. ב Hidden Wiki ניתן למצוא מגוון לינקים לאתרים שונים העוסקים בנושאים שונים (חלק מהאתרים לא יהיו זמינים), אחד האתרים שיצא לי לשמוע עליו ולחפור בו קצת הוא Intel Exchange שזה בעיקרון פורום עם שיחות במגוון נושאים מ”דיבורים” ל”מדע ומתמטיקה”, “תוכנה”, “חומרה”, “בריאות פיזית ונפשית”, וכד’.

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

 

סיכום

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