Đây là lệnh guestfs-security có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
guestfs-security - bảo mật của libguestfs
MÔ TẢ
Trang hướng dẫn sử dụng này thảo luận về các tác động bảo mật của việc sử dụng libguestfs, đặc biệt là với
khách hoặc hình ảnh đĩa không đáng tin cậy hoặc độc hại.
AN NINH OF GẮN HỆ THỐNG LỌC
Bạn không bao giờ được gắn hệ thống tệp khách không đáng tin cậy trực tiếp trên hạt nhân máy chủ của mình (ví dụ:
sử dụng loopback hoặc kpartx).
Khi bạn gắn kết một hệ thống tệp, các lỗi trong hệ thống tệp hạt nhân (VFS) có thể được chuyển thành
khai thác bởi những kẻ tấn công tạo ra một hệ thống tệp độc hại. Những khai thác này rất nghiêm trọng đối với
Hai lý do. Thứ nhất, có rất nhiều trình điều khiển hệ thống tệp trong hạt nhân và nhiều
chúng không thường xuyên được sử dụng và không có nhiều nhà phát triển chú ý đến mã.
Không gian người dùng Linux giúp những kẻ bẻ khóa tiềm năng bằng cách phát hiện loại hệ thống tệp và
tự động chọn trình điều khiển VFS phù hợp, ngay cả khi loại hệ thống tệp đó không mong muốn.
Thứ hai, khai thác cấp hạt nhân giống như khai thác gốc cục bộ (tệ hơn theo một số cách), cho
quyền truy cập ngay lập tức và toàn bộ vào hệ thống ở cấp độ phần cứng.
Những khai thác này có thể hiện diện trong nhân trong một thời gian rất dài
(https://lwn.net/Articles/538898/).
Libguestfs cung cấp một cách tiếp cận theo lớp để bảo vệ bạn khỏi bị lợi dụng:
hệ thống tập tin không đáng tin cậy
--------------------------------------
nhân thiết bị
--------------------------------------
tiến trình qemu chạy không phải root
--------------------------------------
sVirt [nếu sử dụng libvirt + SELinux]
--------------------------------------
nhân máy chủ
Chúng tôi chạy nhân Linux bên trong máy ảo qemu, thường chạy với tư cách người dùng không phải root.
Kẻ tấn công sẽ cần viết một hệ thống tập tin khai thác hạt nhân đầu tiên, sau đó
đã khai thác ảo hóa qemu (ví dụ: trình điều khiển qemu bị lỗi) hoặc libguestfs
giao thức, và cuối cùng để nghiêm túc như việc khai thác hạt nhân máy chủ, nó sẽ cần
leo thang các đặc quyền của nó để root. Ngoài ra, nếu bạn sử dụng libvirt back end và
SELinux, sVirt được sử dụng để giới hạn quá trình qemu. Báo cáo nhiều bước này, được thực hiện
bởi một phần dữ liệu tĩnh, được cho là cực kỳ khó thực hiện, mặc dù chúng tôi không bao giờ nói
'không bao giờ' về các vấn đề bảo mật.
Người gọi cũng có thể giảm bề mặt tấn công bằng cách buộc loại hệ thống tệp khi gắn kết
(sử dụng "guestfs_mount_vfs").
CÁC VẤN ĐỀ CHUNG AN NINH TƯ VẤN
Hãy cẩn thận với bất kỳ tệp hoặc dữ liệu nào mà bạn tải xuống từ khách (bằng cách "tải xuống", ý chúng tôi là
không chỉ lệnh "guestfs_download" mà bất kỳ lệnh nào đọc tệp, tên tệp,
thư mục hoặc bất kỳ thứ gì khác từ ảnh đĩa). Kẻ tấn công có thể thao túng dữ liệu để
đánh lừa chương trình của bạn làm điều sai trái. Hãy xem xét các trường hợp như:
· Dữ liệu (tệp, v.v.) không hiện diện
· Có mặt nhưng trống rỗng
· Lớn hơn nhiều so với bình thường
· Chứa dữ liệu 8 bit tùy ý
· Ở dạng mã hóa ký tự không mong muốn
· Chứa các chữ đồng dạng.
BẢO VỆ AN NINH
Giao thức được thiết kế để an toàn, dựa trên RFC 4506 (XDR) với
kích thước tin nhắn. Tuy nhiên, một chương trình sử dụng libguestfs cũng phải cẩn thận - ví dụ:
bạn có thể viết một chương trình tải xuống tệp nhị phân từ hình ảnh đĩa và thực thi nó cục bộ,
và không có số lượng bảo mật giao thức nào sẽ giúp bạn thoát khỏi hậu quả.
THANH TRA AN NINH
Các phần của API kiểm tra (xem "KIỂM TRA") trả về các chuỗi không đáng tin cậy trực tiếp từ
khách và những dữ liệu này có thể chứa bất kỳ dữ liệu 8 bit nào. Người gọi nên cẩn thận để thoát khỏi những
trước khi in chúng vào một tệp có cấu trúc (ví dụ: sử dụng tính năng thoát HTML nếu tạo
trang web).
Cấu hình khách có thể bị thay đổi theo những cách bất thường bởi quản trị viên ảo
máy và có thể không phản ánh thực tế (đặc biệt đối với
khách). Ví dụ: chúng tôi phân tích cú pháp tên máy chủ từ các tệp cấu hình như
/ etc / sysconfig / network mà chúng tôi tìm thấy trong khách, nhưng quản trị viên khách có thể dễ dàng
thao tác các tệp này để cung cấp tên máy chủ không chính xác.
API kiểm tra phân tích cú pháp cấu hình khách bằng hai thư viện bên ngoài: Augeas (Linux
cấu hình) và hivex (Windows Registry). Cả hai đều được thiết kế mạnh mẽ về mặt
dữ liệu độc hại, mặc dù vẫn có thể xảy ra các cuộc tấn công từ chối dịch vụ, chẳng hạn như với
tệp cấu hình quá khổ.
ĐANG CHẠY CHƯA CHỈNH SỬA KHÁCH MỜI HÀNG
Hãy rất thận trọng khi chạy lệnh từ khách. Bằng cách chạy một lệnh trong
khách, bạn đang cung cấp thời gian cho CPU cho một tệp nhị phân mà bạn không kiểm soát, dưới cùng một người dùng
tài khoản là thư viện, mặc dù được bao bọc trong ảo hóa qemu. Thêm thông tin và
các lựa chọn thay thế có thể được tìm thấy trong phần "CHẠY LỆNH".
CVE-2010-3851
https://bugzilla.redhat.com/642934
Lỗi bảo mật này liên quan đến việc phát hiện định dạng đĩa tự động mà qemu thực hiện trên đĩa
hình ảnh.
Hình ảnh đĩa thô chỉ là các byte thô, không có tiêu đề. Hình ảnh đĩa khác như qcow2
chứa một tiêu đề đặc biệt. Qemu giải quyết vấn đề này bằng cách tìm kiếm một trong những tiêu đề đã biết,
và nếu không tìm thấy thì giả sử hình ảnh đĩa phải là nguyên.
Điều này cho phép khách đã được cung cấp hình ảnh đĩa thô để ghi một số tiêu đề khác. Tại
lần khởi động tiếp theo (hoặc khi hình ảnh đĩa được truy cập bởi libguestfs) qemu sẽ thực hiện tự động phát hiện
và nghĩ rằng định dạng hình ảnh đĩa là qcow2 dựa trên tiêu đề do khách viết.
Bản thân điều này sẽ không phải là vấn đề, nhưng qcow2 cung cấp nhiều tính năng, một trong số đó là
cho phép hình ảnh đĩa tham chiếu đến hình ảnh khác (được gọi là "đĩa sao lưu"). Nó thực hiện điều này bằng cách
đặt đường dẫn đến đĩa sao lưu vào tiêu đề qcow2. Đường dẫn này không được xác thực
và có thể trỏ đến bất kỳ tệp máy chủ nào (ví dụ: "/ etc / passwd"). Đĩa sao lưu sau đó lộ ra
thông qua các "lỗ hổng" trên hình ảnh đĩa qcow2, tất nhiên điều này hoàn toàn nằm trong tầm kiểm soát
của kẻ tấn công.
Trong libguestfs, điều này khá khó khai thác ngoại trừ hai trường hợp:
1. Bạn đã bật mạng hoặc đã mở đĩa ở chế độ ghi.
2. Bạn cũng đang chạy mã không đáng tin cậy từ khách (xem "CHẠY LỆNH").
Cách để tránh điều này là chỉ định định dạng đĩa dự kiến khi thêm đĩa (
tùy chọn "định dạng" tùy chọn thành "guestfs_add_drive_opts"). Bạn nên luôn luôn làm điều này nếu
đĩa là định dạng thô và đó cũng là một ý tưởng hay cho các trường hợp khác. (Xem thêm "ĐÈN HÌNH ẢNH
ĐỊNH DẠNG ").
Đối với các đĩa được thêm từ libvirt bằng các lệnh gọi như "guestfs_add_domain", định dạng được tìm nạp
từ libvirt và đi qua.
Đối với các công cụ libguestfs, hãy sử dụng --định dạng tham số dòng lệnh sao cho phù hợp.
CVE-2011-4127
https://bugzilla.redhat.com/752375
Đây là một lỗi trong nhân cho phép khách ghi đè lên các phần của ổ đĩa của máy chủ
mà họ thường không có quyền truy cập.
Chỉ cần cập nhật libguestfs lên bất kỳ phiên bản nào ≥ 1.16 có thay đổi
giảm nhẹ vấn đề.
CVE-2012-2690
https://bugzilla.redhat.com/831117
Các phiên bản cũ của cả chỉnh sửa ảo và lệnh "chỉnh sửa" của khách đã tạo một tệp mới
có chứa các thay đổi nhưng không đặt quyền, v.v. của tệp mới để khớp với
người già. Kết quả của việc này là nếu bạn chỉnh sửa một tệp nhạy cảm về bảo mật, chẳng hạn như
/ etc / shadow sau đó nó sẽ được cả thế giới đọc sau khi chỉnh sửa.
Chỉ cần cập nhật libguestfs lên bất kỳ phiên bản nào ≥ 1.16.
CVE-2013-2124
https://bugzilla.redhat.com/968306
Lỗi bảo mật này là một lỗ hổng trong quá trình kiểm tra khi một vị khách không đáng tin cậy sử dụng
tệp được tạo thủ công trong hệ điều hành khách có thể gây ra lỗi kép trong thư viện C (từ chối
dịch vụ).
Chỉ cần cập nhật libguestfs lên phiên bản không dễ bị tấn công: libguestfs ≥
1.20.8, ≥ 1.22.2 hoặc ≥ 1.23.2.
CVE-2013-4419
https://bugzilla.redhat.com/1016960
Khi sử dụng cá khách(1) --Xa xôi hoặc cá khách --nghe tùy chọn, cá khách sẽ tạo
một ổ cắm ở một vị trí đã biết (/tmp/.guestfish-$UID/socket-$PID).
Vị trí phải là một địa điểm đã biết để cả hai đầu có thể giao tiếp. Tuy nhiên không
kiểm tra được thực hiện rằng thư mục chứa (/tmp/.guestfish-$UID) thuộc sở hữu của
người sử dụng. Do đó, một người dùng khác có thể tạo thư mục này và có khả năng chiếm quyền điều khiển các ổ cắm sở hữu
bởi máy khách hoặc máy chủ khách cá nhân của người dùng khác.
Chỉ cần cập nhật libguestfs lên phiên bản không dễ bị tấn công: libguestfs ≥
1.20.12, ≥ 1.22.7 hoặc ≥ 1.24.
Từ chối of dịch vụ khi nào thanh tra đĩa hình ảnh với hư hỏng btrfs khối lượng
Có thể sự cố libguestfs (và các chương trình sử dụng libguestfs làm thư viện) do
hiển thị hình ảnh đĩa có chứa ổ đĩa btrfs bị hỏng.
Điều này là do tham chiếu con trỏ NULL gây ra từ chối dịch vụ và không
được cho là có thể khai thác thêm nữa.
Xem cam kết d70ceb4cbea165c960710576efac5a5716055486 để biết bản sửa lỗi. Bản sửa lỗi này được bao gồm trong
libguestfs các nhánh ổn định ≥ 1.26.0, ≥ 1.24.6 và ≥ 1.22.8, và cả trong RHEL ≥ 7.0.
Các phiên bản trước của libguestfs không dễ bị tấn công.
CVE-2014-0191
Libguestfs trước đây đã sử dụng các API libxml2 không an toàn để phân tích cú pháp libvirt XML. Các API này
được mặc định để cho phép các kết nối mạng được thực hiện khi một số tài liệu XML nhất định
đã trình bày. Sử dụng tài liệu XML không đúng định dạng, nó cũng có thể làm cạn kiệt tất cả CPU, bộ nhớ
hoặc bộ mô tả tệp trên máy.
Vì libvirt XML đến từ một nguồn đáng tin cậy (daemon libvirt) nên không nghĩ là
rằng điều này có thể có thể được khai thác.
Điều này đã được khắc phục trong libguestfs ≥ 1.27.9 và bản sửa lỗi được báo cáo lại cho các phiên bản ổn định ≥
1.26.2, ≥ 1.24.9, ≥ 1.22.10 và ≥ 1.20.13.
Shellshock (dằn mặt CVE-2014-6271)
Lỗi bash này ảnh hưởng gián tiếp đến libguestfs. Để biết thêm thông tin, hãy xem:
https://www.redhat.com/archives/libguestfs/2014-September/msg00252.html
CVE-2014-8484
CVE-2014-8485
Hai lỗi này trong binutils ảnh hưởng đến GNU dây(1) chương trình, và do đó
API "guestfs_strings" và "guestfs_strings_e" trong libguestfs. Chạy chuỗi trên một
tệp không đáng tin cậy có thể gây ra thực thi mã tùy ý (giới hạn trong libguestfs
thiết bị).
Trong libguestfs ≥ 1.29.5 và ≥ 1.28.3, libguestfs sử dụng "chuỗi" -a tùy chọn để tránh BFD
phân tích cú pháp trên tệp.
CVE-2015-5745
https://bugzilla.redhat.com/show_bug.cgi?id=1251157
Đây không phải là một lỗ hổng trong libguestfs, mà bởi vì chúng tôi luôn cung cấp một cổng nối tiếp virtio
cho từng khách (vì đó là cách giao tiếp giữa khách và chủ nhà diễn ra), một báo cáo từ
có thể sử dụng quy trình qemu của máy chủ. Điều này có thể ảnh hưởng đến bạn nếu:
· Chương trình libguestfs của bạn chạy các chương trình không đáng tin cậy từ khách (sử dụng "guestfs_sh"
vv), hoặc
· Một khai thác khác đã được tìm thấy trong (ví dụ) mã hệ thống tệp hạt nhân cho phép một
hệ thống tệp không đúng định dạng để tiếp quản công cụ.
Nếu bạn sử dụng sVirt để nhốt qemu, điều đó sẽ cản trở một số cuộc tấn công.
Quyền of .ssh và .ssh / allow_keys
https://bugzilla.redhat.com/1260778
Công cụ ảo tùy chỉnh(1) ảo sysprep(1) thợ xây dựng(1) có một --ssh-tiêm
tùy chọn để đưa khóa SSH vào ảnh đĩa máy ảo. Họ có thể tạo ra một
~ người dùng / .ssh thư mục và ~ user / .ssh / Authorised_keys nộp cho khách để làm điều này.
Trong libguestfs <1.31.5 và libguestfs <1.30.2, thư mục và tệp mới sẽ có chế độ
0755 và chế độ 0644 tương ứng. Tuy nhiên, các quyền này (đặc biệt là đối với ~ người dùng / .ssh)
rộng hơn các quyền mà OpenSSH sử dụng. Trong libguestfs hiện tại, thư mục
và tệp được tạo bằng chế độ 0700 và chế độ 0600.
Sử dụng bảo mật guestfs trực tuyến bằng các dịch vụ onworks.net