আপনার যা যা প্রয়োজন তা এখানে বর্ণিত
কার্নেল মডিউল স্বাক্ষর করার সুযোগ
সুচিপত্র
- সংক্ষিপ্ত বিবরণ।
- মডিউল স্বাক্ষর কনফিগার করা।
- স্বাক্ষর কীগুলি তৈরি করা হচ্ছে।
- কার্নেলের সর্বজনীন কীগুলি।
- মডিউল ম্যানুয়ালি স্বাক্ষর।
- স্বাক্ষরিত মডিউল এবং স্ট্রিপিং।
- স্বাক্ষরিত মডিউলগুলি লোড হচ্ছে।
- অ-বৈধ স্বাক্ষর এবং স্বাক্ষরবিহীন মডিউল।
- প্রাইভেট কীটি পরিচালনা / সুরক্ষিত করা।
এক নজরে
কার্নেল মডিউল স্বাক্ষরকরণ সুবিধাটি ক্রিপ্টোগ্রাফিকভাবে ইনস্টলেশনের সময় মডিউলগুলিতে স্বাক্ষর করে এবং তারপরে মডিউলটি লোড করার পরে স্বাক্ষরটি পরীক্ষা করে। এটি একটি অবৈধ কী সহ স্বাক্ষরযুক্ত স্বাক্ষরযুক্ত মডিউল বা মডিউলগুলি লোড করার বিষয়টি অস্বীকার করে কার্নেল সুরক্ষাকে বাড়িয়ে দেয়। মডিউল সাইন ইন কর্নেলের মধ্যে একটি দূষিত মডিউল লোড করা শক্ত করে সুরক্ষা বাড়ায়। মডিউল স্বাক্ষর যাচাই কর্নেল দ্বারা সম্পন্ন করা হয় যাতে বিশ্বস্ত ব্যবহারকারী স্থান বিট থাকা প্রয়োজন হয় না।
এই সুবিধাটি জড়িত পাবলিক কীগুলি এনকোড করতে X.509 ITU-T মানক শংসাপত্র ব্যবহার করে। স্বাক্ষরগুলি কোনও শিল্পকৌশল স্ট্যান্ডার্ড প্রকারে নিজেরাই এনকোড করা হয় না। সুবিধাটি বর্তমানে কেবল আরএসএ সর্বজনীন কী এনক্রিপশন মানকে সমর্থন করে (যদিও এটি প্লাগযোগ্য এবং অন্যকে ব্যবহারের অনুমতি দেয়)। যে সম্ভাব্য হ্যাশ অ্যালগরিদমগুলি ব্যবহার করা যেতে পারে সেগুলি হ'ল SHA-1, SHA-224, SHA-256, SHA-384 এবং SHA-512 (স্বাক্ষরে ডেটা দ্বারা অ্যালগোরিদম নির্বাচন করা হয়)।
মডেল সাইন ইন কনফিগারিং
মডিউল স্বাক্ষর করার সুবিধাটি কার্নেল কনফিগারেশনের "লোডযোগ্য মডিউল সমর্থন সক্ষম করুন" বিভাগে গিয়ে চালু করে সক্ষম করা হয়েছে
CONFIG_MODULE_SIG "Module signature verification"
এটিতে প্রচুর বিকল্প উপলব্ধ রয়েছে:
"বৈধভাবে স্বাক্ষরিত হওয়ার জন্য মডিউলগুলি প্রয়োজন" (CONFIG_MODULE_SIG_FORCE)
এটি নির্দিষ্ট করে যে কার্নেলটি এমন একটি মডিউলের সাথে কীভাবে আচরণ করবে যেখানে একটি স্বাক্ষর রয়েছে যার জন্য কীটি জানা নেই বা মডিউল যা স্বাক্ষরযুক্ত নয়।
যদি এটি বন্ধ থাকে (উদাহরণস্বরূপ "অনুমতিমূলক"), তবে যে মডিউলগুলির জন্য কীটি উপলভ্য নয় এবং যে মডিউলগুলি স্বাক্ষরযুক্ত নয় সেগুলি অনুমোদিত, তবে কার্নেলটি দাগযুক্ত হিসাবে চিহ্নিত করা হবে, এবং সংশ্লিষ্ট মডিউলগুলি দাগযুক্ত হিসাবে চিহ্নিত করা হবে, দেখানো হবে চরিত্রটি 'ই' দিয়ে।
যদি এটি চালু থাকে (অর্থাত্ "নিষিদ্ধ"), কেবলমাত্র মডিউলগুলির বৈধ স্বাক্ষর রয়েছে যা কার্নেলের অধিকারে পাবলিক কী দ্বারা যাচাই করা যেতে পারে load অন্যান্য সমস্ত মডিউল ত্রুটি উত্পন্ন করবে।
এখানে সেটিং নির্বিশেষে, মডিউলে যদি স্বাক্ষর ব্লক থাকে যা পার্স করা যায় না, এটি হাতছাড়া হয়ে যাবে।
"সমস্ত মডিউল স্বয়ংক্রিয়ভাবে স্বাক্ষর করুন" (CONFIG_MODULE_SIG_ALL)
যদি এটি চালু থাকে তবে কোনও বিল্ডের মডিউল_ইনস্টল পর্যায়ে মডিউলগুলি স্বয়ংক্রিয়ভাবে স্বাক্ষরিত হবে। যদি এটি বন্ধ থাকে তবে মডিউলগুলি ম্যানুয়ালি স্বাক্ষর করে অবশ্যই ব্যবহার করতে হবে:
scripts/sign-file
"কোন হ্যাশ অ্যালগরিদম মডিউলগুলির সাথে স্বাক্ষর করা উচিত?"
এটি হ্যাশ অ্যালগরিদম যার মধ্যে ইনস্টলেশন পর্ব মডিউলগুলির সাথে স্বাক্ষর করবে তার একটি পছন্দ উপস্থাপন করে:
CONFIG_MODULE_SIG_SHA1 "Sign modules with SHA-1"
CONFIG_MODULE_SIG_SHA224 "Sign modules with SHA-224"
CONFIG_MODULE_SIG_SHA256 "Sign modules with SHA-256"
CONFIG_MODULE_SIG_SHA384 "Sign modules with SHA-384"
CONFIG_MODULE_SIG_SHA512 "Sign modules with SHA-512"
এখানে নির্বাচিত অ্যালগরিদমটি কার্নেলেও তৈরি করা হবে (মডিউল হওয়ার পরিবর্তে) যাতে সেই অ্যালগরিদমের সাথে স্বাক্ষরিত মডিউলগুলি নির্ভরতা লুপের কারণ ছাড়াই তাদের স্বাক্ষরগুলি পরীক্ষা করতে পারে।
"মডিউল স্বাক্ষরকরণ কীটির ফাইলের নাম বা পিকেসিএস # 11 ইউআরআই" (CONFIG_MODULE_SIG_KEY)
এই বিকল্পটি এর "ডিগ্রি / সাইন্টি_কি.পিএম" এর ডিফল্ট ব্যতীত অন্য কোনও কিছুর জন্য সেট করা স্বাক্ষরকারী কীগুলির স্বয়ংক্রিয়তা অক্ষম করবে এবং কার্নেল মডিউলগুলিকে আপনার পছন্দের কীতে স্বাক্ষর করার অনুমতি দেবে। স্ট্রিংটিতে একটি প্রাইভেট কী এবং পিএম ফর্মের সাথে সম্পর্কিত X.509 শংসাপত্র উভয় সমন্বিত একটি ফাইল চিহ্নিত করা উচিত, বা - ওপেনএসএসএল ENGINE_pkcs11 কার্যক্ষম - এমন একটি পিকেসিএস # 11 ইউআরআই আরএফসি 7512 দ্বারা সংজ্ঞায়িত করা হয়েছে। পরবর্তী ক্ষেত্রে, পিকেসিএস # 11 ইউআরআইয়ের শংসাপত্র এবং একটি প্রাইভেট কী উভয়ই উল্লেখ করা উচিত।
প্রাইভেট কী থাকা পিইএম ফাইলটি যদি এনক্রিপ্ট করা থাকে, বা যদি পিকেসিএস # 11 টোকেনটি একটি পিনের পুনর্বিবেচনা করে থাকে তবে এটি KBUILD_SIGN_PIN ভেরিয়েবলের মাধ্যমে বিল্ড টাইম সরবরাহ করা যেতে পারে।
"ডিফল্ট সিস্টেম কীরিংয়ের জন্য অতিরিক্ত X.509 কী" (CONFIG_SYSTEM_TRUSTED_KEYS)
এই অপশনটি অতিরিক্ত শংসাপত্রযুক্ত একটি পিইএম-এনকোডযুক্ত ফাইলের ফাইল নেমে সেট করা যেতে পারে যা ডিফল্টরূপে সিস্টেমের কীরিংয়ের অন্তর্ভুক্ত হবে।
নোট করুন যে মডিউল সাইন ইন সক্ষম করা ওপেনএসএসএল ডেভেল প্যাকেজগুলির উপর নির্ভরশীলতা যোগ করে সেই সরঞ্জামটির জন্য কার্নেল বিল্ড প্রক্রিয়াগুলিতে।
স্বাক্ষরকারী কীগুলি জেনারেট করা
স্বাক্ষর উত্পন্ন করতে এবং পরীক্ষা করতে ক্রিপ্টোগ্রাফিক কিপাইগুলির প্রয়োজন। একটি স্বতন্ত্র কী একটি স্বাক্ষর তৈরি করতে ব্যবহৃত হয় এবং সংশ্লিষ্ট পাবলিক কী এটি পরীক্ষা করতে ব্যবহৃত হয়। প্রাইভেট কীটি কেবল বিল্ড করার সময় প্রয়োজন হয়, এর পরে এটি মুছতে বা সুরক্ষিতভাবে সংরক্ষণ করা যেতে পারে। পাবলিক কী কার্নেলের মধ্যে তৈরি হয়ে গেছে যাতে এটি মডিউলগুলি লোড হওয়ায় স্বাক্ষরগুলি যাচাই করতে ব্যবহৃত হতে পারে।
সাধারণ পরিস্থিতিতে, যখন CONFIG_MODULE_SIG_KEY এটির ডিফল্ট থেকে অপরিবর্তিত থাকে, কার্নেল বিল্ডটি ওপেনসেল ব্যবহার করে স্বয়ংক্রিয়ভাবে একটি নতুন কী তৈরি করবে যদি ফাইলটিতে উপস্থিত না থাকে:
certs/signing_key.pem
ভিএমলিনাক্স নির্মাণের সময় (কীটির সার্বজনীন অংশটি ভিএমলিনাক্সে তৈরি করা দরকার) প্যারামিটারগুলি ব্যবহার করে:
certs/x509.genkey
ফাইল (এটি ইতিমধ্যে বিদ্যমান না থাকলে উত্পন্ন হয়)।
আপনি নিজের x509.genkey ফাইল সরবরাহ করার জন্য দৃ strongly়ভাবে প্রস্তাব দেওয়া হচ্ছে।
উল্লেখযোগ্যভাবে, x509.genkey ফাইলে, req_distinguised_name বিভাগটি ডিফল্ট থেকে পরিবর্তন করা উচিত:
[ req_distinguished_name ]
#O = Unspecified company
CN = Build time autogenerated kernel key
#emailAddress = unspecified.user@unspecified.company
উত্পন্ন আরএসএ কী আকারটি এর সাথেও সেট করা যেতে পারে:
[ req ]
default_bits = 4096
লিনাক্স কার্নেল উত্স ট্রি এবং ওপেনসেল কমান্ডের মূল নোডে x509.genkey কী জেনারেশন কনফিগারেশন ফাইল ব্যবহার করে ম্যানুয়ালি কী বেসরকারী / সর্বজনীন ফাইলগুলি উত্পন্ন করা সম্ভব। নিম্নলিখিতটি সরকারী / ব্যক্তিগত কী ফাইলগুলি উত্পন্ন করার জন্য একটি উদাহরণ:
openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
-config x509.genkey -outform PEM -out kernel_key.pem \
-keyout kernel_key.pem
ফলস্বরূপ কার্নেল_কি.পিএম ফাইলের পুরো পথের নামটি তখন CONFIG_MODULE_SIG_KEY বিকল্পে নির্দিষ্ট করা যাবে এবং এতে শংসাপত্র এবং কীটি একটি স্বয়ংক্রিয় জেনারেটেড কী-পেয়ারের পরিবর্তে ব্যবহৃত হবে।
কার্নেল মধ্যে পাবলিক কী
কার্নেলে পাবলিক কীগুলির একটি রিং থাকে যা রুট দ্বারা দেখা যায়। তারা "। সিস্টেমে_কিরিং" নামক একটি কিরিং এ রয়েছে যা দ্বারা দেখা যেতে পারে:
[root@deneb ~]# cat /proc/keys
...
223c7853 I------ 1 perm 1f030000 0 0 keyring .system_keyring: 1
302d2d52 I------ 1 perm 1f010000 0 0 asymmetri Fedora kernel signing key: d69a84e6bce3d216b979e9505b3e3ef9a7118079: X509.RSA a7118079 []
...
মডিউল সাইন ইন করার জন্য বিশেষত উত্সাহিত সর্বজনীন কী বাদে, CONFIG_SYSTEM_TRUSTED_KEYS কনফিগারেশন বিকল্প দ্বারা রেফারেন্সযুক্ত একটি PEM- এনকোডড ফাইলে অতিরিক্ত বিশ্বস্ত শংসাপত্র সরবরাহ করা যেতে পারে।
আরও, আর্কিটেকচার কোডটি একটি হার্ডওয়্যার স্টোর থেকে পাবলিক কীগুলি নিতে পারে এবং সেগুলিতেও যোগ করতে পারে (যেমন ইউইএফআই কী ডাটাবেস থেকে)।
শেষ অবধি, এটি করে অতিরিক্ত পাবলিক কী যুক্ত করা সম্ভব:
keyctl padd asymmetric "" [.system_keyring-ID] <[key-file]
উদাহরণ:
keyctl padd asymmetric "" 0x223c7853 <my_public_key.x509
মনে রাখবেন, কার্নেলটি কেবলমাত্র। সিস্টেমে_কিরিং-তে যুক্ত করার অনুমতি দিবে যদি নতুন কীটির এক্স.509 র্যাপারটি কী যুক্ত হওয়ার সময় ইতিমধ্যে। সিস্টেমে_কিরিং-এ বসবাসকারী একটি কী দ্বারা বৈধভাবে স্বাক্ষরিত হয়।
ম্যানুয়ালি স্বাক্ষরকারী মডেলগুলি
মডিউলটিতে ম্যানুয়ালি স্বাক্ষর করতে, লিনাক্স কার্নেল উত্স ট্রিতে উপলব্ধ স্ক্রিপ্ট / সাইন-ফাইল সরঞ্জামটি ব্যবহার করুন। স্ক্রিপ্টটির জন্য 4 টি আর্গুমেন্ট প্রয়োজন:
1. The hash algorithm (e.g., sha256)
2. The private key filename or PKCS#11 URI
3. The public key filename
4. The kernel module to be signed
নিম্নলিখিতটি কার্নেল মডিউলটিতে স্বাক্ষর করার জন্য একটি উদাহরণ:
scripts/sign-file sha512 kernel-signkey.priv \
kernel-signkey.x509 module.ko
ব্যবহৃত হ্যাশ অ্যালগরিদমটি কনফিগার করা কোনওটির সাথে মেলে না, তবে এটি যদি না হয় তবে আপনাকে অবশ্যই নিশ্চিত করা উচিত যে হ্যাশ অ্যালগরিদম হয় কার্নেলের মধ্যে অন্তর্নির্মিত রয়েছে বা নিজের প্রয়োজন ছাড়াই লোড হতে পারে।
যদি ব্যক্তিগত কীটির কোনও পাসফ্রেজ বা পিন প্রয়োজন হয় তবে এটি $ KBUILD_SIGN_PIN এনভায়রনমেন্ট ভেরিয়েবলে সরবরাহ করা যেতে পারে।
স্বাক্ষরিত মডিউল এবং স্ট্রিপপিং
একটি স্বাক্ষরিত মডিউলটির শেষে একটি ডিজিটাল স্বাক্ষর যুক্ত হয়। স্ট্রিং "~ মডিউল স্বাক্ষর যুক্ত string" মডিউলটির শেষে ফাইলটি নিশ্চিত করে যে একটি স্বাক্ষর উপস্থিত রয়েছে তবে এটি স্বাক্ষর বৈধ কিনা তা নিশ্চিত করে না!
স্বাক্ষরযুক্ত সংজ্ঞায়িত ELF ধারকটির বাইরে হওয়ায় স্বাক্ষরযুক্ত মডিউলগুলি ব্রিটল হয়। স্বাক্ষর গণনা করা এবং সংযুক্ত করার পরে তারা এগুলি ছিনিয়ে নিতে পারে না। নোট করুন সম্পূর্ণ মডিউল হ'ল স্বাক্ষরিত পেডলোড সহ, সই করার সময় উপস্থিত যে কোনও এবং সমস্ত ডিবাগ তথ্য।
স্বাক্ষরিত মডেলগুলি লোড হচ্ছে
মডিউলগুলি ইনসোমড, মোডপ্রোব, ইনি_মডিউল () বা ফিনিট_মডিউল () দিয়ে লোড করা হয় ঠিক যেমন স্বাক্ষরযুক্ত মডিউলগুলির জন্য যেমন ইউজারস্পেসে কোনও প্রক্রিয়াজাতকরণ করা হয় না। স্বাক্ষর যাচাই সমস্ত কর্নেলের মধ্যে সম্পন্ন হয়।
নন-ভ্যালিড স্বাক্ষর এবং অসম্পূর্ণ মডিউলগুলি
যদি CONFIG_MODULE_SIG_FORCE সক্ষম করা থাকে বা এনফোর্সমোডিয়ুলস = 1 কার্নেল কমান্ড লাইনে সরবরাহ করা হয়, কার্নেল কেবলমাত্র বৈধ স্বাক্ষরিত মডিউলগুলি লোড করবে যার জন্য এটিতে সর্বজনীন কী রয়েছে। অন্যথায় এটি স্বাক্ষরবিহীন মডিউলগুলিও লোড করবে। যে কোনও মডিউল যার জন্য কার্নেলের একটি কী রয়েছে তবে যা স্বাক্ষর মেলে না তা প্রমাণ করে লোড করার অনুমতি দেওয়া হবে না।
অপ্রকাশনীয়যোগ্য স্বাক্ষরযুক্ত যে কোনও মডিউল প্রত্যাখ্যান করা হবে।
প্রাইভেট কী অ্যাডমিনিস্টারিং / রক্ষা করা
যেহেতু প্রাইভেট কীটি মডিউলগুলিতে স্বাক্ষর করতে ব্যবহৃত হয়, তাই ভাইরাস এবং ম্যালওয়্যার ব্যক্তিগত কীটি মডিউলগুলিতে সাইন করতে এবং অপারেটিং সিস্টেমের সাথে আপস করতে পারে। প্রাইভেট কীটি হয় হয় ধ্বংস করে দিতে হবে বা নিরাপদ স্থানে সরিয়ে নিতে হবে এবং কার্নেল উত্স গাছের মূল নোডে রাখা উচিত নয়।