স্যান্ডবক্স 2 ব্যাখ্যা করা হয়েছে

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

প্রযুক্তি জড়িত

নিম্নলিখিত বিভাগগুলি স্যান্ডবক্স2-এর জন্য ভিত্তি স্তর তৈরিকারী প্রযুক্তিগুলিকে কভার করে৷

লিনাক্স নেমস্পেস

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

  • আইপিসি
  • নেটওয়ার্ক (যদি না PolicyBuilder::AllowUnrestrictedNetworking() কল করে স্পষ্টভাবে অক্ষম করা হয়)
  • মাউন্ট (ফাইল সিস্টেম গাছের একটি কাস্টম ভিউ ব্যবহার করে)
  • পিআইডি
  • ব্যবহারকারী (যদি না PolicyBuilder::AllowUnsafeKeepCapabilities() কল করে স্পষ্টভাবে অক্ষম করা হয়)
  • ইউটিএস

লিনাক্স নেমস্পেস সম্পর্কে আরও পড়ুন উইকিপিডিয়ায় বা সংশ্লিষ্ট ম্যান পেজে।

আইপিসি

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

Seccomp-BPF

স্যান্ডবক্স2 seccomp-bpf এর উপর নির্ভর করে, যা সিকিউর কম্পিউটিং মোড (seccomp) এর একটি এক্সটেনশন যা বার্কলে প্যাকেট ফিল্টার (BPF) নিয়মগুলিকে syscalls ফিল্টার করার অনুমতি দেয়।

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

ট্রেস

ptrace (প্রসেস ট্রেস) syscall কার্যকারিতা প্রদান করে যা ট্রেসার প্রক্রিয়াটিকে ট্রেসি প্রক্রিয়ার সম্পাদন পর্যবেক্ষণ ও নিয়ন্ত্রণ করতে দেয়। ট্রেসার প্রক্রিয়াটি একবার সংযুক্ত হলে ট্রেসির উপর সম্পূর্ণ নিয়ন্ত্রণ থাকে। উইকিপিডিয়া বা সংশ্লিষ্ট ম্যান পেজে ptrace সম্পর্কে আরও পড়ুন।

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

স্যান্ডবক্স নীতি হল একটি স্যান্ডবক্সের সবচেয়ে গুরুত্বপূর্ণ অংশ, কারণ এটি স্যান্ডবক্সী কোন কাজগুলি সম্পাদন করতে পারে এবং করতে পারে না তা নির্দিষ্ট করে৷ একটি স্যান্ডবক্স নীতির 2টি অংশ রয়েছে:

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

ডিফল্ট Syscall নীতি

ডিফল্ট নীতি syscalls ব্লক করে যেগুলি সর্বদা বিপজ্জনক এবং ব্যবহারকারী দ্বারা সরবরাহকৃত বর্ধিত নীতির উপর অগ্রাধিকার নেয়।

বর্ধিত Syscall নীতি

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

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

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

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

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

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

কমান্ড-লাইন পতাকা

যেকোনো স্যান্ডবক্স2 নীতি নিম্নলিখিত কমান্ড-লাইন পতাকাগুলির মধ্যে একটি নির্দিষ্ট করে নিষ্ক্রিয় করা যেতে পারে। এই পতাকাগুলি পরীক্ষার উদ্দেশ্যে তৈরি করা হয়েছে (যেমন এক্সটেন্ডেড সিসকল নীতি পরিমার্জন করার সময়)।

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

স্যান্ডবক্স নির্বাহক

স্যান্ডবক্স এক্সিকিউটর এমন একটি প্রক্রিয়া যা নিজেই স্যান্ডবক্স করা হয় না। এটি ptrace ট্রেসার প্রক্রিয়া যা স্যান্ডবক্সি (ptrace ট্রেসি প্রক্রিয়া) এর সাথে সংযুক্ত থাকে। স্যান্ডবক্স এক্সিকিউটর একটি মনিটর ইন্সট্যান্স সেট আপ করে এবং চালায় যা স্যান্ডবক্সীকে ট্র্যাক করে এবং স্ট্যাটাস তথ্য প্রদান করে।

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

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

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

,

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

প্রযুক্তি জড়িত

নিম্নলিখিত বিভাগগুলি স্যান্ডবক্স2-এর জন্য ভিত্তি স্তর তৈরিকারী প্রযুক্তিগুলিকে কভার করে৷

লিনাক্স নেমস্পেস

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

  • আইপিসি
  • নেটওয়ার্ক (যদি না PolicyBuilder::AllowUnrestrictedNetworking() কল করে স্পষ্টভাবে অক্ষম করা হয়)
  • মাউন্ট (ফাইল সিস্টেম গাছের একটি কাস্টম ভিউ ব্যবহার করে)
  • পিআইডি
  • ব্যবহারকারী (যদি না PolicyBuilder::AllowUnsafeKeepCapabilities() কল করে স্পষ্টভাবে অক্ষম করা হয়)
  • ইউটিএস

লিনাক্স নেমস্পেস সম্পর্কে আরও পড়ুন উইকিপিডিয়ায় বা সংশ্লিষ্ট ম্যান পেজে।

আইপিসি

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

Seccomp-BPF

স্যান্ডবক্স2 seccomp-bpf এর উপর নির্ভর করে, যা সিকিউর কম্পিউটিং মোড (seccomp) এর একটি এক্সটেনশন যা বার্কলে প্যাকেট ফিল্টার (BPF) নিয়মগুলিকে syscalls ফিল্টার করার অনুমতি দেয়।

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

ট্রেস

ptrace (প্রসেস ট্রেস) syscall কার্যকারিতা প্রদান করে যা ট্রেসার প্রক্রিয়াটিকে ট্রেসি প্রক্রিয়ার সম্পাদন পর্যবেক্ষণ ও নিয়ন্ত্রণ করতে দেয়। ট্রেসার প্রক্রিয়াটি একবার সংযুক্ত হলে ট্রেসির উপর সম্পূর্ণ নিয়ন্ত্রণ থাকে। উইকিপিডিয়া বা সংশ্লিষ্ট ম্যান পেজে ptrace সম্পর্কে আরও পড়ুন।

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

স্যান্ডবক্স নীতি হল একটি স্যান্ডবক্সের সবচেয়ে গুরুত্বপূর্ণ অংশ, কারণ এটি স্যান্ডবক্সী কোন কাজগুলি সম্পাদন করতে পারে এবং করতে পারে না তা নির্দিষ্ট করে৷ একটি স্যান্ডবক্স নীতির 2টি অংশ রয়েছে:

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

ডিফল্ট Syscall নীতি

ডিফল্ট নীতি syscalls ব্লক করে যেগুলি সর্বদা বিপজ্জনক এবং ব্যবহারকারী দ্বারা সরবরাহকৃত বর্ধিত নীতির উপর অগ্রাধিকার নেয়।

বর্ধিত Syscall নীতি

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

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

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

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

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

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

কমান্ড-লাইন পতাকা

যেকোনো স্যান্ডবক্স2 নীতি নিম্নলিখিত কমান্ড-লাইন পতাকাগুলির মধ্যে একটি নির্দিষ্ট করে নিষ্ক্রিয় করা যেতে পারে। এই পতাকাগুলি পরীক্ষার উদ্দেশ্যে তৈরি করা হয়েছে (যেমন এক্সটেন্ডেড সিসকল নীতি পরিমার্জন করার সময়)।

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

স্যান্ডবক্স নির্বাহক

স্যান্ডবক্স এক্সিকিউটর এমন একটি প্রক্রিয়া যা নিজেই স্যান্ডবক্স করা হয় না। এটি ptrace ট্রেসার প্রক্রিয়া যা স্যান্ডবক্সি (ptrace ট্রেসি প্রক্রিয়া) এর সাথে সংযুক্ত থাকে। স্যান্ডবক্স এক্সিকিউটর একটি মনিটর ইন্সট্যান্স সেট আপ করে এবং চালায় যা স্যান্ডবক্সীকে ট্র্যাক করে এবং স্ট্যাটাস তথ্য প্রদান করে।

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

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

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