ReDoS (Regular Expression Denial of Service) এবং তার সমাধান

RegExp এর Security Considerations - জাভাস্ক্রিপ্ট রেগএক্সপি (Javascript RegExp) - Web Development

265

ReDoS (Regular Expression Denial of Service) হল একটি সাইবার আক্রমণ পদ্ধতি যেখানে একটি রেগুলার এক্সপ্রেশন (RegEx) এর অকার্যকর বা অত্যধিক ধীরগতি সম্পন্ন বাস্তবায়ন ব্যবহার করে সার্ভার বা অ্যাপ্লিকেশনের পারফরম্যান্স ব্যাহত করা হয়। এই ধরনের আক্রমণ একটি এনডালিং (Denial of Service) আক্রমণ, যার মাধ্যমে সিস্টেমের কার্যক্ষমতা অস্বাভাবিকভাবে কমে যায়, বা সম্পূর্ণরূপে স্তব্ধ হয়ে যায়।

ReDoS আক্রমণ সাধারণত ঘটে যখন একটি অতি জটিল রেগুলার এক্সপ্রেশন তৈরি করা হয়, যা বিশেষ ধরনের input data এর ওপর প্রয়োগ করলে দীর্ঘ সময় ধরে চলতে থাকে, বিশেষ করে backtracking এর কারণে। এই আক্রমণকারী সাধারণত স্ট্রিং বা ডেটার বিশেষ ধরণের ইনপুট ব্যবহার করে, যা রেগুলার এক্সপ্রেশনকে ধীর করে দেয় বা সম্পূর্ণভাবে আটকে দেয়।


ReDoS আক্রমণের কারণ

ReDoS আক্রমণের মূল কারণ হল backtracking—একটি প্যাটার্ন যখন স্ট্রিংয়ের সাথে মেলানো চেষ্টা করে, তখন বিভিন্ন অবস্থানে ফিরে গিয়ে মিল খোঁজার চেষ্টা করে। যদি ইনপুট স্ট্রিংটি সঠিকভাবে non-greedy না হয় বা প্যাটার্নটি খুব জটিল হয়, তবে এই প্রক্রিয়া অনেক সময় নিতে পারে। এই অতিরিক্ত সময়ে আক্রমণকারী সিস্টেমের পারফরম্যান্স খারাপ করে দিতে পারে।


ReDoS আক্রমণ উদাহরণ

ধরা যাক, আপনার কাছে একটি জটিল রেগুলার এক্সপ্রেশন রয়েছে, যা একটি স্ট্রিংয়ের মধ্যে অনেকগুলো a চিহ্নের পরে একটি b চিহ্ন খুঁজে বের করে:

let regex = /(a+)+b/;

এটি একটি greedy প্যাটার্ন, যেখানে প্রথম অংশে একাধিক a থাকবে এবং পরবর্তী অংশে b থাকবে। যদি ইনপুট স্ট্রিংটি এইরকম হয়:

let str = "a".repeat(100000) + "b";

তাহলে, এটি আক্রমণকারী স্ট্রিংয়ের কারণে backtracking করতে বাধ্য হবে, যার ফলে এটি অত্যন্ত ধীর হয়ে যাবে। প্রতিটি a জন্য পরবর্তী অংশটি পরীক্ষা করতে অনেক সময় নেবে, যার ফলে সিস্টেম hang বা crash হতে পারে।


ReDoS আক্রমণ কিভাবে ঘটে?

ReDoS আক্রমণ সাধারণত তখন ঘটে যখন:

  1. Greedy Quantifiers (যেমন *, +, {n,}) এবং backtracking জটিলতার সাথে ব্যবহার করা হয়।
  2. Nested quantifiers (যেমন (a+)+) একসাথে ব্যবহার করা হয়, যেখানে একাধিক প্যাটার্নের মধ্যে backtracking সঞ্চালিত হয়।
  3. Untrusted user input: ব্যবহারকারী ইনপুটের মাধ্যমে এমন স্ট্রিং প্রদান করা হয় যা বিশেষভাবে ডিজাইন করা হয়েছে রেগুলার এক্সপ্রেশনকে ধীর করতে বা সিস্টেমের পারফরম্যান্স হুমকির মুখে ফেলতে।

ReDoS আক্রমণের প্রতিরোধ

ReDoS আক্রমণ প্রতিরোধের জন্য কিছু টিপস এবং কৌশল রয়েছে যা আপনাকে নিরাপদে রেগুলার এক্সপ্রেশন ব্যবহার করতে সহায়তা করবে।


১. Greedy Quantifiers কম ব্যবহার করুন

যতটা সম্ভব greedy quantifiers (যেমন *, +) ব্যবহার করার সময় সতর্ক থাকুন। তাদের জায়গায় non-greedy quantifiers (যেমন *?, +?) ব্যবহার করতে চেষ্টা করুন, যা মেলানোর জন্য কম সময় নেয়।

Greedy:

let regex = /(a+)+b/;

Non-greedy:

let regex = /(a+)?b/;

এই পরিবর্তনটি backtracking কমাতে সাহায্য করবে, কারণ এটি তাড়াতাড়ি মেলে এবং অতিরিক্ত মিল খোঁজার চেষ্টা করবে না।


২. Untrusted User Input Validation

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


৩. RegExp ডিজাইন সহজ এবং স্পষ্ট রাখুন

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

যতটা সম্ভব avoid করুন:

let regex = /(a+)+/;

এটিকে সহজ করুন:

let regex = /a+/;

এই পদ্ধতিটি রেগুলার এক্সপ্রেশনকে অধিক কার্যকরী এবং পারফরম্যান্সের জন্য উপযোগী করে তুলবে।


৪. RegExp টাইম আউট সেট করুন

অনেক ভাষায় আপনি রেগুলার এক্সপ্রেশন কার্যকর করার জন্য টাইম আউট নির্ধারণ করতে পারেন। যদি কোনো রেগুলার এক্সপ্রেশন অতিরিক্ত সময় নেয়, তখন তাকে থামিয়ে দেয়া যেতে পারে। এটি একটি গুরুত্বপূর্ণ সুরক্ষা ব্যবস্থা, যা সিস্টেমের Denial of Service (DoS) আক্রমণ প্রতিরোধ করতে সাহায্য করবে।


৫. RegExp রিভিউ এবং টেস্টিং

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


৬. Web Application Firewalls (WAF) ব্যবহার করুন

এমন কোনও Web Application Firewall (WAF) ব্যবহার করা যেতে পারে যা রেগুলার এক্সপ্রেশনগুলো স্ক্যান করবে এবং সন্দেহজনক বা অবিশ্বাস্য ইনপুটগুলি ব্লক করবে।


সারাংশ

ReDoS (Regular Expression Denial of Service) একটি আক্রমণ যা রেগুলার এক্সপ্রেশনের অতিরিক্ত জটিলতার কারণে সিস্টেমের পারফরম্যান্স কমিয়ে দেয়। এটি backtracking এবং greedy quantifiers এর মাধ্যমে ঘটতে পারে, বিশেষ করে যখন অবিশ্বাস্য ইনপুট আসে।

ReDoS প্রতিরোধের জন্য নিচের পদ্ধতিগুলি অনুসরণ করা উচিত:

  • Greedy quantifiers এড়িয়ে non-greedy ব্যবহার করুন।
  • Untrusted user input যাচাই এবং ফিল্টার করুন।
  • RegExp ডিজাইন করুন সহজ এবং স্পষ্ট।
  • RegExp টাইম আউট সেট করুন।
  • RegExp রিভিউ এবং টেস্টিং করুন।
  • WAF ব্যবহার করুন।

এই ধরনের আক্রমণ প্রতিরোধ করে আপনার সিস্টেমের স্থিতিশীলতা এবং নিরাপত্তা নিশ্চিত করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...