2012-07-06 4 views
7

저는 현재 학사 학위 논문을위한 매우 모듈화되고 플러그인 기반의 프레임 워크를 만들고 있습니다. 주요 아이디어는 응용 프로그램 구조 내에 plugins이라는 폴더가 있으며 특수 인터페이스 IPlugin을 준수하는 컴파일 된 플러그인 (예 : .dll- 파일)을 드롭 할 수 있다는 것입니다. 그런 다음 응용 프로그램은 사용자가 선택하는 플러그인을 사용하여 작업을 실행합니다. 따라서 PDF 파일에서 작업을 한 번 수행하고 싶다면 PdfPlugin을 선택하고 워드 문서에서 한 번만 작업하려면 DocPlugin을 선택하십시오.플러그인이 유해한 코드를 실행하는 것을 방지하는 방법

출력도 인터페이스에 정의되어 있으므로 모든 플러그인은 동일한 데이터 구조를 반환합니다. 실제 작업은 각 라이브러리마다 다릅니다.

이제 응용 프로그램이 인터페이스에 정의 된 메소드를 호출하기 만합니다. ParseDocument() 등, 제 3 자에 의해 개발 된 플러그인이 유해한 코드를 실행하는 것을 어떻게 막을 수 있습니까?

저는 .NET3.5 (아마도 4로 변경 될 예정이며 아직 결정되지 않았습니다)와 C#에서 작업 중입니다.

답변

8

내가 그 경우 .NET3.5

에서 일하고 있어요, 나는, 별도의 AppDomain에서 실행 Code Access Security를 사용하여 응용 프로그램 도메인의 권한 집합을 제한하기 위해 플러그인을 분리합니다. 이렇게하면 플러그인 어셈블리를 샌드 박싱합니다.

예를 들어 모든 관리되지 않는 코드 권한과 파일 IO 권한을 제거하면 플러그인에서 파일 시스템에 쓸 수 없습니다.

이것은 희미한 마음을 의미하지 않습니다. AppDomains는 일련 번호 지정, 개체 수명 정책 등을 사용하기가 까다로울 수 있으며 많은 배관을 필요로하므로 MAF을 사용할 수 있습니다.

+0

플러그인에서 원하는 코드 액세스 보안 권한을 쿼리 할 수 ​​있습니까? Android의 의도와 비교하여? 나는. 플러그인을로드하기 전에 사용자에게 확인 메시지를 표시 할 수 있도록 플러그인에서 요구하는 사용 권한을 결정할 수있는 플러그인 프레임 워크가 필요할 것입니다. 아니면 내 반대편 주위에, 내 응용 프로그램에서 사용 권한을 적용하는 다음 플러그 인 단순히 실패/허용 된 권한 외부에서 뭔가를 시도 할 예외를 던질? – AaronLS

+0

질문의 범위를 벗어나는 "방법"을 요구하지는 않지만, CAS의 두 가지 다른 접근 방식 중 어느 것이 적절한 지 궁금합니다. – AaronLS

0

나는이 분야에서 많은 연구가 이루어지고 있음을 알고있다. 하나의 작업 방식은 IL 코드를 검사하고 금지 된 메서드 서명을 찾는 것입니다. 그런 다음 오류 후크로 리디렉션하면 플러그인 vom이 추가 코드를 실행하는 것을 중지합니다.

예 : 카메라, 마이크 등의 액세스 방법에 대해 다운로드 한 앱에서 IL 코드를 검사 할 수있는 스마트 폰 보안이 강화되었습니다. 보안 응용 프로그램은 이러한 액세스 방법을 패치하고 응용 프로그램이 실제로 있어야하는지 사용자에게 묻습니다 마이크를 활성화 할 수 있습니다.

.NET을 사용하면 Mono.Cecil과 같은 IL 판독기를 사용하여 IL 코드에서 유해한 서명을 검사 할 수 있습니다. 그러나 코드를 동적으로 생성하거나 코드를 리소스로 저장하고 리소스에서 rumtime에로드 할 수 있기 때문에 항상이 문제를 해결할 수있는 방법이 있습니다. 개념 증명을 위해이 방법은 매우 쉽습니다.

FXCop 규칙을 작성하여 플러그인에서 금지 된 메소드 호출을 정적으로 검사 할 수도 있습니다.

+2

"일하는 접근법은 일리노이 코드를 검사하고 금지 된 방법 서명"을 찾는 것입니다. DLR, 반사 등의 동적 디스패치를 ​​통해 수행되는 메서드 호출은 어떻습니까? – vcsjones

+0

나는 이것을했다는 말은 아니다. 나는 연구자들이 그렇게했으며 언론 에코를 꽤 많이 얻었습니다 (스마트 폰 보안은 시원함). 나는 그들이 Stackoverflow 평균 방문자가 하드 코어 devs 아니라고 생각합니다. 아마도 그들은 자신의 생각이 좋은 아이디어인지에 대해 물어봤을 것입니다. –

-2

수 없습니다.

DLL은 호출 프로그램의 권한으로 실행되는 2 진 코드입니다. DLL의 메서드가 호출 될 때 DLL의 메서드를 제어 할 수 없습니다.

플러그인이 수행 할 수있는 것을 제한하려면 실행을 주 프로그램으로 이동해야합니다.이를 수행하는 좋은 방법은 바이너리 라이브러리 대신 프로그램에 의해 구문 분석되고 실행되는 스크립팅 언어로 플러그인을 구현하는 것입니다.

+0

* DLL은 .Net이 아닌 이진 코드 *입니다. – DaveShaw

+1

"할 수 없습니다." 그래 넌 할수있어. 이것이 바로 CAS가 설계 한 것입니다. .NET Framework는 가상 시스템이므로 런타임에 이러한 규칙을 적용 할 수 있습니다. – vcsjones

관련 문제