গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো দ্বারা সৃষ্ট সাম্বা লগন বাগ

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো দ্বারা সৃষ্ট সাম্বা লগন বাগ

সাম্বা, সহজভাবে বলতে গেলে, মাইক্রোসফ্ট উইন্ডোজে ব্যবহৃত নেটওয়ার্কিং প্রোটোকলগুলির একটি অতি-উপযোগী, মেগা-জনপ্রিয়, ওপেন-সোর্স পুনঃপ্রয়োগ, এবং ইন্টারনেটওয়ার্কিংয়ে (দুটি ভিন্ন ধরণের নেটওয়ার্ককে একত্রে সংযুক্ত করা) এর ঐতিহাসিক গুরুত্বকে অবমূল্যায়ন করা যায় না।

1990 এর দশকের শেষের দিকে, মাইক্রোসফ্ট নেটওয়ার্কিং তার অস্বচ্ছ, মালিকানাধীন প্রকৃতিকে সরিয়ে দেয় এবং একটি উন্মুক্ত মান হয়ে ওঠে যা CIFS নামে পরিচিত, সংক্ষেপে সাধারণ ইন্টারনেট ফাইল সিস্টেম.

কিন্তু 1990-এর দশকের গোড়ার দিকে এটি সম্পর্কে "সাধারণ" বা "খোলা" কিছুই ছিল না, যখন অস্ট্রেলিয়ান একাডেমিক অ্যান্ড্রু ট্রিজেল একটি সামঞ্জস্যপূর্ণ সিস্টেম বাস্তবায়নের মাধ্যমে এটিকে সংশোধন করতে শুরু করেছিলেন যা তাকে তার ইউনিক্স কম্পিউটারকে একটি উইন্ডোজ নেটওয়ার্কের সাথে সংযুক্ত করতে দেবে এবং এর বিপরীতে।

তারপরে, প্রোটোকলটিকে আনুষ্ঠানিকভাবে SMB হিসাবে উল্লেখ করা হয়েছিল, এর জন্য সংক্ষিপ্ত সার্ভার বার্তা ব্লক (একটি নাম যা আপনি এখনও CIFS এর চেয়ে অনেক বেশি ঘন ঘন শুনতে পান), তাই ট্রিজ, যেমন অ্যান্ড্রু ট্রিজেল পরিচিত, বোধগম্যভাবে তার প্রকল্পটিকে "এসএমবি সার্ভার" বলা হয়, কারণ এটিই ছিল।

কিন্তু এই নামের একটি বাণিজ্যিক পণ্য ইতিমধ্যেই বিদ্যমান ছিল, তাই একটি নতুন মনিকারের প্রয়োজন ছিল।

তখনই প্রকল্পটি পরিচিতি লাভ করে সাম্বা, একটি আনন্দদায়কভাবে স্মরণীয় নাম যা ফর্মের শব্দগুলির জন্য অভিধান অনুসন্ধানের ফলে S?M?B?.

আসলে, samba এখনও বর্ণানুক্রমিকভাবে গেট থেকে প্রথম শব্দ dict ফাইলটি সাধারণত ইউনিক্স কম্পিউটারে পাওয়া যায়, এর পরে বরং অ-ফিটিং শব্দটি অনুসরণ করা হয় scramble এবং সম্পূর্ণ অনুপযুক্ত scumbag:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.

কিছু বাগ আপনি তৈরি করেন, কিন্তু কিছু বাগ আপনি পান

বছরের পর বছর ধরে সাম্বা প্রকল্পটি শুধুমাত্র তার নিজস্ব অনন্য বাগগুলি প্রবর্তন এবং সংশোধন করেনি, যেমনটি যেকোন জটিল সফ্টওয়্যার প্রকল্প সাধারণত করে, তবে অন্তর্নিহিত প্রোটোকলের মধ্যে বাগ এবং ত্রুটিগুলিও উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে, কারণ এর লক্ষ্য সবসময়ই উইন্ডোজ নেটওয়ার্কগুলির সাথে নির্বিঘ্নে কাজ করা।

(দুঃখজনকভাবে, তথাকথিত বাগ সামঞ্জস্য একটি নতুন সিস্টেম তৈরির একটি অনিবার্য অংশ যা বিদ্যমান একটির সাথে কাজ করে।)

2022 সালের শেষের দিকে, সেই "উত্তরাধিকারসূত্রে প্রাপ্ত দুর্বলতাগুলির মধ্যে একটি" পাওয়া গিয়েছিল এবং মাইক্রোসফ্টকে রিপোর্ট করা হয়েছিল, শনাক্তকারীকে দেওয়া হয়েছিল জন্য CVE-2022-38023, এবং নভেম্বর 2022 প্যাচ মঙ্গলবার আপডেটে প্যাচ করা হয়েছে।

এই বাগটি ক্রিপ্টোগ্রাফিক MAC (বার্তা প্রমাণীকরণ কোড) স্পুফিং এবং টেম্পারিং প্রতিরোধ করার উদ্দেশ্যে।

লক্ষণীয়ভাবে, লগইন টাইমে ডেটা ম্যানিপুলেট করে, ধূর্ত সাইবার অপরাধীরা এলিভেশন-অফ-প্রিভিলেজ (ইওপি) আক্রমণ বন্ধ করতে পারে।

তারা তত্ত্বগতভাবে অন্ততপক্ষে, একটি সার্ভারকে এই ভেবে প্রতারণা করতে পারে যে তারা "আপনার কি প্রশাসকের শংসাপত্র আছে?" পরীক্ষা, যদিও তাদের কাছে সেই শংসাপত্রগুলি ছিল না এবং তাদের জাল ডেটা তার ক্রিপ্টোগ্রাফিক যাচাইকরণে ব্যর্থ হওয়া উচিত ছিল।

ক্রিপ্টোগ্রাফিক তত্পরতা

আমরা এই বরং রহস্যময় বাগ সম্পর্কে লেখার সিদ্ধান্ত নিয়েছি কারণ আমরা মনে করি আপনি ভয়ঙ্করভাবে এটি দ্বারা শোষিত হওয়ার সম্ভাবনা রয়েছে (যদিও এটি সাইবার নিরাপত্তার ক্ষেত্রে আসে, আমরা মনোভাব গ্রহণ করি কখনও না বল না), কিন্তু কারণ এটি একটি আরেকটি অনুস্মারক কেন ক্রিপ্টোগ্রাফিক তত্পরতা গুরুত্বপূর্ণ.



সম্মিলিতভাবে, আমাদের ভালোর জন্য পুরানো অ্যালগরিদম ছাড়ার জন্য দক্ষতা এবং ইচ্ছা দুটোই দরকার যত তাড়াতাড়ি তারা ত্রুটিপূর্ণ খুঁজে পাওয়া যাচ্ছে, এবং তারা অন্য কারো সমস্যায় পরিণত না হওয়া পর্যন্ত তাদের অনির্দিষ্টকালের জন্য শুয়ে থাকতে হবে না। (সেই "অন্য কেউ" আমরা দশ বছর রাস্তার নিচে পরিণত হতে পারে।)

আশ্চর্যজনকভাবে, CVE-2022-38023 দুর্বলতা প্রথম স্থানে বিদ্যমান ছিল কারণ উইন্ডোজ এবং সাম্বা উভয়ই এখনও দীর্ঘ-অবঞ্চিত হ্যাশিং অ্যালগরিদম MD5 এর উপর ভিত্তি করে অখণ্ডতা সুরক্ষার একটি স্টাইল সমর্থন করে।

সহজ কথায় বলতে গেলে, কারবারোস প্রোটোকলের মাইক্রোসফ্ট সংস্করণ ব্যবহার করে নেটওয়ার্ক প্রমাণীকরণ এখনও ডেটাকে অখণ্ডতা-সুরক্ষিত করার অনুমতি দেয় (বা চেকসামড, নৈমিত্তিক কিন্তু কঠোরভাবে সঠিক পরিভাষা নয়) ত্রুটিপূর্ণ ক্রিপ্টোগ্রাফি ব্যবহার করে।

আপনার আর MD5 ব্যবহার করা উচিত নয় কারণ এটিকে ভাঙা বলে মনে করা হয়: একজন নির্ধারিত আক্রমণকারী সহজেই দুটি ভিন্ন ইনপুট নিয়ে আসতে পারে যা একই MD5 হ্যাশের সাথে শেষ হয়।

আপনি সম্ভবত ইতিমধ্যেই জানেন, যাইহোক, ক্রিপ্টোগ্রাফিক গুণমান দাবি করে এমন যে কোনও হ্যাশের প্রয়োজনীয়তাগুলির মধ্যে একটি হল এটি সম্ভব নয়।

পরিভাষায়, একই হ্যাশ আছে এমন দুটি ইনপুট একটি হিসাবে পরিচিত ধাক্কা, এবং আপনাকে দ্রুত খুঁজে পেতে সাহায্য করার জন্য কোনো প্রোগ্রামেটিক কৌশল বা শর্টকাট থাকার কথা নয়।

সাধারণ সৌভাগ্যের চেয়ে ভাল সংঘর্ষ খুঁজে পাওয়ার কোন উপায় নেই – যতক্ষণ না আপনি জ্যাকপটে আঘাত করছেন ততক্ষণ পর্যন্ত পরিবর্তনশীল ইনপুট ফাইলগুলির সাথে বারবার চেষ্টা করা।

সংঘর্ষের প্রকৃত মূল্য

একটি নির্ভরযোগ্য অ্যালগরিদম অনুমান করে, কোন শোষণযোগ্য দুর্বলতা ছাড়াই, আপনি আশা করবেন যে X বিট আউটপুট সহ একটি হ্যাশের প্রয়োজন হবে প্রায় 2এক্স-1 একটি বিদ্যমান ফাইলের হ্যাশের সাথে সংঘর্ষকারী একটি দ্বিতীয় ইনপুট খুঁজে বের করার চেষ্টা করে।

এমনকি যদি আপনি যা করতে চেয়েছিলেন তা হল যেকোন দুটি ইনপুট (দুটি নির্বিচারে ইনপুট, বিষয়বস্তু, আকার বা কাঠামো নির্বিশেষে) যা একই হ্যাশের সাথে ঘটেছে, আপনি 2 টির থেকে সামান্য বেশি প্রয়োজন আশা করবেনএক্স / 2 আপনি একটি সংঘর্ষে আঘাত আগে চেষ্টা করে.

যেকোন হ্যাশিং অ্যালগরিদম যা নির্ভরযোগ্যভাবে "ক্র্যাক" হতে পারে তার চেয়ে দ্রুত ক্রিপ্টোগ্রাফিকভাবে নিরাপদ নয়, কারণ আপনি দেখিয়েছেন যে এটিতে খাওয়ানো ডেটা ছেঁড়া-কাঁটা-এবং নাড়া-চাড়া করার জন্য এর অভ্যন্তরীণ প্রক্রিয়া কোনও উত্পাদন করে না। সত্যিই সব ছদ্ম র্যান্ডম ফলাফল.

মনে রাখবেন যে কোনও সম্ভাবনার চেয়ে ভাল ক্র্যাকিং পদ্ধতি, এমনকি যদি এটি শুধুমাত্র সংঘর্ষ তৈরির প্রক্রিয়াটিকে কিছুটা গতি দেয় এবং তাই বর্তমানে বাস্তব জীবনে শোষণযোগ্য ঝুঁকি নয়, ক্রিপ্টোগ্রাফিক শুদ্ধতার দাবিগুলিকে দুর্বল করে অন্তর্নিহিত ক্রিপ্টোগ্রাফিক অ্যালগরিদমের উপর বিশ্বাসকে নষ্ট করে। .

যদি 2 থাকেX বিভিন্ন সম্ভাব্য হ্যাশ আউটপুট, আপনি প্রায় অর্ধেক চেষ্টা করার পরে একটি নির্দিষ্ট, পূর্ব-নির্ধারিত হ্যাশ সহ একটি ইনপুট খুঁজে পাওয়ার সম্ভাবনা 50:50 আঘাত করার আশা করতে পারেন, এবং 2X/ 2 = 2এক্স-1. সংঘর্ষ হয় এমন যেকোনো দুটি ফাইল খুঁজে পাওয়া সহজ, কারণ আপনি যখনই একটি নতুন ইনপুট চেষ্টা করেন, আপনার নতুন হ্যাশের সাথে সংঘর্ষ হলে আপনি জিতবেন কোন পূর্ববর্তী ইনপুটগুলির মধ্যে আপনি ইতিমধ্যেই চেষ্টা করেছেন, কারণ যেকোন জোড়া ইনপুট অনুমোদিত। "এই দৈত্যাকার বালতিতে যে কোনও দুটি ফাইল করবে" বাছাইয়ের সংঘর্ষের জন্য, আপনি সম্ভাব্য হ্যাশের সংখ্যার বর্গমূলের চেয়ে সামান্য বেশি সাফল্যের সম্ভাবনা 50:50 আঘাত করবেন এবং √2X = 2এক্স / 2. সুতরাং, MD128-এর মতো একটি 5-বিট হ্যাশের জন্য, আপনি গড়ে প্রায় 2টি হ্যাশ করতে চান127 একটি নির্দিষ্ট আউটপুট মান মেলে ব্লক, এবং 264 কোন জোড়া সংঘর্ষ ইনপুট খুঁজে পেতে ব্লক.

দ্রুত MD5 সংঘর্ষ সহজ করে দিয়েছে

যেহেতু এটি ঘটছে, আপনি সহজে দুটি সম্পূর্ণ ভিন্ন, সম্পর্কহীন, সিউডোর্যান্ডম ইনপুট তৈরি করতে পারবেন না যেখানে একই MD5 হ্যাশ রয়েছে।

এবং আপনি সহজেই একটি MD5 হ্যাশ থেকে পিছনের দিকে যেতে পারবেন না যাতে এটি তৈরি করা নির্দিষ্ট ইনপুট সম্পর্কে কিছু উন্মোচন করা যায়, এটি আরেকটি ক্রিপ্টোগ্রাফিক প্রতিশ্রুতি যা একটি নির্ভরযোগ্য হ্যাশকে রাখতে হবে।

কিন্তু আপনি যদি দুটি অভিন্ন ইনপুট দিয়ে শুরু করেন এবং প্রতিটি ইনপুট স্ট্রীমে একই বিন্দুতে ইচ্ছাকৃতভাবে গণনা করা একটি জোড়া "সংঘর্ষ-বিল্ডিং" খণ্ড সন্নিবেশ করেন, আপনি নির্ভরযোগ্যভাবে সেকেন্ডের মধ্যে MD5 সংঘর্ষ তৈরি করতে পারেন, এমনকি একটি শালীন ল্যাপটপেও৷

উদাহরণস্বরূপ, এখানে একটি লুয়া প্রোগ্রাম যা আমরা লিখেছি যেটি সুবিধাজনকভাবে তিনটি পৃথক বিভাগে কাটা যেতে পারে, প্রতিটি 128 বাইট দীর্ঘ।

একটি কোড উপসর্গ রয়েছে যা পাঠ্যের একটি লাইন দিয়ে শেষ হয় যা একটি Lua মন্তব্য শুরু করে (স্ট্রিং শুরু হয় --[== লাইন 8 এ), তারপরে মন্তব্য পাঠ্যের 128 বাইট রয়েছে যা আমাদের পছন্দের যেকোনো কিছু দিয়ে প্রতিস্থাপিত করা যেতে পারে, কারণ ফাইলটি চলার সময় এটি উপেক্ষা করা হয় (লাইন 9 থেকে 11), এবং 128 বাইটের একটি কোড প্রত্যয় রয়েছে যা মন্তব্যটি বন্ধ করে দেয় ( স্ট্রিং শুরু --]== লাইন 12) এবং প্রোগ্রামটি শেষ করে।

এমনকি আপনি যদি একজন প্রোগ্রামার নাও হন, আপনি সম্ভবত দেখতে পারেন যে সক্রিয় কোডটি সোর্স কোড ফাইলের বিষয়বস্তুতে [লাইন 14] পড়ে (লুয়াতে, মান arg[0] অন ​​লাইন 5 হল স্ক্রিপ্ট ফাইলের নাম যা আপনি বর্তমানে চালাচ্ছেন), তারপর এটিকে হেক্স ডাম্প হিসাবে প্রিন্ট আউট করে [লাইন 15], এর পরে এর MD5 হ্যাশ [লাইন 17]:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.

ফাইল চালানো মূলত স্ব-বর্ণনামূলক, এবং তিনটি 128-বাইট ব্লককে সুস্পষ্ট করে তোলে:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.

একটি MD5 ব্যবহার করে গবেষণা টুল নামক md5_fastcoll, মূলত গণিতবিদ দ্বারা নির্মিত মার্ক স্টিভেনস 2007 সালে ক্রিপ্টোগ্রাফিতে তার স্নাতকোত্তর ডিগ্রির অংশ হিসাবে, আমরা দ্রুত দুটি 128-বাইট "MD5 সংঘর্ষ-বিল্ডিং" খণ্ড তৈরি করেছি যা আমরা উপরের ফাইলে দেখানো মন্তব্য পাঠ্য প্রতিস্থাপন করতে ব্যবহার করেছি।

এটি দুটি ফাইল তৈরি করেছে যা উভয়ই এখনও আগের মতো কাজ করে, কারণ পরিবর্তনগুলি মন্তব্যের মধ্যে সীমাবদ্ধ, যা উভয় ফাইলের এক্সিকিউটেবল কোডকে প্রভাবিত করে না।

কিন্তু এগুলি বেশ কয়েকটি বাইটে দৃশ্যমানভাবে আলাদা, এবং তাই সম্পূর্ণ ভিন্ন হ্যাশ মান থাকা উচিত, যেমন নিম্নলিখিত কোডের পার্থক্য (এর জন্য জারগন সনাক্ত পার্থক্য ডাম্প) প্রকাশিত.

আমরা 128-বাইটের সংঘর্ষ-সৃষ্টিকারী খণ্ডগুলিকে রূপান্তর করেছি, যা মুদ্রণযোগ্য পাঠ্য হিসাবে বোঝা যায় না, স্পষ্টতার জন্য হেক্সাডেসিমেলে:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.

তাদের উভয়কে চালানো, তবে, স্পষ্টভাবে দেখায় যে তারা একটি হ্যাশ সংঘর্ষের প্রতিনিধিত্ব করে, কারণ তাদের একই MD5 আউটপুট রয়েছে:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.

সংঘর্ষ জটিলতা অন্বেষণ

MD5 একটি 128-বিট হ্যাশ, যেমন উপরের আউটপুট স্ট্রিংগুলি স্পষ্ট করে।

সুতরাং, পূর্বে উল্লিখিত হিসাবে, আমরা প্রায় 2 প্রয়োজন আশা করব128/2, বা 264 যে কোন ধরণের MD5 সংঘর্ষ তৈরি করার জন্য গড়ে চেষ্টা করে।

এর মানে হল ন্যূনতম প্রায় 18 কুইন্টিলিয়ন MD5 হ্যাশ ব্লক প্রক্রিয়াকরণ, কারণ 264 = 18,446,744,073,709,551,616

আমাদের ল্যাপটপে প্রায় 5 ব্লক/সেকেন্ডের আনুমানিক সর্বোচ্চ MD50,000,000 হ্যাশ হারে, এর মানে আমাদের 10,000 বছরেরও বেশি অপেক্ষা করতে হবে, এবং যদিও ভাল অর্থায়নকারী আক্রমণকারীরা সহজেই তার চেয়ে 10,000 থেকে 100,000 গুণ দ্রুত যেতে পারে, এমনকি তারাও শুধুমাত্র একটি একক র্যান্ডম (এবং অগত্যা কার্যকর নয়) সংঘর্ষের জন্য সপ্তাহ বা মাস অপেক্ষা করুন।

তবুও উপরের জোড়া দুই-মুখী লুয়া ফাইল, যেগুলির ঠিক একই MD5 হ্যাশ রয়েছে যদিও স্পষ্টতই অভিন্ন না হওয়া সত্ত্বেও, প্রস্তুত হতে আমাদের মাত্র কয়েক সেকেন্ড সময় লেগেছে।

প্রকৃতপক্ষে, 10টি ফাইলের জন্য 10টি ভিন্ন সংঘর্ষ তৈরি করা, 10টি ভিন্ন প্রারম্ভিক উপসর্গ ব্যবহার করে যা আমরা নিজেরাই বেছে নিয়েছি, আমাদের নিয়েছে: 14.9sec, 4.7sec, 2.6sec, 2.1sec, 10.5sec, 2.4sec, 2.0sec, 0.14sec, 8.4. এবং 0.43 সেকেন্ড।

স্পষ্টতই, MD5 এর ক্রিপ্টোগ্রাফিক প্রতিশ্রুতি যা হিসাবে পরিচিত তা প্রদান করবে সংঘর্ষ প্রতিরোধের মৌলিকভাবে ভেঙে গেছে...

…আপাতদৃষ্টিতে কমপক্ষে 25 বিলিয়নের একটি ফ্যাক্টর দ্বারা, গড় সময়কে ভাগ করার উপর ভিত্তি করে আমরা একটি সংঘর্ষ (হাজার বছর, যেমন উপরে অনুমান করা হয়েছে) খুঁজে পাওয়ার জন্য অপেক্ষা করার আশা করি যা আমরা প্রকৃতপক্ষে পরিমাপ করেছি (14.9 সেকেন্ড) মন্থন করার সময় শুধুমাত্র এই নিবন্ধের জন্য দশটি ভিন্ন সংঘর্ষ।

প্রমাণীকরণ ত্রুটি ব্যাখ্যা

কিন্তু CVE-5-2022 এ MD38023 এর অনিরাপদ ব্যবহার সম্পর্কে কী?

লুয়া-স্টাইল সিউডোকোডে, লগনের সময় ব্যবহৃত ত্রুটিপূর্ণ বার্তা প্রমাণীকরণ কোড ছিল এই মত গণনা:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.

ব্যাখ্যা করার জন্য: ব্যবহার করা প্রমাণীকরণ কোড দ্বারা গণনা করা হয় hmac.md5() লাইন 15 ফাংশন কল, একটি হিসাবে পরিচিত কি ব্যবহার করে কীড হ্যাশ, এই ক্ষেত্রে HMAC-MD5.

HMAC নামটি সংক্ষিপ্ত হ্যাশ-ভিত্তিক বার্তা প্রমাণীকরণ কোড তৈরির জন্য ক্রিপ্টোগ্রাফিক নির্মাণ, এবং -MD5 প্রত্যয়টি অভ্যন্তরীণভাবে ব্যবহার করা হ্যাশিং অ্যালগরিদমকে বোঝায়।

HMAC তার বার্তা প্রমাণীকরণ কোড তৈরি করতে একটি গোপন কী ব্যবহার করে, যা অন্তর্নিহিত হ্যাশের দুটি আহ্বানের সাথে মিলিত হয়:

গুরুতর নিরাপত্তা: পুরানো ক্রিপ্টো PlatoBlockchain ডেটা ইন্টেলিজেন্সের কারণে সাম্বা লগন বাগ। উল্লম্ব অনুসন্ধান. আ.
উপরে, আমরা অভ্যন্তরীণভাবে MD5 ব্যবহার করছি, তাই অ্যালগরিদমের এই স্বাদটিকে HMAC-MD5 হিসাবে চিহ্নিত করা হয়েছে। 2023 সালে নিরাপদ বলে বিবেচিত বিকল্প নির্মাণগুলির মধ্যে রয়েছে HMAC-SHA-256 এবং HMAC-SHA-512, গাঢ় লাল পর্যায়ে SHA-256 বা SHA-512 হ্যাশ ফাংশন ব্যবহার করে।

কীটির কিছু বিট প্রথমে ফ্লিপ করা হয়েছে এবং প্রথম হ্যাশ শুরু হওয়ার আগে সরবরাহকৃত ডেটাতে প্রিপেন্ড করা হয়েছে।

এটি ক্রিপ্টোগ্রাফিক ক্র্যাকারদের নিয়ন্ত্রণকে অনেকাংশে কমিয়ে দেয়, যখন তারা হ্যাশিং প্রক্রিয়ায় সংঘর্ষ বা অন্যান্য অ-এলোমেলো আচরণকে উস্কে দেওয়ার চেষ্টা করে, হ্যাশ ফাংশনের অভ্যন্তরীণ অবস্থার উপর যখন ইনপুট ডেটার প্রথম বাইট পৌঁছে যায়।

উল্লেখযোগ্যভাবে, গোপন কী আক্রমণকারীদের তাদের নিজস্ব পছন্দের একটি বার্তা উপসর্গ দিয়ে শুরু করতে বাধা দেয়, যেমনটি আমরা করেছি twohash.lua উপরের উদাহরণ।

তারপরে, একবার প্রথম হ্যাশ গণনা করা হলে, কীটিতে বিটগুলির একটি ভিন্ন সেট ফ্লিপ করা হয়, সেই প্রথম হ্যাশ মানটিতে প্রিপেন্ড করা হয় এবং এই নতুন ইনপুট ডেটাটি দ্বিতীয়বার হ্যাশ করা হয়।

এটি আক্রমণকারীদের এইচএমএসি গণনার চূড়ান্ত অংশে হেরফের করতে বাধা দেয়, বিশেষত তাদের হ্যাশিং প্রক্রিয়ার শেষ পর্যায়ে তাদের নিজস্ব পছন্দের একটি প্রত্যয় যুক্ত করতে বাধা দেয়।

প্রকৃতপক্ষে, যদিও আপনার মোটেও MD5 ব্যবহার করা উচিত নয়, আমরা এমন কোনো বর্তমান আক্রমণ সম্পর্কে সচেতন নই যা অ্যালগরিদমকে ভেঙে দিতে পারে যখন এটি একটি এলোমেলোভাবে নির্বাচিত কী সহ HMAC-MD5 ফর্মে ব্যবহার করা হয়।

গর্তটা মাঝখানে

উপরের ছদ্মকোডের শোষণযোগ্য গর্তটি, তাই, লাইনগুলির একটিতে নেই যেখানে hmac.md5() ফাংশন ব্যবহার করা হয়।

পরিবর্তে, বাগটির হৃদয় হল লাইন 11, যেখানে আপনি যে ডেটা প্রমাণীকরণ করতে চান তা একটি নির্দিষ্ট দৈর্ঘ্যের স্ট্রিংয়ে সংকুচিত হয়...

.. প্লেইন পুরাতন MD5 এর একক আহ্বানের মাধ্যমে এটিকে ঠেলে দিয়ে।

অন্য কথায়, 15 লাইনে আপনি যে HMAC ফাংশনটি বেছে নিন না কেন, এবং সেই চূড়ান্ত পদক্ষেপটি যত শক্তিশালী এবং সংঘর্ষ-প্রতিরোধী হোক না কেন, তবুও লাইন 11-এ আপনার হ্যাশ সংঘর্ষ ঘটানোর সুযোগ রয়েছে।

সহজ কথায়, যদি আপনি জানেন যে তথ্য যা যেতে অনুমিত হয় chksum() প্রমাণীকরণের জন্য ফাংশন, এবং আপনি একই MD5 হ্যাশের সাথে ডেটার একটি ভিন্ন ব্লক খুঁজে পেতে একটি সংঘর্ষ জেনারেটর ব্যবহার করতে পারেন...

…লাইন 11 মানে আপনি শেষ হয়ে যাবেন ঠিক একই ইনপুট মান সহ (ভেরিয়েবল signdat সিউডোকোডে) আপনার মতো-সুরক্ষিত-এর মতো চূড়ান্ত HMAC ধাপে ঠেলে দেওয়া হচ্ছে।

অতএব, যদিও আপনি শেষ পর্যন্ত একটি শক্তিশালী কীড মেসেজ ডাইজেস্ট ফাংশন ব্যবহার করছেন, তবুও আপনি একটি MD5 হ্যাশ প্রমাণীকরণ করতে পারেন যা ইম্পোস্টার ডেটা থেকে প্রাপ্ত।

কম বেশি হতো

সাম্বার মতো নিরাপত্তা বুলেটিন কম্প্যাক্টলি সমস্যা বর্ণনা করে:

দুর্বলতা […] যে নিরাপদ চেকসাম হিসাবে গণনা করা হয় HMAC-MD5(MD5(DATA),KEY), যার অর্থ হল যে একজন সক্রিয় আক্রমণকারী প্লেইনটেক্সট ডেটা জেনে একটি ভিন্ন বেছে নিতে পারে DATA, একই MD5 চেকসাম সহ, এবং এটি সনাক্ত না করেই ডেটা স্ট্রীমে প্রতিস্থাপন করুন।

পরিহাস, আউট ছেড়ে MD5(DATA) উপরের HMAC সূত্রের অংশ, যা প্রথম নজরে সামগ্রিক "মিশ্রন" প্রক্রিয়া বাড়াতে বলে মনে হয়, সংঘর্ষ প্রতিরোধের উন্নতি করবে।

মাঝখানে সেই MD5 কম্প্রেশন ছাড়া, আপনাকে HMAC-MD5-এর মধ্যেই একটি সংঘর্ষ খুঁজে বের করতে হবে, যা সম্ভবত 2023 সালে সম্ভব হবে না, এমনকি প্রায় সীমাহীন সরকারি তহবিল থাকা সত্ত্বেও, অন্তত আপনি যে নেটওয়ার্ক সেশনটি চেষ্টা করছেন তার জীবনকালের মধ্যে নয়। আপস.

এতদিন কি লাগলো?

এখন পর্যন্ত, আপনি সম্ভবত ভাবছেন, আমরা যেমন ছিলাম, কেন এই বাগটি এতদিন ধরে অনাবিষ্কৃত, বা অন্তত আনপ্যাচ করা হয়নি।

সর্বোপরি, RFC 6151, যা 2011 সালের ঠিক ফিরে আসে এবং এর উল্লেখযোগ্য-শব্দযুক্ত শিরোনাম রয়েছে MD5 মেসেজ-ডাইজেস্ট এবং HMAC-MD5 অ্যালগরিদমের জন্য আপডেট করা নিরাপত্তা বিবেচনা, নিম্নরূপ পরামর্শ দেয় (আমাদের জোর, এক দশকেরও বেশি পরে):

বার্তা প্রমাণীকরণ কোড হিসাবে ব্যবহার করার সময় HMAC-MD5-এর আক্রমণগুলি ব্যবহারিক দুর্বলতা নির্দেশ করে বলে মনে হয় না। অতএব, বিদ্যমান প্রোটোকল থেকে HMAC-MD5 অপসারণ করা জরুরী নাও হতে পারে। তবে, MD5 থেকে ডিজিটাল স্বাক্ষরের জন্য ব্যবহার করা উচিত নয়, একটি নতুন প্রোটোকল ডিজাইনের জন্য, HMAC-MD5 সহ একটি সাইফারসুইট অন্তর্ভুক্ত করা উচিত নয়৷.

মনে হচ্ছে, যদিও, সাম্প্রতিক SMB সার্ভার প্ল্যাটফর্মের বিশাল সংখ্যাগরিষ্ঠ HMAC-MD5 প্রমাণীকরণ বন্ধ থাকে যখন ব্যবহারকারীরা লগ ইন করার চেষ্টা করে, যে SMB ক্লায়েন্টরা এখনও এই অনিরাপদ মোডটিকে সমর্থন করে তারা সাধারণত এটি ব্যবহার করে না (এবং যেভাবেই হোক ব্যর্থ হতো যদি তারা করত। চেষ্টা)।

ক্লায়েন্টদের অস্পষ্টভাবে "সুরক্ষিত" বলে মনে হয়েছিল, এবং অনিরাপদ কোডটি নিরীহ হিসাবে ভাল বলে মনে হয়েছিল, কারণ দুর্বল প্রমাণীকরণের প্রয়োজন ছিল না বা ব্যবহার করা হয়নি।

তাই সম্ভাব্য সমস্যাটি কখনই প্রাপ্য মনোযোগ পায়নি।

দুর্ভাগ্যবশত, এই ধরনের "অনুমান দ্বারা নিরাপত্তা" সম্পূর্ণরূপে ব্যর্থ হয় যদি আপনি এমন একটি সার্ভারের কাছে আসেন (অথবা প্রতি প্রলুব্ধ হন) যা এই অনিরাপদ স্বীকার করে chksum() লগইন করার সময় অ্যালগরিদম।

এই ধরণের "ডাউনগ্রেড সমস্যা" নতুন নয়: 2015 সালে, গবেষকরা কুখ্যাত পাগল এবং লগজাম আক্রমণ, যা ইচ্ছাকৃতভাবে নেটওয়ার্ক ক্লায়েন্টদের তথাকথিত এক্সপোর্ট সাইফার ব্যবহারে প্রতারিত করে, যা ইচ্ছাকৃতভাবে-দুর্বল এনক্রিপশন মোড যা মার্কিন সরকার গত শতাব্দীতে আইন দ্বারা উদ্ভটভাবে জোর দিয়েছিল।

যেমনটি আমরা তখন লিখেছিলাম:

এক্সপোর্ট কী দৈর্ঘ্য 1990-এর দশকে প্রায় ক্র্যাকযোগ্য হওয়ার জন্য বেছে নেওয়া হয়েছিল, কিন্তু প্রসেসরের গতিতে অগ্রগতি বজায় রাখার জন্য কখনই বাড়ানো হয়নি।

কারণ রপ্তানি সাইফারগুলি প্রায় 2000 সালে মার্কিন যুক্তরাষ্ট্র দ্বারা পরিত্যক্ত হয়েছিল।

এগুলি শুরু থেকেই একটি মূর্খ ধারণা ছিল: মার্কিন সংস্থাগুলি কেবলমাত্র ক্রিপ্টোগ্রাফিক সফ্টওয়্যার আমদানি করেছে যার কোনও রপ্তানি নিষেধাজ্ঞা ছিল না এবং তাদের নিজস্ব সফ্টওয়্যার শিল্পকে আঘাত করেছে৷

অবশ্যই, একবার আইন প্রণেতারা পথ দিয়ে গেলে, এক্সপোর্ট সাইফারসুইটগুলি অপ্রয়োজনীয় হয়ে ওঠে, তাই সবাই তাদের ব্যবহার বন্ধ করে দেয়।

দুঃখের বিষয়, OpenSSL এবং Microsoft এর SChannel সহ অনেকগুলি ক্রিপ্টোগ্রাফিক টুলকিটগুলি তাদের সমর্থন করার জন্য কোডটি রেখেছিল, তাই আপনাকে (বা, আরও উদ্বেগের বিষয় হল, সুপরিচিত বদমাশ) সেগুলি ব্যবহার করা থেকে বিরত করা হয়নি৷

এইবার, সার্ভারগুলির মধ্যে প্রধান অপরাধী যেগুলি এখনও এই ভাঙা MD5-plus-HMAC-MD5 প্রক্রিয়াটি ব্যবহার করে তা হল NetApp পরিসর, যার মধ্যে কিছু পণ্য এই ঝুঁকিপূর্ণ অ্যালগরিদমের উপর নির্ভর করার জন্য দৃশ্যত চালিয়ে যান (বা সম্প্রতি পর্যন্ত করেছিলেন)।

তাই আপনি এখনও কখনও কখনও একটি দুর্বল নেটওয়ার্ক লগইন প্রক্রিয়ার মধ্য দিয়ে যাচ্ছেন এবং CVE-2022-38023 এর ঝুঁকিতে থাকতে পারেন, সম্ভবত এটি উপলব্ধি না করেও।

কি করো?

এই বাগ অবশেষে হয়েছে মোকাবিলা, অন্তত ডিফল্টরূপে, সাম্বার সর্বশেষ প্রকাশে।

সহজভাবে করা, সাম্বা সংস্করণ 4.17.5 এখন দুটি বিকল্প জোর করে reject md5 clients = yes এবং reject md5 servers = yes.

এর মানে হল বিভিন্ন এসএমবি নেটওয়ার্কিং প্রোটোকলের যেকোনো ক্রিপ্টোগ্রাফিক উপাদান যা MD5 অ্যালগরিদমকে (এমনকি তাত্ত্বিকভাবে নিরাপদ হলেও, HMAC-MD5) জড়িত ডিফল্টরূপে নিষিদ্ধ.

আপনার যদি সত্যিই প্রয়োজন হয়, আপনি আপনার নেটওয়ার্কে নির্দিষ্ট সার্ভারগুলি অ্যাক্সেস করার জন্য সেগুলিকে আবার চালু করতে পারেন৷

শুধু নিশ্চিত করুন, যদি আপনি ব্যতিক্রমগুলি তৈরি করেন যে ইন্টারনেট মানগুলি ইতিমধ্যে এক দশকেরও বেশি সময় ধরে আনুষ্ঠানিকভাবে পরামর্শ দিয়েছে…

…আপনি নিজেকে একটি তারিখ নির্ধারণ করেন যার মাধ্যমে আপনি অবশেষে সেই নন-ডিফল্ট বিকল্পগুলি চিরতরে অবসর নেবেন!

ক্রিপ্টোগ্রাফিক আক্রমণগুলি কেবলমাত্র আরও স্মার্ট এবং দ্রুততর হয়, তাই কখনই পুরানো প্রোটোকল এবং অ্যালগরিদমের উপর নির্ভর করবেন না কেবলমাত্র "আর ব্যবহার করা হচ্ছে না"৷

আপনার কোড থেকে সেগুলিকে সম্পূর্ণভাবে বাদ দিন, কারণ যদি সেগুলি সেখানে না থাকে তবে আপনি সেগুলি ব্যবহার করতে পারবেন না, এবং যে কেউ আপনাকে নিরাপত্তাহীনতায় প্রলুব্ধ করার চেষ্টা করছে তার দ্বারা আপনি সেগুলি ব্যবহার করে প্রতারিত হতে পারবেন না৷


সময় স্ট্যাম্প:

থেকে আরো নগ্ন সুরক্ষা