যদি আপনার অ্যাপ্লিকেশনটিতে লগইন, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট/পুনরুদ্ধারের মতো মৌলিক বৈশিষ্ট্যগুলি অন্তর্ভুক্ত থাকে, নিশ্চিতকরণ লিঙ্কগুলি পুনরায় পাঠান এবং সার্ভারের অনুরোধের প্রয়োজনে অন্যান্য নির্দিষ্ট কার্যকারিতাগুলি প্রয়োজন, তাহলে ব্রুট ফোর্স অ্যাটাক এবং আপনার পরিষেবাতে যথেষ্ট লোড তৈরির বিরুদ্ধে ব্যবস্থা বাস্তবায়ন করা অত্যন্ত গুরুত্বপূর্ণ৷ এই ধরনের ব্যবস্থা না থাকলে, আপনার অ্যাপ্লিকেশন ব্যবহারকারীদের অত্যধিক সংখ্যক ইমেল/OTP পাঠানো সহ বিভিন্ন হুমকির জন্য ঝুঁকিপূর্ণ হতে পারে, যা সম্ভাব্য আর্থিক এবং সুনামগত ক্ষতির দিকে পরিচালিত করে।
অনেক ওয়েব অ্যাপ্লিকেশনের পর্যাপ্ত হার-সীমিত ব্যবস্থার অভাব রয়েছে, শুধুমাত্র তাদের ব্যবসায়িক যুক্তি দ্বারা আরোপিত সীমাবদ্ধতার উপর নির্ভর করে, যেমন একটি পেমেন্ট মডেলের উপর ভিত্তি করে অনুরোধের সংখ্যা সীমিত করা। কিছু অ্যাপ্লিকেশন, তবে, রেট সীমা অন্তর্ভুক্ত করে, বিশেষ করে লগইন প্রচেষ্টা, নিবন্ধন এবং অন্যান্য গুরুত্বপূর্ণ কার্যকারিতার মতো ক্রিয়াকলাপের জন্য। এই বাস্তবায়নগুলি প্রায়শই আইপি ঠিকানা ট্র্যাকিংয়ের জন্য X-ফরওয়ার্ড-ফর শিরোনামের উপর নির্ভর করে।
একটি সাধারণ উদাহরণ ব্যাখ্যা করার জন্য, আমি ফ্লাস্কে এই কোড স্নিপেটটি নিয়ে এসেছি
from flask import Flask, request, jsonify from flask_limiter import Limiter from flask_limiter.util import get_remote_address app = Flask(__name__) limiter = Limiter( app, key_func=get_remote_address, storage_uri="memory://",) def get_ipaddr(): # Retrieve the client's IP address from the request # X-Forwarded-For header is used to handle requests behind a proxy ip_address = request.headers.get('X-Forwarded-For', request.remote_addr) return ip_address # Rate limit to 5 requests per minute per IP @limiter.limit("5 per minute") @app.route('/') def index(): ip_address = get_ipaddr() return ip_address
নিম্নলিখিত বিভাগগুলিতে, আমি আপনার আবেদনের হার সীমা বাইপাস করার পরীক্ষা এবং চেষ্টা করার বিভিন্ন পদ্ধতির ব্যাখ্যা করব।
এই ধরনের দুর্বলতার জন্য আপনার অ্যাপটিকে দক্ষতার সাথে পরীক্ষা করতে, অটোমেশন একটি শক্তিশালী টুল। আপনি স্ক্রিপ্ট ব্যবহার করে এটি অর্জন করতে পারেন, যেমন পাইথনে (যেমন আমি প্রায়শই করি), বা বার্প স্যুটের মতো সরঞ্জাম ব্যবহার করে (বিটিডব্লিউ পরীক্ষক এবং সাইবার নিরাপত্তা পেশাদারদের জন্য একটি দুর্দান্ত সরঞ্জাম)। এছাড়াও, পোস্টম্যানের মতো সরঞ্জামগুলি তুলনামূলকভাবে সহজেই চেকগুলি স্বয়ংক্রিয় করতে ব্যবহার করা যেতে পারে।
X-Originating-IP: 127.0.0.1
আপনার পাঠানো প্রতিটি অনুরোধে বিভিন্ন আইপি মান ব্যবহার করুন।
ডবল এক্স-ফরওয়ারড-ফর হেডার ব্যবহার করুন।
X-Forwarded-For: X-Forwarded-For: 127.0.0.1
বিভিন্ন শিরোনাম দিয়ে একই চেষ্টা করুন.
X-Originating-IP: 127.0.0.1 X-Remote-IP: 127.0.0.1 X-Remote-Addr: 127.0.0.1 X-Client-IP: 127.0.0.1 X-Host: 127.0.0.1 X-Forwared-Host: 127.0.0.1
ব্যবহারকারী-এজেন্ট, বিষয়বস্তু-প্রকার, গ্রহণ-ভাষা, ইত্যাদি বা কুকিজ পরিবর্তন করার চেষ্টা করুন, যা ব্যবহারকারী শনাক্তকারী হিসাবে ব্যবহার করা যেতে পারে।
যদি প্রতি আইপিতে 3টি চেষ্টা করার হারের সীমা থাকে, প্রতি তিনটি চেষ্টা করে, হেডারের আইপি মান পরিবর্তন করুন (বা আপনার অনুরোধে অন্যান্য হেডার বা প্যারাম)।
আপনার পাঠানো প্যারামে যোগ করার চেষ্টা করুন
%00, %0d%0a, %0d, %0a, %09, %0C, %20
উদাহরণ স্বরূপ
param1=value1%%0d%0a param2=value2%00
উদাহরণস্বরূপ, আপনি যদি ইমেল যাচাইকরণের জন্য ওটিপির অনুরোধ করেন এবং আপনার কাছে মাত্র 3টি চেষ্টা থাকে, তাহলে 3টি চেষ্টা ব্যবহার করুন
[email protected] [email protected]%00 [email protected]%0d%0a And so on
আপনি যদি পরীক্ষা করছেন, উদাহরণস্বরূপ,/API/v1/signup endpoint, তাহলে /Signup, /SignUp, /sign-up এ ব্রুট-ফোর্স করার চেষ্টা করুন। মূল শেষ বিন্দুতে ফাঁকা অক্ষর (উপরের থেকে) যোগ করার চেষ্টা করুন।
যদি সীমাটি /api/v1/resetpassword এন্ডপয়েন্টের অনুরোধে থাকে, তাহলে কিছু ক্যোয়ারী প্যারাম যোগ করে এটিকে জোরপূর্বক করার চেষ্টা করুন - একবার হারের সীমা পৌঁছে গেলে, চেষ্টা করুন, উদাহরণস্বরূপ, /api/v1/resetpassword?param1=value1
এটি এমন হতে পারে যে একটি অ্যাপের যুক্তিযুক্ত ত্রুটি রয়েছে - আপনি যদি প্রতিটি প্রচেষ্টা/প্রচেষ্টার সিরিজের আগে আপনার অ্যাকাউন্টে লগ ইন করেন, তাহলে আপনার আইপির জন্য হারের সীমা রিসেট করা হবে এবং আপনি আপনার পাসওয়ার্ড ব্রুট-ফোর্স আক্রমণ চালিয়ে যেতে পারেন। আপনি যদি একটি লগইন বৈশিষ্ট্য পরীক্ষা করছেন, আপনি প্রতিটি প্রচেষ্টা/সিরিজের প্রচেষ্টার জন্য সেটিংসে একটি Pitchfork আক্রমণের সাথে Burp Suit-এ এটি করতে পারেন (বা আপনি এটির জন্য নিজের স্ক্রিপ্ট লিখতে পারেন)।
শুধুমাত্র একটি POW পাওয়ার জন্য X-Forwarded-For শিরোলেখের জন্য আমি কীভাবে একটি সাধারণ চেক স্বয়ংক্রিয় করেছি তার উদাহরণ এখানে দেওয়া হল:
from random import randint import requests import json url = "https://yourapp.net/api/v1/regconfirm-resend" data = { "email": "[email protected]" } N = 100 def generate_random_ip(): return '.'.join( str(randint(0, 255)) for _ in range(4) ) for _ in range(N): headers = { "Host": "yourapp.net", "Content-Type": "application/json", "X-Forwarded-For": generate_random_ip() } response = requests.post(url, headers=headers, data=json.dumps(data)) print(headers) print(f"Status Code: {response.status_code}, Response: {response.text}")
একটি সম্ভাব্য সমাধান ক্লাউডফ্লেয়ার এবং এর মেকানিজমের ব্যবহার হতে পারে। একটি বিশদ ব্যাখ্যা এখানে পাওয়া যাবে পুনরুদ্ধার-অরিজিনাল-ভিজিটর-আইপিএস । আমি এর প্রতিরক্ষা ব্যবস্থার শুধুমাত্র একটি সংক্ষিপ্ত বিবরণ প্রদান করব।
আপনি যদি এমন অ্যাপ্লিকেশন ব্যবহার করেন যা আসল ভিজিটরের আগত আইপি ঠিকানার উপর নির্ভর করে, একটি ক্লাউডফ্লেয়ার আইপি ঠিকানা ডিফল্টরূপে লগ করা হয়। আসল ভিজিটর আইপি অ্যাড্রেস CF-Connecting-IP নামক একটি সংযুক্ত HTTP হেডারে প্রদর্শিত হয়। আমাদের ওয়েব সার্ভার নির্দেশাবলী অনুসরণ করে, আপনি আপনার মূল সার্ভারে আসল ভিজিটর আইপি ঠিকানা লগ করতে পারেন। অনুরোধগুলি আপনার মূল সার্ভারে পৌঁছানোর সময় এই HTTP শিরোনামটি উপলব্ধ না হলে, আপনার ট্রান্সফর্ম নিয়ম এবং পরিচালিত ট্রান্সফর্ম কনফিগারেশন পরীক্ষা করুন।
যদি Pseudo IPv4 ওভাররাইট হেডারে সেট করা থাকে - Cloudflare CF-Connecting-IPv6 হেডারে আসল IPv6 ঠিকানা সংরক্ষণ করার সময় একটি ছদ্ম IPv4 ঠিকানা সহ বিদ্যমান Cf-Connecting-IP এবং X-Forwarded-For হেডারগুলিকে ওভাররাইট করে।
দ্রষ্টব্য: মনে রাখবেন, এই জাতীয় প্রতিরক্ষা ব্যবস্থা প্রয়োগ করার সময়, পুঙ্খানুপুঙ্খ পরীক্ষা করুন। এই পদ্ধতিটি পরবর্তীতে সমগ্র ক্লাস্টারে প্রয়োগ করা হতে পারে এবং এটি অপ্রয়োজনীয় কিছু ফাংশন এবং মাইক্রোসার্ভিসে বিরূপ প্রভাব ফেলতে পারে। সংক্ষেপে, নিরাপত্তা লঙ্ঘন ঠিক করার সময়, সতর্ক থাকুন, কারণ এটি সম্ভাব্যভাবে সমগ্র অ্যাপ্লিকেশনকে প্রভাবিত করতে পারে। আপনার সিস্টেমের কোন অংশ নেতিবাচকভাবে প্রভাবিত হতে পারে তা বিশ্লেষণ করুন এবং prod env এ শিপিং পরিবর্তনের আগে সবকিছু পরীক্ষা করুন।
এছাড়াও এখানে প্রকাশিত.