مقدمه
جهان امنیت سایبری در دهه اخیر شاهد تغییر بنیادین در روش شناسایی حملات بوده است. در گذشته اغلب سیستمها بر مبنای Signature کار میکردند: اگر الگوی یک حمله شناختهشده بود، IDS آن را میدید و هشدار میداد. اما با ظهور حملات پیچیده، رمزگذاری فراگیر، و استفاده گسترده از HTTPS، این مدل عملاً ناکارآمد شد. امروزه بیش از ۹۵٪ ترافیک اینترنت رمزگذاریشده است و مهاجمان از همین وضعیت برای مخفی شدن استفاده میکنند؛ بهخصوص گروههای APT که از کانالهای «Slow & Low C2» برای جلوگیری از شناسایی بهره میبرند.
در چنین فضایی، ابزارهایی مانند Zeek و تکنیکهایی مثل JA3 به جنگجویان اصلی میدان تبدیل شدهاند. JA3 روشی است برای اثرانگشتگذاری ارتباطات TLS، نه از طریق بررسی محتوا، بلکه از طریق بررسی «ساختار ClientHello». این روش برخلاف User-Agent یا Headerهای معمولی، تقریباً غیرقابلتقلب است مگر با تلاش و هزینه بسیار زیاد.
این مقاله نقش JA3 را در کشف تهدیدات پیشرفته (APT) بررسی میکند، توضیح میدهد Zeek چگونه با استفاده از JA3، JA3S، weird logs و زمانبندی ارتباطات beaconing مهاجم را شناسایی میکند، و در نهایت به صورت مفصل توضیح میدهد چرا مهاجم معمولاً نمیتواند یا نمیخواهد JA3 مرورگرهای واقعی را جعل کند-حتی اگر User-Agent را کامل جعل کرده باشد.
این قسمت آخر بخش کلیدی این مقاله است، زیرا دقیقاً آنجاست که تحلیلگر میفهمد چرا JA3 هنوز هم یکی از مؤثرترین ابزارهای Threat Hunting در شبکههای مدرن است.
JA3 یک روش برای ساختن یک «اثر انگشت رفتاری» از TLS ClientHello است؛ یعنی پیام اولیهای که کلاینت به سرور در شروع یک ارتباط TLS میفرستد.
این اثرانگشت حاصل اجزای زیر است:
لیست Cipher Suites
لیست Extensionها
امضای الگوریتمها
ترتیب گزینهها
نسخههای TLS
Elliptic Curves
پارامترهای key_share
سایر مقادیر دقیق و ریزِ پروتکل
این fingerprint معمولاً به صورت یک hash (اغلب MD5) ذخیره میشود.
نکتهٔ مهم:
JA3 اطلاعات رمزنگاریشده را نمیبیند، بلکه فقط ساختار پروتکل را تحلیل میکند. به همین دلیل، JA3 حتی در کانالهای کاملاً رمزگذاریشده هم میتواند رفتارهای مخرب را نشان دهد.
چرا JA3 مهم است؟
هر نرمافزار یک «امضای TLS» خاص دارد.
برای نمونه:
Chrome JA3 مخصوص خودش را دارد و Firefox همینطور وPython requests/libcurl/WinHTTP امضای کاملاً متفاوت دارند همچنین implantهای APT معمولاً JA3شان بسیار ساده، کوتاه یا غیرمعمول است
در نتیجه اگر یک سرور داخلی که باید فقط پاسخگوی درخواستها باشد، ناگهان شروع به outbound کردن TLS کند با JA3 مربوط به Python یا یک implant سفارشی، Zeek آن را فوراً در دسته «کنش غیرطبیعی» قرار میدهد-حتی اگر ارتباط HTTPS باشد و کاملاً مشروع بهنظر برسد.

Zeek سه کار بزرگ انجام میدهد که IDSهای دیگر معمولاً انجام نمیدهند:
متادیتای دقیق و کامل از TLS استخراج میکند
Zeek لایه ۷ را dissect میکند و JA3/JA3S را کنار timestamp و سبد اطلاعاتی دیگر ثبت میکند.
رفتار شبکه را در طول زمان دنبال میکند
یعنی اگر ارتباط هر ۱ ساعت یک بار اتفاق میافتد، Zeek آن را در conn.log ثبت میکند و امکان تحلیل رفتار beaconing فراهم میشود.اطلاعات را باهم cross-correlate میکند
Zeek میتواند:
weird.log
ssl.log
conn.log
x509.log
notice.log
را کنار هم بگذارد و رفتارهای غیرطبیعی ایجاد کند.
مثال: شناسایی C2 یک APT از طریق Zeek
فرض کنید سرور DMZ که نباید outbound باشد، هر یک ساعت به یک دامنه ناشناس در اروپا متصل میشود.
Zeek در همان لحظه سه چیز مشکوک را ثبت میکند:
JA3 غیرعادی
JA3 مربوط به WinHTTP یا Python یا یک TLS Stack سفارشی.
weird.log : رفتار کلاینتی غیرمنتظره
Zeek میبیند سرورهایی که معمولاً passive responder هستند، دارند به عنوان initiator رفتار میکنند.
conn.log : الگوی beaconing
حجم ترافیک ثابت، دوره زمانی ثابت، handshake ساده، طول session کوتاه.
این سه شاخص بهتنهایی برای تشخیص یک C2 کافی هستند—even بدون محتوا.
به همین دلیل است که Zeek در شناسایی APT بسیار مؤثر است.
این پرسش بسیار جذاب و مهم است. مهاجمان User-Agent را به آسانی جعل میکنند.پس چرا JA3 را جعل نمیکنند؟
پاسخ کوتاه:
**جعل JA3 شبیه Chrome یا Firefox نهتنها سخت است بلکه هزینه، ریسک و پیچیدگی بسیار بالایی دارد.
به همین دلیل حتی APTهای سطح بالا معمولاً از آن صرفنظر میکنند.**
برویم سراغ تشریح مفصل:
۱) جعل JA3 فقط یک رشته نیست، جعل «کل TLS Stack» است.User-Agent یک رشته است. هرکسی ۵ ثانیه وقت بگذارد میتواند جعلش کند. JA3 اما یک نتیجهٔ محاسباتی روی ساختار کامل ClientHello است.
برای اینکه JA3 یک implant دقیقاً شبیه Chrome شود:
ترتیب cipher suiteها باید دقیقاً همان باشد
extensionها باید به همان ترتیب و همان مقدار باشند
گروههای ECDH باید منطبق باشند
ALPN باید درست باشد
signature_algorithms باید همان باشند
padding باید مطابق Chrome باشد
نسخهٔ TLS negotiation باید مثل Chrome رفتار کند
این یعنی مهاجم نمیتواند فقط یک «مقدار» را از Chrome کپی کند؛ باید کل handshake را بازسازی کند.
این معادل این است که یک مهاجم بخواهد TLS Chrome را دوباره اختراع کند.
۲) بسیاری از APTها از WinHTTP/libcurl/libtls استفاده میکنند که اصلاً اجازهٔ ساخت ClientHello دلخواه نمیدهد
implantهای معمولی از یکی از این موارد استفاده میکنند:
WinHTTP (ویندوز)
WinINet
libcurl
OpenSSL استاندارد
mbedTLS
NSS
این کتابخانهها اجازه نمیدهند:
ترتیب cipher suiteها را کنترل کنید
extensionهای دقیق را بچینید
key_share خاص تعیین کنید
padding افزوده یا کم کنید
به همین دلیل مهاجم باید:
TLS stack جدا بنویسد یا OpenSSL را fork کندیابخشهای داخلی ویندوز را hook کند
این سطح از طراحی معمولاً فقط برای بدافزارهای بسیار گران قیمت nation‑state انجام میشود.
۳) نسخههای مختلف Chrome JA3های مختلف دارندو این یعنی خطر شناسایی
مقدار JA3 روی Chrome 118 و Chrome 119 فرق دارد و Chrome 121 باز فرق میکند
Chrome روی Windows با Chrome روی Android فرق میکند
اگر مهاجم JA3 اشتباه را جعل کند، اثرانگشتش غیرعادیتر از حالت اولیه میشود!
این یک خطر بزرگ است.
در واقع:
«جعل ناقص JA3» برابر با «لو رفتن قطعی»
به همین دلیل مهاجم ترجیح میدهد اصلاً وارد این بازی نشود.
۴) JA3 فقط یک سیگنال نیست،JA3S، ALPN، SNI، رفتار ترافیک نیز باید تقلید شود
برای اینکه ترافیک یک implant کاملاً شبیه مرورگر شود:
JA3 (ClientHello) باید دقیق تقلید شود
JA3S (ServerHello) نیز باید در پارامترهایش قابل قبول باشد
ALPN باید http/2 باشد
SNI باید شبیه رفتار مرورگر باشد
session resumption باید مثل Chrome کار کند
TLS ticketها باید مطابق الگوریتم مرورگر باشند
رفتار retry باید همان الگو را داشته باشد
یعنی مهاجم باید یک مرورگر کامل بسازدنه یک implant کوچک.
۵) هزینهٔ توسعه در مقابل ارزش عملیاتی
وقتی یک APT میخواهد یک C2 مخفی داشته باشد، باید:
سبک و پایدار وسریع deploy شود وروی سیستمهای مختلف کار کند وcrash نکند
نوشتن یک TLS stack کاملاً سفارشی:
اندازه فایل implant را افزایش میدهد وcrash risk را بالا میبرد وناسازگاری OS ایجاد میکند وکد را پیچیدهتر و تحلیلپذیرتر میکند وfootprint رفتار را زیاد میکند وcost of maintenance را بهشدت بالا میبرد
در مقابل:
۹۹٪ سازمانها اصلاً JA3 را لاگ نمیکنند!
پس مهاجم واقعاً برای چه چیزی باید این همه هزینه بدهد؟
APT تصمیم میگیرد:
«نیازی نیست مرورگر را تقلید کنیم. JA3 غیرعادی کافی است چون بیشتر شبکهها نمیبینند.»
این گزاره تلخ ولی واقعیت است.
۶) جعل JA3 یک حمله “High Risk – Low Reward” برای مهاجم است
اگر مهاجم:
یک اشتباه کوچک کند ونسخه اشتباه Chrome را تقلید کند والگوی غیرواقعی بسازد
تحلیلگر فوراً متوجه میشود.
اما اگر هیچی جعل نکند، فقط یک JA3 ساده ولی عادی WinHTTP میبیند، و در ۹۰٪ شبکهها unnoticed باقی میماند. پس چرا باید ریسک کند؟
۷) در نهایت: خود Zeek کار را برای مهاجم سختتر میکند
Zeek فقط JA3 را نگاه نمیکند؛ بلکه:
رفتار زمانبندی
نقش سرور/کلاینت
الگوی تکرار
تعداد bytes in/out
تعداد connection attempts
پایداری session
و حتی TLS version preference
را هم بررسی میکند.
پس حتی اگر مهاجم JA3 را کامل جعل کند، هنوز باید رفتار مرورگر را هم تقلید کند.
و تقلید رفتار مرورگر در سطح شبکه تقریباً غیرممکن است مگر با embed کردن یک مرورگر واقعی—که خود این بسیاری از EDRها را فعال میکند.
JA3 یکی از کارآمدترین ابزارهای تشخیص رفتارهای مخرب در شبکههای رمزگذاریشده است، زیرا:
قابل جعل ساده نیست
به ساختار پروتکل وابسته است
نسخه به نسخه تفاوت دارد
معمولاً توسط implantها تقلید نمیشود
و Zeek آن را در کنار سایر متادیتاها استفاده میکند
Zeek با ترکیب JA3/JA3S + conn.log + weird.log + x509.log میتواند بسیاری از C2های Slow & Low مربوط به APTها را شناسایی کند، حتی زمانی که هیچ امضای شناختهشدهای وجود ندارد.
مهمترین بخش اما این است:
هکرها معمولاً نمیتوانند یا نمیخواهند JA3 مرورگرها را جعل کنند، چون برای این کار باید یک TLS Stack کامل با قابلیتهای مرورگر واقعی بسازند—و این کار هزینه، ریسک و پیچیدگی بسیار زیادی دارد.
در نتیجه JA3 همچنان یکی از بزرگترین نقاط ضعف implantهای APT و یکی از قویترین سلاحهای دفاع سایبری باقی مانده است.
با ورود JA4، رویکرد اثرانگشتگذاری شبکه یک جهش جدی پیدا کرده است.
JA4 برخلاف JA3 فقط روی TLS متمرکز نیست، بلکه مجموعهای از چهار fingerprint مکمل را پوشش میدهد: اثرانگشت TLS (JA4)، ساختار HTTP (JA4H)، ویژگیهای TCP Stack (JA4S) و مدل ترکیبی لایهبهلایه (JA4L). این یعنی مهاجم برای فرار باید نهتنها ClientHello را تقلید کند، بلکه رفتار HTTP، تنظیمات TCP و حتی الگوهای زمانی ارتباط را بازسازی کند—چیزی که برای بیشتر بدافزارها عملاً غیرممکن است.
اما این پیشرفت به معنی «مرگ JA3» نیست. JA3 همچنان یک شاخص بسیار کارآمد و سبک برای شناسایی ترافیک غیرعادی است، خصوصاً در سازمانهایی که منابع پردازشی یا ابزارهای تحلیلی محدود دارند. JA3 سریع تولید میشود، در تمام پلتفرمها پشتیبانی میشود، و هزاران IoC عملیاتی در جهان بر پایه آن ساخته شدهاند. حتی در محیطهایی که JA4 در حال استقرار است، JA3 معمولاً اولین لایهٔ غربالگری (Initial Triage) محسوب میشود.
به بیان دقیقتر: JA4 آیندهٔ تحلیل ترافیک رمزگذاریشده است، اما JA3 هنوز ستون اصلی Threat Hunting روزمره باقی مانده. این دو مکمل یکدیگرند، نه جایگزین.