প্রতিজ্ঞা কি?
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)
..........