2009-07-09 5 views
10

OS X 10.5를 사용하고 있으며 응용 프로그램이 인터넷에 액세스하려고 시도하는지 감지하는 방법을 찾고 있습니다. 이 시점에서 내가 정의 할 일련의 규칙과 일치하는 경우 응용 프로그램을 차단하고 싶습니다.코코아 API (LittleSnitch API)를 통해 네트워크에 애플리케이션 액세스 차단?

ipfw 내가 알고있는 유닉스 명령은 특정 포트에 대한 액세스를 차단하는 데 사용할 수 있지만 모든 응용 프로그램에 영향을 미칩니다. 맨 페이지를 읽고 ipfw를 사용하여 액세스를 차단하는 방법을 보지 못했지만 특정 응용 프로그램으로 제한했습니다.

내 주요 문제는 네트워크에 대한 외부 액세스를 얻으려는 응용 프로그램을 탐지하는 데 있습니다. 프로그래밍 방식으로이 작업을 수행 할 수있는 방법이 있어야합니다. 일부 Mac OS X API 또는 Unix 명령을 사용하여 어떻게 수행 할 수 있습니까?

업데이트 : 는 기본적으로 나는 리틀 고자질이 무엇을하고 싶은,하지만 난 리틀 고자질을 좋아하지 않기 때문에 처음부터 자신을 쓰고 싶어요. API를 통해 애플리케이션 네트워크 샌드 박싱을 수행 할 수있는 방법과 Little Snitch가 정확히 어떤 작업을 수행 할 수 있는지 알고 싶습니다.

답변

9

나는 이것이 1 년 늦다는 것을 깨닫는다. 그러나 나는 비슷한 무엇인가를 파고 있었고, 내가 생각하는 대답을 발견했다. 바라기를 이것은 누군가 다른 사람을 도울 수 있기를 바랍니다.

Little Snitch는 시스템으로 들어오는 트래픽을 필터링하기 위해 Network Kernel Extensions을 사용하는 것처럼 보입니다. 나는 상자에 커널 확장을 설치 발견하여이를 확인했습니다

[~] kextstat 
... 
55 0 0x687000 0x2b000 0x2a000 at.obdev.nke.LittleSnitch (2.0.46) <7 6 5 4 2> 
... 

프로그래밍 다른 응용 프로그램에 대한 네트워크 액세스를 방지하려면,이 가장 좋은 것 같다. 그러나 다른 앱에서 네트워크 사용을 모니터링하려는 경우 libpcap과 같은 다른 옵션이 있습니다.

+0

그래, 일년 늦었 어. 안전 벨트가 답이 아닙니다. 이것은 내가 찾고 있었던 바로 그 것이다. 여기에 진드기와 +1이 있습니다 –

+0

Objective-C 또는 Swift 이외의 다른 언어, 예를 들어 C++ 또는 Rust로 커널 확장을 쓸 수 있습니까? – securecurve

2

OS X 10.5 (Leopard)를 타겟팅하는 경우 샌드 박스 API를 사용할 수 있습니다. sandbox_init은 아마도 시작하기에 좋은 장소 일 것입니다. kSBXProfileNoInternet 옵션을 사용하여 인터넷 액세스를 중지 할 수 있습니다.

또한 Seatbelt 확장을 사용하여보다 세분화 된 제어의 몇 가지 예를 제공합니다.

+0

감사합니다. 올바른 방향의 포인터입니다. –

1

Mac OS X 10.5의 응용 프로그램 방화벽은 비슷한 기능을하지만 현재 Apple에서는 특정 응용 프로그램이 개의 접속을 허용하거나 차단하도록 허용합니다. 이는 커널 확장을 통해 수행되며, 커널 확장은 데몬 /usr/libexec/ApplicationFirewall/socketfilterfw을 통해 제어되며 방화벽 기본 설정 창을 사용하여 구성됩니다.

0

죄송 합니다만,이 필요를 해결하기 위해 자신의 프로그램을 작성 하시겠습니까? 아니면 동일한 역할을 수행 할 프로그램이 이미 있는지 묻는 것입니다.

후자의 경우 Little Snitch가 정확히 묻는 것을 수행합니다. 어떤 응용 프로그램이 외부 인터넷에 액세스하려고하는지 알려주고 규칙 세트를 기반으로 액세스를 허용할지 또는 거부할지 여부에 대한 옵션을 제공합니다. 그것은 완전히 자동으로 아니지만.

+0

프로그래밍 방식으로 Mac OS X API 또는 Unix 명령을 사용하여이 작업을 수행 할 수 있는지 여부에 관계없이이를 수행 할 수있는 방법이 있어야합니다. --- 나는 그것이 그것을 아주 분명하게 만들었다 고 생각했다. –

+0

그래, 내가 당신을 위해 명확하게하기 위해 내 질문을 업데이 트했습니다 –

1

사용자 공간 프로세스가 사용자가 설명하는 것을 수행 할 수있는 방법은 없습니다. 루트로 실행되는 프로세스조차하지 않을 것입니다. 기억해 : 우리는 여기서 Windows를 실행하지 않습니다.그리고 그렇다고하더라도 코코아가 그것을지지 할 것이라고는 기대하지 않을 것입니다. Cocoa는 Mac OS X의 GUI 사용하기 쉬운 것입니다. 저급 시스템 개발을위한 것이 아닙니다.

설명하는 것을 수행하는 유일한 방법은 커널을 확장하는 것입니다. 이것이 Little Snitch의 기능입니다. 다른 영리한 방법이 있었다면, 리틀 녀석이 다르게했을 거라고 확신합니다. 커널 확장은 마음이 희미하지 않습니다. 커널 확장이 중단되면 전체 시스템 crashes이 발생합니다. 그래서 당신은 당신이하는 일을 잘 알고 있습니다.

사용자 공간에서 프로세스와 소켓에 대한 정보를 얻을 수는 있지만 Cocoa를 사용할 수는 없습니다. 응용 프로그램이 루트로 실행되지 않는 경우 사용자의 프로세스 만 가능합니다. Apple이 문서화하지 않은 libproc을 사용해야합니다. lsof이 어떻게되는지 알아 내야 할 것입니다. 그리고 당신은 여전히 ​​당신이 얻는 것을 함부로 변경할 수 없습니다.

리틀 스니치를 사용하는 것이 좋습니다. Little Snitch가 추가 한 오버 헤드는 조금 작기 때문에 차이는 느끼지 않을 것이라고 약속드립니다. 사용자 또는 소프트웨어가 결정할 때까지 소켓 연결을 보류합니다.

그래도 자신 만의 커널 확장 프로그램을 작성하고 싶다면 Apple의 The Network Kernel Extension Programming Guide이 필요합니다. "소켓 필터"섹션에서는 Little Snitch가 사용하는 인터페이스에 대해 설명합니다.