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 را میتوانید مشاهده کنید

Plain Text Attack Schema

ساخت فایل فشرده آسیب پذیر | Create Vulnerable Archive

برای تست این روش نیاز داریم که یک آرشیو ZIP آسیب پذیر ایجاد کنیم. برای ایجاد این فایل از نرم افزار `7z` استفاده میکنیم.

برای ساخت آرشیو ZIP آسیب پذیر، در هنگام ساخت ZIP تنظیمات آرشیو را ماننند تصویر زیر تنظیم میکنیم:

Archive settings in 7-Zip
  • Archive format: `ZIP`
  • Compression Level: `0 - Store`
  • Encryption: Set Password `123`
  • Encryption method: `ZipCrypto`
Encryption method selection

دستورالعمل کرک الگوریتم ZIP-Crypto

  1. دانلود `Bkcrack` از گیت هاب

    https://github.com/kimci86/bkcrack/releases

  2. بدست آوردن محتویات `test.zip`

    فایل `test.zip` آسیب پذیر که ساختیم را به پوشه `Bkcrack` انتقال میدهیم و `CMD` را در آن پوشه باز میکنیم، سپس کامند زیر را برای کرک فایل `test.zip` اجرا میکنیم:

    bkcrack -L test.zip
    Listing archive contents

    با اجرای کامند بالا، ابزار محتویات درون `test.zip` را لیست میکند.

  3. حال یک فایل متنی جدید میسازیم که شامل Content هایی که میدانیم در فایل های درون `test.zip` موجود است.

    مثلا درون فایل `test.zip` یک فایل متنی `test.txt` وجود دارد، که میدانیم در آن فایل کدهای اجرای کانتینر Docker است.

    بنابراین فایل متنی بنام `pl.txt` ایجاد میکنیم که باید شامل محتویات زیر باشد:

    Plain text file content

    در واقع از این فایل به عنوان Cipher text برای ورودی کرک استفاده میشود که در مکانیزم Bkcrack میتوانیم محل Cipher Text را مشاهده کنیم:

    Cipher Text location
  4. حال برای بدست آوردن Recovery Key کامند زیر را اجرا میکنیم:

    برای بدست آوردن Recovery Key نیازمند فایلی هستیم که محتویاتی داشته باشد که حدس میزنیم در فایل تارگت که میخواهیم کرک شود هم وجود دارد. این فایل با فلگ `p-` به عنوان *Plain Text* به ابزار *Bkcrack* معرفی میشود،

    bkcrack -C test.zip -c Test/test.txt -p pl.txt
    Getting recovery key
    bkcrack -C VulnZip -c VulnZip/request.py -p pl.txt
    Alternative recovery key command

    توضیح پارامترها:

    • test.zip => -C: همان فایل آرشیو Zip ماست. از فلگ `-C` برای معرفی فایل آرشیو اصلی استفاده میشود.
    • test.txt => -c: فایلی درون آرشیو که هدف ماست و میخواهیم کرک شود. از فلگ `-c` برای معرفی فایل تارگت همان Cipher که میخواهیم کرک شود استفاده میکنیم.
    • pl.txt => -p: یک فایل متنی که شامل محتویاتی است که درون فایل تارگت هم وجود دارد. از فلگ `-p` برای معرفی فایل Plain Text که شامل مقداری از Content فایل تارگت است استفاده میشود.
    Command parameters explanation
  5. حال میتوانیم با استفاده از Recover Key فایل تارگت را Decrypt شده تحویل بگیریم:
    bkcrack -C test.zip -c test.txt -k f04945f4 3018d661 edc704a6 -d decrypt.txt
    Decrypting file

    توضیح پارامترها:

    • decrypt.txt: فایل خروجی که حاوی فایل کرک شده است.
    • -k: برای وارد کردن Recovery Key در جلوی کامند از ای فلگ استفاده میشود.
    • -d: از این فلگ برای مشخص کردن فایل Decrypt شده که همان نتیجه کرک است استفاده میکنیم.
    Decryption process
  6. با استفاده از Recovery Key میتوانیم فایل آرشیو جدیدی با پسوردی جدید از فایل `test.zip` ایجاد کنیم:

    با استفاده از Recovery Key میتوانیم یک فایل آرشیو جدید از فایل `test.zip` با پسورد جدید بسازیم.

    bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -U Unlocked.zip NewPassword
    Creating new archive with password

    با اجرای کامند بالا از فایل `test.zip` یک نمونه جدید بنام `Unlocked.zip` ایجاد کردیم که پسورد آن `NewPassword` است و تمام فایل هایی که درون آرشیو `test.zip` وجود دارند درون آرشیو جدید `Unlocked.zip` هم وجود دارند.

  7. همچنین با استفاده از Recovery Key میتوانیم فایل آرشیو جدید بدون رمز از فایل `test.zip` بسازیم:
    .\bkcrack.exe -C .\VulnZip.zip -k 348e6771 cecf3c76 51a09805 -D decrypt.zip
    Creating new archive without password

    با این کامند یک فایل آرشیو ZIP جدید بنام `decrypt.zip` ساخته میشود که حاوی تمام محتویات فایل `VulnZip.zip` میشود.

مثال عملی | Practical Demo

  1. توضیحات سناریو | Scenario Description

    در این سناریو 2 فایل متنی بنام `test, test2` داریم که فایل های کانفیگ Docker یک ایمیج هستند.

    فایل `test1.txt` دارای محتویات زیر است:

    Test1.txt content

    حال Attacker باید سعی کند حداقل محتویات درون این فایل را بفهمد، یعنی حداقل 2 یا سه خط اول فایل را بدست بیاورد و سپس درون فایل متنی جدیدی بریزد تا بتواند به عنوان ورودی Plain Text در جلوی فلگ `p-` آنرا وارد کرد.

    Plain text content

    در بسیاری از سناریو ها مشخص است درون فایل تارگت ما چه جیزی وجود دارد.

    فایل `test2.txt` حاوی یکسری متن معمولی است که درون آرشیو وجود دارد. در این سناریو فرض میکنیم Attacker هیچ اطلاعاتی از محتویات درون این فایل ندارد.

    Test2.txt content
  2. پیش نیازها | Pre-Requires

    ساخت آرشیو | Create Archive

    1. Install 7-Zip
    2. Select test1, test2 => Right-Click => 7-Zip => Add to Archive...
    3. 7-Zip context menu

      آپشن های آرشیو | Archive Options

      • Compression Level: Store
      • Encryption Method: ZipCrypto
      • Encryption: Set Password `123`
      Archive options

      حال در دسکتاپ فایلی بنام `test.zip` داریم.

      Created zip file

    دانلود و استفاده از BK-Crack

    بر اساس سیستم عامل خودتان، BK-Crack را از لینک زیر دانلود کنید:

    https://github.com/kimci86/bkcrack/releases Bkcrack download

    کپی `test.zip` در دایرکتوری `bkcrack.exe`

    Bkcrack folder contents
  3. ساخت فایل های مورد نیاز | Create Requires file

    ساخت `pl.txt` در دایرکتوری `bkcrack.exe` و نوشتن محتویات زیر درون آن

    Plain text file content

    حال تمام فایلهای مورد نیاز را برای شروع فرآیند کرک در اختیار داریم.

    All required files
  4. Get Recovery Key

    Open CMD and navigate to `bkcrack.exe` folder

    cd C:\Downloads\Compressed\bkcrack-1.5.1-win64
    CMD navigation
    List all content in `test.zip` and Encryption methods
    bkcrack.exe -L test.zip
    Archive contents listing
    Get Recovery Key of `test.txt`
    bkcrack -C test.zip -c test.txt -p pl.txt
    Recovery key process

    پس از اجرای این کامند ابزار حمله ای Bruteforce را پیاده سازی میکند و پس از چند دقیقه Recovery Key فایل تارگت بدست می آید.

  5. 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
    Decryption process

    Now Decrypted(Cracked) file save in `bkcrack.exe` folder

    Decrypted file

    فایل `decrypt.txt` در واقع فایل کرک شده همان `test.txt` است و تمام محتویات آنرا شامل میشود:

    Decrypted file content
  6. Cracking `test.zip` with created new Instance of Archive `-D`

    در این حمله از فایل آرشیو یک نمونه جدید بدون پسورد میسازیم.

    bkcrack -C test.zip -k f04945f4 3018d661 edc704a6 -D Decrypt.zip
  7. 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
    Creating new archive with password

    فایل آرشیو جدید ما بنام `Unlocked.zip` از نمونه رمز نگاری خود `test.zip` در پوشه `bkcrack` ایجاد شده و با پسورد `d@vood129` میتوانیم آنرا *Extract* کنیم. در این فولدر هر دو فایل متنی `test1, test2` را میتوانیم مشاهده کنیم:

    Unlocked archive contents

خلاصه کامندها | 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
Archive contents Final result