hacktricks/macos-hardening/macos-red-teaming/README.md

12 KiB

macOS Red Teaming

htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!

HackTricks를 지원하는 다른 방법:

MDM 남용

  • JAMF Pro: jamf checkJSSConnection
  • Kandji

관리자 자격 증명을 탈취하여 관리 플랫폼에 액세스하면 악성 코드를 컴퓨터에 배포하여 모든 컴퓨터를 잠재적으로 탈취할 수 있습니다.

MacOS 환경에서 레드팀을 위해 MDM 작동 방식에 대한 이해가 매우 권장됩니다:

{% content-ref url="macos-mdm/" %} macos-mdm {% endcontent-ref %}

MDM을 C2로 사용

MDM은 프로필을 설치, 쿼리 또는 제거하거나 응용 프로그램을 설치, 로컬 관리자 계정을 생성, 펌웨어 암호를 설정, FileVault 키를 변경할 수 있는 권한이 있습니다.

자체 MDM을 실행하려면 https://mdmcert.download/에서 시도하여 얻을 수 있는 공급 업체에 의해 서명된 CSR가 필요합니다. 그리고 Apple 기기용 자체 MDM을 실행하려면 MicroMDM을 사용할 수 있습니다.

그러나 등록된 기기에 응용 프로그램을 설치하려면 여전히 개발자 계정으로 서명해야 합니다... 그러나 MDM 등록 시 기기는 MDM의 SSL 인증서를 신뢰하는 CA로 추가되므로 이제 모든 것을 서명할 수 있습니다.

MDM에 기기를 등록하려면 루트로 mobileconfig 파일을 설치해야 하며, 이는 pkg 파일을 통해 전달할 수 있습니다 (Safari에서 다운로드하면 압축이 풀립니다).

Mythic 에이전트 Orthrus는 이 기술을 사용합니다.

JAMF PRO 남용

JAMF는 사용자가 개발한 스크립트 (시스템 관리자가 개발한 스크립트), 네이티브 페이로드 (로컬 계정 생성, EFI 암호 설정, 파일/프로세스 모니터링...) 및 MDM (기기 구성, 기기 인증서...)를 실행할 수 있습니다.

JAMF 자가 등록

https://<company-name>.jamfcloud.com/enroll/과 같은 페이지로 이동하여 자가 등록이 활성화되어 있는지 확인하세요. 활성화되어 있다면 액세스 자격 증명을 요청할 수 있습니다.

JamfSniper.py 스크립트를 사용하여 패스워드 spraying 공격을 수행할 수 있습니다.

또한 적절한 자격 증명을 찾은 후 다음 양식으로 다른 사용자 이름을 브루트 포스할 수 있습니다:

JAMF 기기 인증

jamf 바이너리에는 모두에게 공유된 키체인을 열기 위한 비밀이 포함되어 있었으며, 그 당시에는 **jk23ucnq91jfu9aj**였습니다.
또한 jamf는 **/Library/LaunchAgents/com.jamf.management.agent.plist**에 LaunchDaemon으로 지속됩니다.

JAMF 기기 탈취

**jamf**가 사용할 JSS (Jamf Software Server) URL은 **/Library/Preferences/com.jamfsoftware.jamf.plist**에 있습니다.
이 파일에는 기본적으로 URL이 포함되어 있습니다:

{% code overflow="wrap" %}

plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist

[...]
<key>is_virtual_machine</key>
<false/>
<key>jss_url</key>
<string>https://halbornasd.jamfcloud.com/</string>
<key>last_management_framework_change_id</key>
<integer>4</integer>
[...]

{% endcode %}

따라서, 공격자는 악성 패키지 (pkg)를 드롭할 수 있으며, 이 패키지는 설치될 때 이 파일을 덮어쓰고 JAMF를 C2로 남용할 수 있도록 Typhon 에이전트의 Mythic C2 수신기 URL로 설정됩니다.

{% code overflow="wrap" %}

# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0

# TODO: There is an ID, maybe it's possible to have the real jamf connection and another one to the C2

{% endcode %}

JAMF Impersonation

장치와 JMF 간의 통신을 위장하기 위해 다음이 필요합니다:

  • 장치의 UUID: ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'
  • 다음 위치에서 JAMF 키체인을 가져옵니다: /Library/Application\ Support/Jamf/JAMF.keychain (장치 인증서를 포함)

이 정보를 사용하여 도난당한 하드웨어 UUID가짜 VM을 만들고 SIP를 비활성화한 후, JAMF 키체인을 넣어 Jamf 에이전트를 후킹하여 정보를 도난합니다.

비밀 정보 도난

a

또한 /Library/Application Support/Jamf/tmp/ 위치를 모니터링하여 관리자가 Jamf를 통해 실행하려는 사용자 정의 스크립트를 확인할 수 있습니다. 이러한 스크립트는 여기에 배치되고 실행되며 삭제될 수 있습니다. 이러한 스크립트에는 자격 증명이 포함될 수 있습니다.

그러나 자격 증명매개 변수로 이러한 스크립트를 통해 전달될 수 있으므로 ps aux | grep -i jamf를 모니터링해야 합니다(루트 권한이 필요하지 않음).

JamfExplorer.py 스크립트는 새 파일이 추가되거나 새 프로세스 인수가 추가될 때를 감지할 수 있습니다.

macOS 원격 액세스

또한 MacOS의 "특별한" 네트워크 프로토콜에 대해:

{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %} macos-protocols.md {% endcontent-ref %}

Active Directory

일부 경우에는 MacOS 컴퓨터가 AD에 연결되어 있는 것을 발견할 수 있습니다. 이러한 시나리오에서는 일반적으로 사용하는 방식으로 Active Directory를 열거해야 합니다. 다음 페이지에서 도움을 얻을 수 있습니다:

{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

{% content-ref url="../../windows-hardening/active-directory-methodology/" %} active-directory-methodology {% endcontent-ref %}

{% content-ref url="../../network-services-pentesting/pentesting-kerberos-88/" %} pentesting-kerberos-88 {% endcontent-ref %}

dscl이라는 로컬 MacOS 도구도 도움이 될 수 있습니다:

dscl "/Active Directory/[Domain]/All Domains" ls /

또한 MacOS용 도구들이 AD를 자동으로 열거하고 kerberos를 사용하는 방법을 연구하도록 준비되어 있습니다:

  • Machound: MacHound는 Bloodhound 감사 도구의 확장으로, MacOS 호스트에서 Active Directory 관계를 수집하고 흡수할 수 있도록 합니다.
  • Bifrost: Bifrost는 macOS에서 Heimdal krb5 API와 상호 작용하기 위해 설계된 Objective-C 프로젝트입니다. 이 프로젝트의 목표는 대상 시스템에 다른 프레임워크나 패키지를 필요로하지 않고 macOS 장치에서 Kerberos 주변의 보안 테스트를 더 잘 수행할 수 있도록 하는 것입니다.
  • Orchard: Active Directory 열거를 수행하는 JavaScript for Automation (JXA) 도구입니다.

도메인 정보

echo show com.apple.opendirectoryd.ActiveDirectory | scutil

사용자

맥OS 사용자의 세 가지 유형은 다음과 같습니다:

  • 로컬 사용자 — 로컬 OpenDirectory 서비스에서 관리되며 Active Directory와 어떤 방식으로도 연결되어 있지 않습니다.
  • 네트워크 사용자 — DC 서버에 연결하여 인증을 받아야 하는 휘발성 Active Directory 사용자입니다.
  • 모바일 사용자 — 자격 증명 및 파일에 대한 로컬 백업이 있는 Active Directory 사용자입니다.

사용자 및 그룹에 대한 로컬 정보는 /var/db/dslocal/nodes/Default 폴더에 저장됩니다.
예를 들어, _mark_라는 사용자에 대한 정보는 _/var/db/dslocal/nodes/Default/users/mark.plist_에 저장되며, admin 그룹에 대한 정보는 _/var/db/dslocal/nodes/Default/groups/admin.plist_에 저장됩니다.

HasSession 및 AdminTo 엣지를 사용하는 것 외에도, MacHound는 Bloodhound 데이터베이스에 세 가지 새로운 엣지를 추가합니다:

  • CanSSH - 호스트로 SSH 연결을 허용하는 엔티티
  • CanVNC - 호스트로 VNC 연결을 허용하는 엔티티
  • CanAE - 호스트에서 AppleEvent 스크립트를 실행할 수 있는 엔티티
#User enumeration
dscl . ls /Users
dscl . read /Users/[username]
dscl "/Active Directory/TEST/All Domains" ls /Users
dscl "/Active Directory/TEST/All Domains" read /Users/[username]
dscacheutil -q user

#Computer enumeration
dscl "/Active Directory/TEST/All Domains" ls /Computers
dscl "/Active Directory/TEST/All Domains" read "/Computers/[compname]$"

#Group enumeration
dscl . ls /Groups
dscl . read "/Groups/[groupname]"
dscl "/Active Directory/TEST/All Domains" ls /Groups
dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"

#Domain Information
dsconfigad -show

더 많은 정보는 https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/에서 확인할 수 있습니다.

키체인 접근

키체인에는 민감한 정보가 많이 포함되어 있으며, 프롬프트를 생성하지 않고 액세스하는 경우 레드팀 연습을 진행하는 데 도움이 될 수 있습니다:

{% content-ref url="macos-keychain.md" %} macos-keychain.md {% endcontent-ref %}

외부 서비스

MacOS 레드팀은 일반적인 Windows 레드팀과 다르며, 일반적으로 MacOS는 여러 외부 플랫폼과 직접 통합되어 있습니다. MacOS의 일반적인 구성은 OneLogin 동기화 자격 증명을 사용하여 컴퓨터에 액세스하고 OneLogin을 통해 여러 외부 서비스(예: github, aws...)에 액세스하는 것입니다.

기타 레드팀 기술

Safari

Safari에서 파일을 다운로드하면 "안전한" 파일인 경우 자동으로 열립니다. 예를 들어, zip 파일을 다운로드하면 자동으로 압축이 해제됩니다:

참고 자료