4.4. Annobin 프로젝트


Annobin 프로젝트는 Watermark 사양 프로젝트의 구현입니다. 워터마크 사양 프로젝트는 속성을 결정하기 위해 Executable 및 Linkable Format (ELF) 오브젝트에 마커를 추가하려고 합니다. Annobin 프로젝트는 annobin 플러그인과 annock Cryostat 프로그램으로 구성됩니다.

annobin 플러그인은 GNU 컴파일러 컬렉션(GCC) 명령줄, 컴파일 상태 및 컴파일 프로세스를 스캔하고 ELF 노트를 생성합니다. ELF 노트는 바이너리가 빌드된 방법을 기록하고 보안 강화 검사를 수행하기 위한 annocheck 프로그램에 대한 정보를 제공합니다.

보안 강화 검사기는 annocheck 프로그램의 일부이며 기본적으로 활성화되어 있습니다. 바이너리 파일을 확인하여 프로그램이 필요한 보안 강화 옵션으로 빌드되었는지 여부를 확인하고 올바르게 컴파일되었는지 확인합니다. annocheck 는 ELF 오브젝트 파일의 디렉토리, 아카이브 및 RPM 패키지를 재귀적으로 검사할 수 있습니다.

참고

파일은 ELF 형식이어야 합니다. annocheck 는 다른 바이너리 파일 유형을 처리하지 않습니다.

다음 섹션에서는 다음을 수행하는 방법을 설명합니다.

  • annobin 플러그인 사용
  • annocheck 프로그램 사용
  • 중복 annobin 노트 제거

4.4.1. annobin 플러그인 사용

다음 섹션에서는 다음을 수행하는 방법을 설명합니다.

  • annobin 플러그인 활성화
  • annobin 플러그인에 옵션을 전달

4.4.1.1. annobin 플러그인 활성화

다음 섹션에서는 gccclang 을 통해 annobin 플러그인을 활성화하는 방법을 설명합니다.

프로세스

  • gccannobin 플러그인을 활성화하려면 다음을 사용합니다.

    $ gcc -fplugin=annobin
    • gccannobin 플러그인을 찾을 수 없는 경우 다음을 사용합니다.

      $ gcc -iplugindir=/path/to/directory/containing/annobin/

      /path/to/directory/containing/annobin/annobin 이 포함된 디렉토리의 절대 경로로 바꿉니다.

    • annobin 플러그인이 포함된 디렉터리를 찾으려면 다음을 사용합니다.

      $ gcc --print-file-name=plugin
  • clang 을 사용하여 annobin 플러그인을 활성화하려면 다음을 사용합니다.

    $ clang -fplugin=/path/to/directory/containing/annobin/

    /path/to/directory/containing/annobin/annobin 이 포함된 디렉토리의 절대 경로로 바꿉니다.

4.4.1.2. annobin 플러그인에 옵션 전달

다음 섹션에서는 gccclang 을 통해 annobin 플러그인에 옵션을 전달하는 방법을 설명합니다.

프로세스

  • gcc 를 사용하여 annobin 플러그인에 옵션을 전달하려면 다음을 사용합니다.

    $ gcc -fplugin=annobin -fplugin-arg-annobin-option file-name

    옵션을 annobin 명령줄 인수로 바꾸고 file-name 을 파일 이름으로 교체합니다.

    • 예를 들어 annobin 이 수행하는 작업에 대한 추가 세부 정보를 표시하려면 다음을 사용합니다.

      $ gcc -fplugin=annobin -fplugin-arg-annobin-verbose file-name

      file-name 을 파일 이름으로 교체합니다.

  • clang 을 사용하여 annobin 플러그인에 옵션을 전달하려면 다음을 사용합니다.

    $ clang -fplugin=/path/to/directory/containing/annobin/ -Xclang -plugin-arg-annobin -Xclang option file-name

    옵션을 annobin 명령줄 인수로 바꾸고 /path/to/directory/containing/annobin/annobin 이 포함된 디렉터리의 절대 경로로 바꿉니다.

    • 예를 들어 annobin 이 수행하는 작업에 대한 추가 세부 정보를 표시하려면 다음을 사용합니다.

      $ clang -fplugin=/usr/lib64/clang/10/lib/annobin.so -Xclang -plugin-arg-annobin -Xclang verbose file-name

      file-name 을 파일 이름으로 교체합니다.

4.4.2. annocheck 프로그램 사용

다음 섹션에서는 annocheck 를 사용하여 검사하는 방법을 설명합니다.

  • 파일
  • 디렉터리
  • RPM 패키지
  • annocheck 추가 도구
참고

ELF 오브젝트 파일의 디렉토리, 아카이브 및 RPM 패키지를 재귀적으로 검사합니다. 파일은 ELF 형식이어야 합니다. annocheck 는 다른 바이너리 파일 유형을 처리하지 않습니다.

4.4.2.1. annocheck를 사용하여 파일 검사

다음 섹션에서는 nocheck를 사용하여 ELF 파일을 검사하는 방법을 설명합니다.

프로세스

  • 파일을 검사하려면 다음을 사용합니다.

    $ annocheck file-name

    file-name 을 파일 이름으로 교체합니다.

    참고

    파일은 ELF 형식이어야 합니다. annocheck 는 다른 바이너리 파일 유형을 처리하지 않습니다. annocheck 는 ELF 오브젝트 파일이 포함된 정적 라이브러리를 처리합니다.

4.4.2.2. annocheck를 사용하여 디렉토리 검사

다음 섹션에서는 nocheck 를 사용하여 디렉터리에서 ELF 파일을 검사하는 방법을 설명합니다.

프로세스

  • 디렉터리를 스캔하려면 다음을 사용합니다.

    $ annocheck directory-name

    directory-name 을 디렉터리 이름으로 교체합니다. annocheck 는 디렉터리의 콘텐츠, 하위 디렉터리 및 디렉터리 내의 모든 아카이브 및 RPM 패키지를 자동으로 검사합니다.

    참고

    annocheck 는 ELF 파일만 찾습니다. 다른 파일 유형은 무시됩니다.

4.4.2.3. annocheck를 사용하여 RPM 패키지 검사

다음 섹션에서는 nocheck 를 사용하여 RPM 패키지에서 ELF 파일을 검사하는 방법을 설명합니다.

프로세스

  • RPM 패키지를 스캔하려면 다음을 사용합니다.

    $ annocheck rpm-package-name

    rpm-package-name 을 RPM 패키지 이름으로 교체합니다. annocheck 는 RPM 패키지 내의 모든 ELF 파일을 재귀적으로 검사합니다.

    참고

    annocheck 는 ELF 파일만 찾습니다. 다른 파일 유형은 무시됩니다.

  • 제공된 debug info RPM으로 RPM 패키지를 스캔하려면 다음을 사용합니다.

    $ annocheck rpm-package-name --debug-rpm debuginfo-rpm

    rpm-package-name 을 RPM 패키지 이름으로 바꾸고 debuginfo-rpm 을 바이너리 RPM과 연결된 디버그 정보 RPM 이름으로 교체합니다.

4.4.2.4. annocheck 추가 툴 사용

annocheck 에는 바이너리 파일을 검사하는 데 필요한 여러 툴이 포함되어 있습니다. 명령줄 옵션을 사용하여 이러한 도구를 활성화할 수 있습니다.

다음 섹션에서는 다음을 활성화하는 방법을 설명합니다.

  • 내장 도구
  • 참고 도구
  • 섹션 크기 도구

여러 툴을 동시에 활성화할 수 있습니다.

참고

강화 검사기는 기본적으로 활성화되어 있습니다.

4.4.2.4.1. 내장 툴 활성화

annocheck 내장 툴을 사용하여 바이너리 파일을 빌드한 컴파일러의 이름을 찾을 수 있습니다.

프로세스

  • 내장 툴을 활성화하려면 다음을 사용합니다.

    $ annocheck --enable-built-by

    기본 툴에 대한 자세한 내용은 --help 명령줄 옵션을 참조하십시오.

4.4.2.4.2. 노트 도구 활성화

annocheck 노트 도구를 사용하여 annobin 플러그인에서 생성한 바이너리 파일 내에 저장된 노트를 표시할 수 있습니다.

프로세스

  • 노트 도구를 활성화하려면 다음을 사용합니다.

    $ annocheck --enable-notes

    노트는 주소 범위별로 정렬된 순서로 표시됩니다. 노트 도구에 대한 자세한 내용은 --help 명령줄 옵션을 참조하십시오.

4.4.2.4.3. section-size 툴 활성화

annocheck 섹션 크기 툴을 사용하여 이름이 지정된 섹션의 크기를 표시할 수 있습니다.

프로세스

  • section-size 툴을 활성화하려면 다음을 사용합니다.

    $ annocheck --section-size=name

    name 을 named 섹션의 이름으로 바꿉니다. 출력은 특정 섹션으로 제한됩니다. 결국 누적 결과가 생성됩니다. 섹션 크기 도구에 대한 자세한 내용은 --help 명령줄 옵션을 참조하십시오.

4.4.2.4.4. 강화 검사 기본 사항

강화 검사기는 기본적으로 활성화되어 있습니다. --disable-hardened 명령줄 옵션을 사용하여 강화 검사기를 비활성화할 수 있습니다.

4.4.2.4.4.1. 강화 검사 옵션

annocheck 프로그램은 다음 옵션을 확인합니다.

  • 이제 -z 링커 옵션을 사용하여 lazy 바인딩이 비활성화됩니다.
  • 프로그램은 실행 가능한 메모리 영역에 스택이 없습니다.
  • GOT 테이블의 재배치는 읽기 전용으로 설정됩니다.
  • 프로그램 세그먼트에는 읽기, 쓰기 및 실행 권한 비트 세트가 3개 모두 없습니다.
  • 실행 가능한 코드에 대한 재배치는 없습니다.
  • 런타임에 공유 라이브러리를 찾는 runpath 정보에는 /usr에서 root로 지정된 디렉터리만 포함됩니다.
  • 이 프로그램은 annobin 노트를 사용하여 컴파일되었습니다.
  • 프로그램은 -fstack-protector-strong 옵션을 활성화하여 컴파일되었습니다.
  • 이 프로그램은 -D_FORTIFY_SOURCE=2 로 컴파일되었습니다.
  • 이 프로그램은 -D_GLIBCXX_ASSERTIONS 로 컴파일되었습니다.
  • 프로그램은 -fexceptions 가 활성화된 상태로 컴파일되었습니다.
  • 이 프로그램은 -fstack-clash-protection 을 활성화하여 컴파일되었습니다.
  • 이 프로그램은 -O2 이상에서 컴파일되었습니다.
  • 이 프로그램에는 쓰기 가능한 재할당이 없습니다.
  • 동적 실행 파일에는 동적 세그먼트가 있습니다.
  • 공유 라이브러리는 -fPIC 또는 -fPIE 로 컴파일되었습니다.
  • 동적 실행 파일은 -fPIE 로 컴파일되고 -pie 와 연결되어 있습니다.
  • 사용 가능한 경우 -fcf-protection=full 옵션이 사용되었습니다.
  • 사용 가능한 경우 -mbranch-protection 옵션이 사용됩니다.
  • 사용 가능한 경우 -mstackrealign 옵션이 사용됩니다.
4.4.2.4.4.2. 강화 검사기 비활성화

다음 섹션에서는 강화 검사기를 비활성화하는 방법을 설명합니다.

프로세스

  • 강화 검사기 없이 파일의 노트를 스캔하려면 다음을 사용합니다.

    $ annocheck --enable-notes --disable-hardened file-name

    file-name 을 파일 이름으로 교체합니다.

4.4.3. 중복 annobin 노트 제거

annobin 을 사용하면 바이너리 크기가 증가합니다. annobin으로 컴파일된 바이너리의 크기를 줄이기 위해 중복 annobin 노트를 제거할 수 있습니다. 중복 annobin 노트를 제거하려면 binutils 패키지의 일부인 objcopy 프로그램을 사용합니다.

프로세스

  • 중복 annobin 노트를 제거하려면 다음을 사용합니다.

    $ objcopy --merge-notes file-name

    file-name 을 파일 이름으로 교체합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동