동적 라이브러리 "L"을로드하는 프로세스 "A"가 있다고 가정 해 보겠습니다."exec"기능에 대한 액세스를 비활성화 하시겠습니까?
Q : "L"내부 기능에 대한 "exec"기능에 대한 액세스를 비활성화하는 방법이 있습니까?
동적 라이브러리 "L"을로드하는 프로세스 "A"가 있다고 가정 해 보겠습니다."exec"기능에 대한 액세스를 비활성화 하시겠습니까?
Q : "L"내부 기능에 대한 "exec"기능에 대한 액세스를 비활성화하는 방법이 있습니까?
동적 라이브러리는 호출하는 응용 프로그램과 동일한 프로세스 공간을 공유하므로 확실히 쉽지 않습니다 (응용 프로그램에서이를 부정하지 않아도 가능하지는 않습니다). 라이브러리를 별도의 응용 프로그램으로 래핑 할 수 있다면 AppArmor 또는 SELinux가 도움이 될 수 있지만 일반적으로 신뢰할 수없는 라이브러리를 응용 프로그램에로드하는 이유는 무엇입니까?
Chromium이 샌드 박스를 처리하는 방법에 대한 유용한 정보가 있습니다.
사용자가 원하는 효과를 얻을 수있는 가능한 몇 가지 트릭이있을 수 있습니다 (예 : MMU를 사용하여 exec() 함수가 포함 된 C 라이브러리의 섹션을 실행 불가능으로 매핑).
동적 라이브러리는 사용자가 수행 할 수있는 것과 동일한 프로세스 공간 내에서 실행되기 때문에 라이브러리에서 실행 취소 할 수없는 라이브러리에 대해 영구적으로 비활성화 할 수 있습니다.
당신이 리눅스에 있다면, 당신은 다음을 수행 할 수
자신의 간부 버전() 원하는 (또는하지 않음) 일을 할 시스템() 및 하나 LD_PRELOAD를 구현 , 또는 RTLD_DEEPBIND를 dlopen()에 전달하십시오. 그러면 링커가 libc에서 제공하는 버전보다이 메소드의 사용자 버전을 선호하게됩니다.
@axa : 제가 질문하는 바로 그 이유는 Chromium과의 만남과 관련이 있습니다. Chrome의 확장 프로그램은 "exec"기능에 직접 액세스 할 수 없거나 최소한 길을 찾지 못했습니다. – jldupont
디자인에 대해서는 http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox를 참조하고 Chromium 's 코드에 대해서는 http://src.chromium.org/viewvc/chrome/trunk/src/sandbox/linux/suid/를 참조하십시오. 현재 샌드 박스. 이것은 미래에 SECCOMP 또는 SELinux 기반 샌드 박스로 대체 될 수 있습니다. – ephemient