আমি কি থ্রেড ব্যবহার করতে পারি?
হ্যাঁ, থ্রেড স্যান্ডবক্স 2 এ সমর্থিত।
সব থ্রেড স্যান্ডবক্স করা আবশ্যক
Linux যেভাবে কাজ করে তার কারণে, seccomp-bpf নীতি শুধুমাত্র বর্তমান থ্রেডে প্রয়োগ করা হয়: এর মানে এই নীতিটি অন্য বিদ্যমান থ্রেডগুলিতে প্রয়োগ করা হয় না, তবে ভবিষ্যতের থ্রেডগুলি এই নীতির উত্তরাধিকারী হবে:
- আপনি যদি প্রথম মোডে স্যান্ডবক্স 2 ব্যবহার করেন যেখানে
execve()
এর আগে স্যান্ডবক্সিং সক্ষম করা হয়, তবে সমস্ত থ্রেড নীতির উত্তরাধিকারী হবে এবং কোনও সমস্যা নেই। এটি স্যান্ডবক্সিংয়ের পছন্দের মোড। - আপনি যদি দ্বিতীয় মোডটি ব্যবহার করেন যেখানে নির্বাহক
set_enable_sandbox_before_exec(false)
করেছে এবং Sandboxee নির্বাহককে বলে যখন এটিSandboxMeHere()
দিয়ে স্যান্ডবক্স করতে চায়, নিশ্চিত করুন ফিল্টারটি সমস্ত থ্রেডে প্রয়োগ করা হয়েছে। অন্যথায়, একটি স্যান্ডবক্স পালানোর ঝুঁকি রয়েছে: দূষিত কোড একটি স্যান্ডবক্সযুক্ত থ্রেড থেকে একটি আনস্যান্ডবক্সযুক্ত থ্রেডে স্থানান্তরিত হতে পারে৷
আমি কিভাবে আমার স্যান্ডবক্সী কম্পাইল করা উচিত?
একটি স্ট্যাটিক্যালি লিঙ্কড এক্সিকিউটেবলের তুলনায়, স্যান্ডবক্সীকে একটি ডায়নামিকলি লিঙ্কড এক্সিকিউটেবলের সাথে কম্পাইল করার ফলে সিস্ক্যাল (যেমন open
/ openat
, mmap
, ইত্যাদি) উল্লেখযোগ্য বৃদ্ধি পাবে যা অনুমোদিত তালিকাভুক্ত করা প্রয়োজন। শেয়ার্ড লাইব্রেরি লোড করার জন্য রানটাইমে ডায়নামিক লিঙ্কার আহ্বানের কারণে এই সমস্ত অতিরিক্ত সিস্কালের প্রয়োজন হয়।
যাইহোক, স্ট্যাটিকভাবে লিঙ্কযুক্ত স্যান্ডবক্সের দিকে তাকানো: যদিও কম সিস্ক্যাল অনুমোদিত তালিকাভুক্ত করা প্রয়োজন, সেখানে নিরাপত্তার প্রভাবও রয়েছে; ASLR হিপ এনট্রপি হ্রাস করা হয়েছে (30 বিট থেকে 8 বিট), যা শোষণকে সহজ করে তোলে।
এটি একটি দ্বিধা যা মূলত হ্রাস করা যেতে পারে:
- ডাইনামিক : ভাল হিপ ASLR, প্রাথমিক কোড এক্সিকিউশন পেতে সম্ভাব্য কঠিন কিন্তু কম কার্যকর স্যান্ডবক্স নীতির খরচে, থেকে বের হওয়া সম্ভাব্য সহজ।
- স্ট্যাটিক : খারাপ হিপ ASLR, প্রাথমিক কোড এক্সিকিউশন পেতে সম্ভাব্য সহজ কিন্তু একটি আরও কার্যকর স্যান্ডবক্স নীতি, যা থেকে বের হওয়া সম্ভাব্য কঠিন।
ঐতিহাসিকভাবে, স্ট্যাটিক্যালি লিঙ্কযুক্ত বাইনারি পজিশন ইন্ডিপেন্ডেন্ট কোড ( pie
) সমর্থন করে না। উপরন্তু, Bazel ডিফল্টভাবে pie
যোগ করেছে। একটি টাইট syscall ফিল্টার সংজ্ঞায়িত করতে সক্ষম হওয়ার জন্য, আপনাকে Bazel এর ডিফল্ট মান ওভাররাইট করতে হবে।
কম্পাইলার কয়েক বছর ধরে উন্নত হয়েছে এবং এখন একটি static-pie
বিকল্প সমর্থন করে। এই বিকল্পের সাহায্যে একটি কম্পাইলারকে পজিশন-স্বাধীন কোড তৈরি করার নির্দেশ দেওয়া হয়, কিন্তু pie
তুলনায় এটি এখন সমস্ত স্ট্যাটিকালি লিঙ্কযুক্ত লাইব্রেরিও অন্তর্ভুক্ত করে। নিরাপত্তার দৃষ্টিকোণ থেকে, static-pie
এখনও ASLR এনট্রপি (30 বিট থেকে 14 বিট) হ্রাস করে, কিন্তু এটি pie
ছাড়া আগের পরিস্থিতির তুলনায় একটি উন্নতি।
যেহেতু Bazel ডিফল্টভাবে pie
যোগ করে এবং স্ট্যাটিক এটির সাথে বেমানান, তাই cc_binary নিয়মে -static-pie
লিঙ্কার পতাকা পাস করতে লিঙ্কার বিকল্প পতাকা ব্যবহার করার কথা বিবেচনা করুন এবং ডিফল্টটি ওভাররাইট করুন:
linkstatic = 1,
linkopts=["-static-pie"],
এই বিকল্পগুলির একটি উদাহরণের জন্য, স্ট্যাটিক উদাহরণটি দেখুন BUILD : static_bin.cc static-pie
এর সাথে স্ট্যাটিকভাবে লিঙ্ক করা হয়েছে, যা এটিকে খুব শক্ত syscall নীতি থাকা সম্ভব করে তোলে। এটি স্যান্ডবক্সিং তৃতীয় পক্ষের বাইনারিগুলির জন্যও সুন্দরভাবে কাজ করে।
আমি কি 32-বিট x86 বাইনারি স্যান্ডবক্স করতে পারি?
স্যান্ডবক্স 2 শুধুমাত্র একই আর্কিটেকচার স্যান্ডবক্স করতে পারে যার সাথে এটি সংকলিত হয়েছিল।
উপরন্তু, Sandbox2 থেকে 32-বিট x86-এর সমর্থন মুছে ফেলা হয়েছে। যদি আপনি একটি 32-বিট x86 বাইনারি বা 64-বিট x86 বাইনারি 32-বিট সিস্ক্যাল (int 0x80 এর মাধ্যমে) স্যান্ডবক্স করতে একটি 64-বিট x86 এক্সিকিউটর ব্যবহার করার চেষ্টা করেন, উভয়ই একটি স্যান্ডবক্স লঙ্ঘন তৈরি করবে যা আর্কিটেকচার লেবেল [X32] দ্বারা চিহ্নিত করা যেতে পারে।
এই আচরণের পিছনে কারণ হল যে syscall সংখ্যাগুলি আর্কিটেকচারের মধ্যে আলাদা এবং যেহেতু syscall নীতি নির্বাহকের আর্কিটেকচারে লেখা আছে, তাই স্যান্ডবক্সীর জন্য একটি ভিন্ন আর্কিটেকচারের অনুমতি দেওয়া বিপজ্জনক হবে৷ প্রকৃতপক্ষে, এটি একটি আপাতদৃষ্টিতে ক্ষতিকারক সিস্ক্যালকে অনুমতি দিতে পারে যার প্রকৃত অর্থ হল আরেকটি আরও ক্ষতিকারক সিস্ক্যাল স্যান্ডবক্সকে পালানোর জন্য খুলতে পারে।
একটি নির্বাহক প্রক্রিয়া অনুরোধ করতে পারে এমন স্যান্ডবক্সের সংখ্যার কোন সীমা আছে কি?
প্রতিটি স্যান্ডবক্সী উদাহরণের জন্য (ফর্কসার্ভার থেকে নতুন প্রক্রিয়া তৈরি করা হয়েছে), একটি নতুন থ্রেড তৈরি করা হয়েছে - সেখানেই সীমাবদ্ধতা রয়েছে।
একজন নির্বাহক কি একাধিক স্যান্ডবক্স তৈরির অনুরোধ করতে পারেন?
না। একটি 1:1 সম্পর্ক রয়েছে – একটি এক্সিকিউটর ইনস্ট্যান্স স্যান্ডবক্সীর পিআইডি সঞ্চয় করে, স্যান্ডবক্স ইনস্ট্যান্সের সাথে Comms ইনস্ট্যান্স পরিচালনা করে ইত্যাদি।
আমি কেন forkserver.cc-এর ভিতরে "ফাংশন ইমপ্লিমেন্ট করা হয়নি" পাব?
Sandbox2 শুধুমাত্র যুক্তিসঙ্গতভাবে নতুন কার্নেল চালানো সমর্থন করে। আমাদের বর্তমান কাট-অফ হল 3.19 কার্নেল, যদিও এটি ভবিষ্যতে পরিবর্তিত হতে পারে। এর কারণ হ'ল আমরা অপেক্ষাকৃত নতুন কার্নেল বৈশিষ্ট্যগুলি ব্যবহার করছি যার মধ্যে ব্যবহারকারীর নামস্থান এবং TSYNC পতাকা সহ seccomp রয়েছে।
আপনি যদি প্রোড চালাচ্ছেন, তাহলে এটিকে সমস্যা করা উচিত নয়, যেহেতু প্রায় পুরো ফ্লিট একটি নতুন যথেষ্ট কার্নেল চালাচ্ছে। আপনি যদি এই সঙ্গে কোন সমস্যা আছে, আমাদের সাথে যোগাযোগ করুন.
আপনি যদি ডেবিয়ান বা উবুন্টুতে চালান, আপনার কার্নেল আপডেট করা চালানোর মতোই সহজ:
sudo apt-get install linux-image-<RECENT_VERSION>