# 보안 레이어 활용

Yocto 프로젝트에서는 여러 레이어를 활용하여 보안 관련 기능을 추가하거나 강화할 수 있다. 보안 요구 사항에 따라 다양한 패키지와 설정을 레시피에 포함시켜 사용할 수 있으며, 이러한 보안 레이어는 시스템의 안전성을 높이는 데 매우 유용하다.

#### 보안 레이어란?

보안 레이어는 Yocto 프로젝트에서 특정한 보안 기능을 제공하는 여러 구성 요소나 패키지를 포함하는 레이어이다. 이 레이어는 이미 존재하는 메타 레이어에 통합되어 보안 기능을 시스템에 제공한다. 보안 레이어에는 다음과 같은 기능이 포함될 수 있다:

* 패키지 서명 및 검증
* 보안 강화된 커널 구성
* 암호화 모듈
* 침입 탐지 시스템
* 기타 보안 도구

#### 보안 레이어 설정 및 활용

보안 레이어를 활용하기 위해서는 해당 레이어를 Yocto 프로젝트에 추가하고 설정해야 한다. 일반적으로 아래와 같은 단계로 진행된다:

1. **보안 레이어 선택 및 다운로드**
   * Yocto 프로젝트는 다양한 보안 레이어를 지원하며, 각 레이어의 Git 리포지토리에서 해당 레이어를 다운로드할 수 있다.
   * 예: `meta-security`, `meta-selinux`
2. **Layer 설정**
   * `bblayers.conf` 파일을 열어 보안 레이어를 추가한다.

     ```conf
     BBLAYERS ?= " \
       /path/to/poky/meta \
       /path/to/meta-openembedded/meta-oe \
       /path/to/meta-security \
       "
     ```
3. **패키지 및 구성 추가**
   * 보안 패키지를 `local.conf` 파일이나 해당 이미지 레시피에 추가하여 빌드 과정에서 포함시킨다.

     ```conf
     IMAGE_INSTALL_append = " security-tools"
     ```
4. **구성 옵션 조정**
   * 보안과 관련된 구성 옵션을 수정하여 강화된 보안 설정을 적용한다.
     * 예: SELinux 구성, 커널 보안 설정 등
     * `local.conf` 파일에서 예:

       ```conf
       DISTRO_FEATURES_append = " selinux"
       ```

#### SELinux 구성

SELinux(Security-Enhanced Linux)는 보다 확장된 접근 제어(Enhanced Access Control)를 제공한다. Yocto 프로젝트에서 SELinux를 설정하는 방법은 다음과 같다:

1. **SELinux 레이어 추가**
   * `meta-selinux` 레이어를 다운로드하고 추가한다.
   * `bblayers.conf`에 해당 레이어를 포함시킨다.
2. **local.conf 수정**
   * SELinux 기능을 활성화하고 필요한 보안 정책을 설정한다.

     ```conf
     DISTRO_FEATURES_append = " pam selinux"
     PAM_PLUGINS ?= "libpam-runtime pam-plugin-audit pam-plugin-console pam-plugin-cracklib pam-plugin-deny pam-plugin-env pam-plugin-limits pam-plugin-mail pam-plugin-mount pam-plugin-nologin pam-plugin-permit pam-plugin-shells pam-plugin-su pam-plugin-tally pam-plugin-unix pam-shared"
     IMAGE_INSTALL_append = " libselinux libsemanage policycoreutils selinux-policy-targeted audit"
     ```
3. **커널 설정**
   * SELinux에 필요한 커널 옵션을 활성화한다. 커널 구성 파일 `.config`를 수정하거나 `defconfig` 파일을 사용하는 방법도 있다.

     ```conf
     CONFIG_SECURITY_SELINUX=y
     CONFIG_SECURITY_SELINUX_BOOTPARAM=y
     CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
     CONFIG_SECURITY_SELINUX_DEVELOP=y
     CONFIG_SECURITY_SELINUX_AVC_STATS=y
     CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
     ```

#### 패키지 서명 및 검증

패키지 서명 및 검증은 시스템의 무결성을 보장하는 중요한 요소이다. Yocto 프로젝트에서는 패키지를 서명하고 설치 과정에서 검증할 수 있다.

1. **패키지 서명**
   * OpenPGP와 같은 키를 사용하여 패키지의 무결성을 보장할 수 있다.
   * `local.conf` 파일에 필요한 설정을 추가한다.

     ```conf
     INHERIT += "sign_package_feed"
     ```
   * 자신의 GPG 키를 사용하여 서명하도록 `GPG_BIN`과 `GPG_SIGN_KEY` 변수를 설정한다.

     ```conf
     GPG_BIN = "/usr/bin/gpg"
     GPG_SIGN_KEY = "your-signing-key-id"
     ```
2. **패키지 검증**
   * 패키지 검증 설정을 통해 설치 과정에서 패키지의 무결성을 확인할 수 있다.

     ```conf
     PACKAGE_CLASSES = "package_rpm"
     SIGNING_KEY_FILE_EXTENSION = "ID"
     ```

#### 기타 보안 도구 및 구성

Yocto 프로젝트에서는 다양한 보안 도구와 설정을 통해 시스템 보안을 강화할 수 있다.

1. **AppArmor**
   * AppArmor는 프로그램의 권한을 제한하는 보안 프레임워크이다.
   * `meta-apparmor` 레이어를 추가하고 `bblayers.conf`에 포함시킨다.
   * `local.conf`에서 AppArmor를 활성화한다.

     ```conf
     DISTRO_FEATURES_append = " apparmor"
     IMAGE_INSTALL_append = " apparmor"
     ```
2. **Audit**
   * 시스템 이벤트를 기록하고 모니터링하는 데 사용된다.
   * `local.conf`에 `audit` 패키지를 추가한다.

     ```conf
     IMAGE_INSTALL_append = " audit"
     ```
3. **커널 보안 설정**
   * 커널 보안 설정을 통해 각종 보안 기능을 활성화할 수 있다.
   * `local.conf`에서 커널 보안 옵션을 설정한다.

     ```conf
     CONFIG_STRICT_DEVMEM=y
     CONFIG_NO_AUTO_INLINE=y
     CONFIG_FORTIFY_SOURCE=y
     ```

Yocto 프로젝트의 보안 레이어와 구성 옵션을 적절히 활용하면 시스템의 보안을 크게 강화할 수 있다. SELinux, AppArmor 같은 보안 프레임워크와 패키지 서명 및 검증 기능을 통해 무결성과 접근 제어를 구현할 수 있으며, Audit 도구를 활용하면 시스템 이벤트를 모니터링할 수 있다. 이러한 보안 기능을 적절히 조합하여 사용하면 각종 보안 위협에서 시스템을 보호할 수 있다.
