سلسلة تعلم tcpdump: الجزء الثالث
الكاتب: بشار | يوم: 01 أبريل, 2010 | التعليقات: 0 | القراءات: - عدد المشاهدات 6٬248
هذا الجزء الثالث والاخير من سلسلة تعلم tcpdump. في هذا الجزء سنغطي إن شاء الله، الاستخدامات المتقدّمة ل tcpdump، باستخدام الفلاتر.
ملاحظة: هذا الجزء بحاجة الى معرفة جيّدة في البروتوكلات والنّظام السادسي عشر.
العوامل التي يتمّ استخدامها في tcpdump
اكبر من >
اصغر من <
اكبر او يساوي =>
اصغر او يساوي =<
لا يساوي =!
وبالطبع اليساوي =
الادوات الشرطيّة
AND
OR
NOT
من خلال الأمثلة التّالية ستظهر أهميّة هذه العوامل والأدوات.
لنفرض على سبيل المثال، أّننا نريد ايجاد جميع الحزم الخاصّة ببروتوكول ICMP وتحديداً رسالة host unreachable. هذه الرّسالة تحمل النّوع 3 والكود رقم واحد (يمكن ايجاد قائمة كاملة بالرّسائل في المصادر). للقيام بذلك نستخدم الفلتر التالي:
tcpdump icmp[0] = 3 and icmp[1] =1
لنشرح الأمر أعلاه خطوة خطوة
icmp[0] = 3: هذا معناه احصر البيانات الملتقطة على برتوكول icmp. المربعات [] تستخدم لتحديد أي بايت من الحزمة نريد مراقبته. البايت الأول في icmp يحتوي على type أو نوع الرّسالة. 3 تعني Destination Unreachable لاحظ أن البايت الأول رقمه صفر. فالعد يبدأ من الرقم صفر صعوداً.
and: تستخدم كمعامل
icmp[1] = 1: هذا معناه احصر البيانات الملتقطة على برتوكول icmp. المربعات [] تستخدم لتحديد أي بايت من الحزمة نريد مراقبته. البايت الثاني (أو فعليّاً رقم 1) يعني كود الرّسالة. و 1 تعني Destination Port unreachable
الشكل-1- يظهر ال ICMP Header.
لننتقل لبروتوكول IP
لنقرض الآن أننا نريد حصرالبيانات الملتقطة على التي تحتوي على ال DF اختصار ل Don’t Fragment فقط. هناك طريقان. هنا التركيز مطلوب جدّاً. في البداية دعنا نلقي نظرة على ال IP header لأنه البروتوكول الذي يحتوي على ال DF. نقوم بعملية العد من البايت الأول (رقم صفر) الى ان نصل بداية البايت الذي يحتوي على DF وهو البايت السابع (أو الرقم 6). نلاحظ كما هو ظاهر في الشكل -2- أن ال DF يقع في البت الثاني من البايت السابع.
لنترجم ذلك الى بايناري خلّي أخونا أبومحمد ينبسط ;). فيكون وضع البايت كالتالي: 01000000
الان حوّل هذا الى النّظام العشري فيكون لدينا الرقم 64. إذا شكل أمر tcpdump مع الفلتر هكذا:
tcpdump ip[6] = 64
هناك طريقة اخرى ال masking ولكن لن اتطرق لها هنا. حتى تبقى الامور مبسّطة. 🙂
برتوكول TCP
أخيراً لنفرض أنّنا نريد أن نلتقط الحزم الخاصّة بالحواسيب التي تريد الاتصال بنا باستخدام برتوكول tcp. من المعروف ان عملية الاتصال في tcp تقوم على ما يعرف ب three way handshake. يقوم الحاسوب بارسال حزمة SYN الى الخادم فيردّ الخادم عليه ب SYN/ACK فيرد الحاسوب ب ACK وبهذا تكتمل عملية الاتصال لتبدأ عملية نقل البيانات.
بما أنّنا نريد ان نلتقط الحزم الخاصّة بالحواسيب التي تتصل بنا إذا تركيزنا سيكون على الحزم التي تحتوي على SYN. من خلال الشكل -3- نلاحظ أن ال flags الخاصة ببرتوكول TCP تقع في البايت الرابع عشر (أو الرقم 13).
ونلاحظ أيضاً ان ال SYN يقع في الخانة الثانية من اليمين. او بالبايناري 00000010 أو الرقم الثاني بالنّظام العشري. فيكون الأمر كالتّالي:
tcpdump tcp[13] = 2
كما شاهدنا في هذا الجزء، امكانيّات tcpdump هائلة والقدرة على تخصيصه عالية جدّاً.
بهذا ننتهي من هذه السّلسلة والتي نسأل الله أن تكونوا قد استفدّتم منها.
المصادر:
http://cipherdyne.org/LinuxFirewalls/ch02/fig2-2.png
http://www.siongboon.com/projects/2006-03-06_serial_communication/IP-Header-v4.png
http://www.software-engineer-training.com/wp-content/uploads/2007/12/tcp_header.png
http://acs.lbl.gov/~jason/tcpdump_advanced_filters.txt
http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol
بشار ماجستير نظم معلومات. مهندس أنظمة يمتلك خبرة في إدارة أنظمة ويندوز ولينكس. باحث ومختصص في مجال أنظمة المعلومات، معالجة الحوادث الأمنيّة، تحليل الإختراقات الأمنيّة، وفحصوصات الاختراق. حاصل على العديد من الشهادات الأمنيّة. عضو في مجلس استشاريّي معهد سانز لأمن المعلومات.