Clickjacking: ওয়েবপেজে অদৃশ্য বাটন ব্যবহার করে ব্যবহারকারীদের প্রতারিত করার কৌশল!
Clickjacking আক্রমণের প্রকারভেদ, কারিগরি কৌশল, বাস্তব উদাহরণ এবং কার্যকর প্রতিরোধ ব্যবস্থা নিয়ে বিস্তারিত আলোচনা।
কল্পনা করুন আপনি একটি আকর্ষণীয় গেম খেলছেন—স্ক্রিনে দ্রুত নড়াচড়া করা বস্তুর উপর ক্লিক করে পয়েন্ট সংগ্রহ করছেন। কিন্তু আপনি জানেন না যে প্রতিটি ক্লিকের সাথে আসলে আপনি আপনার ফেসবুক প্রোফাইলে কোনো পোস্ট লাইক করছেন, ব্যাংক ট্রান্সফার অনুমোদন করছেন, বা ক্যামেরা অ্যাক্সেসের অনুমতি দিচ্ছেন। এটিই Clickjacking-এর মূলকথা—ব্যবহারকারীকে এমন কাজ করানো যা তিনি কখনোই সচেতনভাবে করতেন না। এই কৌশলকে UI Redress Attack বা Interface Manipulation-ও বলা হয়। ২০০৮ সালে নিরাপত্তা গবেষক Robert Hansen এবং Jeremiah Grossman এই আক্রমণের ধারণা প্রথম প্রকাশ্যে আনেন। এই আর্টিকেলে আমরা Clickjacking-এর কারিগরি দিক, প্রকারভেদ এবং কার্যকর প্রতিরক্ষার কৌশল বিশদে আলোচনা করব।
Clickjacking-এর মূলনীতি
Clickjacking-এর মৌলিক ধারণা সহজ। আক্রমণকারী একটি ক্ষতিকর ওয়েবপেজ তৈরি করেন যাতে একটি বৈধ লক্ষ্য ওয়েবসাইট (যেমন ব্যাংক, সোশ্যাল মিডিয়া) iframe-এর মাধ্যমে এমবেড করা থাকে। এই iframe-এর CSS opacity 0 সেট করা হয় যাতে এটি অদৃশ্য থাকে। তারপর এর উপরে আকর্ষণীয় কনটেন্ট স্থাপন করা হয়—যেমন একটি গেম, ভিডিও প্লেয়ার, বা "Claim Your Prize" বাটন।
ব্যবহারকারী যখন স্ক্রিনে কোনো বস্তুতে ক্লিক করেন, প্রকৃতপক্ষে সেই ক্লিকটি অদৃশ্য iframe-এর নির্দিষ্ট বাটনে পৌঁছায়। যেহেতু লক্ষ্য সাইটে ব্যবহারকারী ইতিমধ্যে লগ ইন থাকেন (তাদের সেশন কুকি ব্রাউজার স্বয়ংক্রিয়ভাবে পাঠায়), iframe-এর মধ্যে সম্পন্ন কাজটি বৈধ ব্যবহারকারীর অনুমোদিত কাজ হিসেবে গণ্য হয়।
প্রযুক্তিগত বাস্তবায়ন
একটি সাধারণ Clickjacking আক্রমণের কোড দেখা যাক:
<style>
iframe {
position: absolute;
top: 0;
left: 0;
width: 800px;
height: 600px;
opacity: 0;
z-index: 2;
}
.decoy {
position: absolute;
top: 200px;
left: 300px;
z-index: 1;
}
</style>
<div class="decoy">
<button>আপনার পুরস্কার পেতে এখানে ক্লিক করুন!</button>
</div>
<iframe src="https://bank.com/transfer?to=attacker&amount=10000"></iframe>
এখানে iframe দৃশ্যমান নয়, কিন্তু এটি ব্যাংকের ট্রান্সফার পেজ লোড করেছে। নিচের decoy বাটনটি দৃশ্যমান, এবং ব্যবহারকারী যখন এতে ক্লিক করেন, ক্লিকটি আসলে iframe-এর "Confirm Transfer" বাটনে পৌঁছায়।
আরও পরিশীলিত আক্রমণে আক্রমণকারী Cursor Tracking ব্যবহার করেন—JavaScript দিয়ে মাউস কারসারের অবস্থান ট্র্যাক করে ঠিক যেখানে কারসার যাচ্ছে সেখানে iframe-এর গুরুত্বপূর্ণ বাটন স্থাপন করেন। এটি বিশেষ করে গেম-ভিত্তিক প্রতারণায় কার্যকর।
Clickjacking-এর প্রকারভেদ
Classic Clickjacking-এর বাইরে কয়েকটি বিশেষ প্রকার রয়েছে। Likejacking হলো Clickjacking-এর সবচেয়ে প্রচলিত প্রকার, যেখানে ব্যবহারকারীকে ফেসবুক, টুইটার-এ অজান্তে কিছু লাইক বা শেয়ার করানো হয়। ২০১১ সালের দিকে ফেসবুকে এই ধরনের আক্রমণ মহামারীর মতো ছড়িয়ে পড়েছিল।
Cursorjacking-এ আক্রমণকারী মাউস কারসারের প্রকৃত অবস্থান এবং দৃশ্যমান অবস্থানের মধ্যে অসামঞ্জস্য তৈরি করেন। ব্যবহারকারী একটি জায়গায় ক্লিক করছেন বলে মনে করেন, কিন্তু আসলে অন্য জায়গায় ক্লিক হচ্ছে।
Filejacking-এ ক্ষতিকর সাইট ব্যবহারকারীর ফাইল আপলোড অ্যাকশন হাইজ্যাক করে—<input type="file">-এ ক্লিক করানোর মাধ্যমে ব্যবহারকারীর ফাইল সিস্টেমে অ্যাক্সেস পাওয়া।
Tabnabbing/Tabjacking আরেক ধরনের প্রতারণা, যেখানে একটি ব্যাকগ্রাউন্ড ট্যাব নিজেকে একটি বৈধ সাইট (যেমন Gmail-এর লগইন পেজ) হিসেবে পরিবর্তন করে যখন ব্যবহারকারী অন্যত্র ব্যস্ত থাকেন।
সবচেয়ে আধুনিক প্রকার হলো Drag-and-Drop Clickjacking এবং Touch-based Clickjacking মোবাইল ডিভাইসে। মোবাইলে স্পর্শ-ভিত্তিক আক্রমণ বিশেষ করে কার্যকর কারণ ব্যবহারকারীরা ছোট পর্দায় পরিষ্কারভাবে দেখতে পান না।
বাস্তব ঘটনা ও প্রভাব
২০১৭ সালে নিরাপত্তা গবেষক James Kettle Twitter-এ একটি ভয়াবহ Clickjacking দুর্বলতা আবিষ্কার করেন যা ব্যবহারকারীদের অজান্তে ক্ষতিকর Twitter অ্যাপ্লিকেশনকে তাদের অ্যাকাউন্টে অ্যাক্সেস দিতে বাধ্য করতে পারত। এর ফলে আক্রমণকারী ভুক্তভোগীর পক্ষে টুইট পোস্ট, ফলোয়ার দেখা, এবং ডিএম পড়তে পারতেন।
LinkedIn, PayPal, Adobe-সহ অসংখ্য বড় কোম্পানি অতীতে Clickjacking দুর্বলতার শিকার হয়েছে। ২০১৫ সালে একটি Adobe Flash Player Clickjacking ভ্যালনারেবিলিটি ব্যবহার করে আক্রমণকারীরা ব্যবহারকারীদের ওয়েবক্যাম ও মাইক্রোফোন অ্যাক্সেস পেতেন।
বর্তমানে Cryptocurrency Wallet ও Decentralized Application (dApp)-এ Clickjacking একটি গুরুত্বপূর্ণ ঝুঁকি। MetaMask-এর মতো ওয়ালেটে যদি লেনদেন অনুমোদনের iframe কোথাও এমবেড করা যায়, একটি ক্লিকেই ভুক্তভোগী তার সব ক্রিপ্টো হারাতে পারেন।
প্রতিরোধের প্রাথমিক পদ্ধতি
প্রথম দিকে ওয়েব ডেভেলপাররা Clickjacking থেকে সুরক্ষার জন্য Frame Buster স্ক্রিপ্ট ব্যবহার করতেন। একটি সাধারণ Frame Buster দেখতে এমন:
if (top !== self) {
top.location = self.location;
}
এই স্ক্রিপ্ট চেক করে পেজটি যদি একটি iframe-এর মধ্যে লোড হয়, তাহলে এটি জোর করে শীর্ষ-স্তরে নেভিগেট করে। কিন্তু আক্রমণকারীরা শীঘ্রই Frame Buster বাইপাস করার কৌশল আবিষ্কার করলেন—যেমন iframe-এর sandbox অ্যাট্রিবিউট ব্যবহার করে JavaScript নিষ্ক্রিয় করা, বা onbeforeunload ইভেন্ট হ্যান্ডলার দিয়ে নেভিগেশন থামানো।
X-Frame-Options Header
পরবর্তীতে ব্রাউজার বিক্রেতারা একটি ডেডিকেটেড সমাধান চালু করেন—X-Frame-Options HTTP রেসপন্স হেডার। এর তিনটি মান রয়েছে। DENY মান সেট করলে পেজটি কোনো iframe-এ লোড করা যাবে না। SAMEORIGIN মানে শুধু একই অরিজিনের পেজ থেকে iframe-এ লোড করা যাবে। ALLOW-FROM uri (এখন deprecated) নির্দিষ্ট সাইট থেকে অনুমতি দিত।
সংবেদনশীল পেজে (লগইন, পেমেন্ট, অ্যাকাউন্ট সেটিংস) X-Frame-Options: DENY সেট করা সর্বোত্তম। সাধারণ অ্যাপ্লিকেশন পেজে SAMEORIGIN যথেষ্ট। এই হেডার সব আধুনিক ব্রাউজারে সমর্থিত।
Content Security Policy Frame-Ancestors
X-Frame-Options-এর সীমাবদ্ধতা ছিল—এটি শুধু একটি উৎস অনুমতি দিতে পারত। আধুনিক সমাধান হলো Content Security Policy (CSP)-এর frame-ancestors ডিরেক্টিভ। এটি একাধিক উৎসের তালিকা সমর্থন করে এবং X-Frame-Options-এর চেয়ে নমনীয়।
উদাহরণ:
Content-Security-Policy: frame-ancestors 'self' https://trusted-partner.com;
এটি বলে পেজটি শুধু একই অরিজিন এবং trusted-partner.com থেকে iframe হতে পারে। সম্পূর্ণ ব্লকের জন্য:
Content-Security-Policy: frame-ancestors 'none';
আধুনিক ব্রাউজার X-Frame-Options-এর পরিবর্তে CSP frame-ancestors-কে অগ্রাধিকার দেয়। উভয়ই সেট করলে CSP জিতবে।
SameSite Cookie
Clickjacking আক্রমণের কার্যকারিতা মূলত নির্ভর করে ব্রাউজার iframe-এ স্বয়ংক্রিয়ভাবে কুকি পাঠাবে এই বিষয়ে। আধুনিক ব্রাউজার এখন ডিফল্টভাবে SameSite=Lax কুকি প্রয়োগ করে, যা cross-site iframe-এ কুকি পাঠানো সীমিত করে।
সংবেদনশীল কুকিতে SameSite=Strict সেট করা সর্বোত্তম। এটি নিশ্চিত করে কুকি শুধু তখনই পাঠানো হবে যখন রিকোয়েস্টটি একই সাইট থেকে আসে। Secure ও HttpOnly ফ্ল্যাগও সবসময় সেট করুন।
প্রতিরোধ ও প্রতিকার
সম্পূর্ণ Clickjacking প্রতিরোধে কয়েকটি স্তরে কাজ করতে হবে। প্রথমত, সব সংবেদনশীল পেজে যথাযথ Content-Security-Policy: frame-ancestors এবং X-Frame-Options হেডার সেট করুন। শুধু একটি সেট করলেও পুরোনো ব্রাউজার সমর্থনের জন্য উভয় থাকা ভালো।
দ্বিতীয়ত, গুরুত্বপূর্ণ অ্যাকশনের জন্য Re-authentication বা Multi-Factor Authentication বাধ্যতামূলক করুন। অর্থ স্থানান্তর, পাসওয়ার্ড পরিবর্তন, বা অ্যাকাউন্ট ডিলেশনের আগে ব্যবহারকারীর পাসওয়ার্ড পুনরায় জিজ্ঞাসা করুন।
তৃতীয়ত, CSRF টোকেন ব্যবহার করুন—যদিও এটি প্রাথমিকভাবে CSRF-এর জন্য, এটি Clickjacking-এর কার্যকারিতাও কমায়। চতুর্থত, Confirmation Dialog যোগ করুন যা ব্যবহারকারীর কাছ থেকে অতিরিক্ত নিশ্চিতকরণ চায়—যেমন একটি CAPTCHA বা টাইপ-করা নিশ্চিতকরণ ("DELETE" টাইপ করুন)।
পঞ্চমত, ব্যবহারকারী শিক্ষা গুরুত্বপূর্ণ—তাদের সচেতন করুন যেন কোনো সন্দেহজনক পপআপ বা "Free Prize" সাইটে ক্লিক না করেন, এবং সংবেদনশীল কাজের জন্য সরাসরি বিশ্বস্ত সাইটে গিয়ে কাজ করেন।
পরীক্ষার জন্য Burp Suite-এর Clickbandit টুল ব্যবহার করুন—এটি স্বয়ংক্রিয়ভাবে একটি Clickjacking PoC তৈরি করে যাতে দেখা যায় একটি সাইট দুর্বল কিনা। Mozilla Observatory এবং SecurityHeaders.com সাইটে আপনার সাইটের হেডার যাচাই করুন।
Clickjacking একটি পুরোনো কিন্তু এখনো প্রাসঙ্গিক আক্রমণ যা ওয়েব অ্যাপ্লিকেশনের একটি সাধারণ অথচ বিপজ্জনক দুর্বলতা। আধুনিক ব্রাউজার এবং ডিফল্ট SameSite কুকি অনেকটাই সুরক্ষা দিলেও, ডেভেলপাররা যদি যথাযথ হেডার সেট না করেন, তাহলে এখনো আক্রমণের সম্ভাবনা থেকে যায়। প্রতিটি প্রতিষ্ঠানের উচিত তাদের সব ওয়েব অ্যাপ্লিকেশনে CSP frame-ancestors যোগ করা এবং নিয়মিত নিরাপত্তা পরীক্ষায় Clickjacking-এর সম্ভাবনা যাচাই করা। একটি সাধারণ হেডার আপনার ব্যবহারকারীদের অজানা প্রতারণা থেকে রক্ষা করতে পারে।
আপনার জ্ঞান যাচাই করতে প্রস্তুত? আজই HackCert-এ Clickjacking MCQ Quiz-টি দিন!
Related articles
API Security: Is Data Leaking Through Your Modern Web App APIs?
8 min
Blind SQLi: Advanced Techniques to Extract Sensitive Data from Databases
12 min
Cache Poisoning: Manipulating Web Servers to Serve Malicious Payloads
8 min
CORS Misconfiguration: Risk of Data Leaks Due to Web Application Configuration Errors
10 min

