لینکس: لاک پول /dev/random کو ہٹانا

/dev/random، ایک خفیہ طور پر محفوظ سیوڈو رینڈم نمبر جنریٹر (CSPRNG)، ایک پریشان کن مسئلہ کے لیے جانا جاتا ہے: بلاک کرنا۔ یہ مضمون بتاتا ہے کہ آپ اسے کیسے حل کر سکتے ہیں۔

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

اینڈی لوتومیرسکی نے دسمبر کے آخر میں پیچ کا تیسرا ورژن شائع کیا۔ وہ حصہ ڈالتا ہے۔ "بے ترتیب لینکس APIs میں دو بڑی سیمنٹک تبدیلیاں". پیچ getrandom() سسٹم کال میں ایک نیا GRND_INSECURE جھنڈا شامل کرتا ہے (حالانکہ Lutomirsky اسے getentropy() کے طور پر کہتے ہیں، جو glibc میں getrandom() کا استعمال کرتے ہوئے مقررہ جھنڈوں کے ساتھ لاگو ہوتا ہے)؛ یہ جھنڈا کال کو ہمیشہ درخواست کردہ ڈیٹا کی مقدار واپس کرنے کا سبب بنتا ہے، لیکن اس بات کی ضمانت کے بغیر کہ ڈیٹا بے ترتیب ہے۔ دانا مقررہ وقت پر اپنے پاس موجود بہترین بے ترتیب ڈیٹا تیار کرنے کی پوری کوشش کرے گا۔ "شاید سب سے اچھی چیز اسے 'غیر محفوظ' کہنا ہے (غیر محفوظ) اس API کو ان چیزوں کے لیے استعمال ہونے سے روکنے کے لیے جنہیں سیکیورٹی کی ضرورت ہے۔"

پیچ مسدود کرنے والے پول کو بھی ہٹا دیتے ہیں۔ دانا فی الحال دو بے ترتیب ڈیٹا پولز کو برقرار رکھتا ہے، ایک /dev/random اور دوسرا /dev/urandom سے، جیسا کہ اس میں بیان کیا گیا ہے۔ آرٹیکل 2015. بلاک کرنے والا پول /dev/random کے لیے پول ہے۔ اس ڈیوائس کے لیے ریڈز اس وقت تک بلاک کردے گا (جس کا مطلب ہے اس کا نام) جب تک کہ درخواست کو پورا کرنے کے لیے سسٹم سے "کافی" اینٹروپی اکٹھی نہ ہوجائے۔ اگر پول میں کافی اینٹروپی نہیں ہے تو اس فائل سے مزید پڑھنے کو بھی مسدود کردیا جاتا ہے۔

لاک پول کو ہٹانے کا مطلب ہے کہ /dev/random سے پڑھنا getrandom() کی طرح برتاؤ کرتا ہے جس میں جھنڈوں کو صفر پر سیٹ کیا جاتا ہے (اور GRND_RANDOM پرچم کو نوپ میں بدل دیتا ہے)۔ ایک بار جب کرپٹوگرافک رینڈم نمبر جنریٹر (CRNG) شروع ہو جاتا ہے، تو /dev/random سے پڑھنے اور getrandom(...,0) کو کال کرنے سے بلاک نہیں ہو گا اور بے ترتیب ڈیٹا کی مطلوبہ رقم واپس کر دے گا۔

Lutomirsky کہتے ہیں: "مجھے یقین ہے کہ لینکس بلاک کرنے والا پول متروک ہو گیا ہے۔ CRNG لینکس آؤٹ پٹ تیار کرتا ہے جو کلیدی جنریشن کے لیے بھی استعمال ہونے کے لیے کافی ہے۔ بلاک کرنے والا پول کسی بھی مادی معنوں میں زیادہ مضبوط نہیں ہے اور اس کی حمایت کے لیے مشکوک قدر کے بہت سے بنیادی ڈھانچے کی ضرورت ہے۔

تبدیلیاں اس بات کو یقینی بنانے کے مقصد سے کی گئی ہیں کہ موجودہ پروگرام واقعی متاثر نہیں ہوں گے، اور درحقیقت، GnuPG کلیدی جنریشن جیسی چیزوں کے طویل انتظار کے ساتھ کم مسائل ہوں گے۔

"ان اقساط کو کسی بھی موجودہ پروگرام میں خلل نہیں ڈالنا چاہئے۔ /dev/urandom میں کوئی تبدیلی نہیں ہے۔ /dev/random اب بھی بوٹ کے فوراً بعد بلاک ہوجاتا ہے، لیکن یہ پہلے سے کم بلاک ہوجاتا ہے۔ getentropy() موجودہ جھنڈوں کے ساتھ ایک نتیجہ واپس کرے گا جو پہلے کی طرح عملی مقاصد کے لیے موزوں ہے۔"

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

اسٹیفن مولر نے تجویز کیا کہ اس کا سیٹ پیچ لینکس رینڈم نمبر جنریٹر (LRNG) کے لیے (فی الحال ورژن 26 جاری کیا گیا ہے) ان ایپلی کیشنز کے لیے صحیح رینڈم نمبر فراہم کرنے کا ایک طریقہ ہو سکتا ہے جن کو اس کی ضرورت ہے۔ LRNG "رینڈم بٹس پیدا کرنے کے لیے استعمال ہونے والے اینٹروپی سورسز پر SP800-90B گائیڈ لائنز کے ساتھ مکمل طور پر تعمیل کرتا ہے،" یہ حکومتی معیارات کے مسئلے کا حل ہے۔
میتھیو گیریٹ نے "حقیقی بے ترتیب ڈیٹا" کی اصطلاح پر اعتراض کیا، یہ نوٹ کرتے ہوئے کہ نمونے میں لیے گئے آلات کو اصولی طور پر کافی حد تک ماڈل بنایا جا سکتا ہے تاکہ ان کا اندازہ لگایا جا سکے: "ہم یہاں کوانٹم واقعات کے نمونے نہیں لے رہے ہیں۔"

مولر نے جواب دیا کہ یہ اصطلاح جرمن معیاری AIS 31 سے ایک بے ترتیب نمبر جنریٹر کی وضاحت کے لیے آتی ہے جو صرف ایک نتیجہ پیدا کرتا ہے "اسی شرح پر جس طرح بنیادی شور کا ذریعہ اینٹروپی پیدا کرتا ہے۔"

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

جیسا کہ Lutomirsky نے کہا: "اس سے مسئلہ حل نہیں ہوتا۔ اگر دو مختلف صارفین gnupg جیسے احمقانہ پروگرام چلاتے ہیں، تو وہ صرف ایک دوسرے کو نکال دیں گے۔ میں دیکھ رہا ہوں کہ فی الحال /dev/random کے ساتھ دو اہم مسائل ہیں: یہ DoS کا شکار ہے (یعنی وسائل کی کمی، بدنیتی پر مبنی اثر و رسوخ یا اس سے ملتی جلتی کوئی چیز)، اور چونکہ اسے استعمال کرنے کے لیے کسی مراعات کی ضرورت نہیں ہے، اس لیے یہ غلط استعمال کا بھی خطرہ ہے۔ Gnupg غلط ہے، یہ مکمل طور پر تباہی ہے۔ اگر ہم ایک نیا غیر مراعات یافتہ انٹرفیس شامل کرتے ہیں جسے gnupg اور اسی طرح کے پروگرام استعمال کریں گے، تو ہم دوبارہ ہار جائیں گے۔"

مولر نے نوٹ کیا کہ getrandom() کا اضافہ اب GnuPG کو اس انٹرفیس کو استعمال کرنے کی اجازت دے گا، کیونکہ یہ ضروری گارنٹی فراہم کرے گا کہ پول شروع کر دیا گیا ہے۔ GnuPG ڈویلپر Werner Koch کے ساتھ بات چیت کی بنیاد پر، Mueller کا خیال ہے کہ GnuPG فی الحال براہ راست /dev/random سے پڑھنے کی واحد وجہ گارنٹی ہے۔ لیکن اگر کوئی غیر مراعات یافتہ انٹرفیس ہے جو سروس سے انکار کے لیے حساس ہے (جیسا کہ آج /dev/random ہے)، Lutomirsky دلیل دیتا ہے کہ کچھ ایپلی کیشنز کے ذریعے اس کا غلط استعمال کیا جائے گا۔

لینکس کے رینڈم نمبر سب سسٹم کے ڈویلپر تھیوڈور یو ٹیک تسو نے ایسا لگتا ہے کہ بلاکنگ پول کی ضرورت کے بارے میں اپنا خیال بدل لیا ہے۔ انہوں نے کہا کہ اس پول کو ہٹانے سے مؤثر طریقے سے اس خیال سے نجات مل جائے گی کہ لینکس کے پاس ایک حقیقی رینڈم نمبر جنریٹر (TRNG): "یہ بکواس نہیں ہے، کیونکہ یہ بالکل وہی ہے جو *BSD نے ہمیشہ کیا ہے۔"

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

مولر نے پوچھا کہ کیا کاو نے اس بلاکنگ پول پر عمل درآمد کو ترک کر دیا ہے جو اس نے خود طویل عرصے سے تجویز کیا تھا۔ Cao نے جواب دیا کہ وہ Lutomirsky کے پیچ لینے کا ارادہ رکھتا ہے اور فعال طور پر دانا میں بلاک کرنے والے انٹرفیس کو شامل کرنے کی مخالفت کرتا ہے۔

"دانا اس بات کی کوئی گارنٹی نہیں دے سکتا کہ آیا شور کے منبع کی صحیح خصوصیات کی گئی ہے۔ GPG یا OpenSSL ڈویلپر کو صرف ایک مبہم احساس حاصل ہو سکتا ہے کہ TRUERANDOM "بہتر" ہے، اور چونکہ وہ زیادہ سیکیورٹی چاہتے ہیں، اس لیے وہ بلاشبہ اسے استعمال کرنے کی کوشش کریں گے۔ کسی وقت اسے بلاک کر دیا جائے گا، اور جب کوئی دوسرا ہوشیار صارف (شاید ڈسٹری بیوشن ماہر) اسے init اسکرپٹ میں داخل کرے گا اور سسٹم کام کرنا چھوڑ دیں گے، صارفین کو صرف Linus Torvalds سے شکایت کرنی پڑے گی۔

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

"دانا کو مختلف شور کے ذرائع کو ایک ساتھ نہیں ملانا چاہئے، اور یہ یقینی طور پر یہ دعوی کرنے کی کوشش نہیں کرنا چاہئے کہ جب یہ ایک انتہائی سادہ سی پی یو پر کسی قسم کی "ٹوئچی اینٹروپی گیم" کھیلنے کی کوشش کر رہا ہو تو اسے کتنے بٹس مل رہے ہیں۔ صارفین کے صارفین کے لیے فن تعمیر۔ IOT/ایمبیڈڈ کیسز جہاں سب کچھ ایک ہی ماسٹر آسیلیٹر کے ساتھ مطابقت پذیر نہیں ہے، جہاں رجسٹر کو دوبارہ ترتیب دینے یا اس کا نام تبدیل کرنے کے لیے CPU کی کوئی ہدایت نہیں ہے، وغیرہ۔

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

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

تو ایسا لگتا ہے کہ لینکس کے بے ترتیب نمبر سب سسٹم کے ساتھ ایک دیرینہ مسئلہ حل ہونے کی راہ پر ہے۔ رینڈم نمبر سب سسٹم میں حال ہی میں جو تبدیلیاں ہوئی ہیں ان کے نتیجے میں صرف اس کے استعمال کے دوران ہی DoS کے مسائل پیدا ہوئے ہیں۔ اب بہترین بے ترتیب نمبر حاصل کرنے کے موثر طریقے ہیں جو کرنل فراہم کر سکتا ہے۔ اگر TRNG اب بھی لینکس پر مطلوبہ ہے، تو مستقبل میں اس خامی کو دور کرنے کی ضرورت ہوگی، لیکن غالباً یہ کرنل کے اندر ہی نہیں کیا جائے گا۔

کچھ اشتہارات 🙂

ہمارے ساتھ رہنے کے لیے آپ کا شکریہ۔ کیا آپ کو ہمارے مضامین پسند ہیں؟ مزید دلچسپ مواد دیکھنا چاہتے ہیں؟ آرڈر دے کر یا دوستوں کو مشورہ دے کر ہمارا ساتھ دیں، کلاؤڈ VPS برائے ڈویلپرز $4.99 سے, انٹری لیول سرورز کا ایک انوکھا اینالاگ، جو ہم نے آپ کے لیے ایجاد کیا تھا: VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps کے بارے میں پوری حقیقت $19 سے یا سرور کا اشتراک کیسے کریں؟ (RAID1 اور RAID10 کے ساتھ دستیاب، 24 کور تک اور 40GB DDR4 تک)۔

ایمسٹرڈیم میں Equinix Tier IV ڈیٹا سینٹر میں Dell R730xd 2 گنا سستا؟ صرف یہاں 2x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV $199 سے نیدرلینڈ میں! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - $99 سے! کے بارے میں پڑھا انفراسٹرکچر کارپوریشن کو کیسے بنایا جائے۔ ڈیل R730xd E5-2650 v4 سرورز کے استعمال کے ساتھ کلاس جس کی مالیت 9000 یورو ہے؟

ماخذ: www.habr.com

نیا تبصرہ شامل کریں