2012-03-12 1 views
1

이상한 제목, 알아요. 내가 진정으로 묻는 것은 "NSBundles를위한 TrustedBSD MAC 프레임 워크 또는 iOS 샌드 박스를 만들 수 있습니까?" 모듈을 언제든지 "스위치 보드"에 "플러그 인 (plugged in)"또는 "연결 해제 (unplugged)"할 수있는 매우 동적 인 응용 프로그램이 있습니다. 운영하는 사용자가 다른 컴퓨터에 있거나 멀리 떨어진 곳에 있습니다. 사용자가 스위치 보드 모듈이 어떻게 호환 될 수 있는지 알 수있는 방법이 없으며 부재시 시스템을 파손시키지 않아도됩니다. iOS 샌드 박스 및 TrustedBSD (Lion의 Seatbelt.framework)가 프로세스에서이 작업을 수행 할 수 있지만 번들 코드로이 작업을 수행하려면 어떻게해야합니까? 모든 POSIX 통화 및 ObjC 메시징 (바이너리,이 시점에서 .... 코드를 바이너리 아니기 때문에 불가능한 것)의목표 -C에서 NSBundle 샌드 박싱

정적 바이너리 분석 :

것들 나는 생각했습니다.

런타임에 ObjC 메시지를 추적하고 로깅하여 단일 이탈 호출 후에 모듈을 잠급니다. (이것은 POSIX 호출이나 C 호출, 어셈블리에 영향을 미치지 않으며 최소한 하나의 호출이 이미 전송 된 것입니다).

가 XPC와로드 모듈을 사용하여 샌드 박스 외부 프로세스를 만들고 그 과정 노선 스위치를 호출에 PDO를 사용 (매우 드리겠습니다,하지만 난 여기에 스노우 레오파드의 호환성이 필요합니다).

어떤 아이디어? 한 번로드 된 번들이 애플리케이션의 PART로 끝나기 때문에 보안 구현시 더 많은 문제가 추가된다는 것을 알고 있습니다.

답변

1

번들을 프로세스에로드하면 즉시 제어 할 수 있습니다. 당신의 과정. (번들은 함수를 호출하기도 전에 초기화시 실행되는 코드를 포함 할 수 있기 때문입니다.)

악의적 인 번들은 단순히 메시지 추적을 담당하는 코드를 비활성화 할 수 있기 때문에 런타임에 메시지를 추적하는 것은 의미가 없습니다. 그것은 발화한다. (그것은 결국 같은 메모리 공간에서 실행중인, 그리고이 일을 어떤 ObjC 메시지를 사용하지 않아도된다.) 한마디로

: 당신이 신뢰하지 않는 번들을로드하지 않습니다. 신뢰할 수없는 번들을 사용해야하는 경우 (XPC이든 다른 것이 든) 샌드 박스 형태를 사용하십시오.

+0

저는 이것을 완전히 이해합니다. 이것이 제가 묻는 이유입니다. 이것을 할 수 있습니까? (이미 많은 PDO 실행 파일을 가지고 있으므로 XPC 또는 PDO를 피하기 위해 열심히 노력하고 있습니다.) –