Làm thế nào an toàn là để mèo một tập tin tùy ý?


77

Đôi khi khi tôi catnhầm một tệp nhị phân, thiết bị đầu cuối của tôi bị cắt xén. Không có gì nhanh chóng resetcó thể sửa chữa, nhưng về mặt lý thuyết, kẻ tấn công có thể tạo một tệp mà khi được hiển thị trên thiết bị đầu cuối, sẽ thực thi một số mã tùy ý không? Thông qua một khai thác trong trình giả lập thiết bị đầu cuối hoặc cách khác.


3
Đôi khi khi tôi làm điều đó, shell của tôi sẽ nói ở cuối "<rác> lệnh không xác định". Điều đó khiến tôi tự hỏi nếu điều này thực sự có thể.
Keith

5
Có khai thác cho các mô phỏng thiết bị, ví dụ như linuxsecurity.com/content/view/104657 hoặc securityfocus.com/bid/6936/discuss nên nó không phải là cần thiết an toàn đặc biệt
Ulrich Dangel

1
Đây là lý do tại sao tốt hơn là sử dụng một cái gì đó sẽ chùn bước ở các tệp nhị phân (như more) hoặc nhận biết thiết bị đầu cuối ( less) để kiểm tra nội dung của các tệp. Nó không chỉ không đặt thiết bị đầu cuối của bạn ở trạng thái kỳ lạ, toàn bộ tệp sẽ không bị bay trong một lần.
Blrfl

Các stty sanelệnh reset một xterm (hoặc tương tự) mà đã được chuyển vào ví dụ như một bộ ký tự khác nhau.
Thorbjørn Ravn Andersen

moshtài liệu có một số suy nghĩ về điều đó: mosh.mit.edu/#techinfo
Max Ried

Câu trả lời:


34

Việc đầu ra như vậy có thể được khai thác hay không phụ thuộc vào chương trình thiết bị đầu cuối, và thiết bị đầu cuối đó làm gì tùy thuộc vào mã thoát được gửi. Tôi không biết các chương trình đầu cuối có các tính năng có thể khai thác như vậy và vấn đề duy nhất bây giờ là nếu có một lỗi tràn bộ đệm không xác định hoặc một cái gì đó tương tự, có thể bị khai thác.

Với một số hardwarethiết bị đầu cuối cũ hơn, đây có thể là một vấn đề khi bạn lập trình các phím chức năng với các chuỗi thoát này, bằng cách lưu trữ một chuỗi lệnh cho khóa đó trong phần cứng. Bạn vẫn sẽ cần một phím bấm vật lý để kích hoạt nó.

Nhưng luôn luôn có (vì Hauke ​​rất được đánh dấu 'braindead'), những người sẵn sàng thêm một tính năng như vậy nếu nó giải quyết được vấn đề cho họ, không hiểu được kẽ hở mà họ tạo ra. Theo kinh nghiệm của tôi với phần mềm nguồn mở là, vì nhiều người nhìn vào mã, điều này ít có khả năng xảy ra như với nguồn đóng. (Tôi nhớ rằng trong chương trình thư trên Irix của Silicon Grahpics, vào giữa những năm 1990, bạn có thể bao gồm các lệnh được thực thi trên máy thu, đường dẫn thực tới các tệp thực thi, ....)


3
"Bạn có thể bao gồm các lệnh sẽ được thực thi trên máy thu" Bạn có nghĩa là một cái gì đó giống như bao gồm trong một VBScript email gọi ra Windows Scripting Host? :)
một CVn

Không chính xác, bạn có thể bắt đầu một chương trình thực thi đã có trên máy, như phát âm thanh. Tôi không nhớ lại cú pháp chính xác (cách đây gần 20 năm) cũng như liệu bạn có thể tắt 'tính năng' đó trong một thiết lập hay không. Chúng tôi đã có một số niềm vui mặc dù với các video tự động phát được lưu trữ trong mạng của chúng tôi.
Anthon

Bạn không nói về NeWS phải không? IIRC SGI là một trong những người nắm giữ cuối cùng.
luser droog

@luserdroog Không, đây là chương trình thư dựa trên GUI tiêu chuẩn theo Irix
Anthon

1
@Anthon Tôi không chắc là vẫn có thể hay không, nhưng khả năng sử dụng mã thoát để lấy một thiết bị đầu cuối để "lặp lại" văn bản đến từ writelệnh - do đó thực thi các lệnh / tập lệnh khi người dùng sở hữu thiết bị đầu cuối. Đây được cho là lý do tại sao nhiều người khuyên bạn nên tắt tin nhắn mesg -ncho người dùng hầu hết thời gian và root luôn luôn . AFAIK, điều này thực sự đã được thực hiện - mặc dù tôi không biết nếu nó đã được khai thác. Vì vậy, văn bản ngẫu nhiên từ một catthực thi ted, lẽ có thể được thực thi.
Baard Kopperud

33

Hầu hết các trình giả lập thiết bị đầu cuối sẽ gửi lại một số phản hồi, nếu chúng nhận được các chuỗi thoát nhất định (hãy xem tài liệu về trình tự điều khiển xterm ). Ví dụ, bạn có thể gửi \e[0ctới trình giả lập giống VT100 và nó sẽ gửi lại các thuộc tính thiết bị, đại loại như \e[?1;2c (Đây có lẽ là những gì Keith quan sát được.) Nhưng những câu trả lời này không phải là chuỗi tùy ý. Tuy nhiên, có một thực thi được đặt tên 2cở đâu đó trên hệ thống của bạn mà làm điều gì đó gây tử vong là một ý tưởng tồi.

Cập nhật: Rủi ro trên thực tế lớn hơn tôi nghĩ, do khả năng đặt tiêu đề của cửa sổ xterm và gửi lại tiêu đề bằng các chuỗi thoát thích hợp ( http: //www.securityf Focus.com/bid/6940/ ) . Ngược lại với ví dụ trên, tiêu đề có thể là một chuỗi gần như tùy ý.


Điều đó đã cắt nó rất gần.
Gunchars

Thậm chí còn có một tính năng cũ hơn - 'tin nhắn trả lời', được gửi để phản hồi lại ký tự ENQ (Ce). Trên VT100 thật, nó được người dùng đặt trong menu SETUP của thiết bị đầu cuối; có thể có các trình giả lập thiết bị đầu cuối cho phép thiết lập nó từ xa ...
sendmoreinfo

16

Điều này thay đổi tiêu đề thiết bị đầu cuối trong Thiết bị đầu cuối Gnome 3.6.1, trừ khi bị ghi đè bởi thứ gì đó như PS1 :

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

Bây giờ hãy mở cửa sổ Gnome Terminal mới để kiểm tra catphiên bản:

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

Đúng, điều này cũng đặt tiêu đề thiết bị đầu cuối.

Đã từng có một vấn đề bảo mật với mã thoát dẫn đến tiêu đề được in ra dòng lệnh , do đó bạn có thể tạo một tệp một cách hiệu quả, khi cated sẽ in (Tôi không chắc bạn có thể đặt một dòng mới vào đó không) lệnh tùy ý. Ôi!


8

Trong khi sử dụng catcó thể không dẫn đến thực thi mã, mã thoát sẽ được xử lý để bạn có thể dễ dàng bị nhầm lẫn khi nghĩ rằng tập lệnh là vô hại khi thực tế nó là độc hại.

Dưới đây là một ví dụ lệnh bạn có thể chạy sẽ tạo ra một kịch bản shell "độc hại":

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

Khi bạn kiểm tra tệp, có vẻ như vô hại:

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

Nhưng bạn có nên thực sự chạy nó ...

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

Kịch bản hoạt động bằng cách bao gồm các mã thoát thô để di chuyển con trỏ lên một vài dòng, vì vậy phần còn lại của tập lệnh được viết trên đầu của mã độc, ẩn nó.

Gần như bất kỳ chương trình nào khác sẽ tiết lộ kịch bản cho những gì nó là. Chỉ các chương trình mà không xử lý nội dung tập tin (như cat, moreless -r) sẽ cho kết quả sai lệch.

Lưu ý rằng tailheadcũng tạo ra đầu ra sai lệch tương tự. Do đó, sử dụng "less + F" sẽ an toàn hơn "tail -f".


Điều này khá có vấn đề ... Bạn có thể thấy những gì thực sự đang diễn ra bằng cách chạy echo $(cat demo.sh), cat demo.sh | grep . --color=yes(Lưu ý: đó --color=yeslà những gì hiển thị mã "độc hại" ở đây) hoặc tích hợp cat -v demo.sh.
Charlie

Đúng hay sai, đó là một câu trả lời cho một câu hỏi khác: mức độ tin cậy cattrong việc hiển thị nội dung của tệp .
Incni Mrsi

@IncnisMrsi: Nó không thực sự là một câu trả lời cho một câu hỏi khác. Câu trả lời này cảnh báo rằng mèo sẽ hiển thị mã thoát và cung cấp một ví dụ đơn giản chỉ với một loại mã thoát, nhưng có nhiều loại khác. Khi kết hợp với một số thiết bị đầu cuối nhất định, chúng có thể sắp xếp lại các khóa, ghi đè lên các tệp và trên lý thuyết, thậm chí thực hiện các lệnh . Vì vậy, một khi bạn nhận ra sự nguy hiểm của việc hiển thị mã thoát, bạn sẽ hiểu rằng đôi khi nó có thể không an toàn đối với catmột tệp tùy ý, như câu hỏi được hỏi!
Malvineous

6

Tôi chắc chắn đã có kinh nghiệm xtermchèn các ký tự tùy ý vào chính nó như thể tôi đã gõ chúng. Và nhân dịp này rõ ràng đã bao gồm nhân vật dòng mới, để tôi nhận được ngwerm:0riu: command not foundnhư là một phản ứng. Tôi thấy không có lý do tại sao một người nào đó không thể tạo một tệp sẽ gửi các lệnh cụ thể, có hại. Vì vậy, có, ít nhất một số thiết bị đầu cuối dễ bị tấn công với tác động tùy ý.


2

Vâng, một trình giả lập thiết bị đầu cuối về cơ bản chỉ đơn giản là in ra các ký tự được gửi đến nó.

Bất cứ điều gì ngoài việc đơn giản là in một ký tự trên vị trí hiện tại, như đặt vị trí mới, thay đổi màu sắc, thay đổi tiêu đề, v.v., được thực hiện bằng các chuỗi thoát.

Tập hợp các chuỗi thoát được hỗ trợ thường bao gồm các tiêu chuẩn được xác định rõ như ANSI , không xác định cách bắt đầu các quy trình khác. Mặc dù có thể thực hiện một trình tự như vậy, tôi không biết bất kỳ trình giả lập thiết bị đầu cuối nào cố ý cho phép những thứ như vậy.

Về lý thuyết, một lỗi như tràn bộ đệm có thể được sử dụng để kích hoạt chức năng tùy ý. Nhưng điều này cũng có thể xảy ra ở hầu hết các nhị phân khác.


0

Nói chung, thường không có rủi ro để trích dẫn một tập tin tùy ý. Phương pháp thông thường của tôi để phân tích một tập tin là làm như sau:

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

Ở trên cho phép tôi xác định loại tệp thông qua filelệnh và stringslệnh cho phép tôi kết xuất bất kỳ chuỗi có thể nhận dạng nào từ các tệp nhị phân mà tôi không chắc chắn về dòng dõi của chúng.

thí dụ

đầu ra tập tin
$ 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
đầu ra chuỗi
$ 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
chạy chuỗi trên một tệp không xác định cũng có thể có hậu quả có vấn đề. lcamtuf.blogspot.fi/2014/10/ từ
Jan Wikholm

@IncnisMrsi - đọc câu đầu tiên !!!!
slm

OK, rút ​​lại tuyên bố trước đây của tôi, Câu trả lời ngắn gọn, sử dụng thuật ngữ khó hiểu, không có cơ sở và rõ ràng là không đầy đủ. Lưu ý rằng trong bảo mật, tùy ý, tùy chọn phân phối trong hệ điều hành yêu thích của bạn.
Incni Mrsi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.