Sandbox2 সম্পর্কে ব্যাখ্যা

Sandbox2 ডিজাইনটি সুপরিচিত এবং প্রতিষ্ঠিত প্রযুক্তি, একটি নীতি কাঠামোর উপর ভিত্তি করে তৈরি করা হয়েছে, এবং দুটি প্রক্রিয়া: Sandbox Executor এবং Sandboxee।

প্রযুক্তিগত বিষয়

Sandbox2-এর জন্য ভিত্তি স্তর তৈরি করে এমন প্রযুক্তিগুলি নিম্নলিখিত বিভাগে আলোচনা করা হয়েছে।

Linux নেমস্পেস

Linux নেমস্পেস হল অপারেটিং সিস্টেম লেভেলে ভার্চুয়ালাইজেশন প্রদান করার একটি প্রচেষ্টা। একাধিক ইউজারস্পেস একে অপরের থেকে স্বাধীনভাবে কাজ করলেও, তারা একটি কার্নেল ইনস্ট্যান্স শেয়ার করে। Sandbox2 নিম্নলিখিত ধরনের নেমস্পেস ব্যবহার করে:

  • IPC
  • নেটওয়ার্ক (PolicyBuilder::AllowUnrestrictedNetworking()-এ কল করে স্পষ্টভাবে বন্ধ না করা হলে)
  • মাউন্ট (ফাইলসিস্টেম ট্রির কাস্টম ভিউ ব্যবহার করে)
  • PID
  • ব্যবহারকারী
  • UTS

উইকিপিডিয়া বা সম্পর্কিত ম্যান পেজ থেকে Linux নেমস্পেস সম্পর্কে আরও জানুন।

IPC

Sandbox2, স্যান্ডবক্স এক্সিকিউটর এবং অবিশ্বস্ত স্যান্ডবক্সির মধ্যে নির্বিচারে ডেটা আদান-প্রদান করার অনুমতি দেয়। এটি টাইপ-লেংথ-ভ্যালু (TLV) মেসেজ, ফাইল ডেসক্রিপ্টর পাস করা এবং টোকেন ও হ্যান্ডেলের মাধ্যমে ক্রেডেনশিয়াল এক্সচেঞ্জ করা সমর্থন করে।

Seccomp-BPF

Sandbox2 seccomp-bpf-এর উপর নির্ভর করে, যা Secure Computing Mode (seccomp)-এর একটি এক্সটেনশন এবং এটি বার্কলে প্যাকেট ফিল্টার (BPF) নিয়ম ব্যবহার করে syscall ফিল্টার করার অনুমতি দেয়।

seccomp হল একটি Linux কার্নেল সুবিধা যা কোনও প্রসেসের সিস্টেম কলকে সীমাবদ্ধ করে শুধুমাত্র exit, sigreturn, read এবং write-এর অনুমতি দেয়। কোনও প্রসেস অন্য syscall এক্সিকিউট করার চেষ্টা করলে, সেটি বন্ধ করে দেওয়া হবে। seccomp-bpf এক্সটেনশন seccomp-এর চেয়ে আরও বেশি নমনীয়তা প্রদান করে। নির্দিষ্ট সেট করা syscall-এর অনুমতি দেওয়ার পরিবর্তে, seccomp-bpf, syscall ডেটাতে BPF প্রোগ্রাম রান করে এবং প্রোগ্রামের রিটার্ন ভ্যালুর উপর নির্ভর করে, এটি syscall রান করতে পারে, syscall এড়িয়ে যেতে পারে এবং ডামি ভ্যালু রিটার্ন করতে পারে, প্রসেস বন্ধ করতে পারে, সিগন্যাল জেনারেট করতে পারে অথবা ট্রেসারকে বিজ্ঞপ্তি পাঠাতে পারে।

Ptrace

ptrace (প্রসেস ট্রেস) syscall এমন কার্যকারিতা প্রদান করে যা ট্রেসার প্রসেসকে ট্রেসি প্রসেসের এক্সিকিউশন পর্যবেক্ষণ ও নিয়ন্ত্রণ করার অনুমতি দেয়। ট্রেসার প্রসেস অ্যাটাচ করা হয়ে গেলে ট্রেসির উপর সম্পূর্ণ নিয়ন্ত্রণ থাকে। ptrace সম্পর্কে আরও জানতে Wikipedia বা সংশ্লিষ্ট ম্যান পৃষ্ঠা দেখুন।

স্যান্ডবক্স নীতি

স্যান্ডবক্স নীতি স্যান্ডবক্সের সবচেয়ে গুরুত্বপূর্ণ অংশ, কারণ এটি সেইসব অ্যাকশন নির্দিষ্ট করে যেগুলি স্যান্ডবক্সী এক্সিকিউট করতে পারে ও পারে না। স্যান্ডবক্স নীতির ২টি অংশ আছে:

  • Syscall নীতি
  • নেমস্পেস সেট-আপ

ডিফল্ট Syscall নীতি

ডিফল্ট নীতি সবসময় বিপজ্জনক syscall ব্লক করে এবং ব্যবহারকারীর দেওয়া এক্সটেন্ডেড নীতির চেয়ে অগ্রাধিকার পায়।

এক্সটেন্ডেড Syscall নীতি

আমাদের PolicyBuilder ক্লাস ব্যবহার করে এক্সটেন্ডেড syscall নীতি তৈরি করা যেতে পারে। এই ক্লাসে বেশ কিছু সুবিধা সংক্রান্ত নিয়ম (যেমন, AllowStaticStartup, AllowDynamicStartup, AllowOpen) সংজ্ঞায়িত করা আছে যা আপনার নীতিকে আরও সহজে পাঠযোগ্য করে তুলতে ব্যবহার করা যেতে পারে।

বেশিরভাগ ক্ষেত্রে, আপনাকে DefaultPolicyBuilder (sapi::Sandbox2Config::DefaultPolicyBuilder()) দিয়ে শুরু করতে হবে, যা সাধারণ সিঙ্গেল-থ্রেডেড লাইব্রেরির জন্য বেসলাইন নীতি সহ PolicyBuilder আগে থেকে কনফিগার করা রিটার্ন করে এবং অতিরিক্ত নিয়ম (যেমন, কোনও বাইনারি স্যান্ডবক্সিং করার সময় .AllowDynamicStartup() ও .AddLibrariesForBinary()) দিয়ে আরও কাস্টমাইজ করা যেতে পারে। Sandboxed API (SAPI)-তে, DefaultPolicyBuilder()-কে sapi::SandboxConfig::DefaultConfig()-এর সাথে sapi::SandboxConfig::DefaultFlags(), sapi::SandboxConfig::DefaultEnvironmentVariables() এবং sapi::Sandbox2Config::DefaultLimits() ব্যবহার করে। DefaultPolicyBuilder() ব্যবহার করা না গেলে অথবা সুনির্দিষ্ট কনফিগারেশনের প্রয়োজন হলে, তবেই সরাসরি PolicyBuilder তৈরি করা উচিত।

আপনি যদি syscall আরও সীমাবদ্ধ করতে চান বা আরও জটিল নিয়মের প্রয়োজন হয়, তাহলে আপনি AddPolicyOnSyscall এবং AddPolicyOnSyscalls-এর সাথে কাঁচা BPF ম্যাক্রো নির্দিষ্ট করতে পারেন। crc4 উদাহরণ এই মেকানিজম ব্যবহার করে read, write ও close সিসকলের জন্য আর্গুমেন্ট সীমাবদ্ধ করে।

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

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

নেমস্পেস সেট-আপ

এছাড়াও, ফাইল সিস্টেমের Sandboxee-এর স্বতন্ত্র ভিউ সেট-আপ করতে PolicyBuilder অবজেক্ট ব্যবহার করা হয়। সিঙ্গেল ফাইল (AddFile / AddFileAt), সম্পূর্ণ ডিরেক্টরি (AddDirectory / AddDirectoryAt), সেইসাথে সাময়িক স্টোরেজ (AddTmpfs) Sandboxee-এর এনভায়রনমেন্টে ম্যাপ করা যেতে পারে। এছাড়াও, নির্দিষ্ট করা ডাইনামিকালি লিঙ্ক করা এক্সিকিউটেবল ফাইলের জন্য প্রয়োজনীয় সব লাইব্রেরি অটোমেটিক ম্যাপ করতে AddLibrariesForBinary ব্যবহার করা যেতে পারে।

কমান্ড-লাইন ফ্ল্যাগ

নিম্নলিখিত কমান্ড-লাইন ফ্ল্যাগগুলির মধ্যে একটি নির্দিষ্ট করে যেকোনও Sandbox2 নীতি বন্ধ করা যেতে পারে। এইসব ফ্ল্যাগ পরীক্ষার উদ্দেশ্যে ব্যবহার করা হয় (যেমন, এক্সটেন্ডেড Syscall নীতি রিফাইন করার সময়)।

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

স্যান্ডবক্স এক্সিকিউটর

Sandbox Executor হল এমন একটি প্রসেস যা নিজে স্যান্ডবক্স করা নয়। এটি হল ptrace ট্রেসার প্রসেস যা Sandboxee-র (ptrace ট্রেসি প্রসেস) সাথে অ্যাটাচ করা থাকে। এছাড়াও, স্যান্ডবক্স এক্সিকিউটর একটি মনিটর ইনস্ট্যান্স সেট-আপ করে ও চালায় যা স্যান্ডবক্সিকে ট্র্যাক করে এবং স্ট্যাটাস সংক্রান্ত তথ্য প্রদান করে।

Sandbox2 তিনটি এক্সিকিউশন মোড ব্যবহার করতে দেয়: স্ট্যান্ড-অ্যালোন, Sandbox2 Forkserver এবং কাস্টম Forkserver. আপনি ফর্কসার্ভার ব্যবহার করলে, স্যান্ডবক্সি স্যান্ডবক্স এক্সিকিউটরের চাইল্ড প্রসেস হিসেবে তৈরি হয়। এইসব মোড সম্পর্কে এখানে বিস্তারিত ব্যাখ্যা করা হয়েছে।

Sandboxee

স্যান্ডবক্সি হল এমন একটি প্রসেস যা স্যান্ডবক্স নীতি দ্বারা সংজ্ঞায়িত সীমাবদ্ধ, স্যান্ডবক্স করা এনভায়রনমেন্টে রান করে। স্যান্ডবক্স এক্সিকিউটর IPC-এর মাধ্যমে স্যান্ডবক্সিকে নীতি পাঠায়। Sandboxee তারপরে নীতি প্রয়োগ করে। নীতি লঙ্ঘন করা হলে, প্রসেস বন্ধ করে দেওয়া হবে, যদি না অন্যভাবে কনফিগার করা হয়ে থাকে (স্যান্ডবক্স নীতি দেখুন)।