به عنوان یه برنامهنویس یا فعال حوزه وب، احتمالاً با User-Agent آشنا باشین: یه هدر http که قرار بود نشون بده با چه کلاینتی (چه مرورگری) طرف هستیم. امّا امروز که همه دارن از https استفاده میکنن، میشه با اطلاعات بیشتری کلاینت رو شناخت. اینجاست که JA3 وارد میشود: یه اثر انگشت جدید، با استفاده از اطلاعات TLS
پیش از اینکه درباره نحوه محاسبه JA3 Fingerprint صحبت کنیم، لازمه یه دور خیلی سریع مرور کنیم که یه ارتباط امن چطوری شکل میگیره:
اثرانگشت JA3 با دنبال کردن قدمهای زیر از پارمترهایی که کلاینت در شروع ارتباط میده به دست میاد:
۱. مقدار عددی (decmial) پارامترهای زیر رو به دست میارن:
برای مثال، با کمک 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
چرا 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) و...