পড়ার অনুমতি ছাড়াই নির্বাহযোগ্য ট্রেসিং


17

straceএক্সিকিউটেবলের সাথে ব্যবহার করার সময় আমি উবুন্টু ১৪.০৪-তে কিছু আশ্চর্যজনক আচরণ পেয়েছি , যার উপর আমার পড়ার অনুমতি নেই। আমি ভাবছি যদি এটি কোনও বাগ হয়, বা যদি কিছু মানক এই অস্পষ্ট আচরণ নির্দেশ করে।

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

$ /bin/sleep 100 &
[2] 8078
$ strace -p 8078
Process 8078 attached
restart_syscall(<... resuming interrupted call ...>

পরবর্তী আমি একটি এক্সিকিউটেবলের সাথে চেষ্টা করি, যার উপর আমার কোনও পড়ার অনুমতি নেই:

---x--x--x 1 root root 26280 Sep  3 09:37 sleep*

এই চলমান প্রক্রিয়া সংযুক্ত করার অনুমতি নেই:

$ ./sleep 100 &
[1] 8089
$ strace -p 8089
strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

এটিও আমি প্রত্যাশা করতাম। পড়ার অনুমতি ব্যতীত মৃত্যুদন্ড কার্যকর করার অনুমতি প্রদান করা খুব ভাল কাজ করে না, যদি আমি কেবল প্রক্রিয়াটির সাথে কোনও ডিবাগার সংযুক্ত করতে পারি এবং কার্যকরভাবে কার্যকর করা যায় এমন পদ্ধতিতে অনুমতিগুলি পড়তে পারি।

তবে যদি আমি ইতিমধ্যে সনাক্ত করা প্রক্রিয়াটির অধীনে এক্সিকিউটেবল শুরু করি তবে আমাকে তা করার অনুমতি দেওয়া হবে:

$ strace ./sleep 100
execve("./sleep", ["./sleep", "100"], [/* 69 vars */]) = 0
brk(0)                                  = 0x9b7a000

এটি আমার জন্য অপ্রত্যাশিত। এটি কি সুরক্ষা বাগ, বা এটি কোনও মানক দ্বারা বাধ্যতামূলক কোনও বৈশিষ্ট্য?


3
@ StéphaneChazelas: পয়েন্ট যে তিনি করতে পারেন এটা ptrace কেবল strace, করতে আর্গুমেন্ট হিসাবে এটি ব্যবহার করে। এর মূল কারণটি মনে হয় যে execveকলগুলি করার সময়, প্রক্রিয়াটি ইতিমধ্যে চিহ্নিত করা থাকলে এক্সিকিউট করা ফাইলের অনুমতিগুলি পুনরায় পরীক্ষা করা হয় না। তাঁর প্রশ্ন কিনা তা ব্যবহারকারীকে যে একটি নিরাপত্তা বাগ অথবা একটি বাধ্যতামূলক বৈশিষ্ট্য (যদি আধুনিক, আমি এখনও এটি একটি নিরাপত্তা বাগ, স্পেসিফিকেশন শুধু একটি নিরাপত্তা বাগ বিবেচনা চাই) হয়।
celtschk

@ এসলেটস্ক, দুঃখিত, আমি প্রশ্নটি খুব দ্রুত পড়েছি।
স্টাফেন চেজেলাস

1
দেখে EPERMমনে হচ্ছে get_dumpable()(কোর ডাম্পিং অনুমোদিত কিনা তা পরীক্ষা করার জন্যও ব্যবহৃত হয়, এভাবে "ডাম্পেবল") কল __ptrace_may_access()থেকে কল করা ptrace_attach()হয়েছিল kernel/ptrace.c
নিনজালজ

যখন কোনও প্রোগ্রাম চলমান থাকে, তখন কি তার কোড সমেত চালানোযোগ্য এক্সিকিউটেবল তৈরি করার জন্য ডিবাগরের পক্ষে পর্যাপ্ত তথ্য পাওয়া যাবে বা প্রোগ্রাম লোডার কোনও প্রোগ্রামকে বাস্তবে কাজ করার জন্য প্রয়োজনীয় স্থানান্তরের ফিক্সআপের মতো জিনিসগুলি ফেলে দেবে?
সুপারক্যাট

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

উত্তর:


7

এটি কোনও উত্তর নয়, বরং অন্য কেউ পড়াশোনা করতে চাইলে লিঙ্ক এবং চিন্তার সংকলন। কারণ এটি বেশ আকর্ষণীয় বিষয়।

ইউনিক্স ও লিনাক্স সম্পর্কিত সম্পর্কিত উত্তরটি উল্লেখ করা হয়েছে (বা এখনই ভ্যানিলা কার্নেল দিয়ে পরীক্ষা করতে পারে না) কেবল বাইনারিগুলি এইভাবে পড়তে দেওয়া সম্ভব।

গার্সিকিউরিটি এই কনফিগার বিকল্পটি এবং প্যাচটি নিজেই ঠিক করার চেষ্টা করছিল (পরে এটি সম্ভবত পরিবর্তিত হতে পারে)

এই প্রতিশ্রুতিটি সত্যই এটি দেখে মনে হয় যে, কার্নেল বিকাশকারীরা কেবলমাত্র সুইড বাইনারিগুলি ডাম্পিংয়ের বিষয়ে যত্নশীল।

তবে আসলে এই লাইন থেকে আমি অনুমান করি যে কার্নেল SID স্থিতির অপঠনযোগ্য বাইনারিগুলি ডাম্পিং করা আটকাতে চায়। এবং এই লাইনটি পরামর্শ দেয় যে বাইনারিগুলি যা ডাম্পেবল নয় তা ট্রেসযোগ্য নয়।

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

সম্পাদনা করুন: ডিবাগার সম্পর্কিত আরও একটি সন্ধান, মূল পোস্টে মন্তব্যে উল্লিখিত - দ্রুত স্ট্র্যাসিং থেকে (আবার) আমার কাছে মনে হয়, জিডিবি ট্রেসড বাইনারি ব্যবহার করে এবং /proc/<pid>/mem। একবার চলমান বাইনারিটি পাঠযোগ্য না হয়ে cat /proc/<pid>/memফিরে আসে EPERM। বাইনারি যদি পাঠযোগ্য হয় তবে এটি ফিরে আসে EIO। (এটি উবুন্টু ১৪.১০ তে পরীক্ষা করা হয়েছে, যা বেশ কয়েকটি সুরক্ষা প্যাচ চালায়, তাই এটি ভ্যানিলা কার্নেল থেকে আলাদা হতে পারে Again আবার আমার কাছে ভ্যানিলা কার্নেল চালানো আর নেই):)

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