اثرانگشت 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چطور JA3 Fingerprint به دست میاد؟اثرانگشت JA3 با دنبال کردن قدم‌های زیر از پارمترهایی که کلاینت در شروع ارتباط میده به دست میاد:۱. مقدار عددی (decmial) پارامترهای زیر رو به دست میارن:TLS VersionCiphersTLS ExtensionsElliptic CurvesElliptic 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 چرا 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) و...لینک‌ها و ابزارهاگیت‌هاب JA3 و مقاله اصلی salesforceویدیویی از مراحل محاسبه اثرانگشت JA3اثرانگشت JA3 خودتون رو ببینین: Scrapfly | JA3 TLS Fingerprintفهرستی از JA3 Fingerprint از کلاینت‌های مخرب: Malicious JA3 Fingerprints (abuse.ch)مستندات کلادفلر درباره استفاده از JA3 Fingerprint