개발자로서 주요 목표 중 하나는 높은 수준의 보안을 유지하면서 생산성을 높이는 것입니다. 컨테이너화 및 마이크로서비스의 등장으로 세분화된 보안 정책의 필요성이 증가했습니다. 이번 블로그 포스트에서는 리눅스 커널에 MACK(Mandatory Access Control Kernel)을 적용하여 보안과 생산성을 높일 수 있는 방법에 대해 알아보겠습니다.
먼저 Security MACK이 무엇인지에 대해서는 이 전 포스팅에서 자세히 다뤘으니 참고해 보세요.
참고로 MACK은 확장성과 성능에 중점을 둔 Linux용으로 설계된 비교적 새로운 MAC 구현입니다. 각 프로세스가 자체 도메인에서 실행되고 리소스에 대한 액세스를 정의하는 일련의 규칙이 있는 도메인 분리 원칙을 기반으로 합니다.
MACK 설치
MACK을 Linux 커널에 적용하기 전에 설치해야 합니다. MACK은 Linux 커널에 포함되어 있지 않으므로 별도로 다운로드하여 빌드해야 합니다.
1단계: 공식 GitHub 리포지토리에서 MACK 소스 코드를 다운로드합니다.
$ git clone https://github.com/nsmfoo/mack.git
2단계: 디렉터리를 MACK 소스 코드로 변경합니다.
$ cd mack
3단계: MACK 빌드 및 설치:
$ make
$ sudo make install
MACK 구성
MACK이 설치되면 액세스 제어 정책을 적용하도록 구성해야 합니다. MACK은 정책 파일을 사용하여 액세스 제어 규칙을 정의합니다. 정책 파일은 PDL(Policy Description Language)이라는 언어로 작성됩니다.
MACK 정책 파일은 /etc/mack/policy 디렉토리에 저장됩니다. 기본 정책 파일은 policy.pdl입니다. 이 파일을 편집하여 액세스 제어 정책을 정의할 수 있습니다.
정책 파일은 각각 다른 유형의 정책을 정의하는 섹션으로 나뉩니다. 예를 들어 주제 섹션은 주제(프로세스)에 대한 정책을 정의하고 개체 섹션은 개체(파일, 디렉터리 등)에 대한 정책을 정의합니다.
다음은 포트 80에서 실행되는 웹 서버에 대한 정책을 정의하는 예제 정책 파일입니다.
subject {
type httpd_t;
class tcp_socket {
permission { getattr bind };
}
}
object {
type httpd_content_t;
class file {
permission { read open };
}
class dir {
permission { read search };
}
}
netif {
domain eth0;
}
이 정책 파일에서 웹 서버 프로세스를 나타내는 httpd_t라는 주제 유형을 정의합니다. 또한 웹 서버 프로세스가 액세스할 수 있는 파일 및 디렉토리를 나타내는 httpd_content_t라는 객체 유형을 정의합니다.
그런 다음 주제 및 객체 유형에 대한 액세스 제어 정책을 정의합니다. 예를 들어 httpd_t 프로세스가 TCP 소켓에 바인딩하고 httpd_content_t 유형의 파일과 디렉토리를 읽고 열 수 있도록 허용합니다.
마지막으로 웹 서버가 사용할 수 있는 네트워크 인터페이스(이 경우 eth0)를 정의합니다.
MACK 적용
MACK 정책 파일이 구성되면 이를 Linux 커널에 적용해야 합니다. 이를 위해 mackload 명령을 사용합니다.
$ sudo mackload /etc/mack/policy/policy.pdl
이 명령어는 MACK 정책을 Linux 커널에 입력하고 실행 중인 시스템에서 적용합니다. 커널 로그를 확인하여 MACK이 실행 중인지 확인할 수 있습니다.
$ dmesg | grep MACK
이 명령은 MACK이 로드되어 실행 중임을 나타내는 줄을 출력해야 합니다.
MACK 테스트
MACK을 테스트하기 위해 Apache를 사용하여 간단한 웹 서버를 만들고 웹 서버 루트 디렉터리 외부의 파일에 액세스할 수 있습니다. 기본적으로 Apache는 MACK 정책 파일에서 정의한 주제 유형인 httpd_t 유형으로 실행됩니다.
먼저 Apache를 설치해야 합니다.
$ sudo apt-get install apache2
다음으로 Apache 웹 서버 루트 디렉터리 외부에 테스트 파일을 만들어야 합니다.
$ sudo echo "This is a test file." > /tmp/test.txt
마지막으로 웹 서버에서 테스트 파일에 액세스할 수 있습니다.
$ curl http://localhost/test.txt
MACK이 올바르게 작동하면 httpd_t 프로세스가 httpd_content_t 유형 외부의 파일에 액세스할 수 없음을 나타내는 "권한 거부" 오류가 발생합니다.
정리
이 블로그 게시물에서는 Linux 커널에 MACK을 적용하여 보안과 생산성을 높이는 방법에 대해 논의했습니다. MACK은 확장성과 성능에 중점을 둔 Linux용으로 설계된 비교적 새로운 MAC 구현입니다. PDL(Policy Description Language)을 사용하여 액세스 제어 정책을 정의하면 미리 정의된 규칙 집합을 기반으로 리소스에 대한 액세스를 제한할 수 있습니다.
MACK을 설치하고 구성하기 위해 먼저 소스 코드를 다운로드하고 빌드한 다음 policy.pdl 파일에 정책을 정의했습니다. 정책이 정의되면 mackload 명령을 사용하여 Linux 커널에 정책을 적용했습니다.
또한 Apache를 사용하여 간단한 웹 서버를 만들고 웹 서버 루트 디렉터리 외부의 파일에 액세스하여 MACK을 테스트했습니다. MACK이 올바르게 작동하면 httpd_t 프로세스가 httpd_content_t 유형 외부의 파일에 액세스할 수 없음을 나타내는 "권한 거부" 오류가 발생합니다.
이 블로그의 다른 글 보기
'Security' 카테고리의 다른 글
INISAFE CrossWeb EX V3 확인 삭제 방법 (0) | 2023.04.12 |
---|---|
안드로이드 boot up 각 단계별 암호화 과정 (0) | 2023.03.13 |
SMACK 적용 후 테스트 방법 (0) | 2023.02.27 |
Android 소스 코드에서 SELinux 구성 방법 (0) | 2023.01.31 |
안드로이드 해킹 방지, SELinux 소스 코드 적용 방법 (0) | 2023.01.30 |
댓글