সংক্ষেপে ওপেনবিএসডির অঙ্গীকার কী?


18

কেউ দয়া করে বর্ণনা করতে পারবেন, একজন অ-প্রোগ্রামার, তবে আইটি ব্যক্তি, প্রতিশ্রুতি কি ?

প্রাক্তন: একটি প্রোগ্রাম রয়েছে, প্রাক্তন .: "xterm"। অঙ্গীকার কীভাবে এটিকে আরও সুরক্ষিত করতে পারে? এটি প্রোগ্রামের কোডের ভিতরে বা ওএসের বাইরেই প্রতিশ্রুতিবদ্ধ?

প্রতিজ্ঞা কোথায়? এটি কি প্রোগ্রাম কোডে রয়েছে; বা ওএসের বাইনারিগুলির একটি তালিকা রয়েছে যা কেবল এক্সওয়াইস্কাইলে আবেদন করতে পারে?

উত্তর:


13

প্রতিজ্ঞা কি?

pledge একটি সিস্টেম কল।

pledgeএকটি প্রোগ্রামে কল করা এই প্রতিশ্রুতি দেওয়া হয় যে প্রোগ্রামটি কেবলমাত্র কিছু নির্দিষ্ট সংস্থান ব্যবহার করবে।

বলার আর একটি উপায় হ'ল কোনও প্রোগ্রামের অপারেশনটিকে তার প্রয়োজনের মধ্যে সীমাবদ্ধ করা, যেমন,

"আমি ছাড়া অন্য কোন পোর্ট ব্যবহার না করার অঙ্গীকার port 63"
"আমি ছাড়া অন্য কোন সিস্টেম-কল ব্যবহার না করার অঙ্গীকার lseek()এবং fork()"

এটি কীভাবে কোনও প্রোগ্রামকে আরও সুরক্ষিত করে?

এটি একটি প্রোগ্রামের পরিচালনা সীমাবদ্ধ করে। উদাহরণ:

  • আপনি একটি প্রোগ্রাম লিখেছেন xyzযা কেবলমাত্র readসিস্টেম-কল প্রয়োজন।
  • তারপরে আপনি pledgeকেবলমাত্র ব্যবহার করতে যোগ করুন readতবে অন্য কিছু নয়।
  • তারপরে কোনও দূষিত ব্যবহারকারী জানতে পেরেছিলেন যে আপনার প্রোগ্রামে এমন একটি দুর্বলতা রয়েছে যার মাধ্যমে কেউ rootশেল ডেকে আনে ।
  • rootশেল খোলার জন্য আপনার প্রোগ্রামটি অনুসন্ধান করার ফলে কার্নেলটি প্রক্রিয়াটি হ'ল SIGABRT(যা ধরা / উপেক্ষা করা যায় না) এবং একটি লগ তৈরি করে (যা আপনি এটি খুঁজে পেতে পারেন dmesg)।

এটি ঘটে কারণ আপনার প্রোগ্রামের অন্যান্য কোডগুলি কার্যকর করার আগে এটি প্রথমে সিস্টেম কল pledgeব্যতীত অন্য কিছু ব্যবহার না করে read। তবে rootশেল খোলার সাথে সাথে আরও বেশ কয়েকটি সিস্টেম-কল কল করা হবে যা নিষিদ্ধ কারণ এরই মধ্যে প্রতিশ্রুতি দেওয়া হয়েছে যে অন্য কোনওটি ব্যবহার না করে তবে read

প্রতিজ্ঞা কোথায়?

এটি সাধারণত একটি প্রোগ্রামে। ওপেনবিএসডি 6.5 ম্যান পৃষ্ঠা থেকে ব্যবহার :

#include <unistd.h>

int pledge(const char *promises, const char *execpromises);

উদাহরণ কোড: cat.ccat থেকে আদেশের কোড কোড

........
#include <unistd.h>
........
int ch;
if (pledge("stdio rpath", NULL) == -1)
    err(1, "pledge");

while ((ch = getopt(argc, argv, "benstuv")) != -1)
..........

5

একটি প্রোগ্রাম সাধারণত সিস্টেম বা লাইব্রেরি কলগুলির একটি নির্দিষ্ট সেট ব্যবহার করে। সঙ্গে pledgeআপনি শুধুমাত্র এই সেট করার মঞ্জুরি দেওয়া সিস্টেম কলের সেট সীমিত করতে পারে। উদাহরণস্বরূপ, যদি কোনও প্রোগ্রামের পাসওয়ার্ড ডাটাবেস পড়ার প্রয়োজন না হয় তবে আপনি getpwnam()ফাংশনটি কল করতে নিষেধ করতে পারেন ।

এটা কিভাবে দরকারী? এটি দুর্বলতার বিরুদ্ধে প্রতিরক্ষা একটি অতিরিক্ত লাইন। প্রোগ্রামটিতে কোনও ত্রুটি থাকলে, কেউ প্রোগ্রামটির সম্পাদন প্রবাহকে পরিবর্তন করতে বা প্রসেসে কিছু অতিরিক্ত কোড ইনজেকশন করতে বাগটি কাজে লাগাতে সক্ষম হতে পারে। বাগটি উদাহরণস্বরূপ, ডেমোনের মুখোমুখি হওয়া কোনও নেটওয়ার্কে একটি বাফার ওভারফ্লো ত্রুটি হতে পারে, যা আক্রমণকারী প্রোগ্রামটিকে পরিচালনা করতে পারে তার চেয়ে বেশি ডেটা প্রেরণ করে ট্রিগার করতে পারে, সম্ভবত প্রোগ্রামটির জন্য /etc/passwdফাইলটির বিষয়বস্তু পড়তে এবং প্রেরণের ব্যবস্থা করে the অন্তর্জাল.


4

আপনার প্রোগ্রামটি কেবলমাত্র কার্যকারিতা {এ, বি, সি use ব্যবহার করতে "প্রতিশ্রুতি দেয়"

যদি কোনও হ্যাকার আপনার প্রতিশ্রুতিবদ্ধ প্রক্রিয়াতে কোড ইনজেক্ট করতে পারে এবং কার্যকারিতা ডি চেষ্টা করতে পারে, তবে ওএস আপনার প্রোগ্রামটিকে ক্র্যাশ করে

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.