gpg2: คำเตือน: การใช้หน่วยความจำที่ไม่ปลอดภัย!


11

ณ วันนี้ทุกครั้งที่ฉันใช้gpg2(ติดตั้งผ่าน Homebrew) บน Mac ของฉัน (10.12.1) ตอนนี้ฉันเห็นคำเตือนต่อไปนี้:

Warning: using insecure memory!

สำหรับสิ่งที่คุ้มค่าฉันเห็นการทำงานแบบเดียวกันนี้ในเครื่องที่แตกต่างกันสองเครื่องคือ Mac mini (ปลายปี 2012) และ MacBook Pro (ปลายปี 2012) ทั้งสองรุ่นกำลังรัน 10.12.1

ตามที่GnuPG คำถามที่พบบ่อยพูดว่า:

GnuPG พยายามล็อคหน่วยความจำเพื่อไม่ให้กระบวนการอื่นมองเห็นได้และเพื่อไม่ให้เขียนหน่วยความจำเพื่อแลกเปลี่ยน หากมีเหตุผลบางอย่างที่ไม่สามารถทำได้ (ตัวอย่างเช่นบางแพลตฟอร์มไม่รองรับการล็อกหน่วยความจำชนิดนี้) GnuPG จะเตือนคุณว่าใช้หน่วยความจำที่ไม่ปลอดภัย

แม้ว่าการใช้หน่วยความจำที่ปลอดภัยจะดีกว่า แต่ก็ไม่ได้เป็นเรื่องดีที่จะใช้หน่วยความจำที่ไม่ปลอดภัย หากคุณเป็นเจ้าของเครื่องและคุณมั่นใจว่าไม่มีการซ่อนมัลแวร์คำเตือนนี้อาจถูกละเว้น

สิ่งที่แผ่นกั้นฉันก็คือgpg2ยังไม่ได้เปลี่ยนแปลงตั้งแต่12 กันยายน 2016 ฉันมีรุ่น 2.0.30 ติดตั้งตั้งแต่หรือน้อยกว่านั้น แต่ฉันเพิ่งเริ่มเห็นคำเตือนเกี่ยวกับหน่วยความจำที่ไม่ปลอดภัยในวันนี้ แม้ว่าgpg2สูตรยังไม่ได้เปลี่ยนแปลงตั้งแต่ 12 กันยายน 2016 brew update && brew upgradeสิ่งหนึ่งที่ผมสามารถพูดได้ว่าผมทำบนเครื่องทั้งสองก่อนที่จะเริ่มมีอาการของการได้เห็นคำเตือนนี้เป็น แต่ฉันไม่แน่ใจด้วยซ้ำว่ามันจะส่งผลกระทบต่อเรื่องนี้อย่างไร ตามที่ GnuPG คำถามที่พบบ่อยกล่าวว่าดูเหมือนว่ามีบางอย่างที่เกี่ยวข้องกับระบบปฏิบัติการและการล็อกหน่วยความจำ

... และสิ่งที่แปลกยิ่งกว่านั้นคือฉันยังได้gpg1ติดตั้งจาก Homebrew (เวอร์ชั่น 1.4.21) ซึ่งไม่ได้เตือนเกี่ยวกับหน่วยความจำที่ไม่ปลอดภัยเมื่อฉันใช้งาน:

$ gpg1 --require-secmem
gpg: Go ahead and type your message ...
^C
gpg: Interrupt caught ... exiting

$ gpg2 --require-secmem
Warning: using insecure memory!
gpg: will not run with insecure memory due to --require-secmem

ไบนารีทั้งสองเป็นของเจ้าของและกลุ่มเดียวกันและมีสิทธิ์เหมือนกัน:

-r-xr-xr-x  1 adamliter  admin  681932 Dec 10 18:06 /usr/local/Cellar/gnupg2/2.0.30_2/bin/gpg2
-r-xr-xr-x  1 adamliter  admin  929352 Aug 17 09:21 /usr/local/Cellar/gnupg/1.4.21/bin/gpg1

ฉันเพิ่งลองติดตั้งใหม่gpg2กับ Homebrew: ทั้งสองโดยใช้ไบนารีที่คอมไพล์แล้วและโดยการสร้างแหล่งที่มาของฟอร์ม แต่สิ่งนี้จะไม่เปลี่ยนแปลงอะไรเลย ฉันยังได้รับคำเตือนเกี่ยวกับการใช้หน่วยความจำที่ไม่ปลอดภัย

นอกจากนี้ยังทำให้ gpg2 ไบนารีมีบิตราก setuid พลิก (ตามที่แนะนำเช่น , ที่นี่ ) ไม่ก่อให้เกิดข้อความที่จะหายไป; มันยังเตือนเกี่ยวกับการใช้หน่วยความจำที่ไม่ปลอดภัย

ไม่มีใครรู้ว่าสิ่งใดที่สามารถเปลี่ยนแปลงได้เช่นนี้ทันทีที่ฉันจะเริ่มเห็นคำเตือนนี้ และทำไมฉันถึงเห็นมันเมื่อใช้gpg2ไบนารี่ แต่ไม่ใช่gpg1ไบนารี่?

ข้อมูลอื่น ๆ ที่อาจเกี่ยวข้อง:

$ which gpg1
/usr/local/bin/gpg1
$ ls -al /usr/local/bin/gpg1
lrwxr-xr-x  1 adamliter  admin  31 Aug 17 17:42 /usr/local/bin/gpg1 -> ../Cellar/gnupg/1.4.21/bin/gpg1
$ which gpg2
/usr/local/bin/gpg2
$ ls -al /usr/local/bin/gpg2
lrwxr-xr-x  1 adamliter  admin  34 Dec 10 18:06 /usr/local/bin/gpg2 -> ../Cellar/gnupg2/2.0.30_2/bin/gpg2

ปรับปรุง

libgcryptผมคิดว่าเหตุผลนี้เกิดขึ้นเป็นเพราะรุ่นใหม่ของ ฉันยังไม่รู้ว่าทำไมถึงเกิดขึ้น แต่ฉันค่อนข้างแน่ใจว่านี่เป็นสาเหตุของปัญหาอย่างน้อย สูตรการlibgcryptได้รับการปรับปรุงเพียงวันนี้สำหรับ 1.7.4 ชน; สิ่งนี้จะอธิบายว่าทำไมฉันจึงเห็นสิ่งนี้ในคอมพิวเตอร์สองเครื่องหลังจากbrew update && brew upgradeนั้น มันจะอธิบายว่าทำไมมันไม่ได้เกิดขึ้นgpg1เพราะgpg1ไม่พึ่งพาlibgcryptไลบรารีการเข้ารหัสลับภายนอกแทนที่จะใช้ไลบรารีการเข้ารหัสแบบรวมของตัวเอง

นอกจากนี้ฉันยังgpg2ติดตั้งจาก MacGPG Suite ซึ่งไม่แสดงปัญหานี้และเชื่อมโยงกับเวอร์ชันอื่นของlibgcrypt:

$ /usr/local/MacGPG2/bin/gpg2 --version
gpg (GnuPG/MacGPG2) 2.0.30
libgcrypt 1.6.6
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ gpg2 --version
gpg (GnuPG) 2.0.30
libgcrypt 1.7.4
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

libgcryptดังนั้นฉันคาดเดาว่านี้อาจเป็นรายงานข้อผิดพลาดสำหรับการดูแลของ ฉันจะโพสต์ลงในรายชื่อผู้รับจดหมาย แต่ฉันจะทิ้งไว้ที่นี่ในกรณีที่มีคนอื่นเจอปัญหาเดียวกันและ / หรือในกรณีที่คนอื่นรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น หากฉันได้รับการยืนยันหลังจากส่งคำไปยังรายชื่อผู้รับจดหมายว่านี่เป็นข้อผิดพลาดฉันจะลงคะแนนเพื่อปิดคำถามนี้


ผมตรงไปตรงมาไม่แน่ใจว่าคำถามนี้มีความเหมาะสมมากที่สุดที่นี่ใน Apple.SE หรือถ้ามันเหมาะสมมากขึ้นสำหรับUnix.SE ฉันถามที่นี่ก่อนเนื่องจากคำถามที่พบบ่อยของ GnuPG แสดงให้เห็นว่าอาจเป็นเรื่องเกี่ยวกับระบบปฏิบัติการและการล็อกหน่วยความจำ แต่โปรดแนะนำการโยกย้ายหากคุณคิดเป็นอย่างอื่น
อดัมลิตร

techrepublic.com/blog/it-security/the-insecure-memory-faqดูเหมือนจะแนะนำสาเหตุอาจเป็นเพราะสภาพแวดล้อมของคุณมี RAM ต่ำและจำเป็นต้องเขียนข้อมูลเพื่อสลับพื้นที่
sideshowbarker

@socketbarker นั่นเป็นความคิดเริ่มต้นของฉันเช่นกัน แต่ (i) ที่จะไม่อธิบายความแตกต่างระหว่างพฤติกรรมที่มีgpg1และgpg2และ (ii) ฉันได้ตรวจสอบหน่วยความจำบนคอมพิวเตอร์ของฉันเมื่อทำการทดสอบนี้และมีหน่วยความจำที่ไม่ได้ใช้มากมาย เมื่อฉันเห็นข้อความเตือน ฉันคิดว่าฉันแปลรากของปัญหานี้แล้ว แต่ฉันยังไม่แน่ใจว่าเหตุใดจึงเกิดขึ้น จะอัปเดตคำถามในไม่กี่วินาที
อดัมลิตร

@sideshowbarker อัปเดตแล้ว!
อดัมลิตร

คำตอบ:


9

ความแตกต่างระหว่างgpg1และgpg2ที่ฉันสังเกตเห็นเกิดขึ้นจากความจริงที่gpg2ใช้ไลบรารีเข้ารหัสลับภายนอกlibgcryptในขณะที่gpg1ใช้ไลบรารีเข้ารหัสลับแบบรวม

และโดยเฉพาะHomebrew ได้อัปเดตเป็นรุ่น 1.7.4 libgcryptในวันที่ 10 ธันวาคมซึ่งแนะนำการถดถอยในlibgcryptโค้ดซึ่งนำไปสู่การเตือนหน่วยความจำที่ไม่ปลอดภัย

ในตอนแรกมีการถกเถียงกันเล็กน้อยเกี่ยวกับเรื่องนี้ในคำขอดึงที่นำเสนอสูตรสำหรับlibgcrypt1.7.4 ใน Homebrewโดยแนะนำว่าอาจเป็นเพราะการออกแบบ:

อย่างไรก็ตามมันกลับกลายเป็นว่านี่เป็นข้อผิดพลาดอย่างแน่นอน รายงานข้อผิดพลาดเฉพาะถูกยื่นที่นี่:

ข้อผิดพลาดได้รับการแก้ไขในนี้กระทำและการแก้ไขที่ถูกปล่อยออกมาในlibgcrypt1.7.5 ซึ่งในขณะที่เขียนเป็นตอนนี้รุ่นที่ติดตั้ง Homebrew ขอบคุณที่ Dominyk ไถนา brew update && brew upgradeดังนั้นเพื่อแก้ไขปัญหานี้คุณก็สามารถทำ


เพื่อประโยชน์ของลูกหลานต่อไปนี้เป็นข้อมูลจากรุ่นเก่าของคำตอบนี้ก่อนที่จะได้รับการยืนยันว่านี่เป็นข้อผิดพลาดในlibgcrypt:

สิ่งหนึ่งที่คุณสามารถทำได้ถ้าคุณต้องการ แต่ไม่เคยเห็นคำเตือนเกี่ยวกับหน่วยความจำที่ไม่ปลอดภัยคือการเพิ่มการno-secmem-warning รุ่นเก่าของ GnuPG คำถามที่พบบ่อยชี้ให้เห็น:~/.gnupg/gpg.conf

การล็อกหน้าไม่ให้สลับกันนั้นไม่จำเป็นถ้าระบบของคุณใช้พาร์ติชั่นการแลกเปลี่ยนที่เข้ารหัส ในความเป็นจริงนั้นเป็นวิธีที่ดีที่สุดในการปกป้องข้อมูลที่สำคัญจากการสิ้นสุดบนดิสก์ หากระบบของคุณอนุญาตให้มีการสลับพาร์ติชั่นการเข้ารหัสโปรดใช้ประโยชน์จากคุณสมบัตินั้น โปรดทราบว่า GPG ไม่ทราบเกี่ยวกับพาร์ทิชัน swap ที่เข้ารหัสและอาจพิมพ์คำเตือน; ดังนั้นคุณควรปิดการใช้งานคำเตือนหากพาร์ทิชัน swap ของคุณถูกเข้ารหัส คุณอาจต้องการปิดใช้งานคำเตือนนี้หากคุณไม่สามารถหรือไม่ต้องการติดตั้ง GnuPG setuid (root) เพื่อปิดการเตือนคุณใส่บรรทัด

no-secmem-warning

ลงใน~/.gnupg/gpg.confไฟล์ของคุณ

เท่าที่ฉันรู้ macOS ใช้พื้นที่สว็อปเข้ารหัส สำหรับฉันเช่นsysctl vm.swapusageคืน:

vm.swapusage: total = 1024.00M  used = 234.75M  free = 789.25M  (encrypted)

นอกจากนี้ตามที่@sideshowbarkerระบุไว้ในความคิดเห็นนอกจากนี้ยังมีโพสต์ไปยังรายชื่อผู้รับจดหมายของผู้ใช้ gnupgซึ่งระบุว่าค่อนข้างปลอดภัยที่จะเพิกเฉยต่อคำเตือนนี้:

[... ] มัน<understatement>ค่อนข้างยากที่</understatement>จะใช้ประโยชน์จากหน่วยความจำที่ไม่ปลอดภัยโดยไม่ได้รับสิทธิ์รูท - และหากผู้โจมตีของคุณมีสิทธิ์ใช้งานรูทบนเครื่องของคุณ


ในแง่ของgithub.com/Homebrew/homebrew-core/pull/ …และความจริงที่ว่าผู้libgcryptดูแลดูเหมือนว่าจะใช้งานไม่ได้ตามเจตนามันอาจคุ้มค่าที่จะเพิ่มข้อความนี้เพื่อให้สามารถระงับข้อความได้โดยการเพิ่มบรรทัดno-secmem-warningลงใน~/.gnupg/gpg.confไฟล์ ในฐานะlists.gnupg.org/pipermail/gnupg-users/2015-December/054771.htmlบันทึกย่อ“ มันค่อนข้างยากที่จะใช้ประโยชน์จากหน่วยความจำที่ไม่ปลอดภัยโดยไม่มีสิทธิ์รูท - และหากผู้โจมตีของคุณมีสิทธิ์ใช้งานรูทบนเครื่องของคุณ ” ดังนั้นคำเตือนจึงไม่มีประโยชน์ในการเริ่มต้น
sideshowbarker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.