পাঠ ৩৪ · ৬০-এর মধ্যে · মডিউল ৬
Home / Courses / Cybersecurity & Ethical Hacking / রুটকিট

রুটকিট ও পার্সিস্টেন্স মেকানিজম

Rootkits & persistence mechanisms
৭ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • রুটকিট কী এবং কেন এর লক্ষ্য শুধু ক্ষতি করা নয়, বরং "হাইডিং"
  • কার্নেল-মোড রুটকিট কেন সনাক্ত করা এত কঠিন
  • চারটি সাধারণ পার্সিস্টেন্স মেকানিজম যা ইনসিডেন্ট রেসপন্ডাররা প্রথমে পরীক্ষা করেন
  • ইন্টিগ্রিটি-মনিটরিং ভিত্তিক ডিফেন্সিভ ডিটেকশন লজিক কীভাবে কাজ করে

১ · রুটকিট কী — এবং কেন "হাইডিং"-ই এর মূল লক্ষ্য

একটি সাধারণ ম্যালওয়্যারের লক্ষ্য সরাসরি ক্ষতি করা (ফাইল চুরি, এনক্রিপ্ট ইত্যাদি)। কিন্তু একটি রুটকিট (Rootkit)Rootkitনিজের এবং প্রায়ই অন্য ম্যালওয়্যারের উপস্থিতি স্বাভাবিক ডিটেকশন টুল থেকে সক্রিয়ভাবে লুকানোর জন্য ডিজাইন করা ম্যালওয়্যার। -এর প্রাথমিক লক্ষ্য সম্পূর্ণ ভিন্ন — এটি নিজের উপস্থিতিই লুকিয়ে রাখতে চায়, যাতে অন্য ম্যালওয়্যার বা আক্রমণকারীর অ্যাক্সেস দীর্ঘদিন অলক্ষিত থাকতে পারে।

ইউজার-মোড রুটকিট সাধারণ ব্যবহারকারীর প্রিভিলেজে চলে এবং তুলনামূলক সহজে সনাক্তযোগ্য। কিন্তু কার্নেল-মোড রুটকিট OS-এর সবচেয়ে প্রিভিলেজড স্তরে কাজ করে — এটি ঠিক সেই API কল (প্রসেস তালিকা, ফাইল তালিকা ইত্যাদি) নিজেই ইন্টারসেপ্ট করে মিথ্যা তথ্য দিতে পারে, যা একটি ডিটেকশন টুল তার অস্তিত্ব খুঁজতে ব্যবহার করে। ফলাফল: টুলটি নিজেই যাকে জিজ্ঞেস করছে, সেই OS-ই তাকে মিথ্যা বলছে।

২ · পার্সিস্টেন্স মেকানিজম — কীভাবে ম্যালওয়্যার রিবুটের পরও টিকে থাকে

পার্সিস্টেন্স (Persistence)Persistenceরিবুট বা লগ-অফের পরও ম্যালওয়্যার কীভাবে টিকে থাকে বা নিজের অ্যাক্সেস পুনঃস্থাপন করে। মানে একটি সিস্টেম রিস্টার্ট হওয়ার পরও ম্যালওয়্যারের অ্যাক্সেস টিকে থাকা বা নিজে থেকে পুনরায় চালু হওয়া। চারটি সাধারণ মেকানিজম —

রেজিস্ট্রি Run-key
Windows রেজিস্ট্রির একটি নির্দিষ্ট এন্ট্রি যা প্রতিবার লগ-ইনে একটি প্রোগ্রাম স্বয়ংক্রিয়ভাবে চালায়।
শিডিউলড টাস্ক / Cron Job
নির্দিষ্ট সময়ে বা রিবুটের পর স্বয়ংক্রিয়ভাবে একটি প্রোগ্রাম চালানোর জন্য নির্ধারিত।
ম্যালিশিয়াস সার্ভিস
একটি সিস্টেম সার্ভিস হিসেবে নিবন্ধিত, ব্যাকগ্রাউন্ডে ও প্রায়ই উচ্চ প্রিভিলেজে স্বয়ংক্রিয়ভাবে চালু হয়।
স্টার্টআপ ফোল্ডার এন্ট্রি
OS-এর স্টার্টআপ ফোল্ডারে রাখা একটি এন্ট্রি, প্রতিটি বুটে স্বয়ংক্রিয়ভাবে চালু হয়।

এই ঠিক এই জায়গাগুলোই একজন ইনসিডেন্ট রেসপন্ডার প্রথমে পরীক্ষা করেন যখন একটি সিস্টেমে চলমান আপস (compromise) সন্দেহ করা হয় (M10-এর ইনসিডেন্ট রেসপন্স লাইফসাইকেলের সাথে সরাসরি সম্পর্কিত)।

নতুন স্টার্টআপ এন্ট্রি New startup entry found বেসলাইনে ছিল = স্বাভাবিক, নিরাপদ বেসলাইনে ছিল না = সন্দেহজনক, তদন্ত প্রয়োজন
একটি জানা-ভালো (known-good) বেসলাইনের সাথে তুলনাই একটি অপ্রত্যাশিত পার্সিস্টেন্স মেকানিজম সনাক্ত করার মূল কৌশল।

৩ · প্রতিরক্ষা — ইন্টিগ্রিটি মনিটরিং ও EDR

যেহেতু একটি কার্নেল-মোড রুটকিট চলমান OS-কেই মিথ্যা বলাতে পারে, প্রতিরক্ষা কৌশলগুলো OS-এর নিজের রিপোর্টের উপর সম্পূর্ণ নির্ভর না করার দিকে ঝোঁকে —

  • ইন্টিগ্রিটি মনিটরিং — স্টার্টআপ এন্ট্রি, গুরুত্বপূর্ণ সিস্টেম ফাইল বা রেজিস্ট্রি অঞ্চলের একটি known-good বেসলাইন (হ্যাশসহ, L01/L28-এর ধারণা পুনরায় ব্যবহার করে) রেখে অপ্রত্যাশিত পরিবর্তন সনাক্ত করা।
  • EDR (Endpoint Detection and Response) — এন্ডপয়েন্ট-স্তরের আচরণ ক্রমাগত পর্যবেক্ষণ ও বিশ্লেষণ করার আধুনিক টুলিং (মেনশন-স্তরে)।
  • অফলাইন/এক্সটার্নাল স্ক্যানিং — বিশ্বস্ত এক্সটার্নাল মিডিয়া থেকে বুট করে সন্দেহভাজন সিস্টেম স্ক্যান করা, যেহেতু রুটকিটটি তখন চলমান নেই এবং স্ক্যানারকে মিথ্যা বলার কোনো উপায় থাকে না।

৪ · Code cell — পার্সিস্টেন্স ডিটেকশন সিমুলেশন

নিচের কোডটি L09-এর ARP-স্পুফিং ডিটেকশন প্যাটার্নের মতোই — একটি known-good বেসলাইনের সাথে বর্তমান অবস্থা তুলনা করে অপ্রত্যাশিত এন্ট্রি চিহ্নিত করে। সম্পূর্ণ ইন-মেমরি সিমুলেশন, কোনো বাস্তব ফাইলসিস্টেম বা রেজিস্ট্রি স্পর্শ করা হচ্ছে না।

Python
import copy

baseline_state = {
    "startup_entries": [
        "WindowsDefender - C:\\Program Files\\Windows Defender\\MSASCui.exe",
        "OneDrive - C:\\Users\\User\\AppData\\Local\\Microsoft\\OneDrive\\OneDrive.exe",
    ]
}

def add_persistence(state, entry):
    """একটি নতুন স্টার্টআপ এন্ট্রি যোগ করে — বৈধ ইনস্টল বা ম্যালওয়্যার persistence, উভয়ই এভাবে ঘটে।"""
    state["startup_entries"].append(entry)
    return state

def detect_new_persistence(current_state, baseline_state):
    """বেসলাইনের সাথে তুলনা করে অপ্রত্যাশিত নতুন এন্ট্রি চিহ্নিত করে — ইন্টিগ্রিটি-মনিটরিং লজিক।"""
    baseline_set = set(baseline_state["startup_entries"])
    current_set = set(current_state["startup_entries"])
    return list(current_set - baseline_set)

current_state = copy.deepcopy(baseline_state)

print("বেসলাইন স্টার্টআপ এন্ট্রি:")
for entry in baseline_state["startup_entries"]:
    print(" -", entry)

suspicious_entry = "svchost32 - C:\\Users\\Public\\AppData\\svchost32.exe"
add_persistence(current_state, suspicious_entry)

print()
print("বর্তমান স্টার্টআপ এন্ট্রি (সম্ভাব্য সংক্রমণের পর):")
for entry in current_state["startup_entries"]:
    print(" -", entry)

new_entries = detect_new_persistence(current_state, baseline_state)
print()
print("বেসলাইনের বাইরে নতুন এন্ট্রি সনাক্ত হলো:", new_entries)

    
মূল কথা · Key takeaway

রুটকিট ও পার্সিস্টেন্স মেকানিজম একসাথে বোঝায় কেন "একটি ম্যালওয়্যার স্ক্যান করে কিছু পাওয়া যায়নি" মানেই সিস্টেম পরিষ্কার নয় — যদি রুটকিট নিজেই স্ক্যানারকে মিথ্যা বলতে সক্ষম হয়। একটি known-good বেসলাইনের সাথে তুলনা, এবং প্রয়োজনে অফলাইন স্ক্যানিং, সন্দেহভাজন সিস্টেমে বিশ্বাসযোগ্য ফলাফল পাওয়ার একমাত্র উপায়।

অনুমতি ছাড়া কারো সিস্টেমে পার্সিস্টেন্স/হাইডিং কৌশল প্রয়োগ করা একটি গুরুতর ফৌজদারি অপরাধ (L01 দেখুন)। এই ধারণাগুলো শুধুমাত্র রেড-টিম/ব্লু-টিম প্রশিক্ষণ ও ইনসিডেন্ট রেসপন্স শেখার উদ্দেশ্যে — অনুমোদিত ল্যাব বা প্রতিষ্ঠানের নিজস্ব অনুমোদিত এনগেজমেন্টের বাইরে কখনো প্রয়োগযোগ্য নয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ কার্নেল-মোড রুটকিট কেন ইউজার-মোড রুটকিটের চেয়ে সনাক্ত করা অনেক বেশি কঠিন?

কার্নেল-মোড OS-এর সবচেয়ে প্রিভিলেজড স্তরে কাজ করে, তাই এটি সেই API কলগুলোই ইন্টারসেপ্ট ও জালিয়াতি করতে পারে যা একটি ডিটেকশন টুল (এমনকি উচ্চ ইউজার-মোড প্রিভিলেজে চলমান হলেও) প্রসেস/ফাইল তালিকা করতে ব্যবহার করে। ফলাফল: টুলটি যে OS-কে জিজ্ঞেস করছে, সেই OS-ই তাকে মিথ্যা তথ্য দিতে পারে — রুটকিটটি আক্ষরিক অর্থেই নিজেকে লুকিয়ে ফেলে।

প্র ০২ কেন অফলাইন/এক্সটার্নাল স্ক্যানিং একটি সম্ভাব্য রুটকিট-সংক্রমিত সিস্টেমের জন্য বিশেষভাবে কার্যকর?

কারণ আপসকৃত OS/কার্নেলকে নিজের সম্পর্কে সত্য বলার জন্য আর বিশ্বাস করা যায় না। বিশ্বস্ত এক্সটার্নাল মিডিয়া থেকে বুট করলে স্ক্যানারটি সম্ভাব্য-আপসকৃত কার্নেলের অধীনে চলে না — তাই রুটকিটটি (যা তখন সক্রিয়ও নয়) তাকে মিথ্যা বলার কোনো উপায় থাকে না।

প্র ০৩ উপরের কোডের মতো ইন্টিগ্রিটি-মনিটরিং ভিত্তিক ডিটেকশনের একটি সীমাবদ্ধতা কী?

এটি শুধু জানা-ভালো বেসলাইন থেকে বিচ্যুতি সনাক্ত করে — যদি বেসলাইনটি নিজেই সংক্রমণের পরে ক্যাপচার করা হয়ে থাকে, অথবা মনিটরিং টুলের নিজের রিপোর্টিং একটি কার্নেল-মোড রুটকিট দ্বারা আপসকৃত হয়ে থাকে, তাহলে ডিটেকশন ব্যর্থ হয়। বেসলাইনের ইন্টিগ্রিটি এবং আউট-অফ-ব্যান্ড ভেরিফিকেশন তাই সমান গুরুত্বপূর্ণ।

অনুশীলন

  1. চিন্তা করুন: কেন একজন ইনসিডেন্ট রেসপন্ডার টিকে থাকা রুটকিট খোঁজার সময় প্রথমেই স্টার্টআপ এন্ট্রি, শিডিউলড টাস্ক ও সার্ভিস তালিকা পরীক্ষা করেন?

    কারণ পার্সিস্টেন্স মেকানিজমই ঠিক সেই জায়গা যেখানে ম্যালওয়্যার রিবুটের পর নিজের অ্যাক্সেস পুনঃস্থাপন করে। এই সুপরিচিত জায়গাগুলো দ্রুত পরীক্ষা করলে আক্রমণকারী কীভাবে/কোথায় ফুটহোল্ড ধরে রেখেছে তার সরাসরি ব্যবহারযোগ্য প্রমাণ পাওয়া যায় — L47-এর ইনসিডেন্ট রেসপন্স লাইফসাইকেলের Eradication ধাপের জন্য অপরিহার্য।

  2. পরীক্ষা করুন: উপরের কোডে আরও দুটি বৈধ স্টার্টআপ এন্ট্রি baseline_state ও current_state-এ (দুটোতেই একইভাবে) যোগ করুন, তারপর শুধু current_state-এ একটি নতুন সন্দেহজনক এন্ট্রি যোগ করে Run চেপে দেখুন detect_new_persistence কি এখনও সঠিকভাবে সনাক্ত করে।

    হ্যাঁ — set difference লজিক বেসলাইনের আকার নির্বিশেষে কাজ করে, শুধুমাত্র সত্যিকারের নতুন এন্ট্রিটিকেই আলাদা করে দেখায়। এটি নিশ্চিত করে যে ডিটেকশন লজিকটি বেসলাইনে কতগুলো এন্ট্রি আছে তার উপর নির্ভর করে না।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
ম্যালওয়্যার প্রকারভেদ