프리링크
prelink컴퓨팅에서 프리바인딩은 프리링크라고도 불리며 시작 전에 라이브러리 기호를 해결함으로써 애플리케이션 로드 시간을 최적화하는 방법입니다.
배경
대부분의 컴퓨터 프로그램은 외부 공유 라이브러리를 실행해야 하는 코드로 구성됩니다.이러한 라이브러리는 일반적으로 런타임에 로더에 의해 동적 링크라고 불리는 프로세스로 프로그램과 통합됩니다.
동적 링크는 코드 크기 및 관리에 장점이 있지만 단점도 있습니다.프로그램을 실행할 때마다 로더는 관련 라이브러리를 해결해야 합니다.라이브러리는 메모리 내에서 이동하기 때문에 해상도에 대한 성능 저하가 발생합니다.이 패널티는 해결이 필요한 라이브러리가 추가될 때마다 증가합니다.
프리링크는 라이브러리를 미리 해결함으로써 이 패널티를 줄입니다.그 후, 프리링크 후에 라이브러리가 변경되었을 경우에만 해결이 이루어집니다(예: 업그레이드 실행).
Mac OS
Mac OS는 실행 파일을 마하-O 파일 형식으로 저장합니다.
Mac OS X
Mac OS X는 시스템 소프트웨어 또는 특정 애플리케이션을 설치하는 "최적화" 단계에서 프리바인딩을 수행합니다.
프리바인딩은 Mac OS X 시리즈 내에서 여러 번 변경되었습니다.10.2 이전에는 프리바인딩은 설치 절차(앞서 설명한 "최적화" 단계) 중에만 수행되었습니다.10.2부터 10.3까지 OS는 어플리케이션 기동 시 프리바인딩을 체크하고 어플리케이션을 처음 실행할 때 프리바인드가 되어 후속 부팅이 빨라집니다.일부 OS 레벨의 인스톨에서는, 수동으로 실행할 수도 있습니다.10.4에서는 OS 라이브러리만 사전 바인딩되었습니다.10.5 이후 애플은 프리바인딩을 dyld 공유 캐시 [1]메커니즘으로 대체하여 OS 성능을 향상시켰습니다.
리눅스
Linux에서 프리링크는 ELF 바이너리용 Red Hat의 Jakub Jelynek에 의해 작성된 무료 프로그램인 프리링크 프로그램을 통해 이루어집니다.
성능 결과는 혼합되었지만[clarification needed] [2]KDE와 같이 라이브러리가 많은 시스템에 도움이 되는 것 같습니다.
프리링크 랜덤화
"-R" 옵션과 함께 실행하면 프리링크는 라이브러리가 로드되는 주소 베이스를 무작위로 선택합니다.이 옵션을 선택하면 주소가 시스템에 고유하기 때문에 libc 복귀 공격의 실행이 어려워집니다.프리링크가 이것을 실행하는 이유는 라이브러리용 주소 공간 레이아웃 랜덤화(ASLR)를 제공하는 커널 패실리티를 프리링크와 함께 사용할 수 없기 때문입니다.프리링크의 목적을 무시하고 다이내믹링커가 프로그램로드 시 재배치를 실행하도록 강제합니다.
전술한 바와 같이 프리링크 및 프로세스별 라이브러리 주소 랜덤화는 함께 사용할 수 없습니다.이 보안 강화를 완전히 삭제하지 않도록 하기 위해 프리링크는 자체 랜덤화를 제공합니다.단, 프리링크로 인한 일반적인 정보 유출에는 도움이 되지 않습니다.대상 시스템에서 특정 임의 파일을 읽을 수 있는 기능을 가진 공격자는 특권 데몬에서 라이브러리가 로드된 위치를 검색할 수 있습니다. 대부분의 경우 libc는 Return-to-libc 공격에 사용되는 가장 일반적인 라이브러리이기 때문에 libc로 충분합니다.
로컬 액세스 권한을 가진 공격자는 libc 등의 공유 라이브러리 파일을 읽음으로써 시스템상의 다른 모든 응용 프로그램에서 libc의 로드 주소를 검출할 수 있습니다.대부분의 프로그램은 libc에 링크되므로 libc 라이브러리 파일은 항상 읽을 수 있어야 합니다.로컬 액세스 권한을 가진 공격자는 보다 높은 특권 프로세스의 주소 공간에 대한 정보를 수집할 수 있습니다.로컬 액세스는 일반적으로 [citation needed]시스템상의 파일을 읽고 출력할 수 있는 CGI 스크립트를 사용할 수 있는 셸 계정 또는 웹 서버 계정을 통해 얻을 수 있습니다.CGI 스크립트의 취약성이 있는 경우 계정이 없는 공격자가 디렉토리 트래버설 취약성을 사용할 수 있습니다.
프리링크는 보통 2주에 한 번씩 정기적으로 실행되기 때문에 주어진 라이브러리의 주소는 시간이 지남에 따라 변경될 수 있습니다.prelink는 이미 프리링크된 라이브러리는 반드시 필요한 경우가 아니면 변경되지 않는 증분 모드에서 자주 사용됩니다.따라서 프리링크가 재실행될 때 라이브러리의 기본 주소는 변경되지 않을 수 있습니다.이것에 의해, 프리링크가 실행되고 있는 기간의 반감기를 취득한 주소가 표시됩니다.또한 새 버전의 라이브러리가 설치되면 주소가 변경됩니다.
Jakub Jelynek는 위치 독립 실행 파일(PIE)이 Red Hat Enterprise Linux 및 Fedora에서의 프리링크를 무시한다고 지적하고 보다 안전한 환경을 위해 네트워크 및 SUID 프로그램을 구축할 것을 권장합니다.
문제들
경우에 따라서는 프리링크로 인해 어플리케이션체크포인트 및 재시작 라이브러리에서 다음과 같은 문제가 발생할 수 있습니다.blcr
를 사용하는 다른 라이브러리(OpenMPI 등)도 있습니다.[3]blcr
내부적으로특히, 1 개의 호스트상에서 프로그램을 체크 포인트 해, 다른 호스트상에서 재기동하려고 하면, 호스트 고유의 라이브러리 메모리 주소의 [4][5][unreliable source?]랜덤화가 다르기 때문에, 재기동한 프로그램이 seg fault 와 함께 실패하는 일이 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Manual Page for update_prebinding". Apple Developer Connection. Apple Computer Inc.
- ^ Crasta, James (2004-05-17). "ELF Prelinking and what it can do for you". Retrieved 2006-05-10.
- ^ 모니터
- ^ "BLCR FAQ". Retrieved 2012-01-05.
- ^ Hursey, Josh (2011-12-29). "segfault when resuming on different host". OpenMPI Users (Mailing list). Retrieved 2012-01-05.
추가 정보
- Jelínek, Jakub (2004-03-04). "Prelink" (PDF). Draft 0.7. Retrieved 2006-07-14.
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말)
외부 링크
- Linux 관리 및 특권 명령 매뉴얼 : ELF 공유 라이브러리와 바이너리를 프리링크하여 기동 시간을 단축–
- 야쿠브 젤리넥 공식 발매
- Yocto Project 포크 사전 링크 교차
- Riis, Quintin (2008-06-15). "Speed up application load time in Ubuntu Linux Hardy Heron using prelink: HOWTO and benchmarks (mention in ubuntuforums/original link is dead)". Retrieved 2008-08-22.
- Jones, Stefan (2007-04-02). "Gentoo Linux Prelink Guide". Retrieved 2006-05-10.
- John Richard Moser (2006-07-05). "Prelink and Address Space Randomization". Retrieved 2006-07-13.