আপনি একটি সমর্থন টিকেট খোলেন, ক্লায়েন্ট যে ডায়াগনস্টিক এক্সপোর্ট তৈরি করেছে তা সংযুক্ত করেন এবং অপেক্ষা করেন। ফাইলটিতে সম্ভবত কোনো ব্রাউজিং ইতিহাসই নেই, আর এটাই এটিকে নিরাপদ মনে করায়। তবুও এতে থাকে আপনি কে, কোন মেশিন ব্যবহার করেছেন, কোন অভ্যন্তরীণ ঠিকানায় কখন পৌঁছেছেন, এবং মাঝে মাঝে একটি ব্যক্তিগত কী যা একটি ক্লায়েন্ট তার কনফিগারেশন লগ করে কপি করেছে। পাঠানোর আগে ফাইলটি একবার দেখা প্রায় পাঁচ মিনিট সময় নেয় এবং স্থায়ী একটি প্রকাশ রোধ করে।

এটি খুলুন এবং প্রথম চল্লিশটি লাইন পড়ুন

শুরু করুন উপরে, যেখানে ক্লায়েন্টরা সাধারণত সংস্করণ, প্ল্যাটফর্ম ও কনফিগারেশন ফেলে দেয়। প্রথম লাইনগুলো বলে দেয় ফাইলটি কতটা বিস্তারিত, আর এটাই ঠিক করে বাকি অংশে কতটা মনোযোগ দিতে হবে। ডিফল্ট লগ ও ডিবাগ লগ ভিন্ন ভিন্ন প্রকাশের দুটি ভিন্ন নিদর্শন।

head -n 40 vpn-support.log
sed -n '1,40p' vpn-support.log | grep -nE 'version|platform|config|option'

এর কিছু পড়ার আগেই ফাইলের আকার ও আকৃতিও দেখে নিন। একই ঘটনা পুনরাবৃত্ত হওয়া দুই মেগাবাইটের একটি টেক্সট ফাইল ছাঁটাই করা সহজ। একই ফোল্ডারে একটি বাইনারি ক্যাপচার সম্পূর্ণ ভিন্ন সমস্যা, এবং এক্সপোর্টটি যিনি চেয়েছেন তাঁর সঙ্গে ভিন্ন একটি কথোপকথনের প্রয়োজন।

Windows-এ সমতুল্যগুলো প্রতিটি একটি cmdlet, এবং প্রথমটি আপনার নিজে তৈরি করেননি এমন যেকোনো ফাইলে চালানো উচিত:

Get-Content .\vpn-support.txt -TotalCount 40
Get-Item .\vpn-support.txt | Select-Object Length,LastWriteTime

যে ঘরগুলো একজন ব্যক্তিকে চিহ্নিত করে

ব্যবহারকারীর নাম এমন জায়গায় দেখা যায় যা মানুষ আশা করে না: প্রমাণীকরণে ব্যবহৃত অ্যাকাউন্ট, সার্টিফিকেটের সাবজেক্ট, হোম ডিরেক্টরির অধীনে প্রোফাইল পথ, এবং মেশিনের নাম যা প্রায়ই একটি আসল নাম ধারণ করে। যে লগ অ্যাকাউন্টের ঘরটি সম্পাদনা করে কিন্তু হোম পথটি অক্ষত রাখে, সে কিছুই সম্পাদনা করেনি।

FieldWhat it identifiesPractical treatment
Account or usernameA person, and often an employerReplace consistently, keep the mapping
Certificate subject and CNDevice or user identityKeep the structure, replace the value
Home directory pathA login name, sometimes a full nameReplace the segment, not the whole path
Machine or hostnameA person or a physical locationReplace with a stable pseudonym

সহায়ক ইঞ্জিনিয়ারকে ফাইল জুড়ে একটি সেশন অনুসরণ করতে হলে সম্পূর্ণতার চেয়ে ধারাবাহিকতা বেশি জরুরি। মানগুলো মুছে না ফেলে স্থিতিশীল লেবেল দিয়ে প্রতিস্থাপন করুন, যাতে একই ব্যবহারকারীর প্রতিটি উপস্থিতি এখনও একই ব্যবহারকারী হিসেবে পড়া যায়। ঘরটি সম্পূর্ণ মুছে ফেলা ইঞ্জিনিয়ারের প্রয়োজনীয় সূত্রটি ভেঙে দেয় এবং ফাইলটিকে নিরাপদও করে না।

টাইমস্ট্যাম্পও সমষ্টিগতভাবে ব্যক্তিগত তথ্য। একটি অ্যাকাউন্ট কখন সংযুক্ত হয়েছে, এক মাস জুড়ে নিলে, তা কাজের সময় ও ভ্রমণ বর্ণনা করে। প্রশ্নটির পুরো পরিসর প্রয়োজন না হলে, ঘটনার আশপাশের উইন্ডোতে ফাইলটি ছেঁটে দিন।

যে ঘরগুলো একটি নেটওয়ার্ক চিহ্নিত করে

এন্ডপয়েন্ট ঠিকানা, অভ্যন্তরীণ রুট এবং পুশ করা অপশন একটি ব্যক্তিগত নেটওয়ার্কের আকৃতি বর্ণনা করে। ঠিক এই তথ্যটিই একজন আক্রমণকারী চাইবে, এবং এটি সাধারণত টিকেটের প্রয়োজনের চেয়ে অনেক বেশি বিস্তারিতভাবে উপস্থিত থাকে।

কোন ঠিকানা পরিবার ব্যবহৃত হচ্ছে তা খুঁজুন, শুধু আপনি যা আশা করেছিলেন তা নয়। দ্বৈত-স্ট্যাক ক্লায়েন্ট একটি IPv6 এন্ডপয়েন্ট এবং IPv6 রুটের একটি সেট লগ করতে পারে যা কেউ সম্পাদনা করার কথা ভাবেনি, কারণ পর্যালোচনা শুধু বিন্দুযুক্ত চতুর্ভুজ খুঁজেছিল।

grep -nEo '([0-9]{1,3}\.){3}[0-9]{1,3}' vpn-support.log | sort -u | head -n 40
grep -nEo '([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}' vpn-support.log | sort -u | head -n 20

অনন্য তালিকাটাই মূল বিষয়। এটি বলে দেয় ফাইলটি কতগুলো আলাদা ঠিকানা উল্লেখ করেছে, যা সাধারণত স্ক্রল করার সময় মনে হয় তার চেয়ে অনেক কম। এটি আপনাকে সম্পাদনার জন্য একটি চেকলিস্ট এবং সেগুলো সব কভার করেছেন তা প্রমাণ করার উপায়ও দেয়। দশটি ঠিকানা পাঁচ মিনিটের কাজ, আর একশটি বলে দেয় এক্সপোর্টটি প্রশ্নের চেয়ে প্রশস্ত।

ইঞ্জিনিয়ারের প্রয়োজন হলে টপোলজি রাখুন। সাবনেট সম্পর্ক অক্ষত রেখে দ্বিতীয় ও তৃতীয় অক্টেট প্রতিস্থাপন করলে পরিসর প্রকাশ না করেই প্রশ্নের উত্তর মেলে। একই কৌশল IPv6 প্রিফিক্সের জন্যও কাজ করে। ইঞ্জিনিয়ারের যা প্রয়োজন তা হলো ব্যর্থতার আকৃতি, এবং ধারাবাহিক প্রতিস্থাপনের পরেও আকৃতিটি টিকে থাকে।

গোপন তথ্য লেবেলে নয়, আকারে লুকিয়ে থাকে

ব্যক্তিগত কী-এর আশপাশে “password” শব্দটির দরকার নেই। এটি মার্কার লাইনের মধ্যে একটি ব্লক, একটি দীর্ঘ base64 স্ট্রিং, বা ইনলাইন কনফিগারেশন ডাম্প হিসেবে দেখা যায়। টোকেন কোয়েরি প্যারামিটার হিসেবে দেখা যায়, আর ক্রেডেনশিয়াল দেখা যায় এমন URL-এর ভিতরে যা ক্লায়েন্ট হুবহু লগ করেছে।

grep -nE 'BEGIN [A-Z ]*PRIVATE KEY|password|passwd|token|secret|psk|auth-user-pass' vpn-support.log
grep -nE 'https?://[^ ]*:[^ ]*@' vpn-support.log

দ্বিতীয় প্যাটার্নটাই মানুষ ভুলে যায়। স্কিম, ব্যবহারকারী, পাসওয়ার্ড, হোস্ট আকারের একটি URL একটি সম্পূর্ণ ক্রেডেনশিয়াল, এবং প্রক্সি বা ফিড ইনলাইন প্রমাণীকরণ দিয়ে কনফিগার করা থাকলে ক্লায়েন্টরা এমন URL লগ করে।

ফাইলটি আপনি সম্পাদনা করেননি—এমন প্রমাণ দিতে মূল ফাইলটি কখনও পাঠাবেন না। যদি কোনো অপারেটর অপরিবর্তিত এক্সপোর্টে জোর দেন, তবে জিজ্ঞাসা করুন সেটি কীসের জন্য দরকার, তাঁদের যাচাই করা সমর্থন চ্যানেলে পাঠান, এবং পরে আপনার স্থানীয় কপি মুছে ফেলুন। এই অনুরোধ বৈধ; প্রকাশ্য পেস্ট নয়।

সম্পাদিত কপি তৈরি করুন এবং অংশটি পাঠান

একটি কপিতে কাজ করুন, মূলটি সুরক্ষিত জায়গায় রাখুন, এবং হাতে নয় বরং পুনরাবৃত্তিযোগ্য একটি কমান্ড দিয়ে সম্পাদনা করুন। ঠিকানার প্যাটার্নগুলোর উপর একবার যাওয়াই এর বড় অংশ ধরে ফেলে:

cp vpn-support.log vpn-support.original.log
sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/ADDR/g; s/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/USER@DOMAIN/g' \
  vpn-support.original.log > vpn-support.redacted.log
grep -cE 'PRIVATE KEY|password|token' vpn-support.redacted.log

চূড়ান্ত সংখ্যা শূন্য হওয়া উচিত। যদি না হয়, সম্পাদনার ধাপটি একটি আকৃতি মিস করেছে এবং কিছু পাঠানোর আগে ওই লাইনগুলো দেখা উচিত। সম্পাদিত ফাইলটি একবার নিজের চোখেও পড়ুন; স্ক্রিপ্ট প্যাটার্ন ধরে, প্রসঙ্গ নয়।

যে অংশটি এখনও ব্যর্থতা দেখায়, তার মধ্যে সবচেয়ে ছোটটি পাঠান। ত্রুটির আশপাশের দশটি লাইন সাধারণত যথেষ্ট, এবং সেগুলো দুই মেগাবাইটের ফাইলের চেয়ে অনেক সহজে পর্যালোচনা করা যায়। তারপর আপনার লেবেল ও আসল মানের মধ্যে মিলটি নিজের নিয়ন্ত্রণে থাকা জায়গায় রাখুন, কারণ পরবর্তী প্রশ্নে সেটি দরকার হবে।

OpenVPN-এর লগিং ডকুমেন্টেশন ব্যাখ্যা করে কীভাবে ভার্বোসিটি স্তর যা রেকর্ড হয় তা বদলে দেয়, এবং সমস্যাটি ফাইলের কতটা অংশ সত্যিই দরকার তা ঠিক করার জন্য এটি উপযোগী প্রসঙ্গ।

সম্পর্কিত নিবন্ধ