2009-12-07 5 views

답변

1

동적 라이브러리는 호출하는 응용 프로그램과 동일한 프로세스 공간을 공유하므로 확실히 쉽지 않습니다 (응용 프로그램에서이를 부정하지 않아도 가능하지는 않습니다). 라이브러리를 별도의 응용 프로그램으로 래핑 할 수 있다면 AppArmor 또는 SELinux가 도움이 될 수 있지만 일반적으로 신뢰할 수없는 라이브러리를 응용 프로그램에로드하는 이유는 무엇입니까?

Chromium이 샌드 박스를 처리하는 방법에 대한 유용한 정보가 있습니다.

+0

@axa : 제가 질문하는 바로 그 이유는 Chromium과의 만남과 관련이 있습니다. Chrome의 확장 프로그램은 "exec"기능에 직접 액세스 할 수 없거나 최소한 길을 찾지 못했습니다. – jldupont

+1

디자인에 대해서는 http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox를 참조하고 Chromium 's 코드에 대해서는 http://src.chromium.org/viewvc/chrome/trunk/src/sandbox/linux/suid/를 참조하십시오. 현재 샌드 박스. 이것은 미래에 SECCOMP 또는 SELinux 기반 샌드 박스로 대체 될 수 있습니다. – ephemient

0

사용자가 원하는 효과를 얻을 수있는 가능한 몇 가지 트릭이있을 수 있습니다 (예 : MMU를 사용하여 exec() 함수가 포함 된 C 라이브러리의 섹션을 실행 불가능으로 매핑).

동적 라이브러리는 사용자가 수행 할 수있는 것과 동일한 프로세스 공간 내에서 실행되기 때문에 라이브러리에서 실행 취소 할 수없는 라이브러리에 대해 영구적으로 비활성화 할 수 있습니다.

+0

@Aaron : 일부 기능을 원래 * libc *로 다시 리바 인딩 할 수 있습니까? – jldupont

+0

@jldupont - 그게 무슨 뜻인지 모르겠습니다. – Aaron

1

당신이 리눅스에 있다면, 당신은 다음을 수행 할 수

자신의 간부 버전() 원하는 (또는하지 않음) 일을 할 시스템() 및 하나 LD_PRELOAD를 구현 , 또는 RTLD_DEEPBIND를 dlopen()에 전달하십시오. 그러면 링커가 libc에서 제공하는 버전보다이 메소드의 사용자 버전을 선호하게됩니다.

+0

+1 : 매우 intesting ... 감사합니다! – jldupont

+3

라이브러리는 대체품을 무시하면서 베어스 syscall을 사용할 수 있습니다. – ephemient

+0

아주 사실 ...이 방법을 확실하게 만들 수있는 방법이 확실하지 않습니다 ... 커널 수정을 기꺼이하고자한다면 ... – dicroce

2

AppArmor을 사용하십시오. 응용 프로그램이 수행 할 수있는 작업을 구체적으로 줄일 수 있습니다. 어떤 파일을 읽고 쓸 수 있으며, 어떤 OS 기능을 호출 할 수 있으며, 사용할 수있는 네트워크 서비스는 무엇입니까?

설정하기가 약간 어렵지만 앱 요구를 실행하는 모든 작업을 기록하는 도구를 사용할 수 있습니다. 실행 후 출력을 확인하고 조금 수정 한 다음 사용할 수 있습니다.

+0

+1 : 재미 있습니다 ...하지만 나는 라이브러리 측면. – jldupont