Brute Force Attack

Brute Force Attack

ব্রুট ফোর্স অ্যাটাককে বলা যেতে পারে এক প্রকার “trial-and-error” অ্যাটাক যেখানে আক্রমণকারী, পাসওয়ার্ড কিংবা লগ-ইন সংক্রান্ত তথ্য অথবা ডিক্রিপশন কী সম্ভাব্য সকল কম্বিনেশন ব্যবহার করে ক্র্যাক করার চেষ্টা করে। সকল ক্রিপ্টোগ্রাফিক অ্যাটাকের মধ্যে এটি সরলতম হলেও এর কার্যকারিতা এখনো যথেষ্ট প্রাসঙ্গিক। 

আলোচনায় যাওয়ার আগে একটি বিষয় পরিষ্কার করা দরকার যে, পুরো লেখাটিতে আক্রমণ চালানো কোনো ব্যক্তি বা প্রতিষ্ঠানকে হ্যাকার নয় বরং আক্রমণকারী হিসেবে অভিহিত করা হয়েছে এই জন্য যে, হ্যাকিং সবসময় অসৎ উদ্দেশ্যে চালানো হয় না,যে কারণে যেকোনো আক্রমণকারীকে সাধারণভাবে হ্যাকার বললে এথিক্যাল হ্যাকার যারা, অর্থাৎ যারা কোনো সিস্টেমের নিরাপত্তাজনিত ত্রুটি খুঁজে বের করে সিস্টেমের কোনো প্রকার ক্ষতিসাধন না করেই (যেমন সিকিউরিটি গবেষক) তাদের ঘাড়েও দোষ চাপানো হবে, কিন্তু আক্রমণকারী বলতে সাধারণভাবে কেবল অসৎ উদ্দেশ্যে আক্রমণ চালানো কোনো ব্যক্তি বা প্রতিষ্ঠানকেই বোঝানো হয়।  

সিম্পল ব্রুট ফোর্স অ্যাটাক : 

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

সিম্পল ব্রুট ফোর্স অ্যাটাক সাধারণত সেইসব সিস্টেমের বিরুদ্ধে কার্যকর যেগুলোর পাসওয়ার্ড হয় দুর্বল, নয়তো খোদ পাসওয়ার্ড পলিসিই দুর্বল; যেমন, একটি ৪ ডিজিটের পাসওয়ার্ড সিস্টেম ক্র্যাক করতে মাত্র ১০ হাজারটি সম্ভাব্য কম্বিনেশনই যথেষ্ট,যা ক্র্যাক করা মাত্র কয়েক সেকেন্ডের ব্যাপার ! কিন্তু পাসওয়ার্ডের দৈর্ঘ্য এবং কমপ্লেসিটি বেড়ে গেলে সম্ভাব্য কম্বিনেশন সংখ্যা সূচকীয় হারে বেড়ে যায়; যেমন, ৮টি ক্যারেক্টারের একটি পাসওয়ার্ড দিয়ে (যেখানে ৬২টি সম্ভাব্য ক্যারেক্টার ব্যবহারের সুযোগ আছে), ২১৮ ট্রিলিয়ন কম্বিনেশন তৈরি করা সম্ভব, যা সিম্পল ব্রুট ফোর্স অ্যাটাক দিয়ে ক্র্যাক করা বেশ সময়সাপেক্ষ ।     

এখানে ১৬ বিটের একটি সিমেট্রিক কী ক্র্যাক করার নমুনা অ্যালগরিদম (পাইথন কোড) দেওয়া হলো: 

        
 
import random


target = "1234"
guess = ""


attempts = 0
# Loop until the guess is equal to the target
while guess != target:


  guess = str(random.randint(0, 9999)).zfill(4)
  attempts += 1


# Print a success message when the loop ends
print(f"Success! The PIN is {guess} and it took {attempts} attempts to find it.")

        
        
    

ডিকশনারি অ্যাটাক :

এই অ্যাটাক সম্ভাব্য সব কম্বিনেশন ব্যবহারের পরিবর্তে কোনো ডিকশনারি, ডেটাবেইজ, বা

ওয়েবসাইট থেকে কমন কিছু শব্দ বা ফ্রেইজ দিয়ে পাসওয়ার্ড ক্র্যাক করার চেষ্টা চালায়।  ডিকশনারি অ্যাটাক তুলনামূলক কম সম্ভাব্য কম্বিনেশনগুলো ব্যবহার না করায় সিম্পল ব্রুট ফোর্সের চেয়ে অনেক বেশি দ্রুতগতিসম্পন্ন।

যেভাবে চালানো হয় ডিকশনারি অ্যাটাক : 

১/ আক্রমণকারীর কাছে বহুল ব্যবহৃত পাসওয়ার্ডের একটি লিস্ট থাকে, যেটিকে আমরা ডিকশনারি বলতে পারি। বর্তমানে বহুল ব্যবহৃত কিছু পাসওয়ার্ডের একটি লিস্ট দেওয়া হলোঃ

123456

password

123456789

12345

12345678

qwerty

1234567

111111

1234567890

123123

abc123

1234

password1

iloveyou

1q2w3e4r

000000

qwerty123

zaq12wsx

dragon

sunshine

princess

letmein

654321

monkey

27653

1qaz2wsx

123321

qwertyuiop

superman

asdfghjkl

[ Source: https://www.safetydetectives.com/blog/the-most-hacked-passwords-in-the-world/]

২/  একটি স্বয়ংক্রিয় সফটওয়্যারের মাধ্যমে ডিকশনারি থেকে এক এক করে এন্ট্রি নিয়ে টেস্ট করা হয়। 

৩/ প্রচলিত ডিকশনারি থেকে ফলাফল না মিললে আক্রমণকারী, ব্যবহারকারীর তথ্য ব্যবহার করে কাস্টমাইজড ডিকশনারি বানিয়ে নিতে পারে, যেমন- টার্গেটের নাম,আগ্রহ, বা অন্য কোনো গুরুত্বপূর্ণ ব্যক্তিগত তথ্য । 

এখানে ডিকশনারি অ্যাটাকের নমুনা অ্যালগরিদম (পাইথন কোড) দেওয়া হলো: 

        
 

import requests


target_url = "https://example.com/login"


# Open the file with the list of common passwords
with open("passwords.txt", "r") as file:


  for line in file:
     password = line.strip()


    # Set the data to be sent in the POST request
     data = {"username": "admin", "password": password}


    # Send the POST request to the target URL
     response = requests.post(target_url, data=data)


    # Check if the response status code is 200 (OK)
     if response.status_code == 200:
      print(f"Success! The password is {password}.")
      break


     else:
      print(f"Trying {password}...")

        
        
        
    

হাইব্রিড ব্রুট ফোর্স অ্যাটাক  :

এই অ্যাটাক মূলত সিম্পল এবং ডিকশনারি ব্রুট ফোর্স অ্যাটাকের একটি লজিক্যাল সংমিশ্রণ। 

এই পদ্ধতিতে ডিকশনারি এন্ট্রিগুলোই প্রধানত ডিকশনারি অ্যাটাকের মতো এক এক করে টেস্ট করে দেখা হয় তবে অতিরিক্ত কিছু ক্যারেক্টার যোগ-বিয়োগ করে অথবা এন্ট্রির কোনো ক্যারেক্টার, কাছাকাছি বা সম্পর্কিত অন্য আরেকটি ক্যারেক্টার দিয়ে প্রতিস্থাপন করে। ডিকশনারিতে থাকা কোনো এন্ট্রির এরকম পরিবর্তিত রূপগুলোকে বলা হয় “ভ্যারিয়েশন” । যেমন  “password” শব্দটি যদি ডিকশনারিতে থাকে, তবে এর সম্ভাব্য ভ্যারিয়েশন হতে পারে “p@ssword” , “Password1” , “P@ssW0rd” ইত্যাদি। 

এখানে হাইব্রিড অ্যাটাকের একটি নমুনা অ্যালগরিদম (পাইথন কোড) দেওয়া হলো যেটি একটি টেক্সট ফাইল(ডিকশনারি) থেকে এন্ট্রি নিয়ে সেটিতে র‍্যান্ডম ক্যারেক্টার যুক্ত করে টেস্ট চালায় : 

        
 


import requests
import random


target_url = "https://example.com/login"


# Open the file with the list of common words
with open("words.txt", "r") as file:


  for line in file:


    word = line.strip()


    # Generate a random number between 0 and 9
    num = str(random.randint(0, 9))


    # Generate a random uppercase letter
    letter = chr(random.randint(65, 90))


    # Generate a random symbol from a list
    symbol = random.choice(["!", "@", "#", "$", "%", "^", "&", "*"])


    # Concatenate the word, number, letter, and symbol to form a password
    password = word + num + letter + symbol


    data = {"username": "admin", "password": password}


    response = requests.post(target_url, data=data)


    # Check if the response status code is 200 (OK)
    if response.status_code == 200:


      # Print a success message and break the loop
      print(f"Success! The password is {password}.")
      break


    # Otherwise, print the current password and continue the loop
    else:
      print(f"Trying {password}...")

        
        
    

রেইনবো টেবিল অ্যাটাক  :

এটি মূলত হ্যাশ ভ্যালু থেকে পাসওয়ার্ড ক্র্যাক করার একটি পদ্ধতি। এবার তাহলে প্রশ্ন, হ্যাশ ভ্যালু কী?

হ্যাশ হলো এমন একটি ক্রিপ্টোগ্রাফিক কৌশল, যেখানে হ্যাশ ফাংশন নামে বিশেষ ফাংশন কোনো ডেটাকে ইনপুট হিসেবে নেয় এবং আউটপুট হিসেবে একটি ভ্যালু জেনারেট করে, এই ভ্যালুটিকেই আমরা বলছি হ্যাশ ভ্যালু । হ্যাশ ভ্যালু থেকে মূল ডেটা পুনরুদ্ধার করা প্রায় অসম্ভব । হ্যাশ ফাংশনের এই irreversibility  ধর্মের কারণে আক্রমণকারী এমনকি কোনো ডেটার হ্যাশ ভ্যালু পেয়ে গেলেও মূল ডেটার নাগাল পায় না সহজে। 

আক্রমণকারী তাহলে হ্যাশ ভ্যালু থেকে পাসওয়ার্ড অর্থাৎ মূল ডেটা ক্র্যাক করে কীভাবে?

এখানেই আসে রেইনবো টেবিলের কথা – আক্রমণকারী কীভাবে এই টেবিল ব্যবহার করে পাসওয়ার্ড ক্র্যাক করে সেটাই আমরা এখন বোঝার চেষ্টা করব : 

১/ প্রথমেই আক্রমণকারী কোনো ওয়েবসাইটের ডেটাবেইজ হ্যাক করে সেখানে থাকা পাসওয়ার্ডগুলোর হ্যাশ ভ্যালু সংগ্রহ করে ( ডেটাবেইজে সাধারণত পাসওয়ার্ডের নিরাপত্তার জন্যই সরাসরি মূল পাসওয়ার্ড সেইভ না করে পাসওয়ার্ডের হ্যাশ ভ্যালু সেইভ করা হয়, ব্যবহারকারী প্রতিবার লগ-ইন করার জন্য পাসওয়ার্ড সাবমিট করলে সাবমিট করা পাসওয়ার্ড থেকে বানানো হ্যাশ ভ্যালুর সাথে ডেটাবেইজে থাকা হ্যাশ ভ্যালু মিলিয়ে দেখা হয় এবং কোনো একটি ভ্যালু মিলে গেলেই লগ-ইনের অনুমতি দেওয়া হয় ) । 

২/ আক্রমণকারী এবার ডিকশনারি অ্যাটাকের মতো করেই অনেকগুলো সম্ভাব্য পাসওয়ার্ড ও কোনো একটি হ্যাশ ফাংশন ব্যবহার করে তাদের হ্যাশ ভ্যালুর একটি টেবিল তৈরি করে, যেখানে পাসওয়ার্ড-হ্যাশ ভ্যালু জোড়ায় জোড়ায় থাকে। 

৩/ আক্রমণকারী এবার কয়েক স্টেজে সার্চ অপারেশন চালায়। 

    ৩.১/ প্রথমেই সংগৃহীত হ্যাশ ভ্যালুর সাথে টেবিলের কোনো হ্যাশ ভ্যালুর মিল খুঁজে দেখা হয়; 

     মিল খুঁজে পাওয়া না গেলে পরবর্তী স্টেজের সার্চ চালানো হয়। 

     ৩.২/ আক্রমণকারী এবার রিডাকশন ফাংশনের আশ্রয় নেয়। এই ফাংশন, সংগৃহীত হ্যাশ 

      ভ্যালু ইনপুট হিসেবে নেয় এবং ঐ ভ্যালুর একটি অংশ আউটপুট হিসেবে জেনারেট করে। এই  

      আউটপুটটিকে এবার  আক্রমণকারী তার হ্যাশ ফাংশনে ইনপুট দেয় এবং একটি হ্যাশ ভ্যালু  

      আউটপুট হিসেবে জেনারেট করে এবং সেটি টেবিলের কোনো হ্যাশ ভ্যালুর সাথে ম্যাচ 

      করে কিনা তা যাচাই করে। মিল খুঁজে না পেলে এই হ্যাশ ভ্যালুটিকে পুনরায় রিডাকশন ও

      হ্যাশ ফাংশনের মধ্য দিয়ে নিয়ে যায় এবং এই প্রক্রিয়াটি চলতেই থাকে যতক্ষণ না পর্যন্ত 

      রিডাকশন ফাংশনের সম্ভাব্য সব আউটপুট জেনারেট করা শেষ হয়ে যায়। এই স্টেজেও ব্যর্থ  

      হলে আক্রমণকারী পরবর্তী স্টেজের সার্চ চালাতে পারে। 

      ৩.৩/ এই স্টেজে এসে আক্রমণকারী বিভিন্ন রিডাকশন ফাংশন দিয়ে ৩.২ স্টেজের

     কাজগুলোর পুনরাবৃত্তি করতে থাকে।   

    যেকোনো একটি স্টেজে প্রক্রিয়াধীন হ্যাশ ভ্যালুর সাথে টেবিলের কোনো হ্যাশ ভ্যালুর মিল 

    খুঁজে পেলেই তার বিপরীতে থাকা পাসওয়ার্ডটি  ক্র্যাক করে ফেলা যায়। 

এই অ্যাটাকের দুর্বলতম দিক হলো টেবিলের ওপর এর নির্ভরশীলতা, টেবিলে অন্তর্ভুক্ত নয় এমন কোনো পাসওয়ার্ড এই পদ্ধতিতে ক্র্যাক করা সম্ভব নয়। তাছাড়া টেবিলের বিপুল পরিমাণ ডেটার

জন্য মেমোরি প্রয়োজন হয় অনেক বেশি।         

ক্রিডেনশিয়াল স্টাফিং অ্যাটাক(Credential Stuffing Attack)  :

ডিজিটাল মাধ্যমে একাধিক একাউন্ট আছে এমন বেশিরভাগ মানুষের মধ্যেই একটি প্রবণতা সাধারণভাবে দেখা যায় যে, এরা মনে রাখার সুবিধার্থে প্রায় সব একাউন্টের জন্যই একই ইউজারনেম ও পাসওয়ার্ড ব্যবহার করে; ফলে কোনো একটি একাউন্টের এই সকল তথ্য কোনোভাবে প্রকাশিত হয়ে গেলে অন্যসব একাউন্টের নিরাপত্তাও হুমকির মুখে পড়ে যায়, আর এটির সুযোগ নিয়েই চালানো হয় “ক্রিডেনশিয়াল স্টাফিং অ্যাটাক”। আক্রমণকারী কোনোভাবে কোনো একটি প্লাটফর্মের নিরাপত্তার দুর্বলতার সুযোগ নিয়ে ব্যবহারকারীদের পাসওয়ার্ডের হ্যাশ ভ্যালু ও ইউজারনেইম পেয়ে গেলে, ঐ হ্যাশ ভ্যালু এবং ইউজারনেইম ব্যবহার করে বিভিন্ন প্লাটফর্মে ছড়িয়ে থাকা একাউন্ট লক্ষ্য করে আক্রমণ চালাতে পারে। 

যেভাবে কাজ করে এই অ্যাটাক: 

 ডেটা ব্রিচ (Data Breach) : এটি ঘটে যখন কোনো ওয়েবসাইট বা অনলাইন সার্ভিসের ব্যবহারকারীর পরিচয় সংক্রান্ত তথ্য (ইউজারনেইম-পাসওয়ার্ড) অনিরাপদ হয়ে পড়ে, অর্থাৎ ৩য় পক্ষের হাতে পড়ার সম্ভাবনা তৈরি হয়।

তথ্য সংগ্রহ (Credential Harvesting) : আক্রমণকারী এসব তথ্য হয় ডার্ক ওয়েব থেকে কিনে নেয় অথবা নিজেরাই নিরাপত্তা ভেঙ্গে সংগ্রহ করে।

 স্বয়ংক্রিয় লগ-ইন (Automated Login Attempts) : আক্রমণকারী স্বয়ংক্রিয় টুল বা স্ক্রিপ্ট ব্যবহার করে চুরি করে পাওয়া এসব লগ-ইন তথ্য বিভিন্ন অনলাইন সার্ভিস যেমন – ইমেইল একাউন্ট, সোশাল মিডিয়া, ই-কমার্স প্লাটফর্ম,অথবা আর্থিক প্রতিষ্ঠানের একাউন্টে প্রবেশের চেষ্টা চালায়। 

৪/ ব্যবহারকারী একই লগ-ইন তথ্য একাধিক সার্ভিসের জন্য ব্যবহার করে থাকলে আক্রমণকারী খুব সহজেই অন্য একাউন্টগুলোতে এক্সেস পেয়ে যায়।  

Share on:

Category:

Leave a Reply

Your email address will not be published. Required fields are marked *

RECENT POST