SlideShare uma empresa Scribd logo
1 de 66
Baixar para ler offline
Building Secure 
OSGi Applications 
Karl Pauls 
Marcel Offermans 
luminis
luminis 
Who are we? 
• Karl Pauls 
• Marcel Offermans 
Arnhem Enschede 
image © 2008 Google Earth
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
luminis 
OSGi today 
OSGi technology is the dynamic module system 
for Java™ 
OSGi technology is Universal Middleware. 
OSGi technology provides a service-oriented, component-based 
environment for developers and offers standardized 
ways to manage the software lifecycle. These capabilities 
greatly increase the value of a wide range of computers 
and devices that use the Java™ platform.
luminis 
OSGi Specification 
OSGi Service Platform 
Service Compendium 
The OSGi Alliance 
Release 4, Version 4.1 
April 2007 
OSGi 
Alliance 
Digitally 
signed by 
OSGi Alliance 
DN: cn=OSGi 
Alliance, c=US 
Date: 
2007.02.22 
14:44:10 + 
01'00' 
Signatu 
re Not 
Verified 
OSGi Service Platform 
Core Specification 
The OSGi Alliance 
Release 4, Version 4.1 
April 2007 
OSGi 
Alliance 
Digitally 
signed by 
OSGi Alliance 
DN: cn=OSGi 
Alliance, 
c=US 
Date: 
2007.02.22 
14:45:47 + 
01'00' 
Signatur 
e Not 
Verified
OSGi Framework Layering 
luminis 
SERVICE MODEL 
LIFECYCLE 
MODULE 
Execution 
Environment 
L3 - Provides a publish/find/bind service 
model to decouple bundles 
L2 - Manages the life cycle of a bundle in 
a framework without requiring the vm to be 
restarted 
L1 - Creates the concept of a module 
(aka. bundles) that use classes from each 
other in a controlled way according to 
system and bundle constraints 
L0 - 
OSGi Minimum Execution Environment 
CDC/Foundation 
JavaSE
Bundle 
luminis 
Module Layer (1/3) 
• Unit of deployment 
is the bundle i.e., a JAR 
• Separate class loader 
per bundle 
• Class loader graph 
• Independent namespaces 
• Class sharing at the Java package level 
Module 
Module 
Bundle Bundle Bundle 
org.apache.utils 1.0 
exports 
org.apache.db 1.4 
org.apache.log 2.3 org.apache.utils 1.1 
exports 
imports 
exports 
imports 
exports
luminis 
Module Layer (2/3) 
• Multi-version support 
• i.e., side-by-side versions 
• Explicit code boundaries and dependencies 
• i.e., package imports and exports 
• Support for various sharing policies 
• i.e., arbitrary version range support 
• Arbitrary export/import attributes 
• Influence package selection Module
luminis 
Module Layer (3/3) 
• Sophisticated class space consistency model 
• Ensures code constraints are not violated 
• Package filtering for fine-grained class visibility 
• Exporters may include/exclude specific classes from 
exported package 
• Bundle fragments 
• A single logical module in multiple physical bundles 
• Bundle dependencies 
• Allows for tight coupling when required Module
Life-cycle 
resolved active 
luminis 
Life-cycle Layer 
• Managed life cycle 
• States for each bundle; 
• Allows updates of existing bundles. 
• Dynamically install, start, update, and uninstall 
Life-cycle 
start 
end 
installed 
install 
start starting 
stopping stop 
uninstall 
uninstalled 
Module
luminis 
Service Layer 
• OSGi framework 
promotes service 
oriented interaction 
pattern among 
bundles 
Service 
Service 
Log Database 
publish use 
use 
publish 
Bundle Bundle Bundle 
Bundle 
Prefs 
publish 
use 
publish find 
Service 
Provider 
Service 
Requester 
Service 
Registry 
interact 
Life-cycle 
Module
Service 
Life-cycle 
luminis 
Security 
• Optional Security Layer based on 
Java permissions 
• Infrastructure to define, deploy, and 
manage fine-grained application 
permissions 
• Code authenticated by location or 
signer 
• Well defined API to manage 
permissions 
• PermissionAdmin 
• ConditionalPermissionAdmin 
Security 
Module
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
Security Concepts Overview 
• OSGi uses codebased security following the Java 
Security Model 
• Makes use of Protection Domain 
• The stack walk based Permission Check 
• Signed bundles 
• User based security is supported by the 
UserAdmin service but not integrated in the 
standard permission check as with JAAS 
• Additionally, PermissionAdmin and 
ConditionalPermissionAdmin provide 
sophisticated management infrastructure 
luminis
luminis 
Protection Domain 
• Encapsulates characteristics of a domain 
• One protection domain per bundle 
• Encloses a set of classes whose instances are 
granted a set of permissions 
• Set of permissions associated with each bundle 
• Permission check consults all protection domains 
on the stack
luminis 
Permission Check 
• Invoked either by call to SecurityManager.check* 
or AccessController.checkPermission 
• SecurityManager is old way to do it 
• OSGi requires usage of the SecurityManager for full 
functionality 
• Privileged calls used to cut off stack walk 
• Disregard code on the stack earlier then the latest 
privileged call. 
• Merges context of parent thread as well
luminis 
Algorithm 
AccessController.checkPermission(Permission p) 
A.class 
B.class 
C.class 
D.class 
E.class 
Protection Domain: 
Bundle A 
Protection Domain: 
Bundle B 
Privileged Call if (!(PermissionsA.implies(p) && 
PermissionsB.implies(p)) 
{ 
throw new SecurityException(); 
} 
PermissionsA 
PermissionsB
luminis 
Deployment Topology 
• Management Agent, responsible for: 
• life cycle management of the framework 
• security 
• Can use SynchronousBundleListener for on the fly 
configuration 
OSGi framework 
Provisioning 
Server 
OBR 
management 
agent 
bundle A 
bundle B 
bundle C
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
Enable Security: Equinox 
• Properties for security manager, keystore, signed 
bundles support 
• -Djava.security.manager="" 
• -Dosgi.framework.keystore=file:lib/keystore.ks 
• -Dosgi.signedcontent.support=true 
• Java Security Policy must give AllPermission 
• -Djava.security.policy=all.policy 
luminis 
• grant { permission java.lang.AllPermission }; 
java -Djava.security.manager="" -Djava.security.policy=all.policy  
-Dosgi.framework.keystore=file:keystore.ks -Dosgi.signedcontent.support=true 
-jar org.eclipse.equinox.launcher.jar -noExit
Enable Security: Felix 
• Felix security is still experimental 
• Not all permission checks implemented 
• Configuration and documentation needs improvements 
• Properties for security manager, keystore, 
keystore password, keystore type 
• Java Security Policy must give AllPermission 
• -Djava.security.policy=all.policy 
luminis 
• grant { permission java.lang.AllPermission }; 
java -Djava.security.manager -Djava.security.policy=all.policy 
-Dfelix.keystore=keystore.ks -Dfelix.keystore.pass=luminis -jar felix.jar
Example - Running Secure 
luminis 
public class Activator implements BundleActivator { 
public void start(BundleContext context) throws Exception { 
// Check for a security manager 
SecurityManager sm = System.getSecurityManager(); 
if (sm == null) { 
throw new BundleException("No SecurityManager installed"); 
} 
// Check for AllPermission 
sm.checkPermission(new AllPermission()); 
} 
public void stop(BundleContext context) throws Exception { 
} 
}
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
luminis 
Permission Admin (1/3) 
• Old (pre 4.0) way of managing permissions 
• Provides information about current permissions 
• Allows a management agent to set permissions 
per bundle 
• Permissions are based on bundle locations with a 
fallback to a set of default permissions
AdminP seervricme issionPeArmdismsioni nAd m(i2n S/e3rv)ice Specification Version Class Diagram org.osgi.service.permissionadmin. 
constructs 
1 
1 
Operation 
luminis 
The Framework maintains a repository of permissions. These permissions 
<<interface>> 
Permission 
Admin 
<<class>> 
Permission 
Info 
1 0..n 
java.security. 
Permission 
bundle location
luminis 
PermissionAdmin (3/3) 
• Relative FilePermissions are assumed to be 
relative to the bundle storage area 
• All permission changes need AllPermission 
• the first thing a management agent has to do is give 
itself AllPermission 
• If ConditionalPermissionAdmin is present (as is 
the case in our environment) then default 
permissions are ignored unless the 
ConditionalPermissionAdmin has not been set-up 
with at least one entry
luminis 
PermissionInfo 
• Permission representation used 
• Encapsulates three pieces of information 
• type - class name of the permission 
• name - name argument of the permission 
• actions - actions argument of the permission 
new PermissionInfo( 
AdminPermission.class.getName(), "(id=10)", 
AdminPermission.EXECUTE);
luminis 
Example 
PermissionAdmin admin = getPermissionAdmin(); 
admin.setPermissions( 
context.getBundle().getLocation(), 
new PermissionInfo[]{ 
new PermissionInfo( 
AllPermission.class.getName(), "", "")}); 
PermissionInfo[] previous = admin.getDefaultPermissions(); 
admin.setDefaultPermissions(new PermissionInfo[0]); 
// unset 
admin.setDefaultPermissions(previous);
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
OSGi specific permissions 
• OSGi specifications define special permissions for 
framework and service related tasks 
• The core framework specification defines: 
• AdminPermission - for all framework specific actions 
• PackagePermission - for package import and export 
• ServicePermission - for service providing and usage 
• BundlePermission - for extensions/fragments 
• Custom permissions can be used if they have 
been exported by a bundle or the classpath 
luminis
PackagePermission 
• A bundle‘s authority to import/export a package 
• Name is the package as dot-separated string 
• Wildcards are supported 
• Two actions: EXPORT and IMPORT. 
• EXPORT implies IMPORT 
new PackagePermission("net.luminis.pub.foo", PackagePermission.IMPORT)); 
new PackagePermission("net.luminis.bar", PackagePermission.EXPORT)); 
luminis 
Import-Package: net.luminis.pub.foo, net.luminis.bar 
Export-Package: net.luminis.bar 
System.getSecurityManager().checkPermission( 
System.getSecurityManager().checkPermission( 
new PackagePermission("net.luminis.pub.*", PackagePermission.IMPORT); 
new PackagePermission("net.luminis.bar", PackagePermission.EXPORT);
ServicePermission 
• A bundle‘s authority to register/get a service 
• Name is the name of the service interface as a 
dot separated string 
• Wildcards may be used for the classname 
• Two Actions: GET and REGISTER 
context.getServiceReference("net.luminis.pub.Foo"); 
context.registerService("net.luminis.pub.Bar", new Bar(), null); 
System.getSecurityManager().checkPermission( 
new ServicePermission("net.luminis.pub.Foo", ServicePermission.GET)); 
new ServicePermission("net.luminis.pub.*", ServicePermission.GET); 
new ServicePermission("net.luminis.pub.Bar", ServicePermission.REGISTER); 
luminis 
System.getSecurityManager().checkPermission( 
new ServicePermission("net.luminis.pub.Bar", ServicePermission.REGISTER));
luminis 
BundlePermission 
• A bundle‘s authority to require/provide/attach a 
bundle/fragment 
• Name is the bundle symbolic name 
• Wildcards may be used 
• Four Actions: PROVIDE, REQUIRE, HOST, and 
FRAGMENT 
• PROVIDE implies REQUIRE
luminis 
AdminPermission (1/3) 
• A bundle‘s authority to perform specific privileged 
administrative operations or get sensitive 
informations about a bundle. 
• Name is a filter expression. The filter gives access 
to the following parameters: 
• signer - A DN chain of bundle signers 
• location - The location of a bundle 
• id - The bundle ID of the bundle 
• name - The symbolic name of a bundle
luminis 
AdminPermission (2/3) 
• There are eleven Actions: 
• class - load a class from a bundle 
• execute - start/stop bundle and set bundle startlevel 
• extensionLifecycle - manage extension bundle 
• lifecycle - manage bundle (update/uninstall/etc.) 
• listener - add/remove synchronous bundle listeners 
• metadata - get manifest and location 
• resolve - refresh and resolve a bundle 
• resource - get/find resources from a bundle 
• startlevel - set startlevel and initial bundle startlevel 
• context - get bundle context
luminis 
AdminPermission (3/3) 
context.installBundle("file:bundle.jar").start(); 
System.getSecurityManager().checkPermission( 
new AdminPermission(bundle)); 
new AdminPermission( 
"(&(signer=o=luminis)(name=net.luminis.*)(location=file://*)(id>=10))", 
AdminPermission.LIFECYCLE + "," + AdminPermission.EXECUTE);
Example - Configure Security 
luminis 
admin.setDefaultPermissions( 
new PermissionInfo[] { 
new PermissionInfo(PackagePermission.class.getName(), "*", 
PackagePermission.IMPORT) 
}); 
admin.setPermissions(context.getBundle(1).getLocation(), 
new PermissionInfo[] { 
new PermissionInfo(AdminPermission.class.getName(), "*", "*") 
, new PermissionInfo(ServicePermission.class.getName(), "*", 
ServicePermission.GET ) 
, new PermissionInfo(ServicePermission.class.getName(), "org.apache.felix.shell.*", 
ServicePermission.REGISTER) 
, new PermissionInfo(PackagePermission.class.getName(), "org.apache.felix.shell", 
PackagePermission.EXPORT) 
, new PermissionInfo(PropertyPermission.class.getName(), "*", "read") 
, new PermissionInfo(NetPermission.class.getName(), "specifyStreamHandler", "")};
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
Conditional Permission Admin 
• New (4.0) way of doing permission management 
• use this exclusively for new implementations 
• interoperability when both PA and CPA are present 
• IF all conditions of a set of conditions match THEN 
apply the supplied permissions 
• More flexible, extensible model 
• Conditions evaluation is highly optimized 
luminis
luminis 
CondPermAdmin (1/4) 
Conditional Permission Admin Specification Version 1.0 Introduction 
Figure 9.34 org.osgi.service.condpermadmin package 
<<interface>> 
Conditional 
Perm. Admin 
<<class>> 
Bundle Loc. 
Condition 
9.1.3 Synopsis 
selects by 
<<interface>> 
Condition Info 
<<interface>> 
Conditional 
Perm. Info 
<<interface>> 
Condition 
<<interface>> 
Permission Info 
Conditional 
Permission 
Admin Impl. 
Permission 
Manager Impl. 
BundleProtection 
Domain 
Protection 
Domain 
a Bundle 
<<class>> 
Bundle Signer. 
Condition 
location 
selects by 
signer 
* 
1 
1 * 
* 
* 
User Condition 
Impl 
administers 
has 
searches 
has 
encodes 
encodes
luminis 
Conditions 
• Purpose is to decide if a permission set is 
applicable or not. 
• Can be postponed or immutable 
• allows optimized evaluations 
• Custom conditions can be used for more 
advanced use-cases
luminis 
BundleLocationCondition 
• Condition to test if the location of a bundle 
matches a pattern. 
• matching is done based on filter string matching rules 
new ConditionInfo(BundleLocationCondition.class.getName(), 
new String[] {context.getBundle().getLocation()}); 
new ConditionInfo(BundleLocationCondition.class.getName(), 
new String[] {"*://www.luminis.nl/*"});
luminis 
Example 
ConditionalPermissionAdmin condPermAdmin = getConditionalPermissionAdmin(); 
condPermAdmin.addConditionalPermissionInfo( 
new ConditionInfo[] { 
new ConditionInfo( 
BundleLocationCondition.class.getName(), 
new String[]{"*://www.luminis.nl/*"}) 
}, 
new PermissionInfo[] { 
new PermissionInfo( 
AdminPermission.class.getName(), 
"(!(id=" + context.getBundle().getBundleId() + "))", 
"*") 
});
Example - Use Conditions 
condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[]{ 
new ConditionInfo(BundleLocationCondition.class.getName(), 
new String[]{context.getBundle().getLocation()}) 
}, ALLPERMISSION_INFO); 
condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[] { 
// we use an empty condition set for default permissions 
}, new PermissionInfo[] { 
new PermissionInfo(PackagePermission.class.getName(), "*", 
luminis 
PackagePermission.IMPORT) 
});
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
Signed Bundles 
• Authenticates the signer 
• Ensures that the content has not been modified 
• Bundle (jar) can be signed by multiple signers 
• Basically, normal java jar signing with a few extras 
• All entries must be signed except META-INF 
• certificate chains represented as ; separated lists 
• matching done using * and - wildcards 
cn=marrs,o=iQ,c=NL;cn=hans,o=luminis,c=NL 
luminis 
cn=marrs,o=IQ 
*;cn=*,o=luminis 
cn=marrs;-;cn=*,o=luminis
Signing bundles in Eclipse 
luminis
luminis 
Signing bundles manually 
jarsigner -keystore file:lib/keystore.ks  
-storepass luminis bundle.jar luminis 
<macrodef name="sign-bundle"> 
<attribute name="name" /> 
<attribute name="location" default="deploy/@{name}.jar" /> 
<sequential> 
<exec executable="jarsigner"> 
<arg line="-keystore file:lib/keystore.ks" /> 
<arg line="-storepass luminis" /> 
<arg line="@{location}" /> 
<arg line="luminis" /> 
</exec> 
</sequential> 
</macrodef>
Certificates and Keystores 
keytool -genkey -keystore keystore.ks -alias marrs -storepass luminis  
-keypass luminis -dname "CN=Marcel, OU=iQ, O=luminis, L=Arnhem, C=NL" 
keytool -selfcert -keystore keystore.ks -alias marrs -storepass luminis  
-keypass luminis -dname "CN=Marcel, OU=iQ, O=luminis, L=Arnhem, C=NL" 
keytool -export -v -keystore keystore.ks -alias marrs -file luminis.cert  
-storepass luminis -keypass luminis 
keytool -import -v -keystore keystore.ks -alias luminis -file luminis.cert  
-storepass luminis -keypass luminis 
keytool -list -keystore keystore.ks -storepass luminis 
luminis 
marrs, Mar 13, 2008, keyEntry, 
luminis, Mar 13, 2008, trustedCertEntry
luminis 
BundleSignerCondition 
• Condition to test if the signer of a bundle matches 
a pattern 
• Uses the wildcard matching 
new ConditionInfo(BundleSignerCondition.class.getName(), 
new String[]{"*,o=luminis"})
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
luminis 
Local Permissions 
• Defined in a resource inside the bundle 
• Defines a set of permissions that are enforced by 
the framework 
• A bundle can get less than these permissions, but 
never more 
• Defaults to All Permissions 
• Good way for operators to “audit” the 
permissions of a bundle
luminis 
LocalPermissions 
• OSGI-INF/permissions.perm 
# Friday, Feb 24 2005 
# ACME, chess game 
( ..ServicePermission "..log.LogService" "GET" ) 
( ..PackagePermission "..log" "IMPORT" ) 
( ..ServicePermission "..cm.ManagedService" "REGISTER" ) 
( ..PackagePermission "..cm" "IMPORT" ) 
( ..ServicePermission "..useradmin.UserAdmin" "GET" ) 
( ..PackagePermission "..cm" "SET" ) 
( ..PackagePermission "com.acme.chess" "IMPORT,EXPORT" ) 
( ..PackagePermission "com.acme.score" "IMPORT" )
Tip: local permissions tracing 
with Apache Felix 
luminis 
import java.security.Permission; 
public class SecMan extends SecurityManager { 
public void checkPermission(Permission perm, Object context) { 
System.out.println(perm); 
try { 
super.checkPermission(perm, context); 
} 
catch (Exception ex) { 
ex.printStackTrace(); 
} 
} 
public void checkPermission(Permission perm) { 
System.out.println(perm); 
try { 
super.checkPermission(perm); 
} 
catch (Exception ex) { 
ex.printStackTrace(); 
} 
} 
} 
java -Djava.security.manager=SecMan -Djava.security.policy=all.policy  
-cp .:felix.jar org.apache.felix.main.Main
Example - Signed bundles 
condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[]{ 
new ConditionInfo(BundleSignerCondition.class.getName(), 
new String[]{"*,o=luminis"}) 
}, ALLPERMISSION_INFO); 
# Friday, Feb 24 2005 
# task4.test, local 
( org.osgi.framework.PackagePermission "org.osgi.framework" "IMPORT" ) 
( java.io.FilePermission "/" "read,write" ) 
luminis
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
luminis 
Custom Condition 
• Conditions must come 
from the classpath/ 
system bundle 
• Are constructed from 
ConditionInfo objects 
• static 
getCondition(Bundle,Co 
nditionInfo) method 
• constructor with 
(Bundle, ConditionInfo) 
signature 
class BeforeDateCondition implements Condition { 
private final long m_date; 
public static Condition getCondition(Bundle bundle, 
ConditionInfo info) { 
return new BeforeDateCondition(bundle, info); 
} 
public BeforeDateCondition(Bundle bundle, 
ConditionInfo info) { 
m_date = Long.parseLong(info.getArgs()[0]); 
} 
public boolean isMutable() { 
return m_date > System.currentTimeMillis(); 
} 
public boolean isPostponed() { 
return false; 
} 
public boolean isSatisfied() { 
return System.currentTimeMillis() < m_date; 
} 
public boolean isSatisfied(Condition[] conditions, 
Dictionary context) { 
return false; 
} 
}
luminis 
Extension Bundles 
• Extension bundles can deliver optional parts of 
the Framework implementation 
• Necessary to add custom conditions because 
they have to come from the classpath 
• No Import-Package, Require-Bundle, Bundle- 
NativeCode, DynamicImport-Package, or Bundle- 
Activator allowed 
Fragment-Host: system.bundle; extension:=framework
luminis 
Agenda 
• Introduction to OSGi layers and Security 
• Java and OSGi Security 
• Enabling Security in Equinox and Apache Felix 
• PermissionAdmin and OSGi specific permissions 
• ConditionalPermissionAdmin 
• Signed Bundles and Local Permissions 
• Custom and postponed conditions
luminis 
Postponed Conditions 
• Optimize condition evaluation on multiple 
evaluations during the same permission check 
• context map can be used to pass settings during 
evaluation 
• Use if evaluation is expensive 
public boolean isPostponed() { 
return true; 
} 
public boolean isSatisfied(Condition[] conditions, Dictionary context) { 
// do evaluation for all conditions involved 
}
Example - Custom Postponed 
condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[]{ 
new ConditionInfo(AskUserCondition.class.getName(), new String[]{""}) 
luminis 
}, ALLPERMISSION_INFO); 
public boolean isSatisfied(Condition[] conditions, Dictionary context) { 
StringBuilder buffer = new StringBuilder("Do you grant bundles: "); 
for (Condition condition : conditions) { 
buffer.append( 
(AskUserCondition) condition).bundle.getBundleId()).append(" "); 
} 
buffer.append("AllPermission?"); 
return ask(buffer.toString()); 
}
luminis 
Demo 
• Shows a custom condition that: 
• is postponed, because it’s “expensive” 
• asks the user for permission
luminis 
Discussion 
• We’ve showed: 
• how security is integrated into OSGi 
• the relation between Java 2 Security and OSGi 
• how to use both Permission Admin and Conditional 
Permission admin 
• how to use signed bundles, local permissions, and add 
custom permissions and conditions at runtime
luminis 
Links 
• Apache Felix and OSGi: 
http://felix.apache.org/ 
http://www.osgi.org/ 
• Sample code: 
http://opensource.luminis.net/ 
• Karl Pauls: karl.pauls@luminis.nl 
Marcel Offermans: marcel.offermans@luminis.nl
luminis 
Questions?! 
? & !

Mais conteúdo relacionado

Mais procurados

Looking into trusted and encrypted keys
Looking into trusted and encrypted keysLooking into trusted and encrypted keys
Looking into trusted and encrypted keysSUSE Labs Taipei
 
OpenSolaris Introduction
OpenSolaris IntroductionOpenSolaris Introduction
OpenSolaris Introductionsatyajit_t
 
Deploying FuseMQ with Fuse Fabric
Deploying FuseMQ with Fuse FabricDeploying FuseMQ with Fuse Fabric
Deploying FuseMQ with Fuse Fabricdejanb
 
Apache Tomcat 7 by Filip Hanik
Apache Tomcat 7 by Filip HanikApache Tomcat 7 by Filip Hanik
Apache Tomcat 7 by Filip HanikEdgar Espina
 
Concierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesConcierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesJan S. Rellermeyer
 
Testing Docker Images Security -All day dev ops 2017
Testing Docker Images Security -All day dev ops 2017Testing Docker Images Security -All day dev ops 2017
Testing Docker Images Security -All day dev ops 2017Jose Manuel Ortega Candel
 
Osol Netadmin Solaris Administrator
Osol Netadmin Solaris AdministratorOsol Netadmin Solaris Administrator
Osol Netadmin Solaris AdministratorOpeyemi Olakitan
 
XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...
XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...
XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...The Linux Foundation
 
Devicemgmt
DevicemgmtDevicemgmt
Devicemgmtxyxz
 
Everything you need to know about containers security
Everything you need to know about containers securityEverything you need to know about containers security
Everything you need to know about containers securityJose Manuel Ortega Candel
 
Multi-signed Kernel Module
Multi-signed Kernel ModuleMulti-signed Kernel Module
Multi-signed Kernel ModuleSUSE Labs Taipei
 
Rootlinux17: An introduction to Xen Project Virtualisation
Rootlinux17:  An introduction to Xen Project VirtualisationRootlinux17:  An introduction to Xen Project Virtualisation
Rootlinux17: An introduction to Xen Project VirtualisationThe Linux Foundation
 
CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...
CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...
CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...The Linux Foundation
 

Mais procurados (20)

System Integrity
System IntegritySystem Integrity
System Integrity
 
Looking into trusted and encrypted keys
Looking into trusted and encrypted keysLooking into trusted and encrypted keys
Looking into trusted and encrypted keys
 
Mastering VMware Datacenter Part-1
Mastering VMware Datacenter Part-1Mastering VMware Datacenter Part-1
Mastering VMware Datacenter Part-1
 
OpenSolaris Introduction
OpenSolaris IntroductionOpenSolaris Introduction
OpenSolaris Introduction
 
Testing Docker Security Linuxlab 2017
Testing Docker Security Linuxlab 2017Testing Docker Security Linuxlab 2017
Testing Docker Security Linuxlab 2017
 
Deploying FuseMQ with Fuse Fabric
Deploying FuseMQ with Fuse FabricDeploying FuseMQ with Fuse Fabric
Deploying FuseMQ with Fuse Fabric
 
Apache Tomcat 7 by Filip Hanik
Apache Tomcat 7 by Filip HanikApache Tomcat 7 by Filip Hanik
Apache Tomcat 7 by Filip Hanik
 
Concierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesConcierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded Devices
 
Testing Docker Images Security -All day dev ops 2017
Testing Docker Images Security -All day dev ops 2017Testing Docker Images Security -All day dev ops 2017
Testing Docker Images Security -All day dev ops 2017
 
Osol Netadmin Solaris Administrator
Osol Netadmin Solaris AdministratorOsol Netadmin Solaris Administrator
Osol Netadmin Solaris Administrator
 
XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...
XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...
XPDS16: A Paravirtualized Interface for Socket Syscalls - Dimitri Stiliadis, ...
 
Devicemgmt
DevicemgmtDevicemgmt
Devicemgmt
 
Testing Docker Images Security
Testing Docker Images SecurityTesting Docker Images Security
Testing Docker Images Security
 
Testing Docker Images Security -NcN edition
Testing Docker Images Security -NcN editionTesting Docker Images Security -NcN edition
Testing Docker Images Security -NcN edition
 
Everything you need to know about containers security
Everything you need to know about containers securityEverything you need to know about containers security
Everything you need to know about containers security
 
Multi-signed Kernel Module
Multi-signed Kernel ModuleMulti-signed Kernel Module
Multi-signed Kernel Module
 
Jetty Vs Tomcat
Jetty Vs TomcatJetty Vs Tomcat
Jetty Vs Tomcat
 
Rootlinux17: An introduction to Xen Project Virtualisation
Rootlinux17:  An introduction to Xen Project VirtualisationRootlinux17:  An introduction to Xen Project Virtualisation
Rootlinux17: An introduction to Xen Project Virtualisation
 
OpenSolaris Web Stack MySQL BOF
OpenSolaris Web Stack MySQL BOFOpenSolaris Web Stack MySQL BOF
OpenSolaris Web Stack MySQL BOF
 
CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...
CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...
CIF16/Scale14x: The latest from the Xen Project (Lars Kurth, Chairman of Xen ...
 

Destaque

The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...
The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...
The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...mfrancis
 
Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...
Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...
Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...mfrancis
 
Common Security Services. Consolidation patterns for legacy components - Stef...
Common Security Services. Consolidation patterns for legacy components - Stef...Common Security Services. Consolidation patterns for legacy components - Stef...
Common Security Services. Consolidation patterns for legacy components - Stef...mfrancis
 
Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Peter R. Egli
 
Sia door supervisor training 5
Sia door supervisor training 5Sia door supervisor training 5
Sia door supervisor training 5hilario859
 
Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...
Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...
Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...Phú Phùng
 
Concierge: Bringing OSGi (Back) to Embedded Devices
Concierge: Bringing OSGi (Back) to Embedded DevicesConcierge: Bringing OSGi (Back) to Embedded Devices
Concierge: Bringing OSGi (Back) to Embedded DevicesJan S. Rellermeyer
 
Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127
Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127
Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127Frank Dawson
 
Raising information security awareness
Raising information security awarenessRaising information security awareness
Raising information security awarenessTerranovatraining
 
OSGi als App-Plattform - Ein Ausflug durch den Security-Layer
OSGi als App-Plattform - Ein Ausflug durch den Security-Layer	OSGi als App-Plattform - Ein Ausflug durch den Security-Layer
OSGi als App-Plattform - Ein Ausflug durch den Security-Layer OSGiUsers
 
Workshop OSGI PPT
Workshop OSGI PPTWorkshop OSGI PPT
Workshop OSGI PPTSummer Lu
 
How the Bosch Group is making use of OSGi for IoT - Kai Hackbarth
How the Bosch Group is making use of OSGi for IoT - Kai HackbarthHow the Bosch Group is making use of OSGi for IoT - Kai Hackbarth
How the Bosch Group is making use of OSGi for IoT - Kai Hackbarthmfrancis
 
OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...
OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...
OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...mfrancis
 
Clasificación del instrumental de exodoncia
Clasificación del instrumental de exodonciaClasificación del instrumental de exodoncia
Clasificación del instrumental de exodonciaChristian López
 

Destaque (14)

The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...
The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...
The Role of the OSGi Gateway in GST Security Objectives and Architecture - An...
 
Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...
Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...
Enabling Java 2 Runtime Security with Eclipse Plug-ins - Ted Habeck, Advisory...
 
Common Security Services. Consolidation patterns for legacy components - Stef...
Common Security Services. Consolidation patterns for legacy components - Stef...Common Security Services. Consolidation patterns for legacy components - Stef...
Common Security Services. Consolidation patterns for legacy components - Stef...
 
Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)
 
Sia door supervisor training 5
Sia door supervisor training 5Sia door supervisor training 5
Sia door supervisor training 5
 
Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...
Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...
Security Policy Enforcement for the OSGi Framework using Aspect-Oriented Pr...
 
Concierge: Bringing OSGi (Back) to Embedded Devices
Concierge: Bringing OSGi (Back) to Embedded DevicesConcierge: Bringing OSGi (Back) to Embedded Devices
Concierge: Bringing OSGi (Back) to Embedded Devices
 
Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127
Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127
Privacy_Engineering_Privacy Assurance_Lecture-Ecole_Polytechnic_Nice_SA-20150127
 
Raising information security awareness
Raising information security awarenessRaising information security awareness
Raising information security awareness
 
OSGi als App-Plattform - Ein Ausflug durch den Security-Layer
OSGi als App-Plattform - Ein Ausflug durch den Security-Layer	OSGi als App-Plattform - Ein Ausflug durch den Security-Layer
OSGi als App-Plattform - Ein Ausflug durch den Security-Layer
 
Workshop OSGI PPT
Workshop OSGI PPTWorkshop OSGI PPT
Workshop OSGI PPT
 
How the Bosch Group is making use of OSGi for IoT - Kai Hackbarth
How the Bosch Group is making use of OSGi for IoT - Kai HackbarthHow the Bosch Group is making use of OSGi for IoT - Kai Hackbarth
How the Bosch Group is making use of OSGi for IoT - Kai Hackbarth
 
OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...
OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...
OSGi & Java in Industrial IoT - More than a Solid Trend - Essential to Scale ...
 
Clasificación del instrumental de exodoncia
Clasificación del instrumental de exodonciaClasificación del instrumental de exodoncia
Clasificación del instrumental de exodoncia
 

Semelhante a Building Secure OSGi Applications

Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3Juan Herrera Utande
 
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....Martin Toshev
 
Protecting confidential files using SE-Linux
Protecting confidential files using SE-LinuxProtecting confidential files using SE-Linux
Protecting confidential files using SE-LinuxGiuseppe Paterno'
 
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Deploying and managing SolrCloud in the cloud using the Solr Scale ToolkitDeploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkitthelabdude
 
Java Platform Security Architecture
Java Platform Security ArchitectureJava Platform Security Architecture
Java Platform Security ArchitectureRamesh Nagappan
 
DCSF19 Container Security: Theory & Practice at Netflix
DCSF19 Container Security: Theory & Practice at NetflixDCSF19 Container Security: Theory & Practice at Netflix
DCSF19 Container Security: Theory & Practice at NetflixDocker, Inc.
 
Lions, Tigers and Deers: What building zoos can teach us about securing micro...
Lions, Tigers and Deers: What building zoos can teach us about securing micro...Lions, Tigers and Deers: What building zoos can teach us about securing micro...
Lions, Tigers and Deers: What building zoos can teach us about securing micro...Sysdig
 
Tollas Ferenc - Java security
Tollas Ferenc - Java securityTollas Ferenc - Java security
Tollas Ferenc - Java securityveszpremimeetup
 
SFDC Deployments
SFDC DeploymentsSFDC Deployments
SFDC DeploymentsSujit Kumar
 
Secure Hadoop clusters on Windows platform
Secure Hadoop clusters on Windows platformSecure Hadoop clusters on Windows platform
Secure Hadoop clusters on Windows platformRemus Rusanu
 
UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...
UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...
UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...Vincent Giersch
 
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application StartupHow Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application StartupRudy De Busscher
 
AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)Amazon Web Services
 
AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)Amazon Web Services
 
Enterprise OSGi at eBay
Enterprise OSGi at eBayEnterprise OSGi at eBay
Enterprise OSGi at eBayTony Ng
 
virtualization-vs-containerization-paas
virtualization-vs-containerization-paasvirtualization-vs-containerization-paas
virtualization-vs-containerization-paasrajdeep
 

Semelhante a Building Secure OSGi Applications (20)

OSGi introduction
OSGi introductionOSGi introduction
OSGi introduction
 
Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3Best practices in Deploying SUSE CaaS Platform v3
Best practices in Deploying SUSE CaaS Platform v3
 
Osgi
OsgiOsgi
Osgi
 
Vault
VaultVault
Vault
 
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
 
Protecting confidential files using SE-Linux
Protecting confidential files using SE-LinuxProtecting confidential files using SE-Linux
Protecting confidential files using SE-Linux
 
OSGi & Blueprint
OSGi & BlueprintOSGi & Blueprint
OSGi & Blueprint
 
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Deploying and managing SolrCloud in the cloud using the Solr Scale ToolkitDeploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
Deploying and managing SolrCloud in the cloud using the Solr Scale Toolkit
 
Java Platform Security Architecture
Java Platform Security ArchitectureJava Platform Security Architecture
Java Platform Security Architecture
 
DCSF19 Container Security: Theory & Practice at Netflix
DCSF19 Container Security: Theory & Practice at NetflixDCSF19 Container Security: Theory & Practice at Netflix
DCSF19 Container Security: Theory & Practice at Netflix
 
Lions, Tigers and Deers: What building zoos can teach us about securing micro...
Lions, Tigers and Deers: What building zoos can teach us about securing micro...Lions, Tigers and Deers: What building zoos can teach us about securing micro...
Lions, Tigers and Deers: What building zoos can teach us about securing micro...
 
Tollas Ferenc - Java security
Tollas Ferenc - Java securityTollas Ferenc - Java security
Tollas Ferenc - Java security
 
SFDC Deployments
SFDC DeploymentsSFDC Deployments
SFDC Deployments
 
Secure Hadoop clusters on Windows platform
Secure Hadoop clusters on Windows platformSecure Hadoop clusters on Windows platform
Secure Hadoop clusters on Windows platform
 
UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...
UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...
UKC - Feb 2013 - Analyzing the security of Windows 7 and Linux for cloud comp...
 
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application StartupHow Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
 
AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)
 
AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)AWS re:Invent 2016: Securing Container-Based Applications (CON402)
AWS re:Invent 2016: Securing Container-Based Applications (CON402)
 
Enterprise OSGi at eBay
Enterprise OSGi at eBayEnterprise OSGi at eBay
Enterprise OSGi at eBay
 
virtualization-vs-containerization-paas
virtualization-vs-containerization-paasvirtualization-vs-containerization-paas
virtualization-vs-containerization-paas
 

Mais de Marcel Offermans

OSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixOSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixMarcel Offermans
 
Component-based ontwikkelen met OSGi: van embedded tot enterprise
Component-based ontwikkelen met OSGi: van embedded tot enterpriseComponent-based ontwikkelen met OSGi: van embedded tot enterprise
Component-based ontwikkelen met OSGi: van embedded tot enterpriseMarcel Offermans
 
Dependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesDependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesMarcel Offermans
 
Modular Architectures using Micro Services
Modular Architectures using Micro ServicesModular Architectures using Micro Services
Modular Architectures using Micro ServicesMarcel Offermans
 
Felix HTTP - Paving the road to the future
Felix HTTP - Paving the road to the futureFelix HTTP - Paving the road to the future
Felix HTTP - Paving the road to the futureMarcel Offermans
 
Dynamic Deployment With Apache Felix
Dynamic Deployment With Apache FelixDynamic Deployment With Apache Felix
Dynamic Deployment With Apache FelixMarcel Offermans
 

Mais de Marcel Offermans (7)

De leukste Bug
De leukste BugDe leukste Bug
De leukste Bug
 
OSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixOSGi on Google Android using Apache Felix
OSGi on Google Android using Apache Felix
 
Component-based ontwikkelen met OSGi: van embedded tot enterprise
Component-based ontwikkelen met OSGi: van embedded tot enterpriseComponent-based ontwikkelen met OSGi: van embedded tot enterprise
Component-based ontwikkelen met OSGi: van embedded tot enterprise
 
Dependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesDependencies, dependencies, dependencies
Dependencies, dependencies, dependencies
 
Modular Architectures using Micro Services
Modular Architectures using Micro ServicesModular Architectures using Micro Services
Modular Architectures using Micro Services
 
Felix HTTP - Paving the road to the future
Felix HTTP - Paving the road to the futureFelix HTTP - Paving the road to the future
Felix HTTP - Paving the road to the future
 
Dynamic Deployment With Apache Felix
Dynamic Deployment With Apache FelixDynamic Deployment With Apache Felix
Dynamic Deployment With Apache Felix
 

Último

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 

Último (20)

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 

Building Secure OSGi Applications

  • 1. Building Secure OSGi Applications Karl Pauls Marcel Offermans luminis
  • 2. luminis Who are we? • Karl Pauls • Marcel Offermans Arnhem Enschede image © 2008 Google Earth
  • 3. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 4. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 5. luminis OSGi today OSGi technology is the dynamic module system for Java™ OSGi technology is Universal Middleware. OSGi technology provides a service-oriented, component-based environment for developers and offers standardized ways to manage the software lifecycle. These capabilities greatly increase the value of a wide range of computers and devices that use the Java™ platform.
  • 6. luminis OSGi Specification OSGi Service Platform Service Compendium The OSGi Alliance Release 4, Version 4.1 April 2007 OSGi Alliance Digitally signed by OSGi Alliance DN: cn=OSGi Alliance, c=US Date: 2007.02.22 14:44:10 + 01'00' Signatu re Not Verified OSGi Service Platform Core Specification The OSGi Alliance Release 4, Version 4.1 April 2007 OSGi Alliance Digitally signed by OSGi Alliance DN: cn=OSGi Alliance, c=US Date: 2007.02.22 14:45:47 + 01'00' Signatur e Not Verified
  • 7. OSGi Framework Layering luminis SERVICE MODEL LIFECYCLE MODULE Execution Environment L3 - Provides a publish/find/bind service model to decouple bundles L2 - Manages the life cycle of a bundle in a framework without requiring the vm to be restarted L1 - Creates the concept of a module (aka. bundles) that use classes from each other in a controlled way according to system and bundle constraints L0 - OSGi Minimum Execution Environment CDC/Foundation JavaSE
  • 8. Bundle luminis Module Layer (1/3) • Unit of deployment is the bundle i.e., a JAR • Separate class loader per bundle • Class loader graph • Independent namespaces • Class sharing at the Java package level Module Module Bundle Bundle Bundle org.apache.utils 1.0 exports org.apache.db 1.4 org.apache.log 2.3 org.apache.utils 1.1 exports imports exports imports exports
  • 9. luminis Module Layer (2/3) • Multi-version support • i.e., side-by-side versions • Explicit code boundaries and dependencies • i.e., package imports and exports • Support for various sharing policies • i.e., arbitrary version range support • Arbitrary export/import attributes • Influence package selection Module
  • 10. luminis Module Layer (3/3) • Sophisticated class space consistency model • Ensures code constraints are not violated • Package filtering for fine-grained class visibility • Exporters may include/exclude specific classes from exported package • Bundle fragments • A single logical module in multiple physical bundles • Bundle dependencies • Allows for tight coupling when required Module
  • 11. Life-cycle resolved active luminis Life-cycle Layer • Managed life cycle • States for each bundle; • Allows updates of existing bundles. • Dynamically install, start, update, and uninstall Life-cycle start end installed install start starting stopping stop uninstall uninstalled Module
  • 12. luminis Service Layer • OSGi framework promotes service oriented interaction pattern among bundles Service Service Log Database publish use use publish Bundle Bundle Bundle Bundle Prefs publish use publish find Service Provider Service Requester Service Registry interact Life-cycle Module
  • 13. Service Life-cycle luminis Security • Optional Security Layer based on Java permissions • Infrastructure to define, deploy, and manage fine-grained application permissions • Code authenticated by location or signer • Well defined API to manage permissions • PermissionAdmin • ConditionalPermissionAdmin Security Module
  • 14. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 15. Security Concepts Overview • OSGi uses codebased security following the Java Security Model • Makes use of Protection Domain • The stack walk based Permission Check • Signed bundles • User based security is supported by the UserAdmin service but not integrated in the standard permission check as with JAAS • Additionally, PermissionAdmin and ConditionalPermissionAdmin provide sophisticated management infrastructure luminis
  • 16. luminis Protection Domain • Encapsulates characteristics of a domain • One protection domain per bundle • Encloses a set of classes whose instances are granted a set of permissions • Set of permissions associated with each bundle • Permission check consults all protection domains on the stack
  • 17. luminis Permission Check • Invoked either by call to SecurityManager.check* or AccessController.checkPermission • SecurityManager is old way to do it • OSGi requires usage of the SecurityManager for full functionality • Privileged calls used to cut off stack walk • Disregard code on the stack earlier then the latest privileged call. • Merges context of parent thread as well
  • 18. luminis Algorithm AccessController.checkPermission(Permission p) A.class B.class C.class D.class E.class Protection Domain: Bundle A Protection Domain: Bundle B Privileged Call if (!(PermissionsA.implies(p) && PermissionsB.implies(p)) { throw new SecurityException(); } PermissionsA PermissionsB
  • 19. luminis Deployment Topology • Management Agent, responsible for: • life cycle management of the framework • security • Can use SynchronousBundleListener for on the fly configuration OSGi framework Provisioning Server OBR management agent bundle A bundle B bundle C
  • 20. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 21. Enable Security: Equinox • Properties for security manager, keystore, signed bundles support • -Djava.security.manager="" • -Dosgi.framework.keystore=file:lib/keystore.ks • -Dosgi.signedcontent.support=true • Java Security Policy must give AllPermission • -Djava.security.policy=all.policy luminis • grant { permission java.lang.AllPermission }; java -Djava.security.manager="" -Djava.security.policy=all.policy -Dosgi.framework.keystore=file:keystore.ks -Dosgi.signedcontent.support=true -jar org.eclipse.equinox.launcher.jar -noExit
  • 22. Enable Security: Felix • Felix security is still experimental • Not all permission checks implemented • Configuration and documentation needs improvements • Properties for security manager, keystore, keystore password, keystore type • Java Security Policy must give AllPermission • -Djava.security.policy=all.policy luminis • grant { permission java.lang.AllPermission }; java -Djava.security.manager -Djava.security.policy=all.policy -Dfelix.keystore=keystore.ks -Dfelix.keystore.pass=luminis -jar felix.jar
  • 23. Example - Running Secure luminis public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { // Check for a security manager SecurityManager sm = System.getSecurityManager(); if (sm == null) { throw new BundleException("No SecurityManager installed"); } // Check for AllPermission sm.checkPermission(new AllPermission()); } public void stop(BundleContext context) throws Exception { } }
  • 24. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 25. luminis Permission Admin (1/3) • Old (pre 4.0) way of managing permissions • Provides information about current permissions • Allows a management agent to set permissions per bundle • Permissions are based on bundle locations with a fallback to a set of default permissions
  • 26. AdminP seervricme issionPeArmdismsioni nAd m(i2n S/e3rv)ice Specification Version Class Diagram org.osgi.service.permissionadmin. constructs 1 1 Operation luminis The Framework maintains a repository of permissions. These permissions <<interface>> Permission Admin <<class>> Permission Info 1 0..n java.security. Permission bundle location
  • 27. luminis PermissionAdmin (3/3) • Relative FilePermissions are assumed to be relative to the bundle storage area • All permission changes need AllPermission • the first thing a management agent has to do is give itself AllPermission • If ConditionalPermissionAdmin is present (as is the case in our environment) then default permissions are ignored unless the ConditionalPermissionAdmin has not been set-up with at least one entry
  • 28. luminis PermissionInfo • Permission representation used • Encapsulates three pieces of information • type - class name of the permission • name - name argument of the permission • actions - actions argument of the permission new PermissionInfo( AdminPermission.class.getName(), "(id=10)", AdminPermission.EXECUTE);
  • 29. luminis Example PermissionAdmin admin = getPermissionAdmin(); admin.setPermissions( context.getBundle().getLocation(), new PermissionInfo[]{ new PermissionInfo( AllPermission.class.getName(), "", "")}); PermissionInfo[] previous = admin.getDefaultPermissions(); admin.setDefaultPermissions(new PermissionInfo[0]); // unset admin.setDefaultPermissions(previous);
  • 30. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 31. OSGi specific permissions • OSGi specifications define special permissions for framework and service related tasks • The core framework specification defines: • AdminPermission - for all framework specific actions • PackagePermission - for package import and export • ServicePermission - for service providing and usage • BundlePermission - for extensions/fragments • Custom permissions can be used if they have been exported by a bundle or the classpath luminis
  • 32. PackagePermission • A bundle‘s authority to import/export a package • Name is the package as dot-separated string • Wildcards are supported • Two actions: EXPORT and IMPORT. • EXPORT implies IMPORT new PackagePermission("net.luminis.pub.foo", PackagePermission.IMPORT)); new PackagePermission("net.luminis.bar", PackagePermission.EXPORT)); luminis Import-Package: net.luminis.pub.foo, net.luminis.bar Export-Package: net.luminis.bar System.getSecurityManager().checkPermission( System.getSecurityManager().checkPermission( new PackagePermission("net.luminis.pub.*", PackagePermission.IMPORT); new PackagePermission("net.luminis.bar", PackagePermission.EXPORT);
  • 33. ServicePermission • A bundle‘s authority to register/get a service • Name is the name of the service interface as a dot separated string • Wildcards may be used for the classname • Two Actions: GET and REGISTER context.getServiceReference("net.luminis.pub.Foo"); context.registerService("net.luminis.pub.Bar", new Bar(), null); System.getSecurityManager().checkPermission( new ServicePermission("net.luminis.pub.Foo", ServicePermission.GET)); new ServicePermission("net.luminis.pub.*", ServicePermission.GET); new ServicePermission("net.luminis.pub.Bar", ServicePermission.REGISTER); luminis System.getSecurityManager().checkPermission( new ServicePermission("net.luminis.pub.Bar", ServicePermission.REGISTER));
  • 34. luminis BundlePermission • A bundle‘s authority to require/provide/attach a bundle/fragment • Name is the bundle symbolic name • Wildcards may be used • Four Actions: PROVIDE, REQUIRE, HOST, and FRAGMENT • PROVIDE implies REQUIRE
  • 35. luminis AdminPermission (1/3) • A bundle‘s authority to perform specific privileged administrative operations or get sensitive informations about a bundle. • Name is a filter expression. The filter gives access to the following parameters: • signer - A DN chain of bundle signers • location - The location of a bundle • id - The bundle ID of the bundle • name - The symbolic name of a bundle
  • 36. luminis AdminPermission (2/3) • There are eleven Actions: • class - load a class from a bundle • execute - start/stop bundle and set bundle startlevel • extensionLifecycle - manage extension bundle • lifecycle - manage bundle (update/uninstall/etc.) • listener - add/remove synchronous bundle listeners • metadata - get manifest and location • resolve - refresh and resolve a bundle • resource - get/find resources from a bundle • startlevel - set startlevel and initial bundle startlevel • context - get bundle context
  • 37. luminis AdminPermission (3/3) context.installBundle("file:bundle.jar").start(); System.getSecurityManager().checkPermission( new AdminPermission(bundle)); new AdminPermission( "(&(signer=o=luminis)(name=net.luminis.*)(location=file://*)(id>=10))", AdminPermission.LIFECYCLE + "," + AdminPermission.EXECUTE);
  • 38. Example - Configure Security luminis admin.setDefaultPermissions( new PermissionInfo[] { new PermissionInfo(PackagePermission.class.getName(), "*", PackagePermission.IMPORT) }); admin.setPermissions(context.getBundle(1).getLocation(), new PermissionInfo[] { new PermissionInfo(AdminPermission.class.getName(), "*", "*") , new PermissionInfo(ServicePermission.class.getName(), "*", ServicePermission.GET ) , new PermissionInfo(ServicePermission.class.getName(), "org.apache.felix.shell.*", ServicePermission.REGISTER) , new PermissionInfo(PackagePermission.class.getName(), "org.apache.felix.shell", PackagePermission.EXPORT) , new PermissionInfo(PropertyPermission.class.getName(), "*", "read") , new PermissionInfo(NetPermission.class.getName(), "specifyStreamHandler", "")};
  • 39. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 40. Conditional Permission Admin • New (4.0) way of doing permission management • use this exclusively for new implementations • interoperability when both PA and CPA are present • IF all conditions of a set of conditions match THEN apply the supplied permissions • More flexible, extensible model • Conditions evaluation is highly optimized luminis
  • 41. luminis CondPermAdmin (1/4) Conditional Permission Admin Specification Version 1.0 Introduction Figure 9.34 org.osgi.service.condpermadmin package <<interface>> Conditional Perm. Admin <<class>> Bundle Loc. Condition 9.1.3 Synopsis selects by <<interface>> Condition Info <<interface>> Conditional Perm. Info <<interface>> Condition <<interface>> Permission Info Conditional Permission Admin Impl. Permission Manager Impl. BundleProtection Domain Protection Domain a Bundle <<class>> Bundle Signer. Condition location selects by signer * 1 1 * * * User Condition Impl administers has searches has encodes encodes
  • 42. luminis Conditions • Purpose is to decide if a permission set is applicable or not. • Can be postponed or immutable • allows optimized evaluations • Custom conditions can be used for more advanced use-cases
  • 43. luminis BundleLocationCondition • Condition to test if the location of a bundle matches a pattern. • matching is done based on filter string matching rules new ConditionInfo(BundleLocationCondition.class.getName(), new String[] {context.getBundle().getLocation()}); new ConditionInfo(BundleLocationCondition.class.getName(), new String[] {"*://www.luminis.nl/*"});
  • 44. luminis Example ConditionalPermissionAdmin condPermAdmin = getConditionalPermissionAdmin(); condPermAdmin.addConditionalPermissionInfo( new ConditionInfo[] { new ConditionInfo( BundleLocationCondition.class.getName(), new String[]{"*://www.luminis.nl/*"}) }, new PermissionInfo[] { new PermissionInfo( AdminPermission.class.getName(), "(!(id=" + context.getBundle().getBundleId() + "))", "*") });
  • 45. Example - Use Conditions condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[]{ new ConditionInfo(BundleLocationCondition.class.getName(), new String[]{context.getBundle().getLocation()}) }, ALLPERMISSION_INFO); condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[] { // we use an empty condition set for default permissions }, new PermissionInfo[] { new PermissionInfo(PackagePermission.class.getName(), "*", luminis PackagePermission.IMPORT) });
  • 46. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 47. Signed Bundles • Authenticates the signer • Ensures that the content has not been modified • Bundle (jar) can be signed by multiple signers • Basically, normal java jar signing with a few extras • All entries must be signed except META-INF • certificate chains represented as ; separated lists • matching done using * and - wildcards cn=marrs,o=iQ,c=NL;cn=hans,o=luminis,c=NL luminis cn=marrs,o=IQ *;cn=*,o=luminis cn=marrs;-;cn=*,o=luminis
  • 48. Signing bundles in Eclipse luminis
  • 49. luminis Signing bundles manually jarsigner -keystore file:lib/keystore.ks -storepass luminis bundle.jar luminis <macrodef name="sign-bundle"> <attribute name="name" /> <attribute name="location" default="deploy/@{name}.jar" /> <sequential> <exec executable="jarsigner"> <arg line="-keystore file:lib/keystore.ks" /> <arg line="-storepass luminis" /> <arg line="@{location}" /> <arg line="luminis" /> </exec> </sequential> </macrodef>
  • 50. Certificates and Keystores keytool -genkey -keystore keystore.ks -alias marrs -storepass luminis -keypass luminis -dname "CN=Marcel, OU=iQ, O=luminis, L=Arnhem, C=NL" keytool -selfcert -keystore keystore.ks -alias marrs -storepass luminis -keypass luminis -dname "CN=Marcel, OU=iQ, O=luminis, L=Arnhem, C=NL" keytool -export -v -keystore keystore.ks -alias marrs -file luminis.cert -storepass luminis -keypass luminis keytool -import -v -keystore keystore.ks -alias luminis -file luminis.cert -storepass luminis -keypass luminis keytool -list -keystore keystore.ks -storepass luminis luminis marrs, Mar 13, 2008, keyEntry, luminis, Mar 13, 2008, trustedCertEntry
  • 51. luminis BundleSignerCondition • Condition to test if the signer of a bundle matches a pattern • Uses the wildcard matching new ConditionInfo(BundleSignerCondition.class.getName(), new String[]{"*,o=luminis"})
  • 52. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 53. luminis Local Permissions • Defined in a resource inside the bundle • Defines a set of permissions that are enforced by the framework • A bundle can get less than these permissions, but never more • Defaults to All Permissions • Good way for operators to “audit” the permissions of a bundle
  • 54. luminis LocalPermissions • OSGI-INF/permissions.perm # Friday, Feb 24 2005 # ACME, chess game ( ..ServicePermission "..log.LogService" "GET" ) ( ..PackagePermission "..log" "IMPORT" ) ( ..ServicePermission "..cm.ManagedService" "REGISTER" ) ( ..PackagePermission "..cm" "IMPORT" ) ( ..ServicePermission "..useradmin.UserAdmin" "GET" ) ( ..PackagePermission "..cm" "SET" ) ( ..PackagePermission "com.acme.chess" "IMPORT,EXPORT" ) ( ..PackagePermission "com.acme.score" "IMPORT" )
  • 55. Tip: local permissions tracing with Apache Felix luminis import java.security.Permission; public class SecMan extends SecurityManager { public void checkPermission(Permission perm, Object context) { System.out.println(perm); try { super.checkPermission(perm, context); } catch (Exception ex) { ex.printStackTrace(); } } public void checkPermission(Permission perm) { System.out.println(perm); try { super.checkPermission(perm); } catch (Exception ex) { ex.printStackTrace(); } } } java -Djava.security.manager=SecMan -Djava.security.policy=all.policy -cp .:felix.jar org.apache.felix.main.Main
  • 56. Example - Signed bundles condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[]{ new ConditionInfo(BundleSignerCondition.class.getName(), new String[]{"*,o=luminis"}) }, ALLPERMISSION_INFO); # Friday, Feb 24 2005 # task4.test, local ( org.osgi.framework.PackagePermission "org.osgi.framework" "IMPORT" ) ( java.io.FilePermission "/" "read,write" ) luminis
  • 57. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 58. luminis Custom Condition • Conditions must come from the classpath/ system bundle • Are constructed from ConditionInfo objects • static getCondition(Bundle,Co nditionInfo) method • constructor with (Bundle, ConditionInfo) signature class BeforeDateCondition implements Condition { private final long m_date; public static Condition getCondition(Bundle bundle, ConditionInfo info) { return new BeforeDateCondition(bundle, info); } public BeforeDateCondition(Bundle bundle, ConditionInfo info) { m_date = Long.parseLong(info.getArgs()[0]); } public boolean isMutable() { return m_date > System.currentTimeMillis(); } public boolean isPostponed() { return false; } public boolean isSatisfied() { return System.currentTimeMillis() < m_date; } public boolean isSatisfied(Condition[] conditions, Dictionary context) { return false; } }
  • 59. luminis Extension Bundles • Extension bundles can deliver optional parts of the Framework implementation • Necessary to add custom conditions because they have to come from the classpath • No Import-Package, Require-Bundle, Bundle- NativeCode, DynamicImport-Package, or Bundle- Activator allowed Fragment-Host: system.bundle; extension:=framework
  • 60. luminis Agenda • Introduction to OSGi layers and Security • Java and OSGi Security • Enabling Security in Equinox and Apache Felix • PermissionAdmin and OSGi specific permissions • ConditionalPermissionAdmin • Signed Bundles and Local Permissions • Custom and postponed conditions
  • 61. luminis Postponed Conditions • Optimize condition evaluation on multiple evaluations during the same permission check • context map can be used to pass settings during evaluation • Use if evaluation is expensive public boolean isPostponed() { return true; } public boolean isSatisfied(Condition[] conditions, Dictionary context) { // do evaluation for all conditions involved }
  • 62. Example - Custom Postponed condPermAdmin.addConditionalPermissionInfo(new ConditionInfo[]{ new ConditionInfo(AskUserCondition.class.getName(), new String[]{""}) luminis }, ALLPERMISSION_INFO); public boolean isSatisfied(Condition[] conditions, Dictionary context) { StringBuilder buffer = new StringBuilder("Do you grant bundles: "); for (Condition condition : conditions) { buffer.append( (AskUserCondition) condition).bundle.getBundleId()).append(" "); } buffer.append("AllPermission?"); return ask(buffer.toString()); }
  • 63. luminis Demo • Shows a custom condition that: • is postponed, because it’s “expensive” • asks the user for permission
  • 64. luminis Discussion • We’ve showed: • how security is integrated into OSGi • the relation between Java 2 Security and OSGi • how to use both Permission Admin and Conditional Permission admin • how to use signed bundles, local permissions, and add custom permissions and conditions at runtime
  • 65. luminis Links • Apache Felix and OSGi: http://felix.apache.org/ http://www.osgi.org/ • Sample code: http://opensource.luminis.net/ • Karl Pauls: karl.pauls@luminis.nl Marcel Offermans: marcel.offermans@luminis.nl