เป็นกลุ่มภูมิคุ้มกันเพื่อคัดลอกวางโจมตี?


112

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

ไม่เป็นไร แต่ถ้าฉันเป็นตัวแก้ไขข้อความแล้วล่ะ? หนึ่งสามารถปลอมเนื้อหาที่เปลี่ยนเป็นกลุ่มคำสั่งโหมดและดำเนินการคำสั่งที่เป็นอันตรายหรือไม่


2
@ryekayo ฉันรู้วิธีเรียกใช้คำสั่งในพื้นหลัง คำถามเพิ่มเติมเกี่ยวกับถ้าเป็นไปได้ที่จะเปลี่ยนเสียงเรียกเข้าจากโหมดแทรกเป็นโหมดคำสั่งแล้วดำเนินการอะไร
Adam Trhon

3
เวอร์ชันล่าสุดของ Vim มี pasteed paste ซึ่งควรป้องกันการโจมตีชนิดนี้
Satō Katsura

2
@ EmilJeřábekลิงก์ในโพสต์ให้เหตุผลเพียงพอที่คุณจะวิ่งไปหาเนินเขาแทนที่จะทำเช่นนั้น
Satō Katsura

1
@ EmilJeřábekเนื่องจากคุณสามารถปลอมข้อความที่ซ่อนด้วยตัวละคร Escape ฉันคิดว่าคุณสามารถปลอมข้อความด้วย EOF ได้เช่นกัน /bin/bash ; EOF rm -rf ~จากนั้นข้อความที่ซ่อนไว้อาจมีสิ่งที่เป็น เมื่อวางลงในเทอร์มินัลก็จะเริ่มทุบตียกเลิกมันแล้วลบบ้านของคุณ เมื่อวางลงในแมวมันจะช่วยให้แมวพิมพ์คำสั่งสิ้นสุดแมวและลบบ้านของคุณ
Adam Trhon

คำตอบ:


106

คำตอบสั้น ๆ :ในหลาย ๆ สถานการณ์กลุ่มเสี่ยงต่อการถูกโจมตีแบบนี้ (เมื่อวางข้อความในโหมดแทรก)

พิสูจน์แนวคิด

การใช้บทความที่เชื่อมโยงเป็นจุดเริ่มต้นฉันสามารถสร้างเว็บเพจได้อย่างรวดเร็วด้วยรหัสต่อไปนี้โดยใช้องค์ประกอบการขยาย HTML และ CSS เพื่อซ่อนส่วนตรงกลางของข้อความเพื่อให้ls -laมองเห็นได้เฉพาะผู้ดูทั่วไป แหล่งที่มา) หมายเหตุ: ^[คืออักขระ Escape และ^Mเป็นอักขระอักขระปัดแคร่ Stack แลกเปลี่ยน sanitises เข้าของผู้ใช้และป้องกันการหลบซ่อนตัวของเนื้อหาการใช้ CSS ดังนั้นฉันได้อัปโหลดหลักฐานของแนวคิด

ls ^[:echom "This could be a silent command."^Mi -la

หากคุณอยู่ในโหมดแทรกและวางข้อความนี้ในเทอร์มินัล Vim (พร้อมตัวระบุบางตัวดูด้านล่าง) คุณจะเห็นls -laแต่ถ้าคุณเรียกใช้:messagesคำสั่งคุณสามารถเห็นผลลัพธ์ของคำสั่ง Vim ที่ซ่อนอยู่

ป้องกัน

เพื่อป้องกันการโจมตีครั้งนี้จะเป็นการดีที่สุดที่จะอยู่ในโหมดปกติและวางการใช้หรือ"*p "+pในโหมดปกติเมื่อพีข้อความ Utting จากการลงทะเบียนเป็นข้อความเต็ม (รวมส่วนที่ซ่อนอยู่) จะถูกวาง สิ่งนี้ไม่ได้เกิดขึ้นในโหมดแทรก (แม้ว่า:set pasteจะถูกตั้งค่าไว้)

โหมดวางที่ถูกยึด

Vim เวอร์ชันล่าสุดสนับสนุนโหมดการวางที่อยู่ในวงเล็บซึ่งช่วยลดการโจมตี copy-paste ประเภทนี้ Sato Katsura ชี้แจงว่า“ การสนับสนุนสำหรับแปะวงเล็บปรากฏขึ้นใน Vim 8.0.210 และได้รับการแก้ไขล่าสุดในเวอร์ชัน 8.0.303 (เปิดตัวเมื่อวันที่ 2 กุมภาพันธ์ 2017)”

หมายเหตุ: ตามที่ผมเข้าใจมันรุ่นที่เป็นกลุ่มที่มีการสนับสนุนสำหรับโหมดวางวงเล็บควรปกป้องคุณเมื่อวางใช้Ctrl- Shift- V(ส่วนใหญ่สภาพแวดล้อมเดสก์ทอป GNU / Linux) Ctrl- V(MS Windows) Command- V(Mac OS X) Shift- Insertหรือเมาส์ กลางคลิก

การทดสอบ

ฉันทำการทดสอบบางอย่างจากเครื่องเดสก์ท็อป Lubuntu 16.04 ในภายหลัง แต่ผลลัพธ์ของฉันสับสนและสรุปไม่ได้ ฉันได้ตระหนักว่านี่เป็นเพราะฉันใช้หน้าจอ GNUเสมอแต่ปรากฎว่าตัวกรองหน้าจอลำดับการหลบหนีที่ใช้ในการเปิดใช้งาน / ปิดใช้งานโหมดวางแบบวงเล็บ (มีแพทช์แต่ดูเหมือนว่ามันถูกส่งในเวลาที่ โครงการไม่ได้รับการบำรุงรักษาอย่างแข็งขัน) ในการทดสอบของฉันหลักฐานของแนวคิดทำงานได้เสมอเมื่อรัน Vim ผ่านหน้าจอ GNU โดยไม่คำนึงว่า Vim หรือเทอร์มินัลอีมูเลเตอร์สนับสนุนโหมดวางแบบวงเล็บหรือไม่

การทดสอบเพิ่มเติมจะมีประโยชน์ แต่จนถึงตอนนี้ฉันพบว่าการสนับสนุนโหมดการวางแบบวงเล็บโดยตัวจำลองเทอร์มินัลบล็อก Proof of Concept ของฉัน - ตราบใดที่หน้าจอ GNU ไม่ได้ปิดกั้นลำดับการหลบหนีที่เกี่ยวข้อง อย่างไรก็ตามผู้ใช้nneonneo รายงานว่าการสร้างลำดับการหลีกเลี่ยงอย่างระมัดระวังอาจถูกนำมาใช้เพื่อออกจากโหมด Paste

โปรดทราบว่าแม้จะมี Vim รุ่นล่าสุดแล้ว Proof of Concept ก็ยังใช้งานได้หากผู้ใช้วางจากการ*ลงทะเบียนขณะที่อยู่ในโหมดแทรกโดยพิมพ์ ( Ctrl- R*) สิ่งนี้ยังใช้กับ GVim ซึ่งสามารถแยกความแตกต่างระหว่างอินพุตที่พิมพ์และวาง ในกรณีนี้ Vim ปล่อยให้ผู้ใช้เชื่อถือเนื้อหาของเนื้อหาลงทะเบียน ดังนั้นอย่าใช้วิธีนี้เมื่อวางจากแหล่งที่ไม่น่าเชื่อถือ (เป็นสิ่งที่ฉันมักจะทำ - แต่ตอนนี้ฉันเริ่มฝึกตัวเองไม่ได้แล้ว)

ลิงก์ที่เกี่ยวข้อง

ข้อสรุป

ใช้โหมดปกติเมื่อวางข้อความ (จาก+หรือ*ลงทะเบียน)

... หรือใช้ Emacs ฉันได้ยินมาว่ามันเป็นระบบปฏิบัติการที่ดี :)


2
คุณควรเปิดใช้งานpasteโหมด ( :set paste) ก่อนที่จะวางในกลุ่ม แล้ววงเล็บวางควรจะมีผลโดยมีเงื่อนไขว่า terminal ของคุณนอกจากนี้ยังสนับสนุน หลักฐานการแนวคิดของคุณไม่ทำงานเมื่อpasteเปิดใช้งานโหมด
Satō Katsura

1
ฉันไม่เห็นว่าโหมดการวางที่ยึดนั้นปลอดภัยอย่างไร หากผู้โจมตีรู้ว่าคุณกำลังใช้แปะอยู่ในวงเล็บพวกเขาก็จะติด\e[201~ลำดับในคำสั่ง paste เพื่อออกจากโหมดวางที่วงเล็บแล้วและดำเนินการตามคำสั่งของคุณเอง (ถ้าฉันไม่ได้รับรายละเอียดบางอย่างเกี่ยวกับวิธีการวางแปะทำงานอย่างไร)
nneonneo

2
@SatoKatsura: ฉันลองใช้ Vim 8.0.540 ซึ่งไม่เสี่ยงกับการโจมตีครั้งแรก หลังจากเพิ่ม\x1b[201~แล้วการหาประโยชน์ทำหน้าที่เหมือนก่อน (เช่นls -laถูกเขียนไปยังบัฟเฟอร์และechomคำสั่งถูกดำเนินการ) ดังนั้นฉันคิดว่าแปะที่มีวงเล็บนั้นยังคงมีความเสี่ยงต่อการโจมตีเป้าหมายและไม่เป็นทางออกที่ดีพอ (อันที่จริงใด ๆรูปแบบของการส่งสัญญาณในวงจะมีความเสี่ยง!)
nneonneo

2
ฉันลองทั้งที่มีและไม่มี:set paste- การหาประโยชน์ยังคงใช้ได้ ต้องมีความชัดเจนสมบูรณ์ผมวางต่อไปนี้ (เข้ารหัส base64) bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=หยด: ใน OS X คุณสามารถคัดลอกที่ทำงานจะได้รับรุ่นดิบเพื่อวางpbpaste | base64 -D | pbcopy vim
nneonneo

1
เพื่อให้ชัดเจนยิ่งขึ้นฉันกำลังทดสอบการเชื่อมต่อ SSH กับกล่อง Ubuntu 16.04 โดยใช้ macOS Terminal.app หากเทอร์มินัลอีมูเลเตอร์ของคุณกำลังลอกลำดับหนีภัยบนแปะคุณอาจทำรังลำดับ (เช่น\x1b\x1b[201~[201~) หรือสิ่งที่หลอกตัวกรองได้
nneonneo

0

หากคุณกำลังใช้คุณสมบัติคลิปบอร์ด X11 หรือเทียบเท่าเฉพาะแพลตฟอร์มและคุณใช้วางปุ่มกลางพร้อมเปิดใช้งานการสนับสนุนเมาส์หรือคำสั่ง vim paste และไม่ใช่คำสั่งวางเทอร์มินัลใด ๆ (ปุ่ม shift-middle-button หรือทางลัดใดก็ตามที่เทอร์มินัล ข้อเสนอ) จากนั้นคุณอาจจะปลอดภัย

ถ้าไม่เช่นนั้นถ้าคุณมีเทอร์มินัลอีมูเลเตอร์ที่รองรับโหมด bracketed-paste และคุณได้เปิดใช้งานเทอร์มินัลและใน vim และเทอร์มินัลอีมูเลเตอร์นั้นใช้การป้องกันจากการฉีดลำดับหนี จากนั้นคุณอาจจะปลอดภัย

ถ้าไม่เช่นนั้นคุณอาจจะมีความเสี่ยงต่อการโจมตีที่อธิบายไว้ที่นี่

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