AppArmor에 대해 알아보고, 이를 사용하여 애플리케이션의 보안을 강화하는 방법을 소개하겠습니다. 이전 글에서는 SECCOMP 프로필을 사용하여 Kubernetes에서 Pod의 시스템 호출을 제한하는 방법에 대해 알아보았습니다. SECCOMP는 시스템 호출을 제한하는 데 효과적이지만, 프로그램이 특정 파일이나 디렉터리에 접근하는 것을 제한하지는 못합니다. 이를 해결하기 위해 AppArmor를 사용할 수 있습니다.
AppArmor는 프로그램을 제한된 자원 집합으로 격리하는 Linux 보안 모듈입니다. 대부분의 Linux 배포판에 기본적으로 설치되어 있으며, 이를 통해 애플리케이션의 공격 표면을 줄일 수 있습니다. AppArmor는 프로필을 통해 애플리케이션에 적용되며, 이 프로필은 애플리케이션이 사용할 수 있는 자원을 정의하는 간단한 텍스트 파일입니다.
AppArmor가 설치되고 실행 중인지 확인하려면 다음 명령어를 사용할 수 있습니다:
또한, AppArmor 커널 모듈이 로드되었는지 확인하려면 아래의 파일을 확인할 수 있습니다:
$ cat /sys/module/apparmor/parameters/enabled
Y
값이 Y 또는 yes이면 AppArmor 커널 모듈이 로드된 것입니다. 로드된 AppArmor 프로필은 다음 파일을 확인하여 검증할 수 있습니다:
$ cat /sys/kernel/security/apparmor/profiles
docker-default (enforce)
/usr/sbin/tcpdump (enforce)
/usr/sbin/ntpd (enforce)
/usr/lib/snapd/snap-confine (enforce)
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
(enforce)
/usr/lib/connman/scripts/dhclient-script (enforce)
/usr/lib/NetworkManager/nm-dhcp-helper (enforce)
/usr/lib/NetworkManager/nm-dhcp-client.action (enforce)
/sbin/dhclient (enforce)
man_groff (enforce)
man_filter (enforce)
/usr/bin/man (enforce)
AppArmor 프로필은 애플리케이션이 사용할 수 있는 자원을 정의하는 파일로, Linux 기능, 네트워크 자원, 파일 자원 등을 포함합니다. 예를 들어, 파일 시스템 내 모든 파일 권한을 제한하는 프로필은 다음과 같이 작성할 수 있습니다.
profile apparmor-deny-write flags=(attach_disconnected) {
file,
# Deny all file writes.
deny /** w,
}
위의 프로필은 파일 시스템 내 모든 파일에 대한 쓰기를 거부합니다. 이는 전체 파일 시스템에 대한 모든 쓰기를 막는 것을 의미합니다.
profile apparmor-deny-proc-write flags=(attach_disconnected) {
file,
# Deny all file writes to /proc.
deny /proc/** w,
}
위의 프로필은 /proc
파일 시스템 내 모든 파일에 대한 쓰기를 제한합니다.
profile apparmor-deny-remount-root flags=(attach_disconnected) {
# Deny remount readonly the root filesystem.
deny mount options=(ro, remount) -> /,
}
위의 프로필은 루트 파일 시스템을 읽기 전용으로 다시 마운트하는 것을 제한합니다.
AppArmor 프로필과 상태는 aa-status
도구를 사용하여 확인할 수 있습니다.
이 명령어를 사용하면 AppArmor 모듈과 현재 로드된 프로필의 수를 확인할 수 있습니다. 프로필은 세 가지 모드로 로드될 수 있습니다:
AppArmor는 SECCOMP와 달리 파일 시스엠 접근을 세밀하게 제어할 수 있어 더욱 강력한 보안 대책을 마련할 수 있습니다.