Certificate Pinning ایک حفاظتی تکنیک ہے جس میں موبائل ایپلیکیشن تصدیق کرتی ہے کہ سرور کا سرٹیفکیٹ پہلے سے معلوم نمونے سے مطابقت رکھتا ہے، نہ کہ CA چین کے کسی بھی سرٹیفکیٹ پر بھروسہ کرے۔ عام TLS تصدیق کے برعکس، جو سینکڑوں سرٹیفکیٹ اتھارٹیز پر انحصار کرتی ہے، pinning اعتماد کو ایک مخصوص سرٹیفکیٹ یا اس کی عوامی کلید تک محدود کر دیتا ہے۔ OWASP موبائل سیکیورٹی ٹیسٹنگ گائیڈ (2024) کے مطابق، Certificate Pinning کو نافذ کرنے سے سرٹیفکیٹ کی تبدیلی سے متعلق 100% Man-in-the-Middle حملے کے منظرنامے مسدود ہو جاتے ہیں۔ OWASP MSTG, 2024
اہم نکات
Certificate Pinning ایک حفاظتی طریقہ کار ہے جس میں ایپلیکیشن سرور کے سرٹیفکیٹ کا ایک نمونہ محفوظ (یا “پن”) کرتی ہے اور ہر کنکشن پر موصولہ سرٹیفکیٹ کا اس نمونے سے موازنہ کرتی ہے۔ اگر سرٹیفکیٹ مطابقت نہیں رکھتا — تو کنکشن ختم کر دیا جاتا ہے، چاہے وہ کسی قابل اعتماد سرٹیفکیٹ اتھارٹی کے ذریعے سرکاری طور پر دستخط شدہ ہو۔ یہ ان حملوں سے بچاتا ہے جن میں حملہ آور کسی سمجھوتہ شدہ CA کے ذریعے جعلی سرٹیفکیٹ حاصل کرتا ہے (جیسا کہ 2011 میں DigiNotar یا 2011 میں Comodo کے ساتھ ہوا تھا)۔
Pinning کا عمل تین مراحل پر مشتمل ہے: قابل اعتماد مثال سے سرٹیفکیٹ یا عوامی کلید کا فنگر پرنٹ نکالنا؛ اس فنگر پرنٹ کو ایپلیکیشن کوڈ یا وسائل میں محفوظ کرنا؛ TLS مصافحہ کے دوران موازنہ کرنا۔ ڈویلپر پورے سرٹیفکیٹ کا SHA-256 فنگر پرنٹ یا صرف عوامی کلید (Public Key Pinning) پن کر سکتا ہے۔ دوسرا طریقہ ترجیحی ہے: سرٹیفکیٹ کی تجدید پر، عوامی کلید اکثر وہی رہتی ہے اور ایپ سرور سے کنکشن نہیں کھوتی۔ OWASP کی سفارشات کے مطابق، کم از کم پنوں کی تعداد 2 ہے: ایک موجودہ اور ایک بیک اپ کلید کی گردش کے لیے۔ OkHttp اور TrustKit جیسی جدید لائبریریاں ڈویلپر کی اضافی کوشش کے بغیر ہر TLS کنکشن کے دوران مخصوص پنوں کی تصدیق کے عمل کو خودکار کرتی ہیں۔ یہ سمجھنا ضروری ہے کہ pinning معیاری TLS تصدیق کو تبدیل نہیں کرتا، بلکہ اس کی تکمیل کرتا ہے: پہلے سرٹیفکیٹ چین کی توثیق کے ساتھ ایک عام مصافحہ کیا جاتا ہے، پھر ایک اضافی pinning جانچ کی جاتی ہے۔ یہ دو سطحی تحفظ CA سے سمجھوتہ سے متعلق کمزوریوں کو ختم کرتا ہے، بشمول غلط سرٹیفکیٹ جاری کرنے اور سرٹیفکیٹ اتھارٹی کے بنیادی ڈھانچے پر حملے۔
Certificate Pinning کو نافذ کرنے کے کئی طریقے ہیں، ہر ایک اپنی مخصوص اسٹوریج اور تصدیق کی خصوصیات کے ساتھ۔ طریقہ کا انتخاب ایپلیکیشن کے فن تعمیر، سرٹیفکیٹ اپ ڈیٹ کی تعدد اور لچک کی ضروریات پر منحصر ہے۔
| Pinning کی قسم | کیا محفوظ کیا جاتا ہے | لچک | استعمال کی مثال |
|---|---|---|---|
| Certificate Pinning | مکمل X.509 سرٹیفکیٹ | کم | 1–2 سال کے لیے مقررہ سرٹیفکیٹ |
| Public Key Pinning | عوامی کلید (SPKI) | درمیانی | OWASP تجویز کردہ طریقہ |
| Hash Pinning | SHA-256 فنگر پرنٹ | درمیانی | OkHttp میں مقبول (certificatePinner) |
| CA Pinning | درمیانی CA | اعلیٰ | کاروباری ایپلیکیشنز |
سب سے متوازن طریقہ Public Key Pinning ہے، جو OWASP اور Google کے ذریعہ تجویز کردہ ہے۔ ایک مخصوص سرٹیفکیٹ (جو ہر 1–2 سال میں تبدیل ہوتا ہے) کے بجائے، ایپلیکیشن SubjectPublicKeyInfo فنگر پرنٹ — عوامی کلید کا ایک تجرید — محفوظ کرتی ہے۔ اگر سرٹیفکیٹ اسی کلید کے ساتھ تجدید ہوتا ہے (کلید کا دوبارہ استعمال)، تو پن درست رہتا ہے۔ اگر کلید تبدیل ہوتی ہے — تو ڈویلپر پہلے سے ایپلیکیشن اپ ڈیٹ میں ایک بیک اپ پن شامل کرتا ہے۔ موبائل پروجیکٹس میں کم از کم/زیادہ سے زیادہ پن کی حکمت عملی استعمال کی جاتی ہے: بیک اپ سمیت کم از کم 2 پن، اور زیادہ سے زیادہ 4 پن بڑھنے اور تصدیق کے وقت میں اضافے کو روکنے کے لیے۔
مخصوص pinning قسم کا انتخاب ایپلیکیشن کے فن تعمیر اور ضروریات پر منحصر ہے۔ ایک ڈومین کے ذریعے REST API کے ساتھ کام کرنے والی عوامی موبائل ایپلیکیشنز کے لیے، OkHttp یا TrustKit کے ذریعے دو پنوں کے ساتھ Public Key Pinning بہترین ہے۔ اپنی سرٹیفکیٹ اتھارٹی والی کاروباری ایپلیکیشنز کے لیے، CA Pinning موزوں ہے — اسے کلائنٹ سرٹیفکیٹ تبدیل ہونے پر اپ ڈیٹ کی ضرورت نہیں ہوتی، کیونکہ اعتماد حتمی سرٹیفکیٹ سے نہیں بلکہ CA سے بندھا ہوتا ہے۔ IoT اور ایمبیڈڈ سسٹمز کے لیے، مکمل سرٹیفکیٹ پننگ کے ساتھ Certificate Pinning تجویز کی جاتی ہے: آلات شاذ و نادر ہی اپ ڈیٹ ہوتے ہیں، لہٰذا اعتماد کی پوری زنجیر پر کنٹرول ضروری ہے۔ پنوں کی میعاد ختم ہونے کی تاریخوں کی نگرانی ایک لازمی عمل ہے: موجودہ سرٹیفکیٹ کے نااہل ہونے سے پہلے نئے پنوں کے ساتھ ایپلیکیشن اپ ڈیٹ جاری کرنے کے لیے سرٹیفکیٹ کی میعاد ختم ہونے سے 30، 14 اور 7 دن پہلے الرٹ ترتیب دیں۔ نئے پنوں کے ساتھ اپ ڈیٹس جاری کرنے کو خودکار بنانے کے لیے، Firebase Remote Config یا ایک حسب ضرورت کنفیگریشن API استعمال کرنے کی سفارش کی جاتی ہے جو ایپ اسٹور میں نیا ورژن شائع کیے بغیر پنوں کی فہرست کو متحرک طور پر اپ ڈیٹ کرنے کی اجازت دیتا ہے۔
Certificate Pinning موبائل ایپلیکیشن کی حفاظت کو نمایاں طور پر بڑھاتا ہے لیکن ترقیاتی ٹیم پر آپریشنل بوجھ ڈالتا ہے۔ غلط نفاذ کی وجہ سے کنکشن بلاک ہونے کے خطرات کے مقابلے حفاظتی فوائد کو تولنا ضروری ہے۔
بنیادی فائدہ CA سے سمجھوتہ کے معاملات سمیت Man-in-the-Middle حملوں سے تحفظ ہے۔ Pinning حملہ آور کی طرف سے جاری کردہ جعلی سرٹیفکیٹ کو بیکار بنا دیتا ہے: چاہے کسی CA نے جعلسازی پر دستخط کیا ہو، ایپلیکیشن اسے مسترد کر دے گی۔ ایک اضافی فائدہ کارپوریٹ پراکسی سرورز سے تحفظ ہے جو ٹریفک معائنہ کے لیے سرٹیفکیٹ تبدیل کرتے ہیں۔ Google Security Blog (2023) کے مطابق، pinning والی ایپلیکیشنز میں صرف معیاری TLS تصدیق استعمال کرنے والی ایپلیکیشنز کے مقابلے ٹریفک کی روک تھام کے ذریعے سمجھوتہ ہونے کے امکانات 86% کم ہوتے ہیں۔
Pinning کا بنیادی نقصان خود بلاک ہونے کا خطرہ ہے: اگر ایپلیکیشن اپ ڈیٹ جاری ہونے سے پہلے سرور سرٹیفکیٹ تبدیل ہو جائے (تجدید، فراہم کنندہ کی تبدیلی، کلید کی گردش)، تو صارفین سرور تک رسائی کھو دیتے ہیں۔ اضافی نقصانات: ڈیبگنگ کی پیچیدگی (ہر ترتیب تبدیلی پر پن اپ ڈیٹ کی ضرورت)، TrustKit استعمال کرتے وقت APK سائز میں 5–15 KB کا اضافہ، اور نئی ریلیز کے بغیر تبدیلیوں کو جلدی واپس لینے میں ناکامی۔ خطرات کو کم کرنے کے لیے، بیک اپ پن، ہر 2–3 ماہ میں خودکار گردش، اور ایک رعایتی مدت استعمال کی جاتی ہے، جس کے دوران ایپلیکیشن پرانے اور نئے دونوں سرٹیفکیٹ قبول کرتی ہے۔ یہ بھی غور کرنا ضروری ہے کہ pinning فعال ہونے کے ساتھ ترقی کے دوران، نیٹ ورک کی درخواستوں کو ڈیبگ کرنے کے لیے پراکسی ٹولز (Burp Suite, Charles) استعمال نہیں کیے جا سکتے — ڈیو بلڈز کے لیے، pinning کو BuildConfig.DEBUG پرچم کے ذریعے غیر فعال کیا جانا چاہیے، اور QA ٹیسٹنگ تحفظ فعال ہونے کے ساتھ ریلیز دستخط پر کی جانی چاہیے۔ کچھ ٹیمیں ترقی کے دوران بھی تحفظ برقرار رکھنے کے لیے ڈیو ماحول کے لیے علیحدہ pinning سرٹیفکیٹ کے ساتھ اسٹیجنگ ڈومین استعمال کرتی ہیں۔
آئیے OkHttp — نیٹ ورک کی درخواستوں کے لیے معیاری لائبریری — کا استعمال کرتے ہوئے Android پر Certificate Pinning کے نفاذ کی ایک مثال دیکھتے ہیں۔ OkHttp ایک بلٹ ان CertificatePinner فراہم کرتا ہے جو عوامی کلیدوں کے SHA-256 ہیشز قبول کرتا ہے۔
val certificatePinner = CertificatePinner.Builder()
.add(
"api.example.com",
"sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
)
.add(
"api.example.com",
"sha256/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB="
)
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
اوپر والے کوڈ میں، ہم ڈومین api.example.com کے لیے دو پن شامل کرتے ہیں: بنیادی (موجودہ سرٹیفکیٹ) اور ایک بیک اپ پن (گردش کے لیے)۔ OkHttp خود بخود تصدیق کرتا ہے کہ سرور کا سرٹیفکیٹ مخصوص کردہ SHA-256 فنگر پرنٹس میں سے ایک سے مطابقت رکھتا ہے۔ سرٹیفکیٹ کا SHA-256 فنگر پرنٹ حاصل کرنے کے لیے، کمانڈ استعمال کریں: openssl s_client -connect api.example.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64۔ فنگر پرنٹس کو کوڈ میں سادہ متن کے طور پر نہیں، بلکہ خفیہ یا مبہم کر کے محفوظ کرنا ضروری ہے: MobSF جامد تجزیہ DEX فائلوں میں خام SHA-256 سٹرنگز کو آسانی سے ڈھونڈ لیتا ہے۔ پنوں کو res/raw وسائل میں AES کے ذریعے خفیہ کر کے محفوظ کرنے اور مقامی کوڈ (NDK/JNI) کے ذریعے ایپلیکیشن اسٹارٹ اپ پر ڈیکرپٹ کرنے کی سفارش کی جاتی ہے۔
iOS پر، Certificate Pinning کا بنیادی ٹول اوپن سورس TrustKit لائبریری ہے۔ OkHttp کے برعکس، TrustKit Info.plist کے ذریعے اعلانیہ طور پر ترتیب دیا جاتا ہے، جو ایپلیکیشن کو دوبارہ مرتب کیے بغیر پن تبدیل کرنے کی اجازت دیتا ہے۔ ترتیب میں ڈومینز کے ساتھ ایک لغت اور SHA-256 عوامی کلید فنگر پرنٹس کی ایک صف شامل ہے۔ TrustKit خود بخود NSURLSession کی درخواستوں کو روکتا ہے اور ڈیٹا کی منتقلی شروع ہونے سے پہلے سرٹیفکیٹ کی تصدیق کرتا ہے۔ TrustKit کی ایک اہم خصوصیت پن کی توثیق کی رپورٹس کے لیے معاونت ہے: لائبریری پن کی عدم مطابقت پر ایک مخصوص اینڈپوائنٹ پر رپورٹس بھیج سکتی ہے، جس سے سرٹیفکیٹ کی بے ضابطگیوں پر فوری ردعمل ممکن ہوتا ہے۔ Apple iOS 14 سے Info.plist میں ایک مقامی NSPinnedDomains میکانزم بھی فراہم کرتا ہے، لیکن TrustKit زیادہ لچکدار ترتیب، رپورٹس کی معاونت اور OS اپ ڈیٹس کے بغیر پنوں کو ہاٹ سویپ کرنے کی صلاحیت کی وجہ سے ترجیحی انتخاب ہے۔ یہ نوٹ کرنا ضروری ہے کہ TrustKit didReceiveChallenge ڈیلیگیٹ کے ذریعے URLSession کے ساتھ مربوط ہوتا ہے، کامیاب پن تصدیق پر .performDefaultHandling اور عدم مطابقت پر .cancelAuthenticationChallenge واپس کرتا ہے۔ پن کی توثیق کی رپورٹس کی نگرانی کے لیے، ایک علیحدہ اینڈپوائنٹ ترتیب دینے کی سفارش کی جاتی ہے جو خرابی کی تعدد کا تجزیہ کرتا ہے: اگر رپورٹس کی تعداد تیزی سے بڑھ جائے — تو یہ MitM حملے یا سرٹیفکیٹ کی قریب آتی میعاد ختم ہونے کی نشاندہی کر سکتا ہے جس کے لیے فوری پن اپ ڈیٹ کی ضرورت ہے۔
اکثر پوچھے گئے سوالات
Certificate Pinning آپ کے فون میں کسی دوست کا فنگر پرنٹ محفوظ کرنے جیسا ہے: آپ کو یاد رہتا ہے کہ “صحیح” سرور سرٹیفکیٹ کیسا لگتا ہے، اور آپ کسی اور پر بھروسہ نہیں کرتے، چاہے کوئی “سرکاری” اتھارٹی سے شناخت پیش کرے۔
عام HTTPS سینکڑوں اتھارٹیز میں سے کسی بھی CA کے دستخط کردہ کسی بھی سرٹیفکیٹ پر بھروسہ کرتا ہے۔ Certificate Pinning اوپر ایک جانچ شامل کرتا ہے: سرٹیفکیٹ نہ صرف درست ہونا چاہیے، بلکہ خاص طور پر وہ ہونا چاہیے جسے آپ نے ایپلیکیشن کوڈ میں ہارڈ کوڈ کیا ہے۔
2–3 پن محفوظ کرنے کی سفارش کی جاتی ہے: موجودہ پن اور نئے سرٹیفکیٹ کے لیے ایک بیک اپ پن۔ سرٹیفکیٹ تبدیل ہونے سے 1–2 مہینے پہلے، مستقبل کے سرٹیفکیٹ کا پن شامل کر کے ایپلیکیشن کا نیا ورژن جاری کریں۔ تبدیلی کے بعد، پرانا پن اگلی ریلیز میں ہٹا دیا جاتا ہے۔
ہاں، کیا جا سکتا ہے۔ Pinning کسی بھی سرٹیفکیٹ کے ساتھ کام کرتا ہے، بشمول Let’s Encrypt۔ یہ یاد رکھنا ضروری ہے کہ مفت سرٹیفکیٹ کی میعاد مختصر (3 ماہ) ہوتی ہے، لہٰذا بیک اپ پن کی حکمت عملی اور خودکار گردش لازمی ہو جاتی ہے۔
Pinning کی جانچ کے لیے Burp Suite یا mitmproxy استعمال کریں۔ اگر pinning والی ایپلیکیشن درست طریقے سے ترتیب دی گئی ہے، تو پراکسی ٹول ٹریفک کو روک نہیں سکے گا — کنکشن مصافحہ کے مرحلے پر ختم ہو جائے گا۔ انٹیگریشن ٹیسٹ کے لیے، OkHttp کا MockWebServer استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں