דף הבית   על אודות   צרו קשר   לפני האיתחול  
14 באוקטובר2018

איך לעקוף את הגנת הסייבר של אינקפסולה לצורך בדיקות אבטחה אוטומטיות


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

אבהיר שלא מדובר כאן ב”פרצת אבטחה” או משהו דומה, אלא פשוט ככה עובד המוצר וככה הוא מתוכנן מראש. כנראה שזה עדיין שווה 2 ומשהו מיליארד דולר.

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

מה עושה הפיצ’ר המדובר של אינקפסולה

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

ככה זה נראה משורת הפקודה:

$ curl -L “http://www.idf.il”

<html><head> <META NAME=”robots” CONTENT=”noindex,nofollow”><script src=”/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3”></script><body>

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

sloth

העצלנים לשלטון

אבל מה אם, נניח, היינו רוצים לעשות איזה סקריפט קטן שהיה בודק כל יום באתר של צה”ל אם כבר החזירו את בורקס הנבטים לשק”ם? (בחיי שהיה כזה דבר פעם). הרי במקום לקבל את המידע הנחשק על המאפה השמנוני היינו נתקלים בחומה בצורה של סקריפט של אינקפסולה, וזה היה מחבל במאמצינו הקולינרים. וכידוע: אין דבר העומד בפני המאפה.

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

$google-chrome –headless –dump-dom “https://www.idf.il”

אנחנו בעצם “מריצים” דפדפן ללא ראש (headless browser, קרי, בלי שום אלמנט גרפי) ומקבלים את הפלט הנחשק כאילו נולדנו עם מנוע ג’אווהסקריפט ביד:

<!DOCTYPE html> <html lang=”he” dir=”rtl” itemscope=”” itemtype=”http://schema.org/Article” class=”fp-enabled” style=”overflow: visible; height: initial;”><head> <meta charset=”utf-8”> <meta name=”viewport” content=”width=device-width, initial-scale=1.0”> <meta name=”google-site-verification” content=”-aed_JEVSXadFT3T1QonvZ1sY75bdpIoISagqMGYYGo”> <link rel=”canonical” href=”https://www.idf.il/”> …

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

בונוס - איך לגרום למעקף הזה לעבוד עם כלים אוטומטים בצורה שקופה

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

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

קודם כל, נפתח קובץ ונקרא לו בשם המפוצץ incaproxy.php ונשים בו בעדינות את השורה הבאה:

<?php echo shell_exec(‘google-chrome –headless –dump-dom “’.$_SERVER[“REQUEST_URI”].’”’);

אחר כך נפעיל אותו כשרת שמאזין בפורט 6666 (או שתבחרו כל פורט פנוי אחר):

$php -S 0.0.0.0:6666 incaproxy.php

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

$curl -k -x http://0.0.0.0:6666 “http://www.idf.il”

וזה כל הקסם.