Logo

רד-בורד: ארכיון

ראשי > אבטחת מידע > raw sockets+ promiscious mode

29/05/2007 17:25:36 bla27
שלום,

חשבתי לבנות sniffer . אני יודע להשתמש ב- Winsock אבל אין לי ניסיון גדול בכתיבת ישומי רשת.

מישהו יוכל להפנות אותי למקור מידע שיראה לי איך להגיע ל promiscious mode ?

אה ואם מישהו כאן גם מכיר מדריך טוב ומומלץ ל- raw sockets זה יהיה נחמד.

עריכה:

מצאתי את האתר שהוזכר כאן בהודעה אחת:
http://www.security-freak.net/raw-sockets/raw-sockets.html
יש בו הסברים ומצגות מפורטות והוא נראה טוב אז בינתיים אני אתחיל ללמוד ממנו.

אם מישהו שמבין בנושא יוכל לתת חוות דעת על האתר זה יהיה נחמד וגם רציתי לדעת אם מה שהוא אומר יהיה נכון גם ל- winsock ולא רק ל- berkley sockets כי אני משתמש בווינדוס ולא בלינוקס.

עוד עריכה: טוב אני בכלל לא רואה במדריך ל- sniffer שלו שהוא מעביר ל-promiscious mode וגם יש דברים שאני לא כל כך מבין וגם יש לו מבטא הודי אז זה קצת מציק וקשה להבין:)

הנה הקוד ל- sniffer בסיסי שהוא כותב בהתחלה:
http://www.security-freak.net/raw-sockets/sniffer.c

זה יתאים גם ל- winsock? חיפשתי קצת והבנתי שכדי להעביר ל-promiscious mode בווינסוק צריך להשתמש בפונקציה
WSAIoctl עם SIO_RCVALL . זה נכון?

ברמה הכללית הבנתי את ההסבר שלו על ה- Sniffer עד לקוד הזה אבל לא את החלק הזה:

struct sockaddr_ll sll;
struct ifreq ifr;

bzero(&sll, sizeof(sll));
bzero(&ifr, sizeof(ifr));

/* First Get the Interface Index */


strncpy((char *)ifr.ifr_name, device, IFNAMSIZ);
if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1)
{
printf("Error getting Interface index !\n");
exit(-1);
}


כאשר ה- device הוא eth0. אז ifreq מאחסן את ה- device interface ורוצים לגלות את ה- interface index שזה מן מזהה של ה- interface לקרנל? אבל לא הבנתי מה יש בכלל ב- device
?interface

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

תודה רבה


[ההודעה נערכה על-ידי bla27 ב-29/05/2007 21:09:28][ההודעה נערכה על-ידי bla27 ב-29/05/2007 21:09:57]
29/05/2007 21:51:09 T4uSBaZ
זה אחלה אתר, אבל אכן קצת קשה להבין בגלל המבטא.
מהו המצב הזה, promiscious mode?
אני מניח שזה מצב שגורם לכך שתיקח את כל הפאקטים, או אומר למהדר "אל תכניס אף האף שלך לפאקטים שלי" (ציטוט מתוך IKP) : )

בכל אופן, אני ממליץ לך על עוד 2 טקסטים על RAW_SOCKETS בעברית, הם מלמדים את החומר הנלמד בבסיס, והדוגמא לסיןם היא בניית סניפר. (אני חושב שמותאמים לווינדוס?)
שניהם נמצאים בגליון IKP_4 ו IKP_5.
הורד את שני הגיליונות, אם תרצה אני יעלה לך את הגיליונות / טקסטים..

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

הממ לגבי השאלה האחרונה לא הבנתי ממש. תוכל לנסח מחדש?
29/05/2007 22:40:06 bla27
זה מצב שמאפשר לקבל פאקטות שעוברות דרך הכבל אבל גם כאלה שמיועדות למחשבים אחרים ברשת ולא לשלך... וכדי להסניף מידע מרשת עם switch למשל אז צריך את זה בין השאר(תקנו אותי אם אני טועה).

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

בשאלה האחרונה דיברתי על חלק בקוד שלא הבנתי למה הוא משמש. בחלק הזה בעזרת סטרינג בשם device (ששווה ל- eth0.. הכוונה ל- ethernet?) מכניסים למשתמש מסוג ifreq את פרטי device interface ואז איתו מגלים משהו שנקרא interface index שאחר כך מכניסים ל- Struct מסוג sockaddr_ll. אז בקיצור לא הבנתי מה זה ה- device interface.

נראה לי שהסברתי ממש גרוע.. בכל מקרה פשוט התכוונתי שלא הבנתי מה כותב הסניפר עשה בחלק הקוד שכתבתי בהודעה הקודמת שמתבצע לפני שעושים bind ל- Socket.

אה ובקשר לווינדוס ממה שהבנתי חוץ מה- include ואולי ה- promiscious mode אין הבדל בקוד.
30/05/2007 09:26:37 Pose_69
מהמעט שקראתי על Raw Sockets ו Windows, הנושא קצת יותר בעייתי מבלינוקס.

יש כל מיני הגבלות שמייקרוסופט הטילו על ה Raw Sockets,
תחת Windows 2000/XP אתה יכול "להסניף" פאקטים נכנסים,
אבל לא תוכל ללכוד חבילות יוצאות של UDP ו ICMP.
אם יש לך SP1 על ה Windows לא תוכל ללכוד חבילות יוצאות בכלל. דבר שתוקן ב SP2.

ו Windows 98/ME/NT לא נראה לי תומכים ב Raw Sockets

הדרך היחידה ללכוד חבילות נכנסות\יוצאות ללא הגבלות ובכל הגרסאות זה דרך WinPCap שזה מעין דרייבר שהוא הרחבה למערכת הפעלה.
אבל זה דורש התקנה על המחשב ממנו אתה מריץ את ה Sniffer.[ההודעה נערכה על-ידי Pose_69 ב-30/05/2007 16:26:18]
30/05/2007 14:34:50 bla27
זה דורש רק התקנה או גם שימוש ב- API שלהם?(שאת זה אני לא רוצה מן הסתם כי את התוכנה אני כותב למטרות לימוד)
30/05/2007 23:41:05 Hypathia
1. כן ניתן להסניף UDP\ICMP בRAW SOCKETS
2. אתה אכן צריך להשתמש בפנקציה WSAIoctl עם הדגל SIO_RCVALL כדי להגדיר את המוד של הסוקט.
השאלה
באיזה חלק נתקעת?
31/05/2007 10:45:14 bla27
כבר אין לי את הבעיה שהייתה לי קודם.

חשבתי בהתחלה ללכוד חבילות בשכבה השנייה עם מסגרת ethernet אבל ראיתי שב- windows עם winsock בלבד אי אפשר ואפשר רק ברמת ה- IP וכרגע זה לא משנה לי. למרות שחשבתי שאחרי שאני אסיים לעבוד על הסניפר אני אנסה לעשות DNS Spoofing ולזה אני צריך ARP Poisoning.. זאת אומרת גישה לשכבה השניה.

אה בעצם יש לי שאלה.. ראיתי שבמקומות מסויימים אנשים כותבים על סניפרים שתופסים חבילות יוצאות ולא רק נכנסות. איך?

כלומר ב promiscious mode, הסניפר לוקח בין השאר גם חבילות שמגיעות למחשב אבל לא מיועדות אליו אבל איך לוכדים חבילות יוצאות?

תודה על העזרה[ההודעה נערכה על-ידי bla27 ב-31/05/2007 10:46:32]
31/05/2007 21:09:35 Hypathia
בשיטת הנדונה אתה מסניף גם חבילות יוצאות.
01/06/2007 13:33:35 HLL
ציטוט:1. כן ניתן להסניף UDP\ICMP בRAW SOCKETS
2. אתה אכן צריך להשתמש בפנקציה WSAIoctl עם הדגל SIO_RCVALL כדי להגדיר את המוד של הסוקט.
השאלה
באיזה חלק נתקעת?

יפתחיה, וואלה? אני זוכר שב 98 זה לא היה אפשרי (או שב XPSP0 ...) באיזה גרסאות של חלונות הדבר הזה נתמך?
וזה Raw socket מלא כאילו או שהוא תופס רק IP?[ההודעה נערכה על-ידי HLL ב-01/06/2007 13:35:24]
01/06/2007 15:18:17 bla27
זה בווינדוס בשימוש בווינסוק אז זה תופס ב- Network Layer אם לזה אתה מתכוון.. ip או icmp. אם זה היה בלינוקס אז בקלות הייתי יכול לתפוס גם את החבילות עם ה- header של ethernet.

דרך אגב כדי לבצע Arp Poisioning אני חייב להשתמש ב- WinPCap?[ההודעה נערכה על-ידי bla27 ב-01/06/2007 16:34:08]
01/06/2007 17:56:54 Hypathia
הלל,
עבד לי בXP SP2 (אם אני לא טועה)

הכוונה מלא? תופס הכל החל מהIP האדר.[ההודעה נערכה על-ידי Hypathia ב-03/06/2007 22:10:15]
01/06/2007 18:28:11 bla27
מה בנוגע ל- ARP Poisioning? אי אפשר לשלוח הודעות ARP עם winsock נכון? אני חייב WinPCap?

דרך אגב תודה רבה על העזרה
עמודים: 1