মৃত্যুদন্ড কার্যকর করার আগে কমান্ড বাইনারিগুলির যাচাইকরণ


13

বাশ স্ক্রিপ্ট থেকে আপনি আসলে কী সম্পাদন করছেন তা যাচাই করার জন্য কি কোনও পদ্ধতি আছে?

আপনার ব্যাশ স্ক্রিপ্ট বিভিন্ন কমান্ড কল করছে বলুন (উদাহরণস্বরূপ: tar, mail, scp, mysqldump) এবং আপনি কি নিশ্চিত যে করতে ইচ্ছুক tarপ্রকৃত হয়, বাস্তব tar, যার দ্বারা অবধারণীয় হয় rootব্যবহারকারী ফাইল এবং পেরেন্ট ডাইরেক্টরি মালিক এবং শুধুমাত্র লেখার অনুমতিসহ এক হচ্ছে এবং কিছু মালিক বা মালিক হওয়ার /tmp/surprise/tarসাথে নয় ।www-dataapache2

অবশ্যই আমি PATHও পরিবেশ সম্পর্কে জানি , আমি এটি জানতে আগ্রহী যে চলমান ব্যাশ স্ক্রিপ্ট থেকে এটি অতিরিক্তভাবে চেক করা যায় কিনা এবং যদি তা হয় তবে ঠিক কীভাবে?

উদাহরণ: (সিউডো কোড)

tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...

2
যদি আপনি এতটা ভৌতিক, তবে আপনার নিজের বাইনারিগুলি ব্যবহার করুন!
ইপুর সিরার

8
Xhienne দ্বারা উত্তর হিসাবে whichকি tarকরবে তা সঠিকভাবে না বলা ছাড়াও lsফাইল (গুলি) সম্পর্কে কোনও মিথ্যা তথ্য ফেরত দিতে হ্যাক করা যেতে পারে। grepমিথ্যা তথ্য ফেরত দেওয়ার জন্যও হ্যাক করা যায়; পরিবর্তে শেল ম্যাচিং ব্যবহার করে এড়ানো যেতে পারে তবে শেলটি হ্যাক হতে পারে। এবং শেলটি typeপ্রথম স্থান থেকে ভুল ফলাফল দেওয়ার জন্য হ্যাক করা যেতে পারে - বা পুরোপুরি প্রতিস্থাপন করা হয়েছে যেহেতু শেলটির পুনঃস্থাপনযোগ্যতা 50 বছর বয়সী ওএসের তুলনায় ইউনিক্সের একটি গুরুত্বপূর্ণ উদ্ভাবন ছিল। কেন থম্পসনের 1984 টিউরিংয়ের ঠিকানাটি দেখুন। এটি পুরো কচ্ছপ
dave_thompson_085

2
আমি এটি লিনাক্সের জন্য উত্তর দিতে পারি না - কেবল এআইএক্স - যার বিশ্বাসযোগ্য এক্সিকিউশন ( TE) নামে একটি উপাদান রয়েছে - এতে স্বাক্ষরযুক্ত একটি ডাটাবেস থাকে (যেমন, এমডি 5 চেকসামের চেয়ে আরও বিস্তৃত T যখন টিই সক্রিয় থাকে এবং কোনও ফাইল ডাটাবেজে থাকে আপনি বেছে নিতে পারেন) প্রোগ্রামটি চলমান কিনা - বা কেবলমাত্র সতর্ক করে যে এটি ডাটাবেসের সাথে মেলে না Further আরও দুটি সেটিংস রয়েছে: TEP(বিশ্বস্ত এক্সিকিউশন PATH) এবং TLP(বিশ্বস্ত LIBrary PATH) T কেবলমাত্র টিইপিতে প্রোগ্রামগুলি কার্যকর করা যেতে পারে এবং লাইব্রেরিগুলি কেবল এর সাথে লোড হতে পারে ডিরেক্টরিটি টিএলপিতে অন্তর্ভুক্ত করা হয়েছে Linux লিনাক্সে আমি 'অ্যাপআর্মার' নামে কিছু আছে যা আপনাকে সাহায্য করতে পারে
মাইকেল অনুভূত

1
আপনি এই ধরণের সুরক্ষা পেতে পারেন, তবে কোনও স্ক্রিপ্ট থেকে নয় - আপনার স্ক্রিপ্টটি অনিয়ন্ত্রিত পরিবেশে সঞ্চালনের সময়টি অনেক দেরি হয়ে গেছে। সবার জন্য আপনি যা কিছু দেখতে পান তা হানা আক্রমণকারী দ্বারা সেট করা একটি ক্রুট।
চার্লস ডাফি

2
... আপনি যদি এমন কোনও সিস্টেম রাখতে চান যা পুরোপুরি বিশ্বস্ত থাকে তবে আপনাকে ChromeOS এর পদ্ধতির দিকে যেতে হবে: আপনার ফার্মওয়্যারটি আপনার হার্ডওয়্যারটিতে এম্বেড করা একটি কী দিয়ে স্বাক্ষর করুন; আপনার বুটলোডার / কার্নেল ফার্মওয়্যার দ্বারা যাচাই করা হয়েছে; আপনার রুট ওএস পার্টিশনটি কেবলমাত্র যাচাইকরণের জন্য ব্লক-স্তরের স্বাক্ষরগুলি ব্যবহার করে কেবল পঠনযোগ্য; ইত্যাদি। এছাড়াও মিচেলফেল্ট যেগুলি উপলভ্য আলোচনা করে তার অনুরূপ পন্থা রয়েছে - ইন্টিগ্রিটি মেজারমেন্ট আর্কিটেকচার দেখুন - তবে কর্মক্ষমতা প্রভাব বেশি এবং সততার স্তর হ্রাস পেয়েছে (যেহেতু বাইনারি স্বাক্ষরগুলি পরীক্ষা করা আপনাকে কার্যকর করতে না পেরে আক্রমণে আক্রমণে সহায়তা করে না বিষয়বস্তু)।
চার্লস ডাফি

উত্তর:


24

আপনি কার্যকর করতে যাচ্ছেন বাইনারিগুলি বৈধকরণের পরিবর্তে, আপনি শুরু থেকেই ডান বাইনারিগুলি কার্যকর করতে পারেন। যেমন আপনি যদি চালাতে যাচ্ছেন না তা নিশ্চিত করতে চান /tmp/surprise/tar, কেবল /usr/bin/tarআপনার স্ক্রিপ্টে চালান in বিকল্পভাবে, $PATHকিছু চালানোর আগে নিজের বিবেচনা মানকে সেট করুন ।

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

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


কোনটি বিরতি বিভিন্ন ডিস্ট্রিবিউশন মধ্যে বাইনেরিতে রাখা বেছে নিই যখন /binপরিবর্তে /usr/bin
ড্যামিয়ান ইয়ারিক 12'17 এ 16

আইএমএ এটির দুটি উত্পাদন-প্রস্তুত পদ্ধতির মধ্যে একটি - অন্যটি হ'ল রুটফেসের ব্লক-স্তরের বৈধতা দেওয়ার জন্য ChromeOS দ্বারা নেওয়া dm-verity পদ্ধতির।
চার্লস ডাফি

@ দামিয়ানইয়েরিক ফেয়ার মন্তব্য। $PATHএকাধিক বিতরণ সহায়তার প্রয়োজন হলে সেই দুটি পথই সেট করুন ।
দিমিত্রি গ্রিগরিয়েভ

এআইএক্স টিই (আরবিএসি সহ বা তার বাইরে) তৃতীয় "উত্পাদন-প্রস্তুত" কার্নেল-বিল্টিন যা এটি সম্পাদন করবে - সম্ভবত আরও কিছু। TE, একবার প্যাসিভের চেয়ে বেশি সক্ষম হয়ে ওঠে - ফাইলগুলি খোলার থেকে এবং / অথবা প্রোগ্রামগুলি কার্যকর হতে বাধা দেয়। অতিরিক্তভাবে, অ্যাপ্লিকেশন এবং লাইব্রেরির ব্যবহার একচেটিয়াভাবে TEP (বিশ্বস্ত এক্সিকিউশন পাথ) বা টিএলপি (বিশ্বস্ত গ্রন্থাগার পাথ) এ সেট করা যেতে পারে। মৌলিক তথ্যের জন্য আইবিএম / সাপোর্ট / জ্ঞানসেন্টার/en/ssw_aix_61/… দেখুন
মাইকেল

6

যদি কোনও অনুপ্রবেশকারী আপনার সিস্টেমে অ্যাক্সেস অর্জন করে এবং আপনার $PATH(যা /tmpকোনও পরিস্থিতিতে অন্তর্ভুক্ত করা উচিত নয় ) পরিবর্তন করতে সক্ষম হয় তবে এক্সিকিউটেবলের মালিকানা সম্পর্কে উদ্বেগ শুরু করতে খুব দেরি হয়ে যায়।

পরিবর্তে আপনার কীভাবে একটি অনুপ্রবেশ মোকাবেলা করতে হবে তা পড়তে হবে ।

পুরোপুরি অনুপ্রবেশ এড়াতে মনোনিবেশ করা আরও ভাল।

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


4

md5sumকোনও ফাইলের যাচাই করে কিছুটা সম্ভব এটি সম্ভব to সুতরাং সিস্টেমগুলিতে যা aptপ্যাকেজ পরিচালনা ব্যবহার করে - আমার বিশেষ ক্ষেত্রে, উবুন্টু 16.04 - ফাইল রয়েছে /var/lib/dpkg/info/tar.md5sums, যা tarইনস্টলেশনের সময় থেকে আগত সমস্ত ফাইলের এমডি 5 সংখ্যার সঞ্চয় করে । সুতরাং আপনি একটি সাধারণ if-বিবৃতি লিখতে পারেন যা পরীক্ষা করে md5sum /bin/tarযে ফাইলের আউটপুট মেলে কিনা ।

এটি অবশ্যই ধরে নিয়েছে যে ফাইলটি নিজেই কোনওরকম ছড়িয়ে পড়ে না। অবশ্যই এটি তখনই ঘটতে পারে যখন আক্রমণকারী রুট / সুডো অ্যাক্সেস অর্জন করে, যার পয়েন্টে সমস্ত বেট বন্ধ থাকে।


8
তবে আপনি কীভাবে বৈধতা দিন /usr/bin/md5sum?
দিমিত্রি গ্রিগরিএভ

কোনো আক্রমণকারী প্রতিস্থাপন করতে সক্ষম হয় তাহলে /bin/tarবা /usr/bin/tar, এটা খুব সম্ভবত তারা কেবল প্রতিস্থাপন করতে পারেন md5sumবা /var/lib/dpkg/info/tar.md5sums। বা $SHELL
জোনাস শোফার

1
আমি মনে করি আমি ইতিমধ্যে শেষ অনুচ্ছেদে উল্লেখ করেছি, যে এ জাতীয় জিনিসটি ঘটতে পারে, আক্রমণকারীকে সিস্টেমে রুট অ্যাক্সেস অর্জন করতে হবে, এবং সেই সময়ে কোনও কিছুই সম্ভব। কিছু ক্ষেত্রে, যেখানে আক্রমণকারীর রুট অ্যাক্সেস নেই তবে ব্যবহারকারীর জন্য PATH ভেরিয়েবল পরিবর্তন করতে পারে বা একটি উপাধ তৈরি করতে tarপারে যেখানে বিভিন্ন বাইনারি দেখায় , এটি কার্যকর হবে। যখন কোনও সিস্টেম মূল স্তরের সাথে আপোস করা হয়, তখন আপনার কাছে একটি বিকল্প থাকে - কক্ষপথ থেকে
নাক করে দিন

3

হ্যাঁ, একটি পদ্ধতি রয়েছে: বিল্টিন type। যে whichকমান্ডটি কেবল আপনার প্যাথএইচ অনুসন্ধান করে তার বিপরীতে, আপনাকে নির্দেশ typeদেবে যে কমান্ডের নামটি আসলে একটি সংরক্ষিত কীওয়ার্ড, একটি বিল্টিন, একটি উপাধি, কোনও ফাংশন বা কোনও ডিস্ক ফাইল।

$ type -t foobar || echo "Not found"
Not found

$ type -t echo
builtin

$ enable -n echo; type -t echo; type -p echo
file
/usr/bin/echo

$ echo() { printf "(echoing) %s\n" "$*"; }; type -t echo
function

$ alias echo="/bin/echo 'I say: ' "; type -t echo
alias

এছাড়াও type -aআপনাকে আপনার কমান্ডের জন্য সমস্ত প্রার্থী দেবে (প্রথম থেকে শেষ পছন্দ পর্যন্ত):

$ type -a echo
echo is aliased to `/bin/echo 'I say: ' '
echo is a function
echo () 
{ 
    printf "(echoing) %s\n" "$*"
}
echo is a shell builtin
echo is /usr/local/bin/echo
echo is /bin/echo

অবশেষে, আপনি যদি কেবলমাত্র আপনার ডিস্কের বাইনারিগুলি সম্পর্কে উদ্বিগ্ন হন তবে আপনি type -Paআপনার প্যাথের সমস্ত বাইনারি (উপরের মতো একই ক্রম) পেতে ব্যবহার করতে পারেন :

$ type -Pa tar
/home/me/bin/tar                <= oh oh, is this normal?
/bin/tar

এটি বলেছিল, typeশেষ পর্যন্ত কোন আদেশটি ডাকা হবে তা একাই আপনাকে জানায় না। উদাহরণস্বরূপ, যদি আপনার tarএকটি উপনাম হয় যা বাইনারি (উদাহরণস্বরূপ alias tar="/tmp/tar") কল করে তবে typeআপনাকে এটি একটি বলে alias


type -aসমস্ত ফর্ম (যেমন উভয় উপন্যাস এবং বাহ্যিক প্রোগ্রাম) অন্তর্ভুক্ত করে
dave_thompson_085

আপনাকে ধন্যবাদ @ ডেভ, এটি সত্যই আকর্ষণীয়, আমি আমার উত্তরটি আপডেট করেছি
xhienne

1
typeবাশ জানে যেমন ইনসফার আপনাকে জানিয়ে দেবে, তবে আমরা যদি কোনও দূষিত আক্রমণকারীর নিয়ন্ত্রণে থাকি তবে বিশ্বাস করার কোনও কারণ নেই যে বাশ যা মনে করে তা যা সত্য তা প্রতিফলিত করে। আপনি জানেন যে আপনার জন্য LD_PRELOADপ্রতিটি সি-লাইব্রেরি কলকে আটকে একটি মডিউল রয়েছে all
চার্লস ডাফি

1
@ চার্লসডুফি আপনি অবশ্যই ঠিক আছেন আমি সুরক্ষা কোণের দিকে উত্তর দিতে চাইনি। আমি কেবল শীর্ষে প্রশ্নের উত্তরের প্রস্তাব দিচ্ছি: "আপনি কি আসলে বাশ স্ক্রিপ্ট থেকে বাস্তবায়ন করছেন তা যাচাই করার কোনও পদ্ধতি আছে" এবং এর বিকল্প প্রস্তাব করেছেন which
xhienne

এর enableআগে কখনও দেখিনি । আমি এই উত্তরগুলি থেকে পরামর্শটি ব্যবহার করে type enableএটি শেলটি অন্তর্নির্মিত তা খুঁজে পেতে এবং তারপরে help enableএটি কী করে তা দেখতে।
জো

3

আপনি না পরীক্ষা করতে কি কমান্ড ঠিক ব্যবহার করে একটি স্ক্রিপ্ট দ্বারা মৃত্যুদন্ড কার্যকর করা হচ্ছে strace। উদাহরণ স্বরূপ:

strace -f -e execve ./script.sh

নিম্নলিখিত স্ক্রিপ্ট সহ:

#!/bin/bash
touch testfile.txt
echo "Hello" >> testfile.txt
cat testfile.txt
rm testfile.txt

strace-e execveপ্যারামিটারের সাথে ব্যবহার করার সময় নির্বাহ করা কমান্ডের সঠিক পথটি আপনাকে জানাবে :

execve("./script.sh", ["./script.sh"], [/* 69 vars */]) = 0 
Process 8524 attached
[pid  8524] execve("/usr/bin/touch", ["touch", "testfile.txt"], [/* 68 vars */]) = 0 
[pid  8524] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8524, si_status=0, si_utime=0, si_stime=0} --- 
Process 8525 attached [pid > 8525] execve("/bin/cat", ["cat", "testfile.txt"], [/* 68 vars */]) = 0
Hello [pid  8525] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8525, si_status=0, si_utime=0, si_stime=0} --- 
Process 8526 attached [pid > 8526] execve("/bin/rm", ["rm", "testfile.txt"], [/* 68 vars */]) = 0
[pid  8526] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8526, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++

পরামিতি (স্ট্রেস ম্যান থেকে):

-f: কাঁটাচামচ (2), ভিফোর্ক (2) এবং ক্লোন (2) সিস্টেম কলগুলির ফলস্বরূপ বর্তমানে সনাক্ত করা প্রক্রিয়াগুলি দ্বারা তৈরি করা শিশুদের প্রক্রিয়াগুলি সনাক্ত করুন। দ্রষ্টব্য যে -p PID -fপ্রক্রিয়া পিআইডি এর সমস্ত থ্রেড সংযুক্ত করবে যদি এটি একত্রে থ্রেড_আইডি = পিআইডি দিয়ে থাকে তবে এটি একত্রে থ্রেড থাকে।

-e trace=file: সমস্ত সিস্টেম কলগুলি সনাক্ত করুন যা কোনও ফাইলের নামকে যুক্তি হিসাবে গ্রহণ করে। আপনি এটিকে একটি সংক্ষেপণ হিসাবে ভাবতে পারেন -e trace=open,stat,chmod,unlink,...যার জন্য প্রক্রিয়াটি কী ফাইলগুলি উল্লেখ করছে তা দেখার জন্য দরকারী। তদ্ব্যতীত, সংক্ষিপ্তসারটি ব্যবহার নিশ্চিত করবে যে আপনি ভুলক্রমে তালিকায় lstat এর মতো কল অন্তর্ভুক্ত করতে ভুলবেন না।


3
এটি স্বয়ংক্রিয় পরীক্ষণ সম্পাদনের জন্য কোনও স্ক্রিপ্টের মাধ্যমে কোনওভাবেই ব্যবহারযোগ্য নয় এবং straceএটি বিশ্বাস করার কোনও বিশেষ কারণ নেই যে এটি নিজেই বিভক্ত হয়নি।
চার্লস ডাফি

0

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

এখানে চিত্র বর্ণনা লিখুন

এখানে 'স্ট্রেস' কমান্ড রয়েছে যা আপনার আদেশটি অংশগুলিতে বিচ্ছিন্ন করে ...

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি সত্যই গভীর যেতে চান তবে স্ক্রিপ্টগুলি কার্যকর করতে চলেছে এর জন্য ডিকম্পিলারগুলি চেকআউট করতে চান। অন্য কথায় আপনাকে অবশ্যই এই আদেশটির এসেম্বলারের ব্যাখ্যাটি পরীক্ষা করতে হবে। সেখানে বাশার জন্য objdump -d। লিনাক্স বিন স্ক্রিপ্টগুলি মূলত Cপ্রোগ্রামিং ভাষার সাথে তৈরি করা হয় তাই ভাল Cডিকম্পিলার ব্যবহার করুন ।

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