요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
Base·LSM conditions와 policy options
ima_policy:33-78func·mask·filesystem·identity 조건과 LSM subject·object labels를 사용하며 signature type, fs-verity digest, keyrings, template, PCR, critical-data label, accepted appraisal algorithms를 제한할 수 있습니다.
Default measure·appraise policy
ima_policy:80-124Default policy는 pseudo-filesystem magic을 제외하고 executable, executable mmap, root read, module, firmware를 측정하며 root-owned file을 appraise합니다.
LSM·PCR·modsig·keyring examples
ima_policy:126-157SELinux·Smack labels, alternate PCR, appended module signature, 모든 key 또는 지정 keyring만 측정하는 rule 예제를 제공합니다.
SETXATTR algorithms와 fs-verity sigv3
ima_policy:159-190SETXATTR_CHECK는 security.ima에 허용할 hash algorithms를 제한하고, digest_type=verity는 ima-ngv2·ima-sigv3 measurement와 sigv3 appraisal을 구성합니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
What: /sys/kernel/security/*/ima/policy
Date: May 2008
Contact: Mimi Zohar <zohar@us.ibm.com>
Description:
The Trusted Computing Group(TCG) runtime Integrity
Measurement Architecture(IMA) maintains a list of hash
values of executables and other sensitive system files
loaded into the run-time of this system. At runtime,
the policy can be constrained based on LSM specific data.
Policies are loaded into the securityfs file ima/policy
by opening the file, writing the rules one at a time and
then closing the file. The new policy takes effect after
the file ima/policy is closed.
IMA appraisal, if configured, uses these file measurements
for local measurement appraisal.
::
rule format: action [condition ...]
action: measure | dont_measure | appraise | dont_appraise |
audit | hash | dont_hash
condition:= base | lsm [option]
base: [[func=] [mask=] [fsmagic=] [fsuuid=] [fsname=]
[uid=] [euid=] [gid=] [egid=]
[fowner=] [fgroup=]]
lsm: [[subj_user=] [subj_role=] [subj_type=]
[obj_user=] [obj_role=] [obj_type=]]
option: [digest_type=] [template=] [permit_directio]
[appraise_type=] [appraise_flag=]
[appraise_algos=] [keyrings=]
base:
func:= [BPRM_CHECK][MMAP_CHECK][CREDS_CHECK][FILE_CHECK][MODULE_CHECK]
[FIRMWARE_CHECK]
[KEXEC_KERNEL_CHECK] [KEXEC_INITRAMFS_CHECK]
[KEXEC_CMDLINE] [KEY_CHECK] [CRITICAL_DATA]
[SETXATTR_CHECK][MMAP_CHECK_REQPROT]
mask:= [[^]MAY_READ] [[^]MAY_WRITE] [[^]MAY_APPEND]
[[^]MAY_EXEC]
fsmagic:= hex value
fsuuid:= file system UUID (e.g 8bcbe394-4f13-4144-be8e-5aa9ea2ce2f6)
uid:= decimal value
euid:= decimal value
gid:= decimal value
egid:= decimal value
fowner:= decimal value
fgroup:= decimal value
lsm: are LSM specific
option:
appraise_type:= [imasig] | [imasig|modsig] | [sigv3]
where 'imasig' is the original or the signature
format v2.
where 'modsig' is an appended signature,
where 'sigv3' is the signature format v3. (Currently
limited to fsverity digest based signatures
stored in security.ima xattr. Requires
specifying "digest_type=verity" first.)
appraise_flag:= [check_blacklist] (deprecated)
Setting the check_blacklist flag is no longer necessary.
All appraisal functions set it by default.
digest_type:= verity
Require fs-verity's file digest instead of the
regular IMA file hash.
keyrings:= list of keyrings
(eg, .builtin_trusted_keys|.ima). Only valid
when action is "measure" and func is KEY_CHECK.
template:= name of a defined IMA template type
(eg, ima-ng). Only valid when action is "measure".
pcr:= decimal value
label:= [selinux]|[kernel_info]|[data_label]
data_label:= a unique string used for grouping and limiting critical data.
For example, "selinux" to measure critical data for SELinux.
appraise_algos:= comma-separated list of hash algorithms
For example, "sha256,sha512" to only accept to appraise
files where the security.ima xattr was hashed with one
of these two algorithms.
default policy:
# PROC_SUPER_MAGIC
dont_measure fsmagic=0x9fa0
dont_appraise fsmagic=0x9fa0
# SYSFS_MAGIC
dont_measure fsmagic=0x62656572
dont_appraise fsmagic=0x62656572
# DEBUGFS_MAGIC
dont_measure fsmagic=0x64626720
dont_appraise fsmagic=0x64626720
# TMPFS_MAGIC
dont_measure fsmagic=0x01021994
dont_appraise fsmagic=0x01021994
# RAMFS_MAGIC
dont_appraise fsmagic=0x858458f6
# DEVPTS_SUPER_MAGIC
dont_measure fsmagic=0x1cd1
dont_appraise fsmagic=0x1cd1
# BINFMTFS_MAGIC
dont_measure fsmagic=0x42494e4d
dont_appraise fsmagic=0x42494e4d
# SECURITYFS_MAGIC
dont_measure fsmagic=0x73636673
dont_appraise fsmagic=0x73636673
# SELINUX_MAGIC
dont_measure fsmagic=0xf97cff8c
dont_appraise fsmagic=0xf97cff8c
# CGROUP_SUPER_MAGIC
dont_measure fsmagic=0x27e0eb
dont_appraise fsmagic=0x27e0eb
# NSFS_MAGIC
dont_measure fsmagic=0x6e736673
dont_appraise fsmagic=0x6e736673
measure func=BPRM_CHECK
measure func=FILE_MMAP mask=MAY_EXEC
measure func=FILE_CHECK mask=MAY_READ uid=0
measure func=MODULE_CHECK
measure func=FIRMWARE_CHECK
appraise fowner=0
The default policy measures all executables in bprm_check,
all files mmapped executable in file_mmap, and all files
open for read by root in do_filp_open. The default appraisal
policy appraises all files owned by root.
Examples of LSM specific definitions:
SELinux::
dont_measure obj_type=var_log_t
dont_appraise obj_type=var_log_t
dont_measure obj_type=auditd_log_t
dont_appraise obj_type=auditd_log_t
measure subj_user=system_u func=FILE_CHECK mask=MAY_READ
measure subj_role=system_r func=FILE_CHECK mask=MAY_READ
Smack::
measure subj_user=_ func=FILE_CHECK mask=MAY_READ
Example of measure rules using alternate PCRs::
measure func=KEXEC_KERNEL_CHECK pcr=4
measure func=KEXEC_INITRAMFS_CHECK pcr=5
Example of appraise rule allowing modsig appended signatures:
appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig|modsig
Example of measure rule using KEY_CHECK to measure all keys:
measure func=KEY_CHECK
Example of measure rule using KEY_CHECK to only measure
keys added to .builtin_trusted_keys or .ima keyring:
measure func=KEY_CHECK keyrings=.builtin_trusted_keys|.ima
Example of the special SETXATTR_CHECK appraise rule, that
restricts the hash algorithms allowed when writing to the
security.ima xattr of a file:
appraise func=SETXATTR_CHECK appraise_algos=sha256,sha384,sha512
Example of a 'measure' rule requiring fs-verity's digests
with indication of type of digest in the measurement list.
measure func=FILE_CHECK digest_type=verity \
template=ima-ngv2
Example of 'measure' and 'appraise' rules requiring fs-verity
signatures (format version 3) stored in security.ima xattr.
The 'measure' rule specifies the 'ima-sigv3' template option,
which includes the indication of type of digest and the file
signature in the measurement list.
measure func=BPRM_CHECK digest_type=verity \
template=ima-sigv3
The 'appraise' rule specifies the type and signature format
version (sigv3) required.
appraise func=BPRM_CHECK digest_type=verity \
appraise_type=sigv3
All of these policy rules could, for example, be constrained
either based on a filesystem's UUID (fsuuid) or based on LSM
labels.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
IMA policy load와 grammar
1-32| 항목 | 내용 |
|---|---|
| What | /sys/kernel/security/*/ima/policy |
| Date | 2008년 5월 |
| Contact | Mimi Zohar <zohar@us.ibm.com> |
TCG(Trusted Computing Group) runtime IMA(Integrity Measurement Architecture)는 이 system의 runtime에 load된 executable과 그 밖의 민감한 system file의 hash value 목록을 유지합니다. Runtime에는 LSM-specific data를 기준으로 policy를 제한할 수 있습니다.
Policy를 securityfs file ima/policy에 load하려면 file을 열고 rule을 한 번에 하나씩 쓴 뒤 file을 닫습니다. 새 policy는 ima/policy file을 닫은 뒤 발효됩니다.
IMA appraisal이 구성되어 있다면 local measurement appraisal에 이 file measurement를 사용합니다.
rule format: action [condition ...]
action: measure | dont_measure | appraise | dont_appraise |
audit | hash | dont_hash
condition:= base | lsm [option]
base: [[func=] [mask=] [fsmagic=] [fsuuid=] [fsname=]
[uid=] [euid=] [gid=] [egid=]
[fowner=] [fgroup=]]
lsm: [[subj_user=] [subj_role=] [subj_type=]
[obj_user=] [obj_role=] [obj_type=]]
option: [digest_type=] [template=] [permit_directio]
[appraise_type=] [appraise_flag=]
[appraise_algos=] [keyrings=]
Base·LSM condition과 option 정의
33-78func:= [BPRM_CHECK][MMAP_CHECK][CREDS_CHECK][FILE_CHECK][MODULE_CHECK]
[FIRMWARE_CHECK]
[KEXEC_KERNEL_CHECK] [KEXEC_INITRAMFS_CHECK]
[KEXEC_CMDLINE] [KEY_CHECK] [CRITICAL_DATA]
[SETXATTR_CHECK][MMAP_CHECK_REQPROT]
mask:= [[^]MAY_READ] [[^]MAY_WRITE] [[^]MAY_APPEND]
[[^]MAY_EXEC]
| Base field | 정의 |
|---|---|
| fsmagic | Hex value |
| fsuuid | File system UUID, 예: 8bcbe394-4f13-4144-be8e-5aa9ea2ce2f6 |
| uid | Decimal value |
| euid | Decimal value |
| gid | Decimal value |
| egid | Decimal value |
| fowner | Decimal value |
| fgroup | Decimal value |
| lsm | LSM-specific fields |
| Option | 전문 번역 |
|---|---|
| appraise_type | [imasig] | [imasig|modsig] | [sigv3]. imasig는 original signature 또는 signature format v2이고, modsig는 appended signature이며, sigv3는 signature format v3입니다. Sigv3는 현재 security.ima xattr에 저장된 fsverity digest 기반 signature로 제한되며 먼저 digest_type=verity를 지정해야 합니다. |
| appraise_flag | [check_blacklist], deprecated. check_blacklist flag 설정은 더는 필요하지 않으며 모든 appraisal function이 기본으로 설정합니다. |
| digest_type | verity. 일반 IMA file hash 대신 fs-verity file digest를 요구합니다. |
| keyrings | .builtin_trusted_keys|.ima 같은 keyring 목록입니다. Action이 measure이고 func가 KEY_CHECK일 때만 유효합니다. |
| template | ima-ng 같은 정의된 IMA template type 이름입니다. Action이 measure일 때만 유효합니다. |
| pcr | Decimal value |
| label | [selinux]|[kernel_info]|[data_label] |
| data_label | Critical data를 grouping하고 제한하는 데 쓰는 unique string입니다. 예를 들어 SELinux critical data를 측정하려면 selinux를 사용합니다. |
| appraise_algos | Comma-separated hash algorithm 목록입니다. 예를 들어 sha256,sha512는 security.ima xattr가 이 두 algorithm 중 하나로 hash된 file만 appraisal 대상으로 받아들입니다. |
Default IMA policy
80-124# PROC_SUPER_MAGIC
dont_measure fsmagic=0x9fa0
dont_appraise fsmagic=0x9fa0
# SYSFS_MAGIC
dont_measure fsmagic=0x62656572
dont_appraise fsmagic=0x62656572
# DEBUGFS_MAGIC
dont_measure fsmagic=0x64626720
dont_appraise fsmagic=0x64626720
# TMPFS_MAGIC
dont_measure fsmagic=0x01021994
dont_appraise fsmagic=0x01021994
# RAMFS_MAGIC
dont_appraise fsmagic=0x858458f6
# DEVPTS_SUPER_MAGIC
dont_measure fsmagic=0x1cd1
dont_appraise fsmagic=0x1cd1
# BINFMTFS_MAGIC
dont_measure fsmagic=0x42494e4d
dont_appraise fsmagic=0x42494e4d
# SECURITYFS_MAGIC
dont_measure fsmagic=0x73636673
dont_appraise fsmagic=0x73636673
# SELINUX_MAGIC
dont_measure fsmagic=0xf97cff8c
dont_appraise fsmagic=0xf97cff8c
# CGROUP_SUPER_MAGIC
dont_measure fsmagic=0x27e0eb
dont_appraise fsmagic=0x27e0eb
# NSFS_MAGIC
dont_measure fsmagic=0x6e736673
dont_appraise fsmagic=0x6e736673
measure func=BPRM_CHECK
measure func=FILE_MMAP mask=MAY_EXEC
measure func=FILE_CHECK mask=MAY_READ uid=0
measure func=MODULE_CHECK
measure func=FIRMWARE_CHECK
appraise fowner=0
Default policy는 bprm_check의 모든 executable, file_mmap에서 executable로 mmap한 모든 file, do_filp_open에서 root가 read용으로 연 모든 file을 측정합니다. Default appraisal policy는 root가 소유한 모든 file을 appraise합니다.
LSM·PCR·signature·key policy 예제
126-157LSM-specific definition의 SELinux 예:
dont_measure obj_type=var_log_t
dont_appraise obj_type=var_log_t
dont_measure obj_type=auditd_log_t
dont_appraise obj_type=auditd_log_t
measure subj_user=system_u func=FILE_CHECK mask=MAY_READ
measure subj_role=system_r func=FILE_CHECK mask=MAY_READ
Smack 예:
measure subj_user=_ func=FILE_CHECK mask=MAY_READ
Alternate PCR을 사용하는 measure rule 예:
measure func=KEXEC_KERNEL_CHECK pcr=4
measure func=KEXEC_INITRAMFS_CHECK pcr=5
Modsig appended signature를 허용하는 appraise rule 예:
appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig|modsig
KEY_CHECK로 모든 key를 측정하는 measure rule 예:
measure func=KEY_CHECK
KEY_CHECK로 .builtin_trusted_keys 또는 .ima keyring에 추가된 key만 측정하는 measure rule 예:
measure func=KEY_CHECK keyrings=.builtin_trusted_keys|.ima
SETXATTR_CHECK와 fs-verity policy
159-190File의 security.ima xattr에 쓸 때 허용할 hash algorithm을 제한하는 special SETXATTR_CHECK appraise rule 예:
appraise func=SETXATTR_CHECK appraise_algos=sha256,sha384,sha512
Measurement list에 digest type 표시를 포함하고 fs-verity digest를 요구하는 measure rule 예:
measure func=FILE_CHECK digest_type=verity \
template=ima-ngv2
Security.ima xattr에 저장된 fs-verity signature, 즉 format version 3을 요구하는 measure·appraise rule 예입니다. Measure rule은 digest type 표시와 file signature를 measurement list에 포함하는 ima-sigv3 template option을 지정합니다.
measure func=BPRM_CHECK digest_type=verity \
template=ima-sigv3
Appraise rule은 요구하는 type과 signature format version sigv3를 지정합니다.
appraise func=BPRM_CHECK digest_type=verity \
appraise_type=sigv3
이 모든 policy rule은 예를 들어 filesystem UUID(fsuuid) 또는 LSM label을 기준으로 추가 제한할 수 있습니다.
Policy는 open·여러 rule write·close transaction으로 교체되고 각 hook에서 action, condition, option을 평가한다.
Policy load transaction과 rule grammar
ima_policy:1-32ima/policy를 열고 rule을 한 줄씩 쓴 뒤 닫으면 새 policy가 발효됩니다. Action은 measure·dont_measure·appraise·dont_appraise·audit·hash·dont_hash이고 base·LSM condition과 option을 조합합니다.