7.10. 런타임 모니터링을 위한 Keylime 구성
모니터링된 시스템의 상태가 올바른지 확인하려면 모니터링 대상 시스템에서 Keylime 에이전트가 실행되고 있어야 합니다.
Keylime 런타임 모니터링은 무결성 측정 아키텍처(IMA)를 사용하여 많은 수의 파일을 측정하기 때문에 시스템 성능에 큰 영향을 미칠 수 있습니다.
에이전트를 프로비저닝할 때 Keylime이 모니터링된 시스템으로 전송하는 파일을 정의할 수도 있습니다. Keylime은 에이전트로 전송된 파일을 암호화하고 에이전트의 시스템이 TPM 정책 및 IMA 허용 목록을 준수하는 경우에만 암호를 해독합니다.
Keylime에서 특정 파일의 변경 사항이나 특정 디렉터리 내에서 Keylime 제외 목록을 구성하도록 할 수 있습니다. 제외된 파일은 여전히 IMA에 의해 측정됩니다.
RHEL 9.3에 제공된 Keylime 버전 7.3.0에서 allowlist 및 excludelist는 Keylime 런타임 정책에 결합됩니다.
사전 요구 사항
Keylime 구성 요소가 구성된 시스템에 대한 네트워크 액세스 권한이 있어야 합니다.
- Verifier
- 자세한 내용은 7.2절. “패키지에서 Keylime verifier 배포”의 내용을 참조하십시오.
- Registrar
- 자세한 내용은 7.4절. “패키지에서 Keylime 등록 기관 배포”의 내용을 참조하십시오.
- 테넌트
- 자세한 내용은 7.8절. “패키지에서 Keylime 테넌트 배포”의 내용을 참조하십시오.
- agent
- 자세한 내용은 7.9절. “패키지에서 Keylime 에이전트 배포”의 내용을 참조하십시오.
절차
Keylime 에이전트가 구성되어 실행되는 모니터링 시스템에서 시스템의 현재 상태에서 허용 목록을 생성합니다.
/usr/share/keylime/scripts/create_allowlist.sh -o <allowlist.txt> -h sha256sum
# /usr/share/keylime/scripts/create_allowlist.sh -o <allowlist.txt> -h sha256sumCopy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;allowlist.txt>를 허용 목록의 파일 이름으로 바꿉니다.중요SHA-256 해시 함수를 사용합니다. SHA-1은 안전하지 않으며 RHEL 9에서 더 이상 사용되지 않습니다. 자세한 내용은 Red Hat Enterprise Linux 9에서 SHA-1 사용 중단 을 참조하십시오.
생성된 allowlist를
keylime_tenant유틸리티가 구성된 시스템에 복사합니다. 예를 들면 다음과 같습니다.scp <allowlist.txt> root@<tenant.ip>:/root/<allowlist.txt>
# scp <allowlist.txt> root@<tenant.ip>:/root/<allowlist.txt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 선택 사항: 테넌트 시스템에 파일을 생성하고 제외할 파일 및 디렉터리의 경로를 입력하여 Keylime 측정에서 제외된 파일 또는 디렉터리 목록을 정의할 수 있습니다. excludelist는 한 줄에 하나의 정규식을 사용하여 Python 정규식을 허용합니다. 특수 문자의 전체 목록은 docs.python.org에서 정규식 작업을 참조하십시오. 테넌트 시스템에 excludelist를 저장합니다.
allowlist 및 excludelist를 Keylime 런타임 정책에 결합합니다.
keylime_create_policy -a <allowlist.txt> -e <excludelist.txt> -o <policy.json>
# keylime_create_policy -a <allowlist.txt> -e <excludelist.txt> -o <policy.json>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Keylime 테넌트가 구성된 시스템에서
keylime_tenant유틸리티를 사용하여 에이전트를 프로비저닝합니다.keylime_tenant -c add -t <agent_ip> -u <agent_uuid> --runtime-policy <policy.json> --cert default
# keylime_tenant -c add -t <agent_ip> -u <agent_uuid> --runtime-policy <policy.json> --cert defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
&
lt;agent_ip>를 에이전트의 IP 주소로 바꿉니다. -
&
lt;agent_uuid>를 에이전트의 UUID로 바꿉니다. -
&
lt;policy.json>을 Keylime 런타임 정책 파일의 경로로 바꿉니다. --cert옵션을 사용하면 테넌트에서 지정된 디렉터리 또는 기본/var/lib/keylime/ca/디렉터리에 있는 CA 인증서 및 키를 사용하여 에이전트의 인증서를 생성하고 서명합니다. 디렉터리에 CA 인증서 및 키가 없는 경우 테넌트는/etc/keylime/ca.conf파일의 구성에 따라 자동으로 생성하고 지정된 디렉터리에 저장합니다. 그러면 테넌트에서 이러한 키와 인증서를 에이전트에 보냅니다.CA 인증서를 생성하거나 에이전트 인증서를 서명할 때 CA 개인 키에 액세스하기 위해 암호를 입력하라는 메시지가 표시될 수 있습니다.
키 저장소의 암호를 해독하려면 암호를 입력하십시오. .인증서를 사용하지 않으려면 대신
-f옵션을 사용하여 에이전트에 파일을 전달합니다. 에이전트를 프로비저닝하려면 빈 파일도 파일을 보내야 합니다.참고Keylime은 에이전트로 전송된 파일을 암호화하고 에이전트의 시스템이 TPM 정책 및 IMA 허용 목록을 준수하는 경우에만 암호를 해독합니다. 기본적으로 Keylime 압축 해제는
.zip파일을 전송했습니다.
예를 들어 다음 명령을 사용하여
keylime_tenant는127.0.0.1에 UUIDd432fbb3-d2f1-4a97-9ef7-75bd81c00000을 사용하여 새 Keylime 에이전트를 프로비저닝하고 런타임 정책정책.json을 로드합니다. 또한 기본 디렉터리에 인증서를 생성하고 에이전트로 인증서 파일을 보냅니다. Keylime는/etc/keylime/verifier.conf에 구성된 TPM 정책이 충족되는 경우에만 파일의 암호를 해독합니다.keylime_tenant -c add -t 127.0.0.1 -u d432fbb3-d2f1-4a97-9ef7-75bd81c00000 --runtime-policy policy.json --cert default
# keylime_tenant -c add -t 127.0.0.1 -u d432fbb3-d2f1-4a97-9ef7-75bd81c00000 --runtime-policy policy.json --cert defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고# keylime_tenant -c delete -u < agent_uuid> 명령을 사용하여 노드 모니터링에서 Keylime을 중지할 수 있습니다.keylime_tenant -c update명령을 사용하여 이미 등록된 에이전트의 구성을 수정할 수 있습니다.-
&
검증
- 선택 사항: 모니터링된 시스템을 재부팅하여 설정이 지속되는지 확인합니다.
에이전트가 성공적으로 검증되었는지 확인합니다.
keylime_tenant -c cvstatus -u <agent.uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...# keylime_tenant -c cvstatus -u <agent.uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;agent.uuid>를 에이전트의 UUID로 바꿉니다.operational_state값이Get Quote이고attestation_count가 0이 아닌 경우 이 에이전트의 인증이 성공적으로 수행됩니다.operational_state값이Invalid Quote또는Failedattestation에 실패하면 명령과 유사한 출력이 표시됩니다.{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 테스트에 실패하면 검증기 로그에 세부 정보를 표시합니다.
journalctl -u keylime_verifier keylime.tpm - INFO - Checking IMA measurement list... keylime.ima - WARNING - File not found in allowlist: /root/bad-script.sh keylime.ima - ERROR - IMA ERRORS: template-hash 0 fnf 1 hash 0 good 781 keylime.cloudverifier - WARNING - agent D432FBB3-D2F1-4A97-9EF7-75BD81C00000 failed, stopping polling
# journalctl -u keylime_verifier keylime.tpm - INFO - Checking IMA measurement list... keylime.ima - WARNING - File not found in allowlist: /root/bad-script.sh keylime.ima - ERROR - IMA ERRORS: template-hash 0 fnf 1 hash 0 good 781 keylime.cloudverifier - WARNING - agent D432FBB3-D2F1-4A97-9EF7-75BD81C00000 failed, stopping pollingCopy to Clipboard Copied! Toggle word wrap Toggle overflow