In this Article
سکیورٹی کے نئے چیلنجز اینٹی بوٹ اقدامات کے ارتقا کا باعث بنتے ہیں، اور بعض اوقات مکمل طور پر جائز اسکریپرز بھی اس کی زد میں آ جاتے ہیں۔ ایسی ہی ایک تکنیک TLS فنگرپرنٹنگ ہے، جو سرور سے منسلک ہونے کی کوشش کرنے والے ڈیوائس کی شناخت کا ایک چالاک، ابھی تک زیادہ معروف نہ ہونے والا، اور خاصا مؤثر طریقہ ہے۔ اسے بائی پاس کرنا آسان کیوں نہیں، اور مطلوبہ ڈیٹا کامیابی سے اسکریپ کرنے کے لیے کیا کرنا چاہیے، یہ مضمون تمام پہلو کھول کر بیان کرتا ہے۔
TLS آخر ہے کیا؟
TLS فنگرپرنٹنگ کو سمجھنے کے لیے، آئیے پہلے خود TLS کو دیکھتے ہیں۔ TLS یا ٹرانسپورٹ لیئر سکیورٹی (پہلے SSL، یعنی Secure Sockets Layer) ایک پروٹوکول ہے جو معیاری HTTP کنکشن پر چلتا ہے اور آپ کی آن لائن سرگرمیوں کو محفوظ بناتا ہے۔ جب آپ کو URL کے قریب تالے کی علامت نظر آئے یا کسی ویب سائٹ کا پتا https سے شروع ہو، تو اس کا مطلب ہے کہ TLS فعال ہے۔ درحقیقت اب ایسی ویب سائٹ ملنا مشکل ہے جو TLS استعمال نہ کرتی ہو۔ اگر آپ کسی ایسی ویب سائٹ پر جانے کی کوشش کریں جو صرف “http” سے شروع ہوتی ہو (بغیر “s” کے)، تو آپ کا براؤزر آپ کو ویب صفحے پر بھیجنے کے بجائے غیر محفوظ کنکشن کی تنبیہ دے گا۔
TLS آپ کا ڈیٹا ہدفی سرور کو بھیجنے سے پہلے انکرپٹ کرتا ہے، یعنی اسے بے ترتیب علامات کی تاروں میں بدل دیتا ہے، مثلاً 9823h4brjhvbi، تاکہ اگر نقصان دہ عناصر آپ کی معلومات روک بھی لیں تو انہیں استعمال نہ کر سکیں۔ تاہم، آپ کا ڈیٹا بھیجنے سے پہلے TLS کو یقینی بنانا ہوتا ہے کہ معلومات درست سرور کو بھیجی جا رہی ہیں، اور پھر اس سرور کو انہیں ڈی کرپٹ کرنا ہوتا ہے۔ اسی لیے ڈیٹا بھیجنے سے پہلے TLS پہلے کنکشن قائم کرتا ہے، ہدفی سرور کی تصدیق کے لیے اس کے ساتھ پیغامات کا ایک سلسلہ تبادلہ کرتا ہے، انکرپشن کے طریقے پر اتفاق کرتا ہے، اور مشترکہ سیشن کیز بناتا ہے جو رابطے کے دوران ڈیٹا کی حفاظت اور ڈی کرپشن میں مدد دیتی ہیں۔
اس پورے عمل کو TLS ہینڈشیک کہا جاتا ہے، جس کا آغاز “ClientHello” پیغام سے ہوتا ہے۔ TLS فنگرپرنٹنگ کے تناظر میں یہی پیغام ہماری دلچسپی کا مرکز ہے، کیونکہ یہی اس ڈیٹا کا ماخذ ہے جسے سرور بعد میں آپ کی شناخت کے لیے استعمال کرتے ہیں۔
“ClientHello” پیغام کن اجزا پر مشتمل ہوتا ہے
چونکہ “ClientHello” پیغام میں حساس ڈیٹا، مثلاً اسناد، شامل نہیں ہوتیں اور اسے غیر انکرپٹڈ شکل میں منتقل کیا جاتا ہے، اس لیے آپ اسے آسانی سے کیپچر کر کے Wireshark جیسے نیٹ ورک تجزیاتی ٹولز سے اس کا مواد دیکھ سکتے ہیں۔ اس میں بہت سا ڈیٹا ہوتا ہے۔
- TLS ورژن، یعنی سب سے اعلیٰ ورژن جسے کلائنٹ سپورٹ کرتا ہے۔
- Random، کلائنٹ کی جانب سے بے ترتیب نمبر۔
- Session ID، اسے دوبارہ شروع کیے گئے سیشنز کے لیے استعمال کیا جاتا ہے، اس لیے پہلے ہینڈشیک میں یہ خالی ہوتی ہے۔
- Cipher suites، کلائنٹ کے سپورٹ کردہ انکرپشن الگورتھمز۔ انہیں ترجیح کی ترتیب میں درج کیا جاتا ہے۔
- Compression method، آج یہ تقریباً ہمیشہ 0 ہوتا ہے۔
- Supported extensions، اضافی خصوصیات جنہیں کلائنٹ استعمال کرنا چاہ سکتا ہے، مثلاً:
- Server Name Indication (SNI)، یہ اس ہوسٹ نیم کی وضاحت کرتا ہے جس کی درخواست کلائنٹ کر رہا ہے۔
- Application-Layer Protocol Negotiation (ALPN) پروٹوکول، یہ طے کرنے کی ایک ایکسٹینشن ہے کہ TLS کے ذریعے کون سا پروٹوکول ہینڈل کیا جائے۔ یہ اس لیے مؤثر ہے کہ یہ ایپلیکیشن لیئر سے آزاد ہے۔ عموماً ویب سرورز کے لیے TLS ایکسٹینشنز HTTP/1.1 یا HTTP/2 ہوتی ہیں۔
- TLS لائبریریز، ان لائبریریز کی رینج جو کلائنٹ استعمال کرتا ہے، کیونکہ مختلف کلائنٹس مختلف لائبریریز استعمال کرتے ہیں۔
- Signature algorithms، سرور کی شناخت کی توثیق کے لیے سپورٹ کردہ الگورتھمز کی فہرست۔
- Elliptic curves، چونکہ انکرپٹڈ رابطہ محدود فیلڈز میں منحنی مساوات استعمال کرتا ہے، یہ حصہ بتاتا ہے کہ کون سا منحنی استعمال کرنا ہے۔
- Elliptic curve point formats، یہ بتاتے ہیں کہ پوائنٹس کو کیسے انکوڈ کیا جاتا ہے۔
دیگر ایکسٹینشنز بھی ہوتی ہیں۔ ان سب کے ذریعے ویب سائٹ “ClientHello” پیغام سے آپ کے بارے میں قابلِ ذکر مقدار میں ڈیٹا اخذ کر سکتی ہے، جس میں سافٹ ویئر اسٹیک، مثلاً براؤزر فیملی، ڈیوائس کی قسم اور سکیورٹی کی کیفیت، وغیرہ شامل ہیں۔
JA3 فنگرپرنٹنگ طریقہ
ٹھیک ہے، ایک سرور کو “ClientHello” پیغام موصول ہوا۔ اب کیا؟ یہاں JA3 تکنیک کام آتی ہے۔ Salesforce اسے منظم کرتا ہے، اور یہ سب سے مقبول فنگرپرنٹنگ حل ہے۔ یہ پیغام کے پانچ اہم اجزا پر توجہ دیتی ہے: TLS ورژن، cipher suites، ایکسٹینشن IDs، سپورٹ کردہ گروپس (elliptic curves)، اور elliptic curve point formats۔ ہر حصے کو اعشاری فارمیٹ میں تبدیل کر کے کاماز اور ہائفنز کے ساتھ جوڑا جاتا ہے۔ تاہم اصل فنگرپرنٹ ڈیٹا ایک طویل اسٹرنگ ہوتا ہے، اس لیے سہولت کے لیے MD5، جو ایک کرپٹوگرافک ہیش فنکشن ہے، استعمال ہوتا ہے۔ یہ ایک مقررہ 128-bit ہیش بناتا ہے۔ پھر براؤزر نتیجے کا موازنہ دیگر ممکنہ فنگرپرنٹس سے کرتا ہے، جو اکثر اندرونی ڈیٹابیس سے ہوتے ہیں۔ البتہ بعض اوقات عوامی ڈیٹابیس بھی استعمال ہوتے ہیں۔
مقصد فرق کو پہچاننا ہے، کیا یہ کلائنٹ ایک عام ویب براؤزر معلوم ہوتا ہے یا اس میں کوئی مشتبہ بات ہے؟ مسئلہ یہ ہے کہ Chrome جیسے عام ویب براؤزر، یا ویب اسکریپنگ کے لیے استعمال ہونے والی پروگرامنگ لائبریری، کے بنائے ہوئے ہیشز مختلف ہوں گے کیونکہ ان کے متعلقہ ClientHello پیغامات جدا ہوں گے۔ چونکہ JA3 الگورتھمز صرف چند متغیرات کو مدنظر رکھتے ہیں، اس لیے منفرد فنگرپرنٹ کے بہت سے اختیارات نہیں ہوتے، اور یوں عام صارف اور اسکریپنگ بوٹ میں فرق کرنا نسبتاً آسان ہے۔
اس سے ثابت ہوتا ہے کہ TLS فنگرپرنٹنگ اسکریپرز کو روکنے میں مؤثر ہے اور ویب اسکریپنگ پر انحصار کرنے والوں کے لیے ایک سنجیدہ مشکل پیدا کرتی ہے۔
اینٹی ویب اسکریپنگ ڈیٹابیس موجود ہیں جو JA3 فنگرپرنٹنگ کے امکانات جمع کرتی ہیں۔ ہموار رسائی یقینی بنانے کے لیے آپ اپنا فنگرپرنٹ حساب کر کے جانچ سکتے ہیں کہ آیا وہ وائٹ لسٹ میں ہے۔
البتہ صرف JA3 فنگرپرنٹس ہی منسلک ہونے والے کلائنٹ کے اسکریپر ہونے کی حقیقت ظاہر نہیں کر سکتے۔ خود ClientHello پیغام میں اقدار کا فرق بھی اینٹی بوٹ سسٹمز کو متحرک کر سکتا ہے۔ مثال کے طور پر:
- SNI کی عدم موجودگی خطرے کی علامت ہو سکتی ہے، کیونکہ عموماً کسی درخواست میں اس کی توقع کی جاتی ہے۔
- پرانے ALPN درخواستوں کو مشتبہ سرگرمی کی علامت سمجھا جا سکتا ہے، کیونکہ جدید براؤزرز عموماً HTTP/2 سپورٹ کرتے ہیں۔
- Chrome جیسے براؤزرز کے سپورٹ کردہ elliptic curves اور پروگرامنگ اسکرپٹس کے سپورٹ کردہ curves مختلف ہوتے ہیں، جو شکوک پیدا کر سکتے ہیں۔
- Cipher Suites کی فہرست ترجیح کے لحاظ سے ترتیب دی جاتی ہے اور ترتیب سمیت عام ویب براؤزرز کی فہرست سے ملنی چاہیے۔ یہی بات Extensions پر بھی لاگو ہوتی ہے۔
TLS فنگرپرنٹنگ سے مطابقت کے طریقے
TLS فنگرپرنٹنگ کے معاملے میں آپ کا مقصد اپنے اسکریپر کو عام ویب براؤزر کے فنگرپرنٹس سے ملانا ہے۔ یہ آسان کام نہیں، مگر چند طریقے ہیں جو آپ آزما سکتے ہیں۔ آپ ان میں سے بعض کو یکجا بھی کرنا چاہیں گے۔
- استعمال کریں ہیڈ لیس براؤزرز
جب آپ Puppeteer، Playwright، یا Selenium جیسے اعلیٰ معیار کے براؤزرز استعمال کرتے ہیں، تو آپ دراصل حقیقی براؤزرز استعمال کرتے ہیں اور نتیجتاً مستند فنگرپرنٹس حاصل کرتے ہیں۔ وہ TLS فنگرپرنٹنگ کو تبدیل نہیں کرتے، اس لیے ویب سائٹس یہ متعین نہیں کر سکتیں کہ منسلک ہونے کی کوشش عام براؤزر کر رہا ہے یا ہیڈ لیس براؤزر۔ ایک خامی کم ہوئی۔
- براؤزرز اور آپریٹنگ سسٹم ورژنز کا مجموعہ استعمال کریں
یہ ترکیب کنکشنز کو متعدد فنگرپرنٹس میں تقسیم کرنے میں مدد دیتی ہے، جو بڑے ویب اسکریپنگ پروجیکٹ کی صورت میں مفید ہے۔
- LibCurl پر مبنی HTTP کلائنٹ استعمال کریں
آپ ایسے کلائنٹس کو curl-impersonate استعمال کرنے کے لیے اپ ڈیٹ کر سکتے ہیں۔ یہ libcurl لائبریری کا تبدیل شدہ ورژن ہے، جو TLS فنگرپرنٹس کو پیچ کرتا ہے تاکہ وہ عام ویب براؤزر کے فنگرپرنٹس جیسے دکھائی دیں۔ libcurl کو سپورٹ کرنے والی لائبریریز میں Typhoeus (Ruby)، Guzzle (PHP)، PyCurl (Python)، اور curl default اور crul community لائبریریز (R) شامل ہیں۔
- TLS مضبوط بنانا
اگر آپ Go زبان استعمال کرتے ہیں تو آپ خوش قسمت ہیں، یہ ان زبانوں میں سے ایک ہے جو TLS spoofing کی اجازت دیتی ہیں۔ Refraction Networking کی utls، ja3transport، اور CycleTLS جیسی لائبریریز آپ کو درکار ہیں۔
تاہم اگر آپ Java یا Python استعمال کرتے ہیں تو معاملات اتنے آسان نہیں۔ Java میں آپ enabled cipher suites کی فہرست دوبارہ ترتیب دینے کے لیے sslconfig.enabledCipherSuites method استعمال کر سکتے ہیں۔ Python میں requests اور httpx کے ذریعے آپ زیادہ سے زیادہ Cipher Suite اور TLS ورژن کے متغیرات کنفیگر کر سکتے ہیں۔ ان متغیرات کی spoofing رسائی میں رکاوٹوں کو حل کرنے میں مدد دے سکتی ہے، تاہم آپ کے فنگرپرنٹس پھر بھی واقعی مستند نہیں لگیں گے۔
- دیگر عناصر کو متغیر بنائیں
جب تمام ٹریفک کا TLS فنگرپرنٹ ایک ہی ہو، چاہے وہ اصلی ہی کیوں نہ لگے، تو یہ مشتبہ معلوم ہو سکتا ہے۔ ایسے عناصر کو متغیر بنانے کی کوشش کریں جنہیں متغیر بنایا جا سکتا ہے، مثلاً cookies، user agent، headers، اور IP address۔ اس سے آپ کا ClientHello پیغام معمولی طور پر بدل جائے گا، اور نتیجتاً JA3 فنگرپرنٹس بھی کسی حد تک مختلف ہوں گے۔ ملٹی اکاؤنٹ براؤزرز اور اعلیٰ معیار کی پراکسیز اس میں آپ کی مدد کریں گے۔
آخری بات
آخر میں، TLS فنگرپرنٹنگ کے مطابق کام کرنا ایک چیلنج ہو سکتا ہے، کیونکہ مختلف ویب سائٹس TLS پروٹوکول کو معمولی طور پر اپنے مطابق ڈھالتی ہیں اور رسائی کی اجازت یا انکار کے اپنے معیار اور ڈیٹابیس رکھتی ہیں۔ TLS فنگرپرنٹس کو کامیابی سے spoof کرنے کے لیے ہر ویب سائٹ پر الگ توجہ دیں، اور شناخت کریں کہ اس کے فنگرپرنٹنگ میکانزم کو کیا متحرک کرتا ہے اور وہ معیاری پروٹوکول کو کیسے حسب ضرورت بناتی ہے۔ مزید یہ کہ آج ویب ذرائع JA3 فنگرپرنٹنگ جیسے نیٹ ورک سطح کے اشاروں کو فونٹس اور اسکرین ریزولوشن جیسے ایپلیکیشن سطح کے اشاروں کے ساتھ یکجا کرتے ہیں، اس لیے صرف TLS spoofing پر انحصار کافی نہیں ہوگا، آپ کو یقینی بنانا ہو گا کہ آپ کے اسکریپر کی ہر تفصیل اصلی نظر آئے۔ ہر چیز کا وقتاً فوقتاً جائزہ بھی لیں، ویب سائٹس اپنی پالیسیز اور شناختی اسکیمز بار بار اپ ڈیٹ کرتی ہیں، اور نئے اینٹی بوٹ طریقے سامنے آتے رہتے ہیں، لہٰذا درست ڈیٹا حاصل کرنے کے لیے آپ کو بھی ایسا ہی کرنا ہو گا۔ یقیناً، آپ کو ہمیشہ اجازت یافتہ حدود میں رہنا چاہیے، صرف دستیاب ڈیٹا اسکریپ کرنا چاہیے، ہدفی ویب سائٹس پر غیر ضروری بوجھ ڈالنے سے گریز کرنا چاہیے، اور قابلِ اعتماد ٹولز، مثلاً قانونی طور پر حاصل کی گئی پراکسیز، استعمال کرنے چاہئیں۔ DataImpulse یقینی طور پر آخری حصے میں مدد کر سکتا ہے، “ابھی آزمائیں” بٹن دبائیں یا اگر آپ کے کوئی سوالات ہوں تو [email protected] پر ہم سے رابطہ کریں۔
