paint-brush
কোড-জেনারেটিভ এআই দ্বারা প্রবর্তিত সাধারণ দুর্বলতাগুলি বিশ্লেষণ করাদ্বারা@natanjfrog
4,968 পড়া
4,968 পড়া

কোড-জেনারেটিভ এআই দ্বারা প্রবর্তিত সাধারণ দুর্বলতাগুলি বিশ্লেষণ করা

দ্বারা Natan Nehorai11m2024/02/04
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

স্বয়ংক্রিয়ভাবে তৈরি কোডকে অন্ধভাবে বিশ্বাস করা যায় না এবং সফ্টওয়্যার দুর্বলতাগুলি প্রবর্তন এড়াতে এখনও একটি নিরাপত্তা পর্যালোচনার প্রয়োজন৷
featured image - কোড-জেনারেটিভ এআই দ্বারা প্রবর্তিত সাধারণ দুর্বলতাগুলি বিশ্লেষণ করা
Natan Nehorai HackerNoon profile picture
0-item
1-item

কৃত্রিম বুদ্ধিমত্তার সরঞ্জাম যেমন বার্ড, চ্যাটজিপিটি এবং বিং চ্যাট হল লার্জ ল্যাঙ্গুয়েজ মডেল (এলএলএম) বিভাগে বর্তমান বড় নাম যা ক্রমবর্ধমান।


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


AI কোড-জেনারেটর সরঞ্জামগুলির বর্তমান বাজারে, GitHub Copilot , Amazon CodeWhisperer , Google Cloud Code (Duet AI) , Blackbox AI কোড জেনারেশন এবং আরও অনেক কিছু সহ অনেক প্লেয়ার রয়েছে৷ এই ব্লগ পোস্টটি সাধারণ নিরাপত্তা সমস্যাগুলির উদাহরণগুলির রূপরেখা দেয় যা বিকাশকারীরা এই ধরনের সরঞ্জামগুলি ব্যবহার করার সময় সম্মুখীন হয়৷


এই নিবন্ধটির লক্ষ্য হল সচেতনতা বাড়ানো এবং জোর দেওয়া যে স্বয়ংক্রিয়ভাবে তৈরি কোডকে অন্ধভাবে বিশ্বাস করা যায় না এবং সফ্টওয়্যার দুর্বলতাগুলি প্রবর্তন এড়াতে এখনও একটি নিরাপত্তা পর্যালোচনার প্রয়োজন৷


দ্রষ্টব্য: কিছু বিক্রেতা পরামর্শ দেন যে তাদের স্বয়ংক্রিয়-সম্পূর্ণ সরঞ্জামগুলিতে অনিরাপদ কোড স্নিপেট থাকতে পারে।


অনেক নিবন্ধ ইতিমধ্যেই জোর দিয়েছে যে স্বয়ংক্রিয়-সম্পূর্ণ সরঞ্জামগুলি পরিচিত দুর্বলতা যেমন IDOR , SQL ইনজেকশন এবং XSS তৈরি করে৷ এই পোস্টটি অন্যান্য দুর্বলতার ধরনগুলিকে হাইলাইট করবে যা কোডের প্রেক্ষাপটের উপর বেশি নির্ভর করে, যেখানে আপনার কোডে বাগ স্লিপ করার জন্য AI স্বয়ংক্রিয়-সম্পূর্ণ হওয়ার উচ্চ সম্ভাবনা রয়েছে।


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


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


যাইহোক, অনেক নিরাপত্তা সমস্যা প্রসঙ্গ-নির্ভর যা অভ্যন্তরীণ কার্যকারিতা হিসাবে প্রয়োগ করা হলে পুরোপুরি নিরাপদ হতে পারে, যখন কোনও ক্লায়েন্টের কাছ থেকে বাহ্যিক ইনপুটের মুখোমুখি হয়, তখন একটি দুর্বলতা হয়ে ওঠে এবং তাই AI এর শেখার ডেটাসেটের মাধ্যমে পার্থক্য করা কঠিন।


এই ধরনের দুর্বলতার ক্ষেত্রে, কোডের নির্দিষ্ট ব্যবহার সাধারণত কোডের অন্যান্য অংশ এবং অ্যাপ্লিকেশনের সামগ্রিক উদ্দেশ্যের উপর নির্ভর করে।


এখানে কিছু সাধারণ ব্যবহারের কেস এবং উদাহরণ রয়েছে যা আমরা পরীক্ষা করেছি, এই ধরনের কিছু দুর্বলতা প্রদর্শন করে:

  1. ইউজ কেস: ইউজার ইনপুট থেকে ফাইল আনা - আরবিট্রারি ফাইল রিড
  2. ব্যবহার কেস: গোপন টোকেন তুলনা করা - টাইপ জাগলিং/জবরদস্তি
  3. ইউজ কেস: ভুলে গেছি পাসওয়ার্ড মেকানিজম - ইউনিকোড কেস ম্যাপিং সংঘর্ষ
  4. ব্যবহারের ক্ষেত্রে: কনফিগারেশন ফাইল তৈরি করা হচ্ছে - খারাপ নিরাপত্তা অনুশীলন
  5. কেস ব্যবহার করুন: কনফিগারেশন অবজেক্ট - অসঙ্গতিগুলি অনিরাপদ ডিসিরিয়ালাইজেশনের দিকে পরিচালিত করে


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


এখানে কিছু সাধারণ ব্যবহারের ক্ষেত্রে এবং উদাহরণ রয়েছে যা আমরা ইচ্ছাকৃতভাবে সুরক্ষিত কোডের অনুরোধ করে পরীক্ষা করেছি:

  1. সিকিউর কোড রিকোয়েস্ট ইউজ কেস: ফাইল রিডিং - ডিরেক্টরি ট্রাভার্সাল এড়িয়ে চলা
  2. সুরক্ষিত কোড অনুরোধ - ফাইল আপলোড - সীমাবদ্ধ এক্সটেনশন তালিকা


  1. ইউজ কেস: ইউজার ইনপুট থেকে ফাইল আনা - আরবিট্রারি ফাইল রিড

অনেক অ্যাপ্লিকেশনের মধ্যে কোড থাকে যা একটি ফাইলের নামের উপর ভিত্তি করে ব্যবহারকারীর কাছে একটি ফাইল ফিরিয়ে আনে। সার্ভারে নির্বিচারে ফাইল পড়ার জন্য ডিরেক্টরি ট্রাভার্সাল ব্যবহার করা একটি সাধারণ পদ্ধতি যা খারাপ অভিনেতারা অননুমোদিত তথ্য পেতে ব্যবহার করে।


ফাইলটি ফিরিয়ে আনার আগে ব্যবহারকারীর কাছ থেকে আসা ফাইলের নাম/ফাইল পাথ ইনপুটকে স্যানিটাইজ করা সুস্পষ্ট মনে হতে পারে, তবে আমরা ধরে নিই যে জেনেরিক কোডবেসে প্রশিক্ষণপ্রাপ্ত এআই মডেলের জন্য এটি একটি কঠিন কাজ - এর কারণ কিছু ডেটাসেটের প্রয়োজন নেই স্যানিটাইজড পাথগুলি তাদের কার্যকারিতার অংশ হিসাবে ব্যবহার করুন (এটি কার্যকারিতা হ্রাস করতে পারে বা কার্যকারিতা ক্ষতি করতে পারে) বা অস্বাস্থ্যকর পথ দ্বারা ক্ষতিগ্রস্থ হয় না কারণ সেগুলি শুধুমাত্র অভ্যন্তরীণ ব্যবহারের জন্য উদ্দেশ্যে করা হয়েছে।


এআই টুল সাজেশন (গুগল ক্লাউড কোড - ডুয়েট এআই): আসুন গুগল ক্লাউড কোড - ডুয়েট এআই স্বয়ংসম্পূর্ণ ব্যবহার করে ব্যবহারকারীর ইনপুট থেকে একটি মৌলিক ফাইল আনার ফাংশন তৈরি করার চেষ্টা করি। আমরা Duet AI কে আমাদের ফাংশন এবং রুটের নামের উপর ভিত্তি করে আমাদের কোড স্বয়ংক্রিয়ভাবে সম্পূর্ণ করতে দেব -



আমরা ধূসর রঙে দেখতে পাচ্ছি, স্বয়ংসম্পূর্ণ পরামর্শ হল ফ্লাস্কের “ send_file ” ফাংশন ব্যবহার করা, যা ফ্লাস্কের মৌলিক ফাইল-হ্যান্ডলিং ফাংশন।


কিন্তু এমনকি ফ্লাস্কের ডকুমেন্টেশনে বলা হয়েছে “ কোনও ব্যবহারকারীর দ্বারা প্রদত্ত ফাইল পাথ কখনই পাস করবেন না ”, অর্থাৎ সরাসরি “send_file” ফাংশনে ব্যবহারকারীর ইনপুট ঢোকানোর সময় ব্যবহারকারীর ফাইল সিস্টেমের যেকোনো ফাইল পড়ার ক্ষমতা থাকবে, উদাহরণস্বরূপ ডিরেক্টরি ট্রাভার্সাল অক্ষর ব্যবহার করে যেমন ফাইলের নামে “../”।


সঠিক বাস্তবায়ন:


ফ্লাস্কের নিরাপদ "send_from_directory" ফাংশন দিয়ে "send_file" ফাংশন প্রতিস্থাপন করা হলে তা ডাইরেক্টরি ট্রাভার্সাল ঝুঁকি কমিয়ে দেবে। এটি শুধুমাত্র একটি নির্দিষ্ট হার্ড-কোডেড ডিরেক্টরি থেকে ফাইল আনার অনুমতি দেবে (এই ক্ষেত্রে "রপ্তানি")।


  1. ব্যবহার কেস: গোপন টোকেন তুলনা করা - টাইপ জাগলিং/জবরদস্তি

কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজ, যেমন পিএইচপি এবং নোডজেএসে, দুটি ভিন্ন ধরনের ভেরিয়েবলের মধ্যে তুলনা করা সম্ভব এবং প্রোগ্রামটি ক্রিয়াটি সম্পূর্ণ করার জন্য পর্দার পিছনে একটি টাইপ রূপান্তর করবে।


আলগা তুলনা পর্দার পিছনে ভেরিয়েবলের ধরন পরীক্ষা করে না এবং তাই জাগলিং আক্রমণ টাইপ করার প্রবণতা বেশি। যাইহোক, ঢিলেঢালা তুলনার ব্যবহারকে নিজের দ্বারা একটি অনিরাপদ কোডিং অনুশীলন হিসাবে বিবেচনা করা হয় না - এটি কোডের প্রসঙ্গের উপর নির্ভর করে। এবং আবার, এআই মডেলগুলির পক্ষে কেসগুলি আলাদা করা কঠিন।


AI টুল সাজেশন (Amazon CodeWhisperer): পিএইচপি টাইপ জাগলিং এর সবচেয়ে সাধারণ উদাহরণ হল গোপন টোকেন/হ্যাশের আলগা তুলনা যেখানে ব্যবহারকারীর ইনপুট যা JSON অনুরোধের মাধ্যমে পড়া হয় (যা ইনপুটের প্রকারের নিয়ন্ত্রণ সক্ষম করে) একটি আলগা তুলনাতে পৌঁছায় (“ ” ) এর পরিবর্তে একটি কঠোর (“ =”)।


এটি প্রদর্শিত হিসাবে, CodeWhisperer স্বয়ংক্রিয়-সম্পূর্ণ পরামর্শগুলিতে আলগা তুলনা শর্ত তৈরি করে:

সিক্রেট_টোকেনের আলগা তুলনা একটি প্রতিপক্ষকে তুলনা $ডেটা[“secret_token”] == “secret_token” বাইপাস করতে দেয়। "সিক্রেট_টোকেন" মান সহ একটি JSON অবজেক্ট জমা দেওয়ার সময় সত্য (বুলিয়ান), আলগা তুলনা ফলাফলটিও সত্য (এমনকি নতুন পিএইচপি সংস্করণেও)।



এমনকি "নিরাপদভাবে" চেকটি লেখার জন্য টুলটিকে (একটি মন্তব্য ব্যবহার করে) "ইঙ্গিত" করার সময়, এটি একটি কঠোর তুলনা সহ একটি কোড স্নিপেট তৈরি করেনি -

সঠিক বাস্তবায়ন:

শুধুমাত্র কঠোর তুলনা (“===”) নির্দিষ্ট করার সময় আমরা টাইপ জাগলিং আক্রমণ থেকে সুরক্ষিত থাকি।


  1. ইউজ কেস: ভুলে গেছি পাসওয়ার্ড মেকানিজম - ইউনিকোড কেস ম্যাপিং সংঘর্ষ

"পাসওয়ার্ড ভুলে গেছি" প্রক্রিয়ার দুর্বলতাগুলি SaaS অ্যাপ্লিকেশনগুলিতে খুব সাধারণ এবং CVEগুলির পিছনে মূল কারণ ছিল যেমন CVE-2017-8295 (ওয়ার্ডপ্রেস), CVE-2019-19844 (জ্যাঙ্গো), এবং CVE-2023-7028 (গিটল্যাব)।


বিশেষভাবে, একটি ইউনিকোড কেস ম্যাপিং সংঘর্ষের দুর্বলতা দেখা দেয় যখন ব্যবহারকারীর ইনপুট তুলনামূলক অভিব্যক্তিতে বড় হাতের বা ছোট হাতের হয় যখন কোডে এর আসল মানও ব্যবহার করা হয়। কিছু ভিন্ন অক্ষর রূপান্তরিত হলে একই অক্ষর কোডে পরিণত হবে। উদাহরণস্বরূপ, "ß" এবং "SS" উভয়ই বড় হাতের অক্ষরে "0x00DF" এ রূপান্তরিত হবে।


এই ধরনের কেসগুলি সাধারণত তুলনা চেককে ফাঁকি দিয়ে কিছু নিরাপত্তা চেককে বাইপাস/বিভ্রান্ত করতে এবং পরে মূল মান ব্যবহার করে যা প্রত্যাশার চেয়ে আলাদা। এই কেসগুলি বোঝার জন্য বেশ অধরা, বিশেষ করে যখন অনেকগুলি বাস্তবায়ন সম্ভব।


AI টুল সাজেশন (GitHub Copilot): একটি প্রক্রিয়া যা এই দুর্বলতার প্রকারের জন্য বিশেষভাবে সংবেদনশীল তা হল ভুলে যাওয়া পাসওয়ার্ড মেকানিজম । অনাকাঙ্ক্ষিত অমিল এড়াতে চেক করার সময় ব্যবহারকারীর ইনপুট বড় হাতের বা ছোট হাতের (ইমেল ঠিকানা বা ডোমেন নামগুলিতে) স্বাভাবিক করা সাধারণ।


উদাহরণ হিসাবে, ভুলে যাওয়া পাসওয়ার্ড ফাংশনের জন্য কপিলট-জেনারেটেড কোডটি দেখে নেওয়া (নীচে) দেখায় যে এটি এই সমস্যার জন্য ঝুঁকিপূর্ণ।


কপিলটের কোড প্রথমে ছোট হাতের ইমেল ঠিকানাটি সন্ধান করে:

পাসওয়ার্ড ভুলে গেছেন - ক্যোয়ারীতে ছোট হাতের ইমেল করার পরামর্শ


তারপরে, বাকি প্রক্রিয়াটি অনুসরণ করার সময় এটি নিম্নলিখিতগুলির পরামর্শ দেয়:

পাসওয়ার্ড ভুলে গেছেন - send_email এ আসল (ছোট হাতের নয়) ইমেল ঠিকানা ব্যবহার করার পরামর্শ


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


উদাহরণ স্বরূপ, ধরা যাক আক্রমণকারী “[email protected]” এর ইনবক্সের মালিক (“K” হল একটি কেলভিন সাইন ইউনিকোড অক্ষর) এবং “পাসওয়ার্ড ভুলে গেছেন” পদ্ধতির জন্য এই ইমেলটি ব্যবহার করে। "[email protected]" এবং "[email protected]" ইমেলগুলি 'যেমন-ই'-এর সমতুল্য নয় , কিন্তু ছোট হাতের রূপান্তরের পরে সেগুলি হবে -


ইমেল ঠিকানা “[email protected]” ব্যবহার করলে “[email protected]”-এর অ্যাকাউন্টের তথ্য পাওয়া যাবে কিন্তু রিসেট পাসওয়ার্ড আক্রমণকারীর ইনবক্সে (“[email protected]”) পাঠানো হবে, যাতে “ [email protected]” অ্যাকাউন্ট।


যথাযথ বাস্তবায়ন: ব্যবহারকারীর অ্যাকাউন্ট আনার জন্য ব্যবহৃত ইমেল ঠিকানাটি অবশ্যই পুনরুদ্ধারের ইমেল ঠিকানার সমান হতে হবে (যেমন send_email প্যারামিটার এছাড়াও email.lower() ব্যবহার করবে)।


এছাড়াও, সতর্কতা হিসাবে, ব্যবহারকারীর দ্বারা সরবরাহ করা মানটির পরিবর্তে সার্ভারে ইতিমধ্যেই সংরক্ষিত মান ব্যবহার করার পরামর্শ দেওয়া হয়৷


  1. ব্যবহারের ক্ষেত্রে: কনফিগারেশন ফাইল তৈরি করা হচ্ছে - খারাপ নিরাপত্তা অনুশীলন

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


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


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


এআই টুল সাজেশন (ব্ল্যাকবক্স এআই কোড জেনারেশন): এই উদাহরণে, আমরা একটি পড কনফিগারেশন ফাইল তৈরি করা শুরু করি।

পরামর্শটি সক্ষমতা বিভাগ তৈরি করে এবং কন্টেইনারে একটি Linux কার্নেল ক্ষমতা (SYS_ADMIN) যোগ করে যা মূলত রুট ব্যবহারকারী হিসাবে পড চালানোর সমতুল্য।


যথাযথ বাস্তবায়ন: তাহলে কি নিরাপত্তা প্রসঙ্গে বাদ দেওয়া ভাল? না - যেহেতু অন্যান্য অনেক ক্ষমতা ডিফল্টরূপে যোগ করা হবে, ন্যূনতম বিশেষাধিকারের নীতি লঙ্ঘন করে।


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


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


  1. কেস ব্যবহার করুন: কনফিগারেশন অবজেক্ট - অসঙ্গতিগুলি অনিরাপদ ডিসিরিয়ালাইজেশনের দিকে পরিচালিত করে

    অনেক দুর্বলতার জন্য একটি কনফিগারেশন অবজেক্ট সংজ্ঞায়িত করা প্রয়োজন, যা নির্ধারণ করে কিভাবে অ্যাপ্লিকেশন প্রয়োজনীয় উপাদান পরিচালনা করবে।


আমরা যে উদাহরণটি বেছে নিয়েছি তা হল C#-এ Newtonsoft-এর JSON ডিসিরিয়ালাইজেশন লাইব্রেরি, যা JsonSerializerSettings অবজেক্টের কনফিগারেশন এবং বিশেষত TypeNameHandling- এর উপর নির্ভর করে নিরাপদে বা অনিরাপদভাবে ব্যবহার করা যেতে পারে।


আমরা ডিসিরিয়ালাইজেশন কোড পরীক্ষা করার সময়, আমরা লক্ষ্য করেছি যে কনফিগারেশন অবজেক্টের সংজ্ঞা বেশ র্যান্ডম, এবং সূক্ষ্ম পরিবর্তনগুলি একটি ভিন্ন কনফিগারেশন সেট তৈরি করতে পারে।


AI টুল সাজেশনস (Amazon CodeWhisperer): নিম্নলিখিত উদাহরণগুলি একটি অসামঞ্জস্যপূর্ণ আচরণ প্রদর্শন করে যা শুধুমাত্র বিকাশকারীর দ্বারা ব্যবহৃত পদ্ধতির নামের উপর ভিত্তি করে:


আমরা দুটি ভিন্ন কনফিগারেশন দেখতে পাচ্ছি যে দুটির ফলেই অনিরাপদ JSON ডিসিরিয়ালাইজেশন হয় কারণ TypeNameHandling প্রপার্টি "Auto" এবং "ALL"। এই বৈশিষ্ট্যগুলি JSON নথিকে ডিসিরিয়ালাইজড ক্লাস সংজ্ঞায়িত করার অনুমতি দেয় - আক্রমণকারীদের নির্বিচারে ক্লাস ডিসিরিয়ালাইজ করতে দেয়। দূরবর্তী কোড এক্সিকিউশনের জন্য এটি সহজে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ "System.Diagnostics.Process" ক্লাস ডিসিরিয়ালাইজ করে। বিকাশকারীর মূল কোডের মধ্যে একমাত্র পার্থক্য হল পদ্ধতির নাম।


সঠিক বাস্তবায়ন:

ডিফল্টরূপে, একটি JsonSerializerSettings অবজেক্টকে "TypeNameHandling = TypeNameHandling.None" দিয়ে ইনস্ট্যান্ট করা হয়, যা নিরাপদ বলে মনে করা হয়। এইভাবে, আমরা JsonSerializerSettings এর ডিফল্ট কনস্ট্রাক্টর ব্যবহার করি যার ফলে একটি নিরাপদ TypeNameHandling মান হবে।


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


AI টুল সাজেশন (GitHub Copilot):

আমরা দেখতে পাচ্ছি যে সিকিউরিটি চেকটি আসলেই নিষ্পাপ, শুধুমাত্র ডট-ডট-স্ল্যাশ সিকোয়েন্সগুলি এড়িয়ে যাচ্ছে যা ডিরেক্টরি ট্রাভার্সাল প্রচেষ্টা পরিচালনা করার জন্য প্রয়োজন। পাথ প্যারামিটার একটি পরম পাথ হতে পারে - সিস্টেমের যেকোন পছন্দসই পাথকে নির্দেশ করে (উদাহরণস্বরূপ, /etc/passwd), যা নিরাপত্তা পরীক্ষার উদ্দেশ্যকে হারায়।


সঠিক বাস্তবায়ন:

এখানে, safe_file_read ফাংশন একটি ডিরেক্টরি (safe_dir) সহ একটি (আপেক্ষিক) ফাইলের নাম প্যারামিটার পায় যেখানে ফাইলের নামটি থাকা উচিত (এবং যা এড়িয়ে যাওয়া উচিত নয়)। এটি safe_dir এবং ফাইলের নাম যোগ করে একটি পরম পথ তৈরি করে এবং রিয়েলপথকে কল করে এর ক্যানোনিকালাইজড ফর্ম পেতে এগিয়ে যায়। এটি তারপর safe_dir ফোল্ডারের ক্যানোনিকালাইজড ফর্ম পায়। তারপর, ক্যানোনিকালাইজড পাথ ক্যানোনিকালাইজ করা safe_dir দিয়ে শুরু হলেই ফাইলের বিষয়বস্তু ফেরত দেওয়া হয়।


  1. সুরক্ষিত কোড অনুরোধ - ফাইল আপলোড - সীমাবদ্ধ এক্সটেনশন তালিকা এটি একটি সাধারণ ব্যবহারের ক্ষেত্রে শুধুমাত্র নির্দিষ্ট ফাইল প্রকারগুলিকে আপলোড করার জন্য তাদের এক্সটেনশনের উপর ভিত্তি করে গ্রহণ করা।


এআই টুল সাজেশন (ব্ল্যাকবক্স এআই কোড জেনারেশন): নিচের উদাহরণে, আমরা এআই স্বয়ংক্রিয়-সম্পূর্ণকারীকে বিপজ্জনক ফাইল এক্সটেনশন ফিল্টার করার জন্য একটি ফাংশন তৈরি করতে বলেছি।

প্রস্তাবিত পাইথন কোড ফাইলের নাম নেয়, এক্সটেনশনকে আলাদা করে এবং বিপজ্জনক এক্সটেনশনের তালিকার সাথে তুলনা করে।


প্রথম নজরে, এই কোড স্নিপেট সুরক্ষিত দেখায়। যাইহোক, Windows ফাইলনাম কনভেনশনগুলি একটি ডট দিয়ে শেষ হওয়া ফাইলের নামগুলিকে নিষিদ্ধ করে এবং ফাইল তৈরির সময় একটি ডট (“.”) দিয়ে শেষ হওয়া ফাইলের নাম সরবরাহ করার সময়, ডটটি বাতিল করা হবে৷ এর অর্থ, একটি ডট (উদাহরণস্বরূপ "example.exe।") দ্বারা একটি ক্ষতিকারক এক্সটেনশন সহ একটি ফাইল জমা দেওয়ার সময় উত্পন্ন ফিল্টারটি উইন্ডোজে বাইপাস করা যেতে পারে৷


সঠিক বাস্তবায়ন: সাধারণত একটি সাদাতালিকা ব্যবহার করাই ভালো পন্থা, যা শুধুমাত্র অনুমোদিত এক্সটেনশনের বিপরীতে ফাইল এক্সটেনশন চেক করে। যাইহোক, যেহেতু সরঞ্জামগুলি একটি কালো তালিকা পদ্ধতি গ্রহণ করেছে (যা কিছু ক্ষেত্রে প্রয়োজন) আমরা একটি নিরাপদ কালো তালিকা বাস্তবায়ন রূপরেখা দেব:


নিম্নলিখিত স্নিপেটে, সমস্ত নন-আলফানিউমেরিক অক্ষর থেকে এক্সটেনশনটি ছিনিয়ে এবং একটি নতুন জেনারেট করা ফাইলনামে সংযুক্ত করে ইনপুটটিতে ব্যবহারকারীর যতটা নিয়ন্ত্রণ ছিল আমরা তা সরিয়ে ফেলি।


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


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


JFrog সিকিউরিটি রিসার্চ টিমের সুপারিশ আপনার সফ্টওয়্যারকে সুরক্ষিত করতে সাহায্য করার জন্য, আমরা AI জেনারেটিভ টুলস দ্বারা উত্পাদিত কোড ম্যানুয়ালি পর্যালোচনা করার পাশাপাশি স্ট্যাটিক অ্যাপ্লিকেশন সিকিউরিটি টেস্টিং (SAST) এর মতো নিরাপত্তা সমাধানগুলিকে অন্তর্ভুক্ত করার পরামর্শ দিই যা আপনার যাওয়ার সাথে সাথে দুর্বলতাগুলিকে বিশ্বস্তভাবে আবিষ্কার করতে পারে৷ উপরের উদাহরণে যেমন দেখা গেছে, SAST টুলগুলি ইউনিকোড কেস ম্যাপিং সংঘর্ষকে সতর্ক করতে পারে এবং ধরতে পারে ব্যবহার ক্ষেত্রে #3-তে বর্ণিত। এই সক্রিয় পদ্ধতি আপনার সফ্টওয়্যার নিরাপত্তা নিশ্চিত করতে অপরিহার্য.


JFrog সিকিউরিটি রিসার্চের সাথে আপ-টু-ডেট থাকুন নিরাপত্তা গবেষণা দলের ফলাফল এবং গবেষণা JFrog প্ল্যাটফর্মের অ্যাপ্লিকেশন সফ্টওয়্যার নিরাপত্তা ক্ষমতার উন্নতিতে গুরুত্বপূর্ণ ভূমিকা পালন করে।


আমাদের গবেষণা ওয়েবসাইট এবং X @JFrogSecurity- এ JFrog সিকিউরিটি রিসার্চ টিমের সর্বশেষ আবিষ্কার এবং প্রযুক্তিগত আপডেটগুলি অনুসরণ করুন।