Deep dive into Java security architecture

35
Java Platform Security – Deep Dive Prabath Siriwardena Twitter : @prabath

description

Deep dive into Java security architecture

Transcript of Deep dive into Java security architecture

Page 1: Deep dive into Java security architecture

Java Platform Security – Deep Dive

Prabath Siriwardena

Twitter : @prabath

Page 2: Deep dive into Java security architecture

• Provide the Java platform as a secure, ready-built platform on which to run Java-enabled applications in a secure fashion.

• Provide security tools and services implemented in the Java programming language that enable a wider range of security-sensitive applications, for example, in the enterprise world.

Objectives

Page 3: Deep dive into Java security architecture

A Secured Platform

Page 4: Deep dive into Java security architecture

Byte Code Verifier

• Variables are initialized before they are used.• Method calls match the types of object

references.• Rules for accessing private data and methods are

not violated.• Local variable accesses fall within the runtime

stack.• The runtime stack does not overflow.

Page 5: Deep dive into Java security architecture

Java Sandbox Model

Page 6: Deep dive into Java security architecture

Java Sandbox Model

Page 7: Deep dive into Java security architecture

Java Sandbox Model

Page 8: Deep dive into Java security architecture

Java Security Manager

Page 9: Deep dive into Java security architecture

Java Security Manager

• To create a sandbox environment for a given Java application Java Security Manager must be engaged.

• System.setSecurityManager(new SecurityManager());

• java –Djava.security.SecurityManager MainClass

Page 10: Deep dive into Java security architecture

Policy Based Access Controlling

• If no policy is explicitly specified Java Security Manager uses its default security policy.

• The location of the default security policy is picked from JAVA_HOME/lib/security/java.security file.# The default is to have a single system-wide policy

file,# and a policy file in the user's home directory.policy.url.1=file:${java.home}/lib/security/java.policypolicy.url.2=file:${user.home}/.java.policy

Page 11: Deep dive into Java security architecture

Java Security Policy

• By default everything is denied!• Explicitly grants permissions for the code in

execution.• Permission = Resource (Target) + Action

grant { permission java.io.FilePermission “mytext.txt",

"read,write”;};

Page 12: Deep dive into Java security architecture

Java Security Policy

• Java Security Manager reads the security policy.

• java –Djava.security.SecurityManager –Djava.security.policy=mypolicy.policy MainClass

• java –Djava.security.SecurityManager –Djava.security.policy==mypolicy.policy MainClass

• System.setProperty(“java.security.policy”,”mypolicy.policy”);

System.setSecurityManager(new SecurityManager());

Page 13: Deep dive into Java security architecture

Permissions

Page 14: Deep dive into Java security architecture

Permissions

Syntax :

permission className targetName actionList

Page 15: Deep dive into Java security architecture

Java.io.FilePermission

Target:

File Name

Action List:

read, write, execute, delete

Page 16: Deep dive into Java security architecture

java.net.SocketPermission

Target:

Address:Port_Or_PortRange

Action List:

accept, connect, listen, resolve

Page 17: Deep dive into Java security architecture

java.util.PropertyPermission

Target:

Property Name

Action List:

read, write

Page 18: Deep dive into Java security architecture

java.lang.RuntimePermission

Target: createClassLoadergetClassLoadersetContextClassLoaderenableContextClassLoaderOverridecreateSecurityManagersetSecurityManagerexitVMgetenv.variableNameshutdownHookssetFactorysetIOmodifyThreadstopThreadmodifyThreadGroupgetProtectionDomainreadFileDescriptorwriteFileDescriptorloadLibrary.libraryNameaccessClassInPackage.packageNamedefineClassInPackage.packageNameaccessDeclaredMembers.classNamequeuePrintJobgetStackTracesetDefaultUncaughtExceptionHandlerpreferencesusePolicy

Page 19: Deep dive into Java security architecture

java.lang.AWTPermission

Target: showWindowWithoutWarningBanneraccessClipboardaccessEventQueuecreateRobotfullScreenExclusivelistenToAllAWTEventsreadDisplayPixelsreplaceKeyboardFocusManagerwatchMousePointersetWindowAlwaysOnTopsetAppletStub

Page 20: Deep dive into Java security architecture

java.lang.NetPermission

Target: setDefaultAuthenticatorspecifyStreamHandlerrequestPasswordAuthenticationsetProxySelectorgetProxySelectorsetCookieHandlergetCookieHandlersetResponseCachegetResponseCache

Page 21: Deep dive into Java security architecture

java.lang.reflect.ReflectPermission

Target:

suppressAccessChecks

Page 22: Deep dive into Java security architecture

java.io.SerializablePermission

Target:

enableSubclassImplementationenableSubstitution

Page 23: Deep dive into Java security architecture

java.security.SecurityPermission

Target: createAccessControlContextgetDomainCombinergetPolicysetPolicygetProperty.keyNamesetProperty.keyNameinsertProvider.providerNameremoveProvider.providerNamesetSystemScopesetIdentityPublicKeysetIdentityInfoaddIdentityCertificateremoveIdentityCertificateprintIdentityclearProviderProperties.providerNameputProviderProperty.providerNameremoveProviderProperty.providerNamegetSignerPrivateKeysetSignerKeyPair

Page 24: Deep dive into Java security architecture

java.security.AllPermission

Target:

(none)

Action List:

(none)

Page 25: Deep dive into Java security architecture

javax.security.auth.AuthPermission

Target: doAsdoAsPrivilegedgetSubjectgetSubjectFromDomainCombinersetReadOnlymodifyPrincipalsmodifyPublicCredentialsmodifyPrivateCredentialsrefreshCredentialdestroyCredentialcreateLoginContext.contextNamegetLoginConfigurationsetLoginConfigurationrefreshLoginConfiguration

Page 26: Deep dive into Java security architecture

javax.audio.AudioPermission

Target:

playrecord

Action List:(none)

Page 27: Deep dive into Java security architecture

java.uitil.logging.LoggingPermission

Target:

control

Action List:

(none)

Page 28: Deep dive into Java security architecture

java.sql.SQLPermission

Target:

setLog

Action List:

(none)

Page 29: Deep dive into Java security architecture

Fine-grained Access Control

• Based on the location of the code • Based on the trust (code has to be signed)• Based on the user who runs the code

Page 30: Deep dive into Java security architecture

Fine-grained Access Control

• Based on the location of the code grant codeBase "file:${my.code.base}/-" { permission java.security.AllPermission;};

grant codeBase "file://java-security/org.wso2.java.security/-" { permission java.security.AllPermission;};

grant codeBase "file:${java.ext.dirs}/*" {permission java.security.AllPermission;

};

grant codeBase "file:${java.home}/lib/ext/area.jar" { permission java.io.PropertyPermission "user.home”,"read"; permission java.io.FilePermission "${user.home}${/}test${/}*", "write";};

Page 31: Deep dive into Java security architecture

Fine-grained Access Control

• Based on the user who runs the code

grant principal com.sun.security.auth.UnixPrincipal "prabath" { permission java.security.AllPermission;};

grant principal javax.security.auth.x500.X500Principal "cn=Alice" { permission java.io.FilePermission "/home/Alice", "read, write";};

Page 32: Deep dive into Java security architecture

Fine-grained Access Control

• Based on the trust (code has to be signed)

grant signedBy "wso2carbon" { permission java.security.AllPermission;};

keystore "file:///java-security/org.wso2.java.security/wso2carbon.jks";keystorePasswordURL "file:///org.wso2.java.security/wso2carbon.pwd";

Page 33: Deep dive into Java security architecture

Fine-grained Access Control

• Combinations

grant signedBy "wso2carbon" , codeBase "file://java-security/org.wso2.java.security/-" , principal com.sun.security.auth.UnixPrincipal "prabath" { permission java.security.AllPermission;};

keystore "file:///java-security/org.wso2.java.security/wso2carbon.jks";keystorePasswordURL "file:///org.wso2.java.security/wso2carbon.pwd";

Page 34: Deep dive into Java security architecture

Extending Java Security Platform

• Allow to read all the system properties except java.home ?

• Tom can access the getBeer() method only if he is older then 21 year?

Page 35: Deep dive into Java security architecture

Thank You…!!!

[email protected]