소개
이 문서에서는 Cisco ISE에서 macOS 서비스 조건을 구성하는 프로세스에 대해 설명합니다.
사전 요구 사항
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- macOS에 대한 기본 지식
- ISE Posture 플로우에 대한 지식
참고: 이 문서에서는 macOS 서비스 조건의 컨피그레이션에 대해 설명합니다. 초기 상태 컨피그레이션은 이 문서에서 다루지 않습니다.
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- Cisco ISE 3.3 패치 1
- Sonoma 14.3.1을 실행 중인 macoOS 장치
- Cisco Secure Client 5.1.2.42
- Compliance Module 버전 4.3.3432.64000
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
macOS 서비스 조건은 서비스가 macOS 장치에 로드되었는지 여부를 확인하기 위해 대/소문자를 사용해야 할 때 유용하며 서비스가 실행 중인지 여부를 확인할 수도 있습니다. macOS 서비스 조건은 두 가지 서비스 유형을 확인할 수 있습니다. 데몬 및 에이전트.
데몬은 전체 시스템의 일부로 백그라운드에서 실행되는 프로그램입니다(즉, 특정 사용자에 연결되어 있지 않음). 데몬은 GUI를 표시할 수 없습니다. 보다 구체적으로 windows 서버에 연결할 수 없습니다. 웹 서버는 데몬의 완벽한 예입니다.
에이전트는 특정 사용자를 대신하여 백그라운드에서 실행되는 프로세스입니다. 에이전트는 사용자의 홈 디렉터리에 안정적으로 액세스하거나 Windows 서버에 연결하는 등 데몬이 수행할 수 없는 작업을 수행할 수 있으므로 유용합니다. 달력 모니터링 프로그램은 상담원의 좋은 예입니다.
아래 다이어그램에서는 디바이스 시작 및 사용자 로그인을 기반으로 각 디바이스가 어떻게 로드되는지 확인할 수 있습니다.

데몬 및 에이전트에 대한 자세한 내용은 Apple 설명서를 참조하십시오
macOS 디바이스에서 사용 가능한 데몬 및 에이전트는 다음 위치에 있습니다.
위치
|
설명
|
~/라이브러리/시작 에이전트
|
사용자가 제공한 사용자별 에이전트.
|
/Library/LaunchAgents
|
관리자가 제공한 사용자별 에이전트입니다.
|
/Library/LaunchDaemons
|
관리자가 제공한 시스템 전체 데몬입니다.
|
/System/Library/LaunchAgents
|
OS X 사용자당 에이전트
|
/System/Library/LaunchDaemons
|
OS X 시스템 전체 데몬
|
다음 명령을 사용하여 macOS 터미널에서 각 카테고리의 목록을 확인할 수 있습니다.
ls -ltr ~/Library/LaunchAgents
ls -ltr /Library/LaunchAgents
ls -ltr /Library/LaunchDaemons
ls -ltr /System/Library/LaunchAgents
ls -ltr /System/Library/LaunchDaemons
이전 위치에서는 macOS 디바이스에서 사용 가능한 모든 데몬과 에이전트를 표시할 수 있지만, 모든 데몬과 에이전트가 로드되었거나 실행 중인 것은 아닙니다.
구성
macOS 서비스 조건에 대한 컨피그레이션은 다음 단계를 사용하여 수행할 수 있습니다.
1. 확인할 서비스 이름을 지정합니다.
2 . (선택 사항) 서비스 세부 정보를 확인하여 서비스가 상담원인지 아니면 데몬인지를 정의합니다.
3. 평가할 서비스 운영자를 선택합니다.
4. 해당 조건에 대한 요구 사항 및 포스처 정책을 구성합니다.
참고: 서비스 상태 조건을 사용하려면 높은 권한이 필요하므로 ISE PSN을 Cisco Secure Client(이전의 AnyConnect)에서 신뢰해야 합니다. 참조 설명서
확인할 서비스 이름 확인
ISE Posture Compliance Module에서는 로드, 실행 및 로드되었고 종료 코드로 실행 중인 서비스를 확인할 수 있습니다.
로드된 서비스를 확인하려면 sudo launchctl dumpstate 명령을 사용합니다.
로드되고 종료 코드가 있는 서비스를 확인하려면 sudo launchctl list 명령을 사용합니다.
이전 명령은 갑자기 많은 정보를 표시할 수 있습니다. 대신 다음 명령을 사용하여 실제 서비스 이름만 표시합니다.
로드된 서비스 이름만 확인하려면 다음 명령을 사용합니다.
sudo grep -B 10 -A 10 -E "^\s*state = " << "$(launchctl dumpstate)" | grep -aiE "\/.*= {" | sed '|.*/||;s| = {$||'
로드되고 종료 코드가 있는 서비스 이름만 확인하려면 다음 명령을 사용합니다.
sudo launchctl 목록 | awk '{if (NR>1) print $3}'
이러한 명령은 많은 정보를 표시하므로 각 명령이 끝나면 다른 grep 필터를 사용하여 찾고 있는 서비스를 찾는 것이 좋습니다.
예를 들어, 특정 공급업체별 서비스를 찾는 경우 및 의 필터로 키워드를 사용할 수 있습니다.
시스코 서비스의 경우 다음과 같은 명령이 사용됩니다.
sudo grep -B 10 -A 10 -E "^\s*state = " << "$(launchctl dumpstate)" | grep -aiE "\/.*= {" | sed '|.*/||;s| = {$||' | grep -i cisco
sudo launchctl 목록 | awk '{if (NR>1) print $3}' | grep -i cisco
(선택 사항) 서비스 세부 정보를 확인하여 해당 서비스가 상담원인지 아니면 데몬인지를 정의합니다
이 조건의 컨피그레이션 중 두 번째 부분에서는 서비스가 데몬 유형인지 에이전트 유형인지 확인해야 합니다.
팁: ISE에서 데몬 또는 사용자 에이전트에 대한 옵션을 선택할 수 있으므로 이 단계는 선택 사항이므로, 해당 옵션을 선택하고 이 부분을 건너뛸 수 있습니다.
이 조건에서 세분화하려는 경우 다음 작업을 수행하여 유형을 확인할 수 있습니다.
- 먼저 sudo grep -B 10 -A 10 -E "^\s*state = " << "$(launchctl dumpstate)" 명령을 사용하여 서비스의 전체 launchctl 이름을 확인하십시오. | grep -aiE "\/.*= {" | sed '|.*/||;s| = {$||' | grep -i {서비스 이름}
예를 들어 sudo grep -B 10 -A 10 -E "^\s*state = " << "$(launchctl dumpstate)" 명령의 경우 | grep -aiE "\/.*= {" | sed 's/.\{3\}$/' | grep -i com.cisco.secureclient.iseposture, 출력은 gui/501/com.cisco.secureclient.iseposture입니다.
2. sudo launchctl print { Your launchctl service name } | grep -i 'type = Launch' 명령을 사용하여 서비스 유형을 확인합니다.
다음 예의 명령: sudo launchctl print gui/501/com.cisco.secureclient.iseposture | grep -i 'type = Launch', 출력은 type = LaunchAgent입니다.
즉, 서비스 유형이 Agent이고 그렇지 않으면 유형 = LaunchDaemon이 표시됩니다.
참고: 정보가 비어 있는 경우 서비스 유형 설정에 대해 ISE의 Daemon 또는 User Agent에 대한 옵션을 선택합니다.
평가할 서비스 운영자 선택
ISE에서는 5개의 서로 다른 서비스 연산자를 선택할 수 있습니다.
- 로드됨
- 로드되지 않음
- 로드 및 실행 중
- 종료 코드와 함께 로드됨
- 로드 및 실행 중 또는 종료 코드 포함
로드된 서비스
다음 두 명령을 사용할 때 나열되는 모든 서비스입니까?
sudo grep -B 10 -A 10 -E "^\s*state = " << "$(launchctl dumpstate)" | grep -aiE "\/.*= {" | sed '|.*/||;s| = {$||'
sudo launchctl 목록 | awk '{if (NR>1) print $3}'
로드되지 않은 서비스
속성 목록(plist)이 정의되어 있지만 로드되지 않은 서비스나 속성 목록(plist)이 정의되어 있지 않아 전혀 로드할 수 없는 서비스가 모두 해당됩니까?
이러한 서비스는 식별하기가 쉽지 않으며, macOS 디바이스에 특정 서비스가 존재하지 않아야 하는지 확인하려는 경우 사용 사례에 가장 많이 사용됩니다.
예를 들어, macOS 디바이스에서 확대/축소 서비스가 로드되지 않도록 하려면 여기에 us.zoom.ZoomDaemon을 서비스 값으로 추가하면 확대/축소가 실행되고 있지 않은지 또는 설치되지 않았는지 확인할 수 있습니다.
제거할 수 없는 서비스가 있으며 해당 속성 목록이 정의되어 있습니다.
예를 들어 이 명령을 사용하면 dhcp6d plist가 정의되어 있음을 확인할 수 있습니다.
ls -ltr /System/Library/LaunchDaemons | grep com.apple.dhcp6d.plist
서비스 목록을 검사하면 로드되지 않았음을 확인할 수 있습니다.
sudo grep -B 10 -A 10 -E "^\s*state = " << "$(launchctl dumpstate)" | grep -aiE "\/.*= {" | sed '|.*/||;s| = {$||' | grep -i com.apple.dhcp6d
sudo launchctl 목록 | awk '{if (NR>1) print $3}' | grep -i com.apple.dhcp6d
값을 com.apple.dhcp6d"로 설정하면 서비스 plist가 정의되어 있지만 서비스가 로드되지 않으므로 macOS 디바이스가 규정을 준수합니다.
로드 및 실행 중
모든 서비스가 실행 중인 것은 아니며, 각 서비스에 대해 여러 상태(예: running, not running, waiting, exited, uninitialized 등)가 있습니다.
실행 중인 모든 서비스를 확인하려면 다음 명령을 사용합니다.
sudo grep -B 10 -A 10 -E "^\s*state = running" << "$(launchctl dumpstate)" | grep -aiE "\/.*= {" | sed '|.*/||;s| = {$||'
위의 명령과 함께 나열된 서비스가 로드됨 및 실행 중인 서비스 운영자 조건을 적중했습니다.
종료 코드와 함께 로드됨
일부 서비스는 예상되거나 예상치 못한 종료 코드로 종료될 수 있습니다. 이러한 서비스는 다음 명령을 사용하여 나열할 수 있습니다.
sudo grep -B 10 -A 10 "state = e" << "$(launchctl dumpstate)" | grep -aiE "\/.*= {" | sed 's/.\{3\}$/'
종료 코드를 확인하려면 임의의 서비스를 선택하고 다음 명령을 사용할 수 있습니다.
sudo launchctl print { Your launchctl service name } | grep -i '마지막 종료 코드'
예를 들면 다음과 같습니다.
sudo launchctl print gui/501/com.apple.mdmclient.agent | grep -i '마지막 종료 코드'
마지막 종료 코드 = 0
참고: 여기서, 출구 코드 0은 일반적으로 모든 것이 서비스에 의해 정확하게 이루어졌다는 것을 의미한다. 컴퓨터가 종료 코드로 0과 일치하지 않으면 서비스가 예상한 작업을 수행하지 않은 것입니다.
로드 및 실행 중 또는 종료 코드 포함
이 마지막 옵션은 서비스가 로드되어 실행 중이거나 종료 코드로 로드되었을 때 작동합니다.
이 그림에서는 macOS 서비스 조건의 예를 보여 줍니다.

참고: 현재 정확한 서비스 이름만 지원됩니다. 서비스 이름에 와일드카드를 지원하기 위한 개선 요청, Cisco 버그 ID CSCwf가 있습니다01373
해당 조건에 대한 요구 사항 및 상태 정책 구성
조건이 구성되면 해당 조건에 대한 요구 사항을 만들어야 합니다. 이 요구 사항에 대해 Message Test Only 옵션을 사용합니다.
ISE > Work Centers(작업 센터) > Posture(포스처) > Requirements(요건)로 이동하여 생성합니다.
참고: 서비스 조건에 대한 교정 옵션은 없습니다.

이 완료 한 후, 마지막 단계는 생성 된 요구 사항을 사 항목으로 상태 정책을 구성 하는 것 입니다.
ISE > Work Centers(작업 센터) > Posture(포스처) > Posture Policy(포스처 정책)로 이동하여 정책을 생성합니다.
새 정책을 활성화하고, 원하는 대로 이름을 지정하고, 방금 생성한 요구 사항을 선택합니다.

다음을 확인합니다.
Cisco Secure Client GUI 자체에서 macOS 포스처 조건이 통과 또는 실패했는지 확인할 수 있습니다.

또한 ISE에서 ISE Posture Report(ISE > Operations(운영) > Reports(보고서) > Reports(보고서) > Endpoints and Users(엔드포인트 및 사용자) > Posture Assessment by Endpoint(엔드포인트별 포스처 평가)를 확인할 수 있습니다.

문제 해결
이 macOS 서비스 상태 조건을 구성하는 동안 발생할 수 있는 일반적인 문제는 다음과 같습니다.
인증서를 신뢰할 수 없음

앞서 설명한 것처럼 서비스 조건에는 높은 권한이 필요합니다. Posture Scan 프로세스용 인증서는 서버에서 신뢰해야 합니다.
그렇지 않으면 다음 오류가 발생합니다.

ISE Posture 모듈은 IP 주소 또는 FQDN(Fully Qualified Domain Name)을 기준으로 PSN 서버를 검색합니다. 모범 사례는 FQDN을 통해 ISE 노드를 검색하는 포스처 컨피그레이션 파일을 사용하는 것입니다. 따라서 관리 및 포털(클라이언트 프로비저닝 포털) 인증서는 CN 필드 또는 SAN 필드에 FQDN을 포함해야 합니다. 와일드카드 인증서를 이 흐름에 사용 할 수 있습니다. 와일드카드 인증서는 이 흐름에 대해 지원 됩니다.
시스템 증권으로 인해 향후 CN 필드를 신뢰할 수 없습니다. 모범 사례로서 SAN 필드에 와일드카드 항목 또는 FQDN을 포함합니다.
ISE PSN이 FQDN 대신 IP 주소를 통해 검색되는 경우 노드의 IP 주소가 관리 및 포털 사용에 연결된 인증서의 CN 필드 또는 SAN 필드에 포함되어야 합니다.
ISE Posture 모듈은 ISE 서버에서 제공하는 인증서를 신뢰합니다. 해당 CA가 macOS 키 체인 액세스의 시스템 인증서 저장소에 있는 경우, 이 CA는 When use this certificate(이 인증서를 사용할 때) Always Trust(항상 신뢰)로 설정되어야 합니다.

인증서가 올바르게 로드되고 모든 CN 및 SAN 요구 사항이 충족되더라도 macOS 시스템이 인증서를 신뢰하지 않는 잘못된 동작이 발생할 수 있습니다. 이러한 경우 Keychain 액세스 응용 프로그램을 열고 시스템 인증서 저장소 탭으로 이동한 다음 CA 인증서를 삭제합니다.
그런 다음 macOS 터미널 응용 프로그램으로 이동하여 다음 명령을 수행합니다. sudo /usr/bin/security add-trusted-cert -r trustRoot -d -k /Library/Keychains/System.keychain
{CA 인증서 경로}
예를 들어 인증서가 데스크톱에 있는 경우 명령은 다음과 같습니다. sudo /usr/bin/security add-trusted-cert -r trustRoot -d -k /Library/Keychains/System.keychain /Users/JohnDoe/Downloads/CA_certificate.crt
명령을 수행한 후 컴퓨터를 다시 시작하고 다시 시도하십시오.
Cisco Secure Client Scan 우회
"Cisco Secure Client Scan 우회" 및 "네트워크가 Cisco ISE Posture Agent를 사용하도록 구성되지 않음" 오류 메시지가 나타날 수도 있습니다.

이 메시지는 ISE > Work Centers(작업 센터) > Posture(포스처) > Client Provisioning(클라이언트 프로비저닝) > Client Provisioning Policies(클라이언트 프로비저닝 정책)의 클라이언트 프로비저닝에 구성된 프로파일이 없으므로 나타납니다.
Mac OSX 운영 체제에 대한 조건을 볼 수 있지만, 모든 macOS 버전을 적용 한다는 의미는 아닙니다.
기본적으로 ISE에는 Sequoia(15.6.x)와 같은 최신 macOS 버전이 포함되어 있지 않으므로 이러한 메시지를 방지하려면 해당 상태가 업데이트되어야 합니다.
ISE > Work Centers(작업 센터) > Posture(포스처) > Settings(설정) > Software Updates(소프트웨어 업데이트) > Posture Updates(포스처 업데이트)에서 포스처 피드를 업데이트해야 합니다.
ISE에서 직접 온라인으로 업데이트하거나, Posture Offline 사이트에서 다운로드할 수 있는 zip 파일을 통해 오프라인으로 업데이트할 수 있습니다
기타 문제
세부 정보를 보려면 포스처 macOS 디바이스에서 DART 번들을 수집할 수 있습니다. 이를 위해서는 DART 모듈이 설치되어 있어야 하며, Cisco Secure Client 애플리케이션이 활성화된 상태에서 메뉴 모음으로 이동하여 Cisco Secure Client를 클릭한 다음 진단 보고서 생성에서 를 클릭합니다.

참고: DART 번들을 생성할 때 Include System Logs(시스템 로그 포함) 옵션을 활성화해야 합니다. 그렇지 않으면 DART 번들에 ISE 상태 모듈 정보가 포함되지 않습니다.

보안상의 이유로 일부 로그는 암호화되어 표시되지 않을 수 있지만, DART 번들의 unified_log.log에는 다음과 같은 유사한 로그가 표시될 수 있습니다.
참고: 이 로그 예는 이 문서에 구성된 macOS 서비스 조건에 대한 것입니다.
[Tue Feb 27 10:30:58.576 2024][csc_iseposture]Function: createCheckXMLString Thread Id: 0x4A9FD7C0 File: Check.cpp Line: 417 Level: debug :: parsed Check string to: (
macOS-Service-Condition
3
303
com.apple.sysmond
running
0
)
[Tue Feb 27 10:30:58.576 2024][csc_iseagent]Function: processPostureData Thread Id: 0x4A9FD7C0 File: AuthInfo.cpp Line: 763 Level: debug :: Decrypted posture data, X-Perfigo-DM-Software-List =
ISE: 3.3.0.430
ISE: 2.x
0
30
macOS-Service-Requirement
macOS Service is non compliant
3
0
3
macOS-Service-Condition
3
303
com.apple.sysmond
running
0
(macOS-Service-Condition)
[Tue Feb 27 10:30:58.576 2024][csc_iseagent]Function: SMP_initCheck Thread Id: 0x4A9FD7C0 File: SMNavPosture.cpp Line: 682 Level: debug :: MSG_SP_START_CHK, {item:0,str:"
ISE: 3.3.0.430
ISE: 2.x
0
30
macOS-Service-Requirement
macOS Service is non compliant
3
0
3
macOS-Service-Condition
3
303
com.apple.sysmond
running
0
(macOS-Service-Condition)
",isElevationAllowed:1,nRemediationTimeLeft:0}
[Tue Feb 27 10:30:58.646 2024][csc_eliseposture]Function: createCheckXMLString Thread Id: 0x4A9FD7C0 File: Check.cpp Line: 417 Level: debug :: parsed Check string to: (
macOS-Service-Condition
3
303
com.apple.sysmond
running
0
)
[Tue Feb 27 10:30:58.646 2024][csc_eliseposture]Function: doCheck Thread Id: 0x4A9FD7C0 File: Rqmt.cpp Line: 279 Level: debug :: Checking rqmt, [macOS-Service-Requirement]:Mandatory
[Tue Feb 27 10:30:58.658 2024][csc_eliseposture]Function: doCheck Thread Id: 0x4A9FD7C0 File: CheckSvc.cpp Line: 87 Level: debug :: The agent com.apple.sysmond check had a result of : success. The requested checkType was: ctDaemonOrUserAgentStatus and opType was: cotRunning
[Tue Feb 27 10:30:58.658 2024][csc_eliseposture]Function: completeCheck Thread Id: 0x4A9FD7C0 File: Rqmt.cpp Line: 318 Level: debug :: check result of rqmt, [macOS-Service-Requirement]:PASSED
또한 엔드포인트를 인증하고 포스처를 제공하는 ISE PSN 노드의 디버그 로그 레벨에서 포스처 구성 요소를 설정할 수 있습니다.
ISE > Operations(운영) > Troubleshoot(문제 해결) > Debug Wizard(디버그 마법사) > Debug Log Configuration(디버그 로그 컨피그레이션)에서 이 로그 레벨을 구성할 수 있습니다. PSN 호스트 이름을 클릭하고 Posture 구성 요소 로그 레벨을 INFO에서 DEBUG로 변경합니다.
macOS 서비스 조건에 대해 동일한 예를 사용하면 ise-psc.log 내에서 유사한 로그를 볼 수 있습니다.
2024-02-27 10:30:58.658 DEBUG [https-jsse-nio-10.4.21.59-8443-exec-1][[]] cisco.cpm.posture.runtime.PostureHandlerImpl -::username:::- NAC agent xml
ISE: 3.3.0.430
ISE: 2.x
0
30
macOS-Service-Requirement
macOS Service is non compliant
3
0
3
macOS-Service-Condition
3
303
com.apple.sysmond
running
0
(macOS-Service-Condition)
2024-02-27 10:30:58.659 DEBUG [https-jsse-nio-10.4.21.59-8443-exec-1][[]] cisco.cpm.posture.util.StatusUtil -::username:::- StatusUtil - getPosturePolicyHTML [
ISE: 3.3.0.430
ISE: 2.x
0
30
macOS-Service-Requirement
macOS Service is non compliant
3
0
3
macOS-Service-Condition
3
303
com.apple.sysmond
running
0
(macOS-Service-Condition)
]
2024-02-27 10:31:06.044 DEBUG [https-jsse-nio-10.4.21.59-8443-exec-8][[]] cisco.cpm.posture.util.AgentUtil -::username:::- Increase MnT counter at POSTURE:Posture.Requirement.Success.macOS-Service-Requirement
문제가 계속되면 Cisco 팀에 TAC 티켓을 요청하십시오.