কীভাবে আমি মারার জন্য একটি কঠিন প্রক্রিয়া তৈরি করতে পারি


10

আমি এমন একটি প্রোগ্রাম তৈরি করতে চাই যা একবার চালু করার পরেও (এমনকি প্রশাসকের পক্ষে) কঠিন হয়ে উঠবে (মূল অধিকার সহ)। একবার শুরু হয়ে গেলে প্রক্রিয়াটি শুরু করতে বলা অবধি স্টার্টআপে নিজেকে শুরু করা উচিত। থামার প্রক্রিয়াটিতে কিছুটা সময় নেওয়া উচিত (অর্থাত্ ব্যয়বহুল হওয়া উচিত)।

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

যে সমাধানটি আমি ভেবেছিলাম তা হ'ল নিম্নলিখিত-

  1. প্রক্রিয়াটি প্রতিবার চালিত হওয়ার সাথে সাথে একটি পৃথক নামের সাথে চালানো উচিত, যাতে আমি প্রক্রিয়াটির নামটি পূর্বাভাস দিতে পারি না এবং এটি হত্যা করতে পারি না।

  2. প্রক্রিয়াটি শাটডাউনে নিজেকে /etc/rc5.d এ সংরক্ষণ করবে

  3. প্রক্রিয়াটি কিছু পরিচিত স্থানে সাইফার ব্যবহার করে এর নামটি এনক্রিপ্ট করবে। থামানোর প্রক্রিয়াটিকে প্রোগ্রামটির নামটি পুনরুদ্ধার করতে এবং হত্যা করতে ব্রুটেফোর্স ব্যবহার করতে হবে।

আমি এই কাজের জন্য একটি ভাল সমাধান খুঁজতে চাই।


2
আপনি আসলেই সঠিক, এটি খুব গড়ের মতো প্রোগ্রামের মতো শোনাচ্ছে
কিউই

সাংস্কৃতিক ওয়েব সাইটগুলি ... হ্যাঁ আমি বুঝতে পারি। আমি মনে করি ভুল
ডিএনএসের

@ কিউই হ্যাঁ এটি একটি বিকল্প, তবে তারপরে আমি ঠিক ঠিক ডিএনএস পুনরায় ইনস্টল করতে পারি?
মিহির

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

হ্যাঁ তবে এটি সহজ 2 মিনিটের কাজ হওয়া উচিত নয়।
মিহির

উত্তর:


8

একটি পদ্ধতির পিআইডি নেমস্পেস ব্যবহার করা যেতে পারে:

আপনার সিস্টেমকে init=/some/cmdকার্নেল প্যারামিটার হিসাবে বুট করুন , যেখানে /some/cmdনতুন নামস্থান ( CLONE_NEWPID) -তে একটি প্রক্রিয়া শুরু হয় /sbin/initএবং এটি চালিত হয় (এটি নতুন নামস্থানে পিআইডি 1 এবং মূল নামস্থানে পিড 2 থাকবে), তারপরে পিতামাতার মধ্যে, আপনার চালনা করুন " কার্যক্রম".

আপনি সম্ভবত আপনার প্রোগ্রামটিকে কোনও উপায়ে বা অন্য কোনও উপায়ে নিয়ন্ত্রণের উপায় চাইবেন (উদাহরণস্বরূপ টিসিপি বা অ্যাবস্ট্রাক্ট ইউনিক্স সকেট)।

আপনি সম্ভবত মেমরিতে আপনার প্রোগ্রামটি মলক করতে এবং ফাইল সিস্টেমের সর্বাধিক উল্লেখগুলি বন্ধ করতে চান যাতে এটি কোনও কিছুর উপর নির্ভর করে না।

প্রক্রিয়াটি বাকি সিস্টেম থেকে দেখা যাবে না be সিস্টেমের বাকী অংশগুলি কার্যকরভাবে একটি পাত্রে চালিত হবে।

যদি সেই প্রক্রিয়াটি মারা যায়, কার্নেল আতঙ্কিত হবে যা আপনাকে অতিরিক্ত গ্যারান্টি দেয়।

কোনও অসুবিধাজনক পার্শ্ব-প্রতিক্রিয়া হ'ল আমরা এর আউটপুটে কার্নেল থ্রেড দেখতে পাচ্ছি না ps

ধারণার প্রমাণ হিসাবে ( একটি কেমু ভার্চুয়াল মেশিনে আপনার সিস্টেমের অনুলিপি বুট করার জন্য এই কৌশলটি ব্যবহার করে ):

একটি /tmp/initমত তৈরি করুন :

#! /bin/sh -
echo Starting
/usr/local/bin/unshare -fmp -- sh -c '
  umount /proc
  mount -nt proc p /proc
  exec bash <&2' &
ifconfig lo 127.1/8
exec socat tcp-listen:1234,fork,reuseaddr system:"ps -efH; echo still running"

(আপনার unshareইউজ-লিনাক্সের সাম্প্রতিক সংস্করণ (2.14) থেকে দরকার)। উপরে আমরা socat"প্রোগ্রাম" হিসাবে ব্যবহার করছি যা কেবলমাত্র আউটপুট দিয়ে 1234 পোর্টে টিসিপি সংযোগগুলিতে উত্তর দেয় ps -efH

তারপরে আপনার ভিএম বুট করুন:

kvm -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) \
    -m 1024 -fsdev local,id=r,path=/,security_model=none \
    -device virtio-9p-pci,fsdev=r,mount_tag=r -nographic -append \
    'root=r rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/tmp/init rw'

তারপরে, আমরা দেখতে পাই:

Begin: Running /scripts/init-bottom ... done.
Starting
[...]
root@(none):/# ps -efH
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 14:24 ?        00:00:00 bash
root         4     1  0 14:24 ?        00:00:00   ps -efH
root@(none):/# telnet localhost 1234
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 14:24 ?        00:00:00 [kthreadd]
root         3     2  0 14:24 ?        00:00:00   [ksoftirqd/0]
[...]
root         1     0  2 14:24 ?        00:00:00 socat tcp-listen:1234,fork,reuseaddr system:ps -efH; echo still running
root       204     1  0 14:24 ?        00:00:00   /usr/local/bin/unshare -fmp -- sh -c    umount /proc   mount -nt proc p /proc   exec bash <&2
root       206   204  0 14:24 ?        00:00:00     bash
root       212   206  0 14:25 ?        00:00:00       telnet localhost 1234
root       213     1  0 14:25 ?        00:00:00   socat tcp-listen:1234,fork,reuseaddr system:ps -efH; echo still running
root       214   213  0 14:25 ?        00:00:00     socat tcp-listen:1234,fork,reuseaddr system:ps -efH; echo still running
root       215   214  0 14:25 ?        00:00:00       sh -c ps -efH; echo still running
root       216   215  0 14:25 ?        00:00:00         ps -efH
still running
Connection closed by foreign host.
root@(none):/# QEMU: Terminated

তবে কি আমি কি বুটফাইলটি আরম্ভ করতে / কিছু / সেন্টিমিটারে পরিবর্তন করতে পারি না?
মিহির

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

1

নিশ্চিত না যে এটি চূড়ান্ত সমাধান কিনা বা এটি করার সর্বোত্তম উপায়। আমার মতামত:

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

  • একটি কার্নেল মডিউল তৈরি করুন এবং এটির উপর নির্ভর করে সমালোচনামূলক মডিউলগুলি লোড করুন (এটি মারা গেলে এটি initউদাহরণের মতো একটি চেইন প্রতিক্রিয়া সৃষ্টি করবে )।

  • নির্দিষ্ট প্রক্রিয়াটির জন্য কিল অনুরোধগুলি উপেক্ষা করতে কার্নেলটি পরিবর্তন করুন।

মনে রাখবেন যে শেষ দুটি কার্নেল মোডে চলবে (যা libs এর ক্ষেত্রে খুব সীমিত এবং তাই)। সংশোধন initকরা ইউজারস্পেসে চলবে আপনাকে এর অনেকগুলি বৈশিষ্ট্য ব্যবহার করতে দেয়।


1
এটি সত্যই নিরাপদ কিনা তা নিশ্চিত নয়।
তিনটি

এবং কিভাবে প্রক্রিয়া বন্ধ?
মিহির

এটি সফ্টওয়্যার নিজেই করা প্রয়োজন। আপনাকে সফ্টওয়্যারটি বন্ধ করার জন্য অনুরোধ করার একটি উপায় তৈরি করতে হবে। ধরা যাক এর একটি থ্রেড রয়েছে যা একটি ফাইল যেমন: /var/lib/stop.request চেক করে। যদি এই ফাইলটিতে একটি পাসওয়ার্ড এক্স থাকে তবে সফ্টওয়্যারটি যে কাজ করছে তা বন্ধ করে এবং এক ধরণের স্লিপ মোডে প্রবেশ করে। আপনি অন্য একটি ফাইল /var/lib/start.request তৈরি করে এটি পুনরায় সক্ষম করতে পারেন।
তিনটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.