Simple Payload Encryption


تمهيد:

لطالما كانت الحماية بمختلف أنواعها سواء كانت اجهزة على الشبكة او برامج على أجهزة المستخدمين، من اهم وأبرز التحديات في مجال اختبار الاختراق إلا ان تخطيها أصبح ممكناً في وقتنا الحاضر، فما سيتم ذكره في هذا المقال لأغراض تعليمية سواء لاجتياز كورسات متقدمة في جانب تخطي الحماية او لأعمال Red-Team/Penetration-Testingففي هذا المقال سأتحدث بشكل مبسط حتى نفهم آليه عمل الحماية وكيفية التخطي من خلال التشفير.

لنتعرف اولا على برامج الحماية وآليه عملها:

ما هو برنامج الحماية؟

بشكل مبسط نستطيع ان نقول بانه برنامج تم تصميمه من قبل شركات مختلفة متخصصة لتوفير الحماية ويتم تنصيب البرامج على جهاز المستخدم من اجل توفير الحماية الشخصية من اي تهديد خارجي من شأنه ان يضر المستخدم ومحتوياته الشخصية.

كيف تعمل برامج الحماية؟

تعمل برامج الحماية على ٣ اساليب: -

1) Static

2) Dynamic

3) Heuristic

  • يعمل الـ Static بناء على Blacklist ويتم ذلك بعمل مقارنه هاش اي ملف مع الهاش المتواجد في قواعد البينات لبرنامج المكافح وفي حال تم تطابق تلك الهاشات فيتم الإعلان بان هذا الملف خبيث.

  • يعمل الـ Dynamic بشكل متقدم حيث يقوم بمراقبة سلوك التطبيق أثناء التشغيل Run Time في الـ Sand Box وفي حال تم استدعاء او تنفيذ أوامر غير اعتيادية، يتم الإعلان بان هذا الملف خبيث.

  • يعمل الـ Heuristic فهو الاكثر عملاً حيث يتم عمل قواعد في برنامج الحماية Behavioural Rules  ويتم تشغيل الملف ومراقبة سلوكيات التطبيق وفي حال تم رصد اي سلوك يتوافق مع القواعد فيتم الإعلان بان هذا التطبيق خبيث.

ما هو التخطي؟

  • هو سلوك او ممارسات عدوانية من قبل شخص ما لتخطي أجهزة او برامج الحماية من اجل شن هجوم(الاختراق)، او تنزيل ملفات خبيثة بكافة انواعها في جهاز الضحية دون إشعاره بان هذا الملف خبيث. ويتم ذلك على مراحل متععده وهنا سنطتفي بمرحلة الاولي وهي التشفير.

ما هو التشفير؟

  • التشفير هو عملية تحويل البيانات من صيغتها الأصلية إلى صيغة مشفرة باستخدام مفتاح، بهدف حماية البيانات او تغير محتوى الملف وجعله غير قابلة للقراءة أو التفسير من قبل أشخاص غير المخولين. وعندما يكون الشخص المخول لديه المفتاح الصحيح، يمكنه فك التشفير واستعادة البيانات إلى صيغتها الأصلية. يُستخدم التشفير على نطاق واسع في الأمان السيبراني، والمراسلات الآمنة، وحماية المعلومات الحساسة.

انواع التشفير؟
هناك عدة أنواع من التشفير منها:

  • التشفير Symmetric Encryption يستخدم نفس المفتاح للتشفير وفك التشفير. يُعتبر الأسرع ولكن يتطلب توزيع مفتح فك التشفير لجميع المخولين.

  • التشفيرAsymmetric Encryption يستخدم مفتاحين: مفتاح عام للتشفير ومفتاح خاص لفك التشفير. يُستخدم لتبادل المفاتيح وضمان توقيع رقمي.

  • التشفير المعقّد Advanced Encryption Standard - AES يستخدم في العديد من التطبيقات ويعتبر من أقوى أنواع التشفير.

  • التشفير XOR هو نوع من أنواع التشفير البسيطة لتحويل البيانات إلى شكل مشفر. في هذا النوع من التشفير، يتم استخدام مفتاح سري (سلسلة من البتات) لتنفيذ العملية XOR مع كل بت في البيانات الأصلية.

  • تشفير قيصر (Caesar Encryption) التي تعتمد على تحويل النص الأصلي بتحريك كل حرف فيه بمقدار ثابت في الأبجدية. يُعرف هذا النوع من التشفير أيضًا باسم "تشفير التحويل البسيط". هذا التشفير يُعدّ أسلوبًا بسيطًا وسهلًا للتشفير، ولكنه يمكن تكسيره بسهولة باستخدام تجربة جميع الإمكانيات الممكنة. يُستخدم تشفير قيصر في العديد من الأحيان لأغراض تعليمية أو تسلية، وليس للأغراض الأمنية القوية.

هناك انواع كثيرة من التشفير وهذه مجرد امثلة بسيطة كما ان خطوات التشفير تعتمد على نوع التشفير المستخدم، إليك الخطوات الأساسية وبشكل عام:

  • اختيار نوع التشفير: حدد نوع التشفير الذي ترغب في استخدامه وافهم آليه عمله وما هي المعطيات لتتم مرحلة التشفير بنجاح.

  • إعداد المفاتيح: قم بإنشاء المفاتيح المطلوبة لعملية التشفير، مثلا هل هو 8 أحرف ام 16 ام 32 حرف. يمكنك تنفيذ هذا المر وسيطبع لك مفتاح معقد يصعب توقعه.

LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 64 ; echo

  • التشفير: قم بتأكيد ان وسيلة التشفير ستأخذ جميع البيانات وتشفره بالطرية الصحيحة، فلكل نوع تشفير له طريقته الخاصة في التشفير


ولفك التشفير فيتم تنفيذ خطوات التشفير ولكن بطريقة عكسية واستخدام جميع المفاتيع والوسائل المعمول بها في مرحلة التشفير.

- هذه خطوات عامة وقد تختلف تفاصيلها اعتمادًا على نوع التشفير والتقنيات المستخدمة.

- من واجبك ان تبحث عن امور اكثر تعقيداً اثناء التشفير.

الان وبعد ان فهمنا الجانب النظري، لننتقل الى الجانب العملي ونصنع لنا برنامج تشفير. في هذا المثال ساستخدم AES-256 لانه الاكثر اماناً ومعقد وبمفتاح مما يجعله صعب التخمين، باستخدام لغة الـ Csharp.

أولا: لأداء علية التشفير باستخدام AES-256، لا بد من توفير المتطلبات التالية:

  • تحتاج إلى بيئة برمجة تدعم خوارزمية تشفير AES، مثل لغة برمجة تحتوي على مكتبات تشفير مثل C#، Java، او python.

  • مفتاح التشفير بطول 256 بت (او ما تراه مناسب لك) لتوليد مفتاح قوي وعشوائي او مفتاح ثابت وهذا أمر ضروري للأمان. يجب أن يُحفظ المفتاح سريًا ويُدار بأمان وتأكد بأنك ستحتاجه في مرحلة فك التشفير.

  • المتجه الأولي(IV) في أوضاع مثل CBC (Cipher Block Chaining) يجب أن يكون المتجه الأولي فريداً وغير قابل للتنبؤ لكل عملية تشفير ويتم استخدامه لزيادة طبقة إضافية من الأمان لعملية التشفير.

  • بيانات للتشفير: البيانات التي ترغب في تشفيرها، سواء كانت ملفًا أو رسالة أو أي نوع آخر من البيانات.

  • اختبار وتحقق: من المهم اختبار تنفيذ التشفير بدقة لضمان عمله بشكل صحيح وآمن ويشمل ذلك اختبار الحالات الحدودية، ومعالجة الأخطاء، والتحقق من أن عملية فك التشفير تعمل كما هو متوقع.

تذكر أن علم التشفير مجال معقد ويتطلب تنفيذه وإدارته بالشكل الصحيح كما ان الأمر بالغ الأهمية للحفاظ على أمان البيانات. إذا لم تكن لديك خبرة في مجال التشفير فقم طلب المشورة من خبراء أو استخدام مكتبات تشفير معترف بها.

- الان لتقم بتنفيذ ذلك الكلام الى عملي، لنأخذ مثال على ذلك من منهج PTX من شركة eLearning Security.

- لا تعتمد على الادوات الجاهزة, لانك ستحتاج لمعرفة طريقة لفك وحقن النص الاصلي في مكان ما ليتم تنفيذه.

- اكتب طريقة التشفير بطريقتك الخاصة، او قم بتطوير ما هو موجود حالياً الى الافضل.

اولاً: استدعاء المساحات والاسماء الضرورية لإتمام عملية التشفير وطباعة النص المشفر
using System.Security.Cryptography;

using System.IO;

using System.Text;

using System;

ثانياً: إنشاء كلاس جديد والتي تحتوي على كودات التشفير

public class AES_ENC

{


ثالثاً: تعريف وظيفة ثابته تحمل إسم

AES_Encryption

والتي بدورها تتعامل مع ومفتاح التشفير والبيانات التي سيتم تشفيرها وتخزينها في متغير

encryptedBytes

public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)

{

byte[] encryptedBytes = null;

byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

using (MemoryStream ms = new MemoryStream())

{

using (RijndaelManaged AES = new RijndaelManaged())

{

AES.KeySize = 256;

AES.BlockSize = 128;


تعيين حجم المفتاح إلى 256 بت وحجم الكتلة إلى 128 بت لعملية التشفير باستخدام

var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);

AES.Key = key.GetBytes(AES.KeySize / 8);

AES.IV = key.GetBytes(AES.BlockSize / 8);


تعيين وضعية التشفير إلى وضع تشفير سلسلة الكتل

AES.Mode = CipherMode.CBC;

using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))

{

cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);

cs.Close();

}

encryptedBytes = ms.ToArray();

}

}

return encryptedBytes;

}

public static void PrintShellcode(byte[] shellcodeBytes)

{


اليه طبعاة النص المشفر

StringBuilder shellcode = new StringBuilder();

shellcode.Append("byte[] shellcode = new byte[");

shellcode.Append(shellcodeBytes.Length);

shellcode.Append("] { ");

for (int i = 0; i < shellcodeBytes.Length; i++)

{

shellcode.Append("0x");

shellcode.AppendFormat("{0:x2}", shellcodeBytes[i]);

if (i < shellcodeBytes.Length - 1)

{

shellcode.Append(",");

}

}

shellcode.Append(" };");

Console.WriteLine(shellcode.ToString());

}

public static void Main(string[] args)

{


البيلود المراد تشفيره

//Payload Here


//generate key:LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 64 ; echo


byte[] password = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes("YourPasswordHere"));


ما هو مفتاح التشفير

SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes("YourKeyHere"));

byte[] shellcodeEncrypted = AES_Encrypt(buf, password);

PrintShellcode(shellcodeEncrypted);

}

}

- تم تشفير البيلود ولكن السوال الاهم، ماذا بعد التشفير؟ فليس الهدف الجهوري هو التشفير فقط وتخطي On Disk، انما ايضاً فك التشفير وإيجاد طريقة لتنفيذ البيلود وهذا عليك تعلمه بنفسك :)

- هذا ليس بشي جديد، انما الاساس وعليك تطوير نفسك في هذا الجانب.

Join