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 মোবাইল অ্যাপ্লিকেশন নিরাপত্তা উল্লেখযোগ্যভাবে বাড়ায় কিন্তু উন্নয়ন দলের উপর কার্যক্ষম বোঝা চাপায়। ভুল বাস্তবায়নের কারণে নিরাপত্তা সুবিধা এবং সংযোগ অবরোধের ঝুঁকির মধ্যে ভারসাম্য রাখা গুরুত্বপূর্ণ।
প্রধান সুবিধা হল Man-in-the-Middle আক্রমণ থেকে সুরক্ষা, যার মধ্যে CA আপসের ঘটনা অন্তর্ভুক্ত। Pinning আক্রমণকারীর দ্বারা জারি করা জাল সার্টিফিকেটকে অকেজো করে দেয়: এমনকি যদি কোনো CA একটি জালিয়াতি স্বাক্ষর করে, অ্যাপ্লিকেশন তা প্রত্যাখ্যান করবে। একটি অতিরিক্ত সুবিধা হল কর্পোরেট প্রক্সি সার্ভার থেকে সুরক্ষা যা ট্রাফিক পরিদর্শনের জন্য সার্টিফিকেট প্রতিস্থাপন করে। Google Security Blog (2023) অনুসারে, pinning-যুক্ত অ্যাপ্লিকেশনগুলিতে শুধুমাত্র মানক TLS যাচাইকরণ ব্যবহারকারী অ্যাপ্লিকেশনের তুলনায় ট্রাফিক আটকানোর মাধ্যমে আপস হওয়ার 86% কম সম্ভাবনা থাকে।
Pinning-এর প্রধান অসুবিধা হল স্ব-অবরোধের ঝুঁকি: অ্যাপ্লিকেশন আপডেট প্রকাশের আগে যদি সার্ভার সার্টিফিকেট পরিবর্তিত হয় (নবায়ন, প্রদানকারী পরিবর্তন, কী রোটেশন), ব্যবহারকারীরা সার্ভারে অ্যাক্সেস হারান। অতিরিক্ত ত্রুটিগুলি: ডিবাগিং জটিলতা (প্রতি কনফিগারেশন পরিবর্তনে পিন আপডেটের প্রয়োজন), TrustKit ব্যবহারে APK আকার 5–15 KB বৃদ্ধি, এবং নতুন রিলিজ ছাড়া দ্রুত পরিবর্তন ফিরিয়ে নেওয়ার অক্ষমতা। ঝুঁকি কমানোর জন্য, ব্যাকআপ পিন, প্রতি 2–3 মাসে স্বয়ংক্রিয় রোটেশন এবং একটি অনুগ্রহকাল ব্যবহার করা হয়, যার মধ্যে অ্যাপ্লিকেশন পুরানো এবং নতুন উভয় সার্টিফিকেট গ্রহণ করে। এটি বিবেচনায় নেওয়াও গুরুত্বপূর্ণ যে pinning সক্রিয় সহ উন্নয়নের সময়, নেটওয়ার্ক অনুরোধ ডিবাগ করার জন্য প্রক্সি টুল (Burp Suite, Charles) ব্যবহার করা যায় না — ডেভ বিল্ডের জন্য, BuildConfig.DEBUG ফ্ল্যাগের মাধ্যমে pinning নিষ্ক্রিয় করতে হবে, এবং 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন