Ucam CL TR 564
Ucam CL TR 564
Ucam CL TR 564
ISSN 1476-2986
Number 564
Computer Laboratory
Ulrich Lang
May 2003
15 JJ Thomson Avenue
Cambridge CB3 0FD
United Kingdom
phone +44 1223 763500
http://www.cl.cam.ac.uk/
c 2003 Ulrich Lang
http://www.cl.cam.ac.uk/TechReports/
ISSN 1476-2986
Abstract
This dissertation examines how the architectural layering of middleware constrains the
design of a middleware security architecture, and analyses the complications that arise
from that. First, we define a precise notion of middleware that includes its architecture
and features. Our definition is based on the Common Object Request Broker Architecture
(CORBA), which is used throughout this dissertation both as a reference technology and
as a basis for a proof of concept implementation. In several steps, we construct a security
model that fits to the described middleware architecture. The model facilitates concep-
tual reasoning about security. The results of our analysis indicate that the cryptographic
identities available on the lower layers of the security model are only of limited use for
expressing fine-grained security policies, because they are separated from the application
layer entities by the middleware layer. To express individual application layer entities in
access policies, additional more fine-grained descriptors are required. To solve this prob-
lem for the target side (i.e., the receiving side of an invocation), we propose an improved
middleware security model that supports individual access policies on a per-target basis.
The model is based on so-called “resource descriptors”, which are used in addition to cryp-
tographic identities to describe application layer entities in access policies. To be useful,
descriptors need to fulfil a number of properties, such as local uniqueness and persistency.
Next, we examine the information available at the middleware layer for its usefulness as
resource descriptors, in particular the interface name and the instance information inside
the object reference. Unfortunately neither fulfils all required properties. However, it is
possible to obtain resource descriptors on the target side through a mapping process that
links target instance information to an externally provided descriptor. We describe both
the mapping configuration when the target is instantiated and the mapping process at
invocation time. A proof of concept implementation, which contains a number of techni-
cal improvements over earlier attempts to solve this problem, shows that this approach
is useable in practice, even for complex architectures, such as CORBA and CORBASec
(the security services specified for CORBA). Finally, we examine the security approaches
of several related middleware technologies that have emerged since the specification of
CORBA and CORBASec, and show the applicability of the resource descriptor mapping.
4
Contents
1 Introduction 9
1.1 Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Related Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5
3.3 A Simple Communications Security Model . . . . . . . . . . . . . . . . . . 36
3.4 Design Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.1 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.2 Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.3 Flexibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.4 Interoperability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4.5 Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4.6 Scalability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5 Layered Middleware Security Architecture . . . . . . . . . . . . . . . . . . 41
3.6 Simple Middleware Security Model . . . . . . . . . . . . . . . . . . . . . . 41
3.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6
5.3.6 Scalability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6 Proof-of-Concept Implementation 77
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2 MICOSec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.3 OMG Security Domain Membership Management Service . . . . . . . . . . 78
6.3.1 Design Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.3.2 Object Security Attribute Retrieval (OSAR) . . . . . . . . . . . . . 79
6.3.3 Object Domain Mapping (ODM) . . . . . . . . . . . . . . . . . . . 80
6.4 Client-side ODM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.5 MICOSec ODM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.5.1 Mapping Information . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.5.2 Mapping Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.5.3 Mapping Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.5.4 Modifications to the CORBA Specification . . . . . . . . . . . . . . 92
6.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7 Middleware Security 95
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.2 Enterprise Java Beans (EJB) . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.2.1 Java Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.2.2 The EJB Container . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2.3 Provider, Assembler, Deployer . . . . . . . . . . . . . . . . . . . . . 96
7.2.4 Declarative Security . . . . . . . . . . . . . . . . . . . . . . . . . . 97
7.2.5 EJB Security Model . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7.2.6 EJB and the Resource Descriptor Mapping . . . . . . . . . . . . . . 99
7.2.7 EJB Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.3 CORBA Component Model . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.3.1 CCM Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.3.2 CCM Security and Resource Descriptor Mapping . . . . . . . . . . 101
7.3.3 CCM Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.4 .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7.4.1 .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7.4.2 Code Access Security . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7.4.3 Role-Based Access Control . . . . . . . . . . . . . . . . . . . . . . . 103
7.4.4 .NET Remoting Framework . . . . . . . . . . . . . . . . . . . . . . 104
7.4.5 .NET and Resource Descriptor Mapping . . . . . . . . . . . . . . . 105
7.4.6 .NET Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.5 XML Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.5.1 Web Services Protocols . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.5.2 Web Services Security . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.5.3 Web Services and Resource Descriptor Mapping . . . . . . . . . . . 108
7.6 Reflective and Adaptive Middleware . . . . . . . . . . . . . . . . . . . . . . 109
7.6.1 Reflection Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 109
7.6.2 Reflective Middleware . . . . . . . . . . . . . . . . . . . . . . . . . 110
7.6.3 Security and Reflective/Adaptive Middleware . . . . . . . . . . . . 111
7
7.6.4 Middleware and Quality-of-Service . . . . . . . . . . . . . . . . . . 113
7.7 Middleware and Access Control Models . . . . . . . . . . . . . . . . . . . . 114
7.7.1 Discretionary Access Control . . . . . . . . . . . . . . . . . . . . . . 114
7.7.2 Role-Based Access Control . . . . . . . . . . . . . . . . . . . . . . . 114
7.7.3 Mandatory Access Control . . . . . . . . . . . . . . . . . . . . . . . 115
7.7.4 Clark-Wilson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.7.5 Chinese Wall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.8 Middleware Design for Security . . . . . . . . . . . . . . . . . . . . . . . . 116
7.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8 Conclusion 119
8.1 Further Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8
Chapter 1
Introduction
Over the last decade, the IT industry was increasingly faced with the task of integrat-
ing networked information sources and applications across heterogeneous hardware and
software platforms. Initially, the main driving factor for this trend was the demand for in-
tegration of different state-of-the-art systems with incompatible legacy IT systems within
the intranets of large organisations, such as systems for ordering, parts tracking, and
billing. Another reason was the advent of the Internet in the commercial arena during
the mid-1990’s, which enabled new forms of information access and exchange, both for
businesses and consumers. For example, staff on the road should be able to access cor-
porate data resources globally when dealing with customers, and consumers should be
able to access applications such as online banking from any home PC. Finally, towards
the end of the 1990’s until today, the increased use of a wide range of rapidly evolving
incompatible wireless pocket computers and mobile phones has spurred attempts in the
telecommunications industry to develop a device-independent application platform, which
would allow applications (that offer an increasing number of multimedia and interactive
features) to be written once and then ported to new devices with little extra effort.
To meet this growing demand for integration, several architectures have been designed
and implemented that integrate both legacy and state-of-the-art systems in a cost-effective
way, and in a fashion that fits seamlessly into the programmers’ usage pattern. The
term “middleware” emerged as the generic industry term for any system that “glues to-
gether” various networked applications. Examples of such middleware systems are OSF’s
Distributed Computing Environment (DCE) [127], Common Object Request Broker Ar-
chitecture (CORBA) [119], Enterprise Java Beans (EJB) [101] and recently Microsoft
.NET [106]. In the telecommunications world, the Telecommunications Information Net-
working Architecture (TINA) [36], and the Parlay APIs for Open Service Access [130]
have been designed.
All these middleware technologies have in common that a lot of effort has been put
into incorporating a very rich set of features, while at the same time maintaining a high
degree of flexibility. On the flipside, the resulting architectures became very complex and
highly layered.
It was realised early on in the design phase of most middleware technologies that, due
to the complex and unpredictable interactions between applications across insecure net-
works such as the Internet, security would also play an important role. To fit seamlessly
into the application development process, security should be provided automatically as
9
part of the middleware technology (i.e., without active involvement of the application
programmer). The security features required by customers included authentication, mes-
sage protection, access control, event auditing, and in some cases non-repudiation. To
avoid cutting down on the wealth of features and flexibility, the architectural position
of the security features and their interactions were largely determined by the underlying
middleware architecture, and not by any conceptual reasoning about security. The fact
that the inclusion of security features alone would not automatically provide a middleware
security architecture was either only realised afterwards, or it was accepted that a rich
set of features was a better selling factor than an effective security architecture.
1.1 Goal
This dissertation tries to identify how the architectural design of middleware (using
CORBA as the reference technology) constrains the design of a middleware security ar-
chitecture, and tries to analyse the complications that arise from that. To allow reasoning
about the intended and effective functionality of such a security architecture, a conceptual
middleware security model is constructed in several incremental steps.
The results of our analysis indicate that (cryptographic) identities provided by the
network layer are only of limited use for expressing useful security properties, and that
additional descriptors are necessary to express individual application layer entities in
access control (and audit) policies. In this dissertation, we therefore propose an improved
middleware security model that is based on (non-cryptographic) “resource descriptors”,
which can be used in addition to identities to describe application layer entities in access
control (and audit) policies. Such descriptors need to fulfil a number of properties, such
as local uniqueness and persistency. Resource descriptors can be obtained on the target
side (i.e. the receiving end of an invocation) through a mapping process, which is based
on a mapping table that links target instance information to a descriptor. To show the
viability of this approach, we also outline a proof-of-concept implementation of a resource
descriptor mapper for CORBA.
1.2 Scope
As mentioned above, there are a number of differing middleware technologies, which all
have their own specific notion of middleware and a different set of features and properties.
However, there are also many architectural parallels between these systems. As a result,
the general thesis of this dissertation applies to any middleware technology that fulfils
the basic middleware properties defined in section 2.4.1. Although it would be useful to
verify this claim by analysing all of the mentioned technologies (see section 8.1), almost
all of the research that forms the basis of this dissertation has been done using CORBA
for the following reasons:
• CORBA has been widely used in practice for a long time, thus many implementa-
tions and case studies are available
10
• CORBA and CORBASec specify a rich set of features, whilst trying to maintain
flexibility, which makes them an interesting and challenging reference technology for
this dissertation
As a consequence, we define the term “middleware” in line with CORBA (see defini-
tion 1 on page 15), and later on reason about a security model that resembles a simplified
form of CORBASec. Our proof-of-concept implementation has also been developed for
CORBA and CORBASec.
The security approaches of several other middleware technologies, which have emerged
since the specification of CORBA and CORBASec, are examined in chapter 7, where we
also show the general applicability of our approach.
11
an invocation are also available in the middleware layer (e.g., CORBA, EJB, DCE). For
example, the standard CORBASec model partly bases its access control on the invoked
interface and operation. Again, some information from lower layers is available.
Not directly related, access to applications over the network can also be controlled on
various layers using firewalls [26]. Often, these work on the lower protocol layers [151], such
as TIS plug gw [163] or SOCKS [92]. There have also been some attempts to implement
firewalls on higher layers, but often with mixed results due to the fundamental conflict
between end-to-end security and firewall security [89].
All these access control systems share the common drawback that it is often not
possible to express the fine-grained policies needed for real-world applications, because
the information available to express policies is limited by what is available on the layer the
access control resides at. In the remainder of this section, we will describe various models
and systems related to our work, which try to improve existing access control systems on
various layers by adding expressiveness.
The most closely related work is the OMG Resource Access Decision Facility (RAD)
specification [123], which puts access control in the application layer, but outside the
application logic. It provides a uniform way for CORBA applications to query an au-
thorisation service while invocations are processed, in order to enforce resource-oriented
access control policies. By standardizing this service in a technology and policy unspecific
way, it allows the definition and administration of a centralised and consistent policy for
several applications. A model and implementation of role-based access control RBAC 0 -
RBAC3 [140] for RAD can be found in [13]. Although this approach can express relatively
fine-grained policies, it cannot be provided transparently to the application.
Several other interesting models are based on the idea that invocations are redirected
to a security object before they are allowed to pass through to the actual target ob-
ject. One model modifies the semantics of object references in such a way that security
meta objects [136, 98] can enforce access control on the invocation before it reaches the
target object. Other approaches propose byte code rewriting to implement structural
reflection [37, 39], as well as behavioural reflection [173]. Such systems allow the spec-
ification of more fine-grained access policies than the ones supported by the underlying
platform. However, this approach can only be easily implemented if the source code is
available (which is generally not the case for legacy systems) and written in programming
languages where the code can be parsed well, such as Java byte code.
Although not directly related to this dissertation, some other work on CORBASec
access control will briefly be mentioned: a formal language for describing access control
based on the CORBASec credentials model has been presented in [64]. Another formal
definition and analysis of CORBASec authorisation in terms of an access control matrix
is given in [76], and its use for describing a number of policies, in particular mandatory
access control, is discussed. Also, a view-based access model and a declarative specification
language for CORBASec have been specified in [21].
The security approaches of several middleware technologies other than CORBA are
examined in chapter 7.
12
Chapter 2
2.1 Introduction
This chapter introduces the middleware model as a refinement of the object-oriented model
and remote procedure call. The middleware model consists of a number of layers, and
one of its main purposes is to abstract details about communications and the underlying
hardware and software from the application. We describe the main design requirements
for a middleware architecture, as well as the main layers and abstraction interfaces.
We then present the Common Object Request Broker Architecture (CORBA) [119],
an industry standard that defines interfaces and semantics for object-oriented middleware.
It will be used as the reference middleware technology throughout this dissertation. We
will show later how CORBA has been extended by a security architecture, the CORBA
security services (see chapter 5). CORBA illustrates well that the middleware layering
can be complex, and that only parts of the addressing information can be interpreted at
each layer. In particular, CORBA introduces the concept of object adapters, which play
a role in our proof-of-concept implementation of the resource descriptor mapping (see
chapter 6).
13
Client Object
2.4 Middleware
In the IT industry, middleware is a general term for any software that serves to “glue
together” or mediate between two separate and often already existing programs.
14
In Sun’s Enterprise Java Beans (EJB) programming model, the term middleware is
used to describe software that runs on a server, and acts as either an application processing
gateway or a routing bridge between remote clients and data sources or other servers,
or any combination of these. Other sources refer to transaction processing monitors,
database access systems, or message passing systems as middleware.
In CORBA [119], middleware is defined similarly to RPCs in that it consists of a layer
of software between client and target object that delivers extra functionality and hides the
complexity of this extra functionality behind a common set of interfaces that clients and
targets can invoke. This central architectural component is called Object Request Broker
(ORB). It automatically handles all invocations between application entities, regardless
whether they reside on the same ORB, different ORBs on the same host, or on different
ORBs on different networked hosts. In addition to the RPC-like (blocking) request-reply
style described above, ORBs can provide various other styles of communications, such
as asynchronous messaging (message-oriented middleware) or publish-and-subscribe via
events. Asynchronous messaging allows clients to continue executing after they have
invoked a target. At a later stage, the target will call back the client and provide the
reply as part of a new (reverse) invocation. Publish-and-subscribe allows targets to publish
information in event channels, while clients can subscribe to the relevant event channels
to receive the information whenever it is available.
In this dissertation, we define middleware as follows:
DEFINITION 1
Middleware is software that resides between an application and the inner
workings of the system hosting the application, and that abstracts the com-
plexities of the underlying technology (see section 2.4.1) from the application
layer. In particular, middleware automatically handles all communications
related to invocations between client and target applications, and supports
application portability, mechanism flexibility, interoperability, and scalabil-
ity. The software that constitutes the middleware on one host will be called
middleware component.
15
Client
Target
Application
Object
Middleware Middleware
Underlying Underlying
Technology Technology
Abstraction
The activities of the middleware component should be hidden from the applications, in
particular related to communications: whenever a client invokes a target, the underlying
middleware should automatically handle all lower-level communications tasks. For exam-
ple, this often includes that the physical location of the invoked target is hidden from the
client application (location transparency).
As far as this abstraction aspect is concerned, middleware can be compared to APIs,
which are used in software engineering to present application programmers with a simple
interface to the functionality provided by the lower layers. This requirement is related to
portability, which is described next.
Portability
Flexibility
Flexibility is the complement of portability and means that middleware should allow the
use of different underlying technologies without affecting any of the layers above. In
particular, the middleware itself should not be tied to a particular underlying technology.
Therefore, flexibility is related to the interfaces between the underlying technology and
the middleware layer, and allows the integration of clients and targets across differing
hardware and software platforms.
16
Interoperability
Middleware should also abstract invocations from differences in the middleware imple-
mentation and the underlying communications technology (e.g., data representation). To
achieve this design objective, middleware generally needs to use its own interoperabil-
ity protocol and encoding. Interoperability is related to the communications interfaces
between different middleware implementations.
Automation
Middleware should automatically intercept the normal invocation path, so that it can au-
tomatically add its services whenever an invocation occurs. This allows applications to be
largely unaware of the underlying technology when they invoke other applications. From
a security perspective, the fact that all invocations have to go through the middleware
layer makes it a convenient location for security enforcement. This aspect is also often
called “transparency” [119], but throughout this dissertation we will instead use the more
descriptive term “automation”.
Scalability
17
Client Target
Application Application
Portability Interfaces
Middleware Middleware
Flexibility Interfaces
Underlying Underlying
Technology Technology
Client Target
Application Application
Interoperability Interfaces
Middleware Middleware
Underlying Underlying
Technology Technology
18
2.5 The Common Object Request Broker Architec-
ture (CORBA)
The Common Object Request Broker Architecture (CORBA) [119] was first published
in 1990 by the Object Management Group (OMG), a non-profit organisation founded
in 1989 to integrate distributed applications based on a variety of existing technologies.
CORBA standardises interfaces and semantics for object-oriented middleware. It includes
a specification for the Object Request Broker (ORB), a software library with standardised
CORBA object interfaces that allows clients and targets to communicate with each other
across a network in a well-defined way. In addition, CORBA automatically applies a range
of useful services to communications. After the ORB is initialised, all CORBA objects
can be invoked by applications just like local software objects.
19
Application
Client Target Object Layer
Services Services
ORB ORB ORB
Core Core
Facilities Facilities Layer
Network
in terms of interfaces and their semantics, not in terms of their particular implementa-
tion. This allows CORBA vendors considerable flexibility in the design of their particular
implementation, which is important because different environments often pose specific
constraints and requirements on the ORB.
Most of the main features and functional components of CORBA are illustrated in
figure 2.5, which also shows how the components relate to one another within the archi-
tectural framework outlined in section 2.4. The architecture contains an additional layer,
the interface layer, which contains the stubs/skeletons (see sections 2.7.5 and 2.7.7) and
the object adapter (see section 2.7.3). Amongst other purposes, this layer implements the
abovementioned portability interface and connects the ORB with the application.
In the following subsections, the main parts of the CORBA architecture are described
in more detail.
• Object location: the client does not know where the target object physically resides.
20
• Object implementation: the client does not know how the target object is imple-
mented, which programming or scripting language(s) it was written in, and the
operating system and hardware it executes on.
• Object execution state: the client does not need to know whether the target object
is currently activated (i.e., in an executing process) and ready to accept requests.
If necessary, the ORB automatically starts the object before delivering the request
to it.
• Object communication mechanism: the application does not need to know what
communication mechanisms the ORB uses.
• A standardised repository id, a string that describes the “most derived interface”
(MDI) type of the object at the time the IOR was created. This makes it possi-
ble to locate a detailed description of the corresponding interfaces in the interface
repository (see section 2.7.6). The repository id does not always reliably identify the
object that implements an operation – it is possible that a parent object actually
implements the invoked operation.
• Standardised endpoint information that is used by the ORB to establish the con-
nection to the server identified by the IOR. It contains protocol information and
physical addressing information (e.g., TCP socket). This endpoint information does
not always point to the CORBA server, it can instead point to an activation daemon
(i.e., implementation repository) or a firewall.
• The ORB-proprietary object key is used at the target side to locate the object.
Servers sometimes embed an application-specific object identifier, the so-called “Ob-
jectId”, inside the object key (see section 2.7.3) at object creation.
An IOR can contain the endpoint information and the ObjectKey several times. Such
IORs are called “multicomponent profiles” and are mainly used for objects that should
be accessible over several network protocols.
Object references can be obtained in three different ways:
21
• At object creation: a creation request returns an object reference for the newly
created object to the client. CORBA has no special client operations for object cre-
ation – objects are generated by invoking creation requests, which are just ordinary
operation invocations on other objects called factory objects.
• Through a directory service: a client can invoke a lookup service (e.g., naming ser-
vice and trading service in the CORBA services) in order to obtain object references
for existing objects.
22
O b j ec t
E x i s ts
O b j ec t
A c ti vated
Servant
I nc arnated
D es tru c tion
Creation
Object
Object
A c tiv ate D eac tiv ate N o n -ex i s ten t
N o n -ex i s ten t
Servant
E th ereal i s ed
O b j ec t
D eac ti vated
designed to allow for application portability. A clear understanding of the POA is cen-
tral to the proof-of-concept implementation outlined in chapter 6, therefore its specific
features will be described in more detail.
First of all, it is important to understand the difference between CORBA objects and
servants, and their lifecycles. CORBA objects and their references are created by the
POA. They can be either “activated” or “deactivated”, and only activated objects can
service operations. In addition, only objects that are “incarnated” (i.e., implemented) by
an actual servant instance are capable of receiving and carrying out requests (servants can
also be “etherealised” to break the bond with its CORBA object). Figure 2.6 illustrates
the difference between these concepts [61].
In the POA architecture, the lifecycles of objects and their servants do not have to
correspond (i.e., the existence of an activated object and its reference does not mean that
its servant is incarnated). It is possible that many objects share a single servant, or that
one object is associated with several servants, or that the servant will only be associated
with an object at the time the invocation occurs (default servants, see below).
During object creation, the POA is also responsible for:
• generating IORs
• generating ObjectIds, which uniquely identify an object within the scope of that
POA. The ObjectId is a sequence of octets which can either be automatically created
by the POA, or which can be supplied by the application. ObjectIds are part of the
object key (see below) inside the IORs
• linking servants with objects and IORs. Applications can register servants with the
POA and associate them with objects.
At invocation time, the POA maps invocations from objects to servants. Only the
POA is able to relate IORs, ObjectIds, and servants. When a client invokes the object,
23
Object Reference
Object Key
the POA will pass the invocation (together with its arguments) on to the associated
servant. To allow for good scalability, the POA servant manager allows the creation of
servants on-the-fly when a request is received. In addition, it is possible to define a default
servant, which will be executed for all objects within the scope of the POA that do not
have their own servant implementation. For example, such a default servant can be used
to implement a database interface, which can use the ObjectId as an index to a database.
The default servant is executed for invocations on all objects within the scope of that
POA and can use the ObjectId to query the database.
The object key, which is part of the IOR, contains information to locate the object
within the scope of the ORB (i.e., after a network connection has been established between
the client and the server). The object key is generated by the POA when the object is
created, and it is passed as an opaque data item to the client within the IOR. CORBA
does not specify the exact format and content of the object key to allow a range of different
ORB and POA implementation styles. As a consequence, only the ORB and POA that
generated the object key are able to interpret its content. In particular, the client is
neither able nor required to understand the contents of the object key, it sends it back to
the server unmodified as part of the request header.
To fulfil its purpose, the object key needs to contain two pieces of information (see
figure 2.7). Firstly, it needs to include a POA reference that allows the target-side ORB
to locate the POA in charge. In addition, it needs to include an ObjectId that allows the
POA to locate the correct servant. We will discuss both in turn.
The POA architecture can either support persistent or transient objects (specified
for all objects within the scope of the POA in the PortableServer::LifeSpanPolicy).
Persistent objects should exist beyond the lifetime of the CORBA server application
that implements the objects (e.g., static objects that permanently represent data in a
database). In this case, the same IOR should always point to the same object. Transient
objects on the other hand are tied to the lifetime of the server implementation, so their
IOR should become invalid when the server terminates. Transient IORs are useful in
cases where client and target share state, because the client can become faulty if the
target crashes (i.e., loses its state) and restarts as a new instance without knowing that
shared state.
The chosen lifespan policy has to affect the representation of the POA reference in-
side the object key. As mentioned above, the exact coding is implementation specific.
MICO [138], the ORB used for MICOSec (see section 6.2), uses the following information
24
for the POA reference:
• For transient objects, the reference includes the host IP address of the server, the
process identifier of the server, the time when the reference was created, and a
unique identification created by the ORB. For scalability reasons, CORBA does
normally not provide globally unique identifiers for object adapters and objects.
• For persistent objects, it contains a string supplied by the user that associates the
implementation repository with a server, and the full name of the server host
25
directly into the client application and the object implementation, and therefore need to
have complete a priori knowledge of the IDL interfaces of the objects being invoked.
A request sent by the client first has to be converted from the representation in the
programming language to one that is suitable for transmission. Once the request arrives at
the target object, the skeleton converts it to a (possibly different) representation (depend-
ing on the underlying hardware and software platform) and dispatches it to the object.
The response is sent back the reverse way. Figure 2.5 shows the positions of the stub and
skeleton in relation to the client application, the ORB, and the object implementation.
The general concept of stubs and skeletons is common to many middleware technolo-
gies, although the exact details often differ depending on the particular implementation
and the used programming language.
26
to that, static invocations do not suffer from the overhead of accessing the interface
repository since they rely on type information already compiled into the application.
2.7.8 Inter-ORB-Protocols
The ORB interoperability architecture is based on the General Inter-ORB Protocol (GIOP),
which specifies transfer syntax and a standard set of message formats for inter-ORB com-
munication over any connection-oriented transport. The widely-used Internet Inter-ORB
Protocol (IIOP) specifies how GIOP is built on top of a TCP/IP transport. The ORB
interoperability architecture also provides for other Environment Specific Inter-ORB Pro-
tocols (ESIOPs). ESIOPs allow ORBs to be built for special situations in which certain
distributed computing infrastructure is already in place. For example, the first ESIOP
adopted was the DCE Common Inter-ORB Protocol (DCE-CIOP) that can be used by
ORBs in environments where DCE is already installed.
Both the IIOP and DCE-CIOP have built-in mechanisms for implicitly transmitting
context data that is associated with object services, such as transaction processing and
security.
In addition to standard interoperability protocols, standard IOR transport profiles are
necessary for ORB interoperability. For example, an IOR containing IIOP information
stores hostname, TCP/IP port number, and other required information.
27
2 Target
Servant
1 8
Client Object
Application Adapter
3 7
ORB ORB
4 6
OS/Network OS/Network
the target, it invokes the corresponding stub. If the invocation goes across a network,
the ORB packages the invocation parameters into a standardised CORBA request format
and sends them across the network ⑤ to the target-side ORB ⑥, which unpackages the
request. If the invocation is local, the ORB simply passes the invocation parameters back
up to the correct target.
The target-side ORB then routes the invocation parameters up to the object adapter
that matches with the addressing information ⑦. The object adapter in turn passes the
operation parameters up (through the skeleton) to the object implementation (i.e., the
servant) ⑧, which executes the request.
Optionally, a reply is sent back over the existing network connection if the client is
remote. CORBA also supports asynchronous messages, which are called “callbacks”, but
they are not relevant for our discussion.
2.9 Summary
This chapter introduces a notion of middleware that incorporates the object-oriented
programming model and remote procedure call. In this dissertation, the term middleware
describes software that resides between an application and the inner workings of the
system hosting the application, and that abstracts the complexities of the underlying
technology from the application layer. In particular, middleware automatically handles
all communications related to invocations between client and target applications, and
supports application portability, mechanism flexibility, interoperability, and scalability.
The chapter outlines the main design requirements for a middleware architecture to satisfy
the given definition. It was also shown how vertical and horizontal interfaces can be
inserted into the layered middleware architecture to meet the design requirements.
The discussion of the CORBA architecture illustrated that messages pass through a
number of layers on their way from client to target and back. In particular, the CORBA
layer on the target side comprises an ORB, one or more object adapters, and the skeleton.
At each layer, only parts of the message header can be interpreted (e.g., network socket,
POA reference, ObjectId). Due to the cycle of object reference creation and object invo-
28
cation, all addressing information is opaque at the application layer. In the next chapters,
we will discuss the difficulties of achieving a similarly elegant solution when security is
added to the middleware architecture.
29
30
Chapter 3
3.1 Introduction
In the previous chapter, we have laid out a layered middleware architecture that meets
a number of design requirements (see 2.4.2). Now we construct a simple security model
based on principals and their identities that includes authentication and access control.
We will first introduce the notion of a reference monitor that restricts access to resources.
We then need to define precise terminology for our further discussion. We will introduce
a notion of identity that allows the representation of active participants in the access pol-
icy. Then we describe the authentication process, and define what is meant by principal,
client, and target. This is necessary because there is no consensus in the information
security literature about the exact meaning of these terms. We then present a simple
communications security model to illustrate how principals, identities, clients, and tar-
gets are related. After that, we discuss how a middleware security architecture (that
provides authentication, message protection, access control, and audit) should be embed-
ded into the layered middleware architecture such that it preserves the middleware design
requirements. Finally, we will construct a first middleware security model that serves as
a basis for the next chapter.
3.2 Terminology
3.2.1 Access Control
Most computer security literature describes access control in terms of a reference monitor
by Lampson [83], which verifies that subjects are authorised to access the objects they
request. In the CORBASec specification [121], the software component that contains the
reference monitor (i.e. both access policy and enforcement) is called the access decision
function. It provides a yes/no answer when queried either explicitly by the application or
automatically as part of the invocation process.
Figure 3.1 shows the elements of the reference monitor model (it has been designed in
the context of distributed operating systems [84]):
31
Do Reference
Principal Object
Operation Monitor
• A reference monitor acts as a guard for each object that examines each request for
the object and decides whether to grant it
In the model, the reference monitor bases its access decision on the principal making
the request, the operation in the request, and an access rule that controls which princi-
pals may perform that operation on the object. To do its work, the reference monitor
needs a reliable way of knowing both the source of a request and the access rule. Ob-
taining the source of the request (i.e., the principal) is defined as authentication (“who
said this?” [84]). The authentication process is conducted by the reference monitor. Au-
thorisation is defined as the interpretation of the access rule (“who is trusted to access
this?”), which is usually attached to the object. We will show later that it is non-trivial
to associate access rules to individual objects in the context of middleware security.
There are also a number of alternative definitions of authorisation in the literature.
For example, Ford [47] defines authorisation as the granting of rights, by the owner or
controller of a resource, for others to access that resource. Access control is then defined
as a means of enforcing authorisation.
DEFINITION 3
Throughout this dissertation, the term access control will be used to refer to
the evaluation and enforcement of access rules, while the term access policy
refers to the access rules enforced by the reference monitor.
In line with the CORBASec specification [121], we will later on distinguish between
client-side access policies and target-side access policies (see section 3.2.6).
Before we can describe more precisely what is meant by authentication, we need to
define exact notions of identity and principal.
Do Reference
3.2.2 IdentityPrincipal Operation Monitor
Object
The meaning of identity is controversial throughout the security literature. Anderson [6]
Source Request Guard
uses the term to describe a correspondence between the names of Resource
two principals signify-
ing that they refer to the same person or equipment. The CORBASec specification [121]
32
defines identity as a security attribute with the property of uniqueness (i.e., no two princi-
pals’ identities may be identical). Other security attributes (e.g., groups, roles, etc.) need
not be unique in CORBASec, and principals may have several different kinds of identities
(each unique), for example for audit and access control. Ford [47] implicitly links the
notion of identity to authentication: “authentication relates to a scenario where some
party has presented a principal’s identity and claims to be that principal”. Therefore a
principal has an identity that can be authenticated. We will define both principal and
authentication below.
In this dissertation, we will define the term identity in relation to access control and
authentication:
DEFINITION 4
An identity is a name that is used in the access control policy to represent
an entity in the system. In addition, it is possible to verify a claimed identity
during the authentication process.
3.2.3 Principal
The term principal is defined in numerous differing ways throughout the security literature
to describe the participants in a security model. Principals can be either human users or
software entities, or both. To motivate our definition, we will first consider a number of
alternative notions.
The CORBA Security Services (CORBASec) specification [121] defines principal as
“the active entity in the system” and as “a user or programmatic entity with the ability
to use the resources of a system”. In this definition, it may not be clear why software
components should also sometimes be principals, after all they are always started by a
human user and therefore inherit the principal identity of the user. The reason is that
objects in complex systems often need to be authenticated by their own separate identity,
and not the identity of the administrator that started it.
Anderson defines that “a principal is an entity that participates in a security sys-
tem” [6], but also aptly points out that this definition depends on what is meant by
system. At the one end of the spectrum, a system could be a cryptographic protocol, and
principals could be the cryptographic keys that define the communications channel. At
the other end of the spectrum, the system could include the whole middleware system to-
gether with all applications, as well as all human users and administrators of the system.
In this dissertation, the system can be defined to include the applications and all layers
underneath. As part of the principal authentication process, human users authenticate
themselves to the system and provide their identity to the corresponding application.
As mentioned earlier, Ford’s definition [47] (in the context of communications security)
implicitly links the notion of principal to authentication: “authentication relates to a
scenario where some party has presented a principal’s identity and claims to be that
principal”. Therefore a principal has an identity which can be authenticated.
To add to the confusion, the widely-quoted access control model by Lampson (see sec-
tion 3.2.1) defines principals as sources for requests that perform operations on resources
such as files, devices, or processes.
In this dissertation, we define:
33
DEFINITION 5
A principal is a software entity that is verified by the authentication process
as the legitimate holder of the corresponding identity (i.e., that resides on one
end of the security association – see definition 7).
3.2.4 Authentication
Authentication is an important security function, because all other security functions
(e.g., the reference monitor) depend upon it. Authentication can be described as the
means of gaining confidence that people or things are who or what they claim to be (i.e.,
it gives assurance of identity [47]).
This process of verifying a claimed identity is often referred to as entity authentication
to distinguish it from data origin authentication. For data origin authentication, an
identity is presented along with a data item, and it is claimed that the data item originated
from the principal identified.
The CORBASec specification [121] defines authentication as “the verification of a clai-
mant’s entitlement to use a claimed identity and/or privilege set”. This verification pro-
cess is based on some authentication information, which is “used to establish a claimant’s
entitlement to a claimed identity (a common example of authentication information is
a password)”. Depending on the kind of authentication, a claimant can be a user, an
application, or a security system.
In this dissertation, we will distinguish two different types of authentication: principal
authentication and peer authentication. Although the CORBASec specification uses the
terms “principal authentication” (it even specifies an interface with that name) and “peer
authentication”, it does not provide explicit definitions.
Principal authentication allows human users (and application components) to authen-
ticate themselves to the security system. As part of the process, the human user or
application component supplies its identity together with the associated authentication
information to the principal authenticator. The authenticator can then verify that the
authentication information corresponds to the identity, which proves that the authentic
user or application initiated the principal authentication process. As a result of the pro-
cess, the security system can enable application components to act on behalf of the human
user.
DEFINITION 6
Principal authentication is the process that links the identity of a human
user (or application component) to the middleware component that takes part
in the peer authentication process. It involves the security system and a human
user (or application component).
34
that protects invocations in terms of confidentiality and integrity. A security association
is defined as the shared security state information which permits secure communication
between two entities [121]. In other words, the security association on each side contains
the authenticated identities of the repective other entity, as well as cryptographic keys
used for message protection.
DEFINITION 7
Peer authentication is the process between two communicating peers of as-
sociating the identity of the corresponding principal on the other side with
a security association. Security association refers to the security state in-
formation that is shared between the peers, such as (cryptographic) identities
and keys.
DEFINITION 8
Clients are the application software entities that initiate invocations.
In terms of access control, Lampson calls the receiving entity that is accessed through
the request and protected by the reference monitor the “object”, which could be resources
such as files, devices, or processes [84]. Depending on scope and purpose, the CORBA
specification [119] calls the receiving complement of the client either object, servant, or
server (see 2.7.3).
We will try to avoid these terms to prevent overloading of terminology with the object-
oriented programming model, and instead use the name “target” (and later also “re-
source”). The CORBASec specification only defines the term “target” in the context of
privilege delegation (i.e., passing on privileges, so that intermediate principals can act on
behalf of the originator): a target is defined as the final recipient in a delegation call chain
(i.e., the only participant in such a call chain which is not the originator of a call) [121].
This definition is not relevant for our discussion, so our use of the word will not introduce
any ambiguity.
In some of the secondary literature on CORBA (e.g., [61]), a “target object”, within
the context of a CORBA request invocation, is defined as the CORBA object that is the
target of that request. We will use a similar definition, but also include Lampson’s access
control aspect:
DEFINITION 9
Targets are the application software entities that respond to invocations (i.e.,
object implementations), and that are protected by the reference monitor.
35
3.2.6 Client-Side and Target-Side Access Policy
In line with the CORBASec specification [121], we will now extend our previous definition
of access policy (see section 3.2.1) to distinguish between client-side access policies and
target-side access policies (in CORBASec, one or both of these may not be implemented):
DEFINITION 10
Client-side access policies define the conditions that allow the client to
invoke the specified operation on the target object. Target-side access poli-
cies define the conditions that allow the target to accept the invocation.
On the target-side, the access policy states who is allowed to access the services offered
by the target. Consider the following example: a company database application that is
accessed from a public network (e.g., the internet) contains sensitive information, such
as design blueprints. Employees should be able to use client applications to retrieve and
update information in two trusted company databases. In this scenario, the target-side
access control needs to ensure that only authorised employees can retrieve and update
the database to prevent competitors from accessing any sensitive information.
Client-side access control can be useful in cases where clients reveal sensitive infor-
mation as part of an invocation. For example, if a client application should only be able
to invoke a particular target (but no other “rogue” targets that masquerade as the real
target), then a client-side access policy could control that. A client-side reference monitor
would enforce this policy based on the identities established by the (peer) authentica-
tion process. In the previous database example, the client side needs to ensure that
it only invokes the correct database targets to prevent sensitive information (e.g., new
blueprints) from leaking from the client to any competitors (which could masquerade as
the company database). In other words, the policy allows invocations to the target only if
the target’s identity matches with the identity of one of the trusted company databases.
Client-side access policies could be imposed either by the client-side application itself or
by the security administrator.
36
C T
PC PT
IC IT
is based on the identity of the respective other side. Table 3.1 shows an example of a
simple client-side policy, where a client application is only allowed to invoke the target
applications PT1 and PT2 , but no other targets. The target-side policy example displayed
in table 3.2 only grants access to theOperation
Principal target
Do
to P and
Reference
Monitor C1
PC2 , while all other clients are
Object
37
the application layer and the communications authentication mechanism.
3.4.1 Abstraction
The middleware security model should separate the security system from the applica-
tion logic (i.e., the security functionality should be hidden from the application layer).
This is because the security architecture has to preserve the object-oriented programming
paradigm at the application layer, but the object-oriented model as such does not make
any provisions for the required security features.
Supporting abstraction has a number of advantages. Firstly, it allows “security-
unaware” applications to be secured. This means that applications do not need to know
anything about the security features, because all policies are enforced below the appli-
cations in the middleware layer. In particular, legacy applications can be automatically
secured after they have been developed (i.e., without modifications to the code), and
application development can be segregated from the security policy, enforcement, and
administration.
However, on the downside, abstraction can inhibit the usefulness of the security system,
because appropriate policies can often not be written without in-depth knowledge about
the application. Also, the supported policies are generally less flexible and expressive,
because less relevant security information is available outside the application.
Abstraction includes the further aspect that middleware security should be as invisible
as possible to the users of the system. In practice, this can be achieved through a single
sign-on feature that allows users to authenticate themselves to the system once to establish
credentials, which can then be reused for many invocations.
Middleware security cannot be totally abstracted from security administrators, be-
cause security administrators have to understand the security system to be able to specify
appropriate security policies. However, abstraction allows for centralised policy adminis-
tration for all application layer entities that reside on top of each middleware component.
To fully achieve this goal, the middleware security system also needs to be architecturally
separated from the underlying security technology (see 3.4.3).
38
3.4.2 Portability
To support porting of applications across differing middleware security implementations
and underlying security technologies, all security features should be placed below the
application layer. This matches the design decision chosen for the abstraction requirement.
Our definition does not include portability of security policies and enforcement (to-
gether with the application), unless the middleware component implementation to which
the application is ported supports the same security functionality as the original mid-
dleware component implementation. If security features and policies should be ported
together with the application, then it might be preferable to tie certain security features
(e.g., access control) into the application logic – which would conflict with our portability
requirement described above.
3.4.3 Flexibility
All security functionality that is not specific to middleware, such as (cryptographic) com-
munications security mechanisms for authentication and message protection, should reside
on the underlying security technology layer. This normally includes general purpose se-
curity mechanisms that provide (cryptographic) authentication and message protection
(e.g., Kerberos v5 and SSL). General purpose functionality means that it can be used in
the same way with middleware as with any other technologies, because it does not rely
on many details of the invocation. For example, for SSL there is no difference between a
web browser that securely connects to a web server, and a CORBA client that invokes a
target object over SSL. Therefore, standard security mechanisms (such as SSL and Ker-
beros v5), which may already be in place between network nodes, can easily be reused for
the middleware security architecture.
In contrast, access control and audit normally rely on additional information that is
specific to middleware, such as the invoked target instance, or the particular operation
invoked. This information is only available in the middleware layer, because most of the
message content cannot be interpreted in the underlying technology layer. For example,
in many middleware technologies (e.g., CORBA) it is not easy below the (target-side)
middleware layer to find out which specific target instance is invoked, because the instance
identifier has been chosen at random in the middleware layer. As a result, this middleware
specific part of the security architecture should reside in the middleware layer. These
features normally do not need to be replaceable because no standard security mechanisms
are available to be reused to provide this middleware specific functionality.
The flexibility interface that separates the (specific) middleware security technology
from the (unspecific) underlying security technology hides the exact details of the un-
derlying security technology from the higher layers (e.g., GSS-API [1]). This allows the
underlying security technology and policies to be replaced without affecting the higher
layers, so that pre-existing security technology can be re-used without the need for new
cryptosystems, logons, security attribute repositories, user registries, or policy databases.
Following from this discussion, we define:
DEFINITION 11
In line with the terminology defined in section 2.4.1, we will use the term
underlying security technology to denote all security functionality that is
39
unspecific to the middleware architecture, in particular for (cryptographic) au-
thentication and message protection. All security functionality that is specific
to middleware (but optionally uses security attributes from the underlying
security technology), is referred to as middleware layer security tech-
nology, in particular access control and auditing. The more inclusive term
middleware security is used to denote security features at both layers.
Ideally, it would be desirable to keep not only evaluation and enforcement, but also
the policies independent of any details of the underlying security technology. This would
allow for flexible replacement of underlying security technology, as well as centralised
policy administration across different security technologies. However, keeping policies
completely technology independent is difficult to achieve in practice, because the secu-
rity functionality that resides in the middleware layer (i.e., access control and audit)
normally relies on the security attributes established by the authentication mechanism
in the underlying technology layer. Moreover, it is hard to find a semantically correct
abstracted representation of the security attributes supplied by the underlying security
technology [87].
In general, the flexibility interface should support a variety of different security at-
tribute types and features, depending on the level of protection required. For example,
it should be possible to flexibly extend the standard security attributes of the model to
reflect additional requirements.
3.4.4 Interoperability
To support interoperability, it should be possible for security administrators to provide
a set of consistent security policies across heterogeneous systems where different vendors
provide different middleware and security products. This way, organisations can imple-
ment distributed systems without vendor restrictions, and choose the most appropriate
technology.
Secondly, application layer entities that reside on a security-enhanced middleware
component should still be able to interoperate with application layer entities that do not
have any security. Of course such communications will not be secured, and it depends
on the particular security requirements of the application (on the security-enabled end) if
this should be allowed or not. From an architectural design viewpoint, this requirement
means that the security protocols have to be layered over the unsecured interoperability
protocols, and that the security enforcement has to be integrated into the communications
path in such a way that it can be switched on and off depending on the security policy
for each invocation.
Finally, it would be useful to support semantically correct interoperability across sys-
tems that support different kinds of security policies and underlying security technologies
(e.g., different authentication mechanisms). The advantage of this would be that an ap-
propriate set of policies and security mechanisms could be chosen for each application
environment without inhibiting interoperability. However, this can only be achieved if a
converter is developed that has access to all cryptographic keys, which breaks end-to-end
security, in particular peer authentication (see definition 7).
40
3.4.5 Automation
The middleware security architecture should be integrated into the invocation path in
such a way that the security policy is automatically evaluated and enforced whenever an
invocation occurs. The layers below the application are a convenient place to intercept
all invocations, because all traffic has to go through them on the way from the applica-
tion layer to the underlying network and vice-versa. Automation is somewhat related to
abstraction.
3.4.6 Scalability
The security model should support systems of different size, ranging from small to very
large. The described layering can help scalability (and efficiency), because only one single
reference monitor is needed to protect a potentially large number of application layer
entities.
Actual upper limits to the number of participants or policy entries should be purely
implementation-specific (i.e., depend on the underlying security technology and the policy
implementation).
In addition, the security architecture should provide the means to make administration
of large-scale secure systems easier. To reduce the administrative overhead, individual
clients (or human users) should be grouped into roles (or groups) with the same privileges.
Analogously, targets which share the same security policy should be grouped into domains.
41
Client Target
Application Application
Portability Interfaces
Middleware: Middleware:
Access Control, Access Control,
Audit Audit
Flexibility Interfaces
Underlying Underlying
Technology: Technology:
Authentication Authentication
Message Protection Message Protection
C T
Middleware Middleware
PC PT
IC IT
layer into the simple communications security model described in section 3.3. Like in the
previous model, the reference monitor uses the underlying authentication mechanism to
authenticate the identities IC and IT of the respective peer. The policy contains the same
information as in the previous model. Conceptually, not much changes in this model,
as there is only one application per reference monitor. As with the previous model, the
client and target could again be viewed as the principals.
However, to set the scene for the next model, it needs to be made clear that the
middleware components on both sides are Do
theReference
principals the identities correspond to. This
Principal Object
is because the reference monitor in theOperation
middlewareMonitor
layer conducts the authentication, and
therefore resides on both ends of
Source
the security
Request
association.
Guard
Figure 3.4 illustrates this simple
Resource
3.7 Summary
Principal Do Reference
Object
Operation Monitor
In this chapter, we constructed a first layered middleware security model that forms the
basis for the discussions in the following
Source chapters. As
Request a precondition,
Guard we first defined the
Resource
terminology used to describe the model (access control, authentication, principal, identity,
42
client, target).
In order to integrate with the middleware architecture, the model had to be designed
in such a way that it preserves the architectural requirements outlined in section 2.4.2:
for portability, abstraction, and automation (and scalability), all security features should
reside below the application layer. Interoperability can be achieved with security enhanced
middleware protocols and mechanism converters (e.g., for cryptographic keys).
For flexibility, all security functionality that is middleware unspecific, in particular
(cryptographic) authentication and message protection, should reside in the underlying
technology layer. The exact details of the used underlying security technology are hidden
from the middleware layer by the flexibility interface. All security features that need
to know more middleware specific information, in particular access control and auditing,
should reside above the flexibility interface (i.e., in the middleware layer). This is because
middleware specific information from the message header, such as the invoked target
instance and operation, can only be interpreted at this layer. The middleware security
technology can obtain security attributes from the underlying security technology through
the (standardised) flexibility interface, which hides exact mechanism details. This archi-
tecture allows easy replacement and reuse of (middleware unspecific) underlying security
technology.
In the next chapter, we will analyse the difficulties introduced by this layering and the
fact that access control (and audit) rely on the identities established by the underlying
security technology.
43
44
Chapter 4
4.1 Introduction
In the first part of this chapter, the simple middleware security model (see section 3.6) is
refined step-by-step to capture a fine-grained access policy inside a reference monitor that
resides in the middleware layer. In the model, the target-side reference monitor enforces an
access control policy on incoming requests. The discussion in this chapter will show that
the identities provided at the underlying technology layer (e.g., network communications
authentication) are not fine-grained enough to capture useful access policies. To express
individual application layer entities in access control policies, more fine-grained descriptors
are necessary in addition to (cryptographic) identities.
The second part of this chapter describes the properties such descriptors should meet
in order to be useful, and analyses the availability of descriptors for targets and clients
in the middleware architecture. It will be pointed out that only local descriptors are
trustworthy, and consequently remote descriptors will be removed from the model. Using
the results of this analysis, a middleware security model is presented that is implementable
in practice.
The third part of this chapter refines the semantics of descriptors by introducing a
specific notion of resource that meets the identified properties, and shows how resource
descriptors can be associated with target instances by using a mapping process called
resource descriptor mapping (the proof-of-concept implementation of such a mapping
process for CORBA will be described in chapter 6). For completeness, this chapter also
includes a brief discussion of resource domains.
45
C1 C2 C3 T1 T2 T3
Middleware Middleware
PC PT
IC IT
In this model, there is still only one identity IT per target middleware component,
and thus all targets T1 , T2 , T3 are part of the same principal. Again, the access policy
resides in the middleware layer (as part of the reference monitor) and contains the same
identities as in the previous model. But this time the semantics are different. In the
previous models, the identities in the access policy represented the application principals
because there was only one application per middleware component. Now the identity
on each side represents the middleware component instead, and not individual clients or
targets. In other words, the identity specified in the target-side access policy would now
represent the client-side middleware
Principal component
Do
Operation
whose Object
Reference
Monitor
clients are all allowed to access
(any of the) targets that resideSource
above theRequest
target-side
Guard
middleware
Resource
component.
In the bank account example outlined above, the principal specified in the target-
side access policy would represent the client-side middleware component whose client
applications are allowed to access any bank accounts that reside above the middleware
component on the bank server. In practice, this is not a problem as far as the client
is concerned, as there is normally only one client application (e.g., the home-banking
application) per middleware component. The problems surface on the target side, where
several bank account objects of different customers reside. Only the authorised account
owner should be allowed to access its account target, and it should not be allowed to
access accounts of other customers. Such a policy cannot be expressed in this security
model.
To conclude, access policies in this N-to-1 middleware security model are not expressive
(i.e., fine-grained) enough for many real-world applications, because all clients and targets
on top of each middleware component share the same identity as far as the reference
monitor (which resides in the middleware layer) is concerned.
46
PC1 PC2 PC3 PT1 PT2 PT3
Middleware Middleware
principals that reside within the scope of this reference monitor. This is done by using
a separate identity for each client or target application, so that the clients and targets
become the principals. In other words, the policy inside the target-side reference monitor
states the identity of the clients that are granted access, and the client-side policy states
the targets which the clients is allowed to access. The reference monitor on each side
would now be able to authenticate on a per-client (or per-target) basis (see example in
figure 4.2).
Table 4.1 shows a simple client-side policy example, where the client PC1 should be
granted access to some target applications PT1 , but not to any other target application
on the same (or any other) middleware component. Similarly, another client P C2 should
be granted access to some target applications PT2 , but not to any other target application
on the same (or any other) middleware component.
On the target side we can describe an equivalent policy (see table 4.2). Some client
PC1 should be granted access to the target applications PT1 , but not to any other target
application on the same middleware component. Similarly, another client PC2 should be
granted access to some target applications PT2 , but not to any other target application
on the same middleware component.
Unfortunately, this model cannot be implemented within the context of the previously
described architectural design (see section 2.4.2), where the authentication of identities is
conducted by a reference monitor in the middleware layer. This is because the reference
monitor in the middleware layer breaks end-to-end authentication between clients and
targets: the reference monitor on one side of an invocation can only authenticate the
middleware component underneath the target (or client) on the other side, and then it
has to trust the remote middleware component to mediate the request or reply to the
47
Local Identity Remote Identity Access Decision
IT 1 IC 1 Grant
IT 2 IC 2 Grant
* * Deny
C1 C2 C3 T1 T2 T3
Middleware Middleware
PC1 =PC2 =PC3 PT1 =PT2 =PT3
correct target (or client). Although separate identities have been assigned to individual
targets (and clients), the principal that is authenticated is always only the middleware
component below the targets (and clients). This problem could be solved if the reference
monitor was shifted up into the application layer, but this approach would break most of
the design requirements of the middleware security architecture (as described in 3.4)
Apart from this conceptual problem, such a model cannot be implemented well in
practice. This is because a security association has to be established before the actual
request is sent, so that the correct policies can be applied to the connection. However,
this means that the receiving middleware would need to know which target is invoked
before the request has been sent in order to be able to set up a security association with
the correct key. One way of solving this “chicken-and-egg” problem involves assigning a
separate network connection to each target. However, this is cumbersome to implement,
in particular for CORBA, and does not scale well.
This discussion shows that in fact we have described a different model (illustrated in
figure 4.3), where each authenticated identity represents the middleware component in
that trust domain. So, on the target side, the identities IT1 , IT2 , and IT3 represent the
same middleware component (i.e., PT1 = PT2 = PT3 ), and on the client side, the identities
IC1 , IC2 , and IC3 represent the same middleware component (i.e., PC1 = PC2 = PC3 ).
To summarise, the middleware security architecture breaks end-to-end authentication,
so that the use of separate identities for individual clients and targets cannot achieve client
or target authentication. The only possible use for such different identities would be to
represent the clients and targets locally inside the access policy. This would allow the
association of individual access policies with each local target (or local client). However,
the same functionality can be achieved with less effort by having one identity per mid-
48
C1 C2 C3 T1 T2 T3
Descriptors Descriptors
Middleware Middleware
PC PT
IC IT
dleware and simple descriptors to represent clients and targets inside the access policies.
Such a model will be constructed next.
descriptor (<client/target>)
In this model, clients and targets can be uniquely identified (but not authenticated)
through a compound that consists of the identity of the middleware component principal
and the descriptor of the invoked target.
A client-side policy would look like this (see table 4.3): a client (not principal!) C 1 is
allowed to access the target T1 on the middleware component PT (principal correspond-
ing to identity IT ). In this model, the client-side reference monitor needs to know the
descriptors for both client and target to express this policy.
A target-side policy (illustrated in table 4.4)) could similarly specify that a client (not
principal!) C1 that resides within the middleware component PC (principal corresponding
to identity IC ) is allowed to access the target T1 on the local middleware component. In
this model, the target-side reference monitor needs to know the descriptors for both client
and target to express this policy.
49
Local Descriptor Remote Identity and Access Decision
Descriptor
descriptor (C1 ) IT + descriptor (T1 ) Grant
descriptor (C2 ) IT + descriptor (T2 ) Grant
* * Deny
This model has a number of weaknesses. Firstly, remote descriptors cannot be used
to authenticate the remote client (or target), thus the underlying remote middleware
component needs to be trusted to mediate the invocation to and from the client (or
target) that is actually described by the descriptor. In addition, both sides need to obtain
and administer the descriptors for the remote clients (or targets), which can become
unmanageable if clients and targets are added and removed frequently.
50
Local Descriptor Remote Identity Access Decision
descriptor (C1 ) IT Grant
descriptor (C2 ) IT Grant
* * Deny
(see table 4.6) could similarly specify that any client that resides within the middleware
component PC (principal with the identity IC ) is allowed to access the target T1 on the
local middleware component. In this model, the target-side reference monitor needs to
know the descriptor for the target to express this policy.
4.6 Descriptors
The type of middleware discussed throughout this dissertation tries to preserve the object-
oriented programming model, which does not provide explicit unique names for clients
and targets. In the object-oriented model, the target object instance is represented by
a unique pointer (within the scope of the system), which can be used by the client to
invoke operations on the target. Clients do not have any explicit representation in the
object-oriented model, their only property is that they invoke operations. As a result
of this, clients and targets also do not have explicit unique names within a middleware
architecture that preserves the object-oriented programming model (e.g., CORBA).
We have explained in the previous section why descriptors are needed to express poli-
cies on a per-target (or per-client) granularity in the N-to-1 middleware security model. In
the following, we will describe the properties descriptors should have. Then we will anal-
yse which descriptor options are available within the middleware architecture to describe
targets and clients.
Descriptors are necessary in the middleware security model because identities only
represent middleware components, but not individual targets or clients. Descriptors de-
scribe individual targets and clients within the scope of one reference monitor (i.e., all
targets and clients that reside on top of one middleware component). The purpose of
descriptors is to express more fine-grained access policies inside the reference monitor.
To be useful, descriptors need to fulfil the following properties:
• Uniqueness:
Descriptors should be unique within the scope of a middleware component principal
and describe the targets or clients at a per-target (or per-client) granularity. In
other words, it should be possible to associate a separate descriptor to each target (or
51
client) that will be unique within the scope of the underlying middleware component
(we will show in section 4.10 that we need a more refined definition of target, which
we will call “resource”)
• Persistency:
Descriptors should be “persistent” in the sense that the same descriptor should
describe the same target (or client) independently from the object instance lifecycle.
This property allows static policies to be expressed (in particular before the target
object is instantiated). If the descriptor for the same target (or client) were to
change frequently, then the policy inside the reference monitor would need to be
updated each time.
• No Authentication Mechanism:
Descriptors should not involve any authentication mechanism. There are a number
of reasons for this:
• Coupling:
Descriptors should be tied to the invocation in the following sense: if a descriptor
is used by the target reference monitor to describe a target in the policy, then the
addressing information that is used by the middleware mechanism to forward the
request to the target should be the same as the information used to obtain the
corresponding descriptor. In other words, it should not be possible for a malicious
client to invoke one target, but tamper with the message in such a way that it points
to a descriptor for another target. If this were possible, then a malicious client could
select any access policy of its choice to be applied to the invocation.
52
Interface Remote Identity Access Decision
Bank I C1 Grant
Account I C2 Grant
* * Deny
53
this work, all targets would need to export an operation that supplies their interface.
However, this can fail if interface inheritance is used, because it depends not just on the
invoked object, but on the individual invoked operation if the implementation is part of
the target interface or if it is actually inherited from a parent class. In other words, it is
not always possible to determine the exact “most derived interface” (MDI) of an invoked
target operation [63].
This discussion illustrates that the interface name is not a suitable target descriptor
because it does not always uniquely describe the target, and because it is not always
coupled to the invocation mechanism.
54
Local Instance Remote Identity Access Decision
1 IC1 Grant
2 IC2 Grant
* * Deny
table 4.8) should specify which client-side principals are allowed to access the colour
printer (instance id=1), and which are allowed to access the black and white printer
(instance id=2).
Now assume the colour printer jams and needs to be reset (and the corresponding
target needs to be re-instantiated). To illustrate the need for transient object references,
none of the clients that are using the printer at the time of the paper jam should continue
with their print jobs. The new instance of the colour printer should therefore have the
new instance id=3. However, there is no access rule for this new instance, thus the
administrator needs to reconfigure the access policy to reflect the changes.
The request header also contains the name of the operation that should be invoked. In
line with the object-oriented programming model where no two operations can have the
same name within the same interface (unless polymorphism is supported), this name is
unique within the scope of the target.
The use of the operation name in the policy allows the specification of access rules on
a per-operation granularity. Table 4.9 shows an example printer policy where one client-
side principal is allowed to print on the printer (instance id=1), while another client-side
principal is allowed to reset the same printer.
Operation names are persistent in the sense that a target will always export the same
operations, regardless if the instance changes. The establishment of operation names
does not involve any authentication mechanism, and they are coupled to the invocation
mechanism because the middleware addressing mechanism uses the same operation name
to find out which operation is being invoked.
As mentioned above, operation names are not unique if polymorphism is supported.
This means that several operations can have the same name, and the correct one is selected
based on the number and type of the supplied parameters. In this case, the same policy
will apply to all instances of the specified operation.
55
Remote identity Access Decision
IT Grant
* Deny
56
Local descriptor Remote identity Access Decision
descriptor (T1 ) IC Grant
descriptor (T2 ) IC Grant
* * Deny
4.10 Resources
The previous discussion about target descriptors has covered a number of options, in
particular the interface type and the instance identifier. However, both do not fulfil all
the descriptor properties identified above. The interface type does not uniquely identify
targets and is not always coupled to the invocation mechanism, and the instance identifier
is normally not persistent.
In the following sections, we will try to construct a descriptor that is based on the
transient instance identifier, but that is also persistent (i.e., not bound to the lifetime of
the target instance). Such a descriptor would fulfil all the required properties.
As a first step, we have to define what we would exactly like to protect. We do
not want to protect a particular target instance as such, instead we want to protect the
“service” offered to the caller. This service is of course provided by an instance, but
it is irrelevant whether the instance gets terminated and a new instance takes over to
provide the service (which implies that the object reference will change). In line with the
previously described access control model [83], we will call such a service “resource” and
the corresponding descriptor “resource descriptor”:
DEFINITION 12
A resource is a service offered to a client by a target instance. The instance
that provides a resource can change over time, but it will always be protected
by the same access rule. A resource descriptor describes (inside the access
policy) a resource that is provided by a target instance.
In the previously described printer example, we would like a persistent (i.e., unchang-
ing) name that is associated with each printer resource. For example, the colour printer
should be called “Colour”, while the black and white printer should be called “B&W”.
Both printers are of the same interface type. These names should describe the respective
printer, regardless of the target instance identifier and the interface type of the target.
The exemplary policy is illustrated in table 4.12.
57
Resource descriptors fulfil all the properties required for descriptors. They do not
involve any authentication mechanism. They are coupled with the invocation addressing
mechanism, because they are based on the instance identifier. They can uniquely identify
the target, because each target instance can be associated with a separate resource de-
scriptor (we will show later that resource descriptors can also be shared). In particular,
resource descriptors fulfil the persistency property, because the administrator will provide
the same resource descriptor each time the same resource is instantiated. Therefore, the
policy can remain unchanged even if the instance that provides the resource gets shut
down and re-instantiated (and the object reference changes).
An additional practical advantage of using such resource descriptors over using target
instance identifiers or interface names is that they are intuitive to understand and easy
to administer.
58
Target
Instance
trigger instantiation,
1 provide resource descriptor
2
Object Reference
Target-side
3 Middleware
Mapping Table
4
Target Resource
instance descriptor
identifier
Target Target
Instance Object Instance
Reference
1 Reference
3 Monitor
Client-side Target-side 4
Middleware Middleware
Mapping Table
Target Resource
instance descriptor
2 identifier
The request contains the target instance identifier, which will be used by the target-side
middleware component to locate the correct target.
When the request arrives at the target-side middleware component, the target instance
identifier is extracted from the request header and passed to the reference monitor (op-
tionally together with the name of the invoked operation) ③. Next, the target instance
identifier needs to be mapped back to the resource descriptor, because the policy inside
the reference monitor is based on resource descriptors ④. Finally, the resource descriptor
is passed back to the reference monitor, which then evaluates and enforces the access rule
for the corresponding resource. Depending on the outcome, the result is either rejected
or passed up to the target instance.
59
gets larger, it would be preferable to group several resources into domains. We will call
such domains “resource domains”, and the resources in the resource domain are called
“resource domain members”. The main property of resource domains is that the same
access rule applies to invocations to all of its members.
In the following, we will describe two simple ways of adding domain support to the
mapping described above.
60
Local descriptor Remote identity Access Decision
Colour I C1 Grant
B&W I C2 Grant
Colour B&W I C 1 IC 2 Grant
* * Deny
“B&W” when the third printer is instantiated, so that the combination of both corre-
sponding access rules applies. Alternatively, another descriptor could be assigned to each
resource, and a separate domain table could then be configured to group resources into
different domains. Our proof-of-concept implementation (see chapter 6) uses hierarchical
domain names to group resources into domains, which could be elegantly implemented by
reusing CORBA’s object adapter hierarchy.
Combinations and topologies of resource domains are considered outside the scope of
this dissertation and will therefore not be discussed any further.
4.13 Summary
This chapter shows that the identities supplied by the underlying technology layer are
not expressive enough to describe useful access control policies. Instead, additional more
fine-grained descriptors are needed, which have to meet a number of properties in order
to be useful. However, no suitable descriptors are available in the middleware layer to
describe the client, and although some options are available to describe the target, none
fulfils all properties.
Using the results of this analysis, an improved middleware security model is presented
that is implementable in practice, and that is based on “resource descriptors” that fulfil
all required properties. Resource descriptors can be associated with target instances
by using a mapping process called resource descriptor mapping. The proof-of-concept
implementation of such a mapping process for CORBA and CORBASec (see chapter 5)
will be described in chapter 6.
61
62
Chapter 5
5.1 Introduction
This chapter tries to bridge the gap between the largely descriptive concepts described
in the previous chapters and the real-world implementation described in chapter 6. Its
first part will introduce the features of the CORBA Security Services (CORBASec) [121]
that are relevant for our discussion, while the second part will examine whether or not
its architecture and design meet the middleware security design requirements outlined in
section 2.4.2.
• Authentication:
Principal authentication allows clients and targets to authenticate themselves to
CORBASec to set their credentials. Peer authentication is concerned with the
verification of the identity of the respective other party. In CORBASec, the peer
63
authentication feature relies on the underlying security technology, which causes a
number of problems (see section 5.2.3).
• Delegation:
Clients can authorise intermediate targets to use their identity or privileges, option-
ally with restrictions. This feature relies on the underlying security technology (SSL
cannot support delegation, but the CSIv2 [120] protocol introduces an additional
protocol layer that supports the use of delegation tokens). Delegation is not related
to our discussion and will therefore not be described further.
• Message protection:
Data in transit can be protected from integrity and confidentiality attacks. This
feature also relies on the underlying security technology (e.g., SSL).
• Access control:
Access to target application entities can be controlled. This feature is dependent
on the security attributes established during authentication (and possibly also del-
egation). We will show later in chapter 6 how the resource descriptor mapping
introduced in chapter 4 enhances the access control model to allow for more expres-
sive policies.
• Audit:
Security relevant events can be recorded into different audit stores. Audit policies
state the conditions that have to be met to trigger the logging of events. Audit
policies benefit from the increased expressiveness provided by the resource descrip-
tor mapping in exactly the same way as access control policies, therefore it is not
necessary for our discussion to describe auditing in addition to access control.
• Non-Repudiation (optional):
The generation and verification of irrefutable evidence of actions [68] are not rele-
vant for our discussion and will therefore not be described.
In line with the architecture described in section 3.5, CORBASec relies on underlying
security technology (in particular for communications security), such as Kerberos v5 [80],
SESAME [74], and SPKM, through an interface modelled after GSS-API [94]. SSL is also
widely used as a basic security mechanism for CORBASec. Unfortunately it does not inte-
grate well into the CORBA security architecture because it establishes a TCP/IP network
connection as part of the SSL security context establishment. As a consequence, SSL has
to be integrated into the ORB as an alternative transport mechanism, so that a security
context is set up automatically whenever the ORB opens a new network connection.
The CORBA architecture interacts with CORBASec at various point in the invocation
path through so-called “interceptor interfaces”: request level interceptors are called before
the request is marshalled by the ORB and are therefore a convenient location for access
control and audit, while message level interceptors are called after marshalling (i.e., just
before the message is sent over the network), and normally host the message protection
functionality.
In addition to providing security features automatically below the application layer,
CORBASec also comprises application-facing interfaces that allow applications to eval-
uate and enforce their own security policies and to configure or query the underlying
64
middleware security features. However, these interfaces are used for application layer
security and not for middleware layer security, and are therefore not of interest to our
discussion.
In the following sections, only the security features that are relevant for our discussion
are presented in more detail. Because some of the terminology used in the CORBASec
specification is ambiguous, imprecise, and sometimes overloaded, we use the more precise
definitions presented in chapter 3 (e.g., principal, identity, client, target, authentication)
instead. This makes overloaded CORBASec terminology such as “subject” obsolete.
65
needs to record the initiator of the event to provide accountability.
Principal Authenticator
The central object of the authentication model is the PrincipalAuthenticator, which
provides a method authenticate for users and application layer entities to authenticate
themselves and to create their credentials (generally through a user login program). In
addition to supplying its claimed identity and the associated authentication information
(e.g., password or certificate), the caller can specify the authentication method to use
(e.g., password validation), and the security mechanism (e.g., X.509 certificate).
Depending on the information provided, the authenticate method returns caller
specific credentials (together with mechanism-specific data, and optional continuation
data if authentication proceeds in several steps). The created Credentials object is
placed into the Current or SecurityManager object so that it can be used during security
session establishment (see 5.2.3).
Policy
The principal authentication policy specifies which identities and privileges are to be
given to a principal based on the presented authentication information. This policy is
not explicitly represented within CORBA security, it is rather implicitly enforced by the
underlying authentication mechanism: based on the provided security information, the
authentication mechanism behind the principal authenticator will decide which privileges
to put into a principal’s credentials object. The generated credentials often contain some
authentication mechanism specific data (e.g., an X.509 certificate that describes the prin-
cipal), which complicates central administration.
Enforcement
Principal authentication policies are enforced by the principal authenticator, and ulti-
mately by the underlying authentication mechanism. The model only describes how the
underlying authentication mechanisms are integrated into the security architecture. For
66
example, if Kerberos is used, there is an authentication server which contains all authen-
tication information and is trusted to authenticate principals correctly. If SSL is used,
then there would be a trusted certification authority which signs cryptographic identity
certificates.
• Own credentials: contain the identities and privileges of the local principal associ-
ated with the active context. Own credentials are generated on both sides during
the principal authentication process (see section 5.2.2). Separating principal au-
thentication from peer authentication supports single sign-on.
67
Caller Target
User
User Application Application
Layer Layer
User
User
Sponsor
Sponsor
User
authentication
Attributes Attributes e.g. certificate
Current Current
Principal Principal
Authenticator
Principal
“Own”
“Own” “Own”
“Own” Authenticator
creates
Credentials Credentials creates
credentials credentials
ORB Target
Target Received
Received ORB
Credentials
Credentials Credentials
Credentials
Layer Security Association Layer
Establishment
• Received credentials: reside on the target side and contain the identities and priv-
ileges of the remote entity from which the execution context has most recently
received a message (if it has received any).
• Invocation credentials: contain the identities and privileges the execution context
will use the next time it sends a message. This is normally the same as the own
credentials, but if the execution context has become a delegate, then the invocation
credentials may be the same as the received credentials.
• Target credentials: reside on the client side and contain a remote principal’s au-
thentication information for the client’s security association with the target.
68
SecurityContext object with all related credentials.
Context Access
The ORB architecture provides a standard way to access information associated with the
active execution context. An application entity can find out what execution context it is
in and what that context’s credentials are by calling the ORB to get its so-called Current
and SecurityManager objects and then querying them to obtain any of the credentials
associated with the current execution context.
The CORBA security model associates security state information, including the cre-
dentials of the active principal, with the Current object. So, in essence the Current and
SecurityManager objects provide access to security information, such as the credentials
for the principals involved, from the active security association.
Interoperability
To support the described protocol exchanges necessary for security association estab-
lishment (and for message protection, see 5.2.4), the CORBA IIOP protocol requires a
number of enhancements. To allow for replaceability, these enhancements are added as
a separate Secure-Inter-ORB-Protocol (SECIOP), which is inserted on top of the IIOP
protocol and transmits security information and GIOP messages securely across the net-
work. Where possible, SECIOP messages are sent together with IIOP messages rather
than as separate exchanges. However, this is not always possible, for example when a
client wishes to authenticate the target before it is prepared to send an IIOP message.
SECIOP uses standardised security tokens to support the establishment of security as-
sociations. Although the types of security tokens are standardised (e.g., establish context,
message context), the number of tokens used and the content of the tokens are mechanism
specific. Token details for Kerberos, SESAME, and SPKM are specified for use with SE-
CIOP, so that implementations which use the same mechanism (and consistent policies)
can interoperate. If SSL should be used as a communications security mechanism, then
the SSL-Inter-ORB-Protocol (SSLIOP) replaces SECIOP in the protocol stack.
Policy
The message protection policy specifies what Quality of Protection (QoP) needs to be
applied to each message. The security model supports three different kinds of message
protection (origin authentication, confidentiality, integrity), and the QoP policy defines
which of them should be applied to a message, and at what strength.
The security model allows the definition of message protection policies in three places:
system owners can specify client secure invocation policies and target secure invocation
policies (on the ORB layer), which are attached to the Current object; target object
owners can define application layer policies in the target’s object reference, so that data
69
flowing into and out of their targets is adequately protected; principals can specify in the
principal’s Credential object the minimum level of protection that has to be applied to
all messages they send and receive.
Negotiation
To implement an appropriate level of message protection, the CORBA security system
needs to combine the individual policies to arrive at the QoP that has to be applied to a
message. The model supports a weak form of QoP negotiation between the communication
parties: first, the client-side required QoP is collected from the principal’s credentials,
the object reference, and the Current object. Next, the target-side accepted QoP is
established from the Current and Credentials object, as well as the sender’s required
QoP. In case of a match, the security service creates a SecurityContext object that
implements the QoP.
Enforcement
Message protection is enforced automatically for all messages by the security system,
which calls the operations protect message and reclaim message on the SecurityContext
object. CORBA allows a choice of cryptographic algorithms for message protection. Fur-
thermore, request and response may be protected differently, and both integrity and
confidentiality protection can be applied to the same part of the message. In the CORBA
security architecture, the underlying cryptographic mechanisms are not visible outside
the security service – confidentiality and integrity protection are abstracted from the
application layer.
Interoperability
The SECIOP and SSLIOP (see section 5.2.3) add cryptographic encapsulation of GIOP
messages to the IIOP protocol. In addition, a security enhanced IOR format includes the
authenticated identity of the target, relevant target-side security policy attributes, and the
list of security mechanisms supported and required by the target (for QoP negotiation).
Despite these standard protocols, secure interoperability can only be supported if ORBs
share consistent security policies, and if the same security mechanisms are used on both
sides.
Policy
In many environments, access control policies on a per-object granularity are not enough,
as targets will frequently expose a number of operations with differing security needs.
For example, an electronic banking object Bank could have a method get admin contact
70
Access Control Policy
Access Required
Policy Rights
? ?
which is accessible to any user of the system, whereas a withdraw operation should be
restricted to authorised customers.
Consequently, CORBASec supports access policies on a per-operation granularity. To
solve the scalability problems of per-operation granularity, the model associates standard
sensitivity levels to each operation (g (get), s (set), u (use), and m (manage)). This way,
the policy can compare the level required to access the operation with the level granted
to the client, and only allow access if the client’s granted level is sufficient. Several access
rights can be combined as a union (any) or intersection (all).
Implementations may define additional customised rights families to fit the model
to their particular access control requirements. This way, the access control model can
support a number of different policies, such as Access Control Lists (ACLs), Capability
Lists, and Role Based Access Control (RBAC). However, the use of additional rights
families impedes interoperability since the target side may not be able to interpret the
caller’s privileges correctly.
Evaluation
The access control evaluation functionality, which is encapsulated within the Access-
Decision object, works as follows (see figure 5.2):
• Whenever a message arrives, the ORB security service intercepts it and passes it to
the AccessDecision object to find out if the access is allowed.
• The AccessDecision object then forwards the caller’s credentials (from the Current
object) to DomainAccessPolicy (from the target’s DomainManager), which returns
the granted rights for the calling principal.
• AccessDecision then calls the RequiredRights object to find out the required
rights for invoking the target method on the target object.
• AccessDecision is now able to compare the granted rights with the required rights.
It will only allow the invocation if the granted rights match (at least) the required
rights, otherwise the request will be blocked. Additional checks can be put in place
at this point, such as controls that are applied to the privileges (e.g., lifetime).
The following IDL fragment shows the central operation on the AccessDecision in-
terface, which bases its access decision on the following attributes:
71
• The list of credentials associated with the invocation, in particular the remote peer
identity. This argument is of critical importance to the access decision and can be
obtained easily from the security context.
• The object reference used to invoke the target. We have already shown in the
previous chapters that it is not advisable to use the information from the object
reference directly, because it will change frequently, and the policy will need to be
updated every time the object reference changes.
• The name of the operation being invoked on the target. This attribute is useful for
access decisions at a finer granularity, and it can be obtained easily from the request
header.
• The name of the interface to which the operation being invoked belongs. This
interface is called “most derived interface” (MDI) and will have to be supplied in
cases in which the operation being invoked does not belong to the interface of which
the target is a direct instance. As previously explained, there is a problem related
to the fact that the MDI cannot be obtained reliably in all cases, which impedes its
usefulness for access decisions.
boolean access_allowed(
in SecurityLevel2::CredentialsList cred_list,
in Object target,
in CORBA::Identifier operation_name,
in CORBA::Identifier target_interface_name
);
The AccessDecision object does not directly rely on any underlying security mech-
anisms for its evaluation, it deals with the standard (required and granted) access rights
instead. The implementations of DomainAccessPolicy and RequiredRights, on the
other hand, select access rights based on (mechanism-specific) credentials provided by the
previously described security features.
This operation will be modified in chapter 6 to take into account the names of the
domains of which the target is a member (i.e., the resource descriptor).
Enforcement
Enforcement is automatic because the security service intercepts all messages in the mes-
sage path and mediates them through AccessDecision.
72
many application requirements with a one-fits-all architecture. Thirdly, abstraction in
such systems is not easy to achieve and thus the architecture gains further complexity.
Finally, administration of the CORBA security architecture is complicated because of its
support for many different policy and mechanism types, and because there is often mutual
distrust between the participants.
One of the main difficulties is that some goals conflict with others. In particular,
there is a clash between interoperability and flexibility [88], because flexibility involves
the customisation of functionality, whereas interoperability can only be accomplished
through standardised functionality and protocols. For example, the flexible use of custom
security attributes will inhibit interoperability, because they can only be understood by
security implementations that support the same custom attributes. Another conflict along
these lines is between flexibility and assurance – real assurance can only be certified if the
system as a whole is looked at, so each time a component is changed the whole system
needs to be re-evaluated. But flexibility in CORBA security means that components can
be changed without affecting any parts on the layers above. It is clear that the security
architecture can only try to find the best trade-off between such conflicting goals.
Discussions about the CORBASec specification also get complicated because some
design goals depend on the actual implementation of the ORB and the CORBA security
services product, in particular the assurance, performance, and scalability requirements.
OMG specifications only specify object interfaces, but do not dictate how objects should
be implemented. This way, OMG specifications allow for a wide range of possible imple-
mentations but, while being able to prevent major obstacles, cannot ultimately ensure
performance and scalability for concrete implementations.
How secure the resulting system is also depends heavily on the effectiveness of the un-
derlying security technology. CORBA security is only as strong as the weakest mechanism
(i.e., the resulting system is vulnerable if there are any bugs in the underlying security
technology, even if the CORBA security architecture has been correctly implemented).
We will now briefly examine potential shortcomings of the CORBA security model for
each of the main middleware security design goals introduced in section 3.4.
5.3.1 Abstraction
From an application programmer’s perspective, ORB layer security features can be (al-
most) transparently enforced. Security-unaware applications do not need to know the
details about the underlying security technology, because all policies are handled out-
side the application on the middleware layer. From the user’s perspective, the security
architecture is almost completely hidden if single sign-on is implemented.
As expected, CORBA security is not transparent for security administrators. But this
is not a problem because security administrators have to deeply understand the system to
be able to specify appropriate policies. However, the fact that CORBA security cannot
effectively abstract the content of security attributes from the underlying security technol-
ogy [87] creates administrative problems. Central policy administration tools would need
to be able to handle all kinds of (mechanism-specific) attribute content, and attribute
content would need to be updated whenever security mechanisms at a node in the system
are changed.
73
5.3.2 Portability
CORBASec can enforce security policies without any active involvement of the protected
applications. Such security-unaware applications are totally segregated from the security
architecture and are therefore portable across different security technologies. In partic-
ular, the user sponsor is often not integrated with the application, which separates the
technology specific authentication information from the application.
Security-aware applications use standardised interfaces to interact with the security
system (e.g., to authenticate themselves, or to set their access control policies). If such
applications handle mechanism-specific data, such as identity certificates, then they are
not portable across different security technology without reconfiguration.
CORBASec also tries to make security policies portable and consistent across different
ORB and security services products by specifying standard attribute types, access rights
families, and audit selector types. However, these policies often contain technology-specific
security attributes, which prevents portability across differing security mechanisms.
5.3.3 Flexibility
The security architecture is specified to be independent of the underlying security technol-
ogy, so that a variety of different underlying security technologies can be used. However,
this abstraction from the underlying security technology only works from the application
layer perspective – underlying security technology can be changed without affecting the
application.
Within CORBASec, the replacement of underlying security technology requires the
modification of the implementation of some technology-specific objects in the architecture.
In particular, this applies to the principal authenticator object, which needs to process
information that is specific to the used authentication method, and all objects that process
identities (and privileges) inside credentials objects. This includes the delegation policy,
the access policy, the required rights objects, and the audit policy object. In other words,
the use of security technology specific security attributes ties the implementation of all
other functional components to the particular authentication technology.
CORBASec’s flexibility interface is based on the Generic Security Service API (GSS-
API) [1], which allows a particular class of security mechanisms to be easily integrated
(e.g., Kerberos or SESAME). However, the integration of SSL shows that not all security
mechanisms can be easily integrated into the architecture. SSL has to be integrated into
the ORB as an alternative transport layer and thus does not integrate with various core
components of the model (e.g., the Vault object).
To allow for a variety of different security policy types and security features, COR-
BASec allows the flexible definition of additional security attributes, such as additional
access rights. However, the use of such extended attributes will inhibit interoperability
as they can only be understood by security implementations that can interpret the same
extended attributes.
5.3.4 Interoperability
Interoperability clashes with flexibility [88]. By specifying common attribute types, access
rights families, and audit selector types, the model tries to support consistent security
74
policies across different ORB and security services products. To support interoperabil-
ity, the Common Secure Interoperability (CSI) part of CORBASec specifies a common
set of security mechanisms, as well as standard security-enhanced protocols and object
references. On the other hand, these mechanisms (and on-the-wire tokens) have to be
supported on all participating nodes and cannot be modified without changing them ev-
erywhere, and without also modifying the attribute content in policies. This inhibits
flexibility and portability.
Part of the reasoning behind not abstracting the technology-specific attributes is that
their exact nature often cannot be abstracted without semantic mismatches or granu-
larity problems [86]. Interoperability between nodes with differing security attributes or
differing underlying security mechanisms would require mechanism specific bridges. These
implementation specific bridges, which are not part of the specification, need to be secured
and trusted to map correctly. They are difficult to design and implement, and introduce
the semantic (and granularity) problems mentioned above.
5.3.5 Automation
The CORBA architecture allows the integration with CORBASec at various points in the
invocation path through interceptor interfaces. This architectural feature allows COR-
BASec to automatically enforce a security policy on every invocation.
However, proper non-repudiation requires the explicit consent of the user and there-
fore cannot be provided automatically. Principal authentication also often requires the
interaction with the user or the application and cannot be done automatically, unless the
implementation accepts the authentication information from the command line.
Automatic security enforcement by intercepting all traffic on the ORB message path
(through interceptors) is a sound architectural feature, but its reliability depends to a
large extent on the style and the quality of the actual implementation. Real assurance
is difficult to achieve and certify for applications which are built on top of the CORBA
security model, because a lot of components on different layers of the architecture play
together to enforce security, and because there is no small trustworthy security kernel in
the CORBA security model.
Also, the flexibility and portability goals, which encourage frequent replacement of
different components, jeopardise the reliability of the system as a whole. This is because
combining components that each fulfil security properties does not automatically imply
that the resulting system fulfils the same security properties [179]. To solve this problem,
it would be necessary to re-evaluate the whole system after each modification.
5.3.6 Scalability
The upper limit of users, objects, policy entries etc. depends on the actual implemen-
tation. From an administration perspective, CORBASec supports large-scale systems by
using domains and roles (or groups, clearances, etc.). However, no tools are currently
specified to manage them. As a result, it is currently not possible to manage CORBA
systems in an interoperable way, which in itself limits scalability. In addition, manage-
ment of cryptographic keys needs to be scalable, which depends largely on the particular
PKI implementation and on the way it is integrated with CORBASec.
75
5.4 Summary
In this chapter, the main components of the CORBA Security Services (CORBASec) were
introduced, and it was examined to which extent its design meets the middleware security
design requirements. It turns out that CORBASec, although catering for security policy
domains, does not state how domain membership can be defined persistently (e.g., before
the target is instantiated), and how the domain of an invoked target can be identified by
the target-side CORBA security system when a request arrives. The resource descriptor
mapping described in chapter 4 solves both problems. A proof-of-concept implementation
will be described in the next chapter.
76
Chapter 6
Proof-of-Concept Implementation
6.1 Introduction
This chapter elaborates on our proof-of-concept implementation of the resource descriptor
mapping process (see chapter 4) for CORBA. The chapter will first give an overview of
the OMG’s upcoming Security Domain Membership Management (SDMM) service to
illustrate the current effort within the OMG to standardise a similar mapping process,
the so-called object-domain-mapper (ODM). After that, the main design decisions for
MICOSec’s ODM are presented, in particular the instance addressing information used
for the mapping. Finally, both the (persistent and dynamic) mapping configuration and
the run-time mapping for different granularities are illustrated using several short C++
code fragments, to show that the concepts described in this dissertation are usable in
practice.
6.2 MICOSec
The proof of concept implementation was implemented as part of MICOSec1 [104], a level
2 conformant Open Source implementation of the CORBA security services v1.7 [121].
MICOSec runs with MICO [103], a freely available and “CORBA compliant” (OpenGroup
Open Brand for CORBA [128]) implementation of the CORBA 2.3 standard [118]. MICO
only uses the standard Unix API (i.e., does not rely on proprietary or specialised libraries),
and has a modular design even for implementation internals to ensure easy extensibility.
MICOSec uses the Secure Sockets Layer/Transport Layer Security (SSL/TLS) [32]
protocol as its underlying security technology, which provides principal authentication,
security association establishment (including peer authentication), and message protec-
tion. It supplies host granularity identities (X.509) to the middleware security technology.
SSL/TLS was selected for the sole reason that it was already available as an alternative
transport (SSL-Inter-ORB-Protocol, SSLIOP) for MICO. The implementation is based
on the OpenSSL Open Source implementation.
According to the specification, only the standard CORBASec security attributes need
to be mapped to the X.509 identity of the principal. However, to give clients and tar-
1
The MICOSec project is not the sole product of the author’s work, it also involved staff from Ob-
jectSecurity Ltd, in particular Rudolf Schreiner.
77
gets more convenient access to the rest of the certificate content, it was decided to map
other (largely non-conformant) security attributes to individual certificate items (e.g.,
organisational unit, certification authority).
SSL has several shortcomings that affect most of MICOSec’s security features. We
have previously illustrated the problems related to the insufficient granularity of identities
established by the underlying security technology layer. In addition, SSL only supports
target authentication or mutual authentication, but not client authentication. It also
has the particular property that it establishes a TCP/IP session as part of the security
association establishment process. As a result, SSL cannot support privilege delegation
across intermediate nodes, because it can only establish a security association between two
directly connected TCP sockets [89]. However, the OMG Common Secure Interoperability
v2 (CSIv2) [120] protocol, which has also been implemented for MICOSec, adds support
for client authentication and transfer of (privilege delegation) tokens.
Both access control and audit are implemented using request level interceptors, which
are initialised when the application is launched. This way, the security features are auto-
matically activated by the ORB whenever a message arrives, which allows access control
and auditing for security-unaware applications. In addition, it is possible for security-
aware applications to define their own application layer access control and audit policy.
Audit events can be recorded into a flat file, UNIX syslog, or a relational database
(e.g., the Open Source database PostgreSQL [161]). Both access and audit policies use
the domain names provided by the object domain mapping described in this chapter to
represent targets.
The current version of MICO runs the ORB together with all its servants in a single
process (i.e., no thread libraries are used to segregate individual servants), which renders
MICOSec’s security features ineffective for local invocations. This is because servants
can access the memory space of other servants or of MICOSec (e.g., to obtain security
information of other servants, or to tweak MICOSec to bypass security enforcement, or
to allow them to masquerade as someone else). However, the practical implications of
this are unclear since CORBASec relies on the identities established by the underlying
authentication mechanism (e.g., SSL in MICOSec), which cannot be used for invocations
inside a process anyway. One possible solution would be to execute each servant together
with its MICOSec instance inside a separate process (run under a separate operating
system user id). In this case, SSL could be used for local communications between separate
processes (i.e., MICOSec is effective), and servants would be segregated from each other
by the operating system. And if MICOSec is linked as a shared library, the ORB would
also be protected from the servants.
78
• The first is to define interfaces for querying which security policy domain(s) an
invoked target belongs to. The mechanism to provide this functionality is referred
to as object-to-domain mapping (ODM). It is conceptually related to the resource
descriptor mapping described in chapter 4 and will be discussed in more detail
below.
• The second objective is to define interfaces for retrieving information about the
state of invoked target (“object security attributes”, OSAs), which can be used in
the evaluation of various security policies (in particular access control).
The current submission also mentions the need for administration of both these func-
tional components, but does not specify any administrative interfaces.
79
Although this part of the submission is not central to our discussion, the main elements
of the architecture will be briefly summarised for completeness.
OSAs consist of two strings, an attribute type and a value, which can contain any
information suitable for describing the security state of a target.
The central element of the OSAR architecture is the OSAManager, which stores OSA
information for all targets under its authority. The specified OSAManager interface is
object adapter unspecific and serves as a common ancestor for derived interfaces that
are specific to particular object adapters. The object adapter specific derived interface
contains an operation (get attribute retriever) that returns the (object adapter un-
specific) AttributeRetriever, which allows the caller to retrieve OSAs associated with
the target in question.
An OSAManagerPolicy (inside the object adapter) allows the security interceptor to
obtain a reference to the instance of the OSAManager that contains the OSA information
for the target within the scope of that object adapter.
Finally, a Current interface provides thread-specific operations for the following pur-
poses: firstly, it allows applications to create instances of OSAManagerPolicy; secondly,
it allows setting and obtaining a reference to an AttributeRetriever object (and other
non thread-specific operations necessary for using OSAR mechanisms by security-aware
applications).
Configuration
The main components of the ODM (i.e., the ODMManager, ODMManagerPolicy, and ODMFactory)
are configured as follows: for each object adapter, there is an ODMManager, which holds the
domain information for all targets within the scope of that object adapter. Within each
object adapter, an ODMManagerPolicy interface holds a reference to that ODMManager.
For security-unaware applications, a default ODMManagerPolicy is assumed. Alter-
natively, security-aware applications can use an ODMFactory to create instances of the
ODMManagerPolicy, which can be registered with the object adapter as part of the object
adapter creation process.
80
Run-Time Mapping
At run-time, the security interceptor first has to obtain a reference to the ODMManager-
Policy from the ORB. If the reference value is “nil”, then the interceptor instead obtains
a reference to the default ODMManager. If the reference is not “nil”, then the interceptor
narrows it to the object adapter specific interface. Once this is done, the interceptor can
obtain a list of domains for the target in question (by invoking an operation with object
adapter specific arguments) and feed them into the access decision function.
• The ObjectId of the target for which the list of domains is required
• A pointer to the servant implementation behind the target for which the list of
domains is required
The MICOSec implementation bases its mapping on different information (see section
6.5.1). In particular, the POA name is used instead of the POA reference.
boolean get_authorization(
in SecurityLevel2::CredentialsList cred_list,
in ObjectDomainMapping::DomainNameList domains,
in CORBA::Identifier operation_name,
in CORBA::Identifier target_interface_name
);
81
type are suitable in practice to represent the target (see section 4.7). As a result, the
domain name (obtained from the ODM, see section 6.5) had to be used for this purpose.
In addition, it was deemed not very intuitive to map target instances to domains, and
then use these domains to map (client-side) principals to their granted rights. Instead
it makes more sense to use the domain name to obtain (target-side) security policies,
because targets, their domains, and their associated security policies form one logical
unit. Also, from a more technical perspective, the domain based mapping of principals to
granted rights unnecessarily complicates the integration of directory services that store
user rights.
In MICOSec, these issues were solved by changing the access control in such a way
(non-conformant to the current specification) that the mapping of the principal’s at-
tributes to its granted rights is not domain based. Instead, a principal simply has a set of
granted rights to invoke operations on all targets. On the target side, targets are mapped
to domains, which are associated with the security policy to apply and with the required
rights.
82
>(+.! '?%&!A@". GON8PA$0
2143 65879 :
21Q3 0587
RS6T = BC &!A%!D$E $%F
=
)<G HJIK%"LM
2<;
U,VKV*WYXZZ[\<] gJcihKhK[\<]
^A\_a` W4bdcfe8[ ` \ ^A\j_8` W4bdcfe8[ ` \
• Servers can be migrated to a different physical location without affecting the map-
ping (i.e., the description of the server is not tied to the physical location of the
2
Although the conceptual model and design are part of this dissertation, the actual coding and sub-
sequent integration with MICOSec was done in collaboration with ObjectSecurity Ltd.
83
host)
• Firewalls in the communications path can be supported, because the TCP endpoint
can point to the firewall, while the SSL identity can point to the actual server behind
the firewall
Because SSL works at the transport layer, all targets running at the same time behind
the server’s TCP socket will share the same X.509 identity, and therefore will be members
of the same domain. However, it is possible to assign different X.509 identities to several
CORBA applications on the same host (although they cannot execute at the same time),
because the certificate to be used can be specified either by the application itself, or at
the command line when the application is executed.
The mapping can be easily configured. For persistent configuration, the certificate
is available before the application is launched and can therefore easily be specified in a
configuration file. For dynamic configuration at run-time, the application can supply the
certificate content as part of the credentials.
POA Name
Next, the target needs to be described more precisely within the scope of the server
(described by its X.509 identity). The IOR uses the object key for that purpose, which
contains a reference to the POA that serves the target, and an ObjectId, which specifies
the target within the scope of the POA.
Although the POA reference uniquely describes the POA, it cannot be used for per-
sistent mapping. This is because its content is ORB implementation specific and unpre-
dictable (i.e., it is not available before the POA is created).
To solve this problem, MICOSec uses a different descriptor, the so-called “POA name”.
POA names can be assigned to a POA as part of the POA creation process. This can
be done dynamically by an application when it creates a POA, or persistently by the
administrator as a command line argument when the application is launched. As POAs
are arranged in a hierarchical structure, the full POA name contains the names of all
POAs from the root POA to the POA that serves the target, and thus uniquely describes
the correct POA. Using this POA name, it is possible to define a separate domain name
for each POA.
84
• If the SYSTEM ID policy is selected, then the ObjectId contains unpredictable infor-
mation chosen by the POA when the target is created. In this case, only dynamic
configuration is possible.
• If the USER ID policy is used, then the ObjectId that is stored in the IOR can
be specified by the application before the servant is activated. At run-time, the
ObjectId has to be supplied as an additional element to the mapping function. If
the target specified by [X.509 Id, POA name, ObjectId] cannot be found in the
mapping table, then the whole search operation is repeated at the coarser level
of granularity [X.509 Id, POA name]. Unfortunately, in some cases, additional
transient information about the application is stored in the ObjectId, in which case
persistent mapping cannot be configured.
This discussion shows that persistent mapping at per-target granularity is more diffi-
cult to achieve than at per-POA granularity, because targets are not named persistently.
Also, a number of modifications to the application code are required to support per-target
granularity, which renders it unusable for security-unaware applications. As a result, the
remainder of this chapter will not further explore the use of ObjectIds.
CORBA::Object_var poaobj =
orb->resolve_initial_references ("RootPOA");
PortableServer::POA_var poa =
PortableServer::POA::_narrow (poaobj);
The RootPOA object (accessible through the pointer poa in this example) automatically
has the persistent name RootPOA. Within the scope of this RootPOA, child POAs can be
created. The following command creates a new child POA object mypoa with the name
MyPOA (the other arguments are not relevant for our discussion):
85
PortableServer::POA_var mypoa =
poa->create_POA ("MyPOA", mgr, pl);
The full hierarchical name of this POA is represented in a notation similar to file
paths, so that the full name of MyPOA is: /RootPOA/MyPOA.
Using this command, a hierarchy of POAs can be created that groups targets into
domains at a per-POA granularity, and all POAs can be described by a unique POA
name. The advantage of using POA names instead of POA references is that it is possible
to describe POAs independently from the life cycle of the application in a domain name
mapping table. The following MICOSec ODM configuration file illustrates an exemplary
persistent mapping configuration (for simplicity, the X.509 identity is not displayed):
# POA Mapping
# Keys: AccessId, POA Domain
This configuration file has to be created manually by the administrator and is read
by MICOSec when the application is launched. In the next section, we will show that
security-aware applications can also modify the ODM configuration at run-time and af-
terwards store it back into a file.
CORBA::Object_var objodm =
orb-> resolve_initial_references ("ODM");
ObjectDomainMapping::ODM_var odm =
ObjectDomainMapping::ODM::_narrow(objodm);
86
ObjectDomainMapping::Factory_var factory =
odm-> create();
Next, a child POA called MyPOA is created, which registers the generated ODM factory:
PortableServer::POA_var mypoa =
poa-> create_POA ("MyPOA", mgr, pl);
mypoa->registerODMFactory(factory);
Now the newly created domain manager is associated with the POA. It can be accessed
by calling get ODM:
ObjectDomainMapping::Manager_ptr dmanager =
mypoa-> get_ODM();
In this example we would like to query if a domain exists in the configuration file for a
defined key. Later we will also show how new keys can be inserted into the configuration.
If required, a pre-existing configuration file could be read into the ODM by calling the
loadConfigFile operation on the ODM factory before this is done.
To ask the ODM if a domain name exists for a key, we first have to define the key
okey that has to be searched for:
Once this is done, the list of domain name objects can be retrieved and the domain
names can be extracted as follows:
SecurityDomain::NameList * list =
dmanager-> get_domain_names(okey);
87
It is also possible to define a new mapping in the configuration, which involves the
following three steps. Firstly, the new key has to be defined and stored in a suitable
variable:
Security::Opaque okey2;
string key2 = "[/C=UK/ST=Server State/L=Cambridge
/O=CompLab/OU=RD
/CN=ServerTest/Email=server@test] MyPOATR";
len = key2.length();
okey2.length(len);
for (int i = 0; i < len; i++)
okey2[i] = key2[i];
Next, a hierarchical domain name for the key has to be created. In this example, the
hierarchy contains only a single layer:
SecurityDomain::NameList dl;
dl.length(1);
SecurityDomain::NameComponent nc;
nc.id = CORBA::string_dup("New Domain");
nc.kind = CORBA::string_dup("");
SecurityDomain::Name nm;
nm.length(1);
nm[0] = nc;
dl[0] = nm;
Finally, the entry has to be inserted into the mapping table by calling the operation
set domain name key. This operation allows the modification or complete redefinition of
the mapping table at run-time:
factory->saveConfigFile("newconfig.cnf");
88
Garbage Collection
To avoid that the ODM mapping table fills up with unnecessary entries, each entry that
was dynamically generated by the application should be removed when that application
reaches the end of its lifecycle. In MICOSec, applications can do this by invoking an op-
eration remove domain names on the ODMManager, which takes the mapping information
as an input parameter.
Potential problems are caused by the fact that the application is still active when it
removes its ODM entry. In the time window between the removal of its ODM entry and
the destruction of the target instance, the target will be a member of the default domain
of the server. Similarly, it will be a member of a default domain of the server during
the time window between the time when a target instance is created and when the ODM
entry is inserted. This needs to be considered when the default policy is defined in order
to avoid possible security holes.
X.509 Identity
As a first step, the target-side X.509 identity needs to be obtained. The following code
fragment illustrates how this is done by reading out the AccessId attribute from the own
Credentials of the SecurityManager object:
SecurityLevel2::Credentials_ptr own_cred;
own_cred = (*(secman -> own_credentials()))[0];
Security::ExtensibleFamily fam1;
fam1.family_definer = 0;
fam1.family = 1;
Security::AttributeType at1;
at1.attribute_family = fam1;
at1.attribute_type = Security::AccessId;
Security::AttributeTypeList atl1;
Security::AttributeTypeList atl1;
atl1.length(1);
atl1[0]=at1;
89
For further processing, MICOSec’s ODM requires the identity to be stored in square
brackets:
POA Name
At run-time, the ODM mechanism needs to obtain the POA name associated with the
object key specified in the incoming request. In theory, it would be possible to generate
another table that maps POA references to POA names. A new entry would need to be
added to the table whenever a POA gets created, and the table would need to be searched
for every incoming request. Such a complex approach has several drawbacks: firstly it
would lower the performance of the mapping process, and secondly it would require major
changes of the ORB and POA interfaces. Thirdly, it would not be possible to separate
the ODM implementation (which should be developed by security specialists) from the
ORB and POA (which should be developed by ORB vendors).
Fortunately, a much more elegant solution was found. The ORB stores information
about the current execution context associated with an invocation. In particular, the
target-side ORB stores the POA name in the POACurrent object, which can simply be
read out by the ODM mechanism by invoking the operation the name on the POA. The
following two code fragments illustrates how this is done:
CORBA::Object_var poao =
orb->resolve_initial_references ("POACurrent");
PortableServer::Current_var cpoa =
PortableServer::Current::_narrow(poao);
PortableServer::POA_ptr poa = cpoa->get_POA();
To obtain the full POA name, the POA hierarchy has to be followed up to the RootPOA,
and individual POA names have to be appended to a string (separated by slashes):
PortableServer::POA_ptr np = poa;
string key2;
string tstr;
while (np != NULL) {
tstr = np->the_name();
if (key2.length() > 0)
tstr += ’/’;
90
tstr += key2;
key2 = tstr;
np = np->the_parent();
}
cout << "POA=" << key2 << endl;
Mapping Process
Now the actual mapping can be carried out. The ODMManager that stores the mapping
table for the POA can be obtained through the get ODM operation on the POA:
Finally, the domain names can be obtained by supplying the two generated strings to
the mapper as an opaque parameter:
key1 += key2;
if (dmanager) {
Security::Opaque okey;
int len = key1.length();
okey.length(len);
SecurityDomain::NameList * list =
dmanager->get_domain_names(okey);
Finally, the domain names can be obtained from the domain name list like this:
91
6.5.4 Modifications to the CORBA Specification
One of the goals of the ODM design was to keep modifications to existing CORBA spec-
ification to a minimum to separate the ORB and POA implementations from the ODM,
and thus to fulfil CORBA’s portability and flexibility requirements.
Only a few modifications to the MICO ORB were necessary, in particular two functions
to the POA that allow the registration of an ODM factory with a POA and to query the
ODM:
void registerODMFactory
(in ::ObjectDomainMapping::Factory fry);
ObjectDomainMapping::Manager_ptr
MICOPOA::POA_impl::get_ODM()
Also, an initial reference “ODM” had to be added, so that a reference to the ODM
can be obtained. This reference is necessary to allow access to the ODM from within
interceptors and servants. Without this, features like dynamic configuration could not be
implemented.
6.6 Summary
In this chapter, we have presented our proof-of-concept implementation of the resource
descriptor mapping for the MICOSec CORBA security services implementation. It maps
(target-side) X.509 identities, hierarchical POA names, and ObjectIds to hierarchical
domain names. The chapter illustrated how the mapping can be configured persistently
and dynamically, and how the mapping is carried out at invocation time inside interceptors
and servants.
The X.509 identity is only useful if the mapping is not stored locally. If the mapping
information is stored and possibly carried out centrally for several nodes (e.g., in a cen-
tralised security administration console), it is a useful and trustworthy mapping attribute
to precisely describe the middleware component that resides below the invoked target.
The most important mapping attribute is the hierarchical POA name. MICOSec
ODM reuses the POA hierarchy as the domain hierarchy, which is simple, elegant, and
ensures that the domain names and the hierarchy are coupled to the target addressing
mechanism. Each POA constitutes a domain, therefore the POA hierarchy has to be
created to reflect the desired domain hierarchy. The use of the user-defined POA name
instead of the dynamically assigned POA reference has various further advantages. In
particular, it facilitates the persistent specification of the mapping (i.e., before the POA
hierarchy has been created), and it allows the use of the same human readable text string
to be used for the POA name and for the domain name.
Mapping on a per-target granularity is also supported, although persistent configura-
tion can sometimes be difficult because of the unpredictable and implementation specific
ObjectId content.
This chapter demonstrates that the resource descriptor mapping presented in this dis-
sertation works in a real-world environment, and that it can be integrated well with the
92
complex CORBA (and POA) middleware architecture. Moreover, it shows that modifi-
cations to the existing specifications can be kept to a minimum, so that flexibility and
portability between ORB (and POA) implementations are not inhibited.
93
94
Chapter 7
Middleware Security
7.1 Introduction
The earlier parts of this dissertation explored the challenges inherent in implementing the
CORBA security architecture. Since the specification of OMG CORBA and CORBASec
there have been significant developments in both middleware research (e.g., component-
based middleware, reflective and adaptive middleware, Web services) and security research
(e.g. various security models). In this chapter we review the extent to which these
developments make middleware security more or less challenging to achieve, and examine
the relevance of the resource descriptor mapping described in chapter 4. The chapter
concludes with some general observations as to how middleware should be designed to
accommodate security.
95
by a user or a system administrator (e.g., with an external configurable policy file). Each
permission specifies a permitted access to a particular resource (e.g., read and write access
to a specified file or directory). The runtime system organizes code into individual do-
mains, each of which encloses a set of classes whose instances are granted the same set of
permissions. Moreover, an access controller class allows code to query whether a permis-
sion would succeed if performed at the time of the query, and a secure class loader loads
classes and records the protection domains they belong to. More recent versions of the
JDK include some additional features (e.g., the Java Certification Path API and the Java
GSS-API) and integrate several previously optional packages (e.g., Java Authentication
and Autorization Service, Java Cryptographic Extension, Java Secure Socket Extension).
96
with well defined interfaces that implement business logic. The “application assembler”
assembles these beans to complete applications, but has no detailed knowledge of their
inner working or structure. The “deployer” installs and runs the application in a container,
which provides a runtime environment including additional services such as security. The
duties of the three parties are clearly separated: The bean provider is a specialist for
the implementation of the business logic of a single bean, but does not know in which
applications and in which environments the bean will later be used. The application
assembler knows the interfaces of the beans and the business logic of the application as a
whole, but does not know the inner working of the beans or the environment where the
application will be deployed. Finally the deployer knows the specific requirements of the
environment, but for him the application itself and the beans it is composed of are black
boxes.
97
!
!
3"%94)2"0 ; 8
"
*)3535')250 *5. 4)3?69354
& 3
& '
: 4"365354)< @?0 .7A& '
: 4"3
0 =>54)*=
BDC
E
#
%"& ')(
& *+,+-*/.10 2
354)2"6)&70 . 8
69354"3& '
: 4"3 $
$
This role description is purely abstract and independent from real world users and their
security properties. Access control rules for the methods of the bean are specified using
simple (role, method)-pairs that specify the role needed to invoke a certain method on
the bean. This can be done individually for each method or for all methods in a bean,
possibly using wildcards. Roles can also be linked together in the deployment descriptor.
In addition to the definition of the access control rules the assembler is also responsible
for defining how credentials (e.g., identity) can be used by beans to call other beans. EJB
allows the initiator to give an intermediate bean the right to forward all his credentials
to any other component (sometimes called “impersonation”). The rules that specify
which identity an intermediate object has to use for further invocations are also defined
in the bean’s deployment descriptor. The default mode is to use the bean’s identity
itself. With user-caller-identity the initiator’s identity is forwarded to the server,
and runAs-specified-identity allows flexibly setting an arbitrary identity for the calls.
Unfortunately, a user has no way to restrict the privileges passed on to others.
Finally, the deployer is responsible for assigning principals (i.e., users) described by
their mechanism specific security attributes with the abstract roles used in the declaration
of the access control and impersonation policies.
To assist the described players with their duties, the container vendor should provide
a security tool chain that should include user and role management tools.
While the described declarative approach has many advantages, it also has consider-
able limitations: It is only possible to declare security policies supported by the container
implementation, while the flexible definition and implementation of security policies is
not possible. This restricts the security models that can be enforced, and the security
policy can only be based on a limited set of arguments (subject identity or role, target
identifier, and invoked operation). Other criteria, such as the operation arguments or
other environmental information like time, cannot be used in the definition of the security
98
policy.
99
approach introduces the notion of a class instance owner. The general policy that a class
instance can only be accessed by its owner can be specified in an extended JAAS permis-
sion statement. Classes that require class instance-based authorisation must implement
an interface with a getOwner() method that returns the owner of the class instance. Note
that this approach implies that each class instance needs to know its owner (the described
framework also includes “special relationships” in addition to instance ownership).
100
granularity of permissions must match the set of rights recognised by the underlying
CORBASec implementation.
Credentials can be established either using SSL (using a proprietary API) or SECIOP
(using the CORBASec API), which take care of secure transportation of credentials be-
tween systems.
The CCM container programming model defines a set of APIs that simplify the task
of developing and/or configuring CORBA applications [93]. In particular, the internal
interfaces of the container API, which make container services available to the compo-
nent, offer security-related methods: get caller principal() obtains the CORBASec
credentials in effect for the caller, while is caller in role(in string role) serves to
compare the current credentials to the credentials defined by the role parameter. These
operations match EJB’s getCallerPrincipal and isCallerInRole methods.
There is some mismatch between different security models: On the one hand, the
container API supports role-based access control (RBAC) in line with EJB’s security
architecture. On the other hand, the deployment descriptor specifies access control in
terms of the CORBASec rights model, where rights are granted to principals that have
to match the rights required to invoke an operation on a target.
If the CORBASec rights model should be used, then the container API should return
the calling principal identity, not the role.
If RBAC should be used (it is possible to simulate RBAC in CORBASec – see section
7.7), it would be more elegant to specify required roles instead of required rights in the
deployment descriptor, as done in EJB security. Unfortunately SSL, the most widely used
security mechanism for CORBASec, does not support the notion of roles.
As a result of this mismatch, identity credentials have to be mapped to roles on the
target side, which then need to be mapped to granted rights, and compared to the required
rights of the called target. Having these two levels of indirection is neither elegant nor
efficient, as each model effectively makes the other obsolete.
In general, CORBASec 1.2 does not meet the requirements of complex component-
based applications well. For example, controlled delegation of credentials (e.g., authori-
sation information) is a critical requirement that is not supported by CORBASec (over
SSL). The OMG Common Secure Interoperability (CSIv2) [120] protocol supports con-
trolled delegation, even over SSL, but does not integrate well into CORBASec 1.2.
101
supports RBAC, while CORBASec (and the policy in the deployment descriptor) are
based on a required/granted rights model.
7.4 .NET
In June 2000, Microsoft announced its .NET initiative [109], a “vision” that embraces the
Internet and the Web in the development, engineering and use of software. It was declared
as being simultaneously a firm strategy, a technological infrastructure, a development
platform built around XML, and “a large set of possibilities for users”. Microsoft’s .NET
currently only works on Microsoft platforms, but there is also Ximian’s Mono Project [110]
that implements an open source Unix version of .NET. Furthermore, the iNET project
by Halcyon Software aims to re-implement .NET in Java [56], and Intel Labs’ Open CLI
Library (OCL) project [155] plans to develop an Open Source implementation of portions
of the CLI (Common Language Infrastructure) runtime library as defined in a draft ECMA
CLI specification.
Although Microsoft has recently decided to drop .NET in its product branding [169],
we will describe the range of technologies that were developed as part of the .NET initia-
tive.
102
7.4.2 Code Access Security
A core part of the CLR is code access security, which is conceptually related to the Java
sandbox model. Code access security determines the access permissions assigned to a
piece of code based on its origins, publisher and other factors, without any active in-
volvement of the application. .NET uses the concept of “evidence-based security” [108]
to describe the process by which application code is examined at run-time. Access per-
missions to resources are granted depending on the “code group”, which is defined by
the origin (e.g., URL, Web site, Internet Explorer zone, hash of the assembly, application
directory, “strong name” signature of the assembly) and the creator of the code (e.g.,
publisher certificate). A code access permission is the right of a piece of code to access a
particular resource or perform a particular operation (e.g., access files, registry, network,
user interface, or the execution environment). When an application is built, the permis-
sions that it requires to run can be included as part of its description. Further evidence
can be added by the hosting environment.
In addition to the validation of metadata when the assembly is loaded into the cache,
the actual MSIL code is verified to be type-safe, to not include stack underflow/overflow,
and to correctly use of the exception handling facilities and object initialisation [170].
There are a number of configurable security policies (e.g., enterprise policy level, ma-
chine policy level, user policy level) that determine the mapping between the assembly
evidence that a host provides for an assembly, and the set of permissions (e.g., FullTrust,
SkipVerification) granted to an assembly. Assemblies can also directly state the minimum
required set of permissions or refuse certain permissions. During code access security
evaluation, other assemblies (“policy assemblies”) might need to be loaded to be used in
the policy evaluation process.
The intersection of the permissions established at the different policy levels is compared
with the required set of permissions to determine whether the code should be allowed to
execute or not. If there is a call chain involving several assemblies, then so-called “stack
walking” is carried out to prevent the “luring attack” [108] where malicious code tricks
more trusted code into something it cannot do alone.
The CLR also enables so-called “unmanaged code” (i.e., code that is not examined
by the CLR) to run, but unmanaged code does not benefit from these security measures,
and permissions to call into unmanaged code should be conservatively granted.
The .NET Framework allows developers to express security constraints in two styles.
Expressing security constraints in the “declarative” style means using custom attribute
syntax in the metadata of the code. Expressing security requirements in the “imperative”
style means creating instances of Permission objects at run-time and invoking methods
on them. Not all security actions can be expressed using the declarative style, and only
the imperative style allows constraints to be expressed at runtime. [170].
103
resenting authorisations. Applications can learn the identity of the current principal, or
query it for a particular role as necessary to perform some privileged operation using the
User.IsInRole method. Alternatively, roles can be checked declaratively in the meta-
data, freeing the business logic from having to deal with access checks [96]. In .NET,
the Windows login username can become the principal identity, and the groups the user
belongs to are the names of the roles assigned. Alternatively, a generic principal object
can be used for application-specific authentication and authorisation [55].
The .NET framework also includes various cryptographic functions [55] for encryption,
digital signatures, and random number generation for use from within security-aware
applications and for internal use of .NET.
ASP.NET (Active Server Pages) uses Microsoft’s Internet Information Server (IIS) to
provide authentication (basic, digest, NTLM, Kerberos 5.0, SSL/TLS, Passport, Cookie)
and authorisation (URL, Windows users/groups, application defined roles) [48]. Custom
authentication and authorisation providers can also be integrated. ASP.NET allows per-
folder configuration of role-based security outside the application [112].
104
BA) in that it does not provide a comprehensive and transparently integrated security
architecture for invocations between distributed objects. Instead, it includes a diverse
range of security tools and technologies that can applied outside the application (through
configuration or the declarative specification of security metadata), or be applied imper-
atively within the application. As a result, .NET security is currently still somewhat of
a patchwork that, if applied correctly, can fulfil its task with a high degree of flexibility,
but that can also easily be applied inappropriately.
105
how the service is implemented. However, unlike component technologies, Web services
are not accessed via technology-specific protocols such as Java RMI or CORBA IIOP.
Instead, they are accessed using widely-used Web protocols and data formats, in partic-
ular the Hypertext Transfer Protocol (HTTP) [41], which is mainly used to transfer Web
pages, and the Extensible Markup Language (XML) [18], which is a simple and flexible
text format derived from SGML (ISO 8879 [69]). XML is called extensible because it is
not a single, predefined markup language like HTML [134]. Instead, XML is a “meta-
language” – a language for describing other languages – with which customized markup
languages for different types of documents can be created. A Web service is defined only
in terms of the XML messages the Web service accepts and generates, and clients can be
implemented on any platform in any programming language, as long as they can create
and process the messages defined for the Web service interface. Web services are located
by a unique Uniform Resource Locator (URL) [160], which can be persistent or dynamic.
Web services are built using three core standards. First, the Simple Object Access Pro-
tocol (SOAP) [17] defines a (supposedly lightweight) protocol for information exchange.
The specification defines how XML should be used to represent data (inside an “enve-
lope”), coding rules for an extensible message format, conventions for representing RPCs,
and bindings to HTTP. In theory, Web services can also communicate over other proto-
cols, but it is anticipated that mainly HTTP will be used due to its widespread use on
the Internet. One of the advantages of SOAP is that it is (supposedly) significantly less
complex than earlier approaches [175], such as IIOP or RMI – for example, it does not
specify object activation or a naming service.
Second, the Web Services Description Language (WSDL) [27] is an XML-based con-
tract language that documents what messages a Web Service accepts or generates. A
WSDL file is an XML document that describes a set of SOAP messages and how the mes-
sages are exchanged. To some extent, WSDL is to SOAP what IDL is to CORBA. The
WSDL notation to describe message formats is based on the XML Schema standard [22],
which makes it both programming-language neutral and standards-based. In addition
to describing message contents, WSDL defines where the service is available and what
protocols should be used. WSDL defines the interfaces required to write a program to
work with a Web service.
Third, another industry effort revolves around the Universal Description, Discovery,
and Integration (UDDI) [11] protocol specification, which allows Web service providers
to advertise the existence of their Web services and for Web service clients to locate Web
services of interest. A XML directory entry consists of three parts. The “white pages”
describe the company offering the service; the “yellow pages” specify industrial categories
based on standard taxonomies; the “green pages” describe the service interface so that
users can write applications to use the Web Service. The UDDI directory allows a search
for Web services to take place in several ways, such as type of service or geographic
location.
In summary, an XML-based Web service can be defined (from a technical perspective)
as a software service exposed on the Web through SOAP, described with a WSDL file and
registered in UDDI [175].
From an n-tier application architecture perspective, a Web service allows program-
matic access to a service which is then implemented by other means. The front-end that
deals with XML request and reply handling is often called the “listener”, while the part
106
that exposes the operations supported by the business logic is called the “facade” [165].
The business logic behind the facade is then implemented by other means (e.g., using a
traditional middleware platform such as CORBA).
Current Web services products include Sun’s Java 2 Platform Enterprise Edition
(J2EE) framework [159], or Microsoft’s .NET framework [109]. Other more well-known
Web services development platforms include Sun ONE, Microsoft .NET, IBM WebSphere/dynamic
e-Business, and BEA Web Logic.
The World Wide Web Consortium (W3C) is currently the main standardisation body
that releases standards related to Web services and XML. Another global consortium
that is active in the area of Web services standards is the Organization for the Advance-
ment of Structured Information Standards (OASIS). Moreover, the Internet Engineering
Task Force (IETF) standardises several Web service related technologies, such as the
SSL/TLS [32] protocol, and the Web Services Interoperability Organisation (WS-I) pub-
lishes interoperability profiles. Individual companies (e.g., IBM, Microsoft) have also
released their own specifications independently of W3C or OASIS.
107
with them across multiple sites, thus facilitating single sign-on. The Extensible Ac-
cess Control Markup Language (XACML) is used to express access control policies for
whole documents or individual elements, and how access control is transferred. The
WS-Security [35] specification extends SOAP with XML security protocols (“security
headers”) for integrity, confidentiality, and authentication; allows security tokens to be
associated with messages and describes how binary security tokens are encoded. It pro-
vides a framework for different security assertions and certificates (e.g., SAML, Kerberos,
X.509 certificates and PKI) to exchange data in a standards-based way, and defines the
sequence of processing of encryption, signature, and authentication. Furthermore, it sep-
arates encryption, signature, and authentication to cater for multi-hop scenarios where
only some information should be understood by a particular node. Microsoft, IBM, and
Verisign (and others) released several additional specifications that extend WS-Security
and form the “Global XML Web Services Architecture” (GXA) [16]: WS-Trust, WS-
SecureConversation, and WS-SecurityPolicy. They are planning to release several ad-
ditional security specifications in the near future, in particular WS-Policy, WS-Privacy,
WS-Federation, WS-PolicyAttachment, WS-PolicyAssertion, and WS-Authorisation [38].
In the meantime, due to the currently unclear future of these emerging specifications,
many Web services resort to the ubiquitous HTTPS (i.e. HTTP over SSL) protocol to
secure communications. This “channel security” [85] approach may be sufficient for point-
to-point applications, but as applications start becoming loosely coupled in multi-tier
environments, a “package security” [85] approach (as taken by the emerging specifications
mentioned above) will be required to provide end-to-end security across multiple nodes.
Package security allows parts of the message to be encrypted and signed for particular
nodes in the communication path.
108
of the Web service life-cycle are required, then some form of the resource descriptor
mapping would be useful. The administrator or the application that launches new Web
services would need to provide an appropriate resource descriptor for the service, which
is stored in a mapping table. At invocation time, the mapping from URL to resource
descriptor would be carried out by the listener or the facade.
109
during processing (e.g., at method invocation) [100]. Reflection can occur at compile
time and at run-time. “Compile-time reflection” is concerned with the static program
structure, while “run-time reflection” allows access to individual object instances. “In-
trospection” is the ability of the program to observe and reason about its own structure
and state, while “intercession” is its ability to change its own state or to alter its own
processing.
An important aspect of reflection is that the meta-level (i.e., the representation of
its own behaviour which is open to inspection and adaptation) is causally connected to
base-level (i.e., the underlying behaviour it describes). “Causally connected” means that
changes made to the self-representation are immediately mirrored in the underlying sys-
tem’s actual state and behaviour, and vice-versa. It can therefore be said that a reflective
system is one that supports an associated “causally connected self-representation” [99].
Reflection enables both “inspection” and “adaptation” of systems at run-time [30]. In-
spection allows the current state of the system to be observed, while adaptation allows
the system’s behaviour to be altered at run-time to better match the system’s current
operating environment.
110
inspection and reconfiguration of its internal engine. Reification is achieved through a
collection of entities known as component configurators. Component implementations
are shipped as dynamically loadable libraries that can be linked to the ORB process at
runtime. Component implementations are organized in categories representing different
aspects of the ORB’s internal engine. The DynamicTAO approach is very low-level and
quite powerful in allowing change to the strategies the system adopts, but it is not so
simple and powerful when programmers want to extend communication behaviour with
features not directly related to strategies already involved in communication.
OpenORB [15] has a component-based model of computation. It adopts structural
reflection (i.e. the meta-level exposes the actual implementation). Meta-spaces provide a
flexible mechanism to reify and reflect into any system aspect, but it is component-oriented
and it behaves similarly to object-oriented models, neglecting to handle communications
as a whole. Reflection works on a per-component granularity. Explicit bindings reify
communication channels, but not the involved components. They allow the handling of
messages as a stream and not in terms of what they represent, which makes them easy to
filter or to handle as a whole, but difficult to manipulate them at a higher level. Related
to that, the Open-ORB Python Prototype (OOPP) [5] allows programmers to inspect and
change the implementation at run-time through a well-defined “open binding” model.
Other reflective middleware includes LegORB [137], OpenCORBA [90], FlexiNet [59],
Quarterware [152], mChaRM (multi-Channel Reification Model) [25], and AspectIX [58].
111
can be stored in an audit log.
Adaptive middleware can also be used to react to attacks that try to steal net-
work and CPU resources, or which directly attack applications. This was demonstrated
in [146] as part of the DARPA Quorum programme. In this project, the adaptive middle-
ware platform was based on the Quality-of-Service (QoS) middleware “Quality Objects”
(QuO) [164] and the CORBA ORB TAO [149]. QuO facilitates the creation and inte-
gration of distributed applications that can specify their QoS requirement, the system
elements that must be monitored and controlled to measure and provide QoS, and the
behaviour for adapting to QoS variations at run-time. TAO is a QoS-enabled CORBA
ORB that also supports the real-time CORBA specification [117], with enhancements to
ensure predictable QoS behaviour for real-time applications. In this project, the adaptive
middleware coordinates a number of defence mechanisms, such as access control, packet
filtering, intrusion detection, replication management and bandwidth management. For
example, applications under attack may be replicated or may migrate to a different host,
or network flooding may be prevented by packet filtering. Practical evaluations of this
project have shown that, although “defence-enabled” adaptive middleware [146] increases
the survival time of distributed applications, it is yet unclear whether the survival time
is sufficient in practice.
The need for adaptive security has also been identified for ubiquitous computing en-
vironments due to the open interactions [177]; security services should be adaptive in
response to the changes in the environments and application requirements.
A number of observations can be made regarding adaptive middleware and adap-
tive security. Firstly, a security system is generally worthless without assurance, and it
is difficult to effectively evaluate systems where security features may be automatically
reconfigured on-the-fly. A potential, although expensive workaround would be to evalu-
ate set configurations of the security features and ensure that the middleware can only
configure the system into one of these set configurations.
Also, if the security features can be reconfigured automatically by the middleware
depending on the environment, the communications partner, and the application, then
the adaptation process itself needs to be adequately protected from unauthorised use.
This can lead to a “chicken-and-egg” problem. Also, if adaptations that can be triggered
over the network (e.g., using special protocols or agents like in dynamicTAO), they need
to be adequately protected against misuse. For example, attackers on the network need
to be prevented from causing a node to adapt to a lower encryption mechanism so that
the traffic can be decrypted more easily.
Another question is who is allowed to trigger the adaptation and under what circum-
stances. In general, a policy is required that describes when particular security features
have to be applied (depending on the security environment), and the trigger conditions in
the environment need to be monitored. For example, a monitoring component in a mo-
bile device could monitor the network connection and select the appropriate encryption
and access control depending on whether the device is on a corporate LAN or a wireless
link. This kind of monitoring could be done by the application or the middleware. Al-
ternatively, the user could manually select the appropriate security features through the
application. Again, the adaptation mechanism itself needs to be protected against misuse.
From a more technical perspective, the used security mechanisms (e.g., authentication
mechanism) can generally not be changed easily, because often mechanism-specific security
112
attributes (e.g., X.509 identity certificates) are stored in the security policy. In this
case, adapting the security mechanism would also require reconfiguration of the security
policy. Alternatively, the policy needs to contain abstracted identities, which has several
drawbacks described in [87].
Also, adapting security features on-the-fly raises the question what should be done
about existing security associations. One radical approach would be to abort all existing
security associations and notify the remote side that the security features have changed. A
more graceful approach (as implemented in dynamicTAO) would be to allow old connec-
tions to use the old security features, while new connections use the new security features.
However, this approach has some drawbacks: it requires several security features to run at
the same time, and a garbage collection mechanism may be required for old connections.
113
of the overall system. The only attack related to QoS is denial-of-service, whereby an
attacker interferes with the QoS service to steal resources. Such attacks need to be
countered by the QoS service (e.g., by using secure resource reservation protocols) and
not by the middleware.
QoS sometimes also includes the aspect that applications or the middleware need to
adapt to unavoidable QoS degradation (e.g., by increasing the compression). In this case,
(some of) the observations made above regarding adaptation may apply.
114
two services: identity assertion and authorisation. The approach uses the identity as-
sertion service for a client to activate a role, and the authorisation service to transport
the role authorisation. The ATLAS is used to retrieve and deliver role certificates of an
authorisation domain. This approach does not allow clients to activate multiple roles
simultaneously.
RBAC0−3 has also been mapped to the Enterprise Java Beans access model [57],
requiring the same extra functionality as for the CORBASec mapping.
Some form of RBAC for Web services can be supported using the Security Asser-
tion Markup Language (SAML) 1.0, an upcoming standard by the Organisation for the
Advancement of Structured Information Standards (OASIS) (see section 7.5.2) [46].
The Open Architecture for Secure, Interworking Services (OASIS) [60] is another
RBAC architecture used to deliver secure interoperation of independently managed ser-
vices in open, distributed environments. OASIS roles deviate somewhat from the RBAC96
definition given in [140]. For example, roles are service-specific (i.e., no globally centralised
administration), parameterised, and non-hierarchical. Furthermore, roles are activated
within sessions, and “appointment” (i.e., the appointer does not need to possess the del-
egated privileges) is used instead of privilege delegation. A client activates a role by
presenting credentials to a service, which supplies a “role membership certificate” (e.g.,
X.509) that can be used for subsequent requests to use that service. OASIS uses “creden-
tial records” and event channels to implement rapid role revocation.
115
It has also been demonstrated in [129] that RBAC can be configured to enforce MAC
models. Moreover, a number of access constraints have been proposed in [114] that
would realise the equivalent of Bell-LaPadula “read-down” and “write-up” rules. The
flexibility of RBAC and its ability to enforce MAC policies by suitable configuration of
role hierarchies and constraints has also been demonstrated in [144] (where the strong
similarity between the concept of a MAC security label and a RBAC role is stressed).
Because it has been illustrated above that RBAC can be easily integrated into middle-
ware (e.g., CORBA/CORBASec), and because MAC can easily be expressed using RBAC,
MAC can consequently be easily integrated into middleware such as CORBA/CORBASec.
7.7.4 Clark-Wilson
Furthermore, it has been argued that the Clark-Wilson integrity model [28] can be sup-
ported using MAC [91, 150]. We have already shown above that MAC can be expressed
well in the context of middleware, and consequently Clark-Wilson can also be integrated
into middleware such as CORBA/CORBASec.
116
do not support different instances of the same interface to have separate identifiers (e.g.,
object references). For these reasons, CORBA and the other middleware technologies
examined in this chapter do not provide instance identifiers, and as a consequence, the
security systems do not support instance-based access control either.
The resource descriptor mapping described in section 4.11 is a good compromise be-
tween these two approaches - on the one hand it allows object references to be transient,
and on the other hand it represents instances by their persistent resource descriptor in the
access control and auditing policy. We believe that it would be useful to implement the
mapping for the middleware technologies examined in this chapter (EJB, CCM, .NET).
Another important feature of the middleware architecture for security is the concept
of interceptors. Interceptors allow the security system to intercept the message path at
various points during the invocation. The middleware architecture should cater for a whole
range of interceptors at different layers of the middleware, at least at the following eight
points: Both the client side and at the target side should have inbound and outbound
interceptors. At each of these four points, there should be request-level interceptors
that give structured access to the invocation before marshalling (mainly to accommodate
the access control reference monitor and auditing), and message-level interceptors that
allow modification of the marshalled buffer (mainly for peer authentication and message
protection).
In addition to the message header, request-level interceptors should make the invo-
cation parameters available to the security system, so that fine-grained policies can be
enforced (however this leads to the question how complex parameters such as serialised
objects should be handled).
It would also be useful to have connection level interceptors that allow the security
service to obtain information about the connection established by the underlying trans-
port. For example, a different security policy could be applied depending on the SSL/TLS
connections to different hosts or networks.
If other services such as transaction processing are also integrated into the message
path through interceptors (e.g., in CORBA), then there needs to be a stack of interceptors
at each interception point. It might be necessary to intercept the traffic (at the request
level) before the interceptor invokes other services, as well as afterwards. This results in
a whole stack of interceptors that call the security system before and after other services
are invoked by the interceptor.
The communications protocols used by the middleware also need to cater for secu-
rity. In particular, protocols should allow security tokens to be transferred embedded in
normal messages (e.g., in the protocol service context) to support the transfer of identity
certificates, authorisation tokens, and delegation tokens. For example, CORBA’s CSIv2
protocol allows the transfer of tokens in the IIOP service context, and SAML allows the
transfer of authorisation tokens embedded in SOAP messages.
The middleware should also allow for extra messages (i.e., not sent together with
normal requests and replies) to be sent from within the interceptors. This way, the
security system can implement security protocols that require extra messages, such as
challenge-response protocols and mechanism negotiation protocols.
In addition, the middleware should support the flexible replacement of the underlying
transport mechanism (so-called “pluggable protocols”) to allow the integration of security
protocols such as SSL/TLS. We have already pointed out earlier in this dissertation that
117
the use of secure communications protocols cannot protect local communications, which
renders the security system ineffective for invocations that do not go across the network.
Moreover, object references should allow the inclusion of security information, such as
the security mechanisms and cryptographic algorithms supported by the target side (as
done in CORBASec).
Some middleware architectures support adaptation/reflection. Although this is a use-
ful feature that increases flexibility (and can improve survivability), it severely inhibits
security. This is because it is hard to achieve an acceptable level of assurance (i.e., guar-
antees about the security of the system) for a system that is built on top of a dynamically
changing middleware layer. And since security is generally not very useful without assur-
ance, adaptation of the middleware should be avoided.
To separate the duties of the application developer from the duties of the security
engineer and administrator, the software development and deployment process should
allow the security metadata (such as required roles or rights) to be supplied in separate
files and not in the actual application code (cf. EJB or CCM deployment descriptors).
This should allow the deployer to specify the security policy for code that has been written
by the application provider, and frees the application provider from coding security into
the application.
Although not related to this discussion, it is also worth noting that the middleware
architecture as such is not the only constraint for middleware security. Often the un-
derlying security mechanisms introduce additional limitations. For example, SSL/TLS
does not provide a rich set of security features and is a socket-to-socket protocol, which
restricts the functionality of the middleware security architecture.
7.9 Summary
This chapter examines middleware technologies that have evolved since the specification
of CORBA and CORBASec. It gives an overview of Enterprise Java Beans, the CORBA
Component Model, Microsoft .NET, and XML Web services, and discusses the relevance
of the resource descriptor mapping introduced in chapter 4. Furthermore, reflection and
adaptation in the context of middleware, as well as their impact on middleware security,
is examined. Next, the implementation of several access control models in the context
of middleware is analysed. Finally, the chapter concludes with some general observations
how middleware should be structured to accommodate security.
118
Chapter 8
Conclusion
This dissertation analyses the difficulties of fitting security functionality into a layered
middleware architecture (consisting of application layer, middleware layer, and underly-
ing technology layer) that is designed in accordance with a number of design requirements.
The three most important requirements are: firstly, from an application perspective the
object-oriented programming model should be preserved, which involves automatically
taking care of all communication details (automation), while at the same time hiding all
underlying communications tasks from the application (abstraction). Secondly, applica-
tion code should be portable across different implementations of the underlying middle-
ware and underlying technology (portability). Thirdly, it should be possible to replace
underlying technology without affecting any of the higher layers (flexibility). Additional
requirements include interoperability across different middleware implementations, and
support for large-scale systems. Throughout this dissertation, the Common Object Re-
quest Broker Architecture (CORBA) was used as a reference architecture for such a
middleware.
The middleware security architecture should provide the basic security functions au-
thentication, message protection, access control, audit (and optionally non-repudiation).
In this dissertation, the CORBA Security Services (CORBASec) specification is used as
a reference technology for such a middleware security architecture.
In order to fit into the middleware architecture, the middleware security architecture
has to be designed to preserve the abovementioned middleware design requirements. To
hide the security architecture (abstraction), and to support automatic security policy eval-
uation and enforcement (automation) as well as application portability, all the security
features have to reside below the application layer. In addition, the underlying security
technology (i.e., authentication and message protection) has to reside underneath the mid-
dleware layer to allow flexible replacement of middleware-unspecific underlying security
technology (flexibility). As a result, the middleware security architecture tries to solve
the middleware security problem on several layers:
• Authentication and message protection are done below the middleware layer by
security mechanisms such as SSL, Kerberos, or SESAME. To allow for flexibility,
the security architecture should ideally abstract their exact nature from the higher
layers.
• The two other main functional components, access control and auditing, are imple-
mented in the middleware layer and – because there is no suitable notion available in
119
the middleware layer – rely on the security attributes established by the underlying
security technology, in particular the authenticated identities for the client and the
target.
Unfortunately, the granularity and semantics of these identities do not match with the
representations required to express effective middleware layer access control and audit
policies. In particular, the authentication mechanism cannot provide useful identities at
the granularity of individual targets, it can only authenticate the middleware component
that resides below the target object. This is because the security association ends at the
middleware component, and not at the individual target.
As a result, the concept of middleware layer separation from the underlying security
technology breaks: introducing the middleware layer not only separates the application
from the underlying network, it also separates the security problem from the security
solution. The generic nature of our discussion and the used models suggest that this
problem is common to many middleware technologies, not just CORBA/CORBASec.
In this dissertation, we describe an approach that solves this problem on the target
side. We incrementally construct a corresponding “N-to-1 Middleware Security Model
with Local Target Descriptors” that illustrates how authenticated identities, principals,
middleware, clients and targets, and descriptors are related. All these terms are explicitly
defined to avoid confusion with the often conflicting terminology used throughout the
information security literature.
Our approach allows the expression of individual access control (and audit) policies on
a per-target basis. We introduce the notion of descriptors that express individual targets
and have to satisfy the following four properties:
• Descriptors should be independent of the object lifecycle of the targets (i.e., persis-
tent)
We then analyse the usability of the two descriptor options available to describe tar-
gets: the interface type, and the instance identification in the request header. Unfortu-
nately the target interface does not fulfil the uniqueness and coupling properties, and the
target instance identifier does not fulfil the persistency property.
As a result, we introduce the notion of “resources”, which are defined as services
offered to a client by a target instance. The instance that provides a resource can change
over time, but it will always be protected by the same access rule. Descriptors for such
resources would fulfil all properties outlined above, but they are not directly available in
the middleware architecture.
To solve this problem, we propose a mapping mechanism that ties the instance identi-
fication to a persistent resource descriptor that is supplied by the user or the server when
the target servant is created. At configuration time, this descriptor is stored in a mapping
120
table together with the instance information that is part of the object reference. Access
(and audit) policies are expressed for individual targets using the resource descriptors.
At invocation time, the access control and audit functions in the middleware layer can
obtain the resource descriptor associated with the instance information taken from the
incoming request, and enforce the access rule for the invoked resource.
Our proof-of-concept implementation shows that this approach is useable in practice,
even for complex architectures such as CORBA/CORBASec. The implementation, which
is part of the MICOSec Open Source CORBA security services implementation, is in-
spired by an early draft of the OMG’s Security Domain Membership Management Service
submission but contains a number of improvements. In particular, the POA name is used
instead of the proposed POA reference, which allows the persistent configuration of the
mapping table for security-unaware applications. MICOSec also supports the dynamic
mapping configuration for security-aware applications.
Our analysis of the security approaches of several middleware technologies that have
emerged since the specification of CORBA and CORBASec shows that these technologies
lack instance-based access control and would therefore also benefit from the resource
descriptor mapping.
121
122
List of Publications
1. U. Lang and R. Schreiner. Developing Secure Distributed Systems with CORBA
(ISBN 1580532950), hardcover 332 pages, Artech House Publishers, Boston, MA,
February 2002.
11. U. Lang and D. Gollmann. Secure CORBA based Electronic Commerce Systems.
Elsevier/Zergo Information Security Technical Report, Vol. 3, No. 2, July 1998.
12. U. Lang. CORBA Security. University of London (Royal Holloway), M.Sc. Disser-
tation, September 1997.
123
124
List of Presentations
1. Enforcement of Enterprise-Wide Security Policies with CORBASec. DOCsec 2002
Workshop, Baltimore, MD, USA, March 2002.
2. Middleware Security – Current Research and Future Work. Security Seminar, Cam-
bridge University Computer Laboratory, Cambridge, UK, March 2002.
10. Security in Distributed Systems. Lecture for M.Sc. Information Security, University
of London (Royal Holloway), UK, December 1999.
11. Why CORBA Security (Still) Fails. DERA Security Workshop 1999, Malvern, UK,
December 1999.
12. CORBA Security in a Large Banking Environment. DOCsec 1999 Workshop, Bal-
timore, MD, USA, July 1999.
15. Security in Distributed Systems. Lecture for M.Sc. in Information Security, Uni-
versity of London (Royal Holloway), UK, November 1998.
16. CORBA, CORBA Security, and CORBA Security in Practice. Security Seminar,
Cambridge University Computer Laboratory, Cambridge, UK, April 1998.
125
126
Bibliography
[1] C. Adams. The Simple Public-Key GSS-API Mechanism (RFC 2024), 1996.
[2] Adobe Systems. Acrobat 5 Overview. Adobe Systems Inc., March 2001.
[3] G. Agha. The structure and semantics of actor languages. In Proceedings of REX
School/Workshop Foundations of Object-Oriented Languages (J. W. de Bakker, W.
P. de Roever, and G. Rozenberg, eds.), vol. 489 of Lecture Notes in Computer
Science, Noordwijkerhout, The Netherlands, Springer-Verlag, pages 1–59, May/June
1990.
[7] J. Bacon and K. Moody. Toward Open, Secure, Widely Distributed Services. Com-
munications of the ACM, Vol. 45, No. 6, June 2002.
127
[14] K. Beznosov and Y. Deng. A Framework for Implementing Role-based Access Con-
trol Using CORBA Security Service. Fourth ACM Workshop on Role-Based Access
Control, Fairfax, Virginia, USA, October 1999.
[19] D.F.C. Brewer and M.J. Nash. The Chinese Wall Security Policy. In Proceedings of
the 1989 IEEE Symposium on Security and Privacy, IEEE Computer Society Press,
pp. 206-214, 1989.
[21] G. Brose. Access Control Management in Distributed Object Systems. PhD thesis,
Freie Universität Berlin, Berlin, Germany, 2001.
[22] A. Brown, M. Fuchs, J. Robie, and P. Wadler (eds.). XML Schema: Formal De-
scription. W3C Working Draft, September 2001.
[24] R. Campbell and T. Quian. Dynamic Agent-based Security Architecture for Mo-
bile Computers. In Proceedings of the Second International Conference on Parallel
and Distributed Computing and Networks (PDCN’98), Australia, pages 291–299,
December 1988.
[26] W. R. Cheswick and S. M. Bellovin. Firewalls and Internet Security – Repelling the
Wily Hacker. Addison Wesley, Reading, MA, 1994.
[28] D.R. Clark and D.R. Wilson. A comparison of commercial and military computer
security policies. In Proceedings of the 1987 IEEE Symposium on Security and
Privacy, Oakland, CA, pages 184–194, 1987.
128
[29] COACH Consortium. Component Based Open Source Architecture for Distributed
Telecom Applications, EU IST Programme (Project IST-2001-34445, 1 April 2002
to 31 March 2004), January 2003. (http://www.ist-coach.org).
[32] T. Dierks and E. Rescorla. The TLS Protocol Version 1.1 (RFC 2246), October
2002. Internet Engineering Task Force.
[33] DIMMA Team. DIMMA Design and Implementation, ANSA Phase III. Technical
Report APM.2063.01, ANSA, Cambridge, UK, September 1997.
[34] B. Shannon (ed.). Java 2 Platform Enterprise Edition Specification, v1.4, Proposed
Final Draft, August 2002.
[35] C. Kaler (ed.). Web Services Security (WS-Security), Version 1.0 05, April 2002.
[36] L. Kristiansen (editor). TINA-C Service Architecture Version: 5.0. TINA-C, June
1997. (www.tinac.com).
[39] D. Evans and A. Twyman. Flexible Policy-Directed Code Safety. In IEEE Security
and Privacy Proceedings, pages 32 – 45, Oakland, CA, May 1999.
[42] C.A. Fonseca. Extend JAAS for class instance-level authorization. IBM Developer-
Works, April 2002.
[43] J. Fontana. Web Services: Where middleware and XML converge. Network World,
September 2001.
[45] J. Fontana. Top Web services worry: Security. Network World, January 2002.
129
[46] J. Fontana. XML-based security protocol wins approval from OASIS. Network
World, November 2002.
[49] S. Garfinkel and G. Spafford. Practical Unix &Internet Security, 2nd edition.
O’Reilly & Associates, Inc., Sebastopol, 1996.
[50] D. Gollmann. Computer Security. John Wiley & Sons, UK, 1999.
[51] L. Gong. Inside Java 2 Platform Security. Addison Wesley, Reading, MA, June
1999.
[53] S.R. Gopalan. The CORBA Component Model (CCM), 1999. (http://www.exec-
pc.com/∼gopalan/CORBA/ccm.html).
[54] J. Gosling, B. Joy, G. Steele, and G. Bracha. The Java Language Specification,
Second Edition (The Java Series). Addison Wesley, Reading, MA, June 2000.
[57] B. Hartman, D.J. Flinn, and K. Beznosov. Enterprise Security with EJB and
CORBA. John Wiley & Sons, New York, NY, 2001.
[59] R. Hayton. FlexiNet Open ORB Framework. Technical Report 2047.01.00, APM
Ltd., Cambridge, UK, October 1997.
[60] R. Hayton, J. Bacon, and K. Moody. OASIS: Access Control in an Open, Distributed
Environment. In Proceedings IEEE Symposium on Security and Privacy, Oakland
CA, pages 3–14, May 1998.
[61] M. Henning and S. Vinoski. Advanced CORBA Programming with C++. Addison-
Wesley, Reading, MA, 1999.
130
[62] J. Huang and Y. Wang et al. On Developing Distributed Middleware Services for
QoS- and Criticality-Based Resource Negotiation and Adaptation. Journal of Real-
Time Systems (Special Issue on Operating Systems and Services), 1998.
[63] P. Humenn. Summary of MDI Discussion. OMG SecSIG Mailinglist, March 1999.
[65] C. Irvine and T. Levin. Quality of Security Service. 23rd National Information Sys-
tems Security Conference, Baltimore Convention Center, Baltimore, MD, October
2000.
[69] ISO/IEC 8879. Information processing – Text and office systems – Standard Gen-
eralized Markup Language (SGML). International Organization for Standardiza-
tion/International Engineering Consortium, 1986.
[71] J. Gosling and F. Yellin and Java Team. Java API Documentation Version 1.0.2.
Sun Microsystems, Inc., 1996.
[72] Java Team. Java 2 SDK Documentation. Sun Microsystems, Inc., 1996–1999.
[73] Java Team. JDK 1.1.8 Documentation. Sun Microsystems, Inc., 1996–1999.
[74] P Kaijser, T Parker, and D Pinkas. SESAME: The solution to security for open
distributed systems. Computer Communications, Vol. 17, No. 7, pages 501 – 518,
1994.
131
[77] G. Kiczales, J. des Rivires, and D. G. Bobrow. The Art of the Metaobject Protocol.
The MIT Press, Cambridge, MA, USA, 1991.
[78] M.O. Killijian and J.C. Fabre. Implementing a Reflective Fault-Tolerant CORBA
System. 19th IEEE Symposium on Reliable Distributed Systems (SRDS’00),
Nürnberg, Germany, October 2000.
[79] M. Kirtland. A Platform for Web Services. Microsoft Developer Network, January
2001.
[80] J. Kohl and C. Neumann. The Kerberos Network Authentication Service V5 (RFC
1510), 1993.
[81] F. Kon, M. Román, P. Liu, J. Mao, T. Yamane, L.C. Magalhaes, and R.H. Campbell.
Monitoring, Security, and Dynamic Configuration with the dynamicTAO Reflective
ORB. IFIP/ACM International Conference on Distributed Systems Platforms and
Open Distributed Processing (Middleware’2000), New York, April 2000.
[82] C.J. Kuo and P. Humenn. Dynamically Authorized Role-Based Access Control for
Secure Distributed Computation. Sixth Annual Workshop On Distributed Objects
and Components Security (DOCSec2002), Baltimore, MD, March 2002.
[83] B. Lampson. Protection. ACM Operation Systems Review Vol. 8, No. 1 (Reprint
from: Fifth Princeton Symposium on Information Sciences and Systems, pp. 437 –
443, Princeton University, March 1971), pages 18 – 24, January 1974.
[85] T. Landgrave. Planning Web Services Security. ZDNet Australia, October 2002.
[89] U. Lang and R. Schreiner. Developing Secure Distributed Systems with CORBA.
Artech House, February 2002.
132
[91] T.M.P Lee. Using mandatory integrity to enforce “commercial” security. In Proceed-
ings IEEE Computer Society Symposium on Security and Privacy, Oakland, CA,
pages 140–146, May 1988.
[92] M. Leech, M. Ganis, Y. Lee, R. Kuris, D. Koblas, and L. Jones. SOCKS Protocol
Version 5. Network Working Group, March 1996.
[93] D. Levine, D.C. Schmidt, and N. Wang. Optimizing the CORBA Component Model
for High-performance and Real-time Applications. Middleware 2000 Conference,
IFIP/ACM, Palisades, New York, 2000.
[94] J. Linn. Generic Security Service Application Program Interface, Version 2 (RFC
2078), 1997.
[95] P. Liu. The Design and Implementation of a Reference Monitor for the 2K Operating
System (Master’s thesis). Department of Computer Science, University of Illinois
at Urbana-Champaign, July 1999.
[96] J. Lowy. Unify the Role-Based Security Models for Enterprise and Application
Domains with .NET. MSDN Magazine, May 2002.
[100] P. Maes. Issues in computational reflection. In: P. Maes and D. Nardi (eds.):
Meta-Level Architectures and Reflection. Elsevier, Netherlands, 1988.
[104] MICOSec Project. Open Source CORBA Security Services Project (for MICO),
2002. (www.micosec.org).
[105] Microsoft Corporation. The Security Support Provider Interface. White Paper,
1999.
133
[106] Microsoft Corporation. A Guide to Reviewing the Microsoft .NET Framework:
A Platform for Rapidly Building and Deploying XML Web Services and Applica-
tions to Solve Today’s Business Challenges. Microsoft Corp, Redmond, WA, 2001.
(msdn.microsoft.com/netframework/).
[108] Microsoft Corporation. Microsoft .NET Framework Security Overview. Visual Stu-
dio .NET Technical Resources, 2002.
[113] M. Nyanchama and S. Osborn. Role-Based Security: Pros, Cons & Some Research
Directions. ACM SIGSAC Review, Vol. 2, No. 2, pages 11–17, June 1993.
[117] Object Management Group. Real-Time CORBA 1.0 Adopted Specification. Need-
ham, MA, June 1999. (document ptc/99-06-02).
[118] Object Management Group. Common Object Request Broker Architecture, v2.3.
Needham, MA, 2000. (document: formal/98-12-01).
[119] Object Management Group. Common Object Request Broker: Architecture and
Specification, v2.5. Needham, MA, 2001. (documents: formal/01-09-01, formal/01-
09-34).
[121] Object Management Group. CORBA Security Services, v1.7. Needham, MA, 2001.
(document: formal/01-03-08).
134
[122] Object Management Group. Dynamic Scheduling, Joint Final Submission. Need-
ham, MA, April 2001. (document orbos/01-04-01).
[123] Object Management Group. Resource Access Decision Facility Specification v1.0.
Needham, MA, April 2001. (document: formal/01-04-01).
[125] Object Management Group. The Authorization Token Layer Acquisition Service
Specification. Needham, MA, October 2001. (document ptc/2001-10-22).
[126] Object Management Group. CORBA Component Model v3.0. Needham, MA, June
2002. (document: formal/2002-06-65).
[127] Open Group. Distributed Computing Environment Overview. Woburn, MA, De-
cember 1996. (www.opengroup.org/dce/tog-dce-pd-1296.htm).
[128] Open Group. Press Release: CORBA Open Brand, June 1999.
(www.opengroup.org/press/7jun99 a.htm).
[130] Parlay Group. Open Service Access; Application Programming Interface; Part 1:
Overview, Final draft, ETSI Standard ES 201 915-1 V1.1.1. Parlay Group, Decem-
ber 2001. (www.parlay.org).
[131] C.E. Philips, T.C. Ting, and S.A. Demurjian. Information Sharing and Security
in Dynamic Coalitions. Seventh ACM Symposium on Access Control Models and
Technologies, Monterey, California, USA, 2002.
[133] A. Pruneda. Windows Media Technologies Using Windows Media Rights Manager
to Protect and Distribute Digital Media. MSDN magazine, page 5, March 2001.
[134] D. Raggett, A. Le Hors, and I. Jacobs (World Wide Web Consortium). HTML 4.0
Specification, April 1998.
135
[137] M. Roman, D. Mickunas, F. Kon, and R. Campbell. LegORB and Ubiquitous
CORBA. Workshop on Reflective Middleware (RM’2000), IBM Palisades Executive
Conference Center, New York, USA, April 2000.
[138] K. Römer, A. Puder, and F. Pilhofer. MICO is CORBA, An Open Source CORBA
2.3 Implementation. Morgan Kaufman, 1999.
[139] J. Rushby and B. Randell. A Distributed Secure System. IEEE Computer,Vol. 16,
No. 7, pages 55 – 67, 1983.
[141] R.S. Sandhu. A Lattice Interpretation of the Chinese Wall Policy. In Proceedings
15th NIST-NCSC National Computer Security Conference, Baltimore, MD, pages
329–339, 1987.
[142] R.S. Sandhu. Lattice-Based Enforcement of Chinese Walls. Computers & Security,
Vol. 11, No. 8, pages 753–763, December 1992.
[143] R.S. Sandhu. Lattice-based access control models. IEEE Computer, Vol. 26, No.
11, pages 9–19, 1993.
[144] R.S. Sandhu. Role hierarchies and constraints for lattice-based access controls. In
Proceedings of the Fourth European Symposium on Research in Computer Security
(ESORICS96, Rome, Italy), E. Bertino, H. Kurth, G. Martella, E.Montoliva (eds.)
Springer, New York, NY, pages 65–79, September 1996.
[145] R.S. Sandhu and P. Samarati. Access control: Principles and practice. IEEE
Communications, Vol. 32, No. 9, pages 40–48, 1994.
[146] R. Schantz, F. Webber, P. Pal, J. Loyall, and D.C. Schmidt. Protecting Applications
Against Malice with Adaptive Middleware. Certification and Security in E-Services
stream of the 17th IFIP World Computer Congress, Montreal, Canada, August
2002.
[149] D. Schmidt, D. Levine, and S. Mungee. The design of the TAO realtime Object
Request Broker. Computer Communications, Vol. 21, No. 4, April 1998.
[150] W.R. Schockley. Implementing the Clark/Wilson integrity policy using current
technology. NIST-NCSC National Computer Security Conference, 1988.
136
[152] A. Singhai, A. Sane, and B. Campbell. Quarterware for Middleware. In Pro-
ceedings of the 18th International Conference on Distributed Computing Systems
(ICDCS’98), Amsterdam, pages 192–201, May 1998.
[153] F. Siqueira, V. Cahill, and V. Quartz. A QoS Architecture for Open Systems. 20th
International Conference on Distributed Computing Systems (ICDCS’00), Teipei,
Taiwan, April 2000.
[154] B.C. Smith. Reflection and Semantics in a Procedural Language. Technical Report
MIT/LCS/TR-272, MIT, Cambridge, MA, 1982.
[156] Sun Microsystems. RPC: Remote Procedure Call, Protocol Specification, Version 2
(RFC 1057), June 1988.
[157] Sun Microsystems. JavaTM 2 SDK, Standard Edition Documentation Version 1.4.1,
2002. (http://java.sun.com/j2se/1.4.1/docs/index.html).
[162] D. Tidwell. Web services – the Web’s next revolution. IBM DeveloperWorks, Novem-
ber 2000.
[163] Trusted Information Systems, Inc. TIS Internet Firewall Toolkit (FWTK), 1997.
(source: ftp.tis.com/pub/firewalls/toolkit).
[164] R. Vanegas, J.A. Zinky, J.P. Loyall, D.A. Karr, R.E. Schantz, and D.E. Bakken.
QuO’s Runtime Support for Quality of Service in Distributed Objects. In Proceed-
ings of the IFIP International Conference on Distributed Systems Platforms and
Open Distributed Processing (Middleware’98), Lake District, UK, September 1998.
[166] L. von Schweber. Web Services – Simply The New Middleware. Infomaniacs.com,
October 2002.
[167] N. Wang, D.C. Schmidt, and C. O’Ryan. An Overview of the CORBA Component
Model, In: Component-Based Software Engineering (G. Heineman and B. Councill,
eds.). Addison-Wesley, Reading, MA, 2000.
137
[168] T. Watanabe and A. Yonezawa. Reflection in an object-oriented concurrent lan-
guage. In Proceedings OOPSLA ’88, vol. 28 of Sigplan Notices, ACM Press, pages
306–315, 1987.
[169] R. Waters. Microsoft to drop .Net in product branding. Financial Times Online
(FT.com), January 2003.
[171] S. Webber. MSDN Talk. MSDN News, Vol. 10, No. 4, July/August 2001.
[172] M. Wegdam and A. van Halteren. Experiences with CORBA Interceptors, Position
Paper. Reflective Middleware 2000, IBM Palisades Executive Conference Center,
New York, USA, April 2000.
[173] I. Welch and R. J. Stroud. Using Reflection as a Mechanism for Enforcing Security
Policies in Mobile Code. In 6th European Symposium on Research in Computer
Security (ESORICS) Proceedings, pages 309 – 323, Toulouse, France, October 2000.
[175] R. Wolter. XML Web Services Basics. Microsoft Developer Network, December
2001.
[176] K. Wray. Generic Security Service API : C-bindings (RFC 1509), September 1993.
[177] S.S. Yau and F. Karim. Adaptive Middleware for Ubiquitous Computing Environ-
ments. DIPES 2002, Montral, Qubec, Canada, 2002.
[178] Y. Yokote. The Apertos reflective operating system: The concept and its imple-
mentation. In Proceedings of OOPSLA’92, vol. 28 of Sigplan Notices, ACM Press,
pages 414–434, 1992.
138