91
Aspectos y Seguridad CC71P Objetos y Aspectos Mauricio Quezada 11/11/10

Aspectos y seguridad

Embed Size (px)

Citation preview

Page 1: Aspectos y seguridad

Aspectos y Seguridad

CC71P – Objetos y Aspectos

Mauricio Quezada

11/11/10

Page 2: Aspectos y seguridad

Agenda

1. Motivación

2. Aspectos y Seguridad

3. Un sistema de permisos con AOP

4. AOP y el modelo de seguridad de Java

5. Conclusiones

2

Page 3: Aspectos y seguridad

CONTROL DE ACCESO + ASPECTOS1 - Motivación

3

Page 4: Aspectos y seguridad

Seguridad y Software

• La seguridad debe ser un hecho durante todas las fases del desarrollo

Motivación - 4

Page 5: Aspectos y seguridad

Seguridad y Software

• La seguridad debe ser un hecho durante todas las fases del desarrollo

• Es un cross-cutting concern

Motivación - 5

Page 6: Aspectos y seguridad

Seguridad y Software

• La seguridad debe ser un hecho durante todas las fases del desarrollo

• Es un cross-cutting concern

• Veremos un ejemplo utilizando AspectJ

Motivación - 6

Page 7: Aspectos y seguridad

Control de Acceso (AC)

Motivación - 7

Autenticación Autorización

Page 8: Aspectos y seguridad

AC con Aspectos

• Identification

– Asignar una identidad a los clientes

Motivación - 8

Page 9: Aspectos y seguridad

AC con Aspectos

• Identification

– Asignar una identidad a los clientes

• Authentication

– Afirmar que alguien es quien dice ser

Motivación - 9

Page 10: Aspectos y seguridad

AC con Aspectos

• Identification

– Asignar una identidad a los clientes

• Authentication

– Afirmar que alguien es quien dice ser

• Authorization

– Asegurar que tiene los permisos necesarios

Motivación - 10

Page 11: Aspectos y seguridad

AC con Aspectos

• Asumiremos una clase Server que implementa service de la interfaz ServerInterface

Motivación - 11

Page 12: Aspectos y seguridad

Identification & Authentication

aspect Identification perthis(this(Client)) {

public Subject subject = null;

}

aspect Authentication percflow(serviceRequest()) {

private Subject subject;

pointcut serviceRequest():

call(* ServerInterface+.service(..));

...

Motivación - 12

Page 13: Aspectos y seguridad

Identification & Authentication

aspect Identification perthis(this(Client)) {

public Subject subject = null;

}

aspect Authentication percflow(serviceRequest()) {

private Subject subject;

pointcut serviceRequest():

call(* ServerInterface+.service(..));

...

Motivación - 13

Page 14: Aspectos y seguridad

Identification & Authentication

aspect Identification perthis(this(Client)) {

public Subject subject = null;

}

aspect Authentication percflow(serviceRequest()) {

private Subject subject;

pointcut serviceRequest():

call(* ServerInterface+.service(..));

...

Motivación - 14

Page 15: Aspectos y seguridad

Authentication

...

pointcut authenticationCall(Object caller):

this(caller) &&

serviceRequest() &&

if(Identification.hasAspect(caller));

public Subject getSubject() {

return subject;

}

...

Motivación - 15

Page 16: Aspectos y seguridad

Authentication

before(Object caller): authenticationCall(caller) {

Identification id = Identification.aspectOf(caller);

if(id.subject == null) {

<login>

subject = id.subject;

}

}

}

Motivación - 16

Page 17: Aspectos y seguridad

Authorization

aspect Authorization {

pointcut checkedMethods():

within(Server) && execution(* service(..));

Object around(): checkedMethods() {

Authentication auth = Authentication.aspectOf();

Subject subject = auth.getSubject();

boolean allowed = <check access control>;

if(allowed) return proceed();

else <access denied>}

}

Motivación - 17

Page 18: Aspectos y seguridad

Authorization

aspect Authorization {

pointcut checkedMethods():

within(Server) && execution(* service(..));

Object around(): checkedMethods() {

Authentication auth = Authentication.aspectOf();

Subject subject = auth.getSubject();

boolean allowed = <check access control>;

if(allowed) return proceed();

else <access denied>}

}

Motivación - 18

Page 19: Aspectos y seguridad

Otras consideraciones

• Generalizar el ejemplo utilizando aspectos abstractos

Motivación - 19

Page 20: Aspectos y seguridad

Otras consideraciones

• Generalizar el ejemplo utilizando aspectos abstractos

• Extender los requerimientos:

– Confidencialidad

– Integridad

– No Repudiabilidad

– …etc.

Motivación - 23

Page 21: Aspectos y seguridad

Seguridad y AOP

1. Código más mantenible

Motivación - 24

Page 22: Aspectos y seguridad

Seguridad y AOP

1. Código más mantenible

2. Separación de responsabilidades (especialización)

Motivación - 25

Page 23: Aspectos y seguridad

Seguridad y AOP

1. Código más mantenible

2. Separación de responsabilidades (especialización)

3. Las interacciones framework-applicationestán bien definidas

Motivación - 26

Page 24: Aspectos y seguridad

Ejemplo (1)

void around():

execution(String Encrypter.getPrivateKey())

{

if(!Policy.isAllowed( ... ))

throw new RuntimeException(“Denied!”);

else

proceed();

}

27

Page 25: Aspectos y seguridad

Ejemplo (2)

privileged aspect Sniffing {

after(Encrypter e):

set(private String Encrypter.privateKey)

&& this(e)

{

System.out.println(“The key is ” + e.privateKey);

}

}

28

Page 26: Aspectos y seguridad

HACIA UN SISTEMA DE PERMISOS2 – Aspectos y Seguridad

29

Page 27: Aspectos y seguridad

Identificando el problema

• Usar aspectos para mejorar la seguridad puede ser un arma de doble filo

Aspectos y Seguridad - 30

Page 28: Aspectos y seguridad

Identificando el problema

• Usar aspectos para mejorar la seguridad puede ser un arma de doble filo

1. Invocation Interception

2. Privileged Aspects

Aspectos y Seguridad - 31

Page 29: Aspectos y seguridad

1. Invocation Interception

• Parameter Alteration / Invocation hijacking

pointcut polcheck():

execution(boolean Policy.isAllowed(..));

boolean around(): polcheck() {

boolean res = proceed();

return true;

}

32

Page 30: Aspectos y seguridad

1. Invocation Interception

• Parameter Alteration / Invocation hijacking

pointcut polcheck():

execution(boolean Policy.isAllowed(..));

boolean around(): polcheck() {

boolean res = proceed();

return true;

}

33

Page 31: Aspectos y seguridad

2. Privileged aspects

• Altera propiedades de encapsulación de Java

34

Page 32: Aspectos y seguridad

2. Privileged aspects

• Altera propiedades de encapsulación de Java

• ¿Son necesarios los aspectos privileged?

35

Page 33: Aspectos y seguridad

Problemas

• Advices, inter-type declarations pueden alterar el estado de un objeto

36

Page 34: Aspectos y seguridad

Problemas

• Advices, inter-type declarations pueden alterar el estado de un objeto

• La interacción de dos o más módulos puede ser influenciada

37

Page 35: Aspectos y seguridad

Problemas

• Advices, inter-type declarations pueden alterar el estado de un objeto

• La interacción de dos o más módulos puede ser influenciada

• Un programa “seguro” sin aspectos no lo es necesariamente con aspectos.

38

Page 36: Aspectos y seguridad

Problemas

• Advices, inter-type declarations pueden alterar el estado de un objeto

• La interacción de dos o más módulos puede ser influenciada

• Un programa “seguro” sin aspectos no lo es necesariamente con aspectos.

• …intencional o accidentalmente

39

Page 37: Aspectos y seguridad

Soluciones propuestas

• Invocation Interception

– Uso de declare precedence

40

Page 38: Aspectos y seguridad

Soluciones propuestas

• Invocation Interception

– Uso de declare precedence

• No es suficiente!

– Se vuelve intratable con muchos aspectos

– No hay un aspecto en el tope de la jerarquía

41

Page 39: Aspectos y seguridad

Soluciones propuestas

• Privileged Aspects

– Eliminarlos por completo

42

Page 40: Aspectos y seguridad

Soluciones propuestas

• Privileged Aspects

– Eliminarlos por completo

• No es suficiente!

– Adaptar un módulo no diseñado para ser “seguro”

– Una política puede depender del estado interno de un módulo

43

Page 41: Aspectos y seguridad

Soluciones propuestas

• Modificar o extender el lenguaje de aspectos

– Por ejemplo, describir qué partes pueden ser accedidas por cierto módulo

44

Page 42: Aspectos y seguridad

Soluciones propuestas

• Modificar o extender el lenguaje de aspectos

– Por ejemplo, describir qué partes pueden ser accedidas por cierto módulo

• No es suficiente!

– Abstracciones de aspectos son “compiladas” en abstracciones de objetos

• Los aspectos desaparecen

45

Page 43: Aspectos y seguridad

An Aspect Permission System

• Funcionamiento en tiempo de ejecución (load-time o run-time)

46

Page 44: Aspectos y seguridad

An Aspect Permission System

• Funcionamiento en tiempo de ejecución (load-time o run-time)

• Inserción de chequeos de seguridad (weaving)

47

Page 45: Aspectos y seguridad

An Aspect Permission System

• Funcionamiento en tiempo de ejecución (load-time o run-time)

• Inserción de chequeos de seguridad (weaving)

• Mantener una identidad de los aspectos (en caso de inlining)

48

Page 46: Aspectos y seguridad

HISTORY-BASED ACCESS CONTROL3 – Un sistema de permisos con AOP

49

Page 47: Aspectos y seguridad

History-based vs Stack-basedinspection

• Los aspectos son “compilados” (woven) a bytecode

50

Page 48: Aspectos y seguridad

History-based vs Stack-basedinspection

• Los aspectos son “compilados” (woven) a bytecode

=> Los advices no dejan trazas en el stack

51

Page 49: Aspectos y seguridad

History-based vs Stack-basedinspection

• Los aspectos son “compilados” (woven) a bytecode

=> Los advices no dejan trazas en el stack

• Por lo tanto, necesitamos mirar algo más que el Stack en presencia de Aspectos

54

Page 50: Aspectos y seguridad

Contexto y Caso de estudio

55

• jFTPd

Page 51: Aspectos y seguridad

History-based Access Control

1) Weaver-based para reforzar los chequeos en run-time

2) History-based para el modelo de control de acceso

56

Page 52: Aspectos y seguridad

1) Weaver-based

• Implementación:

– Sólo afecta al weaver de aspectos

– La JVM no sufre modificaciones

– Basado en anotaciones

57

Page 53: Aspectos y seguridad

1) Weaver-based

• Implementación:

– Sólo afecta al weaver de aspectos

– La JVM no sufre modificaciones

– Basado en anotaciones

• Independiente de la estrategia y del momento del weaving

58

Page 54: Aspectos y seguridad

1) Weaver-based

• Implementación:

– Sólo afecta al weaver de aspectos

– La JVM no sufre modificaciones

– Basado en anotaciones

• Independiente de la estrategia y del momento del weaving

• Los aspectos no pueden interferir con el modelo de seguridad

59

Page 55: Aspectos y seguridad

1) Weaver-based

class Secret {

@CheckAOPPermission(

permission=“SecretPermission”

)

private String secret;

...

}

60

Page 56: Aspectos y seguridad

2) History-based

• Permisos actuales dependen de todos los permisos anteriores

61

Page 57: Aspectos y seguridad

2) History-based

• Permisos actuales dependen de todos los permisos anteriores

1. Derechos estáticos (static rights, SR)

2. Derechos actuales (current rights, CR)

CR0 = SR

CRi ≤ ∩k<i CRk

62

Page 58: Aspectos y seguridad

2) History-based

• En load-time (o compile-time) se asignan los SR de cada aspecto

63

Page 59: Aspectos y seguridad

2) History-based

• En load-time (o compile-time) se asignan los SR de cada aspecto

• Centrado en la clase PermissionManager

64

Page 60: Aspectos y seguridad

2) History-based

• En load-time (o compile-time) se asignan los SR de cada aspecto

• Centrado en la clase PermissionManager

• Cuando corresponda, se llama a demand(Permission p) para chequear

CR = p v p => CR

65

Page 61: Aspectos y seguridad

History-based Access Control

66

Page 62: Aspectos y seguridad

67

Page 63: Aspectos y seguridad

Ejemplo

PermissionManager mngr =

PermissionManager.getPermissionManager();

AOPPermission perm =

new SensitiveOpPermission();

mngr.demand(perm);

<sensitive operation>

68

Page 64: Aspectos y seguridad

Ejemplo

PermissionManager mngr =

PermissionManager.getPermissionManager();

AOPPermission perm =

new SensitiveOpPermission();

mngr.demand(perm);

<sensitive operation>

69

Page 65: Aspectos y seguridad

Ejemplo

PermissionManager mngr =

PermissionManager.getPermissionManager();

AOPPermission perm =

new SensitiveOpPermission();

mngr.demand(perm);

<sensitive operation>

70

Page 66: Aspectos y seguridad

Ejemplo

PermissionManager mngr =

PermissionManager.getPermissionManager();

AOPPermission perm =

new SensitiveOpPermission();

mngr.demand(perm);

<sensitive operation>

71

Page 67: Aspectos y seguridad

Ejemplo

PermissionManager mngr =

PermissionManager.getPermissionManager();

AOPPermission perm =

new SensitiveOpPermission();

mngr.demand(perm);

<sensitive operation>

72

Page 68: Aspectos y seguridad

Implicit Modifications

// advice before weaving

before(): ... { <something useful> }

// advice after weaving

before(): ... {

PermissionManager mngr = PM.getPM();

mngr.updateCurrent(<full aspect name>);

<something useful>

}

73

Page 69: Aspectos y seguridad

Explicit Modifications

• grant(Permission) { <block> }

– Ejecuta <block> con permisos elevados

• accept(Permission) { <block> }

– Los permisos son elevados si <block> termina normalmente

74

Page 70: Aspectos y seguridad

Evaluación del Prototipo

• Modificación del weaver/compiler + librería a run-time (PermissionManager)

• 3 Permisos principales: Config, Auth, CoreLoop

75

Page 71: Aspectos y seguridad

Tiempos de Ejecución [seg]

76

Page 72: Aspectos y seguridad

Evaluación de este enfoque

• El modelo History-based es muy estricto comparado con uno Stack-based

• Una implementación ideal requeriría integrar el sistema al compilador y al lenguaje base

• No toma en cuenta el mecanismo de

class-loading

77

Page 73: Aspectos y seguridad

CLASS-BASED SECURITY4 – AOP y el modelo de seguridad de Java

78

Page 74: Aspectos y seguridad

Class-based security

• Al considerar el mecanismo de class-loading, el supuesto de identidad de aspectos ya no es válido

79

Page 75: Aspectos y seguridad

Class-based security

• Al considerar el mecanismo de class-loading, el supuesto de identidad de aspectos ya no es válido

• ¿Cómo integrar aspectos con el modelo de clases de Java?

80

Page 76: Aspectos y seguridad

Dynamic Class Loading

• La carga de clases en Java es de manera dinámica y lazy

81

Page 77: Aspectos y seguridad

Dynamic Class Loading

• La carga de clases en Java es de manera dinámica y lazy

• Separa clases confiables de las no confiables

82

Page 78: Aspectos y seguridad

Dynamic Class Loading

• La carga de clases en Java es de manera dinámica y lazy

• Separa clases confiables de las no confiables

• La identidad de una clase está dada por su full-qualified name más su defining classloader

83

Page 79: Aspectos y seguridad

Dynamic Class Loading

• Objetivos

– Asignación de Protection Domains

– Separación de Namespaces

– …Entre otros

84

Page 80: Aspectos y seguridad

Asignación de Protection Domains

• Cada class loader asigna un protectiondomain a las clases que define

85

Page 81: Aspectos y seguridad

Asignación de Protection Domains

• Cada class loader asigna un protectiondomain a las clases que define

• Un protection domain encapsula los permisos asignados a las clases del dominio

86

Page 82: Aspectos y seguridad

Asignación de Protection Domains

• Por lo tanto, un aspecto también tendrá un protection domain asignado

87

Page 83: Aspectos y seguridad

Asignación de Protection Domains

• Por lo tanto, un aspecto también tendrá un protection domain asignado

• Al usar inlining, un aspecto puede “compilar” un advice dentro de una clase confiable

88

Page 84: Aspectos y seguridad

Asignación de Protection Domains

• Por lo tanto, un aspecto también tendrá un protection domain asignado

• Al usar inlining, un aspecto puede “compilar” un advice dentro de una clase confiable

• Por lo que el protection domain del aspecto no se conserva en algunos casos

89

Page 85: Aspectos y seguridad

Separación de namespaces

• Los aspectos también pueden quebrar este principio por medio del inlining

90

Page 86: Aspectos y seguridad

Separación de namespaces

• Los aspectos también pueden quebrar este principio por medio del inlining

• Al resolver una clase, un advice puede usar el defining class-loader del join point shadow en vez del class-loader que define al aspecto

91

Page 87: Aspectos y seguridad

Evaluación de AspectJ

92

Defining class loader

la : aspectolb : tipo dinámico del llamadorlc : tipo estático del llamadold : tipo dinámico del llamado

Permite el weaving de un advice

No permite el weaving de un advice

Page 88: Aspectos y seguridad

Evaluación de AspectJ

• lb ≤ lc y lc ≥ ld (por restricciones de JVM)

• Si la es ancestro de lb lc ld entonces es posible hacer un advice (lo cual no es deseable)

• Hacer un advice a partir de b requiere la ≥ lb

• Caso especial cuando la < o ≠ lb , la < lc, la ≥ ld

asdf - 93

Page 89: Aspectos y seguridad

Observación

• Load-time weaving de AspectJ usa su propio class-loader, lo que impide tener separación de namespaces efectiva

• Sin embargo, AspectJ ofrece otras formas de weaving en compile o post-compile time

94

Page 90: Aspectos y seguridad

CONCLUSIONES

95

Page 91: Aspectos y seguridad

Conclusiones

• AOSD permite una buena separación de intereses en cuanto a Seguridad

• Sin embargo, es un arma de doble filo

• La inserción de untrusted aspects requiere una arquitectura más elaborada

• Aun así, AspectJ por ejemplo, no está 100% integrado al modelo de clases de Java

96