بدمعاش پاور شیل کوڈ کے ساتھ بغیر پیچ شدہ ایکسچینج سرور کو کیسے ہیک کریں۔

ماخذ نوڈ: 1760191

صرف دو مہینے پہلے، کچھ تشویشناک بگ خبریں بریک: مائیکروسافٹ ایکسچینج میں صفر دن کی کمزوریوں کا ایک جوڑا اعلان کیا گیا تھا۔

جیسا کہ ہم اس وقت مشورہ دیا, یہ خطرات، سرکاری طور پر نامزد CVE-2022-41040 اور CVE-2022-41082:

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

پہلی کمزوری پریشان کن اور بڑے پیمانے پر بدسلوکی کی یاد دلاتی تھی۔ پراکسی شیل سیکیورٹی ہول اگست 2021 میں پیچھے سے، کیونکہ اس نے ایکسچینج کے آٹو ڈسکوور فیچر میں خطرناک رویے پر انحصار کیا، مائیکروسافٹ کی طرف سے بیان کیا گیا ہے ایک پروٹوکول کے طور پر "ایکسچینج میں میل باکسز کو تلاش کرنے اور ان سے جڑنے کے لیے آؤٹ لک اور EAS [Exchange ActiveSync] کلائنٹس کے ذریعے استعمال کیا جاتا ہے".

خوش قسمتی سے، Autodiscover کی غلط خصوصیت جس کا فائدہ کسی بھی دور دراز کے صارف کے ذریعے ProxyShell حملے میں استعمال کیا جا سکتا ہے، چاہے وہ لاگ ان ہو یا نہ ہو، ایک سال سے زیادہ عرصہ پہلے باندھا گیا تھا۔.

بدقسمتی سے، ProxyShell پیچ نے مستند صارفین کے استحصال کو بند کرنے کے لیے کافی کام نہیں کیا، جس کے نتیجے میں نئے CVE-2022-40140 صفر دن کا آغاز ہوا، جو جلد ہی غلط طور پر تھا، اگر گمراہ کن طور پر، ڈوب ProxyNotShell.

اتنا خطرناک نہیں، لیکن پھر بھی خطرناک

واضح طور پر، ProxyNotShell اصل ProxyShell کی طرح خطرناک کہیں بھی نہیں تھا، یہ دیکھتے ہوئے کہ اسے تصدیق شدہ رسائی کے نام سے جانا جاتا ہے، اس لیے یہ کہیں سے بھی کسی کے ساتھ زیادتی کے لیے کھلا نہیں تھا۔

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

بطور سوفوس ماہر چیسٹر وسنیوسکی رکھیں وقت پہ:

اگر آپ اسے کہنا چاہتے ہیں تو یہ ایک "درمیانی توثیق کا خطرہ" ہے۔ یہ ایک ملی جلی نعمت ہے۔ اس کا مطلب یہ ہے کہ ایک خودکار Python اسکرپٹ صرف پورے انٹرنیٹ کو اسکین نہیں کر سکتا اور ممکنہ طور پر دنیا کے ہر ایکسچینج سرور کو چند منٹوں یا گھنٹوں میں استعمال کر سکتا ہے، جیسا کہ ہم نے 2021 میں ProxyLogon اور ProxyShell کے ساتھ ہوتا دیکھا۔

آپ کو ایک پاس ورڈ کی ضرورت ہے، لیکن بدقسمتی سے، کسی بھی ایکسچینج سرور پر ایک ای میل ایڈریس اور پاس ورڈ کو درست تلاش کرنا شاید زیادہ مشکل نہیں ہے۔ اور آپ کا آج تک استحصال نہیں ہوا ہو گا، کیونکہ آؤٹ لک ویب ایکسیس [OWA] میں کامیابی کے ساتھ لاگ ان کرنے کے لیے ان کے FIDO ٹوکن، یا ان کے توثیق کار، یا جو بھی دوسرا عنصر آپ استعمال کر رہے ہوں، کی ضرورت ہے۔

لیکن اس حملے کے لیے اس دوسرے عنصر کی ضرورت نہیں ہے۔ صرف صارف نام اور پاس ورڈ کا امتزاج حاصل کرنا ایک بہت کم رکاوٹ ہے۔

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

لیکن ہمیں یہ جان کر مایوسی ہوئی کہ بظاہر ایک قابل اعتماد حل تھا۔ توقع سے زیادہ پیچیدہ، اور اکتوبر آیا اور ProxyNotShell کے ساتھ چلا گیا جس کو صرف کام کے ذریعے ایڈریس کیا گیا، مناسب پیچ کے ذریعے نہیں۔

یہاں تک کہ نومبر کے پیچ منگل نے براہ راست مطلوبہ اصلاحات فراہم نہیں کیں، حالانکہ پیچ اس کے باوجود باہر آیا اسی دن ایکسچینج کے لیے مخصوص سیکیورٹی اپ ڈیٹ کے حصے کے طور پر جو الگ سے حاصل اور انسٹال کیا جا سکتا ہے:

تصور کا ثبوت سامنے آیا

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

بری خبر، ظاہری استحصال کے بارے میں آپ کی رائے پر منحصر ہے، یہ ہے کہ ZDI ٹیم نے اب مؤثر طریقے سے ایک پروف آف تصور (PoC) فراہم کیا ہے جس میں وضاحت کی گئی ہے کہ ایکسچینج سرورز پر کیسے حملہ کیا جائے۔

اچھی خبر یہ ہے کہ:

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

یہ کیسے کام کرتا ہے

ZDI کی وضاحت اس خطرے کی وجہ سے ایک دلچسپ کہانی بنتی ہے کہ ان تمام حصوں کو ایک ساتھ جوڑنا کتنا پیچیدہ ہو سکتا ہے جن کی آپ کو کسی خطرے کو ایک قابل عمل استحصال میں تبدیل کرنے کی ضرورت ہے۔

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

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

اگر آپ ZDI رپورٹ کو پڑھنے کا فیصلہ کرتے ہیں تو اعلی سطحی تفصیلات کی زیادہ آسانی سے پیروی کرنے میں آپ کی مدد کرنے کی امید میں، یہاں امید ہے کہ الٹ میں درج مراحل کے ساتھ ایک بہت زیادہ آسان خلاصہ ہے…

…تو آپ کو پہلے سے معلوم ہو جائے گا کہ کہانی اپنی سمت کیوں لیتی ہے:

  • مرحلہ 4۔ اپنی پسند کے ابتدائی پیرامیٹر کے ساتھ، اپنی پسند کے .NET آبجیکٹ کو فوری بنانے کے لیے ایکسچینج کو دور سے چال کریں۔

جدید کوڈنگ میں، ایک فوری اعتراض میموری کے ایک مختص حصے کے لیے جارگن لفظ ہے، خود بخود اس ڈیٹا اور وسائل کے ساتھ شروع کیا جاتا ہے جس کی اسے استعمال میں ہونے کے دوران ضرورت ہو گی، اور فنکشنز کے ایک مخصوص سیٹ سے منسلک ہے جو اس پر کام کر سکتے ہیں۔ (فوری کرنا کے لیے صرف ایک فینسی لفظ ہے۔ تخلیق.)

آبجیکٹ کو آپریٹنگ سسٹم کے ذریعے ہی منظم اور کنٹرول کیا جا سکتا ہے، تاکہ C جیسی زبان میں عام طور پر میموری کی خرابی کی غلطیوں سے بچنے میں مدد ملے، جہاں آپ کو عام طور پر خود میموری مختص کرنے، متعلقہ ڈیٹا فیلڈز کو ہاتھ سے پُر کرنے اور یاد رکھنے کی ضرورت ہوتی ہے۔ میموری اور وسائل جو آپ استعمال کر رہے ہیں، جیسے کہ نیٹ ورک ساکٹ یا ڈسک فائلیں، جب آپ کام کر لیں تو چھوڑ دیں۔

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

عام طور پر، آپ کو ایک یا زیادہ پیرامیٹرز کو کنسٹرکٹر کو دلائل کے طور پر منتقل کرنے کی ضرورت ہوتی ہے، اس بات کی نشاندہی کرنے کے لیے کہ جب آپ آبجیکٹ کے شروع ہونے پر اسے کس طرح ترتیب دینا چاہتے ہیں۔

سیدھے الفاظ میں، اگر آپ انسٹی ٹیوٹ کرتے ہیں، تو کہیے، a TextString آبجیکٹ (ہم یہ نام بنا رہے ہیں، لیکن آپ کو خیال آتا ہے) ایک پیرامیٹر کا استعمال کرتے ہوئے جو خود ایک ٹیکسٹ سٹرنگ ہے جیسے example.com:8888...

…آپ کا اختتام غالباً آپ کے متن کو رکھنے کے لیے مختص کردہ میموری بفر کے ساتھ ہوگا، جس کا آغاز کیا گیا ہے تاکہ یہ وہی قدر رکھتا ہو جس میں آپ گزرے ہیں، یعنی خام متن example.com:8888.

اس تناظر میں، جب آپ کنسٹرکٹر کو ریموٹ سے ٹرگر کرتے ہیں تو آبجیکٹ کنسٹرکٹر کو ڈیٹا کے طور پر بھیجی گئی ٹیکسٹ سٹرنگ فوری طور پر سائبر سکیورٹی کے لیے کوئی واضح خطرہ نہیں لاتی، اس کے علاوہ سروس کے ممکنہ انکار (DoS) کے لیے بار بار بڑی اور بڑی تاریں مانگ کر۔ میموری کو ختم کرنے کی کوشش کریں۔

لیکن اگر آپ کو انسٹیٹیوٹ کرنا تھا تو کہو، a ConnectedTCPClient کا ایک ہی ٹیکسٹ سٹرنگ پیرامیٹر استعمال کرتے ہوئے آبجیکٹ example.com:8888آپ کو آپریٹنگ سسٹم کے ذریعہ مختص کردہ نیٹ ورک ساکٹ کے ساتھ عارضی ڈیٹا رکھنے کے لیے تیار میموری بفر حاصل ہو سکتا ہے جو سرور کے ساتھ ڈیٹا کا تبادلہ کرنے کے لیے تیار ہے۔ example.com TCP پورٹ پر 8888.

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

آپ کو ایک ایسی چیز بھی مل سکتی ہے جسے کہتے ہیں، RunCmdAndReadOutput، جہاں آپ پیرامیٹر کے طور پر جو ٹیکسٹ سٹرنگ بھیجتے ہیں، وہ لفظی طور پر، ایک کمانڈ ہے جسے آپ آبجیکٹ کے بنتے ہی خود بخود چلانا چاہتے ہیں، تاکہ آپ بعد میں اس کا آؤٹ پٹ جمع کر سکیں۔

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

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

اصولی طور پر، PowerShell کے ذریعے صرف محفوظ یا کم خطرے والی اشیاء کو ہی دور سے بنایا جا سکتا ہے، تاکہ ہماری خیالی چیزوں کو فوری بنایا جا سکے۔ TextString اوپر، یا a SimpleIntegerValue، قابل قبول سمجھا جا سکتا ہے، جبکہ a ConnectedTCPClient یا ایک RunCmdAndReadOutput یقینی طور پر نہیں ہوگا.

لیکن ZDI محققین نے محسوس کیا کہ آخری مرحلے کو متحرک کرنے سے پہلے، وہ یہ کر سکتے ہیں:

  • مرحلہ 3۔ دور سے ایکسچینج کو یہ سوچنے پر مجبور کریں کہ کم خطرہ والی چیز جس نے حفاظتی امتحان پاس کیا ہے، درحقیقت، آپ کی پسند کی کوئی دوسری چیز ہے۔

اس کے باوجود، آپ ایکسچینج سے توقع کر سکتے ہیں کہ وہ کم خطرے والی اشیاء کی بھی ریموٹ تخلیق کو روکے، تاکہ خطرے کو مزید کم کیا جا سکے۔

لیکن محققین نے پایا کہ وہ کر سکتے ہیں:

  • مرحلہ 2۔ ایکسچینج کو اس کے استعمال میں دور سے چال کریں۔ پاور سائل ریمٹنگ بیرونی طور پر کنٹرول شدہ ابتدائی پیرامیٹرز کی بنیاد پر ایک آبجیکٹ بنانے کی خصوصیت۔

اور یہ پراکسی شیل نما سوراخ کی وجہ سے ممکن ہوا جو صرف نیم پیچ دار تھا:

  • مرحلہ 1۔ ایک درست پیک کر کے کوڈ کے ساتھ ویب درخواست کو قبول کرنے اور اس پر کارروائی کرنے کے لیے ایکسچینج کو دور سے چال کریں username:password درخواست میں بھی فیلڈ۔

یہاں تک کہ اگر درخواست میں نامزد صارف درحقیقت لاگ ان نہیں ہوا تھا، اور اسے اپنے میل باکس تک رسائی حاصل کرنے کے لیے کسی قسم کے 2FA عمل سے گزرنا پڑے گا، ایک حملہ آور جو ان کے بارے میں جانتا تھا۔ username:password مجموعے کے پاس توثیق کی کافی معلومات ہوں گی تاکہ ایکسچینج کو ایک ویب کنکشن قبول کرنے میں پھنسایا جا سکے جسے اوپر 2 سے 4 مراحل میں بیان کردہ اٹیک چین کو ختم کرنے کے لیے استعمال کیا جا سکتا ہے۔

ڈھیلے الفاظ میں، کوئی بھی درست username:password امتزاج کرے گا، بشرطیکہ "تصدیق" کی ضرورت صرف ایکسچینج کو HTTP درخواست کو سامنے سے مسترد کرنے سے روکنے کے لیے تھی۔

کیا کیا جائے؟

نوٹ کریں کہ یہ حملہ صرف کام کرتا ہے:

  • اگر آپ کے پاس آن پریمیسس ایکسچینج سرور ہیں۔ مائیکروسافٹ کا دعویٰ ہے کہ اس نے اپنی کلاؤڈ سروسز کو تیزی سے بند کر دیا ہے، اس لیے ایکسچینج آن لائن متاثر نہیں ہوا ہے۔ یقینی بنائیں کہ آپ جانیں کہ آپ کے ایکسچینج سرورز کہاں ہیں۔. یہاں تک کہ اگر آپ اب ایکسچینج آن لائن استعمال کرتے ہیں، تب بھی آپ کے پاس آن پریمیسس سرورز چل رہے ہوں گے، شاید آپ کی منتقلی کے عمل سے غلطی سے رہ گئے ہوں۔
  • اگر آپ کے سرورز غیر پیچ شدہ ہیں۔ اس بات کو یقینی بنائیں کہ آپ ہیں ایکسچینج سافٹ ویئر اپ ڈیٹ 2022-11-08 کو لاگو کیا۔ کرنے کے لئے کمزوریوں کو بند کرو جو استحصال کی ضرورت ہے۔
  • اگر آپ کے سرور اب بھی بنیادی تصدیق کو قبول کرتے ہیں، جسے میراثی توثیق بھی کہا جاتا ہے۔ اس بات کو یقینی بنائیں کہ آپ ہیں میراث کی توثیق کے تمام پہلوؤں کو مسدود کر دیا۔ لہذا آپ کے سرور قبول نہیں کریں گے۔ username:password اوپر ذکر کردہ ہیڈر، اور پہلے جگہ پر خطرناک Autodiscover پروٹوکول کی درخواستوں کو قبول نہیں کریں گے۔ یہ حملہ آوروں کو روکتا ہے۔ کسی سرور کو ان کی بوبی ٹریپ آبجیکٹ انسٹیٹیویشن ٹرکس کو قبول کرنے کے لیے دھوکہ دے رہا ہے، چاہے اس سرور کو پیچ نہ کیا گیا ہو۔

آپ پیچھا کرتے رہو ہمارے سرکاری روک تھام، تدارک اور ردعمل کے مشورے، اور سوفوس کے صارفین سوفوس X-Ops ٹویٹر فیڈ (@SophosXOps).


ایکسچینج کی توثیق اور OAUTH2 کے بارے میں مزید جانیں

کسی بھی مقام پر جانے کے لیے نیچے دی گئی ساؤنڈ ویوز پر کلک کریں اور ڈریگ کریں۔ آپ بھی براہ راست سنیں ساؤنڈ کلاؤڈ پر۔

پال ڈکلن اور چیسٹر وسنیوسکی کے ساتھ
انٹرو اور آؤٹرو میوزک بذریعہ ایڈتھ موج.


ٹائم اسٹیمپ:

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