vDSO

vDSO


vDSO(Virtual Dynamic Shared Object)는 사용자 공간 애플리케이션에 신중하게 선택된 커널 공간 루틴 집합을 내보내기 위한 커널 메커니즘으로, 애플리케이션이 이러한 커널 공간 루틴을 동일한 커널 모드로 호출할 때 고유한 모드 스위치의 성능 저하를 초래하지 않고 진행 중인 커널 공간 루틴으로 호출할 수 있도록 한다.시스템 호출 인터페이스를 통한 커널 공간 루틴.[1][2]

vDSO는 표준 실행 파일 및 연결 가능한 포맷(ELF) 형식과 같은 연결 및 로딩에 표준 메커니즘을 사용한다.[3][4] vDSO는 커널 기능을 일부 노출하는 사용자 공간에 할당된 메모리 영역이다. vDSO는 동적으로 할당되고 주소 공간 레이아웃 랜덤화를 통해 향상된 안전성을 제공하며 4개 이상의 시스템 호출을 지원한다.glibc와 같은 일부 C 표준 라이브러리는 커널이 vDSO를 지원하지 않을 경우 전통적인 syscall이 만들어지도록 vDSO 링크를 제공할 수 있다.[5] vDSO는 단순한 커널 루틴에 대한 호출 오버헤드를 줄이는 데 도움이 되며 IA-32와 같은 일부 컴퓨터 아키텍처에서 최상의 시스템 호출 방법을 선택하는 방법으로도 작동할 수 있다.[6]다른 방법보다 장점은 내보낸 루틴이 적절한 DEMANG(Debug With Incomated Record Format) 디버깅 정보를 제공할 수 있다는 것이다.구현은 일반적으로 vDSO를 찾기 위한 동적 링커의 후크를 의미한다.

vDSO는 시스템 호출이 4개만 가능한 정적으로 할당된 소량의 메모리와 각 프로세스에서 동일한 주소의 애플리케이션 바이너리 인터페이스(ABI)라는 한계를 극복하면서 vsyscall 기능을 제공하도록 개발되어 보안이 손상되었다.이 보안 문제는 가상 시스템 호출을 에뮬레이션하여 완화되었지만 에뮬레이션은 추가 대기 시간을 도입한다.[5]

참조

  1. ^ Enrico Perla; Massimiliano Oldani (16 December 2016). Kernel Hacking: Exploits verstehen, schreiben und abwehren: Schwachstellen in Kernel-Architekturen erkennen und Gegenmaßnahmen ergreifen (in German). Franzis Verlag. pp. 466–. ISBN 978-3-645-20503-0.
  2. ^ "vDSO - overview of the virtual ELF dynamic shared object". Canonical. Retrieved 10 December 2015.
  3. ^ "Creating a vDSO: the Colonel's Other Chicken". Linuxjournal.com. Retrieved 16 February 2015.
  4. ^ "On vsyscalls and the vDSO". Lwn.net. Retrieved 16 February 2015.
  5. ^ a b "Community answer to question "What are vDSO and vsyscall?"". Retrieved 19 November 2016.
  6. ^ "Anatomy of a system call, part 2". Lwn.net. Retrieved 19 November 2018.