موت کا پنگ! FreeBSD نیٹ ورک ٹول PlatoBlockchain ڈیٹا انٹیلی جنس میں کریشسٹک بگ کو ٹھیک کرتا ہے۔ عمودی تلاش۔ عی

موت کا پنگ! فری بی ایس ڈی نیٹ ورک ٹول میں کریشسٹک بگ کو ٹھیک کرتا ہے۔

پہلے نچلے درجے کے نیٹ ورک ٹولز میں سے ایک جس کے بارے میں کوئی بھی کمپیوٹر صارف سیکھتا ہے وہ قابل احترام ہے۔ ping افادیت.

آبدوزوں پر مشتمل کسی بھی اور ہر پرانے اسکول کی جنگی فلم کے منظر کے نام سے منسوب صوتی اثر کے نام پر، کمانڈ RADAR کے زیر آب ورژن کی ایک استعاراتی بازگشت ہے (دیکھیں کہ ہم نے وہاں کیا کیا؟) جسے SONAR کہا جاتا ہے۔

آپ ایک پنگ بھیجتے ہیں (زیادہ سے زیادہ شور کی طرح، میں حقیقت) کھردری گہرائیوں میں، اور اس کی خوفناک بازگشت کو آپ کے پاس واپس آنے میں کتنا وقت لگتا ہے، اور ارد گرد کے سمندر میں آواز کی رفتار کا اندازہ لگا کر، آپ اس شے کے فاصلے کا حساب لگا سکتے ہیں جس نے گونج پیدا کی تھی۔

دلچسپ بات یہ ہے کہ آپ نے شاید TCP/IP کا مخفف سنا ہوگا جو انٹرنیٹ کو طاقت دینے والے پروٹوکول گلو کی عام وضاحت کے طور پر استعمال ہوتا ہے، ping تکنیکی طور پر TCP/IP بالکل استعمال نہیں کرتا ہے۔

درحقیقت، TCP/IP کے لیے مختصر ہے۔ انٹرنیٹ پروٹوکول پر ٹرانسمیشن کنٹرول پروٹوکول، اور انٹرنیٹ پر ڈیٹا بھیجنے کے لیے کافی اعلیٰ سطحی میکانزم کا حوالہ دیتا ہے اس طرح کہ نیٹ ورک خود ہی "کیا اس نے صحیح طریقے سے کام کیا؟" آپ کے لئے کوشش.

مثال کے طور پر، TCP کنکشنز میں، آپ کے بھیجے گئے ڈیٹا کے کسی بھی حصے کی ضمانت دی جاتی ہے یا تو وہ دوسرے سرے پر برقرار رہتا ہے یا کسی خرابی کا سبب بنتا ہے تاکہ آپ کو معلوم ہو کہ انہوں نے یہ نہیں کیا۔

مزید برآں، یہاں تک کہ اگر ڈیٹا کے مختلف ٹکڑوں نے پورے انٹرنیٹ پر مختلف راستے اختیار کیے (مثال کے طور پر لوڈ بیلنسنگ، عارضی بندش، یا دیگر قابل بازیافت غلطیوں کی وجہ سے)، اور یہاں تک کہ اگر کچھ ٹکڑوں کو دوسروں کے مقابلے میں پہنچنے میں زیادہ وقت لگتا ہے، TCP ڈیٹا کو صحیح طریقے سے بفر کیا جائے گا۔ اوپر اور دوسرے سرے پر صحیح ترتیب میں پیش کیا گیا۔

پنگ مختلف ہے۔

۔ ping تاہم، کمانڈ کا استعمال عام طور پر اس بات کی تصدیق کے لیے کیا جاتا ہے کہ آیا آپ جس کمپیوٹر میں دلچسپی رکھتے ہیں وہ بالکل آن لائن ہے، خاص طور پر اگر یہ اعلیٰ سطح کے TCP کنکشنز کو قبول نہیں کر رہا ہے جس کی آپ توقع کریں گے، جیسے ای میل وصول کرنا یا SSH لاگ ان کی اجازت دینا۔

یہ فوری طور پر آپ کو یہ تعین کرنے میں مدد کرتا ہے کہ آیا خرابی کا امکان نیٹ ورک یا سرور خود ڈاؤن ہونے کی وجہ سے ہے، یا اس سرور پر چلنے والی انفرادی خدمات کے صحیح طریقے سے شروع ہونے میں ناکامی کی وجہ سے ہے۔

نتیجے کے طور پر، ping TCP کے مقابلے میں بہت نچلی سطح کا پروٹوکول استعمال کرتا ہے۔

بے شک، ping یہاں تک کہ TCP کے زیادہ آرام دہ کزن UDP کا استعمال نہیں کرتا، مختصر کے لیے صارف ڈیٹاگرام پروٹوکول، جو کہ ڈیٹا کے ٹکڑوں کو منتقل کرنے کا ایک طریقہ ہے جو تیز اور آسان ہے، لیکن اسے عام طور پر بھیجنے اور امید کے طور پر کہا جاتا ہے (یا، اگر آپ مذموم قسم کے ہیں، بطور سپرے اور دعا)۔

UDP خود آپ کو مطلع نہیں کرتا کہ آیا آپ کا ڈیٹا دوسرے سرے پر پہنچ گیا ہے یا نہیں، اور یہاں تک کہ اگر یہ برقرار ہے، UDP اس ترتیب کو نہیں رکھتا ہے جس میں آپ کے پیکٹ اصل میں بھیجے گئے تھے، لہذا یہ ان کو دوبارہ ترتیب نہیں دے سکتا۔ دوسرے سرے پر اگر وہ ترتیب سے باہر نکل جاتے ہیں۔

Ping, اس کی قیمت کے لیے، ایک انتہائی کم سطحی پروٹوکول کا استعمال کرتا ہے، خاص طور پر خرابیوں کا سراغ لگانے اور نیٹ ورک کی تشکیل نو کے مقاصد کے لیے ڈیزائن کیا گیا ہے، جسے ICMP کہا جاتا ہے، یا انٹرنیٹ کنٹرول پیغام پروٹوکول.

عام طور پر آپریٹنگ سسٹم کے کرنل میں ہینڈل کیا جاتا ہے، تاکہ ICMP/IP پیکٹ کا حاصل ہونا تقریباً یقینی ہو یہاں تک کہ اگر کوئی اعلیٰ سطحی نیٹ ورکنگ سافٹ ویئر درست طریقے سے سامنے نہ آیا ہو، ICMP میں خاص طور پر دو خصوصی پیغام کی اقسام شامل ہیں:

  • 0x08 ٹائپ کریں۔ سرکاری طور پر بلایا گیا۔ ICMP Echo، یہ ایک قسم کا پیکٹ اسے عام طور پر ایکو درخواست کہا جاتا ہے۔ یہ کیا ہے ping پروگرام نیٹ ورک پر فعال کمپیوٹرز کی تحقیقات کے لیے بھیجتا ہے۔
  • 0x00 ٹائپ کریں۔ سرکاری طور پر بلایا گیا۔ ICMP Echo Reply، یہ پیکٹ کی قسم ہے۔ بالکل وہی جو کہتا ہے. ایک کمپیوٹر جو زندہ، آن لائن، اور ICMP ایکو ٹریفک کو روکنے کے لیے کنفیگر نہیں کیا گیا ہے، سمجھا جاتا ہے کہ اس طرح کا پیکٹ سیدھے اس کمپیوٹر کو بھیجے گا جس نے اس کی درخواست کی تھی۔

اس طرح:

$ ping -c 3 -p 4E414B45445345435552495459 nakedsecurity.sophos.com
PATTERN: 0x4e414b45445345435552495459
PING news-sophos.go-vip.net (192.0.66.227) 56(84) bytes of data.
64 bytes from 192.0.66.227 (192.0.66.227): icmp_seq=1 ttl=53 time=84.0 ms
64 bytes from 192.0.66.227 (192.0.66.227): icmp_seq=2 ttl=53 time=85.1 ms
64 bytes from 192.0.66.227 (192.0.66.227): icmp_seq=3 ttl=53 time=84.8 ms

--- news-sophos.go-vip.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 84.025/84.644/85.062/0.446 ms

دیکھنا a ping قدرے نچلی سطح پر عمل کرتے ہوئے، ہم Lua کوڈ کا استعمال کریں گے جو آپ مضمون کے آخر میں اپنا ایک ICMP ایکو پیکٹ بنانے کے لیے حاصل کر سکتے ہیں، اور واپس آنے والے جواب کو پڑھنے کے لیے، اگر کوئی ہے:

$ sudo luax ping.lua nakedsecurity.sophos.com
Sending ICMP ECHO request to 192.0.66.227 -->
00000000  08 00 03 02 bb 5a 6f 1d  50 69 6e 67 52 65 71 75  |.....Zo.PingRequ|
00000010  65 73 74 4d 65 73 73 61  67 65 20 42 42 35 41 36  |estMessage BB5A6|
00000020  46 31 44                                          |F1D             |
Got back-->
00000000  45 00 00 37 f6 af 00 00  35 01 94 7f c0 00 42 e3  |E..7....5.....B.|
00000010  XX XX XX XX 00 00 0b 02  bb 5a 6f 1d 50 69 6e 67  |.........Zo.Ping|
00000020  52 65 71 75 65 73 74 4d  65 73 73 61 67 65 20 42  |RequestMessage B|
00000030  42 35 41 36 46 31 44                              |B5A6F1D         |

ویسے، ہمیں استعمال کرنے کی ضرورت تھی sudo اپنے اسکرپٹ کو سپر یوزر مراعات کے ساتھ چلانے کے لیے اوپر، کیونکہ ہم نے اسے بنایا ہے جسے a کہا جاتا ہے۔ خام IP ساکٹ - ایک جسے ہماری پسند کے کسی بھی بنیادی شکل میں تیار کیا جا سکتا ہے، بشمول TCP، UDP اور، یہاں ضرورت کے مطابق، ICMP۔

بہت سے لینکس/یونکس سسٹمز پر، ping آپ کے ڈسٹرو کی طرف سے فراہم کردہ کمانڈ واضح طور پر روٹ مراعات دیئے بغیر کام کرتی ہے، عام طور پر اس وجہ سے کہ یہ خصوصی حفاظتی صلاحیتوں کے ساتھ انسٹال ہوتا ہے، یا اس کے ساتھ setuid فلیگ سیٹ، یعنی اس کا آغاز اس صارف سے مختلف صارف اکاؤنٹ کے تحت چلتا ہے جس نے اسے چلایا تھا۔

اچھی طرح سے ڈیزائن کیا گیا ہے ping پروگرامز، یقیناً، اپنی ضرورت کی خام ساکٹ کھولنے کے بعد خود بخود اپنے اضافی مراعات کو ضائع کر دیں گے۔

ہم نے اختصار کی خاطر اپنے نمونے کے اسکرپٹ سے اس استحقاق کو چھوڑنے والے کوڈ کو خارج کردیا۔ آپ استعمال کر سکتے ہیں posix.unistd.setpid() ساکٹ بنانے کے بعد غیر مراعات یافتہ اکاؤنٹ پر سوئچ کرنے کے لیے فنکشن، لیکن کوئی ڈیٹا بھیجنے یا وصول کرنے سے پہلے۔

جواب کی جانچ کرنا

جیسا کہ آپ ہمارے اوپر اسکرپٹ سے ڈیٹا ڈمپ میں پہچان سکتے ہیں، نیٹ ورک ساکٹ فنکشن جس کا استعمال ہم جواب دینے والے سرور سے ڈیٹا بیک بیک پڑھنے کے لیے کر رہے ہیں اس میں نہ صرف ICMP ایکو ریپلائی ڈیٹا، بلکہ لو لیول IP (انٹرنیٹ پروٹوکول ہیڈر) بھی شامل ہے۔ بنیادی پیکٹ میں۔

ہم نے اس ڈیٹا کو پارس کرنے یا دوسری صورت میں پروسیس کرنے کی کوشش نہیں کی ہے، لیکن فری بی ایس ڈی ping پروگرام کو جواب کا احساس دلانے کے لیے ایسا کرنے کی ضرورت ہے، بشمول واپس آنے والے کسی بھی غلطی کے پیغامات کا احساس دلانا۔

اگر ping کسی طرح سے مسترد ہو جاتا ہے، Echo Reply میں عام طور پر نہ صرف اس کے اپنے IP ہیڈرز شامل ہوں گے (جیسا کہ اوپر دیکھا گیا ہے) بلکہ IP ہیڈرز کی ایک حوالہ کاپی اور ICMP ڈیٹا بھی شامل ہو گا جو اصل آؤٹ باؤنڈ درخواست میں ظاہر ہوا تھا۔

IPv4 پیکٹ ہیڈر عام طور پر اسی طرح نظر آتے ہیں جیسے آپ اوپر دیکھتے ہیں، جہاں IP ہیڈر شروع ہوتے ہیں۔ 45 00 00 37... اور مجموعی طور پر 20 بائٹس کے لیے جاری رکھیں، بطور دکھائے گئے بائٹس تک اور اس سمیت ...XX XX XX XXجو کہ میرے لیپ ٹاپ کا IP ایڈریس ہے۔

اس طرح:

00000000  45 00 00 37 f6 af 00 00  35 01 94 7f c0 00 42 e3  |E..7....5.....B.|
00000010  XX XX XX XX                                       |....            |

IP version and header length:     0x45 (4 = IPv4, 5 = five 32-bit words, i.e. 20 bytes 
Service type and congestion data: 0x00
Total length of packet:           0x0037 (decimal 55)
Sequence information:             F6 AF 00 00
Time-to-live (hops left):         0x35 (decimal 53)
Protocol type:                    0x01 (ICMP)
Checksum:                         0x947F (decimal 38015)
Sending computer's IP number:     C0 00 42 E3 (192.0.66.227 = nakedsecurity.sophos.com)
Recipient's IP (my laptop):       XX XX XX XX (REDACTED = my own IP number)

فری بی ایس ڈی ping ایسا لگتا ہے کہ پروگرامرز نے فرض کیا ہے کہ اس قسم کے ہیڈرز، درحقیقت، ہمیشہ بالکل 20 بائٹس لمبے ہوں گے، جو کہ پہلے بائٹ میں ہیڈر کی لمبائی کی قدر کی بنیاد پر 0x45IPv4 کی نشاندہی کرنا (0x4?) 5-DWORD کے ساتھ (0x?5)، یا 20 بائٹ، ہیڈر۔

فکر کرنے کے لیے صرف 20 بائٹس کے ساتھ، پروگرامرز نے اسٹیک پر فکسڈ سائز کے بفرز مختص کیے جہاں وہ جواب میں آئی پی ہیڈرز کی ایک کاپی رکھ سکتے ہیں، نیز اصل درخواست سے کوئی بھی ایمبیڈڈ آئی پی ہیڈرز، اگر ہینڈل کرنے کے لیے کوئی خرابی کی حالت تھی۔ .

آپ اندازہ لگا سکتے ہیں کہ یہ کہاں جا رہا ہے۔

IPv4 ہیڈر میں اس پہلے بائٹ کی قانونی طور پر کوئی قدر ہو سکتی ہے۔ 0x45 (کم از کم ہیڈر کا سائز 5 DWORDs، یا 20 بائٹس، جیسا کہ دکھایا گیا ہے) تک 0x4F (15 DWORDs کی نشاندہی کرنا، کیونکہ 0xF اعشاریہ 15 ہے، یا مجموعی طور پر ہیڈر ڈیٹا کے 60 بائٹس)، اس طرح صفائی کے ساتھ اختیاری اضافی 40 بائٹس ہیڈر ڈیٹا کی اجازت دیتا ہے۔

وہ نایاب، لیکن قانونی، اضافی ہیڈر بائٹس کو متجسس ناموں کے ساتھ مختلف فنکی اور غیر معمولی "خصوصیات" کے لیے استعمال کیا جا سکتا ہے جیسے منتخب براہ راست نشریات, تجرباتی بہاؤ کنٹرول اور اپ اسٹریم ملٹی کاسٹ پیکٹ - ایسی چیزیں جن کے بارے میں ہم نے سنا ہے لیکن کبھی جان بوجھ کر استعمال نہیں کیا، یا دیکھا بھی نہیں۔

سائبر کرائمین سے ہوشیار رہیں جو آپ کو امتحان میں ڈالتے ہیں۔

جیسا کہ آپ تصور کر سکتے ہیں، یہ دیکھتے ہوئے کہ وہ اضافی فیلڈز تقریباً کبھی استعمال نہیں ہوتے ہیں، ہو سکتا ہے کہ آپ کبھی بھی IPv4 پیکٹ کو اس کے علاوہ کسی اور چیز کے ساتھ نہ دیکھیں۔ 0x45 شروع میں، اور مجموعی طور پر 20 بائٹس ہیڈر ڈیٹا کے ساتھ، جب تک کہ آپ سائبر کرائمینلز کے ایک گروپ میں نہ پڑیں جو آپ کو آزمائش میں ڈالنے کے لیے تیار ہوں۔

افسوس کی بات یہ ہے کہ حملہ آور کو کسی ایسے سرور کو دھاندلی کرنے سے روکنے کے لیے بہت کچھ نہیں ہے جو اندازہ لگاتا ہے کہ آیا آپ FreeBSD استعمال کر رہے ہیں، اور جان بوجھ کر بڑے سائز کے ICMP/IP ایکو ریپلائی پیکٹ بناتا ہے تاکہ کسی کو مشتعل کیا جا سکے۔ اسٹیک بفر اوور فلو آپ کے اندر ping پروگرام.

اگر کبھی آپ یہ دیکھنے کے لیے چیک کرتے ہیں کہ آیا ان کا سرور فعال ہے (جو آپ کر بھی سکتے ہیں، یا شاید خاص طور پر، اگر آپ کو لگتا ہے کہ یہ مشکوک ہے!)، تو آپ کو بوبی پھنسے ہوئے جواب سے نشانہ بنایا جا سکتا ہے۔

بہترین طور پر، آپ ping پروگرام کریش ہو جائے گا؛ تاہم، بدترین طور پر، جیسا کہ FreeBSD سیکورٹی ایڈوائزری دل کھول کر تسلیم کرتی ہے، "یہ ممکن ہے کہ کسی بدنیتی پر مبنی میزبان کے لیے پنگ میں ریموٹ کوڈ کے عمل کو متحرک کرنا ممکن ہے۔"

خوش قسمتی سے، جیسا کہ FreeBSD مصنفین بھی چتانا, "[t]وہ پنگ کا عمل فری بی ایس ڈی کے تمام متاثرہ ورژنز پر کیپبلٹی موڈ سینڈ باکس میں چلتا ہے اور اس طرح یہ اس بات میں بہت مجبور ہے کہ یہ اس مقام پر باقی سسٹم کے ساتھ کیسے تعامل کر سکتا ہے جہاں بگ واقع ہو سکتا ہے۔"

دوسرے الفاظ میں، آپ کو یقینی طور پر پیچ کرنے کی ضرورت ہے، لیکن خطرات کو معمولی سمجھا جا سکتا ہے.

خاص طور پر ، ping پروگرام نہ صرف ایک سینڈ باکس میں بند ہے، بلکہ جب بگی کوڈ تک پہنچ جاتا ہے تو روٹ کے طور پر نہیں چل رہا ہے، جیسا کہ سیکیورٹی ایڈوائزری میں تصدیق کی گئی ہے: "کب ping چلتا ہے، یہ اپنا کام کرنے کے لیے درکار خام ساکٹ بناتا ہے، اور پھر اس کے اعلیٰ مراعات کو منسوخ کر دیتا ہے۔

جیسا کہ اوپر بیان کیا گیا ہے، سپر یوزر کے اختیارات صرف آپریٹنگ سسٹم سے خام آئی پی ساکٹ حاصل کرنے کے لیے درکار ہیں، استعمال کرنے کے لیے نہیں۔ sendto() اور recvfrom() بعد میں اس ساکٹ پر کام کرتا ہے۔

اس بگ کو آفیشل شناخت کنندہ دیا گیا ہے۔ CVE-2022-23093; یہ سیکیورٹی ایڈوائزری میں درج ہے۔ FreeBSD-SA-22:15.ping.

کیا کیا جائے؟

  • اگر آپ FreeBSD صارف ہیں، بس متاثرہ ریلیزز (FreeBSD 12 اور FreeBSD 13) کو ان کے تازہ ترین ورژنز میں اپ ڈیٹ کریں، جہاں یہ بگ ٹھیک ہے۔
  • اگر آپ نیٹ ورک پروگرامر ہیں، ہمیشہ اس بات کو یقینی بنائیں کہ آپ نے پیکٹ ہیڈرز کا حساب لیا ہے جو سائز میں غیر معمولی تغیرات کی نشاندہی کر سکتے ہیں۔ حقیقت یہ ہے کہ آپ نے خود کبھی کوئی تغیر نہیں دیکھا ہے کل آپ کو ایک ایسے پیکٹ کا سامنا کرنے سے نہیں روکتا جو عام سے باہر ہے لیکن بالکل قانونی ہے۔
  • اگر آپ نیٹ ورک مینیجر ہیں، آئی پی ہیڈر والے IPv4 پیکٹ کو مسدود کرنے پر غور کریں جو 20 بائٹس سائز کے نہیں ہیں۔ اگر آپ واقعی کچھ سافٹ ویئر پروڈکٹس کو غیر معمولی IPv4 ہیڈر کے اختیارات استعمال کرنے کی اجازت دینے کی ضرورت محسوس کرتے ہیں، تو یہ جاننے کے لیے ان غیر معمولی پیکٹوں کو لاگ کرنے پر غور کریں۔

وہاں دیکھ بھال کرو!


پنگ ٹریفک کو ظاہر کرنے کے لیے مثالی کوڈ


ٹائم اسٹیمپ:

سے زیادہ ننگی سیکیورٹی