จะหลีกเลี่ยงการโจมตีแบบ escape sequence ในเทอร์มินอลได้อย่างไร?


29

การอ่านรายละเอียดของ CVE-2009-4487 (ซึ่งเกี่ยวกับอันตรายของลำดับการหลบหนีในล็อกไฟล์)ฉันรู้สึกประหลาดใจเล็กน้อย

ในการอ้างอิงCVE-2009-4487 :

nginx 0.7.64 เขียนข้อมูลลงในไฟล์บันทึกโดยไม่ต้องฆ่าตัวละครที่ไม่สามารถพิมพ์ได้ซึ่งอาจทำให้ผู้โจมตีจากระยะไกลสามารถแก้ไขชื่อของหน้าต่างหรืออาจเรียกใช้คำสั่งตามอำเภอใจหรือเขียนทับไฟล์ผ่านคำขอ HTTP ที่มีลำดับการหลบหนี

เห็นได้ชัดว่านี่ไม่ได้เกี่ยวกับรูความปลอดภัยใน nginx แต่ในเทอร์มินัลอีมูเลเตอร์

แน่นอนว่าบางทีcatการบันทึกไฟล์ไปยังเครื่องเทอร์มินัลนั้นเกิดขึ้นโดยบังเอิญเท่านั้น แต่grepการใช้ไฟล์บันทึกนั้นเป็นเรื่องปกติ lessบางที sanitizes escape sequences แต่ใครจะรู้ว่าคำสั่ง shell ใดไม่เปลี่ยนลำดับ escape ...

ฉันมักจะเห็นด้วยกับการตอบสนองวานิช :

ภูมิปัญญาของเทอร์มินัล - การตอบสนอง - การหลบหนีโดยทั่วไปถูกตั้งคำถามอย่างสม่ำเสมอ แต่ก็ยังไม่มีโปรแกรมการจำลองเทอร์มินัลใหญ่ ๆ ที่เห็นว่าเหมาะสมที่จะละทิ้งลำดับเหล่านี้ซึ่งอาจเป็นไปได้ [.. ] แทนที่จะโทษใด ๆ และทุกโปรแกรมที่เขียน logfiles มันจะมีประสิทธิผลมากขึ้นจากมุมมองด้านความปลอดภัยเพื่อให้โปรแกรมการจำลอง terminal หยุดหยุดทำสิ่งที่โง่และแก้ไขปัญหาความปลอดภัยนี้และอื่น ๆ อีกครั้ง และสำหรับทุกคน

ดังนั้นคำถามของฉัน:

ฉันจะรักษาความปลอดภัย xterm ของฉันได้อย่างไรซึ่งจะไม่สามารถดำเนินการคำสั่งหรือเขียนทับไฟล์ผ่านทางลำดับการหลีกเลี่ยงได้อีกต่อไป?

เทอร์มินัลอีมูเลเตอร์สำหรับ X มีความปลอดภัยต่อการโจมตีนี้หรือไม่?


4
escape sequences จำนวนมากทำสิ่งที่ถูกต้อง (เปลี่ยนชื่อ / ปรับขนาด / ฯลฯ xterm) แต่ทุกคนสามารถระบุ escape sequences ที่รันคำสั่งหรือเขียนทับไฟล์ได้หรือไม่?
krubo


ปัญหาที่คล้ายกันเกี่ยวกับการโจมตี paste-control-chars-from-web-browser บน Security SE: ฉันจะป้องกันตัวเองจากการละเมิดคลิปบอร์ดประเภทนี้ได้อย่างไร tl; dr: หากคุณใช้เทอร์มินัลที่ใช้ xterm / vte ซึ่งเผยแพร่หลังปี 2013/2015 คุณจะได้รับการปกป้องจากสิ่งเหล่านี้เนื่องจากพวกเขากรองอักขระควบคุมตามค่าเริ่มต้น
maxschlepzig

คำตอบ:


27

เทอร์มินัล VT100 (ซึ่งเทอร์มินัลอีมูเลเตอร์สมัยใหม่ทั้งหมดเลียนแบบในระดับหนึ่ง) สนับสนุนคำสั่งที่มีปัญหาจำนวนหนึ่ง แต่อีมูเลเตอร์หรือดิฟายเออร์สมัยใหม่นั้นปิดการใช้งานมากกว่าเครื่องที่มีปัญหาและมีประโยชน์น้อยกว่า ต่อไปนี้เป็นรายการที่ไม่ละเอียดของลำดับการหลบหนีที่อาจมีความเสี่ยง(ไม่รวมรายการที่ทำให้การแสดงไม่สามารถอ่านได้ในบางวิธี):

  • คำสั่งแฟ้มบันทึกพลการใน rxvt และ Eterm รายงานโดย HD มัวร์ นี่เป็นข้อบกพร่องที่สำคัญแน่นอนโชคดีที่ได้รับการแก้ไข
  • คำสั่ง answerback หรือที่เรียกว่า Return Terminal Status ซึ่งเรียกใช้โดยENQ( Ctrl+E) สิ่งนี้แทรกข้อความลงในเทอร์มินัลราวกับว่าผู้ใช้พิมพ์ อย่างไรก็ตามข้อความนี้ไม่ได้อยู่ภายใต้การควบคุมของผู้โจมตี: มันเป็นชื่อของตัวเองของสถานีโดยทั่วไปสิ่งที่ต้องการหรือxterm screenบนระบบของฉัน (Debian squeeze), xterm ส่งคืนสตริงว่างเปล่าตามค่าเริ่มต้น (ซึ่งควบคุมโดยanswerbackStringทรัพยากร)
  • คำสั่งส่งอุปกรณ์คุณสมบัติESC [ cและเพื่อน เทอร์มินัลตอบกลับด้วยESC [ … c(โดยที่สามารถมีตัวเลขและเครื่องหมายวรรคตอน ASCII เท่านั้น) นี่เป็นวิธีการสอบถามความสามารถของเทอร์มินัลส่วนใหญ่ล้าสมัย แต่อาจถูกใช้โดยแอปพลิเคชันเก่า อีกครั้งการตอบสนองของเทอร์มินัลนั้นแยกไม่ออกจากอินพุตของผู้ใช้ แต่ไม่ได้อยู่ภายใต้การควบคุมของผู้โจมตี ลำดับการควบคุมอาจมีลักษณะคล้ายกับปุ่มฟังก์ชั่น แต่เฉพาะในกรณีที่ผู้ใช้มีการกำหนดค่าที่ผิดปกติ (ไม่มีการตั้งค่าปกติที่ฉันพบมีลำดับหนีคีย์ฟังก์ชั่นที่ถูกต้องซึ่งเป็นคำนำหน้าของการตอบสนองสถานี)
  • ฟังก์ชั่นการควบคุมอุปกรณ์ต่าง ๆ (DCS หนีเริ่มต้นด้วยESC P)
    • ฉันไม่รู้ว่าสามารถทำอันตรายอะไรได้บ้างDECUDK(ตั้งค่าปุ่มที่ผู้ใช้กำหนด) บนเครื่องจำลองเทอร์มินัลทั่วไป
    • DECRQSS(Request Status String) เป็นอีกคำสั่งที่เทอร์มินัลตอบกลับด้วย escape sequence คราวนี้เริ่มต้นด้วย\eP; นี่อาจเป็นปัญหาเนื่องจาก\ePเป็นรหัสที่ถูกต้อง ( Alt+ Shift+ P)
    • Xterm มีคุณสมบัติทดลองอีกสองประการ: ESC P + p …และESC P + q …, เพื่อรับและตั้งค่าสตริง termcap จากคำอธิบายอาจใช้อย่างน้อยที่สุดเพื่อปรับเอฟเฟกต์ของปุ่มฟังก์ชั่น
  • คำสั่งรายงานสถานะหลายคำสั่ง: ESC [ … n(รายงานสถานะอุปกรณ์) เทอร์มินัลตอบกลับด้วยลำดับการหลีกเลี่ยง ลำดับการยกเว้นเหล่านี้ส่วนใหญ่ไม่ตรงกับลำดับการหลีกเลี่ยงของฟังก์ชันคีย์ หนึ่งดูเหมือนว่ามีปัญหา: รายงานไปESC [ 6 nเป็นรูปแบบที่และเป็นลำดับหลักและสิ่งนี้อาจมีลักษณะด้วยการปรับเปลี่ยนบางอย่างESC [ x ; y RxyF3
  • ESC [ … tคำสั่งการจัดการหน้าต่าง
    • สิ่งเหล่านี้บางตัวอนุญาตให้ปรับขนาดหน้าต่าง xterm, iconified ฯลฯ ซึ่งก่อกวน
    • บางส่วนของแนวหินเหล่านี้ทำให้เทอร์มินัลเพื่อตอบสนองกับทั้งลำดับหนี ลำดับการยกเว้นเหล่านี้ส่วนใหญ่มีความเสี่ยงต่ำ แต่มีสองคำสั่งที่เป็นอันตราย: คำตอบESC [ 2 0 tและESC [ 2 1 tรวมถึงป้ายชื่อและชื่อไอคอนของหน้าต่างเทอร์มินัลตามลำดับและผู้โจมตีสามารถเลือกสิ่งเหล่านี้ได้
    • อย่างน้อยภายใต้ Debian squeeze, xterm จะไม่สนใจคำสั่งเหล่านี้โดยปริยาย พวกเขาสามารถเปิดใช้งานโดยการตั้งค่าallowWindowOpsทรัพยากรหรือเลือกผ่านdisallowedWindowOpsทรัพยากร Gnome-terminal ภายใต้ Ubuntu 10.04 ใช้แม้กระทั่งการตอบชื่อเรื่องตามค่าเริ่มต้น ฉันไม่ได้ตรวจสอบเทอร์มินัลหรือเวอร์ชันอื่น
  • คำสั่งเพื่อตั้งค่าชื่อเทอร์มินัลหรือชื่อไอคอน ภายใต้ xterm และมากที่สุดขั้ว X อื่น ๆ ที่พวกเขามี ภายใต้หน้าจอ, ลำดับหนีคือ ฉันพบข้อกังวลเกี่ยวกับคำสั่งเหล่านี้มากเกินไป ในขณะที่พวกเขาอนุญาตให้ก่อความเสียหายจำนวนหนึ่งหน้าเว็บใดก็ได้มีปัญหาเดียวกัน การแสดงบนหน้าต่างโดยยึดตามชื่อเรื่องเท่านั้นและไม่ใช่ในระดับเดียวกันกับการเปิดไฟล์ที่บุคคลที่ไม่น่าไว้วางใจตั้งชื่อให้คุณหรือไม่อ้างถึงการขยายตัวของตัวแปรในเชลล์สคริปต์หรือตบสุนัขบ้าที่จมูก - อย่าบ่นถ้าคุณถูกกัดESC ] digit ; title ESC \ESC k title ESC \

ฉันพบว่าคำตอบของ Varnish ไม่ตรงกับความเป็นจริง รู้สึกเหมือนว่ากำลังพยายามเปลี่ยนความผิดหรือในโหมดความปลอดภัยนาซี (ข้อกังวลด้านความปลอดภัยใด ๆ ของแท้หรือไม่แสดงให้เห็นถึงการสร้างแบล็กบอล)

ภูมิปัญญาของเทอร์มินัล - การตอบสนอง - การหลบหนีโดยทั่วไปถูกตั้งคำถามอย่างสม่ำเสมอ แต่ก็ยังไม่มีโปรแกรมการจำลองเทอร์มินัลใหญ่ ๆ ที่เห็นว่าเหมาะสมที่จะละทิ้งลำดับเหล่านี้ซึ่งอาจเป็นไปได้ (…)
แทนที่จะโทษโปรแกรมใด ๆ และทั้งหมดที่เขียน logfiles มันจะมีประสิทธิผลมากกว่าเดิมจากมุมมองด้านความปลอดภัยเพื่อให้โปรแกรมการจำลอง terminal หยุดหยุดทำสิ่งที่โง่และแก้ไขปัญหาด้านความปลอดภัยนี้และอื่น ๆ ทันทีและ สำหรับทุกอย่าง.

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

ไฟล์ข้อความไม่ควรมีอักขระที่ไม่ได้พิมพ์เช่นอักขระควบคุม โดยทั่วไปคาดว่าไฟล์บันทึกจะเป็นไฟล์ข้อความ ไฟล์บันทึกไม่ควรมีตัวควบคุม

หากคุณกำลังกังวลว่าไฟล์อาจมีลำดับหนีเปิดในการแก้ไขหรือดูมันด้วยlessโดยไม่ต้อง-rหรือตัวเลือกหรือดูมันผ่าน-Rcat -v


2
"เป็นไปได้ที่จะพึ่งพาการเรียกใช้ ioctl ทั้งหมด" แต่จะเกิดอะไรขึ้นถ้ามีสายเคเบิลอนุกรมระหว่างแอปและเทอร์มินัลจริงๆ?
mmv-ru

5

มันไม่ง่ายอย่างนั้น ผู้คนจำนวนมากมีรหัสเพื่อตั้งxtermชื่อเป็นส่วนหนึ่งของพรอมต์หรืออื่น ๆ และด้วยเหตุผลที่ดีมาก (เช่นทุกคนที่เป็นshutdownเครื่องที่ผิดจากหน้าต่างเทอร์มินัลผิดสามารถบอกคุณได้!) การแก้ไขอย่างถูกต้องจึงเกี่ยวข้องกับการแนะนำบริบทการรักษาความปลอดภัยและทำให้การโต้ตอบระหว่างเชลล์และเทอร์มินัลอีมูเลเตอร์อย่างจริงจังและอาจเป็นไปได้ว่า dotfiles ของผู้คนก็เช่นกัน หรือคุณสามารถไปกับโซลูชันค่าเช่าไม่แพงในการฆ่าเชื้อโรคทุกอย่างที่อาจปรากฏในเครื่องปลายทาง สิ่งนี้ช่วยลดการหลบหลีกอักขระควบคุมได้ซึ่งส่วนใหญ่ควรทำต่อไปเพื่อทำให้โดดเด่น (เนื่องจากในล็อกไฟล์พวกเขาสามารถระบุว่ามีคนพยายามฉีด shellcode)

(เช่นกันPunycodeเป็นตัวอย่างที่รุนแรงกว่าของปัญหาแบบเดียวกัน - และยังได้รับการสร้างมาตรฐานอย่างเป็นทางการบางครั้งความปลอดภัยก็ลดลงเพื่อบรรเทาการออกแบบที่ไม่ปลอดภัยซึ่งอยู่นอกเหนือการควบคุมของคน ๆ นั้น)


1
เทอม x สามารถอนุญาตให้เปลี่ยนชื่อผ่านทางลำดับ escape แต่ไม่อนุญาตให้เขียนทับไฟล์และเรียกใช้ คำสั่งโดยพลการ ผ่านทางลำดับ escape นั่นจะเป็นการก้าวไปข้างหน้าใช่มั้ย
maxschlepzig

1
วิธีการทำตรงที่ถูกปิดใช้งานมานานหลายปี วิธีการทางอ้อมยังคงอยู่แม้ว่าอย่างน้อยพวกเขาต้องการขั้นตอนเพิ่มเติม (เช่นการโจมตีทางวิศวกรรมสังคมเพื่อให้ผู้ใช้สามารถเรียกใช้ฟังก์ชันคีย์ reprogrammed) แต่แถบชื่อถูกเรียกโดยเฉพาะใน CVE ซึ่งอาจเป็นส่วนหนึ่งของการโจมตีที่สร้างความสับสนให้ผู้ใช้ในการทำบางสิ่งผิดที่ ความกังวลที่ทันสมัยที่สุดคือสิ่งที่สามารถตั้งโปรแกรมให้ส่งข้อความโดยพลการไปยังเชลล์และตอบกลับที่ให้ผู้โจมตีทราบว่าเทอร์มินัลอีมูเลเตอร์สามารถทำอะไรได้บ้าง ...
geekosaur

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