லினக்ஸில் dm-verity ஐ எவ்வாறு பயன்படுத்துவது: ஒரு முழுமையான மற்றும் நடைமுறை வழிகாட்டி.

  • dm-verity, கையொப்பமிடப்பட்ட ரூட் ஹாஷ் மரத்தைப் பயன்படுத்தி, நம்பிக்கையின் துவக்கச் சங்கிலியை நங்கூரமிட்டு, உடனடியாகத் தொகுதிகளைச் சரிபார்க்கிறது.
  • அதன் நவீன பயன்பாடு கர்னல், initramfs மற்றும் cmdline ஐப் பாதுகாக்க veritysetup, systemd-veritysetup, Secure Boot மற்றும் UKI ஆகியவற்றை ஒருங்கிணைக்கிறது.
  • dm-verity அளவுருக்களை அனுப்ப Android system-as-root மற்றும் AVB ஐப் பயன்படுத்துகிறது; FEC மற்றும் எதிர்வினை கொள்கைகள் வலிமையை மேம்படுத்துகின்றன.
  • மாறாத ரூட் எழுதக்கூடிய தரவை (/var, /home) பிரித்து, படங்கள் அல்லது A/B திட்டங்களைப் பயன்படுத்தி புதுப்பிப்புகளை திட்டமிட வேண்டும்.

லினக்ஸில் dm-verity

உங்கள் அமைப்பின் நேர்மை குறித்து நீங்கள் கவலைப்பட்டால், dm-verity என்பது லினக்ஸ் சுற்றுச்சூழல் அமைப்பின் முக்கிய பகுதிகளில் ஒன்றாகும். பாதுகாப்பாக துவக்கவும் சேமிப்பக சேதத்தைக் கண்டறியவும். இது கர்னலின் சாதன மேப்பரின் ஒரு பகுதியாக உருவானது, இப்போது மேம்பட்ட பாதுகாப்பைத் தேடும் Android, OpenWrt மற்றும் விநியோகங்களில் சரிபார்க்கப்பட்ட துவக்கத்திற்கான அடிப்படையாக உள்ளது.

ஒரு அருவமான கருத்தாக இருப்பதற்குப் பதிலாக, dm-verity ஆனது veritysetup மற்றும் systemd-veritysetup போன்ற உண்மையான கருவிகளுடன் கட்டமைக்கப்பட்டு பயன்படுத்தப்படுகிறது.இது ஹாஷ் மரங்களைப் பயன்படுத்தி உடனடியாகத் தொகுதிகளைச் சரிபார்க்கிறது மற்றும் நிகழ்வை பதிவு செய்வதிலிருந்து கணினியை மறுதொடக்கம் செய்வது அல்லது செயலிழக்கச் செய்வது வரையிலான கொள்கைகள் மூலம் ஊழலுக்கு எதிர்வினையாற்ற முடியும். எந்தத் தளர்வுகளையும் விட்டுவிடாமல், கூர்ந்து கவனிப்போம்.

dm-verity என்றால் என்ன, நீங்கள் ஏன் அதைப் பற்றி கவலைப்படலாம்?

dm-verity உடன் நேர்மை சரிபார்ப்பு

dm-verity என்பது கர்னலில் உள்ள ஒரு சாதன-மேப்பர் இலக்காகும், அது தரவு படிக்கப்படும்போது ஒரு தொகுதி சாதனத்தின் ஒருமைப்பாட்டை சரிபார்க்கிறது.இது ஒவ்வொரு தொகுதியின் (பொதுவாக 4K) ஹாஷ்களையும், முன்-கணக்கிடப்பட்ட ஹாஷ் மரத்திற்கு எதிராகக் கணக்கிட்டு சரிபார்ப்பதன் மூலம் செயல்படுகிறது, பொதுவாக SHA-256 ஐப் பயன்படுத்துகிறது.

இந்த வடிவமைப்பு அனுமதிக்கிறது மறுதொடக்கங்களுக்கு இடையில் அல்லது செயல்படுத்தும் போது கோப்புகளை அமைதியாக மாற்ற முடியாது.இயக்க முறைமைக்கு நம்பிக்கையின் துவக்கச் சங்கிலியை விரிவுபடுத்துதல், தீம்பொருள் நிலைத்தன்மையைக் கட்டுப்படுத்துதல், பாதுகாப்புக் கொள்கைகளை வலுப்படுத்துதல் மற்றும் துவக்கத்தின் போது குறியாக்கம் மற்றும் MAC வழிமுறைகளை உறுதி செய்தல் ஆகியவற்றிற்கு இது முக்கியமாகும்.

ஆண்ட்ராய்டில் (4.4 இலிருந்து) மற்றும் பொதுவாக லினக்ஸில், நம்பிக்கை மரத்தின் வேர் ஹாஷில் நங்கூரமிடப்பட்டுள்ளது., இது பாதுகாக்கப்பட்ட இடத்தில் (எ.கா., பூட் பகிர்வில் அல்லது செக்யூர் பூட்-கையொப்பமிடப்பட்ட UKI இல்) அமைந்துள்ள பொது விசையுடன் கையொப்பமிடப்பட்டு சரிபார்க்கப்படுகிறது. எந்தவொரு தொகுதியையும் உடைக்க அடிப்படை கிரிப்டோகிராஃபிக் ஹாஷை உடைக்க வேண்டும்.

சரிபார்ப்பு தொகுதி மற்றும் தேவைக்கேற்ப செய்யப்படுகிறது: I/O செலவோடு ஒப்பிடும்போது சேர்க்கப்பட்ட தாமதம் மிகக் குறைவு.ஒரு சரிபார்ப்பு தோல்வியுற்றால், கர்னல் ஒரு I/O பிழையை வழங்கும், மேலும் கோப்பு முறைமை சிதைந்ததாகத் தோன்றும், இது தரவு நம்பகத்தன்மையற்றதாக இருக்கும்போது எதிர்பார்க்கப்படுகிறது. பயன்பாடுகள் தங்கள் தவறு சகிப்புத்தன்மையின் அடிப்படையில் தொடரலாமா வேண்டாமா என்பதை முடிவு செய்யலாம்.

சரிபார்ப்பு மரம் உள்நாட்டில் எவ்வாறு செயல்படுகிறது

சரிபார்ப்பு மரம் அடுக்குகளில் கட்டப்பட்டுள்ளது. லேயர் 0 என்பது சாதனத்திலிருந்து பெறப்பட்ட மூலத் தரவு ஆகும், இது 4K தொகுதிகளாகப் பிரிக்கப்பட்டுள்ளது.; ஒவ்வொரு தொகுதிக்கும் ஒரு SHA-256 (உப்பு சேர்க்கப்பட்ட) ஹாஷ் கணக்கிடப்படுகிறது. இந்த ஹாஷ்கள் பின்னர் இணைக்கப்பட்டு அடுக்கு 1 ஐ உருவாக்குகின்றன. அடுக்கு 1 பின்னர் தொகுதிகளாக தொகுக்கப்பட்டு அடுக்கு 2 ஐ உருவாக்க மீண்டும் ஹாஷ் செய்யப்படுகிறது, மேலும் அனைத்தும் ஒரே தொகுதியில் பொருந்தும் வரை: அந்தத் தொகுதி, ஹாஷ் செய்யப்படும்போது, ​​ரூட் ஹாஷை உருவாக்குகிறது.

எந்த அடுக்கும் ஒரு தொகுதியை சரியாக முடிக்கவில்லை என்றால், இது 4K அடையும் வரை பூஜ்ஜியங்களால் நிரப்பப்படுகிறது. தெளிவின்மையைத் தவிர்க்க. மரத்தின் மொத்த அளவு சரிபார்க்கப்படும் பகிர்வின் அளவைப் பொறுத்தது; நடைமுறையில், வழக்கமான கணினி பகிர்வுகளுக்கு இது பொதுவாக 30 MB க்கும் குறைவாகவே இருக்கும்.

பொதுவான செயல்முறை: ஒரு சீரற்ற உப்பைத் தேர்ந்தெடுத்து, 4K க்கு ஹாஷ் செய்து, ஒவ்வொரு தொகுதிக்கும் உப்புடன் SHA-256 ஐக் கணக்கிடுங்கள்., நிலைகளை உருவாக்க ஒன்றிணைக்கிறது, தொகுதி எல்லையை பூஜ்ஜியங்களால் நிரப்புகிறது, மேலும் ஒரு ஒற்றை ரூட் ஹாஷ் எஞ்சியிருக்கும் வரை முந்தைய மட்டத்துடன் மீண்டும் நிகழ்கிறது. அந்த ரூட் ஹாஷ், பயன்படுத்தப்படும் உப்புடன் சேர்ந்து, dm-verity அட்டவணை மற்றும் கையொப்பத்தை ஊட்டுகிறது.

வட்டு வடிவமைப்பு பதிப்புகள் மற்றும் வழிமுறை

வட்டில் உள்ள ஹாஷ் தொகுதிகளின் வடிவமைப்பிற்கு ஒரு பதிப்பு உள்ளது. பதிப்பு 0 என்பது Chromium OS இல் பயன்படுத்தப்பட்ட அசல் பதிப்பாகும்.: ஹாஷிங் செயல்முறையின் முடிவில் உப்பு சேர்க்கப்படுகிறது, செரிமானங்கள் தொடர்ந்து சேமிக்கப்படுகின்றன, மீதமுள்ள தொகுதி பூஜ்ஜியங்களால் நிரப்பப்படுகிறது.

La புதிய சாதனங்களுக்கு பதிப்பு 1 பரிந்துரைக்கப்படுகிறது.: உப்பு ஹாஷில் முன் சேர்க்கப்படுகிறது, மேலும் ஒவ்வொரு டைஜஸ்டும் பூஜ்ஜியங்களால் இரண்டு சக்திகள் வரை நிரப்பப்படுகிறது, இது சீரமைப்பு மற்றும் வலுவான தன்மையை மேம்படுத்துகிறது. dm-verity அட்டவணை அல்காரிதத்தையும் குறிப்பிடுகிறது (எ.கா., sha1 அல்லது sha256), இருப்பினும் தற்போதைய பாதுகாப்பிற்காக, sha256 பயன்படுத்தப்படுகிறது.

dm-verity அட்டவணை மற்றும் அத்தியாவசிய அளவுருக்கள்

இலக்கு அட்டவணை dm-verity விவரிக்கிறது தரவு எங்கே, ஹாஷ் மரம் எங்கே, எப்படி சரிபார்க்க வேண்டும்வழக்கமான அட்டவணை புலங்கள்:

  • தேவ்: சரிபார்க்கப்பட வேண்டிய தரவைக் கொண்ட சாதனம் (பாதை வகை /dev/sdXN அல்லது அதற்கு மேல்:குறைவானது).
  • ஹாஷ்_தேவ்: ஹாஷ் மரத்தைக் கொண்ட சாதனம் (அதே மாதிரியாக இருக்கலாம்; அப்படியானால், hash_start சரிபார்க்கப்பட்ட வரம்பிற்கு வெளியே இருக்க வேண்டும்).
  • தரவு_தொகுதி_அளவு: தரவு தொகுதி அளவு பைட்டுகளில் (எ.கா. 4096).
  • ஹாஷ்_பிளாக்_சைஸ்: பைட்டுகளில் ஹாஷ் தொகுதி அளவு.
  • தரவு_தொகுதிகள்_எண்: சரிபார்க்கக்கூடிய தரவுத் தொகுதிகளின் எண்ணிக்கை.
  • ஹாஷ்_ஸ்டார்ட்_பிளாக்: மரத்தின் மூலத் தொகுதிக்கு ஆஃப்செட் (hash_block_size தொகுதிகளில்).
  • வழிமுறை: ஹாஷ் வழிமுறை (எ.கா. sha256).
  • ஜீரணிக்கவும்: ரூட் பிளாக் ஹாஷின் ஹெக்ஸாடெசிமல் குறியாக்கம் (வடிவமைப்பு பதிப்பின் படி உப்பு உட்பட); இந்த மதிப்பு நம்பத்தக்கது.
  • உப்பு: பதினாறு தசம உப்பு.

கூடுதலாக, உள்ளன விருப்ப அளவுருக்கள் நடத்தையை சரிசெய்ய மிகவும் பயனுள்ளதாக இருக்கும்:

  • ஊழலைப் புறக்கணி: சிதைந்த தொகுதிகளைப் பதிவு செய்கிறது, ஆனால் வாசிப்பைத் தொடர அனுமதிக்கிறது.
  • ஊழலை_மீட்டமைக்கவும்: ஊழல் கண்டறிதலில் மறுதொடக்கம் செய்யுங்கள் (ignore_corruption உடன் இணக்கமாக இல்லை மற்றும் லூப்களைத் தவிர்க்க பயனர்-இட ஆதரவு தேவை).
  • ஊழலைப்_பற்றிய_பீதி: : ஊழலைக் கண்டறியும் போது பீதியை ஏற்படுத்துகிறது (முந்தைய பதிப்புகளுடன் இணக்கமாக இல்லை).
  • மறுதொடக்கம்_பிழை y பீதி_பிழை_: அதே வினைகள் ஆனால் I/O பிழைகளுக்கு.
  • பூஜ்ஜிய_தொகுதிகளைப் புறக்கணிக்கவும்: பூஜ்ஜியங்களாக எதிர்பார்க்கப்படும் தொகுதிகளைச் சரிபார்க்காது, பூஜ்ஜியங்களைத் திருப்பித் தருகிறது.
  • use_fec_from_device (சாதனத்திலிருந்து_சாதனம்) + மலம்_வேர்கள் + fec_blocks (கருப்பு_தொகுதிகள்) + fec_start (கருப்பு_தொடக்கம்): சரிபார்ப்பு தோல்வியடையும் போது தரவை மீட்டெடுக்க ரீட்–சாலமன் (FEC) ஐ இயக்கவும்; தரவு, ஹாஷ் மற்றும் FEC பகுதிகள் ஒன்றுடன் ஒன்று சேரக்கூடாது, மேலும் தொகுதி அளவுகள் பொருந்த வேண்டும்.
  • ஒரு முறை_சரிபார்க்கவும்: ஒவ்வொரு தரவுத் தொகுதியையும் முதல் முறை படிக்கும் போது மட்டுமே சரிபார்க்கிறது (நேரடி தாக்குதல்களில் பாதுகாப்புச் செலவில் மேல்நிலையைக் குறைக்கிறது).
  • ரூட்_ஹாஷ்_சிக்_கீ_டெஸ்க்: மேப்பிங்கை உருவாக்கும் போது ரூட் ஹாஷின் PKCS7 கையொப்பத்தை சரிபார்க்க கீரிங்கில் உள்ள ஒரு கீயைக் குறிப்பிடுதல் (பொருத்தமான கர்னல் உள்ளமைவு மற்றும் நம்பகமான கீரிங்கள் தேவை).
  • டாஸ்க்லெட்டில்_சரிபார்க்கவும்_முயற்சிக்கவும்: ஹாஷ்கள் தற்காலிகமாக சேமிக்கப்பட்டு, I/O அளவு அனுமதித்தால், தாமதத்தைக் குறைக்க கீழ்-பாதியைச் சரிபார்க்கிறது; I/O வகுப்பிற்கு /sys/module/dm_verity/parameters/use_bh_bytes உடன் சரிசெய்யப்படுகிறது.

கையொப்பம், மெட்டாடேட்டா மற்றும் நம்பிக்கை நங்கூரமிடுதல்

dm-verity நம்பகமானதாக இருக்க, ரூட் ஹாஷ் நம்பகமானதாகவும் பொதுவாக கையொப்பமிடப்பட்டதாகவும் இருக்க வேண்டும்.கிளாசிக் ஆண்ட்ராய்டில், துவக்கப் பிரிவில் ஒரு பொது விசை சேர்க்கப்பட்டுள்ளது, இது உற்பத்தியாளரால் வெளிப்புறமாகச் சரிபார்க்கப்படுகிறது; இது ரூட் ஹாஷ் கையொப்பத்தை சரிபார்க்கிறது மற்றும் கணினிப் பகிர்வு மாற்றப்படவில்லை என்பதை உறுதி செய்கிறது.

உண்மை மெட்டாடேட்டா கட்டமைப்பு மற்றும் பதிப்பு கட்டுப்பாட்டைச் சேர்க்கிறது. மெட்டாடேட்டா தொகுதியில் 0xb001b001 என்ற மேஜிக் எண் உள்ளது. (பைட்டுகள் b0 01 b0 01), பதிப்பு (தற்போது 0), PKCS1.5 இல் உள்ள அட்டவணை கையொப்பம் (பொதுவாக RSA-2048 க்கு 256 பைட்டுகள்), அட்டவணை நீளம், அட்டவணை மற்றும் 32K வரை பூஜ்ஜிய திணிப்பு.

Android செயல்படுத்தல்களில், சரிபார்ப்பு இவற்றைச் சார்ந்துள்ளது fs_mgr மற்றும் fstab: தொடர்புடைய உள்ளீட்டில் ஒரு தேர்வுக்குறியைச் சேர்த்து, /boot/verity_key இல் விசையை வைப்பது. மேஜிக் எண் இருக்க வேண்டிய இடத்தில் இல்லையென்றால், தவறான விஷயத்தைச் சரிபார்ப்பதைத் தவிர்க்க சரிபார்ப்பு நிறுத்தப்படும்.

தொடக்க செயல்பாடு சரிபார்க்கப்பட்டது

பாதுகாப்பு கருவிலேயே வாழ்கிறது: கர்னல் துவங்குவதற்கு முன்பு சமரசம் செய்யப்பட்டால், தாக்குபவர் கட்டுப்பாட்டைத் தக்க வைத்துக் கொள்வார்.அதனால்தான் உற்பத்தியாளர்கள் பொதுவாக ஒவ்வொரு கட்டத்தையும் கண்டிப்பாக சரிபார்க்கிறார்கள்: சாதனத்தில் எரிக்கப்படும் ஒரு விசை முதல் துவக்க ஏற்றியைச் சரிபார்க்கிறது, இது அடுத்ததைச் சரிபார்க்கிறது, பயன்பாட்டு துவக்க ஏற்றி, இறுதியாக, கர்னலைச் சரிபார்க்கிறது.

கர்னல் சரிபார்க்கப்பட்டவுடன், சரிபார்க்கப்பட்ட தொகுதி சாதனத்தை ஏற்றும்போது dm-verity இயக்கப்படும்.முழு சாதனத்தையும் ஹாஷ் செய்வதற்குப் பதிலாக (இது மெதுவாகவும் ஆற்றலை வீணாக்குவதாகவும் இருக்கும்), அதை அணுகும்போது ஒவ்வொரு தொகுதியாக சரிபார்க்கப்படுகிறது. ஒரு தோல்வி ஒரு I/O பிழையை ஏற்படுத்துகிறது, மேலும் சேவைகள் மற்றும் பயன்பாடுகள் அவற்றின் சகிப்புத்தன்மைக்கு ஏற்ப செயல்படுகின்றன: அந்தத் தரவு இல்லாமல் தொடர்வது அல்லது முழுமையாக செயலிழக்கச் செய்வது.

முன்னோக்கி பிழை திருத்தம் (FEC)

ஆண்ட்ராய்டு 7.0 முதல், FEC (ரீட்–சாலமன்) பின்னல் நுட்பங்களுடன் இணைக்கப்பட்டுள்ளது. இடத்தைக் குறைத்து சேதமடைந்த தொகுதிகளை மீட்டெடுக்கும் திறனை அதிகரிக்க. இது dm-verity உடன் இணைந்து செயல்படுகிறது: ஒரு சரிபார்ப்பு தோல்வியுற்றால், துணை அமைப்பு அதை மீட்டெடுக்க முடியாது என்று அறிவிப்பதற்கு முன்பு அதை சரிசெய்ய முயற்சிக்கலாம்.

செயல்திறன் மற்றும் தேர்வுமுறை

தாக்கத்தைக் குறைக்க: ARMv7 இல் NEON ஆல் SHA-2 முடுக்கத்தையும் ARMv8 இல் SHA-2 நீட்டிப்புகளையும் இயக்கு. கர்னலில் இருந்து. உங்கள் வன்பொருளுக்கு முன்னோக்கி படிக்க மற்றும் prefetch_cluster அளவுருக்களை சரிசெய்யவும்; ஒவ்வொரு தொகுதிக்கும் சரிபார்ப்பு பொதுவாக I/O செலவில் சிறிதளவே சேர்க்கிறது, ஆனால் இந்த அமைப்புகள் வித்தியாசத்தை ஏற்படுத்துகின்றன.

Linux (systemd, veritysetup) மற்றும் Android இல் தொடங்குதல்

லினக்ஸ் மற்றும் ஆண்ட்ராய்டில் dm-verity ஐ உள்ளமைத்தல்

systemd உடனான நவீன லினக்ஸில், dm-verity சரிபார்க்கப்பட்ட படிக்க மட்டும் ரூட்டை அனுமதிக்கிறது. veritysetup (cryptsetup இன் ஒரு பகுதி), systemd-veritysetup.generator மற்றும் systemd-veritysetup@.service ஆகியவற்றைப் பயன்படுத்தி. Secure Boot மற்றும் கையொப்பமிடப்பட்ட UKI (ஒருங்கிணைந்த கர்னல் படம்) ஆகியவற்றைச் சேர்க்க பரிந்துரைக்கப்படுகிறது, இருப்பினும் அவை கண்டிப்பாக தேவையில்லை.

தயாரிப்பு மற்றும் பரிந்துரைக்கப்பட்ட பகிர்வு

செயல்பாட்டு மற்றும் சரிசெய்யப்பட்ட அமைப்பின் ஒரு பகுதி. ஹாஷ் மரத்திற்கு ஒரு தொகுதியை ஒதுக்குங்கள். (பொதுவாக ரூட் அளவின் 8–10% போதுமானது) மேலும் எழுத வேண்டியிருந்தால் /home மற்றும் /var ஐப் பிரிப்பதைக் கருத்தில் கொள்ளுங்கள். ஒரு பொதுவான திட்டத்தில் பின்வருவன அடங்கும்: ESP (பூட்லோடருக்கு), XBOOTLDR (UKI களுக்கு), ரூட் (குறியாக்கத்துடன் அல்லது இல்லாமல்), VERITY பகிர்வு, மற்றும் விருப்பமாக /home மற்றும் /var.

ஒரு வேராக, EROFS என்பது ext4 அல்லது squashfs க்கு மிகவும் சுவாரஸ்யமான மாற்றாகும்.: இது வடிவமைப்பால் படிக்க மட்டுமே, ஃபிளாஷ்/SSD-யில் மிகச் சிறந்த செயல்திறன், இயல்புநிலையாக lz4 சுருக்கம் மற்றும் dm-verity கொண்ட Android தொலைபேசிகளில் பரவலாகப் பயன்படுத்தப்படுகிறது.

எழுதக்கூடியதாக இருக்க வேண்டிய கோப்புகள்

ரூட் ro உடன், சில நிரல்கள் எழுத எதிர்பார்க்கின்றன /etc அல்லது துவக்கத்தின் போதுநீங்கள் அதை /var/etc க்கு நகர்த்தி மாற்ற வேண்டிய எதையும் (எ.கா., /etc/NetworkManager/system-connections இல் NetworkManager இணைப்புகள்) symlink செய்யலாம். ஆரம்பகால தொடக்கங்களை உடைப்பதைத் தவிர்க்க, systemd-journald க்கு /etc/machine-id ரூட் கோப்பகத்தில் (symlink அல்ல) இருக்க வேண்டும் என்பதை நினைவில் கொள்ளவும்.

செயல்பாட்டில் என்ன மாற்றங்கள் உள்ளன என்பதைக் கண்டறிய, டிராகட்-ஓவர்லேரூட்டைப் பயன்படுத்தவும்: ரூட்டின் மேல் ஒரு tmpfs ஐ மேலடுக்குகிறது, எழுதப்பட்ட அனைத்தும் /run/overlayroot/u இல் தோன்றும். தொகுதியை /usr/lib/dracut/modules.d/ இல் சேர்க்கவும், dracut இல் overlayroot ஐ சேர்க்கவும், மற்றும் kernel வரியில் overlayroot=1 ஐ அமைக்கவும்; இந்த வழியில் நீங்கள் /var க்கு எதை நகர்த்துவது என்பதைக் காண்பீர்கள்.

பயனுள்ள உதாரணங்கள்: pacman மற்றும் NetworkManager

ஆர்க்கில், இது வசதியானது Pacman தரவுத்தளத்தை /usr/lib/pacman க்கு நகர்த்தவும். இதனால் rootfs எப்போதும் நிறுவப்பட்ட தொகுப்புகளை பிரதிபலிக்கிறது. பின்னர், தற்காலிக சேமிப்பை /var/lib/pacman க்கு திருப்பி, இணைக்கவும். ரூட்டைத் தொடாமல் mirrorlist ஐ மாற்ற, அதை /var/etc க்கு நகர்த்தி எப்படியும் இணைக்கவும்.

நெட்வொர்க் மேலாளருடன், கணினி இணைப்புகளை /var/etc/NetworkManager க்கு நகர்த்தவும். மற்றும் /etc/NetworkManager/system-connections இலிருந்து இணைப்பு. இது ரூட்டை மாற்ற முடியாததாக வைத்திருக்கிறது மற்றும் உள்ளமைவு எழுதக்கூடிய இடத்தில் வாழ்கிறது.

உண்மைத்தன்மையை உருவாக்குதல் மற்றும் சோதனை செய்தல்

ஒரு நேரடி மற்றும் எல்லாவற்றையும் சரியானதாகவும், ro இல் பொருத்தப்பட்டதாகவும் இருந்து, மரத்தை உருவாக்கி ரூட்ஹாஷை உருவாக்கவும் உண்மை அமைப்பு வடிவம்: இயக்கப்படும்போது, ​​அது ரூட் ஹாஷ் வரியை அச்சிடுகிறது, அதை நீங்கள் roothash.txt இல் சேமிக்கலாம். veritysetup உடன் சோதனைக்காக அதை இயக்கவும், root-device root verity-device $(cat roothash.txt) ஐத் திறந்து /dev/mapper/root ஐ ஏற்றவும்.

நீங்கள் விரும்பினால், முதலில் மரத்தை ஒரு கோப்பாக உருவாக்குகிறது. (verity.bin) என டைப் செய்து, பின்னர் அதை VERITY பகிர்வில் எழுதவும். இதன் விளைவாக வரும் தொகுப்பு: ரூட் இமேஜ், வெரிட்டி ட்ரீ மற்றும் துவக்கத்தில் நீங்கள் பின் செய்யும் ரூட் ஹாஷ்.

கர்னல் வரியை உள்ளமைக்கவும்

இந்த அளவுருக்களைச் சேர்க்கவும்: systemd.verity=1, roothash=contents_of_roothash.txt, systemd.verity_root_data=ROOT-PATH (எ.கா. LABEL=OS), மற்றும் systemd.verity_root_hash=VERITY-PATH (எ.கா. LABEL=VERITY). கடுமையான கொள்கைகளுக்கு systemd.verity_root_options ஐ மீண்டும் தொடங்க அல்லது ஊழலைத் தவிர்க்க அமைக்கவும்.

பரிந்துரைக்கப்பட்ட பிற விருப்பங்கள்: ro (நீங்கள் EROFS/squashfகளைப் பயன்படுத்தவில்லை என்றால்), rd.emergency=மறுதொடக்கம் y rd.ஷெல்=0 (துவக்கம் தோல்வியடைந்தால் அங்கீகரிக்கப்படாத ஷெல்களைத் தடுக்கவும்), மற்றும் பூட்டுதல் = ரகசியத்தன்மை கர்னல் நினைவகத்தை அணுகலில் இருந்து பாதுகாக்க.

உண்மைத்தன்மையுடன் கூடிய கூடுதல் பகிர்வுகள்

வேர் மட்டுமல்ல: நீங்கள் /etc/veritytab இல் மற்ற மேப்பிங்குகளை வரையறுக்கலாம். மற்றும் systemd-veritysetup@.service அவற்றை துவக்கத்தில் இணைக்கும். நினைவில் கொள்ளுங்கள்: ரூட் அல்லாத பகிர்வை RW ஏற்றுவது எளிது, மேலும் ஒரு ரூட் பயனர் அந்தப் பகிர்வுகளில் Verity ஐ முடக்கலாம், எனவே அங்கு பாதுகாப்பு மதிப்பு குறைவாக இருக்கும்.

பாதுகாப்பு: பாதுகாப்பான துவக்கம், UKI மற்றும் கையொப்பமிடப்பட்ட தொகுதிகள்

dm-verity ஒரு வெள்ளி குண்டு அல்ல. UKI-யில் கையொப்பமிட்டு உங்கள் சொந்த விசைகளைப் பயன்படுத்தி பாதுகாப்பான துவக்கத்தை இயக்கவும். kernel/initramfs/cmdline (ரூட் ஹாஷ் உட்பட) ஐ யாரும் மீறுவதைத் தடுக்க. sbupdate-git அல்லது sbctl போன்ற கருவிகள் படங்களை கையொப்பமிடவும் பூட் சங்கிலியை அப்படியே வைத்திருக்கவும் உதவுகின்றன.

நீங்கள் கர்னல் பூட்டுதல் அல்லது தொகுதி கையொப்ப சரிபார்ப்பை இயக்கினால், DKMS அல்லது மரத்திற்கு வெளியே உள்ள தொகுதிக்கூறுகள் கையொப்பமிடப்பட வேண்டும். இல்லையெனில் அவை ஏற்றப்படாது. உங்கள் பைப்லைனுக்கு கையொப்பமிடும் ஆதரவுடன் கூடிய தனிப்பயன் கர்னலைக் கருத்தில் கொள்ளுங்கள் (கையொப்பமிடப்பட்ட கர்னல் தொகுதிகளைப் பார்க்கவும்).

குறியாக்கம், TPM மற்றும் அளவீடு

dm-verity ஒருமைப்பாட்டைப் பாதுகாக்கிறது, ரகசியத்தன்மை இல்லாததுரூட்டில் எந்த ரகசியங்களும் இல்லை என்றால், பூட் செயின் பாதுகாக்கப்பட்டிருந்தால், அதை மறைகுறியாக்காமல் விடலாம். மற்ற தொகுதிகளைத் திறக்க ரூட்டிலிருந்து கீஃபைல்களைப் பயன்படுத்தினால், அதை மறைகுறியாக்கம் செய்வது நல்லது.

TPM 2.0 உடன், systemd-cryptenroll PCR களுக்கு பிணைப்பு விசைகளை அனுமதிக்கிறது 0,1,5,7 (firmware, options, GPT, secure boot status). rd.luks.options=LUKS_UUID=tpm2-device=auto ஐச் சேர்த்து, initramfs இல் TPM2 ஆதரவைச் சேர்க்க மறக்காதீர்கள். systemd-boot PCR4 இல் kernel.efi ஐ அளவிடுகிறது, UKI அல்லது அதன் cmdline மாறினால் விசைகளை செல்லாததாக்க பயனுள்ளதாக இருக்கும்.

புதுப்பிப்புகள் மற்றும் பயன்படுத்தல் மாதிரிகள்

சரிபார்க்கப்பட்ட படிக்க மட்டும் ரூட் இது பாரம்பரிய முறையில் தொகுப்பு மேலாளருடன் புதுப்பிக்கப்படவில்லை.. போன்ற கருவிகளைப் பயன்படுத்தி புதிய படங்களை உருவாக்குவதே சிறந்தது. யோக்டோ திட்டம் மற்றும் அவற்றை வெளியிடவும். systemd வலுவான பட பதிவிறக்கம் மற்றும் ஃபிளாஷிங்கிற்காக systemd-sysupdate மற்றும் systemd-repart ஐக் கொண்டுள்ளது.

மற்றொரு உத்தி A/B திட்டம்: நீங்கள் இரண்டு வேர்களையும் இரண்டு வெரிட்டிகளையும் வைத்திருக்கிறீர்கள். செயலில் உள்ள ரூட்டை செயலற்ற ரூட்டிற்கு நகலெடுத்து, மாற்றங்களைப் பயன்படுத்தி, வெரிட்டியை மீண்டும் செய்யவும். அடுத்த பூட்டை இயக்கவும். நீங்கள் UKI ஐப் பயன்படுத்துகிறீர்கள் என்றால், cmd வரியில் ரூட் ஹாஷைப் புதுப்பிக்க அல்லது கையொப்பமிடப்பட்ட UKI ஐ மீண்டும் உருவாக்க நினைவில் கொள்ளுங்கள்.

விருப்ப நிலைத்தன்மைக்கு, சரிபார்க்கப்பட்ட ரூட்டில் OverlayFS ஐப் பயன்படுத்தவும். tmpfs அல்லது disk இல் upper உடன். தற்காலிக நிலைத்தன்மைக்கு systemd.volatile=overlay ஐயும் அனுப்பலாம். Flatpak /var மற்றும் /home இல் / ஐத் தொடாமல் பயன்பாடுகளை நிறுவுவதை எளிதாக்குகிறது.

ஸ்குவாஷ்ஃப்ஸ் ரூட்டை உருவாக்கும் தானியங்கி தொகுப்புகள் (எ.கா. AUR இல் வெரிட்டி-ஸ்குவாஷ்-ரூட்) உள்ளன மற்றும் கர்னல் மற்றும் initramfs உடன் ரூட்ஹாஷை கையொப்பமிடுங்கள்., நிரந்தர அல்லது தற்காலிக பயன்முறையில் ஒன்றைத் தேர்வுசெய்யவும், சமீபத்திய ரூட்ஃப்களை காப்புப்பிரதியாகப் பாதுகாக்கவும் உங்களை அனுமதிக்கிறது. குறிப்பு: சரிபார்க்கப்பட்ட ரூட்டில் நிலைத்தன்மையைச் சேர்ப்பது குறுகிய பயன்பாட்டு நிகழ்வுகளைக் கொண்டுள்ளது; தனித்தனி பகிர்வுகளில் பயன்பாட்டுத் தரவைத் தொடர்ந்து பயன்படுத்த முயற்சிக்கவும்.

ஆண்ட்ராய்டு: சிஸ்டம்-ஆஸ்-ரூட், AVB மற்றும் விற்பனையாளர் ஓவர்லேக்கள்

ஆண்ட்ராய்டு 10 முதல், ரூட்எஃப்எஸ் ரேம் வட்டில் இயங்குவதை நிறுத்திவிட்டு system.img உடன் ஒருங்கிணைக்கிறது. (system-as-root). Android 10 உடன் தொடங்கும் சாதனங்கள் எப்போதும் இந்தத் திட்டத்தைப் பயன்படுத்துகின்றன, மேலும் dm-linear க்கு ஒரு ramdisk தேவைப்படுகிறது. ramdisk ஐப் பயன்படுத்துவதற்கும் system.img ஐ நேரடியாக செயல்படுத்துவதற்கும் இடையில் வேறுபடுத்துவதற்காக இந்த கட்டமைப்பில் BOARD_BUILD_SYSTEM_ROOT_IMAGE தவறானதாக அமைக்கப்பட்டுள்ளது.

ஆண்ட்ராய்டு 10 உள்ளடக்கியது டைனமிக் பகிர்வுகள் மற்றும் முதல்-நிலை init இது தருக்க அமைப்பு பகிர்வை செயல்படுத்துகிறது; கர்னல் இனி அதை நேரடியாக ஏற்றாது. கணினி-மட்டும் OTA களுக்கு ஒரு அமைப்பு-ஆஸ்-ரூட் வடிவமைப்பு தேவைப்படுகிறது, இது Android 10 சாதனங்களில் கட்டாயமாகும்.

A/B இல் இல்லை, மீட்டெடுப்பை துவக்கத்திலிருந்து தனியாக வைத்திருங்கள்.A/B போலல்லாமல், boot_a/boot_b காப்புப்பிரதி இல்லை, எனவே A/B அல்லாதவற்றில் மீட்டெடுப்பை அகற்றுவது, துவக்க புதுப்பிப்பு தோல்வியுற்றால் மீட்பு பயன்முறையை இல்லாமல் செய்யக்கூடும்.

கர்னல் system.img ஐ இரண்டு பாதைகள் வழியாக /converity க்கு ஏற்றுகிறது: விபூட் 1.0 (/system இல் Android மெட்டாடேட்டாவை பாகுபடுத்தி dm-verity அளவுருக்களைப் பெற கர்னலுக்கான இணைப்புகள்; cmdline இல் root=/dev/dm-0, skip_initramfs மற்றும் init=/init ஆகியவை dm=… உடன் அடங்கும்) அல்லது விபூட் 2.0/ஏவிபி, இதில் பூட்லோடர் libavb ஐ ஒருங்கிணைக்கிறது, ஹாஷ்ட்ரீ டிஸ்கிரிப்டரை (vbmeta அல்லது சிஸ்டத்தில்) படிக்கிறது, அளவுருக்களை உருவாக்கி அவற்றை cmdline இல் உள்ள கர்னலுக்கு அனுப்புகிறது, FEC ஆதரவு மற்றும் restart_on_corruption போன்ற கொடிகளுடன்.

சிஸ்டம்-ஆஸ்-ரூட்டுடன், BOARD_ROOT_EXTRA_FOLDERS ஐப் பயன்படுத்த வேண்டாம். சாதனம் சார்ந்த ரூட் கோப்புறைகளுக்கு: GSI ஐ ஃபிளாஷ் செய்யும்போது இவை மறைந்துவிடும். /mnt/vendor/ இன் கீழ் குறிப்பிட்ட மவுண்ட்களை வரையறுக்கவும். , இது fs_mgr தானாகவே உருவாக்குகிறது, மேலும் அவற்றை சாதன மரத்தின் fstab இல் குறிப்பிடுகிறது.

ஆண்ட்ராய்டு அனுமதிக்கிறது a /product/vendor_overlay/ இலிருந்து விற்பனையாளர் மேலடுக்கு: init ஆனது SELinux சூழல் தேவைகளையும் /vendor/ இன் இருப்பையும் பூர்த்தி செய்யும் துணை அடைவுகளை /vendor இல் ஏற்றும். . பழைய கர்னல்களில், override_creds=off பேட்ச் CONFIG_OVERLAY_FS=yy தேவைப்படுகிறது.

வழக்கமான செயல்படுத்தல்: சாதனத்தில் முன்பே தொகுக்கப்பட்ட கோப்புகளை நிறுவுகிறது/ / /விற்பனையாளர்_மேலடுக்கு/, அவற்றை PRODUCT_COPY_FILES இல் $(TARGET_COPY_OUT_PRODUCT)/vendor_overlay இல் find-copy-subdir-files உடன் சேர்க்கவும், etc மற்றும் appக்கான file_contexts இல் உள்ள சூழல்களை வரையறுக்கவும் (எ.கா. vendor_configs_file மற்றும் vendor_app_file) மற்றும் init.te இல் உள்ள அந்த சூழல்களில் mounton ஐ அனுமதிக்கவும். userdebug இல் atest vfs_mgr_vendor_overlay_test உடன் சோதிக்கவும்.

சரிசெய்தல்: ஆண்ட்ராய்டில் dm-verity ஊழல் செய்தி

A/B ஸ்லாட்களைக் கொண்ட சாதனங்களில், ஸ்லாட்களை மாற்றவும் அல்லது ரூட்ஹாஷ் நிலைத்தன்மை இல்லாமல் ஒளிரும் vbmeta/boot இது எச்சரிக்கையைத் தூண்டக்கூடும்: dm-verity ஊழல், உங்கள் சாதனம் நம்பத்தகாதது. fastboot flash –disable-verity –disable-verification vbmeta vbmeta.img போன்ற கட்டளைகள் சரிபார்ப்பை முடக்குகின்றன, ஆனால் ஒருமைப்பாட்டிற்கான எந்த உத்தரவாதமும் இல்லாமல் கணினியை விட்டுவிடுகின்றன.

சில துவக்க ஏற்றிகள் ஆதரிக்கின்றன ஃபாஸ்ட்பூட் ஓஇஎம் முடக்கு_டிஎம்_வெரிட்டி மற்றும் அதன் எதிர்மாறானது, enable_dm_verity. இது சில மாடல்களில் வேலை செய்கிறது, ஆனால் மற்றவற்றில் வேலை செய்யாது; மேலும் இதற்கு சரிசெய்யப்பட்ட கொடிகளுடன் கூடிய கர்னல்/மேஜிஸ்க் தேவைப்படலாம். உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்: விவேகமான செயல் முறை பூட், விபிமெட்டா மற்றும் சிஸ்டத்தை சீரமைக்கவும்., மரத்தில் கையொப்பமிடவும் அல்லது மீண்டும் உருவாக்கவும் மற்றும் எதிர்பார்க்கப்படும் ரூட் ஹாஷ் உள்ளமைக்கப்பட்ட ஒன்றோடு பொருந்துவதை உறுதிசெய்யவும்.

எச்சரிக்கைக்குப் பிறகு நீங்கள் தொடர்ந்து சக்தியை அழுத்தினால், கணினி தொடங்கும், ஆனால் உங்களிடம் இனி ஒரு நிலையான நம்பிக்கைச் சங்கிலி இல்லை.பாதுகாப்பை தியாகம் செய்யாமல் செய்தியை அகற்ற, உண்மைத்தன்மையை முடக்குவதற்குப் பதிலாக, அசல் கையொப்பமிடப்பட்ட படங்களை மீட்டெடுக்கவும் அல்லது சரியான ஹாஷ்ட்ரீயைப் பயன்படுத்தி vbmeta ஐ மீண்டும் உருவாக்கவும்/சரிபார்க்கவும்.

i.MX மற்றும் OpenWrt தளங்கள்

i.MX6 இல் (எ.கா. sabresd), DM_VERITY மற்றும் FEC ஆதரவுடன் கர்னலை உள்ளமைக்கவும்., veritysetup உடன் மரத்தை உருவாக்கவும், ரூட் ஹாஷைப் பாதுகாப்பாக சேமிக்கவும், cmd வரியில் பொருத்தமான அளவுருக்களை அனுப்பவும் அல்லது initramfs வழியாக systemd-veritysetup உடன் ஒருங்கிணைக்கவும். நீங்கள் dm-crypt ஐப் பயன்படுத்தவில்லை என்றால், verity க்கு CAAM தேவையில்லை; கவனம் ஒருமைப்பாட்டில் உள்ளது.

OpenWrt மற்றும் உள்ளே OpenEmbedded உடன் உட்பொதிக்கப்பட்ட லினக்ஸ் அமைப்புகள், dm-verity மற்றும் SELinux ஐ ஒருங்கிணைக்க முயற்சிகள் உள்ளன. (ஆதரவை இணைக்கும் நோக்கத்துடன் பூட்லின் வேலைகள் திருத்தப்பட்டன). இது இயற்கையான பொருத்தம்: திசைவிகள் மற்றும் நெட்வொர்க் உபகரணங்கள் மாறாத, சரிபார்க்கப்பட்ட மற்றும் MAC-கடினப்படுத்தப்பட்ட மூலத்திலிருந்து பயனடைகின்றன.

கையேடு மரம் மற்றும் மெட்டாடேட்டா கட்டுமானம் (விரிவான பார்வை)

கிரிப்ட்செட்டப் உங்களுக்காக மரத்தை உருவாக்க முடியும், ஆனால் நீங்கள் வடிவமைப்பைப் புரிந்து கொள்ள விரும்பினால், சிறிய அட்டவணை வரி வரையறையில் பின்வருவன அடங்கும்: மேப்பிங் பெயர், தரவு சாதனம், தரவுத் தொகுதி மற்றும் ஹாஷ் அளவுகள், தொகுதிகளில் பட அளவு, hash_start நிலை (இணைக்கப்பட்டால் தொகுதி படம் + 8), ரூட் ஹாஷ் மற்றும் உப்பு. இணைக்கப்பட்ட அடுக்குகளை உருவாக்கிய பிறகு (மேலிருந்து கீழாக, அடுக்கு 0 தவிர்த்து), நீங்கள் மரத்தை வட்டில் எழுதுகிறீர்கள்.

எல்லாவற்றையும் பேக் செய்ய, dm-verity அட்டவணையை உருவாக்கி, அதில் கையொப்பமிடவும் (வழக்கமான RSA-2048) மற்றும் மெட்டாடேட்டாவில் குழு கையொப்பம்+அட்டவணையை உள்ளிடவும். பதிப்பு செய்யப்பட்ட தலைப்பு மற்றும் மேஜிக் எண்ணுடன். பின்னர், இது கணினி படம், உண்மை மெட்டாடேட்டா மற்றும் ஹாஷ் மரத்தை இணைக்கிறது. fstab இல், இது fs_mgr ஐ verify எனக் குறிக்கும் மற்றும் கையொப்பத்தை சரிபார்க்க பொது விசையை /boot/verity_key இல் வைக்கிறது.

உடன் மேம்படுத்து உங்கள் CPU-க்கான SHA-2 வேகப்படுத்தல்கள் மற்றும் read-ahead/prefetch_cluster ஐ சரிசெய்யவும். ARM வன்பொருளில், NEON SHA-2 (ARMv7) மற்றும் SHA-2 நீட்டிப்புகள் (ARMv8) சரிபார்ப்பு மேல்நிலையைக் கணிசமாகக் குறைக்கின்றன.

எந்தவொரு வரிசைப்படுத்தலிலும், அதை நினைவில் கொள்ளுங்கள் ரூட் ஹாஷ் மதிப்பு பாதுகாக்கப்பட வேண்டும்.: கையொப்பமிடப்பட்ட UKI-யில் தொகுக்கப்பட்டாலும், கையொப்பமிடப்பட்ட துவக்கப் பகிர்வில் தொகுக்கப்பட்டாலும், அல்லது AVB-ஐப் பயன்படுத்தி துவக்க ஏற்றியால் சரிபார்க்கப்பட்டாலும். அந்தப் புள்ளிக்குப் பிறகு உள்ள அனைத்தும் அந்த நம்பிக்கையைப் பெறுகின்றன.

மேலே உள்ள அனைத்தும் இடத்தில் இருக்கும்போது, ​​dm-verity ஆகிறது மாறாத, நகரக்கூடிய மற்றும் உட்பொதிக்கப்பட்ட அமைப்புகளுக்கான உறுதியான அடித்தளம்., பரிவர்த்தனை புதுப்பிப்புகள், உள்ளமைவு மேலடுக்குகள் மற்றும் தாக்குதல் மேற்பரப்பைக் குறைக்கும் மற்றும் செயல்திறனை தியாகம் செய்யாமல் நிலைத்தன்மையைத் தடுக்கும் நவீன பாதுகாப்பு மாதிரியை ஆதரிக்கிறது.

யோக்டோ திட்டம் என்றால் என்ன?
தொடர்புடைய கட்டுரை:
யோக்டோ திட்டம் என்றால் என்ன: ஒரு முழுமையான உட்பொதிக்கப்பட்ட வழிகாட்டி