본문 바로가기

IT for researcher/Security

Security Policy Enforcement in the OSGi Framework Using Aspect-Oriented Programming

원문 링크
Abstract

The lifecycle mismatch between vehicles and their IT system poses a problem for the automotive industry. Such systems need to be open and extensible to provide customised functionalities and services. What is less clear is how to achieve this with quality and security guarantees.
Recent studies in language-based security – the use of programming language technology to enforce application specific security policies – show that security policy enforcement mechanisms such as inlined reference monitors provide a potential solution for security in extensible systems.
In this paper we study the implementation of security policy enforcement using aspect-oriented programming for the OSGi (Open Services Gateway initiative) framework.
We identify classes of reference monitor-style policies that can be defined and enforced using AspectJ, a well-known aspect-oriented programming language. We demonstrate the use of security states to describe history-based policies. We also introduce and implement various levels of security
states in Java to describe session level history versus global application level history. We illustrate the effectiveness of the implementation by deploying the security policy enforcement solution in an example scenario of software downloading in a standard vehicle system.


요약.

차량과 IT 시스템사이의 라이프 사이클의 불인치는 자동차 산업의 문제로 자리 잡고 있다. 그러한 시스템들은 오픈되고 기능과 서비스들을 확장가능케 할 필요가 있다. 덜 명확한 것은 품질과 보안 보장을 어떻게 이루느냐이다.언어 기반 보안 분야의 최근 연구는 inlined reference monitor가 확장가능한 시스템에서 보안 해결책을 제공하는 것과 같이 보안 정책 강화 매커니즘 형태를 보여주고 있다. 이 논문에서 OSGi 프레임워크에서 AOP를 사용하여 보안 정책 강화 구현에 대해 기술한다. 우리는 AspectJ를 사용하여 정의되고 강화 될수 있는 reference monitor 형태의 정책 클래스들을 도출한다. history-based 정책을 기술하기 위하여 보안 상태를 사용하는 것을 보여준다. 또한 세션 레벨 히스토리와 전역 애플리케이션 레벨 히스토리를 기술하기 위하여
자바에서의 보안 상태의 다양한 레벨을 구현하고 소개한다. 차량 시스템에서 소프트웨어 다운로드 예를 가지고 보안 정책 강화 해결책이 효과를 보여준다.

1) Suppression : 수행중인 코드를 무시하고 수행~~

VehicleSystemalert alert함수 호출 시 현재 속대가 80이상이면 로그 남김 
1 import osgi .VehicleSystem ;
2 public aspect Suppression { 3 pointcut a l e r t M e s s a g e ( ) :
4      (c a l l (∗ VehicleSystem . a l e r t ( . . ) ) ) ;
5      void around ( ) : a l e r t M e s s a g e ( ){
6              i f ( VehicleSystem . speed ()>80){
7                     VehicleSystem . log ( " a l e r t message " +
8                                                   " during high speed " ) ;
9              }
10    }
11 }


2) Insertion : 실행전에 수행해야할 코드를 추가한다.

bundle start() 메소드 호출될 때 로그를 먼저 남기기 위한 코드.
1 import  osgi.*;
2 import  org.osgi.framework.BundleContext ;
3 import  org.osgi.framework .BundleActivator ;
4 import advice.BundleHandler ;
5 public aspect  BundleStart {
6     BundleHandler bundle ;
7     pointcut startBundle(BundleContext context) :
8     execution (∗ BundleActivator +. start( BundleContext ) )
9                                && args (context) ;
10    before ( BundleContext c o n t e x t ) : startBundle ( context){
11        bundle = new BundleHandler (context) ;
12        VechicleUtils .log ( ”A bundle s t a r t s ” ) ;
13    }
14 }


3) truncation : 진행을 중지~


1 before ( ) : c a l l (∗ VehicleBrake .brake ( . . ) ) {
2     VechicleUtils.log ( "The a p p l i c a t i o n  a t t e m p t s "+
3                             " t o  o p e r a t e  o p e r a t e s  t h e brake system ") ;
4     try{
5         bundle . s t o p ( ) ;
6     }    catch ( BundleException e ){}
7 }



4) Replacement : 다른 함수를 호출한다.

1 public aspect Replacement {
2     int around ( ) : ( c a l l (∗ send ( . . ) ) ) {
3         return securedSend ( ) ;
4     }
5 }


Dealing with History-Dependent Policies

이전 상태를 저장해서 이전상태 정보와 연관되게 정책을 처리.

세션 , 글로벌 정보를 각가 나눈다...   생략....

4. System Architecture and the Scenario
소프트웨어 자동 다운도르에 이를 적용하기 위해서.

AspectJ를 사용하면 재 컴파일을 해야한다. --> 시간적 비용들이 문제다. --> 중간에 신뢰할수 있는 서버를 두어  이서버에서 재컴파일하고 클라이언트에 전달하는 구조를 가짐.

Equinox Incubator Aspects project 에서 OSGi에서 AOP를 적용하는 것을 연구 하고 있음.