# تعلم كيف تتحقق من الملفات المُحملة من الانترنت قبل تثبيتها أو استعمالها

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

خط دفاعنا الاول سيكون بالتعامل مع برامج حُره ومفتوحة المصدر-FOSS -Free and Open Source Software، اي ان الكود البرمجي متاح للجميع في مواقع مثل Github وأن أي شخص لديه الحرية في استخدام الكود، دراسته وتعديله. يسمح هذا المبدأ للعديد من العيون وخاصة من لديهم الخبرة التقنية بالتأكد من عدم وجود اي أبواب خفية أو نقاط ضعف في الكود وإن وجدت تُعدل سريعا، خاصة بأن المطورين بارعين في "النسخ لصق" 😄 من أكواد أخرين، وهذا ما يجعلهم يركزون على فحص الكود بدل إضاعة وقت في كتابته من جديد.

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

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

الحادثة الاولى (opens new window) هذه حادثة اخرى (opens new window) وهذا خبر عن تزوير محفظة بيتكوين (opens new window)

الحذر

علينا دائما أن نتأكد من صحة الملفات قبل تثبيتها على أجهزتنا، خاصة عندما نتعامل مع تطبيقات وبرامج البيتكوين وذلك من مبدأ "لا تثق بل تحقق". فمع ارتفاع السعر ستزداد احتمالية تعرُضنا لمحاولات أختراق. هدفنا تصعيب المهمة وجعلها مكلفة على المخترقين ليتركوننا ويبحثوا عن غيرنا 😃 .

من خلال متابعة هذا الدليل سنتعلم كيف نحمي أنفسنا من تثبيت ملفات حصل بها خلل أو تم تزيفها والتلاعب بها اثناء عملية التحميل، او تم تبديلها بعد أن اخترق الموقع لا سمح الله.

لهذة المهمة سنتعلم كيف نقوم بالتحقق من الملفات عبر استخدام:

  1. تقنية الهاش (مثل دالة الهاش SHA256)

    • دالة الهاش تقوم بإعطاء الملف بصمة رقمية معينة اذا تم العبث بالملف وحصل اي تغيير ولو بسيط عليه فسيتم إنتاج هاش أو بصمة رقمية مختلفة تماما.
    • بعد التحميل وقبل تثبيت الملف نتحقق منه عبر مقارنه الهاش للملف مع الهاش الذي يضعه مُطور التطبيق على موقع التحميل.
    • يحمينا التحقق من الهاش من تثبيت ملفات حصل بها خلل أثناء عملية التحميل.
    • لا تحمينا في حالة اخترق الموقع الاصلي ووضع ملف اخر للتحميل يحتوي على كود خبيث، لان المخترق سييغر ايضا نتيجة الهاش الظاهره على الموقع ليلائم الملف الخبيث.
  2. تقنية (GnuPG) او باختصار (GPG)

    • تحمينا تقنية (GnuPG) اذا حصل وتم تزيف أو التلاعب بالملف اثناء عملية التحميل من خلال اختراق الاتصالات بما يسمى ( MITM -Man In The Middle ).
    • تحمينا من الوقوع في أختراقات التصيد ( Phishing ) وذلك عبر إرسالنا الى موقع انترنت مزيف يشبة الموقع الاصلي لتحميل ملف خبيث.
    • نستطيع التأكد من صحة الملف حتى اذا تم اختراق الموقع الاصلي المراد تحميل الملف منه، لان المخترق لن يتمكن من وضع ملف توقيع جديد في حال لم يمتلك المفتاح الخاص للمطور كما سنشاهد.
  3. بناء البرامج من المصدر (reproduce from source code)

    • اغلب البرامج والتطبيقات المتعلقة بالبيتكوين مفتوحة المصدر. حيث يمكننا تحميل الكود من github وبناءة من جديد على حاسوبنا.
    • لن نقوم بشرح الطريقة (حاليا) لانها تحتاج لخبرة تقنية عالية.
    • يمكنكم الدخول لهذا الموقع والتحقق من فيديوهات لاشخاص قاموا بهذة العملية لبعض محافظ وتطبيقات بيتكوين المختلفة https://bitcoinbinary.org (opens new window)
    • كما ويمكنكم الدخول لهذا الموقع الذي يقوم بتتبع محافظ البيتكوين ويظهر دليل على امكانية بناء التطبيق من كود المصدر https://walletscrutiny.com (opens new window).

التحقق باستخدام ال-(GPG) أفضل ويغنينا عن التحقق باستخدام الهاش، واغلب مطوري تطبيقات البيتكوين يدمجون ما بين الاثنين كما سنشاهد.

# التحقق عبر استخدام GPG

طجلأ - طويلة جدا لن أقرأها

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

للتحقق من ملف من خلال (GPG) سنحتاح الى التالي:

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

برنامج التحقق في GPG يعمل كالتالي:

  1. اذا ادخلنا (الملف + ملف التوقيع)==> نحصل على بصمة رقمية لمفتاحٍ عام
  2. اذا ادخلنا (المفتاح العام لمُطور الملف) ==> نحصل على بصمة رقمية فريدة لهذا المفتاح.

البرنامج يقارن ما بين البصمتين:

  • ✅ اذا تطابقت - هذا يعني ان عملية التحقق نجحت وأن الملف تم التوقيع عليه من قبل المفتاح الخاص لمُطور الملف، ولم يتم التعديل عليه منذ وقت التوقيع.
  • ❌ اذا اختلفت - فقد فشل التأكد، عليك حذف الملف وعدم استخدامة ابدا. قم بتحميل (الملف والتوقيع) من جديد.

يمكننا مقارنة البصمة الرقمية للمفتاح العام للمُطور يدويا اذ عادة ما يقوم المطورين بنشر البصمة الرقمية او المفتاح العام في عدة مواقع مختلفة github، تويتر أو في مجموعة Telegram لدعم التطبيق وغيرها. فاذا تطابقت هذا يعني ان عملية التحقق نجحت وأن الملف تم التوقيع عليه من قبل المفتاح الخاص للمُطور ولم يتم التعديل عليه منذ وقت التوقيع، فقط عندها نقوم بتثبيته. اما اذا فشلت العملية إحذف الملف ولا تستخدمه ابدا وأعد العملية من جديد.
الTelegram

انتبهوا: اذا كنت تعتقد بأنك قد تكون مستهدف لعمليات قوية من اختراقات ( MITM -Man In The Middle )

يمكنك دائما التحقق من بصمة المفتاح العام من أجهزة اخرى بحوزتك مثل حاسوب اخر. عن طريق هاتفك الذكي أو حتى يمكنك محاولة اقفال ال WIFI والدخول عبر شبكة الجوال 4g أو حتى ان تتصل بصديق واطلب منه ان يدخل مثلا الى صفحة المبرمج واخبارك هاتفيا بالبصمة الرقمية.

how-gpg-works

هذة الصورة لمطور محفظة Sparrow لقد وضع آخر 16 خانة من البصمة الرقمية لمفتاحه العام في صفحته على تويتر developers usualy put their GPG Public key fingerprint on Twitter

هذا عنوان صفحته على تويتر https://twitter.com/craigraw (opens new window)

هذا ايضا مُطور محفظة Electrum يعرض البصمة الرقمية لمفتاحه العام في أحد محاضراته https://youtu.be/7D83IpdiF-U?t=31 (opens new window)

تُعرف هذة العملية ببناء شبكة من الثقة Web of trust (opens new window).

سنقوم بالاستعانة ببرنامج GnuPG الذي يقوم بعملية التحقق. اذا كنتم تمتلكون حاسوب بنظام تشغيل وويندوز أو ماك سيتوجب عليكم تحميل البرنامج. اما اذا كنتم تمتلكون حاسوب بنظام تشغيل لينوكس فالبرنامج مثبت مسبقا مع كل توزيعات لينوكس.

# تثبيت GPG في Windows

  1. نقوم بتحميل برنامج Gpg4win-GnuPG for Windows من خلال الرابط التالي https://gpg4win.org/thanks-for-download.html (opens new window) والذي يحتوي على برنامج Kleopatra

  2. قبل تثبيته نقوم بمقارنة البصمة الرقمية للملف عبر مقارنة دالة الهاش SHA256 للملف وما بين الهاش الذي نشر على الموقع لكي نتأكد من سلامة الملف، نقوم بالدخول الى الموقع هنا https://gpg4win.org/package-integrity.html (opens new window) والبحث عن SHA256 كما موضح بالصورة التالية:

gpg4win-hash256

  1. نقوم بالدخول الى المجلد الذي يحتوي الملف. ثم نضغط على (مفتاح Shift + زر الأيمن بالفأرة)معا، بعدها نقوم باختيار open powershell كما موضح بالصورة التالية :

open-powershell

  1. في الشاشة التي ظهرت نقوم بكتابة التالي
# باسم الملف FILENAME قم بتغيير   
certutil -hashfile FILENAME sha256 | findstr /v "hash"

# أنا ادخلت اسم الملف كالتالي:
certutil -hashfile gpg4win-4.0.0.exe sha256 | findstr /v "hash"

اذا لم تنجحوا تأكدوا انكم داخل المجلد الصحيح الذي يحتوي الملف. انا حملت الملف هنا:

C:\Users\Best\Downloads

وهذا ما حصلت عليه:

gpg4win-powershell-hash256

لاحظوا اننا حصلنا على نفس البصمة ونفس نتيجة دالة الهاش كما بالموقع فاذن الملف سليم

gpg4win-hash256

  1. الان يمكننا فتح الملف وبدأ عملية التنصيب كما موضح بالصور التالية: gpg4win-setup1

تأكدوا من اختيار Kleopatra و GpgEX

gpg4win-setup2 gpg4win-setup3

اضغط على Next ثم على Finish. إنتهينا سيقوم الحاسوب بإعادة التشغيل.

# التحقق عبر sha256 في نظام ويندوز

برنامج gpg4win الذي قمنا بثبيته أعلاه يحتوي على إضافة تسهل علينا عملية فحص نتيجة البصمة الرقمية لدالة الهاش sha256 .

# طريقة التحقق من هاش الملف في نظام ويندوز من خلال إضافة ال GpgEX

  1. كل ما عليكم فعله هو أختيار الملف المراد معرفة البصمة الرقمية له ثم الضغط على (زر الفأرة الأيمن) ثم اختيار (More GpgEX options) ثم اختيار (Create checksums)

ساتخد من ملف تنصيب البرنامج gpg4win-4.0.0.exe مثالا ولكن يمكن تطبيق الطريقة على اي ملف اخر كالتالي:

gpgex-checksum

لاحظوا الرسالة من تطبيق Kleopatra والتي تقول ان ملف text جديد قد إضيف تحت اسم sha256sum.txt new-checksum-file

افتح ملف sha256sum.txt ستجد ان نتيجة الهاش موجودة في الملف كالتالي:

f83be101c5e9c23740d6fde55fd8fefebf4fafb7badcb3756d1f574b5ad37507  C:/Users/Best/Downloads/gpg4win-4.0.0.exe

ثم نتأكد من أنها تطابق نتيجة دالة ال- SHA256 الذي ظهر لنا في الموقع https://gpg4win.org/package-integrity.html (opens new window):

gpg4win-hash256

نجحنا 😃

طريقة اخرى للتحقق من هاش الملف في نظام ويندوز من ال cmd

رأينا في عملية تثبيت برنامج GPG أعلاه كيف فحصنا نتيجة ال sha256 من خلال ال- PowerShell ولكن ايضا يمكنكم استخدام command line أو بإختصار ال - CMD في ويندوز. اليكم الطريقة:

  1. نقوم بالبحث عن cmd ثم نضغط open

search-for-cmd-in-windows

  1. ثم نضغط open

open-cmd-in-windows

فتظهر لنا الشاشة السوداء التالية:

change-directory-in-windows-cmd

  1. نقوم بالدخول الى مجلد Downloads الذي يحتوي الملف عبر cd والتي تعني تغيير المجلد(change Directory)
cd Downloads

كالتالي:

sha256sum

  1. ثم نقوم بالتحقق من هاش الملف بأسم gpg4win-4.0.0.exe
#  قم بتغيير اسم الملف اذا تغيير
certutil -hashfile gpg4win-4.0.0.exe sha256

sha256sum

ثم نتأكد من أنها تطابق نتيجة دالة ال- SHA256 الذي ظهر لنا في الموقع https://gpg4win.org/package-integrity.html (opens new window):

gpg4win-hash256

# التحقق عبر GPG في نظام windows

ساقوم بتحميل محفظة Electrum والتحقق من توقيع المُطور باستخدام الأداة المساعدة Kleopatra التي قمنا بتثبيتها من خلال برنامج gpg4win

كما ذكرنا سابقا لنتحقق من ملف باستخدام (GPG) سنحتاح الى التالي:

  • الملف المراد التحقق منه (الذي حملته من الانترنت)
  • ملف توقيع على الملف الأول،الذي يُزعم انه تم من خلال التفاعل ما بين الملف والمفتاح الخاص للمُطور.
  • المفتاح العام للمُطور
  1. نقوم بالدخول لموقع التطبيق https://electrum.org/#download (opens new window) وتحميل الملفات كما بالصورة (تأكدوا بأنكم دخلتم للموقع مع https وليس http):
    1. برنامج Electrum
    2. التوقيع
    3. المفتاح العام لأحد المُطور ( في حالتنا يوجد 3 أشخاص قاموا بالتوقيع على الملف. أنا سأكتفي من بفحص واحد منهم، لكن يمكنك تحميل جميع المفاتيح العامة والتأكد من الجميع بنفس الخطوات)

download-electrum

عند الدخول لرابط المفتاح العام ( رقم 3 في الصورة اعلاه) يجب حفظ المفتاح العام كملف كالتالي: نضغط على الزر الايمن بالفأرة ونختار حفط الصفحة Save Page As...

download-public-key

شديدي الملاحظة سينتبهون أن المفتاح العام موجود في دومين موقع آخر (عادة المفتاح العام نأخذه من مصدر غير الموقع المتواجد عليه ملف التحميل)

download-public-key2

  • بعد تحميل الملفات في مجلد واحد:
    1. ملف تنصيب برنامج Electrum
    2. ملف التوقيع على ملف التنصيب (عادة يكون اسم ملف التوقيع بنفس اسم الملف الاصلي)
    3. المفتاح العام لأحد المطورين
  • نقوم بفتح ملف المفتاح العام باسم ThomasV (رقم 3 بالصورة) فتظهر لنا الرسالة التالية "لقد تم أستيراد مفتاح واحد" كما ظاهر بالصورة

electrum-files

طريقة اخرى لإستيراد المفتاح العام هي عن طريق فتح برنامج Kleopatra ثم الضغط على import واختيار الملف الذي يحتوي المفتاح العام باسم ThomasV

kleopatra-import-pkey

طريقة ثالثة اذا كانت معكم البصمة الرقمية للمفتاح العام

اذا مثلا اخذت البصمة الرقمية من حساب المطور على تويتر او من مجموعة الدعم الفني على تيلجرام، فبأمكانك البحث عن البصمة في سيرفيرات للتواقيع، هنالك خاصية في برنامج Kleopara عبر الضغط على Lookup on Server... للبحث

kleopatra-lookup-on-server

يمكن البحث عن البصمة الرقمية (مفضل بدون فراغات)

أو بالامكان البحث عن ال Key-ID وهي اخر 16 خانة من البصمة الرقمية (2BD5824B7F9470E6)

lookup-on-server

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

افتح ال cmd واكتب التالي:

# في مثال محفظة اليكتروم المفتاح العام متواجد في هذا الرابط:
curl https://raw.githubusercontent.com/spesmilo/electrum/master/pubkeys/ThomasV.asc | gpg --import

شاهد كيف سيظهر المفتاح العام في برنامج Kleopatra عند ادخال الكود اعلاه kleopatra-import-from-cmd

لاحظوا أن تفاصيل المفتاح العام قد ظهرت في برنامج Kleopatra

kleopatra-imported-pkey

انتبهوا لل Key-ID وهي اخر 16 خانة من البصمة الرقمية للمفتاح العام(2BD5824B7F9470E6) هنا فرصتنا للتأكد من صحة المفتاح العام للمُطور من عدة مصادر. مثلا في هذا الفيديو قام مُطور محفظة Electrum بعرض البصمة الرقمية لمفتاحه العام في الثانية 31 https://youtu.be/7D83IpdiF-U?t=31 (opens new window)

YOUTUBE (opens new window)

لاحظوا انها تطابق اخر 16 خانة من بصمة المفتاح العام

6694D8DE7BE8EE5631BED950[2BD5824B7F9470E6]
  1. الان لكي نتأكد من ملف التنصيب نقوم بالضغط مرتين على ملف التوقيع

إنتباه

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

view-file-name-extensions

ملفات التوقيع تنتهي عادة بالتمديدات (sig,gpg,asc)

أو يمكنكم الضغط بالزر الأيمن بالفأرة على ملف التوقيع هكذا

(زر الفأرة الأيمن) ثم اختيار (More GpgEX options) ثم اختيار (Verify)

kleopatra-verify

هكذا ستبدو العملية باستعمال Kleopatra

kleopatra-verify-files

نجحت العملية: لقد ظهرت لنا رسالة تقول أن التوقيع قد تم من قبل Thomas أسم المُطور ومن خلال المفتاح العام مع أظهار اخر 16 خانة من بصمة المفتاح العام له kleopatra-verify-a-file انتبهوا ان هنالك 3 موقعين على الملف، أنا سأكتفي من فحص واحد منهم، لكن يمكنكم جلب جميع المفاتيح العامة للبقية والتأكد من الجميع بنفس الخطوات

اذا اردت مزيد من التفاصيل يمكنكم الضغط على Show Audit Log كما موضح بالصورة ادناة kleopatra-verify-a-file1

ستظهر لكم نفس الرسالة أنتبهوا لجملة Good signature from والبصمة الرقمية الكاملة للمفتاحه العام. kleopatra-verify-a-file2 أي تطابقت البصمتان، نتيجة (ملف التوقيع + الملف) هي نفس البصمة الرقمية للمفتاح العام الذي ادخلناة.

لا تكترثوا بالرسائل التي تقول:

The used key is not certified by you or any trusted person.
# أو
WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.

فهي تعني فقط انك لم تُشر لحاسوبك انك تثق بأن هذا المفتاح العام هو للمُطور، هنالك طريقة للتوقيع على المفتاح العام للمُطور من خلال مفتاح خاص تنشئه على Kleopatra لكن الخطوة غير ضرورية

الحذر: احذف الملف فورا ولا تستعمله

  • اذا حصلتم على رسالة تقول Bad signature from
  • او اذا حصلتم على رسالة تقول Invalid signature
  • او اذا حصلتم على Signature created on تاريخ معين With unavailable certificate: بصمة رقمية مختلفة
    • عند الدخول ل Show Audit Log ستظهر لكم هذة الرسالة Can't check signature: No public key وبصمة رقمية مختلفة
  1. الآن يمكننا المباشرة بتثبيت برنامح الملف الاصلي

# تثبيت GPG على أجهزة Mac

  1. نقوم بتحميل برنامج GPG Suite من خلال الرابط التالي https://gpgtools.org/ (opens new window)

  2. قبل تثبيته نقوم بمقارنة البصمة الرقمية للملف عبر مقارنة دالة الهاش SHA256 للملف وما بين الهاش الذي نشر على الموقع إذا تطابق نكون قد تتأكدنا من سلامة الملف، ابحث عن SHA256 كما موضح بالصورة التالية:

gpgtools-hash256

  1. قم بتشغيل تطبيق ال Terminal قم بكتابة:
# غير اسم الملف اذا تغير الاسم 
shasum -a 256 ~/Downloads/GPG_Suite-2021.3.dmg

والنتيجة كالتالي

gpgtools-terminal-hash256

لاحظوا اننا حصلنا على نفس الهاش

  1. الان يمكنكم البدأ بتثبيت التطبيق

# التحقق عبر GPG في نظام Mac

نشرح عن ذلك قريبا

# تثبيت GPG في أجهزة Linux

اذا كنت تمتلك حاسوب بنظام تشغيل لينوكس فالبرنامج مثبت مسبقا في كل توزيعات لينوكس.

# التحقق عبر GPG في نظام Linux

سنحتاح :

  • الملف المراد التحقق منه (F-Droid.apk)
  • ملف التوقيع (F-Droid.apk.asc)
  • المفتاح العام للمُطور

(37D2C98789D8311948394E3E41E7044E1DBA2E89)

# ثم نقوم بتحميل ملف التطبيق
wget -q https://f-droid.org/F-Droid.apk

# نقوم بتحميل ملف التوقيع
wget -q https://f-droid.org/F-Droid.apk.asc

# ثم نقوم بطلب المفتاح العام للمُطور من موقع يوبينتو
gpg --keyserver keyserver.ubuntu.com --recv-key 37D2C98789D8311948394E3E41E7044E1DBA2E89

# ثم نقوم بمقارنة بصمة المفتاح وهي آخر 16 خانة من المفتاح اعلاه
gpg --fingerprint 0x41E7044E1DBA2E89

# ثم نتحقق من الملف هكذا
gpg --verify F-Droid.apk.asc F-Droid.apk

النتيجة ستكون مثل هذا

gpg: Signature made Mon 09 Aug 2021 11:17:55 PM CEST
gpg:                using RSA key 802A9799016112346E1FEFF47A029E54DD5DCE7A
gpg: Good signature from "F-Droid <admin@f-droid.org>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 37D2 C987 89D8 3119 4839  4E3E 41E7 044E 1DBA 2E89
     Subkey fingerprint: 802A 9799 0161 1234 6E1F  EFF4 7A02 9E54 DD5D CE7A

ما يهم هو اننا حصلنا على good signature هذا يعني ان التوقيع على الملف حصل من خلال المفتاح العام، لاحظوا ان البصمة التي ظهرت لنا تطابق بصمة المفتاح العام للمطور التي طلبناها من موقع يوبينتو أعلاه

Good signature from "F-Droid <admin@f-droid.org>

لا تهتم بهذة الرسالة:

WARNING: This key is not certified with a trusted signature
		There is no indication that the signature belongs to the owner.

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