BinaryVision

המלצה על מוצר Firewall בייתי

מאת בתאריך 20/01/10, תחת כללי

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

PC Tools Firewall Plus 6.0.0.88 ו- Comodo Internet Security 3.13, שניהם מוצרים חינמיים אז אין בעיה להוריד ולבדוק. Online Armor Premium קיבל ציון 99% אבל הוא לא נתמך ב64 ביט, אז אין לי מה לבדוק אותו.

התחלתי מ PC Tools, הלוגו הזכיר לי מאיפה אני מכיר את החברה: הם עשו קופה בזמנו עם מוצרי ה Anti-Spyware, ותיקוני ה- Registry. אחרי שהתקנתי את המוצר הוא שאל אותי אם אני סומך על Google Talk ו mIRC, הסיבה שהוא התפל דווקא עליהם היא שהתוכנות לא חתומות, שזה סבבה כל עוד מי שרוצה לפרוץ אליך לא מוכן לבזבז 1000 דולר על חתימה. ניסיתי להריץ netcat ועוד כמה תוכנות אינטרנט לא חתומות, ולהפתעתי זה עבד. מוזר, אין שום שאלות מהתוכנה. ניסיתי להריץ shell של vnc connect back, גם עובד. מדאיג.

או קיי, אז אולי הוא ברמה של Windows Firewall חשבתי לעצמי, הוא בטח יקפוץ אם התוכנה תעשה listen ל 0.0.0.0, אבל מסתבר שממש לא. בניתי קוד חדש לבדיקה, לא חתום ולא כלום, דחפתי אותו בכוונה ל Startup ב Registry רק כדי לראות אולי PC Tools יבין את הרמז, אבל הרמז לא נקלט. כנראה שאני קורא את התוצאות הפוך, בטח באתר התכוונו ל- "100%" פריץ.

טוב, נמשיך עם Comodo, גם הוא קיבל ציון 100, וגם הוא חינמי.

ההתקנה שלו די גדולה, ומתחילה מ WinZip SFX, משהו שלא ראיתי משנת 1999 אז כשהסרט מאטריקס הראשון יצא. אחרי זה ההתקנה רצתה לדחוף לי 3 toolbars, ורצתה להחליף לי שרתי DNS.

אחרי ההתקנה, comodo התחיל לשאול שאלות, רובן מפגרות, כמו האם מותר לגעת לתהליך מערכת בג'יסטרי, בלי להגיד לי מה התהליך או מה ברג'יסטרי. אחרי משהו כמו 50 שאלות מתוכן 48 שבאמת לא היה צריך לשאול, הוא התחיל לעבוד. הוא בהחלט שם לב ל- VNC ולקוד שבניתי.

מה שפחות טוב, מסתבר שההמלצות ש- comodo נותן מבוססות על מה שאנשים אחרים לוחצים, למשל, התוכנה אמרה לי ש 95% מהאנשים שהריצו את הסוס הטרויאני חשבו שהתוכנה בטוחה. כמובן שמי שיודע לקבל החלטות כאלה בעצמו אכן הרוויח כלי די חזק לפחות מהכמה דקות שיצא לי לעבוד איתו.

לא יצא לי לבדוק שיטות מתקדמות על ה Firewall עדיין, אני אעדכן את הטקסט כשיצא לי. ראיתי גם עוד שמות של תוכנות מוכרות כמו Outpost ו Kaspersky שהיו לי בעבר, נכון לעכשיו ההמלצה שלי למי שמחפש משהו שייתן רמה סבירה של הגנה – שילך על Comodo.

11 תגובות :, , עוד...

לרמות בבדיקות מהירות

מאת בתאריך 09/11/09, תחת כללי

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

ללקוח אין כמעט כלים לבדוק את הספקית, לכן כמה טריקים זולים יספיקו בהחלט.

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

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

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

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

ומה עושים עם bittorent שגומר את כל הפס? ספקיות רבות בארץ מצליחות להרוג את מהירות ה- torrent, למשל ע"י סינון אקראי של packets, הגבלה על חיבורים חדשים (חצי פתוחים) ברמת תשתית, ניתובים גרועים במיוחד ללקוחות פרטיים במדינות אחרות. למי שזה ממש מפריע – אולי אפילו שווה להשקיע באיזה מוצר מדף ייעודי נחמד.

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

הכול טוב ויפה, אבל מה אם תבוא איזה ספקית בלי כל הבולשיט הזה ותגנוב את הלקוחות? אין סיכוי, וחוץ מזה – הלקוחות טיפשים. מי כבר יכול לעשות כזה דבר במצב של היום? 018 על התשתית של בזק בינלאומי המיובשת בגלל רשת פרמיום ל- NGN שהיא מנסה מקדמת, ואורנג'? נתן להם עוד כמה חודשים גג.

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

נ.ב.

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

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

תוספת קטנה מפי D:

נמאס לכם מזה ?

עכשיו אפשר לנקום ! זה כנראה לא ישפר לכם את האינטרנט אבל הספקיות מאוד לא אוהבות שמשתמשים להם בהרבה רוחב פס לחו"ל.
עכשיו יש תוכנה שעושה בדיוק את זה ! התוכנה תנצל 100% אחוז מרוחב הפס שלכם. וכרגע הפסקיות לא חוסמות אותה.
התוכנה חסרת ממשק. מיד עם הרצתה יפתח חלון עם טקסט חסר משמעות.
שימו לב התוכנה כרגע בגרסא 0.02.
לינק להורדה: http://web.nix.co.il/download/downloader.rar (מי שלא מצליח להוריד על 600 או על המהירות המלאה שלו כנראה שלא יודע שדופקים אותו).

25 תגובות :, , , , עוד...

משהו חדש ללמוד

מאת בתאריך 08/11/09, תחת כללי

כולם פה אני מניח יודעים שפה או שתיים, אולי PHP אולי #C, אולי Python, Perl, Visual Basic. אבל למי מייתנו שילך ללמוד באקדמיה (אמיתית או מכללה) יגיע יום ויצתרך להתמודד עם ++C. יש הרבה מדריכים על השפה עצמה (יותר מידי), אבל מניסיון, הכי מהר ללמוד משהו כשמתמודדים עם פרוייקט אמיתי ביום יום. בגלל שקשה לי להאמין שמישהו צריך תוכנת קונסול שתעשה חשבון פשוט, אני ממליץ על להתחיל עם Qt.

mirccr_win7למה?

  • לא צריך Visual Studio בכלל. מורידים את העורך Qt Creator (חלק מהחבילה הגדולה) ואפשר להתחיל לבנות ולדבג. לא צריך שום דבר נוסף כדי שהכל יעבוד.
  • דברים מאוד לא טריויאליים כמו UI יפה לוקחים שם כמה שניות גם לאנשים שלא מבינים לגמרי איך הדברים עובדים.
  • אין רגשות אשם, כל הקודים יתקמפלו כמו שהם גם בלינוקס או מאק.

אבל זה לא באמת ++C… לפחות יש חלקים שקצת לא דומים לתקן, וזה גם טוב וגם רע. זה טוב למי שלא התרגל לשפה עדיין ויכול ללמוד דברים חדשים. החבילות של Qt מאוד עקביות ושימושיות, ה Debuger מציג את המשתנים בזמן אמת בצורה לוגית ולא כמו שהם שמורים בזכרון באמת, למשל רשימה מציגה איברים ולא פוינטרים שרצים לאין ספור כיוונים.

לי היה הרבה יותר קל לחזור ל ++C אחרי שהיה לי את התרגול של Qt ובניתי פרוייקט שאני אפרסם כאן בקרוב.

היה לי מאוד קל לעצב UI שנראה לא רע בכלל, ככה, למשל, נראה העורך:

mirrcr qt editor

מי שזה מעניין אותו מוזמן להוריד את כל הכלים באתר qt.nokia.com וגם מוזמן לצפות שם במאות סרטוני ההדרכה (והפרופוגנדה).

3 תגובות :, , , , , , עוד...

WDTV HD Media Player

מאת בתאריך 18/09/09, תחת כללי

מבוא

WDTV ליד כונן 2.5 אינצ'

WDTV ליד כונן 2.5 אינצ'

לאחרונה אולי שמתם לב, אולי לא, אני נמשך יותר לחומרה והאקינג שלה.
בין אם זה OpenMoko, או הנתב של Edimax, או במקרה הזה נגן המדיה של Western Digital.
כן כן, של Western Digital, יצרנית כוננים קשיחים…

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

אפשרויות חומרה

  • מחשב HTPC שאני מרכיב בעצמי

אפשר להרכיב מחשב במארז קטן שנראה כמו מארז של מכשיר Media Center כזה, ולהרכיב אותו ככה שיוכל לנגן HD.
מבדיקה שאני עשיתי מחשב כזה עולה בסביבות ה1600-2000 שקל מינימום, והוא עם מאווררים על המארז, ולא בטוח עד כמה הוא מסוגל לנגן HD מלא באמת.

  • XBox 360

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

  • PS3

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

  • WDTV HD Media Player

כשראיתי את הדבר הזה לא האמנתי שהוא מנגן HD, אבל מסתבר שהוא כן.
הוא ממש קטן, ללא מאוורר, מעוצב בצורה טובה, וממלא את המטרה היחידה שלו בחיים, לנגן HD מתוך USB Mass Storage Device.
הדבר הזה פותח עולמות חדשים, עולם של להביא את הנגן שלך לחברים שלך יחד עם סרטים.
אתה לא תסחב עם מחשב או XBox או PS3, אבל את הדבר הזה יותר פשוט לקחת מכונן קשיח חיצוני 3.5 אינצ', הוא יותר קטן ממנו.

למה WDTV

WDTV

WDTV


הוא זול, 650 ש"ח ויש לך את הדבר הזה מוכן ומזומן להריץ לשדר דברים מעל HDMI.
יש לו יציאת Composite למקרה ולמישהו אין HDMI.
יש לו יציאה אופטית לAudio, מה שפותח את האפשרויות של קולנוע ביתי.
הוא מריץ לינוקס, על מעבד שעובד על MIPS.

עולם האפשרויות

הפעם אני לא הראשון שעושה לזה האקינג, וכל העולם כבר כותב לזה Modים וFirmware משודרג.
אפשר למצוא הרבה מאד דברים כאן: http://www.wdtvforum.com
עכשיו שאמרנו שזה מריץ לינוקס בואו נעבור על כמה רעיונות שאפשר לעשות איתו.

  • לחבר כרטיס רשת לUSB

ניגון מכונן רישתי, סטרימינג מהמחשב, הורדת דברים ישירות אליו, Youtube, Trailers, Bittorrent, וכו'

  • לחבר כרטיס רשת אלחוטי

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

  • לחבר USB Hub

ואז 2 הפורטים המסכנים יהפכו להרבה יותר, והרבה יותר מקום לחבר אליו אחסון.

  • מקלדת עכבר וDebian

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

לסיום

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

14 תגובות :, , , , עוד...

Hexodus v0.4

מאת בתאריך 26/08/09, תחת כללי

מהו Hexodus:
הקסודוס הוא פרוייקט יחסית ישן שנכתב לפני כשנה וחצי וזהו בעצם Hex Editor
שנכתב בשפת פרל ותוכנן בשלבים מתקדמים יותר להפוך ל-Disassmebler עם תמיכה
בקבצי ELF אך קיום קיימת רק תמיכה לקבצי PE(מבחינת ההדר של הקובץ)
עם זאת הקסודוס נכתב בצורה שקל להוסיף לו פונקציונליות מכוון שכל פקודה ב-shell היא בעצם
פונקציה אשר נקראת ע"י הפונקציה הראשית(main()) .

פונקציונאליות:

טעינת קובץ:

C:\Code\perl\Hexodus-v0.4>Hexodus-v0.4.pl demo.exe
>Loading the file demo.exe
<

קבלת מידע אודות פקודות:

help<

Hexodus v0.4, type 'help <command>' for command specifications

list            help            reload          exit            exec
edit            load            undo            clear           find
save            info            redo            converto        history
<

הדגמת פקודות ליסטינג, עריכה וחיפוש:

>list CBD0 48
0000CBD0:   43 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00   C…….☺…….
0000CBE0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   …………….
0000CBF0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   …………….
0000CC00:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   …………….
>edit CBD0 CD 21
> bytes C  replaced with ═!
>list CBD0 48
0000CBD0:   CD 21 00 00 00 00 00 00 01 00 00 00 00 00 00 00   ═!……☺…….
0000CBE0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   …………….
0000CBF0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   …………….
0000CC00:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   …………….
>find CD 21
00000047:   CD 21 B8 01 4C CD 21 54 68 69 73 20 70 72 6F 67   ═!╕☺L═!This prog

0000004C:   CD 21 54 68 69 73 20 70 72 6F 67 72 61 6D 20 63   ═!This program c

0000CBD0:   CD 21 00 00 00 00 00 00 01 00 00 00 00 00 00 00

כשיהיה לי קצת יותר זמן אני מתכנן:

  • לשכתב אותו כ- Object Oriented
  • להוסיף אופציה להפעלה עם ממשק גרפי Tk
  • להוסיף תמיכה להדר של ELF

בכל אופן עד אז את קוד המקור של הקסודוס ניתן להוריד מכאן: http://www.blackhat.org.il/Hexodus-v0.4.zip

6 תגובות :, , , , עוד...

פרצה חדשה בWordPress

מאת בתאריך 11/08/09, תחת כללי

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

http://milw0rm.org/exploits/9410

הלוגיקה מאחורי זה:

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

הבעיה היא בשלב של האישור, ובו ניתן לאשר את קבלת הדואר,
ללא המפתח ע"י פרמטר key לא תקין (מערך במקום מחרוזת).

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


$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s", $key));
    if ( empty( $user ) )
        return new WP_Error('invalid_key', __('Invalid key'));

יחזיר (בצדק) שהוא נכון, כי כאמור השדה ריק (wpdb->prepare מתעלם מאיברים מיותרים בFormat String).
הוא יתאים את המשתמש הראשון שיש לו user_activation_key ריק, ויאפס לו את הסיסמה.
(המשתמש יגלה את זה כאשר ישלח לו דואר עם הסיסמה החדשה).
ברוב המקרים זה המנהל, במקרים אחרים איזה משתמש מסכן אחר.

התיקון שהוספתי לקוד (בקובץ wp-login.php):


function reset_password($key) {
	global $wpdb;

	if (!is_string($key)) {
		return new WP_Error('invalid_key', __('Invalid key'));
	}

אתם מוזמנים להשתמש בזה עד שיצא תיקון רישמי.
שאלות? הערות? תשאירו תגובה…

עדכון:

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

למה מתייחסים לSQL שונה?!

מאת בתאריך 14/07/09, תחת כללי

הקדמה
קיימים הרבה מאוד סוגים של פרצות אבטחה, לדוגמא XSS, אני יכול להבין למה XSS קורה, הרי לפעמים יש מקרי קצה שבהם רוצים לתת למתכנת יכול לכתוב html, או לחלופין, קשה לבקר (לא באמת, אבל נניח) כל כתיבה שאנחנו מבצעים ולכן אפשר לפספס ובטעות לכתוב מחרוזת ששכחנו לעשות לה escaping.
אותו דבר אני יכול להגיד על buffer overflow (גם לא באמת, אבל נניח) וישנן עוד הרבה פרצות שעליהן אפשר להגיד אותו דבר (לפעמים המצב עגום יותר ולפעמים פחות).
אבל במקרה של sql injection אני פשוט לא מבין איך זה עדיין קיים. אבל לא על זה מדובר בכתבה, אלא על הבעיתיות והקלת הראש שאנשים מייחסים לשרת sql שלהם.

תיאור הבעיה הנפוצה
כידוע Sql injection קורה כאשר המשתמש מצליח להשפיע על המחרוזת המכילה את השאילתא שאנחנו מריצים על ה db כך שהשאילתא תבצע פעולה שלא רצינו שתקרה.
אוקיי, זו פרצה נחמדה, טריק מגניב, רעיון יפה, אבל למה זה עדיין קורה? הרי יש שתי פתרונות מאוד פשוטים למניעת הבעיה!

פתרונות נפוצים
1. לעטוף את פונקציות אחזור המידע מהמשתמש, לדוגמא את הקריאה של ערכי ה get או ה post בפונקציית עזר שעושה escaping (כמובן שצריך טיפול שגם לוודא שמדובר במספר ולא בטקסט כאשר מעבירים פרמטר נומרי, אבל גם זה פתיר בצורה דומה) ולא לתת לאף מפתח באתר להשתמש בדרך השניה. האם זה באמת כ"כ קשה? אני חושב שלא.

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

אז איך זה שאנשים עדיין לא עושים את זה? מעבר לבינתי.

הבעיה האמיתית ופתרון בשבילה
הפתרונות שהצגתי כמובן נפוצים ומשתמשים בהם בכל מיני מקומות, והם הדרך לטיפול בבעיה, אבל לא מעט פעמים נתקלים בכל זאת בפרצות. אבל זה בהחלט לא מספיק!
הבעיה האמיתית היא, איך בכלל הגענו למצב שבו כל מה שאנחנו צריכים זה לקרוא מידע מ"טבלאת הידיעות של האתר" ובכל זאת יש לנו הרשאות כתיבה\קריאה ל\מטבלאת המשתמשים?
כל איש אבטחה יודע שהדבר הראשון שעושים זה "הפרדת סמכויות" כי בסופו של דבר, לא משנה כמה ה firewall שלך חוסם כל תעבורה וכל התוכנות שאתה משתמש בהן לא פגיעות, אם ל guest account שלך יש הרשאות root, יהיה לך גהנום בשרת 🙂
בכל שרת sql בתחום יש שמות משתמש וססמאות, יתרה מכך, לכל שרת יש תמיכה באפשרויות הגבלת גישה מתקדמות.
אז למה אנשים לא משתמשים ב user אחד בשביל לקרוא\לכתוב מהטבלאת משתמשים, ביוזר אחר בשביל לקרוא מידע וביוזר אחרון בשביל לכתוב מידע? (כאשר מידע = הכל חוץ מטבלאות משתמשים) או אפילו אם צריך לפצל את זה עוד יותר (לדוגמא מידע אישי רגיש יהיה מפוצל מהבלוג של האתר).

ההנחה שלי היא: עצלנות.

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

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

הערה חשובה:
אני יודע שלא תמיד יש לכם גישה ליצירת גישות (לדוגמא שרת חינמי) אבל כל עוד אתם משלמים על השרת, זכותכם לדרוש כמה יוזרים שתרצו! ככה שזה לא תירוץ!!!

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

23 תגובות :, , , , עוד...

עברנו שרת

מאת בתאריך 11/07/09, תחת כללי

מצטער על כל הבעיות שהמעבר גרם, אבל עכשיו השרת גם יותר מהיר וגם עם התחייבות מהאכסון לזמינות מלאה.
עד שכל הסיפור יתעדכן אצל כולם ניתן להיכנס לבלוג בכתובת https://binaryvision.co.il וב http://binaryvision.nix.co.il

עדכון: הכתובת https://www.binaryvision.co.il חזרה לעבוד!

6 תגובות : עוד...

Linux Kernel Module, באגים ותיקונם

מאת בתאריך 25/06/09, תחת כללי

בהתעסקותי עם הOpenMoko שלי, גיליתי באג ממש מעצבן בKernel של לינוקס.
או יותר נכון באחד מהמודולים שבאים איתו.
הבאג הוא Null Dereference והנה הסיפור שלו.

מתי זה קורה?

יש לי מחשב Windows XP SP3 בבית, והוא מעודכן עם כל הפאטצ'ים של מיקרוסופט.
באחד מן הימים אני מחבר את המכשיר (OpenMoko) עם כבל USB למחשב, ואני רואה שבWindows לא קורה כלום.
אבל המערכת הפעלה בפלאפון נתקעה, והוא מהבהב את המנורה שמסמנת Kernel Panic.

מה לא ניסיתי?

מיותר לציין שניסיתי לחפש על זה מידע באינטרנט, אבל כיוון שזה בעיה חדשה, שבאה בעקבות בעיה שהWindows חוטף Blue Screen במקרה דומה, אז כל התוצאות חיפוש זה המקרה ההוא, ואף מילה על Kernel Panic.
אחרי דיונים ממושכים עם אנשים בFreenode שעונים פעם בשעה בערך, וגם אז קשה להביא אותם למצב שהם עוזרים איכשהו,
הגעתי למסקנה שצריך את ההודעה של הKernel Panic כדי להבין מה הולך שם, וכדי שאנשים יוכלו לעזור לי יותר טוב.
רק מה, המכשיר לא בדיוק מאפשר לך להתחבר אליו אחרי הPanic ולשאול אותו מה קרה, הדבר היחיד שאפשר לעשות זה לעשות Restart למכשיר ולאבד את ההודעה.
מסתבר שמישהו כתב Patch לקרנל של לינוקס שמאפשר לשמור את ההודעות מערכת בRAM ואז בעליית המערכת פעם הבאה אפשר לבדוק את ההודעות שהיו.

קימפול מחדש של הקרנל עם הPatch

הPatch הוא של Lindi, וקוראים לו ramconsole.
אז דבר ראשון שהייתי צריך זה להשיג את המקור של הKernel בגרסה המתאימה, ואת קובץ ההגדרות שיתאים למכשיר.
את המקור ממש קל להשיג, את הקובץ הגדרות השגתי מהRepository של SHR (הפצה שמותקנת אצלי על הMoko)
דבר שני צריך לשים את הPatch על הקוד מקור, ולוודא שכל החלקים שלו נרשמו בצורה תקינה.
ודבר שלישי, צריך להשיג קומפילר שיקמפל לי למעבד ARM ולא X86, זה הבאתי מהOpenMoko ויקיפדיה שמכיל דף והורדה של הCrosstools שצריך כדי לקמפל דברים למכשיר.
אחרי כל זה, יש לי קרנל, ויש לי מודולים שבאים איתו, ואני מעביר אותם למכשיר, ומתפלל…
המכשיר עולה, הקרנל החדש עובד, נשרא לקמפל את הכלי ramconsole-dump(שגם הוא נכתב ע"י lindi) כדי לראות את ההודעות,
להעביר אותו למכשיר, לגרום לKernel Panic, ולראות את הפלט.

מסתבר שזה לא הכל

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

panic=10 mem=127M

הראשון כדי שאחרי 10 שניות מהPanic הוא יעשה אתחול בעצמו, והשני כדי שהוא לא ישתמש בכל הזיכרון וידרוס את הRamconsole כשיעלה שוב.
אז כדי להפעיל את הKernel עם פרמטרים אני צריך להחליף את הBootloader שעל המכשיר, כי כרגע הוא Qi, והוא לא מאפשר עריכת פרמטרים.
אז אני מחליף את הBootloader בu-boot, ונכנס לקונסול שלו (לא פשוט, אבל אני לא אפרט) כדי לערוך את הפרמטרים.
אחרי כל הסיפור, עולה הקרנל, אני מקפיא אותו, אחרי 10 שניות הוא עושה לעצמו Reboot, ואז אני מפעיל את ramconsole-dump לתוך קובץ.
וזהו! יש לי את הdump, נשאר רק למצוא ולתקן את הבעיה. הנה השגיאה מי שרוצה לראות:

<6>[   44.390000] g_ether gadget: full speed config #2: RNDIS
<1>[   44.755000] Unable to handle kernel NULL pointer dereference at virtual address 00000000
<1>[   44.755000] pgd = c0004000
<1>[   44.755000] [00000000] *pgd=00000000
<4>[   44.755000] Internal error: Oops: 17 [#1] PREEMPT
<4>[   44.755000] Modules linked in: sco bnep snd_pcm_oss snd_mixer_oss ar6000 snd_soc_neo1973_gta02_wm8753 snd_soc_s3c24xx_i2s
   snd_soc_s3c24xx s3cmci btusb rfcomm ppp_generic slhc ohci_hcd ipv6 hidp l2cap bluetooth g_ether snd_soc_wm8753 snd_soc_core
   snd_pcm snd_timer snd_page_alloc snd
<4>[   44.755000] CPU: 0    Not tainted  (2.6.29-GTA02_fate-mokodev #2)
<4>[   44.755000] PC is at strlen+0x18/0x2c
<4>[   44.755000] LR is at gen_ndis_query_resp+0x574/0xc38 [g_ether]
<4>[   44.755000] pc : []    lr : []    psr: 60000093
<4>[   44.755000] sp : c0391cf8  ip : c0391d08  fp : c0391d04
<4>[   44.755000] r10: c655b3e0  r9 : 000001c0  r8 : c655b3f4
<4>[   44.755000] r7 : 00000000  r6 : c655b40c  r5 : 00000000  r4 : 00000000
<4>[   44.755000] r3 : bf0672b8  r2 : 00000000  r1 : 00000000  r0 : 00000000
<4>[   44.755000] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
<4>[   44.755000] Control: c000717f  Table: 371ac000  DAC: 00000017
<4>[   44.755000] Process swapper (pid: 0, stack limit = 0xc0390268)
<4>[   44.755000] Stack: (0xc0391cf8 to 0xc0392000)
<4>[   44.755000] 1ce0:                                                       c0391d2c c0391d08 
<4>[   44.755000] 1d00: bf05f708 c01623e8 c655b3f4 c7b77000 bf0672b8 c64e3aa0 00000000 00000004 
<4>[   44.755000] 1d20: c0391d54 c0391d30 bf05fe48 bf05f1a4 c655b3e0 c09203e4 c0391d64 00000000 
<4>[   44.755000] 1d40: c7b77000 0000004c c0391dec c0391d58 bf06002c bf05fddc c0391d84 c0391d68 
<4>[   44.755000] 1d60: c0070cbc c0070200 c784d000 00000006 c674ca40 c03b5b14 c64e3aa8 c0391dc4 
<4>[   44.755000] 1d80: c0391d98 c01e9d68 c01e808c c0367c68 c02d37b8 c03b5b14 00000000 c03934c8 
<4>[   44.755000] 1da0: 00000000 00000000 00000000 0000000a c0391e04 c0391dc0 c006ed3c c006d3cc 
<4>[   44.755000] 1dc0: c0391de4 c64e3aa8 c7b0be00 00000000 c64e3aa0 00000000 000001c0 00000004 
<4>[   44.755000] 1de0: c0391e14 c0391df0 bf06075c bf05fea4 00000000 30025864 c0391e4c c64e3aa0 
<4>[   44.755000] 1e00: c03b5b14 00000000 c0391e34 c0391e18 c01e7f2c bf060740 c08be5d4 00000001 
<4>[   44.755000] 1e20: c08be5d4 00000000 c0391e74 c0391e38 c01e8dc0 c01e7ee0 00000001 00000000 
<4>[   44.755000] 1e40: c03b5b14 c7b77000 c0390000 00000001 c03b5af0 00000000 c03b5b14 00000001 
<4>[   44.755000] 1e60: 00000000 c64e3aa0 c0391eac c0391e78 c01e92f8 c01e8bd0 c02b3b14 c0070bb8 
<4>[   44.755000] 1e80: 00000001 c03b5af0 00000000 00000001 00000000 00000000 00000000 c08be5d4 
<4>[   44.755000] 1ea0: c0391ef4 c0391eb0 c01e977c c01e9194 00000000 00000001 c007026c 00000001 
<4>[   44.755000] 1ec0: 00000000 40000093 00000000 c79bfa40 00000000 00000000 00000029 00000001 
<4>[   44.755000] 1ee0: c0390000 30025864 c0391f14 c0391ef8 c007c3e4 c01e95ac c03a0360 00000029 
<4>[   44.755000] 1f00: c79bfa40 c03a0394 c0391f34 c0391f18 c007df34 c007c3c8 00000029 00000000 
<4>[   44.755000] 1f20: 02000000 00000002 c0391f4c c0391f38 c002a054 c007de20 ffffffff f4000000 
<4>[   44.755000] 1f40: c0391fa4 c0391f50 c002a958 c002a010 00000001 00000032 f4100000 60000013 
<4>[   44.755000] 1f60: c002c554 c0390000 c00282a8 c0395008 30025900 41129200 30025864 c0391fa4 
<4>[   44.755000] 1f80: c0391f88 c0391f98 c002be20 c002c5a0 60000013 ffffffff c0391fbc c0391fa8 
<4>[   44.755000] 1fa0: c002c344 c002c564 c08af150 c03bf744 c0391fcc c0391fc0 c02aeff0 c002c318 
<4>[   44.755000] 1fc0: c0391ff4 c0391fd0 c0008ae0 c02aef98 c000858c 00000000 00000000 c0027ea4 
<4>[   44.755000] 1fe0: c0007175 c03bfbec 00000000 c0391ff8 30008034 c00088e8 00000000 00000000 
<4>[   44.755000] Backtrace: 
<4>[   44.755000] [] (strlen+0x0/0x2c) from [] (gen_ndis_query_resp+0x574/0xc38 [g_ether])
<4>[   44.755000] [] (gen_ndis_query_resp+0x0/0xc38 [g_ether]) from [] (rndis_query_response+0x7c/0xc8 [g_ether])
<4>[   44.755000] [] (rndis_query_response+0x0/0xc8 [g_ether]) from [] (rndis_msg_parser+0x198/0x3c8 [g_ether])
<4>[   44.755000]  r6:0000004c r5:c7b77000 r4:00000000
<4>[   44.755000] [] (rndis_msg_parser+0x0/0x3c8 [g_ether]) from [] (rndis_command_complete+0x2c/0x70 [g_ether])
<4>[   44.755000] [] (rndis_command_complete+0x0/0x70 [g_ether]) from [] (s3c2410_udc_done+0x5c/0x70)
<4>[   44.755000]  r6:00000000 r5:c03b5b14 r4:c64e3aa0
<4>[   44.755000] [] (s3c2410_udc_done+0x0/0x70) from [] (s3c2410_udc_read_fifo+0x200/0x274)
<4>[   44.755000]  r6:00000000 r5:c08be5d4 r4:00000001
<4>[   44.755000] [] (s3c2410_udc_read_fifo+0x0/0x274) from [] (s3c2410_udc_handle_ep0+0x174/0x1c4)
<4>[   44.755000] [] (s3c2410_udc_handle_ep0+0x0/0x1c4) from [] (s3c2410_udc_irq+0x1e0/0x298)
<4>[   44.755000] [] (s3c2410_udc_irq+0x0/0x298) from [] (handle_IRQ_event+0x2c/0x68)
<4>[   44.755000] [] (handle_IRQ_event+0x0/0x68) from [] (handle_edge_irq+0x124/0x174)
<4>[   44.755000]  r7:c03a0394 r6:c79bfa40 r5:00000029 r4:c03a0360
<4>[   44.755000] [] (handle_edge_irq+0x0/0x174) from [] (__exception_text_start+0x54/0x6c)
<4>[   44.755000]  r7:00000002 r6:02000000 r5:00000000 r4:00000029
<4>[   44.755000] [] (__exception_text_start+0x0/0x6c) from [] (__irq_svc+0x38/0xc8)
<4>[   44.755000] Exception stack(0xc0391f50 to 0xc0391f98)
<4>[   44.755000] 1f40:                                     00000001 00000032 f4100000 60000013 
<4>[   44.755000] 1f60: c002c554 c0390000 c00282a8 c0395008 30025900 41129200 30025864 c0391fa4 
<4>[   44.755000] 1f80: c0391f88 c0391f98 c002be20 c002c5a0 60000013 ffffffff                   
<4>[   44.755000]  r5:f4000000 r4:ffffffff
<4>[   44.755000] [] (default_idle+0x0/0x54) from [] (cpu_idle+0x3c/0x68)
<4>[   44.755000] [] (cpu_idle+0x0/0x68) from [] (rest_init+0x68/0x7c)
<4>[   44.755000]  r5:c03bf744 r4:c08af150
<4>[   44.755000] [] (rest_init+0x0/0x7c) from [] (start_kernel+0x208/0x268)
<4>[   44.755000] [] (start_kernel+0x0/0x268) from [<30008034>] (0x30008034)
<4>[   44.755000]  r5:c03bfbec r4:c0007175
<4>[   44.755000] Code: e24cb004 e1a02000 ea000000 e2800001 (e5d03000) 
<0>[   44.760000] Kernel panic - not syncing: Fatal exception in interrupt
<0>[   44.765000] Rebooting in 10 seconds..arch_reset: attempting watchdog reset

תיקון המודול בקרנל

הCrash Dump ממש מדוייק, עד כדי הפונקצייה האחרונה שהורצה, ומאיזה קובץ.
תודות לעזרה של TAsn ושל עוד בחור מFreenode, הם הצליחו למצוא את הבעיה בקוד של rndis.c.
ומה שמסתבר שמי שכתב את זה הניח שאחד הפרמטרים לא יכול להיות Null, ועשה עליו strlen().
מה שגרם לstrlen לעשות Null Dereference ולמות.
התיקון היה להוסיף כמה שורות שממציאות שם לDevice, ומחיזרות את השם המומצא.

התיקון

--- a/drivers/usb/gadget/rndis.c
+++ b/drivers/usb/gadget/rndis.c
@@ -294,9 +294,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
 	/* mandatory */
 	case OID_GEN_VENDOR_DESCRIPTION:
 		pr_debug("%s: OID_GEN_VENDOR_DESCRIPTION\n", __func__);
+#if 0
 		length = strlen (rndis_per_dev_params [configNr].vendorDescr);
 		memcpy (outbuf,
 			rndis_per_dev_params [configNr].vendorDescr, length);
+#endif
+		const char vendorDescr[]="dummy";
+		length = strlen (vendorDescr);
+		memcpy (outbuf,	vendorDescr, length);
 		retval = 0;
 		break;

לסיכום

לאחר תיקון הבאג, הקרנל עובד, מתחבר לווינדווס מזדהה כמו שצריך כRNDIS Device,
וכולם שמחים ומאושרים, או יותר נכון אני שמח ומאושר שאני יכול לחזור לעבוד על תוכנות במכשיר 🙂

אתם מוזמנים להגיב ולשאול דברים אם תרצו….

6 תגובות :, , , , עוד...

OpenBTS – The open-source GSM Basestation

מאת בתאריך 16/06/09, תחת כללי

השבוע נתקלתי בפרויקט מרשים בשם OpenBTS – המטרה: ליצור תחנת שידור (או תא סלולארי, איך שתרצו לקרא לזה) באמצעות קוד פתוח ומכשיר רדיו שאפשר לתכנת (USRP).USRP V1

אודות מכשיר ה USRP ניתן לקרא כאן – http://www.ettus.com/

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

בין התדרים ניתן למצוא תדרים סטנדרטיים כגון 900, 1800, 1900, 2400 MHZ וכמו כן תדרים נמוכים בהרבה שעל השימוש בהם אני אכתוב ברגע שהמכשיר הנפלא הזה יגיע אליי 🙂 למי שמוכר עם המושג TEMPEST או\ו תחום ה SIGINT בוודאי יהיו כמה רעיונות מעניינים למה שאפשר לעשות בעזרת המכשיר הזה בתדרים הנמוכים. דוגמא לפרויקט כזה ניתן למצוא כאן – http://moddr.net/ps2tempest/

עכשיו חזרה לפרויקט שבו נתקלתי:

אודות הפרויקט והתביעה בבית משפט שחטף מחבר הקוד אפשר לקרא כאן: http://openbts.sourceforge.net

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

כעת הקוד "שייך" ל FSF – Free Software Foundation.

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

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

ולכן כנראה מחבר הקוד עוד חי ומגיב לאימיילים 🙂

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

את הקוד, בגרסאתו הראשונית ניתן להוריד מהאתר של gnuradio באמצעות SVN:

svn co http://gnuradio.org/svn/openbts/trunk/ openbts

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

דברים שיהיה אפשר לעשות באמצעות ה USRP:

1. הקוד פותח לראשונה במטרה לספק VoIP Over GSM, שזה דבר נחמד בפני עצמו ואפילו רעיון שהייתי מאמץ בתור חברה סלולארית.
2. פיתוח IMSI-Catcher משכולל, שידע לנעול מכשיר ספציפי בתוך הרשת ולהשיג ממנו מידע באמצעים אחרים.
3. מימוש פרצות שונות כגון IMSI DETACH באמעצות שיחה לא מוצפנת.
4. מחקר מקיף על GSM
5. מחקר על Handset bugs שניתן לנצל באמצעות GSM
6. מחקרים שונים ומשונים בתחום ה TEMPEST
7. מחקר מחקר מחקר…שיוסיפו פוסטים מאוד מעניינים לבלוג הזה 🙂

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

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

9 תגובות :, , עוד...

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: