Làm thế nào để tránh các cuộc tấn công trình tự thoát trong thiết bị đầu cuối?


29

Đọc chi tiết về CVE-2009-4487 (nói về sự nguy hiểm của các chuỗi thoát trong tệp nhật ký) tôi hơi ngạc nhiên.

Để trích dẫn CVE-2009-4487 :

nginx 0.7.64 ghi dữ liệu vào tệp nhật ký mà không khử trùng các ký tự không in được, điều này có thể cho phép kẻ tấn công từ xa sửa đổi tiêu đề của cửa sổ hoặc có thể thực thi các lệnh tùy ý hoặc ghi đè lên tệp, thông qua yêu cầu HTTP chứa trình tự thoát cho trình giả lập thiết bị đầu cuối.

Rõ ràng, đây không thực sự là một lỗ hổng bảo mật trong nginx, mà là trong các trình giả lập thiết bị đầu cuối.

Chắc chắn, có lẽ cating một tệp nhật ký đến thiết bị đầu cuối chỉ xảy ra một cách tình cờ, nhưng greping một logfile là khá phổ biến. lesscó lẽ vệ sinh các chuỗi thoát, nhưng ai biết lệnh shell nào không thay đổi chuỗi thoát ...

Tôi có xu hướng đồng ý với phản ứng Varnish :

Sự khôn ngoan của việc thoát khỏi phản ứng đầu cuối nói chung đã bị nghi ngờ thường xuyên, nhưng vẫn không có chương trình mô phỏng thiết bị đầu cuối nào phù hợp để loại bỏ các chuỗi này, có lẽ là một nỗ lực sai lầm về khả năng tương thích với công nghệ 1970 không còn được sử dụng. [..] Thay vì đổ lỗi cho bất kỳ và tất cả các chương trình viết logfiles, sẽ hiệu quả hơn nhiều, từ quan điểm bảo mật, để khiến các chương trình mô phỏng thiết bị đầu cuối ngừng làm những điều ngu ngốc, và do đó khắc phục vấn đề này và các vấn đề bảo mật khác một lần và cho tất cả.

Vì vậy, câu hỏi của tôi:

Làm cách nào tôi có thể bảo mật xterm của mình, sao cho không thể thực thi lệnh hoặc ghi đè lên các tệp thông qua các chuỗi thoát?

Trình giả lập thiết bị đầu cuối nào cho X được bảo mật trước cuộc tấn công này?


4
Nhiều chuỗi thoát làm những việc hợp pháp (đổi tên / thay đổi kích thước / vv một xterm). Nhưng bất cứ ai cũng có thể xác định các chuỗi thoát thực thi các lệnh hoặc ghi đè lên các tệp ?
krubo


Vấn đề tương tự liên quan đến các cuộc tấn công paste-control-chars-from-web-browser trên Security SE: Làm cách nào tôi có thể tự bảo vệ mình khỏi loại lạm dụng clipboard này? tl; dr: nếu bạn đang sử dụng thiết bị đầu cuối dựa trên xterm / vte được phát hành sau 2013/2015, bạn được bảo vệ chống lại điều này vì chúng đang lọc ra các ký tự điều khiển, theo mặc định.
maxschlepzig

Câu trả lời:


27

Các thiết bị đầu cuối VT100 (mà tất cả các trình giả lập thiết bị đầu cuối hiện đại mô phỏng ở một mức độ nào đó) đã hỗ trợ một số lệnh có vấn đề, nhưng các trình giả lập hoặc phân phối hiện đại vô hiệu hóa các lệnh có vấn đề hơn và ít hữu ích hơn. Dưới đây là danh sách không đầy đủ các chuỗi thoát tiềm ẩn rủi ro (không bao gồm các chuỗi chỉ đơn thuần làm cho màn hình không thể đọc được theo một cách nào đó):

  • Các lệnh tệp nhật ký tùy ý trong rxvt và Eterm được báo cáo bởi HD Moore . Đây thực sự là những lỗi lớn, may mắn là đã sửa lâu.
  • Lệnh answerback, còn được gọi là Return Terminal Status, được gọi bởi ENQ( Ctrl+E). Điều này chèn văn bản vào thiết bị đầu cuối như thể người dùng đã gõ nó. Tuy nhiên, văn bản này không thuộc quyền kiểm soát của kẻ tấn công: đó là tên riêng của thiết bị đầu cuối, thường là một cái gì đó giống như xtermhoặc screen. Trên hệ thống của tôi (nén bóp Debian), xterm trả về chuỗi trống theo mặc định (điều này được kiểm soát bởi answerbackStringtài nguyên).
  • Các thiết bị gửi thuộc tính lệnh ESC [ cvà bạn bè. Thiết bị đầu cuối phản hồi với ESC [ … c(trong đó chỉ có thể chứa các chữ số và dấu chấm câu ASCII). Đây là một cách truy vấn một số khả năng của thiết bị đầu cuối, chủ yếu là lỗi thời nhưng có lẽ được sử dụng bởi các ứng dụng cũ. Một lần nữa, phản ứng của thiết bị đầu cuối không thể phân biệt được với đầu vào của người dùng, nhưng nó không thuộc quyền kiểm soát của kẻ tấn công. Chuỗi điều khiển có thể trông giống như một phím chức năng, nhưng chỉ khi người dùng có cấu hình bất thường (không có cài đặt thông thường nào tôi gặp phải có chuỗi thoát khóa chức năng hợp lệ là tiền tố của phản hồi đầu cuối).
  • Các chức năng điều khiển thiết bị khác nhau (DCS thoát, bắt đầu bằng ESC P).
    • Tôi không biết những tác hại nào có thể được thực hiện thông qua DECUDK(đặt các khóa do người dùng xác định) trên trình giả lập thiết bị đầu cuối điển hình.
    • DECRQSS(Chuỗi trạng thái yêu cầu) là một lệnh khác mà thiết bị đầu cuối phản hồi với một chuỗi thoát, lần này bắt đầu bằng \eP; điều này có thể có vấn đề vì \ePlà một khóa hợp lệ ( Alt+ Shift+ P).
    • Xterm có thêm hai tính năng thử nghiệm: ESC P + p …ESC P + q …, để lấy và đặt chuỗi termcap. Từ mô tả, điều này có thể được sử dụng ít nhất để sửa đổi hiệu ứng của các phím chức năng.
  • Một số lệnh báo cáo trạng thái: ESC [ … n(Báo cáo trạng thái thiết bị). Thiết bị đầu cuối đáp ứng với một chuỗi thoát. Hầu hết các chuỗi thoát này không tương ứng với các chuỗi thoát khóa chức năng. Một vẻ có vấn đề: các báo cáo ESC [ 6 ncó dạng nơi và là chuỗi chữ số, và điều này có thể trông giống như với một số từ bổ nghĩa.ESC [ x ; y RxyF3
  • Các lệnh thao tác cửa sổ ESC [ … t.
    • Một số trong số này cho phép cửa sổ xterm được thay đổi kích thước, biểu tượng hóa, v.v., gây rối.
    • Một số trong số này làm cho thiết bị đầu cuối phản ứng với một chuỗi thoát. Hầu hết các chuỗi thoát này có nguy cơ thấp, tuy nhiên, có hai lệnh nguy hiểm: câu trả lời ESC [ 2 0 tESC [ 2 1 tbao gồm nhãn biểu tượng và tiêu đề của cửa sổ đầu cuối, và kẻ tấn công có thể chọn những lệnh này.
    • Ít nhất là trong quá trình nén Debian, xterm bỏ qua các lệnh này theo mặc định; chúng có thể được kích hoạt bằng cách đặt allowWindowOpstài nguyên hoặc chọn lọc thông qua disallowedWindowOpstài nguyên. Gnome-terminal trong Ubuntu 10.04 thực hiện ngay cả các câu trả lời tiêu đề theo mặc định. Tôi chưa kiểm tra các thiết bị đầu cuối hoặc phiên bản khác.
  • Các lệnh để đặt tiêu đề thiết bị đầu cuối hoặc tên biểu tượng. Dưới xterm và hầu hết các thiết bị đầu cuối X khác, chúng là . Trong màn hình, trình tự thoát là . Tôi tìm thấy mối quan tâm về các lệnh này được đánh giá cao. Mặc dù chúng cho phép một số lượng nghịch ngợm, bất kỳ trang web nào cũng có cùng một vấn đề. Hoạt động trên một cửa sổ chỉ dựa trên tiêu đề của nó chứ không phải trên lớp của nó giống như mở một tệp có tên được đặt cho bạn bởi một bên không tin cậy hoặc không trích dẫn một bản mở rộng có thể thay đổi trong tập lệnh shell hoặc vỗ vào một con chó dại trên mũi - đừng phàn nàn nếu bạn bị cắn.ESC ] digit ; title ESC \ESC k title ESC \

Tôi thấy phản ứng của Varnish không rõ ràng. Có vẻ như nó đang cố gắng thay đổi sự đổ lỗi, hoặc trong chế độ nazi bảo mật (bất kỳ mối quan tâm bảo mật nào, chính hãng hay không, đều biện minh cho tính năng bóng đen).

Sự khôn ngoan của việc thoát khỏi phản ứng đầu cuối nói chung đã bị nghi ngờ thường xuyên, nhưng vẫn không có chương trình mô phỏng thiết bị đầu cuối nào phù hợp để loại bỏ các chuỗi này, có lẽ là một nỗ lực sai lầm về khả năng tương thích với công nghệ 1970 không còn được sử dụng. (Hiểu)
Thay vì đổ lỗi cho bất kỳ và tất cả các chương trình viết logfiles, sẽ hiệu quả hơn nhiều, từ quan điểm bảo mật, để khiến các chương trình mô phỏng thiết bị đầu cuối ngừng làm những điều ngu ngốc, và do đó khắc phục vấn đề này và các vấn đề bảo mật khác một lần và cho tất cả.

Nhiều câu trả lời là các tính năng hữu ích: một ứng dụng cần biết những thứ như vị trí con trỏ và kích thước cửa sổ. Đặt tiêu đề cửa sổ cũng rất hữu ích. Có thể hoàn toàn dựa vào ioctlcác cuộc gọi cho những cuộc gọi này, tuy nhiên điều này sẽ cần thêm mã và tiện ích để thực hiện các ioctlcuộc gọi này và chuyển chúng thành văn bản unix theo kiểu mô tả tệp. Thay đổi các giao diện này bây giờ sẽ rất nhiều công việc, vì lợi ích ít.

Các tệp văn bản không được phép chứa các ký tự không in như ký tự điều khiển. Các tệp nhật ký thường được dự kiến ​​là các tệp văn bản. Các tệp nhật ký không được chứa các ký tự điều khiển.

Nếu bạn đang lo lắng rằng một tập tin có thể chứa trình tự thoát, mở nó trong một trình soạn thảo, hoặc xem nó có lessmà không có -rhoặc -Rtùy chọn, hoặc xem nó thông qua cat -v.


2
"Có thể dựa hoàn toàn vào các cuộc gọi ioctl cho những điều này" Nhưng nếu có thực sự có cáp nối tiếp giữa ứng dụng và thiết bị đầu cuối thì sao?
mmv-ru

5

Nó không hoàn toàn đơn giản; Rất nhiều người có mã để đặt xtermtiêu đề là một phần của dấu nhắc, v.v. và vì những lý do rất chính đáng (vì bất kỳ ai là shutdownmáy sai từ cửa sổ thiết bị đầu cuối sai đều có thể cho bạn biết!). Do đó, sửa chữa nó một cách chính xác liên quan đến việc giới thiệu bối cảnh bảo mật và do đó làm phức tạp nghiêm trọng sự tương tác giữa các trình bao và trình giả lập thiết bị đầu cuối và có lẽ cả dotfiles của mọi người. Hoặc bạn có thể sử dụng giải pháp cho thuê thấp để vệ sinh bất cứ thứ gì có thể được hiển thị trong một thiết bị đầu cuối; điều này phần lớn làm giảm việc thoát các ký tự điều khiển, có lẽ nên được thực hiện bằng mọi cách chỉ để làm cho chúng nổi bật (vì trong tệp nhật ký, chúng có thể chỉ ra ai đó đang cố gắng tiêm shellcode).

(Bên cạnh đó, Punycode là một trường hợp nghiêm trọng hơn của cùng một loại vấn đề - và tuy nhiên vẫn được đưa ra một tiêu chuẩn chính thức.


1
Một thuật ngữ x có thể cho phép thay đổi tiêu đề thông qua các chuỗi thoát nhưng không cho phép ghi đè các tệp và thực thi các lệnh tùy ý thông qua các chuỗi thoát. Đó sẽ là một bước tiến, phải không?
maxschlepzig

1
Những cách làm trực tiếp đã bị vô hiệu hóa trong nhiều năm. Các cách gián tiếp vẫn còn, mặc dù ít nhất chúng yêu cầu một bước bổ sung (tức là tấn công kỹ thuật xã hội để khiến người dùng gọi khóa chức năng được lập trình lại). Nhưng thanh tiêu đề được gọi cụ thể trong CVE, có lẽ là một phần của cuộc tấn công khiến người dùng nhầm lẫn khi làm sai việc. Nỗi lo hiện đại lớn nhất là thứ gì đó có thể được lập trình để gửi văn bản tùy ý đến vỏ và câu trả lời cho phép kẻ tấn công tìm ra trình giả lập thiết bị đầu cuối có thể được thực hiện để làm gì ...
geekizard

... nhưng điều đó, tốc độ Varnish, gần như chắc chắn vẫn được sử dụng trong các môi trường thương mại lớn, nơi phần mềm được chuyển tối thiểu và phải mất nhiều hơn là chỉ nhổ răng để có được những thay đổi phù hợp.
geekizard
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.