حسین طالقانی
حسین طالقانی
خواندن ۴ دقیقه·۱ سال پیش

اثرانگشت JA3: در دنیای SSL/TLS امضای تو چند است

به عنوان یه برنامه‌نویس یا فعال حوزه وب، احتمالاً با User-Agent آشنا باشین: یه هدر http که قرار بود نشون بده با چه کلاینتی (چه مرورگری) طرف هستیم. امّا امروز که همه دارن از https استفاده می‌کنن، میشه با اطلاعات بیش‌تری کلاینت رو شناخت. اینجاست که JA3 وارد می‌شود: یه اثر انگشت جدید، با استفاده از اطلاعات TLS


ارتباط امن SSL/TLS چطور شکل می‌گیره؟

پیش از اینکه درباره نحوه محاسبه JA3 Fingerprint صحبت کنیم، لازمه یه دور خیلی سریع مرور کنیم که یه ارتباط امن چطوری شکل می‌گیره:

  • کلاینت سلام می‌کنه (چون سلامتی میاره) و خودش رو با این اطلاعات معرفی می‌کنه: از کدوم نسخه TLS، چه افزونه‌هایی (extensions)، کدوم روش‌های رمزنگاری (cipher suits) و چه فشرده‌سازی‌هایی پشتیبانی می‌کنه. در کنارش یه شناسه برای ارتباط (Session ID) و یه عدد تصادفی هم می‌فرسته (جزییات بیش‌تر در RFC)
  • سرور جواب سلام میده (چون واجبه) و بعد میگه کدوم روش رمزنگاری رو (از بین مواردی که کلاینت پشتیبانی می‌کنه) انتخاب کرده، و کنارش گواهینامه (certificate) خودش و یه عدد تصادفی هم می‌فرسته
  • کلاینت گواهینامه سرور رو بررسی می‌کنه (که مطمئن بشه واقعاً همون کسیه که می‌خواد باهاش صحبت کنه) و بعد یه کلید موقت (Pre-master Secret) انتخاب می‌کنه و برای سرور می‌فرسته.
    برای اینکه کسی این وسط نتونه کلید انتخاب شده رو بدزده، اون رو با Public Key سرور (که توی گواهینامه‌ش هست) رمز می‌کنه (جهت یادآوری: فقط سرور که Private Key رو داره می‌تونه این پیام رو باز کنه).
  • کلاینت به سرور خبر میده که از اینجا به بعد، گفتگو با رمزنگاری متقارن با کلید اصلی (Master Secret) انجام میشه
    کلید اصلی رو از کجا میارن؟ سرور و کلاینت می‌تونن با استفاده از عدد تصادفی خودشون (که هم‌زمان با «سلام» فرستادن) و کلید موقت، کلید اصلی رو به دست بیارن.
  • سرور پیام کلاینت رو می‌خونه، کلید اصلی رو حساب می‌کنه و میگه دیگه خوش‌و‌بش تمومه (Finished) و بریم سر حرف‌های اصلی!
مراحل ایجاد عکس از ssl2buy.com
مراحل ایجاد عکس از ssl2buy.com


چطور JA3 Fingerprint به دست میاد؟

اثرانگشت JA3 با دنبال کردن قدم‌های زیر از پارمترهایی که کلاینت در شروع ارتباط میده به دست میاد:

۱. مقدار عددی (decmial) پارامترهای زیر رو به دست میارن:

  • TLS Version
  • Ciphers
  • TLS Extensions
  • Elliptic Curves
  • Elliptic Curve Point Formats

برای مثال، با کمک tcpdump یا ابزارهای مشابه می‌تونین ببینین تو پیامی که برای سرور ارسال میشه، مقدار TLS v1.3 در مبنای ۱۶ هست 0x304 که در مبنای ده میشه ۷۷۲

مقادیر پارمترهایی مثل روش‌های رمزنگاری (Ciphers) که خودشون یه لیست هستن رو با خط تیره (-) به هم می‌چسبونن. مثلاً ciphers یه همچین چیزی میشه: 4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53

۲. این مقادیر رو به ترتیب زیر با comma به هم می‌چسبونن:

TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats

نتیجه یه همچین چیزی میشه:

772,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,17513-11-43-16-35-18-23-0-65281-10-27-5-13-45-51-41,29-23-24,0


۳. کل عبارت رو MD5 میکنن

از اونجایی که لیست روش‌های رمزنگاری پشتیبانی شده و افزونه‌ها متغیره، MD5 کل عبارت رو حساب می‌کنن که مطمئن بشن خیلی طولانی نمیشه (طول MD5 همیشه ۳۲ کاراکتره)

برای مثال، MD5 عبارت بالا میشه:

9c8cbf5faa91b1ce09adcdc267fe3d95

این عبارت، میشه اثر انگشت JA3 شما به عنوان Client

مراحل محاسبه JA3 Fingerprint
مراحل محاسبه JA3 Fingerprint


چرا MD5؟ اگرچه MD5 مشکلاتی داره (از جمله احتمال collision)، ولی توسعه‌دهندگان این روش توضیح دادن که به خاطر پشتیبانی گسترده (در هر سخت‌افزار و نرم‌افزار)، انتخابشون این بوده به جای روش‌هایی مثل Fuzzy hashing سراغ MD5 برن

برای شناسایی سرور چی؟ به روش مشابه JA3، از اطلاعاتی که در Server Hello فرستاده میشه، برای محاسبه رشته‌ای استفاده می‌کنن که بهش می‌گن JA3s. البته روش دیگه‌ای هم برای محاسبه اثرانگشت سرور وجود داره با نام JARM که برخلاف JA3s به صورت passive نیست و یک درخواست مشخص رو به سرور می‌فرسته و با جواب اون درخواست، اثرانگشت رو به دست میاره.

چرا اسمش شده JA3؟ سه محقق Salesforce که اول اسم و فامیل‌شون بوده JA این روش رو ابداع کردن: John Althouse, Jeff Atkinson, and Josh Atkins

به چه درد می‌خوره؟

با این fingerprint میشه فهمید با چه کلاینتی رو‌به‌رو هستیم و اگر لازم باشه، می‌تونیم مثلاً با کمک Firewall جلوی درخواست‌ها رو بگیریم (یا برعکس، فقط درخواست‌های خاصی رو اجازه بدیم) یا درخواست رو به مسیر دیگه هدایت کنیم (redirect) و...


لینک‌ها و ابزارها

tlsja3 fingerprintاثرانگشت ja3اینترنت
سالک .[ ل ِ ] (ع ص ، اِ) مسافر و راه رونده. / a3dho3yn.ir
شاید از این پست‌ها خوشتان بیاید