วิธีแก้ปัญหา 'ptrace_scope' สำหรับโปรแกรมไวน์และมีความเสี่ยงใด ๆ


37

ในการเรียกใช้โปรแกรม Windows บางโปรแกรมใน WINE คุณจะต้องแก้ไขปัญหานี้:

echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope

ตามเว็บไซต์สนับสนุนนี่เป็นข้อผิดพลาดในเคอร์เนลของ Ubuntu ที่ป้องกัน ptrace และ WINE เล่นได้ดีด้วยกัน

การใช้คำสั่งด้านบนทำให้คุณตั้งค่า ptrace เป็น 0 ซึ่งตามการวิจัยที่ฉันทำ (ไม่ถามฉันว่าเว็บไซต์ใดที่ฉันดูเหมือนพวกเขามาก), ptrace เกี่ยวข้องกับการโต้ตอบระหว่างโปรแกรม การตั้งค่า 0 อนุญาตได้มากกว่า 1

ฉันต้องสมมติว่ามีเหตุผลที่ดีที่ Ubuntu ต้องการ ptrace = 1 ดังนั้นสิ่งนี้ทำให้ฉันกลับไปที่คำถามแบบสั้น

มีความเสี่ยงใด ๆ ที่เกี่ยวข้องกับการตั้งค่า ptrace = 0 หรือไม่ ความปลอดภัยต่ำลงหรือไม่ แก้ไขข้อบกพร่องหรือไม่ คนอื่น ๆ ที่ฉันไม่ได้คิด ???

PS สำหรับใครก็ตามที่อ่านสิ่งนี้ว่าสิ่งที่ทำให้เกิดข้อผิดพลาดโปรแกรม Windows จะไม่สามารถเปิดได้เลยใน System Monitor คุณจะเห็นหลายอินสแตนซ์ของโปรแกรมที่พยายามเปิดแล้วในที่สุดพวกเขาก็จะออกจากโปรแกรม สำหรับเทอร์มินัลคุณจะได้รับข้อผิดพลาดที่แจ้งให้คุณทราบว่าถึงจำนวนสูงสุดของอินสแตนซ์โปรแกรมแล้ว


นี่คือคำอธิบายที่เชื่อมโยงจากข้อผิดพลาดป๊อปอัพ PlayOnLinux ซึ่งยกเลิกการติดตั้ง. Net 4.5 เว้นแต่ว่า ptrace_scope จะถูกตั้งค่าเป็น 0: playonlinux.com/en/…
pabouk

คำตอบ:


40

คำตอบสั้น ๆ : ยังไม่มีอันตรายในทางปฏิบัติ แต่อ่านต่อไปเพื่อวิธีที่ดีกว่า ...


สิ่งนี้คืออะไรptraceต่อไป?

นี่เป็นเพราะบั๊กในเคอร์เนล Ubuntu ที่ป้องกัน ptrace และ WINE เล่นได้ดีด้วยกัน

  • ไม่การป้องกัน ptrace เป็นมาตรการรักษาความปลอดภัยของเคอร์เนลที่ได้รับการแนะนำครั้งแรกใน Ubuntu 10.10 มันไม่ใช่ข้อผิดพลาดและดังนั้นจะไม่เป็น "แก้ไข"

  • ในแง่ง่ายค่าเริ่มต้นptrace_scopeของ1บล็อกกระบวนการหนึ่งจากการตรวจสอบและแก้ไขกระบวนการอื่นเว้นแต่กระบวนการที่สอง (ลูก) เริ่มต้นโดยกระบวนการแรก (หลัก)

  • ซึ่งอาจทำให้เกิดปัญหากับบางโปรแกรมภายใต้ Wine เนื่องจากวิธีการwineserverให้ "บริการ Windows" กับโปรแกรมเหล่านี้

อะไรคือความเสี่ยงในการตั้งค่าptrace_scopeเพื่อ0?

  • สิ่งนี้จะคืนค่าพฤติกรรมเก่าที่กระบวนการหนึ่งสามารถ "ติดตาม" กระบวนการอื่นแม้ว่าจะไม่มีความสัมพันธ์แบบพ่อแม่ลูก

  • ในทางทฤษฎีมัลแวร์ชิ้นหนึ่งสามารถใช้สิ่งนี้ทำร้ายคุณ / คอมพิวเตอร์ของคุณ เช่นสามารถแนบกับ Firefox และบันทึก URL / รหัสผ่านทั้งหมดของคุณ ฯลฯ ในทางปฏิบัติสิ่งนี้ไม่น่าเป็นไปได้อย่างยิ่งหากคุณไม่ได้ติดตั้งไบนารี deb จากสุ่มไซต์เป็นต้น

  • เท่าที่ตรวจแก้จุดบกพร่องไปที่0การตั้งค่าในความเป็นจริงที่จำเป็นสำหรับการgdb, straceฯลฯ จะแนบไปกับเด็กที่ไม่ได้จนกว่าคุณจะเรียกพวกเขามีสิทธิ์สูง (sudo)

ปัญหาในการแก้ไขปัญหาคืออะไร

  • วิธีแก้ปัญหาค่อนข้างเป็นปัญหาเนื่องจากptrace_scopeเป็นค่าส่วนกลางและในขณะที่ตั้งค่าไว้0กระบวนการทั้งหมดในระบบของคุณจะได้รับการยกเว้นจากข้อ จำกัด ที่ไม่ใช่ลูก
  • หากคุณใช้วิธีแก้ปัญหาให้วางไว้ในสคริปต์ทุบตีง่ายๆที่เปิดใช้งานเรียกใช้โปรแกรม Windows ของคุณแล้วปิดใช้งาน (ตั้งค่าเป็น 1) เมื่อออก
    • อย่าทำให้ptrace_scopeโลกเขียน (666) ขณะที่โพสต์ฟอรั่มแนะนำ - นั่นคือความเสี่ยงอย่างมากเพราะในขณะนี้กระบวนการใด ๆ สามารถเปลี่ยนได้ที่จะ!

มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม?

  • ทางออกที่ดีที่มีความปลอดภัยมากขึ้นและไม่จำเป็นต้องมีการปรับเปลี่ยนซ้ำptrace_scopeคือการให้ความสามารถในการ ptrace Wineserver

    • ในอาคารผู้โดยสาร:

      sudo apt-get install libcap2-bin 
      sudo setcap cap_sys_ptrace = eip / usr / bin / ไวน์เซิร์ฟเวอร์
      sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • สิ่งนี้ได้รับการยกเว้นเซิร์ฟเวอร์ไวน์และไบนารีที่โหลดล่วงหน้าของไวน์จากข้อ จำกัด ของ ptrace ที่ไม่ใช่เด็กและช่วยให้พวกเขาสามารถเจาะกระบวนการใด ๆ

    • จะต้องทำเพียงครั้งเดียวเท่านั้นและปลอดภัยกว่าเพราะไบนารีเหล่านี้มักมาจากแหล่งที่เชื่อถือได้ - ที่เก็บข้อมูลอย่างเป็นทางการหรือ PPA ทางการของไวน์ดังนั้นพวกเขาจะไม่เป็นมัลแวร์

หากคุณใช้งานครอสโอเวอร์

ติดตั้ง libcap2:

sudo apt-get install libcap2-bin;

จากนั้นเพิ่มข้อยกเว้นสำหรับ Crossover:

sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / ไวน์เซิร์ฟเวอร์;
sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / wine-preloader;

สุดท้ายให้เพิ่มไลบรารีลงใน ld.so.conf (หรือคุณจะได้รับ "ข้อผิดพลาดขณะโหลดไลบรารีที่แชร์: libwine.so.1: ไม่สามารถเปิดไฟล์วัตถุที่ใช้ร่วมกัน: ไม่มีไฟล์หรือไดเรกทอรี":

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
sudo / sbin / ldconfig

ฉันคิดว่ามันถูกเรียกว่าบั๊กเพราะ ptrace ทำงานได้ดีใน 10.10 หลังจากไวน์ได้รับการแก้ไขเพื่อรองรับ มันทำงานกับ 10.10-11.10 แต่ถดถอยใน 12.04
TrailRider

ขอบคุณสำหรับการยอมรับ @TrailRider; ฉันหมายถึงคำสั่งของคุณว่า "มันเป็นข้อผิดพลาดในเคอร์เนล " (ซึ่งไม่ใช่); แน่นอนว่ามันเป็นข้อผิดพลาดสำหรับ Wine และควร swatted :) สิ่งต่าง ๆ เปลี่ยนแปลงในเคอร์เนลบางครั้งโดยปกติจะดีกว่าและมันก็เป็นซอฟแวร์ที่ได้รับผลกระทบในการแก้ไขตัวเองมากกว่าบอก Linus "yo man กลับไปใช้ตัวเอง ": P
ish

ฉันเข้าใจสิ่งที่คุณกำลังพูดที่นี่และเห็นด้วยฉันบอกเพียงว่ามันเป็นข้อผิดพลาดในเคอร์เนลเป็นเว็บไซต์สนับสนุนหลายแห่งรวมถึง Codeweavers เรียกว่าเป็นข้อผิดพลาดเคอร์เนล นี่คือหน้า codeweavers บน codeweavers.com/support/wiki/linux/faq/ubuntu1204
TrailRider

2
ฉันตั้งค่า ptrace ทั่วโลกเป็น 0 และกลับไปที่ 1 หลังจากนั้นไม่กี่วินาทีแอปพลิเคชันเริ่มทำงาน setcap นั้นปลอดภัยกว่าและไม่น่ารำคาญเท่าที่ต้องทำ sudo ตลอดเวลา .. ขอบคุณ vm!
กุมภ์กุมภ์

@izx: ขอบคุณสำหรับคำตอบนี้ มันน่าสนใจที่จะเพิ่มข้อมูลเกี่ยวกับสิ่งที่ "eip" อ้างถึง (อธิบายที่นี่: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux ) นอกจากนี้ฉันได้แนะนำการแนะนำวิธีการนี้ใน reptyr docs โดยที่ผู้เขียนตอบว่าอาจเป็นปัญหาด้านความปลอดภัย: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 - จะดีมากถ้าคุณสามารถทำอย่างละเอียด บนนั้น
blueyed

4

ในubuntuforums.orgฉันได้รับคำตอบพร้อมกับลิงค์ต่อไปนี้

https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection

นี่คือการวางจากลิงค์ (เพิ่มความสำคัญของฉัน)

เมื่อลีนุกซ์ได้รับความนิยมเพิ่มขึ้นมันจะกลายเป็นเป้าหมายที่เพิ่มขึ้นของมัลแวร์ จุดอ่อนที่น่าเป็นห่วงอย่างยิ่งของอินเตอร์เฟสกระบวนการ Linux คือผู้ใช้รายเดียวสามารถตรวจสอบหน่วยความจำและสถานะการทำงานของกระบวนการใด ๆ ตัวอย่างเช่นหากแอปพลิเคชันหนึ่งรายการ (เช่น firefox) ถูกโจมตีผู้โจมตีสามารถแนบกับกระบวนการทำงานอื่น ๆ (เช่น gpg-agent) เพื่อแยกข้อมูลประจำตัวเพิ่มเติมและขยายขอบเขตการโจมตีของพวกเขาต่อไป

นี่ไม่ใช่ปัญหาเชิงทฤษฎี จี้เซสชั่น SSH และแม้กระทั่งการฉีดโค้ดเป็นไปได้อย่างเต็มที่ถ้า ptrace ที่ได้รับอนุญาตตามปกติ

สำหรับวิธีการแก้ปัญหาบางแอปพลิเคชันใช้ prctl () เพื่อไม่อนุญาตเฉพาะสิ่งที่แนบ ptrace (เช่น ssh-agent) วิธีแก้ปัญหาทั่วไปเพิ่มเติมคืออนุญาตให้ ptrace โดยตรงจากพาเรนต์ไปยังกระบวนการ child (เช่น direct gdb และ strace ยังคงทำงาน) หรือในฐานะผู้ใช้รูท (เช่น gdb BIN PID และ strace -p PID ยังทำงานเหมือนรูท)

พฤติกรรมนี้ถูกควบคุมผ่านค่า / proc / sys / kernel / yama / ptrace_scope sysctl ค่าเริ่มต้นคือ "1" เพื่อป้องกัน ptrace ที่ไม่ใช่ลูก ค่า "0" จะคืนค่าลักษณะการอนุญาตที่มากกว่าเดิมซึ่งอาจเหมาะสมกว่าสำหรับระบบและเซิร์ฟเวอร์การพัฒนาบางระบบที่มีเฉพาะบัญชีผู้ดูแลระบบ การใช้ "sudo" ยังสามารถให้สิทธิ์ ptrace ชั่วคราวผ่านความสามารถ CAP_SYS_PTRACE แม้ว่าวิธีนี้จะช่วยให้ ptrace ของกระบวนการใด ๆ

ดังนั้นฉันเดาว่าคำตอบสั้น ๆ น่าจะปลอดภัยน้อยกว่า แต่ความเป็นไปได้ที่คอมพิวเตอร์ส่วนบุคคลที่อยู่ภายใต้การโจมตีประเภทนั้นจะค่อนข้างเล็ก


1

อัพเดทคำแนะนำข้างต้น:

sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;

ไม่ทำงานตั้งแต่วันที่ 9/15/2018 บน Ubuntu 18.04.1 และ PlayOnLinux v.4.2.12 โดยใช้รุ่นเสถียรล่าสุดซึ่งเป็น v.3.0.1 libcap2 ติดตั้งแล้ว

ข้อความแสดงข้อผิดพลาดใน Gnome Terminal มีดังต่อไปนี้:

Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

ไม่แน่ใจว่ามันหมายถึงอะไร… แต่คิดว่าฉันจะเอามันไปให้คนอื่นตีความและอาจมีทางออกใหม่ที่ใช้การได้

ขอบคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.