ক্রস-সাইট স্ক্রিপ্টিং (Cross-site scripting) আক্রমণ কি এবং প্রতিরোধে করণীয়
by CIRT Team
ক্রস-সাইট স্ক্রিপ্টিং (Cross-site scripting) কি?
ক্রস-সাইট স্ক্রিপ্টিং (XSS) এক ধরনের কোড ইঞ্জেকশন আক্রমণ যা আক্রমণকারীকে অন্য ব্যবহারকারীর ব্রাউজারে ক্ষতিকর জাভাস্ক্রিপ্ট কোড চালনার সুযোগ দেয়। এ ধরনের আক্রমণের ক্ষেত্রে সাধারণত আক্রমণক্রারী, ব্যবহারকারীর ব্যবহৃত ওয়েবসাইটের কোন নিরাপত্তা দুর্বলতাকে কাজে লাগিয়ে ব্যবহারকারীর ওয়েব ব্রাউজারে ক্ষতিকর জাভাস্ক্রিপ্ট কোড পাঠায়। ব্যবহারকারীর ওয়েব ব্রাউজারে এই ক্ষতিকর জাভাস্ক্রিপ্ট কোড ওয়েবসাইটের অন্যান্য স্বাভাবিক কোডের মতই চালিত হয় এবং আক্রমণকারীকে তার কাংখিত ফলাফল পেতে সাহায্য করে।
ক্ষতিকর জাভাস্ক্রিপ্ট কোড কি?
ব্রাউজারে জাভাস্ক্রিপ্ট কোড চালনা করা প্রাথমিকভাবে ক্ষতিকর বলে পরিলক্ষিত হয় না কারণ জাভাস্ক্রিপ্ট অত্যন্ত সীমাবদ্ধ পরিবেশে চলে যা ব্যবহারকারীর ফাইল এবং অপারেটিং সিস্টেমে অত্যন্ত সীমিত অ্যাক্সেস নিতে পারে। তবে, নিম্নলিখিত বিষয়গুলি বিবেচনা করলে ব্যবহারকারীর জন্য জাভাস্ক্রিপ্ট কোডের ক্ষতিকর দিকগুলি আরও স্পষ্টভাবে বোঝা যায়।
- জাভাস্ক্রিপ্ট ব্যবহারকারীর সংবেদনশীল তথ্য যেমন কুকিজের (cookies) অ্যাক্সেস নিতে পারে।
- জাভাস্ক্রিপ্ট Document Object Model (DOM) ম্যানিপুলেশন পদ্ধতি ব্যবহার করে এইচটিএমএল কোডে ইচ্ছামত পরিবর্তন করতে পারে।
- জাভাস্ক্রিপ্ট XMLHttpRequest এবং অন্যান্য প্রক্রিয়া ব্যবহার করে বিধিবর্হিভূত (arbitrary) কন্টেন্টসহ HTTP রিকোয়েষ্ট প্রেরণ করতে পারে।
উপরিল্লিখিত বিষয়গুলি একত্রিত করলে ক্ষতিকর জাভাস্ক্রিপ্ট কোড খুব গুরুতর সুরক্ষা লঙ্ঘনের কারণ হতে পারে।
কীভাবে ক্ষতিকর জাভাস্ক্রিপ্ট কোড ইনজেক্ট করা হয়?
ব্যবহারকারীর ব্রাউজারে আক্রমণকারীর ক্ষতিকর জাভাস্ক্রিপ্ট চালানোর উপায় হলো, ব্যবহারকারীর ব্যবহৃত ওয়েবসাইটে অথবা ওয়েবসাইটের ডেটাবেজে ক্ষতিকর কোড আগেই ইঞ্জেক্ট করে রাখা। এই ক্ষতিকর জাভাস্ক্রিপ্ট কোড ইঞ্জেকশন তখনই সম্ভব যখন ওয়েবপেইজে কোন ব্যবহারকারী প্রদত্ত ইনপুট সরাসরিভাবে কোন প্রকার ইনপুট ফিল্টারিং ছাড়াই অন্তর্ভুক্ত করা হয়। এভাবে আক্রমণকারী ক্ষতিকর জাভাস্ক্রিপ্ট কোড ওয়েবসাইটে প্রবেশ করাতে পারে যা ব্যবহারকারীর ব্রাউজার দ্বারা স্বাভাবিক কোড হিসাবে চালিত হয়।
ক্রস-সাইট স্ক্রিপ্টিং এর প্রকারভেদ
যদিও ক্রস-সাইট স্ক্রিপ্টিং আক্রমণের লক্ষ্য সর্বদাই ব্যবহারকারীর ব্রাউজারে ক্ষতিকর জাভাস্ক্রিপ্ট কোড চালানো, তবে সেই লক্ষ্য অর্জনের বিভিন্ন উপায় রয়েছে। ক্রস-সাইট স্ক্রিপ্টিং আক্রমণ সাধারনত তিন ধরনেরঃ
- Reflected XSS, যেখানে ক্ষতিকর কোডটির উৎস হচ্ছে ব্যবহারকারীর ওয়েব রিকোয়েষ্ট।
- Persistent XSS, যেখানে ক্ষতিকর কোডটির উৎস হচ্ছে ওয়েবসাইটের ডাটাবেস।
- DOM-based XSS, যেখানে ক্লায়েন্ট সাইড কোডের দুর্বলতার জন্য ক্রস-সাইট স্ক্রিপ্টিং আক্রমণ সংঘটিত হয়।
Reflected ক্রস-সাইট স্ক্রিপ্টিং
ক্রস-সাইট স্ক্রিপ্টিং আক্রমণগুলির মধ্যে Reflected XSS হলো সবচেয়ে প্রচলিত এবং সাধারন। এ ধরনের আক্রমণের ক্ষেত্রে, ক্ষতিকর কোড ওয়েব রিকোষ্টের অংশ হিসেবে পাঠানো হয় এবং সার্ভার থেকে রেসপন্স পাঠানোর সময় এই ক্ষতিকর কোড ব্যবহারকারীর ব্রাউজারে চালিত হয় এবং এর ফলাফল ওয়েব ব্রাউজারে পরিলক্ষিত হয়।
(সূত্রঃ excess-xss.com)
চিত্রঃ Reflected XSS
Persistent ক্রস-সাইট স্ক্রিপ্টিং
এ ধরনের আক্রমণের ক্ষেত্রে, ওয়েবসাইট অথবা ওয়েবসাইটের ডেটাবেজে আক্রমণকারী কর্তৃক পূর্বেই ক্ষতিকর কোড ইঞ্জেক্ট করা থাকে। সার্ভার কর্তৃক প্রেরিত ওয়েব রেসপন্সের সাথে এই ক্ষতিকর কোড ব্যবহারকারীর ব্রাউজারে চালিত হয় এবং এর ফলাফল ওয়েব ব্রাউজারে পরিলক্ষিত হয় অথবা আক্রমণকারীর নির্দিষ্ট কোন সার্ভারে ফলাফল প্রেরিত হয়। এই ক্ষতিকর কোড ডেটাবেজ থেকে মুছে না ফেলা পর্যন্ত প্রতিবার তা ব্যবহারকারীর ব্রাউজারে চালিত হয়।
(সূত্রঃ excess-xss.com)
চিত্রঃ Persistent XSS
DOM-based ক্রস-সাইট স্ক্রিপ্টিং
ক্রস-সাইট স্ক্রিপ্টিং আক্রমণগুলির মধ্যে এই ধরণের আক্রমণ সম্পূর্ণ ভিন্ন যা ক্লায়েন্ট সাইডে ঘটে থাকে। এ ধরনের আক্রমণের ক্ষেত্রে, বৈধ (legitimate) জাভাস্ক্রিপ্ট কোড ওয়েবসাইটের সাথে চালিত হয়ে ওয়েব পেইজের HTML কোড এ পরিবর্তন করার সময় ব্যবহারকারী কর্তৃক প্রদত্ত ক্ষতিকর কোড parse করে এবং এর ফলাফল ওয়েব ব্রাউজারে পরিলক্ষিত হয় অথবা আক্রমণকারীর নির্দিষ্ট কোন সার্ভারে ফলাফল প্রেরিত হয়।
(সূত্রঃ excess-xss.com)
চিত্রঃ DOM-based XSS
ক্রস-সাইট স্ক্রিপ্টিং এর মাধ্যমে ব্যবহারাকারীর কি ক্ষতি হতে পারে?
ব্যবহারকারীর ব্রাউজারে ক্ষতিকর জাভাস্ক্রিপ্ট কোড চালিয়ে আক্রমণকারী অনেক ধরণের গুরুত্বপূর্ণ তথ্য নিতে পারে এবং পরবর্তিতে এইসব তথ্যের মাধ্যমে ব্যবহারকারীর ক্ষতিসাধন করতে পারে। কিছু উল্লেখযোগ্য আক্রমণ সম্পর্কে আলোচনা করা হলোঃ
- কুকি (cookie) চুরিঃ আক্রমণকারী document.cookie ব্যবহার করে ওয়েবসাইটের সাথে সম্পর্কিত ব্যবহারকারীর কুকিজ (cookies) অ্যাক্সেস করতে পারে এবং সেগুলি তার নিজস্ব সার্ভারে প্রেরণ করতে পারে। সেশন (session) আইডির মতো সংবেদনশীল তথ্য ব্যবহার করে ব্যবহারকারীর একাউন্টের নিয়ন্ত্রণ নিতে পারে।
- কী লগিং (Key logging): আক্রমণকারী addEventListener মেথড ব্যবহার করে ব্যবহারকারীর কীবোর্ডের প্রতিটি কীস্ট্রোক (keystrokes) রেকর্ড করে তার নিজস্ব সার্ভারে প্রেরণ করতে পারে। এভাবে ব্যবহারকারীর সংবেদনশীল তথ্য যেমন পাসওয়ার্ড এবং ক্রেডিট কার্ড নম্বর ইত্যাদি আক্রমণকারী পেতে পারে।
- ফিশিং (Phishing): আক্রমণকারী dom ম্যানিপুলেশনের মাধ্যমে ওয়েবসাইটে একটি নকল (fake) লগইন ফর্ম তৈরি করে ব্যবহারকারীকে ফাঁদে ফেলে তার সংবেদনশীল তথ্য হাতিয়ে নিতে পারে।
ক্রস-সাইট স্ক্রিপ্টিং আক্রমণ প্রতিরোধের উপায়
XSS এক ধরণের কোড ইঞ্জেকশন আক্রমণ যেখানে ব্যবহারকারী প্রদত্ত ইনপুট কোন প্রকার ফিল্টারিং ছাড়াই ব্রাউজারে চালিত হওয়ার কারনে অনাকাংখিত ফলাফল প্রদর্শিত হয়। এই ধরণের কোড ইঞ্জেকশন প্রতিরোধ করার জন্য সুরক্ষিত ইনপুট হ্যান্ডলিং প্রয়োজন। ওয়েব ডেভেলপারগন সুরক্ষিত ইনপুট হ্যান্ডলিং বিভিন্ন ভাবে সম্পাদন করতে পারেনঃ
- এনকোডিং (encoding): ব্যবহারকারীর ইনপুট এনকোড করা, যাতে ইনপুট কোড হিসাবে নয়, কেবল ডেটা হিসাবে বিবেচিত হয়।
- ভ্যালিডেশন (validation): ব্যবহারকারী দ্বারা সরবরাহিত কোন ইনপুট ফিল্টার করে ইনপুটের ক্ষতিকর অংশটুকু সিস্টেমে প্রবেশে বাধা প্রদান করা।
- ইনবাউন্ড/আউটবাউন্ড (inbound/outbound): সুরক্ষিত ইনপুট হ্যান্ডলিং সম্পাদনা হতে পারে দুটি উপায়ে। যখন ওয়েবসাইট, ব্যবহারকারীর ইনপুট গ্রহন (receive) করে তার পূর্বে অথবা যখন ওয়েবসাইট কোন পেইজে ইনপুট যুক্ত করে তার পূর্বে।
- ক্লায়েন্ট/সার্ভার (client/server): সুরক্ষিত ইনপুট হ্যান্ডলিং সম্পাদনা ক্লায়েন্ট সাইডেও হতে পারে আবার সার্ভার সাইডেও হতে পারে। ভিন্ন ভিন্ন পরিস্থিতিতে উভয়ই প্রয়োজন হতে পারে।
- কন্টেন্ট নিরাপত্তা পলিসি (Content Security Policy): যখন সুরক্ষিত ইনপুট হ্যান্ডলিং ব্যর্থ হয় তখন কন্টেন্ট নিরাপত্তা পলিসি অতিরিক্ত প্রতিরক্ষা স্তর (defense layer) হিসেবে কাজ করে।
Mohammad Ariful Islam Information Security Specialist BGD e-GOV CIRT