کرک فایلهای فشرده ZIP(الگوریتم ZipCrypto) با ابزار BK-Crack

Definition & Instruction
کرک فایل های زیپ قدیمی | Old Zip Files Encryption Functionality
در رمزنگاری فایل های Zip قدیمی Encrypt بر روی داده صورت نمیگرفت و در واقع از متدی بنام `Store` برای ذخیره سازی فایل درون فایل Zip استفاده میشد.
- نرم افزار های مدرن مانند `Winzip` و یا `Winrar` از روش های مدرن برای رمزنگاری استفاده میکنند که در این روش باید نمونه از این Archive Type را بصورت دستی ایجاد کنیم.
- حمله ای که برای کرک فایل های ZIP که از متد قدیمی Store برای رمز نگاری استفاده میکنند انجام میشود، به عنوان حمله *Plain Text Attack* شناخته میشود که در این نوع حمله باید دست کم اطلاعاتی از نوع و محتوای فایلی که میخواهیم درون آرشیو کرک شود را داشته باشیم، در واقع قسمتی از *Type & Content* فایل تارگت درون آرشیو ZIP را باید داشته باشیم.
شماتیک حملات متن معمولی | Known Plain Text Attack
در تصویر زیر شماتیک حمله Plain Text Attack را میتوانید مشاهده کنید

ساخت فایل فشرده آسیب پذیر | Create Vulnerable Archive
برای تست این روش نیاز داریم که یک آرشیو ZIP آسیب پذیر ایجاد کنیم. برای ایجاد این فایل از نرم افزار `7z` استفاده میکنیم.
برای ساخت آرشیو ZIP آسیب پذیر، در هنگام ساخت ZIP تنظیمات آرشیو را ماننند تصویر زیر تنظیم میکنیم:

- Archive format: `ZIP`
- Compression Level: `0 - Store`
- Encryption: Set Password `123`
- Encryption method: `ZipCrypto`

دستورالعمل کرک الگوریتم ZIP-Crypto
- دانلود `Bkcrack` از گیت هاب
-
بدست آوردن محتویات `test.zip`
فایل `test.zip` آسیب پذیر که ساختیم را به پوشه `Bkcrack` انتقال میدهیم و `CMD` را در آن پوشه باز میکنیم، سپس کامند زیر را برای کرک فایل `test.zip` اجرا میکنیم:
bkcrack -L test.zip
با اجرای کامند بالا، ابزار محتویات درون `test.zip` را لیست میکند.
-
حال یک فایل متنی جدید میسازیم که شامل Content هایی که میدانیم در فایل های درون `test.zip` موجود است.
مثلا درون فایل `test.zip` یک فایل متنی `test.txt` وجود دارد، که میدانیم در آن فایل کدهای اجرای کانتینر Docker است.
بنابراین فایل متنی بنام `pl.txt` ایجاد میکنیم که باید شامل محتویات زیر باشد:
در واقع از این فایل به عنوان Cipher text برای ورودی کرک استفاده میشود که در مکانیزم Bkcrack میتوانیم محل Cipher Text را مشاهده کنیم:
-
حال برای بدست آوردن Recovery Key کامند زیر را اجرا میکنیم:
برای بدست آوردن Recovery Key نیازمند فایلی هستیم که محتویاتی داشته باشد که حدس میزنیم در فایل تارگت که میخواهیم کرک شود هم وجود دارد. این فایل با فلگ `p-` به عنوان *Plain Text* به ابزار *Bkcrack* معرفی میشود،
bkcrack -C test.zip -c Test/test.txt -p pl.txt
bkcrack -C VulnZip -c VulnZip/request.py -p pl.txt
توضیح پارامترها:
test.zip
=>-C
: همان فایل آرشیو Zip ماست. از فلگ `-C` برای معرفی فایل آرشیو اصلی استفاده میشود.test.txt
=>-c
: فایلی درون آرشیو که هدف ماست و میخواهیم کرک شود. از فلگ `-c` برای معرفی فایل تارگت همان Cipher که میخواهیم کرک شود استفاده میکنیم.pl.txt
=>-p
: یک فایل متنی که شامل محتویاتی است که درون فایل تارگت هم وجود دارد. از فلگ `-p` برای معرفی فایل Plain Text که شامل مقداری از Content فایل تارگت است استفاده میشود.
-
حال میتوانیم با استفاده از Recover Key فایل تارگت را Decrypt شده تحویل بگیریم:
bkcrack -C test.zip -c test.txt -k f04945f4 3018d661 edc704a6 -d decrypt.txt
توضیح پارامترها:
decrypt.txt
: فایل خروجی که حاوی فایل کرک شده است.-k
: برای وارد کردن Recovery Key در جلوی کامند از ای فلگ استفاده میشود.-d
: از این فلگ برای مشخص کردن فایل Decrypt شده که همان نتیجه کرک است استفاده میکنیم.
-
با استفاده از Recovery Key میتوانیم فایل آرشیو جدیدی با پسوردی جدید از فایل `test.zip` ایجاد کنیم:
با استفاده از Recovery Key میتوانیم یک فایل آرشیو جدید از فایل `test.zip` با پسورد جدید بسازیم.
bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -U Unlocked.zip NewPassword
با اجرای کامند بالا از فایل `test.zip` یک نمونه جدید بنام `Unlocked.zip` ایجاد کردیم که پسورد آن `NewPassword` است و تمام فایل هایی که درون آرشیو `test.zip` وجود دارند درون آرشیو جدید `Unlocked.zip` هم وجود دارند.
-
همچنین با استفاده از Recovery Key میتوانیم فایل آرشیو جدید بدون رمز از فایل `test.zip` بسازیم:
.\bkcrack.exe -C .\VulnZip.zip -k 348e6771 cecf3c76 51a09805 -D decrypt.zip
با این کامند یک فایل آرشیو ZIP جدید بنام `decrypt.zip` ساخته میشود که حاوی تمام محتویات فایل `VulnZip.zip` میشود.
مثال عملی | Practical Demo
-
توضیحات سناریو | Scenario Description
در این سناریو 2 فایل متنی بنام `test, test2` داریم که فایل های کانفیگ Docker یک ایمیج هستند.
فایل `test1.txt` دارای محتویات زیر است:
حال Attacker باید سعی کند حداقل محتویات درون این فایل را بفهمد، یعنی حداقل 2 یا سه خط اول فایل را بدست بیاورد و سپس درون فایل متنی جدیدی بریزد تا بتواند به عنوان ورودی Plain Text در جلوی فلگ `p-` آنرا وارد کرد.
در بسیاری از سناریو ها مشخص است درون فایل تارگت ما چه جیزی وجود دارد.
فایل `test2.txt` حاوی یکسری متن معمولی است که درون آرشیو وجود دارد. در این سناریو فرض میکنیم Attacker هیچ اطلاعاتی از محتویات درون این فایل ندارد.
-
پیش نیازها | Pre-Requires
ساخت آرشیو | Create Archive
- Install 7-Zip
Select test1, test2 => Right-Click => 7-Zip => Add to Archive...
- Compression Level: Store
- Encryption Method: ZipCrypto
- Encryption: Set Password `123`
آپشن های آرشیو | Archive Options
حال در دسکتاپ فایلی بنام `test.zip` داریم.
دانلود و استفاده از BK-Crack
بر اساس سیستم عامل خودتان، BK-Crack را از لینک زیر دانلود کنید:
https://github.com/kimci86/bkcrack/releasesکپی `test.zip` در دایرکتوری `bkcrack.exe`
-
ساخت فایل های مورد نیاز | Create Requires file
ساخت `pl.txt` در دایرکتوری `bkcrack.exe` و نوشتن محتویات زیر درون آن
حال تمام فایلهای مورد نیاز را برای شروع فرآیند کرک در اختیار داریم.
-
Get Recovery Key
Open CMD and navigate to `bkcrack.exe` folder
cd C:\Downloads\Compressed\bkcrack-1.5.1-win64
List all content in `test.zip` and Encryption methods
bkcrack.exe -L test.zip
Get Recovery Key of `test.txt`
bkcrack -C test.zip -c test.txt -p pl.txt
پس از اجرای این کامند ابزار حمله ای Bruteforce را پیاده سازی میکند و پس از چند دقیقه Recovery Key فایل تارگت بدست می آید.
-
Cracking `test.txt` with plain text defined `-d`
Cracking `test.txt` and save Decrypted file using Recovery key
bkcrack -C test.zip -c test.txt -k f04945f4 3018d661 edc704a6 -d decrypt.txt
Now Decrypted(Cracked) file save in `bkcrack.exe` folder
فایل `decrypt.txt` در واقع فایل کرک شده همان `test.txt` است و تمام محتویات آنرا شامل میشود:
-
Cracking `test.zip` with created new Instance of Archive `-D`
در این حمله از فایل آرشیو یک نمونه جدید بدون پسورد میسازیم.
bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -D Decrypt.zip
-
Cracking `test.zip` with created new Instance of Archive with Password `-U`
در این حمله از فایل آرشیو یک نمونه جدید با پسورد دلخواه میسازیم.
bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -U Unlocked.zip d@vood129
فایل آرشیو جدید ما بنام `Unlocked.zip` از نمونه رمز نگاری خود `test.zip` در پوشه `bkcrack` ایجاد شده و با پسورد `d@vood129` میتوانیم آنرا *Extract* کنیم. در این فولدر هر دو فایل متنی `test1, test2` را میتوانیم مشاهده کنیم:
خلاصه کامندها | Command Summary
cd C:\Downloads\Compressed\bkcrack-1.5.1-win64
bkcrack.exe -L test.zip #List all files in Archive
bkcrack -C test.zip -c test.txt -p pl.txt #Get Recovery Key
#Decrypt test1.txt to decrypt.txt
bkcrack -C test.zip -c test.txt -k f04945f4 3018d661 edc704a6 -d decrypt.txt
#Create new Archive without password
bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -D Unlocked.zip
#Create new Archive with password
bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -U Unlocked-Password.zip d@vood129

