SELinux নীতি লঙ্ঘন ট্রিগার করার উপায়?


12

আমি সেলইনাক্সের বেসিক ওয়ার্কিং অধ্যয়ন করছি এবং অস্বীকার ট্রিগার করতে এটি দরকারী মনে হয়। আমার টেস্ট মেশিনটি সেন্টোস 7 চালাচ্ছে, এটি কোনও অতিরিক্ত পরিষেবা ছাড়াই একটি বেসিক সার্ভার ইনস্টল করে এবং জেনেটফোর্স 'এনফোর্সিং' বলে। সুতরাং আমি নিশ্চিত হয়েছি যে / মূলকে বিশ্ব-পঠনযোগ্য করে তোলা এবং একটি অবাঞ্ছিত ব্যবহারকারী হিসাবে সেখান থেকে ফাইলগুলি পড়ার চেষ্টা করা কৌশলটি করতে পারে। তবে ভাগ্য নেই! যে কেউ কিছু দ্রুত পরীক্ষার পরামর্শ দিতে পারে? পাথ অ্যাক্সেস করার চেষ্টা করে, বা পোর্টগুলি খুলতে ইত্যাদি

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

পরীক্ষার অংশ হিসাবে তারা ডিফল্টরূপে হবে তার চেয়ে কম সীমাবদ্ধ করার জন্য আমার ডিএসি (অর্থাত্ ফাইলসस्टम অনুমতি) সংশোধন করতে সমস্যা নেই।


1
আপনার প্রতিরক্ষামূলক সিস্টেমগুলি কীভাবে ট্রিগার করবেন তা জেনে +1 করা যাতে আপনি যাচাই করতে পারেন যে তারা কাজ করছে কি না তা একটি অত্যাবশ্যক এবং খুব অবিচ্ছিন্ন পদক্ষেপ।
gowenfawr

আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এটি ইউনিক্স এবং লিনাক্স এসই এর অন্তর্গত।
চিহ্নিত করুন

উত্তর:


3

তৃতীয় পক্ষের / আপনার নিজস্ব বিকাশকারী কোডের জন্য বাগ সনাক্তকরণে SELinux এর ইউটিলিটিটি প্রদর্শনের জন্য, এখানে একটি মেমরি সুরক্ষা পরীক্ষা ( এখানে প্রথম কোডের উদাহরণটি সংশোধন করে ):

#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>

int main (void) {
  // open file read-write, get a memory-mapped pointer with private access, write permission
  int fd = open ("file_to_test", O_RDWR);
  char *p = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);

  p[0] = 'a';   // put something

  // Update protection mode; SELinux response depends on sebool: allow_execmod
  int r = mprotect (p, 42, PROT_READ | PROT_EXEC);

  // Display mprotect result
  printf ("mprotect = %d\n", r);

  close(fd);
  return 0;
}
সংকলন এবং ডিফল্ট দেখান (ধরা পড়ে না)
$ echo "test data" > file_to_test
$ gcc execmod.c 

$ ./a.out 
mprotect = 0

$ sudo aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
<no events of interest were found>

সমস্যাটি ধরার জন্য বুলিয়ানগুলি পরিবর্তন করুন:

$ sudo getsebool allow_execmod
allow_execmod --> on

$ sudo setsebool allow_execmod 0
$ ./a.out 
mprotect = -1

$ sudo aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
1. 04/30/2015 12:26:41 a.out unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 10 file execmod unconfined_u:object_r:user_home_t:s0 denied 3612

এটি অবশ্যই কার্যকর এবং ডকুমেন্টেড (+1), যদিও আমি কোনও প্রোগ্রামার নই এবং কোডটি সত্যই বুঝতে পারি না। শেল, নেটকাট, টেলনেট ইত্যাদি সাধারণ কমান্ড লাইন সরঞ্জাম ব্যবহার করে আমি সেলইনাক্স একটি বন্দর খোলার প্রচেষ্টা অস্বীকার করার বা কোনও পথ অ্যাক্সেস করার অস্বীকার করার একটি স্পষ্ট উদাহরণ দেখতে চাই I
চিন্তাশীল

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

3

এটি স্পষ্টতই একটি ম্যাক নীতি প্রদর্শন করে যেখানে সেন্টোস 7 এর বেস ইনস্টলটিতে একটি সমতুল্য ড্যাককে বাইপাস করা যেতে পারে।

  1. ডিফল্টরূপে (লেখার সময় সেন্টোসে) অনিবদ্ধ, নন-সিস্টেম ব্যবহারকারীরা 'আন-কনফাইনড_উ' ভূমিকা হিসাবে লগ ইন করেন। তবে আমরা আমাদের সিস্টেমটি পরিবর্তন করতে পারি যাতে আমাদের অনিবদ্ধ ব্যবহারকারী 'এলিস' এর পরিবর্তে 'ব্যবহারকারী_উ' ভূমিকাতে রাখে। কেবলমাত্র অল্প পরিমাণে অতিরিক্ত কনফিগারেশন দিয়ে এই ভূমিকাটি পরিষ্কারভাবে সীমাবদ্ধ করতে ডিফল্ট নীতিগুলি তৈরি করা যেতে পারে।

    [root]# echo "alice:user_u:s0-s0:c0.c1023" >> /etc/selinux/targeted/seusers
    
  2. এখন এই ব্যবহারকারীদের তাদের হোম ডিরেক্টরি এবং / tmp এ থাকা ফাইলগুলি কার্যকর করতে সক্ষমতার স্যুইচ করুন। আবার, ডিফল্ট হ'ল এই আচরণের অনুমতি দেওয়া। এই আদেশটি সম্পূর্ণ হতে কিছুক্ষণ সময় নিতে পারে

    [root]# setsebool -P user_exec_content off
    
  3. এখন (আমাদের অবাঞ্ছিত ব্যবহারকারীর সাথে) আমরা লগ ইন করতে পারি এবং এর কোনও গো অঞ্চলগুলিতে কিছু চালানোর চেষ্টা করতে পারি। যেমন আপনি দেখতে পাচ্ছেন, আমরা অস্বীকৃত।

    [alice]$ cp /bin/ls /tmp/
    [alice]$ /tmp/ls
    -bash: /tmp/ls: Permission denied
    
  4. পরিশেষে, আমরা আমাদের সেলিনাক্স অস্বীকার দেখতে AVC লগটি দেখতে পারি।

    [root]# aureport -a
    
    AVC Report
    ========================================================
    # date time comm subj syscall class permission obj event
    ========================================================
    1. 02/05/15 21:08:33 bash user_u:user_r:user_t:s0 59 file execute user_u:object_r:user_tmp_t:s0 denied 693
    

আরে হ্যাঁ যে কাজ করে! আমি বিশেষভাবে পছন্দ করি যে আপনি এই "কোনও নির্বাহী সামগ্রী নয়" পদ্ধতির পছন্দ করেছেন, কারণ এটি অবশ্যই ধরা উচিত। আমি প্রথম স্থানে সম্পাদনযোগ্য সৃষ্টি রোধ করতে অডিটকে অগ্রাধিকার দেয়ার ঝোঁক রেখেছি, তবে আমি এটিও পছন্দ করি। একটি ব্যবহারের কেস: আমি একটি সাধারণ মেঘ-ভিত্তিক পরিষেবা ব্যবহার করি যা নতুন সফ্টওয়্যার ইনস্টল করা কঠিন করে তোলে (আপনাকে তাদের প্যাকেজ ম্যানেজারটি ব্যবহার করতে হবে, এবং কোনও সুডো নেই), তবে এর কোনও সামান্য বক্তব্য নেই; তারা সৃষ্টি বা সম্পাদনকে অবরুদ্ধ করে না এবং তারা বিকাশকারী পরিবেশ ... তাই আমি কেবল আমার প্রয়োজনীয় প্যাকেজগুলি wget / scp করে সেগুলি সংকলন করি। +1
বি

1

আপনি সিস্টেম-কনফিগারেশন-সেলিনাক্সের বুলিয়ান ট্যাবে আপনার নীতিগুলি পরিবর্তন না করে (বা / ইত্যাদি / সেলিনাক্স / নীতিতে), তারপরে ডিফল্টটিকে নিম্নলিখিতটির (এনবি) প্রতিক্রিয়া জানানো উচিত, আপনি গভীরতর ডাইভের জন্য সেটবলবলুটও ইনস্টল করতে চাইতে পারেন) :

mkdir -m 755 -p / ইনস্টল / কেএস

cp /root/anaconda-ks.cfg / ইনস্টল / কেএস

chmod 644 /install/ks/anaconda-ks.cfg

তারপরে, আপনার ওয়েব সার্ভারটি পুনরায় চালু করুন এবং আপনার ওয়েব ব্রাউজারের সাথে http: // লোকালহোস্ট / কেএস অ্যাক্সেস করার চেষ্টা করুন । আপনার একটি "নিষিদ্ধ" বার্তাটি দেখা উচিত। আপনি যদি লেজ রাখেন /var/log/audit/audit.logবা চালনা করেন ausearch -m avc -ts recentতবে আপনার বার্তাটি দেখতে পারা উচিত:type=AVC msg=audit(1391277951.222:266): avc: denied { read } for pid=1731 comm="httpd" name="ks" dev=sda1 ino=22351 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined u:object r:default t:s0 tclass=dir

তারপরে আপনি সেলইনাক্স প্রসঙ্গটি পরিবর্তন করতে পারেন chcon -Rv --reference /var/www/html /install/ksযদি আপনি SELinux অক্ষম করতে না চান তবে উত্স অ্যাক্সেস করতে সক্ষম হন।

সম্পাদনা: দুঃখিত, আপনি "ওয়েবসভার নয়" বলেছিলেন তা দেখেনি। chcon -u fake_u <filename>একটি সিস্টেম ফাইলে একটি অনিবদ্ধ অ্যাকাউন্ট ব্যবহার করার চেষ্টা করুন।


আমি আপনার দ্বিতীয় পরামর্শটি কাজ করতে পেলাম না (নতুন তৈরি হওয়া ব্যবহারকারীকে ব্যবহার করে)। আমি বরং আরও পরীক্ষা করতাম যে আরও জেনেরিক ছিল, ম্যাকের একটি উদাহরণ যেখানে ডিএসি এটির অনুমতি দিতত: উদাহরণস্বরূপ, এসইএলিনাক্স লেবেলিংয়ের প্রশাসনিক পরিবর্তনগুলির বিরুদ্ধে সেলইনাক্স কতটা ভাল রক্ষা করতে পারে তা এই পরীক্ষা করে।
চিন্তাশীল

0

দুটি ছোট প্যাকেজ ইনস্টল করুন - কোনও নির্ভরতা নেই

  yum install -y vsftpd lftp

একটি এফটিপি সার্ভার শুরু করুন

  systemctl start vsftpd

রুটের বাড়িতে একটি ফাইল তৈরি করুন

  touch ~/tux.tch

রুটের বাড়ি থেকে এফটিপি ডিরেক্টরিতে যান।
দ্রষ্টব্য: সরান, অনুলিপি করবেন না বা ফাইলটির ফন্টেক্সট পরিবর্তন হবে

  mv ~/tux.tch /var/ftp/pub

আপনার এফটিপি সার্ভারে এফটিপি ক্লায়েন্ট ব্যবহারকারী হিসাবে লগইন করুন এবং নতুন ফাইলটি অ্যাক্সেস করার চেষ্টা করুন।
দ্রষ্টব্য: ট্যাব স্বতঃপূরণ এখানে কাজ করবে না

  lftp localhost
    ls pub/tux.tch
    exit

কাঁচা লগগুলিতে অস্বীকারটি দেখুন

  grep AVC /var/log/audit/audit.log

বা আপনি setroubleshoot*ইনস্টল করা আছে

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