ການໂຈມຕີ Meltdown ເມື່ອການເລັ່ງຄວາມໄວຊີພີຢູ (CPU) ເປີດທາງໃຫ້ແຮັກເກີເຈາະລະບົບ
ການໂຈມຕີ Meltdown ເມື່ອການເລັ່ງຄວາມໄວຊີພີຢູ (CPU) ເປີດທາງໃຫ້ແຮັກເກີເຈາະລະບົບໄດ້
ການໂຈມຕີ Meltdown ທີ່ມີລາຍງານໃນອາທິດນີ້ ເປີດທາງໃຫ້ແຮັກເກີທີ່ສາມາດຣັນ (Run) ໂປຣແກຣມໃນເຄື່ອງຄອມພິວເຕີຂອງເຫຍື່ອ ສາມາດອ່ານຂໍ້ມູນໃນໜ່ວຍຄວາມຈຳໄດ້ທັງໝົດ ເຖິງວ່າຈະບໍ່ມີສິດອ່ານໜ່ວຍຄວາມຈຳບາງສ່ວນ ເຊັ່ນ: ໜ່ວຍຄວາມຈຳຂອງເຄີເນລ (Kernel) ແລະ ໂປຣເຊດ (Process) ອື່ນໆ.
ການສາທິດທີ່ຊັດເຈນທີ່ສຸດຄື ການລັກລະຫັດຜ່ານທີ່ຜູ້ໃຊ້ພິມໃນໂປຣແກຣມອື່ນ ດັ່ງ Link ວິດີໂອລຸ່ມນີ້:
ຂະນະທີ່ໂຄ້ດອ່ານຄ່າຕົວແປ untrusted_offset_from_caller
ໃນແຖວທີ 6 ກ່ອນຈະກວດສອບເງື່ອນໄຂ if ໃນແຖວທີ 7 ໃນ CPU ຍຸກໃໝ່ ແຖວທີ 8 ທີ່ເປັນການອ່ານຄ່າຈາກໜ່ວຍຄວາມຈຳຈະເລີ່ມເຮັດວຽກທັນທີ ໂດຍບໍ່ສົນໃຈວ່າການກວດສອບເງື່ອນໄຂ if ເປັນຈິງ ຫຼື ບໍ່.
ຜູ້ອອກແບບຊີພີຢູອອກແບບໃຫ້ເຮັດແບບນີ້ ເປັນການກຽມຂໍ້ມູນມາໄວ້ລ່ວງໜ້າ ເນື່ອງຈາກການເອີ້ນຂໍ້ມູນຈາກໜ່ວຍຄວາມຈຳອາດຈະໃຊ້ເວລາດົນ (ປະມານ 400-500 CPU cycle) ຫາກວ່າເງື່ອນໄຂ if ບໍ່ເປັນຈິງ ຊີພີຢູຈະລຶບລ້າງຂໍ້ມູນອອກຄືກັບບໍ່ເຄີຍເກີດຂຶ້ນ ໂປຣແກຣມຈະບໍ່ເຄີຍຮັບຮູ້ວ່າມີການອ່ານຄ່າໃນໜ່ວຍຄວາມຈຳຂຶ້ນມາແລ້ວ ແລະ ບໍ່ສາມາດຂຽນໂຄ້ດໃດໆ ເພື່ອພິຈາລະນາຄ່າໃນໜ່ວຍຄວາມຈຳທີ່ຊີພີຢູລຶບລ້າງອອກໄປນັ້ນໄດ້.
ຂະບວນການແບບນີ້ເຮັດໃຫ້ຊີພີຢູສາມາດເຮັດວຽກໄດ້ເຕັມທີ່ຂຶ້ນຢ່າງຫຼວງຫຼາຍ ປະສິດທິພາບໂດຍລວມທັງໝົດສູງຂຶ້ນລະດັບ 10% ຂຶ້ນໄປ ມັນເປັນເຕັກນິກທີ່ໃຊ້ງານກັນມາເປັນເວລາດົນນານ ແລະ ມີອະທິບາຍຢູ່ໃນຫນັງສືຮຽນສະຖາປັດຕະຍະກຳຄອມພິວເຕີໃໝ່ໆ.
ການໂຈມຕີ FLUSH+RELOAD
ເມື່ອປີ 2014 Yuval Yarom ແລະ Katrina Falkner ນັກວິໄຈຈາກມະຫາວິທະຍາໄລ Adelaide ນຳສະເໜີການໂຈມຕີທີ່ມີຊື່ວ່າ FLUSH+RELOAD ທີ່ເປີດໃຫ້ Process ຂອງ ແຮັກເກີ ທີ່ Run ໃນເຄື່ອງດຽວກັບເຫຍື່ອ ສາມາດອ່ານພຶດຕິກຳ ແລະ ຄາດເດົາຂໍ້ມູນໃນ Process ຂອງເຫຍື່ອໄດ້ ໂດຍສາທິດການອ່ານກະແຈ PGP ອອກມາຈາກໂປແກຣມ GnuPG ທີ່ກຳລັງເຊັນເອກະສານຢູ່.
ການໂຈມຕີ FLUSH+RELOAD ອາໃສພຶດຕິກຳຂອງລະບົບປະຕິບັດການຍຸກໃໝ່ ທີ່ຖ້າຫາກໂປຣແກຣມມີການເອີ້ນໃຊ້ໄບນາຣີ (Binary) ດຽວກັນ ເຊັ່ນ: ໄລບຣາຣີ (Library) ດຽວກັນ ຫຼື ໄບນາຣີຂອງໂປຣແກຣມດຽວກັນ (ແມ່ນຈະເອີ້ນໃຊ້ໂດຍຜູ້ໃຊ້ຄົນລະຄົົນທີ່ບໍ່ມີສິດອ່ານຂໍ້ມູນຂ້າມກັນ) ລະບົບປະຕິບັດການກໍ່ຈະໂຫຼດໄບນາຣີນັ້ນໆ ຂຶ້ນໄປຫາໜ່ວຍຄວາມຈຳພຽງເທື່ອດຽວ ແລະ ແຊຣ໌ (Share) ຮ່ວມກັນລະຫວ່າງຜູ້ໃຊ້ທັງໝົດ ເພື່ອປະຢັດໜ່ວຍຄວາມຈຳ ແລະ ເຮັດໃຫ້ຂະບວນການໂຫຼດໂປຣແກຣມໂດຍທົ່ວໄປໄວຂຶ້ນ.
ນອກຈາກພຶດຕິກຳຂອງລະບົບປະຕິບັດການ FLUSH+RELOAD ຍັງອາໃສຄຳສັ່ງ CLFLUSH (Flush Cache Line) ທີ່ໂປຣແກຣມສາມາດສັ່ງຍົກເລີກແຄດ (Cache) ຂອງໜ່ວຍຄວາມຈຳຕຳແໜ່ງໄດ້ ເຮັດໃຫ້ເມື່ອ Process ອື່ນຕ້ອງການໃຊ້ໜ່ວຍຄວາມຈຳຕຳແໜ່ງດຽວກັນ ຕ້ອງໂຫຼດໃໝ່ຈາກໜ່ວຍຄວາມຈຳ.
ຂະບວນການໂຈມຕີຂອງ FLUSH+RELOAD ຄືການສັ່ງ CLFLUSH ໜ່ວຍຄວາມຈຳທີ່ເປັນໂຄ້ດທີ່ເຫຍື່ອກຳລັງຈະຣັນອອກຈາກແຄດທັງໝົດ ແລ້ວທົດສອບອ່ານໜ່ວຍຄວາມຈຳຕຳແໜ່ງນັ້ນອີກເທື່ອໜຶ່ງໃນພາຍຫຼັງ ຖ້າຫາກອ່ານໄດ້ໄວສະແດງວ່າເຫຍື່ອເຄີຍຣັນໂຄ້ດໃນສ່ວນນັ້ນມາແລ້ວ.
ຮູບພາບຕົວຢ່າງຈາກລາຍງານ FLUSH+RELOAD ຮູບ (A) ເລີ່ມຕົ້້ນດ້ວຍແຮັກເກີລຶບລ້າງໂຄ້ດສ່ວນທີ່ຕ້ອງການເບິ່ງວ່າເຫຍື່ອເອີ້ນ ຫຼື ບໍ່ ອອກຈາກແຄດ ຫຼັງຈາກຊ່ວງເວລາໜຶ່ງແຮັກເກີກໍ່ເອີ້ນໜ່ວຍຄວາມຈຳສ່ວນນັ້ນດ້ວຍຕົວເອງ ເມື່ອໃຊ້ເວລາດົນ (ສີສົ້ມ) ຈຶ່ງຮູ້ໄດ້ວ່າເຫຍື່ອບໍ່ເຄີຍຣັນໂຄ້ດສ່ວນນັ້ນໃນຊ່ວງເວລາທີ່ລໍຖ້າ ຮູບ ( ສະແດງເຖິງກໍລະນີທີ່ເຫຍື່ອຣັນໂຄ້ດສ່ວນນັ້ນ ເມື່ອແຮັກເກີເອີ້ນອ່ານໜ່ວຍຄວາມຈຳກໍ່ຈະອ່ານໄດ້ໄວເພາະໂຄ້ດຢູ່ໃນແຄດຢູ່ແລ້ວ.
ເຖິງວ່າ FLUSH+RELOAD ຈະໜ້າສົນໃຈ ແຕ່ຂະບວນການໂຈມຕີຍັງຈຳກັດ ແຮັກເກີຕ້ອງເຂົ້າໃຈພຶດຕິກຳຂອງໂປຣແກຣມຢ່າງຊັດເຈນເພື່ອຫາພຶດຕິກຳທີ່ຕ້ອງການ ໂດຍບໍ່ສາມາດໄປອ່ານໜ່ວຍຄວາມຈຳຂອງເຫຍື່ອໄດ້ໂດຍກົງ.
ຊີພີຢູ ເອເອັມດີ (AMD) ບໍ່ໄດ້ຮັບຜົນກະທົບຈາກການໂຈມຕີ FLUSH+RELOAD ເນື່ອງຈາກພຶດຕິກຳຂອງຄຳສັ່ງ CLFLUSH ໃນຊິບເອເອັມດີນັ້ນຕ່າງອອກໄປ ເຖິງແມ່ນວ່າຈະລຶບລ້າງແຄດອອກຈາກ L1 ໄປແລ້ວ ແຕ່ກໍ່ບໍ່ໄດ້ລຶບລ້າງອອກຈາກ L2/L3 ເຮັດໃຫ້ການສັງເກດໄລຍະເວລາແຄດເຮັດໄດ້ຍາກກວ່າ.
ການໂຈມຕີ Meltdown
ການໂຈມຕີ Meltdown ມີເປົ້າໝາຍທີ່ການອ່ານໜ່ວຍຄວາມຈຳທີ່ໂປຣເຊດບໍ່ໄດ້ຮັບອະນຸຍາດ ເຊັ່ນ: ໜ່ວຍຄວາມຈຳຂອງເຄີເນລ ທີ່ປົກກະຕິແລ້ວຫາກວ່າໂປຣແກຣມພະຍາຍາມອ່ານໜ່ວຍຄວາມຈຳໃນຕຳແໜ່ງເຫຼົ່ານັ້ນ ລະບົບປະຕິບັດການຈະປິດການເຮັດວຽກງານຂອງໂປຣແກຣມທັນທີ.
ຢ່າງໃດກໍ່ຕາມ ໃນລະດັບຂອງຊີພີຢູແລ້ວ ເມື່ອມີການອ້າງອີງຂໍ້ມູນໃນໜ່ວຍຄວາມຈຳໂຕຊີພີຢູຈະພະຍາຍາມອ່ານຂໍ້ມູນເຫຼົ່ານັ້ນມາຖ້າໄວ້ ໂດຍບໍ່ສົນໃຈວ່າໂຕໂປຣເຊດມີສິດອ່ານຂໍ້ມູນເຫຼົ່ານັ້ນຈິງ ຫຼື ບໍ່ ເພາະຖ້າອ່ານບໍ່ໄດ້ຈິງກ່ອນທີ່ໂຕໂປຣແກຣມຈະດຶງຄ່າໄປໃຊ້ງານໄດ້ ລະບົບປະຕິບັດການກໍ່ຈະປິດໂປຣແກຣມກ່ອນຢູ່ດີ.
Meltdown ອາໃສພຶດຕິກຳນີ້ດ້ວຍການສ້າງໂຄ້ດທີ່ໂຫຼດໜ່ວຍຄວາມຈຳໂດຍອາໃສຂໍ້ມູນໃນຕຳແໜ່ງທີ່ບໍ່ມີສິດອ່ານ ເພື່ອສ້າງຂະບວນການສົ່ງຂໍ້ມູນອອກໄປພາຍນອກໂປຣເຊດທີ່ພະຍາຍາມອ່ານຂໍ້ມູນນັ້ນ.
ເບິ່ງໂຄ້ດຕົວຢ່າງຈາກ Project Zero ໂຄ້ດທີ່ສອງ ຕໍ່ໄປນີ້
ໂຄ້ດພະຍາຍາມເຂົ້າເຖິງໜ່ວຍຄວາມຈຳສ່ວນທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດ ໂດຍອາໃສຕົວແປ untrusted_offset_from_caller
ເມື່ອຄ່າຕຳແໜ່ງຜິດ ຫາກວ່າໂຫຼດໜ່ວຍຄວາມຈຳຈາກຄຳສັ່ງ value = arr1->data[untrusted_offset_from_caller]
ຂຶ້ນມາແທ້ ລະບົບປະຕິບັດການກໍ່ຈະປິດໂປຣແກຣມລົງ ເນື່ອງຈາກລະເມີດການຈຳກັດສິດການເຂົ້າເຖິງໜ່ວຍຄວາມຈຳ.
ເຖິງຢ່າງນັ້ນ ເນື່ອງຈາກຊີພີຢູພະຍາຍາມຣັນຄຳສັ່ງໄປກ່ອນລ່ວງໜ້າ ຄ່າໃນໜ່ວຍຄວາມຈຳນີ້ຈະຖືກອ່ານຂຶ້ນມາ ແລະ ຖືກຄິດໄລ່ຕໍ່ໄປໃນໂດຍທີ່ໂຕໂປຣແກຣມແທ້ໆ ຍັງບໍ່ຮັບຮູ້ ແລະ ຄິດໄລ່ຫາຄ່າຕົວແປ index2
(ແຖວທີ 10) ຕໍ່ໄປທັນທີ ຫາກຄ່າໃນຕົວແປ value
ມີບິດ (Bit) ສຸດທ້າຍເປັນ 0 ຄ່າ index2
ຈະມີຄ່າເປັນ 0x200 ຫາກເປັນ 1 ຈະເປັນ 0x300 ຫຼັງຈາກນັ້ນຂະບວນການຣັນຄຳສັ່ງລ່ວງໜ້າຈະໂຫຼດໜ່ວຍຄວາມຈຳຕາມແຖວທີ 13 ຂຶ້ນມາຖ້າເອົາໄວ້.
ເນື່ອງຈາກຄ່າຕົວແປ untrusted_offset_from_caller
ເປັນຄ່າທີ່ບໍ່ຖືກຕ້ອງ ເຊັ່ນ: ຄ່າໃຫຍ່ເກີນໄປຫຼາຍຈົນເກີນຂອບເຂດໜ່ວຍຄວາມຈຳຊ໋ອບແວ ເຮັດໃຫ້ໂຕໂປຣແກຣມຄືກັບບໍ່ເຄີຍຣັນໂຄ້ດແຖວທີ 9-15 ມາກ່ອນ ແຕ່ເນື່ອງຈາກລະບົບການຣັນຄຳສັ່ງລ່ວງໜ້າຂອງຊີພີຢູໄດ້ຣັນຄຳສັ່ງເຫຼົ່ານີ້ໄປແລ້ວ (ແລະ ຖິ້ມຜົນລັບທັງໝົດໄປ) ເຮັດໃຫ້ໜ່ວຍຄວາມຈຳຂອງ arr2->data
ຖືກໂຫຼດຂຶ້ນແຄດຖິ້ມເອົາໄວ້.
ການໂຈມຕີ Meltdown ອາໃສພຶດຕິກຳນີ້ ສ້າງໂປຣແກຣມທີ່ຫຼອກລໍ້ໃຫ້ຊີພີຢູໂຫຼດໜ່ວຍຄວາມຈຳໃນສ່ວນທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດຂຶ້ນມາເບິ່ງຄ່າຊ້ຳໆ ໄປເລື້ອຍໆ ແລ້ວຄ່ອຍໆສັງເກດພຶດຕິກຳເພື່ອອ່ານຄ່າໃນໜ່ວຍຄວາມຈຳສ່ວນທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ອ່ານ.
ຂະບວນການນີ້ເປັນຂະບວນການທີ່ຊ້າ Project Zero ລາຍງານວ່າສາມາດອ່ານໜ່ວຍຄວາມຈຳເຄີເນລໄດ້ດ້ວຍອັດຕາ 2 KB/s ຂະນະທີ່ທີມວິໄຈຈາກ Graz University of Technology ສາມາດປັບປຸງໂດຍໃຊ້ຊຸດຄຳສັ່ງ TSX ຂອງອິນເທລ (Intel) ຈົນເລັ່ງຄວາມໄວການອ່ານໜ່ວຍຄວາມຈຳໄດ້ເຖິງ 503 KB/s.
ຄົນທົ່ວໄປຄວນເຮັດຫຍັງເພື່ອຮັບມືກັບ Meltdown
ສຳລັບຜູ້ໃຊ້ທົ່ວໄປ ພຽງແຕ່ຖ້າອັບເດດແພັດແກ້ໄຂ (Patch) ຈາກຜູ້ຜະລິດກໍ່ສາມາດປ້ອງກັນຕົນເອງຈາກ Meltdown ໄດ້ເຊັ່ນດຽວກັບຊ່ອງໂຫວ່ອື່ນທົ່ວໄປ.
ຢ່າງໃດກໍ່ຕາມ ແພັດທີ່ອອກມາຈະກະທົບຕໍ່ງານບາງປະເພດຫຼາຍເປັນພິເສດ ໂດຍສະເພາະງານຖານຂໍ້ມູນປິ້ງ (Ping) PostgreSQL ທາງທີ່ຫຼຸດຜົນກະທົບຫາກໃຊ້ຊີພີຢູຮຸ່ນໃໝ່ໆ ທີ່ມີຄຸນສົມບັດ PCID (Process-Context Identifiers) ຈະຊ່ວຍຫຼຸດຜົນກະທົບໄປໄດ້ຫຼາຍ ລາຍງານທົດສອບ PostgreSQL ລະບຸວ່າຫາກໃຊ້ PCID ສາມາດຫຼຸດຜົນກະທົບຈາກ 23% ເຫຼືອ 17% ໃນການທົດສອບທີ່ບໍ່ດີທີ່ສຸດ (ອີກການທົດສອບໜຶ່ງເມື່ອເປີດ PCID ຜົນກະທົບຢູ່ທີ່ 7%)
Phoronix ທົດສອບງານຮູບແບບຕ່າງໆ ທີ່ໄດ້ຮັບຜົນກະທົບຈາກແພັດ KPTI ທີ່ແກ້ການໂຈມຕີ Meltdown ພົບວ່າເກມນັ້ນເກືອບຈະບໍ່ມີຜົນກະທົບໃດໆ ລວມເຖິງວຽກການປັບແຕ່ງຮູບພາບ (ທົດສອບດ້ວຍ Darktable) ໂດຍທົ່ວໄປແລ້ວສຳລັບຜູ້ໃຊ້ຄອມຕັ້ງໂຕະ (Desktop) ເກືອບຈະບໍ່ມີຫຍັງຕ້ອງກັງວົນ.
ເອກະສານອ້າງອີງ:
Porher 05 March 2020 1209 reads
Print
ການໂຈມຕີ Meltdown ເມື່ອການເລັ່ງຄວາມໄວຊີພີຢູ (CPU) ເປີດທາງໃຫ້ແຮັກເກີເຈາະລະບົບໄດ້
ການໂຈມຕີ Meltdown ທີ່ມີລາຍງານໃນອາທິດນີ້ ເປີດທາງໃຫ້ແຮັກເກີທີ່ສາມາດຣັນ (Run) ໂປຣແກຣມໃນເຄື່ອງຄອມພິວເຕີຂອງເຫຍື່ອ ສາມາດອ່ານຂໍ້ມູນໃນໜ່ວຍຄວາມຈຳໄດ້ທັງໝົດ ເຖິງວ່າຈະບໍ່ມີສິດອ່ານໜ່ວຍຄວາມຈຳບາງສ່ວນ ເຊັ່ນ: ໜ່ວຍຄວາມຈຳຂອງເຄີເນລ (Kernel) ແລະ ໂປຣເຊດ (Process) ອື່ນໆ.
ການສາທິດທີ່ຊັດເຈນທີ່ສຸດຄື ການລັກລະຫັດຜ່ານທີ່ຜູ້ໃຊ້ພິມໃນໂປຣແກຣມອື່ນ ດັ່ງ Link ວິດີໂອລຸ່ມນີ້:
ຂະນະທີ່ໂຄ້ດອ່ານຄ່າຕົວແປ untrusted_offset_from_caller
ໃນແຖວທີ 6 ກ່ອນຈະກວດສອບເງື່ອນໄຂ if ໃນແຖວທີ 7 ໃນ CPU ຍຸກໃໝ່ ແຖວທີ 8 ທີ່ເປັນການອ່ານຄ່າຈາກໜ່ວຍຄວາມຈຳຈະເລີ່ມເຮັດວຽກທັນທີ ໂດຍບໍ່ສົນໃຈວ່າການກວດສອບເງື່ອນໄຂ if ເປັນຈິງ ຫຼື ບໍ່.
ຜູ້ອອກແບບຊີພີຢູອອກແບບໃຫ້ເຮັດແບບນີ້ ເປັນການກຽມຂໍ້ມູນມາໄວ້ລ່ວງໜ້າ ເນື່ອງຈາກການເອີ້ນຂໍ້ມູນຈາກໜ່ວຍຄວາມຈຳອາດຈະໃຊ້ເວລາດົນ (ປະມານ 400-500 CPU cycle) ຫາກວ່າເງື່ອນໄຂ if ບໍ່ເປັນຈິງ ຊີພີຢູຈະລຶບລ້າງຂໍ້ມູນອອກຄືກັບບໍ່ເຄີຍເກີດຂຶ້ນ ໂປຣແກຣມຈະບໍ່ເຄີຍຮັບຮູ້ວ່າມີການອ່ານຄ່າໃນໜ່ວຍຄວາມຈຳຂຶ້ນມາແລ້ວ ແລະ ບໍ່ສາມາດຂຽນໂຄ້ດໃດໆ ເພື່ອພິຈາລະນາຄ່າໃນໜ່ວຍຄວາມຈຳທີ່ຊີພີຢູລຶບລ້າງອອກໄປນັ້ນໄດ້.
ຂະບວນການແບບນີ້ເຮັດໃຫ້ຊີພີຢູສາມາດເຮັດວຽກໄດ້ເຕັມທີ່ຂຶ້ນຢ່າງຫຼວງຫຼາຍ ປະສິດທິພາບໂດຍລວມທັງໝົດສູງຂຶ້ນລະດັບ 10% ຂຶ້ນໄປ ມັນເປັນເຕັກນິກທີ່ໃຊ້ງານກັນມາເປັນເວລາດົນນານ ແລະ ມີອະທິບາຍຢູ່ໃນຫນັງສືຮຽນສະຖາປັດຕະຍະກຳຄອມພິວເຕີໃໝ່ໆ.
ການໂຈມຕີ FLUSH+RELOAD
ເມື່ອປີ 2014 Yuval Yarom ແລະ Katrina Falkner ນັກວິໄຈຈາກມະຫາວິທະຍາໄລ Adelaide ນຳສະເໜີການໂຈມຕີທີ່ມີຊື່ວ່າ FLUSH+RELOAD ທີ່ເປີດໃຫ້ Process ຂອງ ແຮັກເກີ ທີ່ Run ໃນເຄື່ອງດຽວກັບເຫຍື່ອ ສາມາດອ່ານພຶດຕິກຳ ແລະ ຄາດເດົາຂໍ້ມູນໃນ Process ຂອງເຫຍື່ອໄດ້ ໂດຍສາທິດການອ່ານກະແຈ PGP ອອກມາຈາກໂປແກຣມ GnuPG ທີ່ກຳລັງເຊັນເອກະສານຢູ່.
ການໂຈມຕີ FLUSH+RELOAD ອາໃສພຶດຕິກຳຂອງລະບົບປະຕິບັດການຍຸກໃໝ່ ທີ່ຖ້າຫາກໂປຣແກຣມມີການເອີ້ນໃຊ້ໄບນາຣີ (Binary) ດຽວກັນ ເຊັ່ນ: ໄລບຣາຣີ (Library) ດຽວກັນ ຫຼື ໄບນາຣີຂອງໂປຣແກຣມດຽວກັນ (ແມ່ນຈະເອີ້ນໃຊ້ໂດຍຜູ້ໃຊ້ຄົນລະຄົົນທີ່ບໍ່ມີສິດອ່ານຂໍ້ມູນຂ້າມກັນ) ລະບົບປະຕິບັດການກໍ່ຈະໂຫຼດໄບນາຣີນັ້ນໆ ຂຶ້ນໄປຫາໜ່ວຍຄວາມຈຳພຽງເທື່ອດຽວ ແລະ ແຊຣ໌ (Share) ຮ່ວມກັນລະຫວ່າງຜູ້ໃຊ້ທັງໝົດ ເພື່ອປະຢັດໜ່ວຍຄວາມຈຳ ແລະ ເຮັດໃຫ້ຂະບວນການໂຫຼດໂປຣແກຣມໂດຍທົ່ວໄປໄວຂຶ້ນ.
ນອກຈາກພຶດຕິກຳຂອງລະບົບປະຕິບັດການ FLUSH+RELOAD ຍັງອາໃສຄຳສັ່ງ CLFLUSH (Flush Cache Line) ທີ່ໂປຣແກຣມສາມາດສັ່ງຍົກເລີກແຄດ (Cache) ຂອງໜ່ວຍຄວາມຈຳຕຳແໜ່ງໄດ້ ເຮັດໃຫ້ເມື່ອ Process ອື່ນຕ້ອງການໃຊ້ໜ່ວຍຄວາມຈຳຕຳແໜ່ງດຽວກັນ ຕ້ອງໂຫຼດໃໝ່ຈາກໜ່ວຍຄວາມຈຳ.
ຂະບວນການໂຈມຕີຂອງ FLUSH+RELOAD ຄືການສັ່ງ CLFLUSH ໜ່ວຍຄວາມຈຳທີ່ເປັນໂຄ້ດທີ່ເຫຍື່ອກຳລັງຈະຣັນອອກຈາກແຄດທັງໝົດ ແລ້ວທົດສອບອ່ານໜ່ວຍຄວາມຈຳຕຳແໜ່ງນັ້ນອີກເທື່ອໜຶ່ງໃນພາຍຫຼັງ ຖ້າຫາກອ່ານໄດ້ໄວສະແດງວ່າເຫຍື່ອເຄີຍຣັນໂຄ້ດໃນສ່ວນນັ້ນມາແລ້ວ.
ຮູບພາບຕົວຢ່າງຈາກລາຍງານ FLUSH+RELOAD ຮູບ (A) ເລີ່ມຕົ້້ນດ້ວຍແຮັກເກີລຶບລ້າງໂຄ້ດສ່ວນທີ່ຕ້ອງການເບິ່ງວ່າເຫຍື່ອເອີ້ນ ຫຼື ບໍ່ ອອກຈາກແຄດ ຫຼັງຈາກຊ່ວງເວລາໜຶ່ງແຮັກເກີກໍ່ເອີ້ນໜ່ວຍຄວາມຈຳສ່ວນນັ້ນດ້ວຍຕົວເອງ ເມື່ອໃຊ້ເວລາດົນ (ສີສົ້ມ) ຈຶ່ງຮູ້ໄດ້ວ່າເຫຍື່ອບໍ່ເຄີຍຣັນໂຄ້ດສ່ວນນັ້ນໃນຊ່ວງເວລາທີ່ລໍຖ້າ ຮູບ ( ສະແດງເຖິງກໍລະນີທີ່ເຫຍື່ອຣັນໂຄ້ດສ່ວນນັ້ນ ເມື່ອແຮັກເກີເອີ້ນອ່ານໜ່ວຍຄວາມຈຳກໍ່ຈະອ່ານໄດ້ໄວເພາະໂຄ້ດຢູ່ໃນແຄດຢູ່ແລ້ວ.
ເຖິງວ່າ FLUSH+RELOAD ຈະໜ້າສົນໃຈ ແຕ່ຂະບວນການໂຈມຕີຍັງຈຳກັດ ແຮັກເກີຕ້ອງເຂົ້າໃຈພຶດຕິກຳຂອງໂປຣແກຣມຢ່າງຊັດເຈນເພື່ອຫາພຶດຕິກຳທີ່ຕ້ອງການ ໂດຍບໍ່ສາມາດໄປອ່ານໜ່ວຍຄວາມຈຳຂອງເຫຍື່ອໄດ້ໂດຍກົງ.
ຊີພີຢູ ເອເອັມດີ (AMD) ບໍ່ໄດ້ຮັບຜົນກະທົບຈາກການໂຈມຕີ FLUSH+RELOAD ເນື່ອງຈາກພຶດຕິກຳຂອງຄຳສັ່ງ CLFLUSH ໃນຊິບເອເອັມດີນັ້ນຕ່າງອອກໄປ ເຖິງແມ່ນວ່າຈະລຶບລ້າງແຄດອອກຈາກ L1 ໄປແລ້ວ ແຕ່ກໍ່ບໍ່ໄດ້ລຶບລ້າງອອກຈາກ L2/L3 ເຮັດໃຫ້ການສັງເກດໄລຍະເວລາແຄດເຮັດໄດ້ຍາກກວ່າ.
ການໂຈມຕີ Meltdown
ການໂຈມຕີ Meltdown ມີເປົ້າໝາຍທີ່ການອ່ານໜ່ວຍຄວາມຈຳທີ່ໂປຣເຊດບໍ່ໄດ້ຮັບອະນຸຍາດ ເຊັ່ນ: ໜ່ວຍຄວາມຈຳຂອງເຄີເນລ ທີ່ປົກກະຕິແລ້ວຫາກວ່າໂປຣແກຣມພະຍາຍາມອ່ານໜ່ວຍຄວາມຈຳໃນຕຳແໜ່ງເຫຼົ່ານັ້ນ ລະບົບປະຕິບັດການຈະປິດການເຮັດວຽກງານຂອງໂປຣແກຣມທັນທີ.
ຢ່າງໃດກໍ່ຕາມ ໃນລະດັບຂອງຊີພີຢູແລ້ວ ເມື່ອມີການອ້າງອີງຂໍ້ມູນໃນໜ່ວຍຄວາມຈຳໂຕຊີພີຢູຈະພະຍາຍາມອ່ານຂໍ້ມູນເຫຼົ່ານັ້ນມາຖ້າໄວ້ ໂດຍບໍ່ສົນໃຈວ່າໂຕໂປຣເຊດມີສິດອ່ານຂໍ້ມູນເຫຼົ່ານັ້ນຈິງ ຫຼື ບໍ່ ເພາະຖ້າອ່ານບໍ່ໄດ້ຈິງກ່ອນທີ່ໂຕໂປຣແກຣມຈະດຶງຄ່າໄປໃຊ້ງານໄດ້ ລະບົບປະຕິບັດການກໍ່ຈະປິດໂປຣແກຣມກ່ອນຢູ່ດີ.
Meltdown ອາໃສພຶດຕິກຳນີ້ດ້ວຍການສ້າງໂຄ້ດທີ່ໂຫຼດໜ່ວຍຄວາມຈຳໂດຍອາໃສຂໍ້ມູນໃນຕຳແໜ່ງທີ່ບໍ່ມີສິດອ່ານ ເພື່ອສ້າງຂະບວນການສົ່ງຂໍ້ມູນອອກໄປພາຍນອກໂປຣເຊດທີ່ພະຍາຍາມອ່ານຂໍ້ມູນນັ້ນ.
ເບິ່ງໂຄ້ດຕົວຢ່າງຈາກ Project Zero ໂຄ້ດທີ່ສອງ ຕໍ່ໄປນີ້
ໂຄ້ດພະຍາຍາມເຂົ້າເຖິງໜ່ວຍຄວາມຈຳສ່ວນທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດ ໂດຍອາໃສຕົວແປ untrusted_offset_from_caller
ເມື່ອຄ່າຕຳແໜ່ງຜິດ ຫາກວ່າໂຫຼດໜ່ວຍຄວາມຈຳຈາກຄຳສັ່ງ value = arr1->data[untrusted_offset_from_caller]
ຂຶ້ນມາແທ້ ລະບົບປະຕິບັດການກໍ່ຈະປິດໂປຣແກຣມລົງ ເນື່ອງຈາກລະເມີດການຈຳກັດສິດການເຂົ້າເຖິງໜ່ວຍຄວາມຈຳ.
ເຖິງຢ່າງນັ້ນ ເນື່ອງຈາກຊີພີຢູພະຍາຍາມຣັນຄຳສັ່ງໄປກ່ອນລ່ວງໜ້າ ຄ່າໃນໜ່ວຍຄວາມຈຳນີ້ຈະຖືກອ່ານຂຶ້ນມາ ແລະ ຖືກຄິດໄລ່ຕໍ່ໄປໃນໂດຍທີ່ໂຕໂປຣແກຣມແທ້ໆ ຍັງບໍ່ຮັບຮູ້ ແລະ ຄິດໄລ່ຫາຄ່າຕົວແປ index2
(ແຖວທີ 10) ຕໍ່ໄປທັນທີ ຫາກຄ່າໃນຕົວແປ value
ມີບິດ (Bit) ສຸດທ້າຍເປັນ 0 ຄ່າ index2
ຈະມີຄ່າເປັນ 0x200 ຫາກເປັນ 1 ຈະເປັນ 0x300 ຫຼັງຈາກນັ້ນຂະບວນການຣັນຄຳສັ່ງລ່ວງໜ້າຈະໂຫຼດໜ່ວຍຄວາມຈຳຕາມແຖວທີ 13 ຂຶ້ນມາຖ້າເອົາໄວ້.
ເນື່ອງຈາກຄ່າຕົວແປ untrusted_offset_from_caller
ເປັນຄ່າທີ່ບໍ່ຖືກຕ້ອງ ເຊັ່ນ: ຄ່າໃຫຍ່ເກີນໄປຫຼາຍຈົນເກີນຂອບເຂດໜ່ວຍຄວາມຈຳຊ໋ອບແວ ເຮັດໃຫ້ໂຕໂປຣແກຣມຄືກັບບໍ່ເຄີຍຣັນໂຄ້ດແຖວທີ 9-15 ມາກ່ອນ ແຕ່ເນື່ອງຈາກລະບົບການຣັນຄຳສັ່ງລ່ວງໜ້າຂອງຊີພີຢູໄດ້ຣັນຄຳສັ່ງເຫຼົ່ານີ້ໄປແລ້ວ (ແລະ ຖິ້ມຜົນລັບທັງໝົດໄປ) ເຮັດໃຫ້ໜ່ວຍຄວາມຈຳຂອງ arr2->data
ຖືກໂຫຼດຂຶ້ນແຄດຖິ້ມເອົາໄວ້.
ການໂຈມຕີ Meltdown ອາໃສພຶດຕິກຳນີ້ ສ້າງໂປຣແກຣມທີ່ຫຼອກລໍ້ໃຫ້ຊີພີຢູໂຫຼດໜ່ວຍຄວາມຈຳໃນສ່ວນທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດຂຶ້ນມາເບິ່ງຄ່າຊ້ຳໆ ໄປເລື້ອຍໆ ແລ້ວຄ່ອຍໆສັງເກດພຶດຕິກຳເພື່ອອ່ານຄ່າໃນໜ່ວຍຄວາມຈຳສ່ວນທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ອ່ານ.
ຂະບວນການນີ້ເປັນຂະບວນການທີ່ຊ້າ Project Zero ລາຍງານວ່າສາມາດອ່ານໜ່ວຍຄວາມຈຳເຄີເນລໄດ້ດ້ວຍອັດຕາ 2 KB/s ຂະນະທີ່ທີມວິໄຈຈາກ Graz University of Technology ສາມາດປັບປຸງໂດຍໃຊ້ຊຸດຄຳສັ່ງ TSX ຂອງອິນເທລ (Intel) ຈົນເລັ່ງຄວາມໄວການອ່ານໜ່ວຍຄວາມຈຳໄດ້ເຖິງ 503 KB/s.
ຄົນທົ່ວໄປຄວນເຮັດຫຍັງເພື່ອຮັບມືກັບ Meltdown
ສຳລັບຜູ້ໃຊ້ທົ່ວໄປ ພຽງແຕ່ຖ້າອັບເດດແພັດແກ້ໄຂ (Patch) ຈາກຜູ້ຜະລິດກໍ່ສາມາດປ້ອງກັນຕົນເອງຈາກ Meltdown ໄດ້ເຊັ່ນດຽວກັບຊ່ອງໂຫວ່ອື່ນທົ່ວໄປ.
ຢ່າງໃດກໍ່ຕາມ ແພັດທີ່ອອກມາຈະກະທົບຕໍ່ງານບາງປະເພດຫຼາຍເປັນພິເສດ ໂດຍສະເພາະງານຖານຂໍ້ມູນປິ້ງ (Ping) PostgreSQL ທາງທີ່ຫຼຸດຜົນກະທົບຫາກໃຊ້ຊີພີຢູຮຸ່ນໃໝ່ໆ ທີ່ມີຄຸນສົມບັດ PCID (Process-Context Identifiers) ຈະຊ່ວຍຫຼຸດຜົນກະທົບໄປໄດ້ຫຼາຍ ລາຍງານທົດສອບ PostgreSQL ລະບຸວ່າຫາກໃຊ້ PCID ສາມາດຫຼຸດຜົນກະທົບຈາກ 23% ເຫຼືອ 17% ໃນການທົດສອບທີ່ບໍ່ດີທີ່ສຸດ (ອີກການທົດສອບໜຶ່ງເມື່ອເປີດ PCID ຜົນກະທົບຢູ່ທີ່ 7%)
Phoronix ທົດສອບງານຮູບແບບຕ່າງໆ ທີ່ໄດ້ຮັບຜົນກະທົບຈາກແພັດ KPTI ທີ່ແກ້ການໂຈມຕີ Meltdown ພົບວ່າເກມນັ້ນເກືອບຈະບໍ່ມີຜົນກະທົບໃດໆ ລວມເຖິງວຽກການປັບແຕ່ງຮູບພາບ (ທົດສອບດ້ວຍ Darktable) ໂດຍທົ່ວໄປແລ້ວສຳລັບຜູ້ໃຊ້ຄອມຕັ້ງໂຕະ (Desktop) ເກືອບຈະບໍ່ມີຫຍັງຕ້ອງກັງວົນ.
ເອກະສານອ້າງອີງ: