Download análisis basado en modelos de las configuraciones

Document related concepts
no text concepts found
Transcript
Traducción por: M.C.E. Christian Mauricio Castillo Estrada
Fecha de Traducción: Mayo de 2016
Material usado en la materia: Desarrollo de Sistemas de Información basados en Web I Java EE (8°U)
Artículo publicado en: MiSE’16, May 16-17 2016, Austin, TX, USA.
Año de publicación: Mayo de 2016
ANÁLISIS BASADO EN MODELOS DE LAS CONFIGURACIONES DE SEGURIDAD
WEB DE JAVA EE
Resumen
El uso generalizado de aplicaciones web Java EE
como un medio para proporcionar servicios
distribuidos a clientes remotos impone fuertes
requerimientos de seguridad, de manera que los
recursos manejados por estas aplicaciones
permanezcan protegidos contra revelaciones y
manipulaciones no autorizadas.
Para este propósito, el framework Java EE
proporciona a los desarrolladores mecanismos
para definir políticas de control de acceso.
Desafortunadamente, la variedad y complejidad
de la seguridad proporcionada y los mecanismos
de configuración hacen que la definición y
manipulación de una política de seguridad sea
compleja y propensa a errores. Como los
requisitos de seguridad no son estáticos, y por lo
tanto, las políticas implementadas deben
cambiarse y revisarse a menudo, descubrir y
representar la política en un nivel de abstracción
adecuado para permitir su comprensión y
reingeniería aparece como un requisito crítico.
Para abordar este problema, este documento
presenta un enfoque (basado en modelos) dirigido
a ayudar a los expertos en seguridad a visualizar,
(automáticamente) analizar y manipular las
políticas de seguridad web.
Palabras clave
Seguridad, Control de acceso, Ingeniería-Inversa.
El permiso para hacer copias digitales o respaldos de todo o una
parte de este trabajo para uso personal o de salón de clases es
permitido sin cargo alguno en el entendido de que las copias no
son hechas o distribuidas para obtener beneficios o ventajas
comerciales y que las copias contienen esta advertencia y una
cita completa en la primera página. Para cualquier otro tipo de
copia, republicar y distribución en servidores o para redistribuir
en listas, requiere de un permiso específico y/o cargo.
Copyright is held by the owner/author(s). Publication rights
licensed to MiSE’16, May 16-17 2016, Austin, TX, USA. 2016
Copyright held by the owner/author(s). Publication rights
licensed to ACM.
1. INTRODUCCIÓN
Java EE es una tecnología popular de elección para
el desarrollo de aplicaciones web dinámicas, que
también sirve como capa base para otros marcos
de propósito menos general. Java EE facilita la
exposición de información y servicios distribuidos
a usuarios remotos. En este escenario, la
seguridad es una preocupación principal [16], ya
que los recursos web que constituyen la aplicación
web pueden ser potencialmente accedidos por
muchos usuarios sobre redes no confiables. Como
consecuencia, el framework Java EE proporciona a
los desarrolladores las herramientas para
especificar las políticas de control de acceso a fin
de asegurar las propiedades de confidencialidad e
integridad de los recursos expuestos por las
aplicaciones web.
Desafortunadamente,
ya
pesar
de
la
disponibilidad de estos mecanismos de seguridad,
la implementación de configuraciones de
seguridad sigue siendo una actividad compleja y
propensa a errores, donde se necesita alto
1
conocimiento para evitar inconsistencias y
problemas de configuración, que podrían causar
daños críticos a los negocios. A medida que los
recursos gestionados por la aplicación web
pueden ser accedidos por muchos usuarios y
atravesar redes desprotegidas. La divulgación
involuntaria de datos puede dar lugar a
importantes pérdidas tanto en términos de dinero
como de reputación.
1. Escribir restricciones en el archivo de descriptor
web XML utilizando un conjunto de elementos de
etiqueta predefinidos.
2. Escribir anotaciones (con una sintaxis y
organización diferentes w.r.t los elementos de la
etiqueta XML) en los componentes de Java Servlet.
Ambos mecanismos pueden utilizarse en la misma
aplicación Java EE, por lo que se necesitan reglas
de combinación para obtener la política de
seguridad final. En este contexto, el
descubrimiento y la comprensión de las políticas
de seguridad que realmente están siendo
aplicadas por una aplicación web dada se
presentan como un requisito fundamental. El
principal reto para este proceso de
descubrimiento es salvar la brecha entre la
representación de políticas de bajo nivel dispersa
y una representación global de alto nivel, más fácil
de entender y manipular. Para abordar este
problema, proporcionamos, para el caso de las
aplicaciones web Java EE:
1. Una unificación lingüística de los dos mecanismos
declarativos de especificación de restricciones
proporcionados por el marco de Java EE, de manera que
las contribuciones de ambos mecanismos pueden ser
analizadas por los mismos procedimientos y
herramientas.
2. Un proceso de ingeniería inversa que extrae las
configuraciones de seguridad implementadas mediante
el uso de los diversos mecanismos Java EE y los integra
a un modelo de seguridad conforme a un metamodelo
de seguridad web propuesto.
3. Una demostración de las aplicaciones y ventajas de
utilizar una representación basada en modelos
integrados, dado que esto permite la reutilización en el
dominio de seguridad del gran número de técnicas y
herramientas modeladas que se pueden aplicar para
visualizar, analizar, evolucionar, etc.
Nuestro enfoque complementa los trabajos existentes
de ingeniería inversa de Java que saltan aspectos de
seguridad [3, 5].
Demostramos la viabilidad de nuestro enfoque a
través de un prototipo de implementación de
herramientas y su aplicación a una muestra de
aplicaciones reales de Java EE disponibles GitHub.
El resto del artículo está organizado de la siguiente
manera. La Sección 2 presenta el mecanismo de
control de acceso diverso proporcionado por el
marco de Java EE, mientras que la Sección 3
introduce nuestro enfoque para extraer una
representación de modelo integrada de ellos. La
Sección 4 describe una serie de escenarios de
aplicación relevantes. La evaluación del enfoque
se proporciona en la Sección 5, seguida en la
Sección 6 por una breve descripción del soporte de
herramientas que proporcionamos para lograr la
automatización.
Concluimos el trabajo discutiendo el trabajo
relacionado en la Sección 7 y proporcionando
futuras líneas de investigación y conclusiones en la
Sección 8.
2.- SEGURIDAD WEB EN JAVAEE
A grandes rasgos, en el framework Java EE, cuando
un cliente web realiza una solicitud HTTP, el
servidor web traduce la solicitud en llamadas HTTP
Servlet a componentes web (Servlets y Java Server
Pages) que pueden responder directamente o, a
su vez, Java Beans (EJBs) para realizar operaciones
de lógica de negocios más complejas. En este
esquema, un requisito muy importante es
asegurar la confidencialidad e integridad de los
recursos gestionados por la aplicación web. En
este sentido, el framework Java EE proporciona
instalaciones de control de acceso listas para usar.
A continuación describiremos brevemente el
mecanismo que ofrece Java EE para la
implementación de políticas de control de acceso
para aplicaciones web.
2.1 CONTROL DE ACCESO
Las aplicaciones Java EE suelen estar constituidas
por JSP y Servlets. El mecanismo de control de
acceso en su lugar se encarga de controlar el
acceso a estos elementos junto con cualquier otro
artefacto almacenado en la web y accesible
(páginas HTML puras, documentos multimedia,
etc.). 1 Dos sabores están disponibles para
especificar políticas de seguridad a este nivel:
2
Declarativa y programática, siendo esta última
prevista para los casos en que se requiera un
control de acceso fino, que requiera una
evaluación del contexto del usuario.
Respecto a las políticas de control de acceso
declarativo, existen dos alternativas: 1) escribir las
restricciones de seguridad en un Descriptor de
Despliegue Portátil (web.xml) y 2) escribir
anotaciones de seguridad como parte del código
Servlets Java (tenga en cuenta que no todas las
configuraciones de seguridad pueden ser
Especificado mediante anotaciones).
<security -constraint>
< display-name>
GET To Employees
< / display-name>
<web-r e s o u r c e-c o l l e c t i o n >
<web-r e s o u r c e-name>
Restricted
< / web-r e s o u r c e-name>
< u r l-p a t t e r n >
/ r e s t r i c t e d / employee / < / u r l-p a t t e r n >
< h t t p-method>GET< / h t t p-method>
< / web-r e s o u r c e-c o l l e c t i o n >
<auth-c o n s t r a i n t >
< r o l e-name>Employee< / r o l e-name>
< / auth-c o n s t r a i n t >
<us e r-da t a-c o n s t r a i n t >
< t r a n s p o r t -g u a r a n t e e >
NONE
< / t r a n s p o r t -g u a r a n t e e >
< / us e r-da t a-c o n s t r a i n t >
< / s e c u r i t y -c o n s t r a i n t >
Listado 1: Restricción de seguridad en web.xml
Consideremos una aplicación web corporativa con
un área restringida para empleados y donde se
define un rol Empleado. El Listado 1 muestra una
restricción de seguridad definida en un descriptor
web.xml que restringe el acceso (al utilizar el
método HTTP GET) al área de empleados a los
usuarios que tienen la función Empleado.
Contiene tres elementos principales: una
colección de recursos web que especifica la ruta
de los recursos afectados por la restricción de
seguridad y el método HTTP utilizado para ese
acceso (en este caso, la ruta/restricted/employee
* y el método GET); Una restricción de
autorización que declara qué funciones, si las hay,
tienen acceso a los recursos
(Sólo el rol Empleado en el ejemplo) y una
restricción de datos de usuario que determina
cómo deben viajar los datos de usuario desde y
hacia la aplicación web, establecida en Ninguno
(es decir, se acepta cualquier tipo de transporte)
en el ejemplo.
La restricción de seguridad equivalente, definida
por medio de anotaciones, se muestra en el
Listado 2. La anotación @WebServlet identifica el
servlet y la ruta del recurso en el contenedor web.
Entonces, la anotación de seguridad principal es
@ServletSecurity que tiene dos atributos: value,
que corresponde a una anotación anidada @ HttpConstraint y httpMethodConstraint que contiene
una lista de anotaciones @HttpMethodConstraint
anidadas. El @HttpConstraint se utiliza para
representar una restricción de seguridad que se
aplicará a todos los métodos HTTP mientras que el
segundo se utiliza para definir las restricciones de
método por-HTTP.
Ambos,
@HttpConstraint
y
@HttpMethodConstraint
contienen
como
atributos una lista de roles permitidos
(allowedRoles), los requisitos de protección de
datos (equivalente al elemento de restricción de
datos de usuario en el archivo web.xml) y el
comportamiento cuando la lista de roles
permitidos está vacía.
1 @WebServlet (
2 name = " R e s t r i c t e d S e r v l e t " ,
3 urlPatterns ={ " / r e s t r i c t e d / employee
/
"})
4 @S e r v l e t S e c u r i t y ( ( h t t pMe t h o dCo n
straints={
5 @Ht tpMe thodCons t r a int (
6 value = "GET" ,
7 rolesAllowed = " Employee " )
8 t r a n s p o r tGu a r a n t e e = Tr a n s p o r tGu
a r a n t e e . None ) } )
9 p u b l i c c l a s s RestrictedServlet e x t e n d s
HttpServlet { . . . }
Listado 2: Servlet anotado
2.1 COMBINACIÓN DE POLITICAS Y REGLAS
Ambas alternativas declarativas mencionadas
anteriormente pueden utilizarse al mismo tiempo
y la política de seguridad final es el resultado de
combinar las restricciones de seguridad
especificadas con ambos mecanismos. Sin
embargo, en caso de conflictos, las restricciones
3
especificadas en el archivo web.xml tienen
prioridad y, además, las restricciones definidas
mediante anotaciones pueden ser completamente
ignoradas si así se establece en el descriptor
web.xml (el conjunto de parámetros metadatacomplete como true) Lo que puede crear
claramente situaciones confusas para los no
expertos.
Además, las políticas de control de acceso
definidas con los mecanismos descritos
anteriormente pueden contener inconsistencias
(reglas que establecen diferentes acciones de
acceso para el mismo recurso). Estas
incoherencias se resuelven utilizando precedencia
de reglas, semántica de ejecución y algoritmos de
combinación definidos en la especificación Java EE
Servlet.
Desafortunadamente, mientras este proceso
elimina las inconsistencias en la política, puede
introducir anomalías de control de acceso típicas,
tales como sombreado y redundancia [8], junto
con otras mis configuraciones particulares al
control de acceso de Java EE.
Tenga en cuenta que, como se mencionó
anteriormente, las restricciones de control de
acceso de grano fino que requieren información
de contexto también pueden definirse en el marco
de Java EE. Estas restricciones no pueden definirse
declarativamente y requieren el uso de seguridad
programática. Ejemplos de ello serían las
restricciones que verifican que un usuario tiene
dos funciones o que una conexión sólo puede ser
aceptada en intervalos de tiempo específicos.
Dejamos el análisis de estas limitaciones
programáticas finas como un trabajo futuro.
Observe también que la especificación Java EE
recomienda un uso preferencial de seguridad
declarativa siempre que sea posible.
Figura 1: Análisis de aplicaciones web de Java EE
3. METODO
Nuestro método, representado en la Figura 1,
recoge la información de seguridad contenida en
una aplicación Java EE extrayéndola hacia
representaciones de modelos. A continuación, los
unifica e integra en un modelo específico de
dominio (por medio de transformaciones de
modelos), de manera que las manipulaciones de
los modelos, las operaciones de consulta, etc.,
puedan aplicarse posteriormente sobre ella para
analizar y gestionar la configuración de seguridad.
El metamodelo específico del dominio y el proceso
de extracción se describen en el resto de esta
sección.
3.1 MetaModelo /MetaModel
Antes del proceso de extracción, se requiere la
definición de metamodelos capaces de
representar con precisión la información
contenida en los archivos fuente de configuración.
Para ello se utilizará el metamodelo de seguridad
Servlet Access-Control (en adelante denominado
metamodelo de seguridad Servlet) representado
en la figura 2. Tanto las anotaciones como las
definiciones de seguridad XML comparten
semántica similar y por lo tanto pueden ser
asignadas a esta sintaxis abstracta de metamodelo
que nos permite ir directamente desde sus
representaciones de modelo de bajo nivel (modelo
Java y modelo XML, ya disponibles en el marco
MoDisco [3]) a nuestra seguridad Metamodelo sin
necesidad de definir metamodelos de seguridad
específicos intermedios para su representación.
El metamodelo Servlet Security permite manejar
roles de seguridad (clase SecurityRole) y
restricciones
de
seguridad
(clase
SecurityConstraint) en una aplicación web
determinada. El primero específica los roles de
seguridad definidos por la directiva de seguridad.
Este último se utiliza para representar las
restricciones de control de acceso, procedentes de
descriptores web XML
O anotaciones Java (atributo de origen), en una
colección
de
recursos
web
(clase
WebResourceCollection). Cada colección de
recursos web identifica los recursos (atributo
urlPattern) y los métodos HTTP (clase
HttpMethod) a los que se aplica una restricción de
seguridad. Es importante tener en cuenta que si un
método HTTP se define como omitido (atributo de
4
omisión), la restricción de seguridad se aplica a
todos los métodos excepto al método omitido.
El conjunto de roles que participan en la
restricción de seguridad para una colección de
recursos web se agrupan bajo una restricción de
autorización (clase AuthConstraint). La ausencia
de un elemento AuthConstraint en una restricción
dada representa el acceso público mientras que la
exclusión total está representada por su presencia
sin asociación de funciones.
Una restricción de seguridad también puede
asociarse con un requisito de protección de datos
dado (clase UserDataConstraint). Este requisito de
protección de datos puede definirse como:
NINGUNO indicando que el contenedor debe
aceptar peticiones cuando se reciben en cualquier
conexión, INTEGRAL estableciendo un requisito
para la integridad del contenido y CONFIDENCIAL,
estableciendo
un
requisito
para
la
confidencialidad de la comunicación.
3.2 Proceso de Extracción
Una vez que un metamodelo capaz de describir las
definiciones de control de acceso de Java EE está
disponible, podemos extraer la información de
control de acceso definida para la aplicación web.
El proceso de extracción, que se muestra en la
Fig.1, consta de tres pasos, a saber, el
descubrimiento de modelos, transformación e
integración y análisis.
El paso de descubrimiento del modelo se basa en
Modisco que analiza el código fuente de Java y el
descriptor web XML para obtener las
representaciones correspondientes del modelo, a
saber, un modelo Java y un modelo XML. Al
hacerlo, pasamos del espacio técnico de
anotaciones de código fuente y archivos XML a la
del dominio modelware. Los modelos obtenidos
son manipulados y la información de seguridad
contenida se mezcla en el paso de transformación
e integración para obtener un modelo que se
ajuste al metamodelo de seguridad Servlet
propuesto (modelo de seguridad web en la figura).
Este paso de transformación e integración se
basan en ATL [9], un lenguaje de transformación
de modelo.
El código ATL para la transformación e integración
incluye 19 reglas y 31 ayudantes. 10 reglas y 6
ayudantes tratan con la información contenida en
el descriptor XML, mientras que las 9 reglas
restantes y 25 ayudantes se encargan de la
información de seguridad dentro del modelo de
código fuente.
El mencionado proceso nos permite facilitar las
operaciones de manipulación necesarias para
analizar las políticas w.r.t. Una manipulación
directa de las restricciones definidas por separado
en las anotaciones XML y código fuente con
técnicas más básicas (como manipulación de texto
o transformación xslt). Concretamente, nos
permitirá: 1) utilizar herramientas y marcos bien
conocidos de la unidad de modelado y 2) tratar la
información de seguridad de una manera
uniforme, sin tener en cuenta si fue especificada
usando XML o anotaciones. Observe sin embargo
que estos modelos se encuentran en el mismo
nivel de abstracción de las configuraciones
originales y por lo tanto, no se produce pérdida de
información en el proceso de extracción.
El Listado 3 muestra una regla ATL, parte de la
transformación para extraer directivas de control
de acceso, que mapea Servlets anotados a
entidades de SecurityConstraint.
Tenga en cuenta que con el fin de hacer
transparente a los usuarios los detalles técnicos de
bajo nivel necesarios para usar MoDisco y ATL,
hemos desarrollado una herramienta bajo Eclipse,
que permite al usuario seleccionar un proyecto
Java EE determinado y su descriptor web a través
de una GUI simple Para derivar el modelo de
seguridad
Servlet
correspondiente.
Tal
herramienta puede emplearse como soporte para
diferentes tipos de aplicaciones.
1 lazy rule createSecurityConstraint {
2 from
3 s : JAVA!Annotation
4 us ing {
5 servletAnnotation : JAVA!Annotation =
6 s . getContainerAnnotation(’ServletSecurity’) ; }
7 to
8 t : SEC!SecurityConstraint (
9 webResourceCollection <�
10 thisModule . createWebResourceCollection(
11 servletAnnotation . getWebServlet , s) ,
12 authConstraint <�
13 i f s . getEmptyRoleSemantic = ’PERMIT’ then
14 thisModule . createAuthConstraint(s , true)
15 e l s e
16 thisModule . createAuthConstraint(s , false)
5
17 endi f ,
18 source <- #CODE)
19 }
Listado 3: Regla ATL para asignar servlets anotados de
seguridad a Restricciones de seguridad
El último paso de nuestro enfoque, a saber, el
análisis y la manipulación de las configuraciones
de seguridad extraídas se demostrará en la
siguiente sección mediante la descripción de una
serie de escenarios de aplicación.
4. APLICACIONES
Tener toda la información de control de acceso de
una aplicación web Java EE reunida y representada
en la forma de un modelo integrado
correspondiente a nuestro metamodelo Servlet
Security, permite la reutilización de una amplia
gama de herramientas y técnicas probadas de
modelo Derivan interesantes aplicaciones de
análisis. En el siguiente, discutiremos algunos de
ellos, enfocándonos en el cálculo de consultas y
métricas y discutiendo brevemente el resto.
4.1 Problema
Una de las aplicaciones más inmediatas de nuestro
metamodelo es utilizar lenguajes de consulta
como OCL o IncQuery [2] para realizar operaciones
de consulta y métricas sobre la información de
nuestro modelo. Desde simples consultas como la
lista de todos los recursos alcanzables por un tema
dado a operaciones más complejas como la
detección de roles equivalentes (un
Mal olor para una posible ruptura en la estrategia
de menor privilegio), nuestro modelo de
representación, extracción de modelos y el
enfoque de integración facilitar el análisis de la
seguridad de una aplicación JEE, reduciendo la
complejidad de la realización de tales operaciones
w.r.t. Trabajar con los mecanismos de
configuración originales y hacer la integración
necesaria a mano.
Como ejemplo, mostraremos aquí la definición de
una métrica que cuenta los recursos libremente
accesibles. Recuento de consulta de recursos de
acceso abierto: los recursos de las aplicaciones
Java EE pueden ser visibles para un conjunto
reducido de usuarios que tienen determinados
roles o que son de libre acceso para todos,
independientemente de sus funciones. Una
inspección manual de la aplicación para descubrir
los recursos de acceso abierto puede ser una tarea
tediosa, sin embargo aprovechando el
metamodelo Servlet Security propuesto, podemos
definir fácilmente una métrica para detectar y
contar este tipo de recursos.
1 query unreachableResources =
2 SEC!SecurityConstraint . allInstances ( )
3 ->select(sc | sc . authConstraint . oclIsUndefined ( ) )
4 ->collect(sc | sc . webResourceCollection)->flatten ( )
5 ->collect(wrc | wrc . urlPattern)->flatten ( )
6 ->collect(up | up . value)->flatten ( )
7 ->asSet ( )->asSequence ( )->size ( ) ;
Listado 4: Consulta métrica para contar los recursos de
acceso abierto
El Listado 4 muestra una posible consulta OCL
capaz de detectar recursos de acceso abierto. Se
seleccionan todas las restricciones de seguridad
que no definen una restricción de autorización
(authConstraint), ya que no imponen ninguna
restricción de acceso a los recursos declarados
dentro de la restricción (ver líneas 2-3). A
continuación, se recogen las direcciones URL
dentro de cada recurso contenido en las
restricciones seleccionadas (ver líneas 4-6) y
finalmente se cuentan (véase la línea 7).
4.2 Exactitud
Las propiedades de corrección de la definición de
seguridad se pueden verificar realizando consultas
sobre nuestro modelo de seguridad extraído. La
detección de configuraciones erróneas (por
ejemplo, la accesibilidad de recursos rotos,
dejando recursos inaccesibles por cualquier
función) se habilita así ayudando a los
desarrolladores a verificar fácilmente sus
configuraciones de seguridad y encontrar posibles
errores. A modo de ejemplo, en lo que sigue
daremos detalles sobre cómo comprobar una
propiedad de seguridad muy importante para
configuraciones de seguridad de Java EE, por
ejemplo, la propiedad de completitud.
Propiedad de completitud y consulta: Al definir
una restricción de control de acceso sobre un
recurso determinado, los desarrolladores deben
asegurar que especifican la política para cada
forma de acceso al recurso, si no lo hace, puede
dejar información inesperadamente disponible (o
inesperadamente excluida). Esto es especialmente
cierto para el marco de Java EE
6
Debido a la semántica específica de sus políticas
de seguridad. Si se nombra un método HTTP en
una restricción de seguridad, se deben especificar
todos los demás métodos HTTP estándar en la
misma o en otra restricción de seguridad que
coincida con el mismo conjunto de solicitudes. De
lo contrario, los métodos HTTP no denominados se
considerarán como descubiertos, dando acceso
sin restricciones a ellos.
Figura 3: Visión de visualización de la política de Sirius
En el ejemplo 1 se muestra un ejemplo de una
restricción de seguridad que viola esta propiedad.
En el ejemplo, se define una restricción para el
método GET, indicando que sólo se permiten los
usuarios que tienen la función Empleado. Sin
embargo, no se dice nada sobre ningún otro
método HTTP. En ausencia de otras restricciones
con un patrón URL idéntico, esta, y por lo tanto, se
concederá acceso sin restricciones a cualquier
método HTTP diferente de GET. En el Listado 5
mostramos la consulta que calcula la propiedad
“completeness”.
1 contextHttpMethod inv :
2 let HTTP_METHODS : Sequence (OclAny) =
3 Sequence {’OPTIONS’ ,’GET’ ,’HEAD’ ,’POST’ ,
4 ’PUT’ ,’DELETE’ ,’TRACE’ ,’CONNECT’} in
5 l e t ALL_HTTP_METHODS : Sequence
(PSM!HttpMethod) =
6 PSM!HttpMethod . allInstances ( ) in
7 l e t httpMethodsToCheck : Sequence ( S t r i n g ) =
8 i f self . omission then
9 HTTP_METHODS->select(m | m = self . name)
10 e l s e
11 HTTP_METHODS->reject(m | m = self . name)
12 end if in
13 l e t selfUrlPatterns: Sequence (PSM!UrlPattern) =
14 self . refImmediateComposite ( ) . urlPattern in
15 selfUrlPatterns->iterate(sup ; output : Boolean =
true,!|
16 l e t declaredHttpMethods : Sequence
(PSM!HttpMethod) =
17 ALL_HTTP_METHODS->reject(hm | hm = self)
18 ->select(hm |
,!hm . refImmediateComposite ( ) . urlPattern
19 ->exists(up | sup . value = up . value) ) in
20 if declaredHttpMethods->isEmpty ( ) then
21 false
22 e l s e
23 output and httpMethodsToCheck
24 ->forAll(m | declaredHttpMethods
25 ->exists(dhm | dhm . name = m) )
26 endif
Listado 5: Consulta OCL para calcular la propiedad de
integridad
7
4.3 Visualización
La información gráfica a menudo es más fácil de
entender a simple vista que la textual. En este
sentido, las herramientas de generación de
workbench basadas en Modelos como Sirius2
permiten la definición de diferentes puntos de
vista para un lenguaje específico de dominio, de
modo que se pueden obtener diferentes
representaciones gráficas sin necesidad de
manipular el modelo fuente para crear la vista. De
esta manera, podemos obtener representaciones
generales, resumiendo la política de control de
acceso de una aplicación dada, o una
representación más detallada que muestra, por
ejemplo, la información de seguridad detallada
relacionada con un recurso o rol dado. La Figura 3
muestra la visualización obtenida para una
aplicación web simple donde los recursos web, los
roles y las restricciones definidas son visibles
(tenga en cuenta que para legibilidad algunas
relaciones se omite).
4.4 Representación de pivote
Nuestro metamodelo y proceso de extracción
también se puede utilizar como una
representación de pivote para construir puentes
hacia otras representaciones (modelo). Las
traducciones de nuestro metamodelo a lenguajes
de control de acceso más genéricos como
SecureUML o XACML [17] permitirían la
reutilización de la gran cantidad de investigación
realizada en el campo general del análisis de
acceso y control. Cabe destacar que las técnicas
formales de validación y verificación [14], junto
con el análisis del impacto del cambio [6] para las
políticas de control de acceso estarían disponibles.
Además, mediante la integración de nuestro
proceso de extracción y el modelo en los marcos
de reingeniería de Java EE podemos utilizar el
enfoque presentado aquí para 1) extraer las
configuraciones de control de acceso de una
aplicación web 2) aplicar el análisis de modelos y
técnicas de manipulación para encontrar una
correcta posible existente mis configuraciones o
Implementar refactorizaciones de seguridad y 3)
regenerar la aplicación web con una configuración
de seguridad correcta.
5. EVALUACIÓN
Con el fin de demostrar la viabilidad y la eficacia de
nuestro enfoque hemos construido una
herramienta de prototipo y llevó a cabo una
evaluación de una muestra de proyectos reales de
Java EE extraídos de GitHub.
De los proyectos recolectados, se realizaron dos
pasos de filtrado para eliminar proyectos de
juguete. Primero, filtramos manualmente aquellos
proyectos que incluyeran una de las siguientes
palabras en su nombre o ruta: prueba, muestra,
demo, ejemplo, tutorial, entrenamiento, ejercicio,
lección. En segundo lugar, a partir de los proyectos
a la izquierda, se derivó la representación modelo
de sus configuraciones de seguridad, y se filtraron
los que declararon menos de 5 restricciones de
seguridad, obteniendo de esta manera una
muestra compuesta de 16 proyectos.
Hemos realizado tres análisis sobre la muestra
anterior: primero, hemos aplicado nuestra
herramienta para obtener representaciones de
modelos de sus configuraciones de seguridad y
medido el tiempo para realizar la tarea, en
segundo lugar, hemos evaluado automáticamente
la consulta de corrección presentada en la Sección
4. Finalmente, Y para comprobar la existencia de
falsos
positivos,
hemos
comprobado
manualmente esta propiedad en la lista de
proyectos.
En la Tabla 1, que muestra para cada proyecto Java
EE el número de restricciones que componen su
configuración de seguridad y para la consulta de
corrección de seguridad, si se detecta una
anomalía manual y / o automáticamente, se
resumen los resultados obtenidos.
La Tabla 1 también muestra el tiempo que tomó
nuestra herramienta para extraer modelos de los
correspondientes proyectos web Java EE (gen.) Y
para evaluar (eval.) Nuestra propiedad de
corrección de seguridad sobre ellos. El tiempo de
extracción del modelo depende directamente del
número de archivos Java, mientras que el tiempo
para calcular las propiedades depende del número
de reglas de seguridad en la política y de la
complejidad de las interacciones entre reglas.
Ambas veces son razonablemente bajas para un
análisis offline y concretamente, el tiempo de
analizar las propiedades es siempre inferior a un
segundo.
Esta evaluación muestra que nuestro enfoque: 1)
tiene un buen rendimiento y por lo tanto es
adecuado para ser utilizado en escenarios reales 2)
8
la información de seguridad pertinente no se
pierde en el proceso y por lo tanto, se puede
analizar como si se hizo manualmente sobre el
original Los artefactos de configuración. Esto se
demuestra por la ausencia de falsos positivos o
falsos negativos en la evaluación de la propiedad
de completitud. Los mismos resultados son
obtenidos por ambos, nuestra herramienta y por
inspección manual.
6. HERRAMIENTAS DE SOPORTE
Ofrecemos soporte de herramientas que cubre
dos aspectos diferentes de nuestro trabajo. Por un
lado, hemos creado una herramienta que se basa
en Selenium [21] para muestrear de forma
aleatoria GitHub proyectos (para ser analizados
por cuestiones de seguridad). Por otra parte, se ha
desarrollado una herramienta como plugin bajo la
plataforma Eclipse [22] con el propósito de extraer
automáticamente modelos de seguridad de las
configuraciones existentes. Ambas herramientas
están disponibles en GitHub.4
control de acceso definidas responsables de ese
comportamiento, como lo hacemos nosotros. Más
similar al presente trabajo, en [19] los autores
presentan un metamodelo de seguridad y enfoque
de ingeniería inversa especialmente adaptado
para extraer las configuraciones de seguridad de la
web Content Management Systems (CMS) (un
lenguaje similar se presenta en [23]). En cambio,
no nos restringimos a una clase específica de
aplicaciones.
En cuanto a DSL de seguridad (web) en [18], se
presenta un perfil RBAC para modelos UML.
UmlSEC, otra extensión del lenguaje UML a los
requisitos de seguridad de alto nivel, se introduce
en [10] y se utiliza en [11] para modelar las
propiedades de seguridad de alto nivel (requisitos)
para propósitos de ingeniería avanzada. Más
enfocados en aplicaciones web, los enfoques de
modelado web, como construcciones de
seguridad [12] y [4] incluspecific, por lo menos
para especificar usuarios y roles y sus permisos de
acceso en partes del modelo de navegación web.
7. TRABAJOS RELACIONADOS
Varias otras obras abordan el problema de extraer
políticas de control de acceso de aplicaciones web
dinámicas. Sin embargo, se centran en tipos
específicos de aplicaciones, como CMS, o se
centran en la recuperación sólo de bajo nivel, la
aplicación intercontinental de control de acceso.
Nuestro trabajo se centra en la recuperación de las
configuraciones de seguridad de cualquier
aplicación web Java EE que cubra los mecanismos
proporcionados por los frameworks de
aplicaciones web.
Concretamente, en [1] los autores utilizan técnicas
de análisis dinámico para extraer modelos
SecureUML de aplicaciones web PHP. También
para aplicaciones PHP, en [15] las violaciones de
privilegios entre procedimientos se detectan
analizando autómatas extraídos del código fuente.
En [7] se ha estudiado un enfoque similar para la
plataforma de aprendizaje Moodle Web. Por
último, no se centró en las aplicaciones web, pero
en código Java, los autores presentan un enfoque
para realizar interprocedural análisis de privilegios
para aplicaciones Java [13]. Todos estos trabajos
se centran en extraer cierta información de
seguridad analizando el comportamiento en
tiempo de ejecución de la aplicación en lugar de
realizar un análisis estático de las políticas de
Sin embargo, consideramos que un mejor punto
de partida para un análisis de seguridad requiere
un metamodelo de seguridad más específico.
Además, ninguno de estos marcos y lenguajes
proporciona un enfoque de ingeniería inversa para
obtener
automáticamente
los
modelos
correspondientes de las configuraciones de
seguridad de Java EE existentes. En este sentido,
nuestro enfoque podría ser un buen complemento
a ellos actuando como un modelo de pivote, ya
que las traducciones de nuestro lenguaje a esas
otras representaciones serían posibles, por
ejemplo, como parte de un modelo de calzado de
caballos.
8. CONCLUSION
Hemos presentado un enfoque de ingeniería
inversa basado en modelos para extraer políticas
de control de acceso de los diversos mecanismos
de configuración de seguridad de aplicaciones web
Java EE. Como resultado del proceso, se crea un
modelo de control de acceso independiente de la
plataforma que integra en un solo lugar las
diversas restricciones parciales de seguridad,
Facilitando la comprensión y análisis de las
políticas. Hemos demostrado la viabilidad y
pertinencia de nuestro enfoque mediante el
9
desarrollo de una herramienta de prueba de
concepto que hemos aplicado en un conjunto de
proyectos reales recuperados de GitHub.
Como trabajo futuro, prevemos varias extensiones
posibles. En primer lugar, creemos que un enfoque
de ingeniería avanzada que apunte al despliegue
automático de políticas refactorizadas corregidas
sería una evolución natural de nuestro enfoque.
Entonces, creemos que extenderlo para incluir
otras configuraciones de seguridad es igualmente
interesante.
En este sentido, pretendemos ampliar nuestro
enfoque
para
incluir:
1)
restricciones
programáticas de seguridad; 2) otras fuentes de
configuraciones de seguridad (por ejemplo, del
sistema de bases de datos subyacente) para
obtener una versión más completa de la seguridad
del sistema en su conjunto y 3) Marcos más
complejos construidos sobre Java EE (que
normalmente proporcionan su propio mecanismo
de seguridad) como el marco de Spring.
Finalmente, y siguiendo el camino abierto en la
Sección 4 con la codificación y evaluación de una
propiedad de seguridad como una consulta OCL,
pretendemos extender nuestro enfoque y
herramienta
para
definir
y
analizar
automáticamente un conjunto de propiedades de
seguridad importantes más allá de la propiedad de
corrección descrita aquí..
9. REFERENCIAS
[1] M. H. Alalfi, J. R. Cordy, and T. R. Dean.
Recovering role-based access control security
models from dynamic web applications. In
ICWE’12, pages 121–136. Springer, 2012.
[2] G. Bergmann, Z. Ujhelyi, I. Ráth, and D. Varró.
A graph query language for emf models. In
ICMT’11, pages 167–182. Springer, 2011.
[3] H. Bruneliere, J. Cabot, G. Dupé, and F. Madiot.
Modisco: A model driven reverse engineering
framework. IST, 56(8):1012–1032, 2014.
[4] S. Ceri, P. Fraternali, and A. Bongio. Web
modeling language (webml): a modeling language
for designing web sites. Computer Networks,
33(1):137–157, 2000.
[5] V. Cosentino, J. Cabot, P. Albert, P. Bauquel,
and J. Perronnet. A model driven reverse
engineering framework for extracting business
rules out of a java application. In RuleML’12, pages
17–31. Springer, 2012.
[6] K. Fisler, S. Krishnamurthi, L. A. Meyerovich,
and M. C. Tschantz. Verification and changeimpact analysis of access-control policies. In
ICSE’27, pages 196–205. ACM, 2005.
[7] F. Gauthier, D. Letarte, T. Lavoie, and E. Merlo.
Extraction and comprehension of moodle’s access
control model: A case study. In PST’11, pages 44–
51. IEEE, 2011.
[8] H. Hu, G.-J. Ahn, and K. Kulkarni. Anomaly
discovery and resolution in web access control
policies. In SACMAT’11, pages 165–174. ACM,
2011.
[9] F. Jouault, F. Allilaire, J. Bézivin, and I. Kurtev.
ATL: a model transformation tool. Science of
Computer Programming, 72:31–39, 2008.
[10] J. Jürjens. UMLsec: Extending UML for secure
systems development. In UML’02, pages 412–425.
Springer, 2002.
[11] J. Jürjens, J. Schreck, and P. Bartmann. Modelbased
security
analysis
for
mobile
communications. In ICSE’08, pages 683–692. ACM,
2008.
[12] N. Koch and A. Kraus. The expressive power of
uml-based web engineering. In IWWOST’02,
volume 16. CYTED, 2002.
[13] L. Koved, M. Pistoia, and A. Kershenbaum.
Access rights analysis for java. In ACM SIGPLAN
Notices, volume 37, pages 359–372. ACM, 2002.
[14] Y. Ledru, N. Qamar, A. Idani, J.-L. Richier, and
M.-A. Labiadh. Validation of security policies by
the animation of z specifications. In SACMAT’11,
pages 155–164. ACM, 2011.
[15] D. Letarte and E. Merlo. Extraction of interprocedural simple role privilege models from php
code. In WCRE’09., pages 187–191. IEEE, 2009.
[16] X. Li and Y. Xue. A survey on server-side
approaches to securing web applications. ACM
Computing Surveys (CSUR), 46(4):54, 2014.
[17] H. Lockhart, B. Parducci, and A. Anderson.
OASIS XACML TC, 2013.
[18] T. Lodderstedt, D. Basin, and J. Doser.
Secureuml: A uml-based modeling language for
model-driven security. In UML’02, pages 426–441.
Springer, 2002.
[19] S. Martínez, J. Garcia-Alfaro, F. Cuppens,
N. Cuppens-Boulahia, and J. Cabot. Towards
an access-control metamodel for web content
management systems. In ICWE MDWE’13
Workshop, pages 148–155. Springer, 2013.
[20] R. Sandhu, D. Ferraiolo, and R. Kuhn. The
NIST model for role-based access control:
10
towards a unified standard. In RBAC’00, pages
47–63. ACM, 2000.
[21] Selenium, a portable software testing
framework
for
web
applications.
http://www.seleniumhq.org/.
[22] D. Steinberg, F. Budinsky, M. Paternostro,
and E. Merks.
EMF: Eclipse Modeling Framework 2.0.
Addison-Wesley
Professional, 2nd edition, 2009.
[23] V. Svansson and R. E. Lopez-Herrejon. A
web specific
language for content management systems.
In OOPSLA
DSM Workshop, Montréal, Canada, 2007.
11