וכל מיני דרכים לעקוף אותם.החיסרון של זיהוי לפי IP, הוא שאנשים שנמצאים מאחרוי אותו
proxy נראים כאילו באו מאותו מקור.
יש יוצרי סקרים שחושבים שהם חכמים ועוקפים את הבעיה, הproxy
שומר מידע על הIP המקורי ושולח אותו הלאה, אפשר לבדוק לפי IP
מקורי אפילו שיש proxy. ואפילו שבחבילה עצמה בשדה from ip
רשום רק הip של הproxy.
כמובן שאני יכול על המחשב שלי להתחזות לproxy שיושב מאחוריו
מחשב דמיוני כרצוני ולשלוח חבילות כרצוני ולהצביע פעמים רבות.
אבל המקרה היותר נפוץ הוא שבעת חסימה על פי IP חוסמים באופן
גורף, וכל מי שנמצא מאחורי proxy אחד מקבלים ביחד קול אחד בלבד.
אם המערכת נבנתה כראוי לפרוץ את זה, זה ממש לא טריוויאלי.
משום שההצבעה מתבצעת מעל פרוטוכול tcp/ip אי אפשר סתם כך לשלוח
חבילה עם כתובת מקור מזויפת.
כאן המקום להסביר קצת על tcp/ip בשביל ליצור חיבור tcp/ip
הלקוח שולח חבילת syn, השרת שולח לו syn/ack והלקוח שולח לשרת
חבילת ack.
בכל חבילה של tcp יש שני שדות שחשובים לנו: sequence number
וacknoledgment number, או בעברית מספר סידורי ומספר אישור.
מספר אישור הוא המספר הסידורי בחבילה שזה אתה קיבלנו, אנחנו
מאשרים שאכן קיבלנו את החבילה.
כל צד מגריל מספר סידורי ראשוני באקראי(לעיתים יש חוקיות מוגבלת). החבילות הבאות שישלחו יהיה להם מספר סידורי גדול
ב1 מהמספר הסידורי של החבילה הקודמת שנשלחה מאותו צד.
אם אנחנו מזייפים את כתובת המקור לחבילה שאנו שולחים
החבילות שהשרת עונה, לא יגיעו אלינו אלא למישהוא שאנו מזייפים
את כתובתו. כאשר אנו שולחים לשרת בקשת syn הוא עונה
syn/ack אבל אנחנו לא מקבלים חבילה זאת ובפרט לא יודעים מה
המספר הסדורי הראשוני שרשום בה. על כן אנו לא יודעים איך
לשלוח מספר אישור, בהודעת הack שנשלח חזרה לשרת.
מכאן זיוף כתובת מקור בתקשורת מעל tcp איננה דבר פשוט.
ישנם שני דרכים לעשות זאת, אחת להשיג יכולת לקרוא תקשורת יוצאת
של השרת. את זה עושים או ע"י השתלטות על נתב כלשהוא בדרך
לשרת, או ע"י השתלטות על מחשב ברשת מקומית של השרת.
הדרך השניה, היא ללמוד לחזות את המספרים הסידוריים הראשוניים
שיבחר השרת:
מספר סידורי הוא בן 32 ביט, כלומר סתם לנחש אחד, נותן לנו סיכוי
של 1 ל 4 מיליארד.
בתנאים מסוימים, ניתן לצמצם את זה, למשל שרת שמשתמש בsyn-cookies לצורך הגנה בפני syn flood attack, אפשר בקלות
יחסית לצפות את ה5 ביטים העליונים(במימוש הקלאסי, יש גם פתרון
לזה). זה משאיר לנו "רק" 27 ביטים לנחש, סיכוי של 1 ל128
מיליון. במערכות ישנות היה אפשר לצפות בקלות את כל הביטים
במערכות מודרניות זה ממש ממש קשה רוב הזמן.
יש אנשים שיאמרו של 27 ביט זה לא כל כך הרבה, וכדי להצביע
פעם שניה(או שלישית) כל מה שאתה צריך לעשות זה לשלוח 128
מליון נסיונות הצבעה מזויפים.
עם השרת מריץ win98 למשל, אז המספרים הסידוריים הראשוניים,
נקבעים לפי השעון הפנימי שלו, ולחזות אותם זה קל,
או כפי שNMAP אומר:
TCP Sequence Prediction: Class=trivial time dependency Difficulty=1 (Trivial joke) TCP ISN Seq. Numbers: 25B33 25BA7 25C1F 25C97 25D0F 25D87 IPID Sequence Generation: Broken little-endian incremental
|