AMSI Patching: মেমোরি প্যাচিংয়ের মাধ্যমে অ্যান্টিভাইরাস নিষ্ক্রিয় করার কৌশল!
AMSI Patching কীভাবে in-memory amsi.dll পরিবর্তন করে স্ক্যানিং নিষ্ক্রিয় করে? বিস্তারিত technical breakdown ও defender-এর প্রতিরোধ কৌশল।
আগের নিবন্ধে আমরা AMSI bypass-এর বিভিন্ন সাধারণ কৌশল আলোচনা করেছি। এবার আমরা গভীরে যাব AMSI bypass-এর সবচেয়ে প্রচলিত এবং কারিগরিভাবে আকর্ষণীয় কৌশল—Memory Patching-এ। এটি বুঝতে পারলে শুধু আক্রমণকারীর চিন্তাধারা স্পষ্ট হয় না, এর কার্যকর প্রতিরোধও সম্ভব হয়। এই কৌশল কেন এত জনপ্রিয়, এর behind-the-scenes কী ঘটে, এবং defender হিসেবে আমরা কীভাবে এটি detect করতে পারি—সবই এই নিবন্ধে কভার করা হবে।
AMSI Patching-এর মৌলিক ধারণা
Windows-এ যখন PowerShell বা অন্য কোনো AMSI-aware host চালু হয়, তখন প্রক্রিয়াটির memory-তে amsi.dll load হয়। এই DLL-এর মধ্যে AmsiScanBuffer ফাংশন থাকে যা script content গ্রহণ করে এবং AV provider-এ পাঠায়। AMSI Patching-এর সরল ধারণা হলো—যেহেতু এই DLL current process-এর memory-তে আছে, এবং current process নিজে এই memory পরিবর্তন করতে পারে, তাই AmsiScanBuffer-এর প্রথম কয়েকটি instruction পরিবর্তন করে এমন কোড বসানো সম্ভব যা সবসময় "clean" (AMSI_RESULT_CLEAN) রিটার্ন করে।
এই কৌশলের বিশেষ আকর্ষণ হলো—এটি current user-mode process-এ ঘটে, কোনো admin privilege লাগে না, কোনো file disk-এ লেখা হয় না, এবং কোনো registry change হয় না। সম্পূর্ণ in-memory operation, যা ঐতিহ্যবাহী file-based detection-এ অদৃশ্য।
Technical Breakdown
AMSI Patching ধাপে ধাপে কীভাবে কাজ করে তা বুঝতে গেলে কয়েকটি Windows API চিনতে হবে।
Step 1—Locate amsi.dll এবং AmsiScanBuffer: প্রথমে LoadLibrary("amsi.dll") দিয়ে DLL handle পাওয়া হয় (যদি ইতিমধ্যে load না থাকে)। তারপর GetProcAddress(handle, "AmsiScanBuffer") দিয়ে ফাংশনটির memory address পাওয়া হয়।
Step 2—Modify Memory Protection: ডিফল্টভাবে কোড পেজে শুধু execute permission থাকে, write permission নেই। তাই attacker VirtualProtect কল করে memory page-এর protection পরিবর্তন করেন—সাধারণত PAGE_EXECUTE_READWRITE করে।
Step 3—Write Patch Bytes: এখন target memory address-এ patch byte লেখা হয়। সাধারণ patch হলো x64 architecture-এ:
mov eax, 0x80070057(E_INVALIDARG return value)ret
অর্থাৎ ফাংশন কল হলেই এটি invalid argument error দিয়ে অবিলম্বে ফিরে আসে—কোনো scan-ই হয় না। কিছু variant xor eax, eax; ret ব্যবহার করে যা 0 (AMSI_RESULT_CLEAN) রিটার্ন করে।
Step 4—Restore Protection: সবশেষে VirtualProtect দিয়ে আবার protection পরিবর্তন করে এমন ভাবে রাখা যাতে memory snapshot-এ স্বাভাবিক মনে হয়।
PowerShell-এ এই পুরো process মাত্র ১০-১৫ লাইনে লেখা যায়, যা public GitHub repository-তে অগণিত variation-এ পাওয়া যায়। কিছু advanced variant patch আরো গোপন করতে multiple instruction patching, JMP redirection বা return value spoofing-এর মতো কৌশল ব্যবহার করে।
জনপ্রিয় Variant এবং বিবর্তন
AMSI Patching-এর কিছু উল্লেখযোগ্য variant রয়েছে।
Original "amsiInitFailed": Matt Graeber-এর প্রথম প্রকাশিত কৌশল—[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed', 'NonPublic,Static').SetValue($null, $true)। Microsoft এই specific string-এর জন্য signature যোগ করেছে, তাই এখন এটি obfuscated আকারে ব্যবহৃত হয়।
RastaMouse AMSI Bypass: Daniel Duggan-এর জনপ্রিয় variant, যেখানে AmsiScanBuffer-এর প্রথম কয়েক byte পরিবর্তন করে instant clean return।
AMSI.fail: Online টুল যা প্রতিটি request-এ নতুন obfuscated AMSI patch script generate করে—signature-based detection-কে confuse করার জন্য।
Hardware Breakpoint Variant: Memory write ছাড়াই kernel-level debug register manipulate করে AmsiScanBuffer-এ breakpoint বসানো এবং RtlCaptureContext/SetThreadContext ব্যবহার করে return value override করা।
Indirect Syscall Bypass: EDR যেগুলো VirtualProtect-এ user-mode hook বসায়, সেগুলো এড়াতে direct syscall বা indirect syscall ব্যবহার করে memory permission পরিবর্তন।
COM Hijacking-based: Registry-তে fake AMSI provider register করে original Defender provider replace করা। তবে এটি real patching নয়, configuration-based bypass।
Module Stomping: নিজস্ব DLL amsi.dll-এর memory layout-এর উপর overlay করে দেওয়া।
কেন এটি detect করা কঠিন
AMSI Patching কয়েকটি কারণে detection-এ চ্যালেঞ্জিং।
In-process Modification: Patch ঘটে current process-এর নিজের memory-তে, কোনো cross-process call নেই, তাই process injection-এর সাধারণ alert trigger হয় না।
No Persistent Artifact: Process মেমরিতে patch থাকে, process টার্মিনেট হলে patch চলে যায়। তাই disk forensics-এ কিছু পাওয়া যায় না।
Privileged Operations Need Not Apply: যেহেতু process নিজের memory-তে কাজ করছে, কোনো extra privilege লাগে না।
Signed Binary: PowerShell নিজেই Microsoft-signed binary, তাই AMSI bypass চালানো scriptlet প্রায়ই signed code execution চেইনের ভেতরে থাকে।
Detection ও Prevention
তবে AMSI Patching detect করা অসম্ভব নয়—কিছু কার্যকর কৌশল রয়েছে।
Memory Integrity Scan: EDR সমাধান periodically amsi.dll-এর in-memory copy-কে disk-এর authoritative copy-র সাথে compare করতে পারে। কোনো mismatch detect হলে এটি একটি শক্তিশালী indicator।
Return Value Heuristics: যদি AmsiScanBuffer সবসময় instant return করে (instruction count ছোট), এটি সন্দেহজনক।
ETW-based Detection: Event Tracing for Windows-এর Microsoft-Antimalware-Scan-Interface provider অনেক AMSI scan event log করে। যদি একটি PowerShell process থেকে scan আসা হঠাৎ বন্ধ হয়ে যায়, সেটি একটি লাল পতাকা।
Suspicious API Call Sequence: PowerShell process-এ VirtualProtect, WriteProcessMemory, বা reflection-based call-এর pattern monitor করা।
Sysmon Event ID 10: Process access event পর্যবেক্ষণ করে amsi.dll containing memory region-এ অপ্রত্যাশিত access detect করা।
Script Block Logging: AMSI bypass হলেও, যদি Script Block Logging (PowerShell Event ID 4104) সক্ষম থাকে, তাহলে patch script নিজেই log-এ চলে আসে। আক্রমণকারীরা এজন্য কখনো কখনো Script Block Logging-ও disable করার চেষ্টা করে।
Constrained Language Mode: PowerShell-এ Constrained Language Mode enable করলে .NET reflection এবং arbitrary API call সীমিত হয়, যা অধিকাংশ AMSI patch script ভেঙে দেয়। AppLocker বা WDAC enforcement-এর সাথে এটি স্বয়ংক্রিয়ভাবে activate হয়।
WDAC এবং Code Integrity: Windows Defender Application Control নিয়ন্ত্রণ করে কোন binary execute হতে পারে। Strict WDAC policy বহু unsigned bypass tool-কে কার্যকরভাবে ব্লক করে।
Hypervisor-protected Code Integrity (HVCI): Kernel এবং অন্যান্য critical component memory-তে untrusted code execute হওয়া কঠিন করে।
Behavioral EDR: Modern EDR (CrowdStrike, SentinelOne, Defender for Endpoint) AMSI bypass-এর প্রায় সব পরিচিত variant-এর জন্য signature এবং behavioral rule রাখে। নিশ্চিত করুন আপনার EDR সর্বশেষ ভার্সনে আছে এবং block mode-এ চলছে।
Threat Hunt Queries: নিয়মিত hunt চালানো—PowerShell process যেগুলো amsi.dll-এর memory section-এ write করেছে, বা যেগুলোতে VirtualProtect call-এর পর কোনো script block log আসেনি।
PowerShell Version Restriction: Group Policy দিয়ে PowerShell v2 disable করা, কারণ v2 AMSI সমর্থন করে না এবং attacker এটি fall-back হিসেবে ব্যবহার করে।
Just Enough Administration (JEA): Privileged user-দের জন্য JEA এন্ডপয়েন্ট কনফিগার করে তাদের শুধু নির্দিষ্ট cmdlet চালানোর অনুমতি দেওয়া—যা arbitrary code execution-এর সুযোগ কমায়।
AMSI Patching বুঝতে পারলে আধুনিক Windows defense-এ একটি গভীর প্রবেশাধিকার পাওয়া যায়। এটি দেখায় যে user-mode-এ কোনো security mechanism কখনোই সম্পূর্ণ নিরাপদ নয়, কারণ attacker সেই same security boundary-র মধ্যে কাজ করছে। আক্রমণকারীদের জন্য এটি অপেক্ষাকৃত সহজ কৌশল, কিন্তু defender-দের জন্য সঠিক monitoring, behavioral analytics এবং application allowlisting দিয়ে এর প্রভাব নাটকীয়ভাবে কমানো সম্ভব। সবচেয়ে গুরুত্বপূর্ণ পাঠ—কোনো একটিমাত্র control-এর উপর কখনো ভরসা করা যাবে না; defense-in-depth ছাড়া adversary সবসময় এক ধাপ এগিয়ে থাকবে। AMSI আমাদের যা শেখায় তা হলো নিরাপত্তা একটি স্তরবিন্যস্ত architecture, কোনো single product নয়।
আপনার জ্ঞান যাচাই করতে প্রস্তুত? আজই HackCert-এ AMSI Patching MCQ Quiz-টি দিন!
Related articles
Access Control: Evaluating the Security of Your Corporate System Privileges
8 min
Active Defense: Proactive Strategies to Thwart Advanced Cyber Attacks
9 min
AD Trusts: How Hackers Weaponize Network Trust to Hijack Systems
8 min
Agentic AI: The Role of Autonomous Artificial Intelligence in Modern Cybersecurity
8 min

