[System Hardening] AppArmor를 사용하여 애플리케이션의 보안 강화하기

IMKUNYOUNG·2024년 6월 20일
0

CKS

목록 보기
40/70

AppArmor에 대해 알아보고, 이를 사용하여 애플리케이션의 보안을 강화하는 방법을 소개하겠습니다. 이전 글에서는 SECCOMP 프로필을 사용하여 Kubernetes에서 Pod의 시스템 호출을 제한하는 방법에 대해 알아보았습니다. SECCOMP는 시스템 호출을 제한하는 데 효과적이지만, 프로그램이 특정 파일이나 디렉터리에 접근하는 것을 제한하지는 못합니다. 이를 해결하기 위해 AppArmor를 사용할 수 있습니다.

AppArmor 소개

AppArmor는 프로그램을 제한된 자원 집합으로 격리하는 Linux 보안 모듈입니다. 대부분의 Linux 배포판에 기본적으로 설치되어 있으며, 이를 통해 애플리케이션의 공격 표면을 줄일 수 있습니다. AppArmor는 프로필을 통해 애플리케이션에 적용되며, 이 프로필은 애플리케이션이 사용할 수 있는 자원을 정의하는 간단한 텍스트 파일입니다.

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 프로필 작성하기

AppArmor 프로필은 애플리케이션이 사용할 수 있는 자원을 정의하는 파일로, Linux 기능, 네트워크 자원, 파일 자원 등을 포함합니다. 예를 들어, 파일 시스템 내 모든 파일 권한을 제한하는 프로필은 다음과 같이 작성할 수 있습니다.

예제 1: 파일 시스템에 대한 쓰기 제한

profile apparmor-deny-write flags=(attach_disconnected) {
    file,
    # Deny all file writes.
    deny /** w,
}

위의 프로필은 파일 시스템 내 모든 파일에 대한 쓰기를 거부합니다. 이는 전체 파일 시스템에 대한 모든 쓰기를 막는 것을 의미합니다.

예제 2: /proc 파일 시스템에 대한 쓰기 제한

profile apparmor-deny-proc-write flags=(attach_disconnected) {
	file,
    # Deny all file writes to /proc.
    deny /proc/** w,
}

위의 프로필은 /proc 파일 시스템 내 모든 파일에 대한 쓰기를 제한합니다.

예제 3: 루트 파일 시스템을 읽기 전용으로 마운트하는 것 제한

profile apparmor-deny-remount-root flags=(attach_disconnected) {
	# Deny remount readonly the root filesystem.
    deny mount options=(ro, remount) -> /,
}

위의 프로필은 루트 파일 시스템을 읽기 전용으로 다시 마운트하는 것을 제한합니다.

AppArmor 프로필 로드 및 상태 확인

AppArmor 프로필과 상태는 aa-status 도구를 사용하여 확인할 수 있습니다.

이 명령어를 사용하면 AppArmor 모듈과 현재 로드된 프로필의 수를 확인할 수 있습니다. 프로필은 세 가지 모드로 로드될 수 있습니다:

  1. 강제(enforce) 모드: AppArmor가 규칙을 애플리케이션에 대해 모니터링하고 강제합니다.
  2. 불평(complain) 모드: AppArmor가 애플리케이션이 작업을 수행하도록 허용하지만, 이벤트로 기록합니다.
  3. 무제한(unconfined) 모드: 애플리케이션이 모든 작업을 수행할 수 있도록 하며, AppArmor는 이를 이벤트로 기록하지 않습니다.

마무리

AppArmor는 SECCOMP와 달리 파일 시스엠 접근을 세밀하게 제어할 수 있어 더욱 강력한 보안 대책을 마련할 수 있습니다.

0개의 댓글