มันปลอดภัยแค่ไหนที่จะวาง cat ไฟล์ตามอำเภอใจ?


77

บางครั้งเมื่อฉันcatไฟล์ไบนารีโดยไม่ตั้งใจเทอร์มินัลของฉันก็สับสน ไม่มีอะไรที่รวดเร็วresetไม่สามารถแก้ไขได้ แต่ผู้โจมตีไม่สามารถสร้างไฟล์ตามทฤษฎีซึ่งเมื่อแสดงบนเทอร์มินัลจะสามารถเรียกใช้รหัสโดยอำเภอใจได้หรือไม่? ผ่านช่องโหว่ในเทอร์มินัลอีมูเลเตอร์หรืออย่างอื่น


3
บางครั้งเมื่อฉันทำเช่นนั้นเปลือกของฉันจะพูดในตอนท้าย "<garbage> คำสั่งที่ไม่รู้จัก" นั่นทำให้ฉันสงสัยว่ามันเป็นไปได้จริงหรือ
Keith

5
มีการหาช่องโหว่สำหรับเทอร์มินัลอีมูเลเตอร์เช่นlinuxsecurity.com/content/view/104657หรือsecurityfocus.com/bid/6936/discussดังนั้นจึงไม่จำเป็นต้องปลอดภัยเป็นพิเศษ
Ulrich Dangel

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

stty saneคำสั่งรีเซ็ต xterm (หรือคล้ายกัน) ซึ่งได้รับการเปลี่ยนเป็นเช่นชุดตัวอักษรที่แตกต่างกัน
Thorbjørn Ravn Andersen

moshเอกสารมีความคิดบางอย่างเกี่ยวกับเรื่องนี้: mosh.mit.edu/#techinfo
Max Ried

คำตอบ:


34

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

ด้วยhardwareเทอร์มินัลรุ่นเก่าบางรายการอาจเป็นปัญหาในขณะที่คุณตั้งโปรแกรมเช่นปุ่มฟังก์ชั่นที่มีลำดับการหลีกเลี่ยงเหล่านี้โดยจัดเก็บลำดับคำสั่งสำหรับคีย์นั้นในฮาร์ดแวร์ คุณยังต้องกดปุ่มทางกายภาพเพื่อเปิดใช้งาน

แต่มีอยู่เสมอ (ตามที่ Hauke ​​ทำเครื่องหมายไว้อย่างสูง 'ผู้ช่วยสมอง') ยินดีที่จะเพิ่มคุณสมบัติดังกล่าวถ้ามันแก้ปัญหาสำหรับพวกเขาไม่เข้าใจช่องโหว่ที่พวกเขาสร้าง จากประสบการณ์ของฉันกับซอฟต์แวร์โอเพนซอร์ซนั้นเนื่องจากสายตาหลาย ๆ คนมองดูรหัสนี้มีโอกาสน้อยที่จะเกิดขึ้นเช่นเดียวกับที่มาปิด (ฉันจำได้ว่าในโปรแกรมจดหมายบน Irix ของ Silicon Grahpics ในช่วงกลางยุคกลางคุณสามารถรวมคำสั่งที่จะดำเนินการบนเครื่องรับสัญญาณพา ธ จริงไปยังปฏิบัติการได้ ... )


3
"คุณสามารถรวมคำสั่งที่จะดำเนินการบนเครื่องรับสัญญาณ"คุณหมายถึงบางอย่างเช่นรวมถึงในอีเมล VBScript ที่โทรไปยัง Windows Scripting Host ใช่หรือไม่ :)
CVn

ไม่คุณสามารถเริ่มต้นการปฏิบัติการที่มีอยู่แล้วในเครื่องเช่นเล่นเสียง ฉันไม่จำไวยากรณ์ที่แน่นอน (เกือบ 20 ปีที่แล้ว) หรือว่าคุณสามารถปิดคุณลักษณะ 'ในการตั้งค่า เราสนุกกันบ้างกับวิดีโอที่เล่นอัตโนมัติที่เก็บไว้ในเครือข่ายของเรา
Anthon

คุณไม่ได้พูดถึงNeWSคุณเหรอ? IIRC SGI เป็นหนึ่งในการระงับไว้ก่อนหน้านี้
luser droog

@luserdroog ไม่มีนี่เป็นโปรแกรมจดหมายมาตรฐานบน GUI ภายใต้Irix
Anthon

1
@ อันที่ฉันไม่แน่ใจว่ามันยังคงเป็นไปได้ แต่ความเป็นไปได้ของการใช้รหัสการหลบหนีที่จะได้รับ terminal เพื่อ "ทำซ้ำ" ข้อความมาจากwriteคำสั่ง - จึงดำเนินการคำสั่ง / สคริปต์ในฐานะผู้ใช้เป็นเจ้าของสถานี มันเป็นเรื่องที่คาดคะเนเหตุผลว่าทำไมหลายคนขอแนะนำให้ปิดข้อความmesg -nสำหรับผู้ใช้มากที่สุดของเวลาและสำหรับเสมอroot AFAIK นี่เป็นสิ่งที่ทำจริง - แม้ว่าฉันจะไม่รู้ว่ามันถูกเอาเปรียบ ข้อความเพื่อสุ่มจากcatปฏิบัติการ ted, อาจบางทีอาจจะต้องถูกประหารชีวิต
Baard Kopperud

33

เทอร์มินัลอีมูเลเตอร์ส่วนใหญ่จะส่งการตอบกลับมาบางส่วนหากพวกเขาได้รับลำดับการหลบหนีบางอย่าง (ดูที่เอกสารประกอบลำดับการควบคุม xterm ) ตัวอย่างเช่นคุณสามารถส่ง\e[0cไปที่อีมูเลเตอร์ที่คล้ายกับ VT100 และมันจะส่งแอททริบิวต์ของอุปกรณ์กลับมาบางอย่าง\e[?1;2c (นี่อาจเป็นสิ่งที่ Keith สังเกต) แต่คำตอบเหล่านี้ไม่ใช่สตริงที่กำหนดเอง ยังคงมีการปฏิบัติการที่มีชื่อ2cบางแห่งในระบบของคุณที่ทำสิ่งที่ร้ายแรงเป็นความคิดที่ไม่ดี

อัปเดต: ในความเป็นจริงแล้วความเสี่ยงใหญ่กว่าที่ฉันคิดเนื่องจากความเป็นไปได้ในการตั้งชื่อของหน้าต่าง xterm และส่งกลับชื่อโดยใช้ลำดับการหลีกเลี่ยงที่เหมาะสม ( http://www.securityfocus.com/bid/6940/ ) . ในทางตรงกันข้ามกับตัวอย่างข้างต้นชื่อสามารถเป็นสตริงเกือบโดยพลการ


นั่นทำให้มันใกล้เคียงกันมากแล้ว
Gunchars

มีฟีเจอร์ที่เก่ากว่าคือ 'ข้อความตอบกลับ' ซึ่งส่งไปตามอักขระ ENQ (Ce) ใน VT100 ของจริงผู้ใช้จะถูกตั้งค่าในเมนู SETUP ของเทอร์มินัล อาจมีเทอร์มินัลอีมูเลเตอร์ที่อนุญาตให้ตั้งค่าจากระยะไกล ...
sendmoreinfo

16

สิ่งนี้จะเปลี่ยนชื่อเทอร์มินัลในเทอร์มินัล GNOME 3.6.1 เว้นแต่จะมีการเขียนทับอย่างเช่นPS1 :

printf "\033]2;Script Kiddie was here\007"

ตอนนี้เปิดหน้าต่างเทอร์มินัล GNOME ใหม่เพื่อทดสอบcatเวอร์ชัน:

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

ใช่นี่เป็นการตั้งชื่อเทอร์มินัลด้วย

เคยมีปัญหาด้านความปลอดภัยที่มีรหัสยกเว้นส่งผลให้ชื่อเรื่องจะถูกพิมพ์ไปยังบรรทัดคำสั่งดังนั้นคุณสามารถสร้างไฟล์ได้อย่างมีประสิทธิภาพซึ่งเมื่อcatเอ็ดจะพิมพ์ (ฉันไม่แน่ใจว่าคุณสามารถใส่บรรทัดใหม่ในนั้น) คำสั่งโดยพลการ อุ๊ย!


8

ในขณะที่ใช้งานcatอาจไม่ส่งผลให้มีการเรียกใช้รหัสรหัสหลบหนีจะได้รับการประมวลผลดังนั้นคุณอาจเข้าใจผิดว่าสคริปต์ไม่เป็นอันตรายเมื่อจริง ๆ แล้วเป็นอันตราย

นี่คือตัวอย่างคำสั่งที่คุณสามารถเรียกใช้ซึ่งจะสร้างเชลล์สคริปต์ "ประสงค์ร้าย":

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

เมื่อคุณตรวจสอบไฟล์ดูเหมือนว่าไม่มีอันตรายเพียงพอ:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

แต่คุณควรใช้มันจริง ...

$ ./demo.sh 
...doing something bad here...

สคริปต์ทำงานโดยรวมรหัสหลบหลีกเพื่อเลื่อนเคอร์เซอร์ขึ้นสองบรรทัดดังนั้นสคริปต์ที่เหลือจะถูกเขียนทับรหัสอันตรายที่ซ่อนอยู่ด้านบน

เกือบทุกโปรแกรมอื่น ๆ จะเปิดเผยสคริปต์สำหรับสิ่งที่มันเป็น เฉพาะโปรแกรมที่ไม่ดำเนินการตามเนื้อหาของแฟ้ม (เช่นcat, moreและless -r) ที่จะมีการส่งออกที่ทำให้เข้าใจผิด

โปรดทราบว่าtailและheadยังสร้างเอาต์พุตที่ทำให้เข้าใจผิดเหมือนกัน ดังนั้นการใช้ "less + F" จึงปลอดภัยกว่า "tail -f"


นี่คือปัญหาค่อนข้าง ... คุณสามารถมองเห็นสิ่งที่จริงที่เกิดขึ้นโดยการทำงานecho $(cat demo.sh), cat demo.sh | grep . --color=yes(หมายเหตุ: --color=yesเป็นสิ่งที่แสดงให้เห็นถึงรหัส "อันตราย" ที่นี่) cat -v demo.shหรือการสร้างใน
Charlie

จริงหรือเท็จมันเป็นคำตอบสำหรับคำถามอื่น: ความเชื่อถือได้catในการแสดงเนื้อหาของไฟล์อย่างไร
Incnis Mrsi

@IncnisMrsi: มันไม่ใช่คำตอบสำหรับคำถามอื่น คำตอบนี้เตือนว่า cat จะแสดงรหัสยกเว้นและให้ตัวอย่างง่ายๆกับรหัสหนีภัยเพียงประเภทเดียว แต่ก็มีอีกหลายตัวอย่าง เมื่อรวมกับขั้วบางเหล่านี้สามารถ remap คีย์เขียนทับไฟล์และในทางทฤษฎีแม้รันคำสั่ง ดังนั้นเมื่อคุณตระหนักถึงอันตรายของการแสดงรหัสการหลบหนีคุณจะเข้าใจว่าบางครั้งมันอาจไม่ปลอดภัยต่อcatไฟล์ตามอำเภอใจตามคำถามที่ถาม!
Malvineous

6

ฉันมีประสบการณ์การxtermใส่ตัวละครโดยพลการเข้าไปในตัวเองราวกับว่าฉันได้พิมพ์พวกเขา และในบางครั้งก็มีตัวละครขึ้นบรรทัดใหม่เพื่อให้ฉันได้รับngwerm:0riu: command not foundการตอบสนอง ฉันไม่เห็นเหตุผลว่าทำไมบางคนไม่สามารถสร้างไฟล์ที่จะส่งคำสั่งที่เป็นอันตรายและเจาะจงได้ ใช่แล้วอย่างน้อยเทอร์มินัลบางอย่างก็มีความอ่อนไหวต่อการโจมตีด้วยผลกระทบโดยพลการ


2

เทอร์มินัลอีมูเลเตอร์ก็พิมพ์อักขระที่ส่งไป

นอกจากการพิมพ์อักขระบนตำแหน่งปัจจุบันเช่นการตั้งค่าตำแหน่งใหม่การเปลี่ยนสีการเปลี่ยนชื่อและอื่น ๆ สามารถทำได้โดยลำดับเอสเคป

ชุดของลำดับ escape ที่สนับสนุนมักประกอบด้วยมาตรฐานที่กำหนดไว้อย่างดีเช่นANSIซึ่งไม่ได้กำหนดวิธีในการเริ่มต้นกระบวนการอื่น แม้ว่ามันจะเป็นไปได้ที่จะใช้ลำดับดังกล่าว แต่ฉันไม่ได้ตระหนักถึงเทอร์มินัลอีมูเลเตอร์ใด ๆ ที่จงใจให้สิ่งนั้น

ในทางทฤษฎีข้อผิดพลาดเช่นบัฟเฟอร์ล้นอาจถูกใช้เพื่อก่อให้เกิดการทำงานโดยพลการ แต่นี่อาจเป็นไปได้ในเลขฐานสองอื่น ๆ ด้วย


0

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

$ file <mystery file>
$ strings <mystery file> | less

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

ตัวอย่าง

ไฟล์ที่ส่งออก
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
เอาต์พุตสตริง
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...

3
การรันสตริงในไฟล์ที่ไม่รู้จักอาจมีผลที่ตามมาเช่นกัน lcamtuf.blogspot.fi/2014/10/…
Jan Wikholm

@IncnisMrsi - อ่านประโยคแรก !!!!
slm

ตกลงถอนคำสั่งก่อนหน้าของฉันคำตอบสั้น ๆ โดยใช้คำศัพท์ที่สับสนสับสนและไม่มีมูลความจริง โปรดทราบว่าในการรักษาความปลอดภัยสุ่ม "ตามอำเภอใจ" ตามที่เผยแพร่ในระบบปฏิบัติการโปรดของคุณ
Incnis Mrsi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.