System for multilevel secure database management using a knowledge base with release-based and other security constraints for query, response and update modification5355474Abstract Apparatus for an integrated architecture for an extended multilevel secure database management system. The multilevel secure database management system processes security constraints to control certain unauthorized inferences through logical deduction upon queries by users and is implemented when the database is queried through the database management system, when the database is updated through the database management system, and when the database is designed using a database design tool. Claims We claim: Description BACKGROUND OF THE INVENTION
__________________________________________________________________________
Relation SHIPS
Number
Name Class Date
Assignment
__________________________________________________________________________
CVN 68
Nimitz Nimitz May 75
003
CV 67 John F Kennedy
John F Kennedy
Sep 68
001
BB 61 Iowa Iowa Feb 43
003
CG 47 Ticonderoga
Ticonderoga
Jan 83
005
DD 963
Spruance Spruance Sep 75
006
AGF 3 La Salle Converted Raleigh
Feb 64
003
WHEC 715
Hamilton Hamilton Feb 67
003
FFG 7 Oliver Hazard Perry
Oliver Hazard Perry
Dec 77
001
FF1052
Knox Knox Apr 69
001
LSD 36
Anchorage Anchorage Mar 69
009
LHA 1 Tarawa Tarawa May 76
003
MCM 1 Avenger Avenger Sep 87
003
AOR 1 Whichita Whichita Jun 69
003
AFS 1 Mars Mars Dec 63
001
AE 21 Suribachi Suribachi Nov 56
009
AE 23 Nitro Nitro May 59
005
AO 177
New Cimarron
New Cimarron
Jan 81
001
SSN 706
Albuquerque
Los Angeles
May 83
006
CVN 65
Enterprise Enterprise Nov 61
009
MSO 427
Constant Aggressive Sep 54
001
__________________________________________________________________________
Relation Groups
Number Location Mission Siop
__________________________________________________________________________
001 North Atlantic
naval exercises
001
002 South Atlantic
falklands patrol
002
003 Mediterranean
iraq crisis 006
004 Philippines
stabilize government
005
005 Persian Gulf
iraq crisis 004
006 Indian Ocean
naval exercises
004
007 North Sea soviet reconnaissance
003
008 North Atlantic
oceanographic research
003
009 North Pacific
oceanographic research
001
__________________________________________________________________________
TEST SCENARIO 1: No Constraints
Constraints active: NONE
Original query: select * from Ships
User's level: 1
Final modified query: Same as the original query (that is, query is not
modified)
select ships.number, ships.name, ships.class, ships.data,
ships.assignment
into #filter.sub.-- temp1 from ships
Note that the asterisk is a wildcard indicator which means the query is
for
all attributes (fields) in a record. When the Inference Engine sees this
character it replaces it with all the field names in any tables specified
in the
from clause.
Result: All of the tuples in SHIPS
TEST SCENARIO 2: Content constraints
Constraints active:
ships.class = `Belknap` .fwdarw. Level(ships.class) = 16;
ships.class = Ticonderoga` .fwdarw. Level(ships.class) = 16;
ships.class = `Leahy` .fwdarw. Level(ships.class) = 16;
ships.class = `Charles F Adams` .fwdarw. Level(ships.class) = 16;
ships.class = `Ohio` .fwdarw. Level(ships.class) = 16;
ships.class = `Spruance` .fwdarw. Level(ships.class) = 16;
ships.class = `Iowa` .fwdarw. Level(ships.class) = 16;
ships.class = `Aggressive` .fwdarw. Level(ships.class) = 16;
ships.class = `Mars` .fwdarw. Level(ships.class) = 16;
ships.class = `Nimitz` .fwdarw. Level(ships.class) = 16;
ships.class = `Los Angeles` .fwdarw. Level(ships.class) = 16;
ships.class = `John F Kennedy` .fwdarw. Level(ships.class) = 16;
ships.class = `Enterprise` .fwdarw. Level(ships.class) = 16;
ships.class = `Anchorage` .fwdarw. Level(ships.class) = 16;
Original query: select * from ships
User's level: 1
Final modified query:
select ships.number, ships.name, ships.class, ships.date,
ships.assignment
into #filter temp1 from ships where
(not (ships.class = `Belknap`)) and
(not (ships.class = Ticonderoga`)) and
(not (ships.class = `Leahy`)) and
(not (ships.class = `Charles F Adams`)) and
(not (ships.class = `Ohio`)) and
(not (ships.class = `Spruance`)) and
(not (ships.class = `Iowa`)) and
(not (ships.class = `Aggressive`)) and
(not (ships.class = `Mars`)) and
(not (ships.class = `Nimitz`)) and
(not (ships.class = `Los Angeles`)) and
(not (ships.class = `John F Kennedy`)) and
(not (ships.class = `Enterprise`)) and
(not (ships.class = `Anchorage`))
Result:
Number
Name Class Date
Assignment
__________________________________________________________________________
AGF 3 La Salle Converted Raleigh
Feb 64
003
WHEC 715
Hamilton Hamilton Feb 67
003
FFG 7 Oliver Hazard Perry
Oliver Hazard Perry
Dec 77
001
FF1052
Knox Knox Apr 69
001
LHA 1 Tarawa Tarawa May 76
003
MCM 1 Avenger Avenger Sep 87
003
AOR 1 Whichita Whichita Jun 69
003
AE 21 Suribachi Suribachi Nov 56
010
AE 23 Nitro Nitro May 59
005
AO 177
New Cimarron
New Cimarron
Jan 81
001
__________________________________________________________________________
TEST SCENARIO 3: Logical Constraints
Constraints active:
Logical(groups.location .fwdarw. groups.mission);
Level(groups.mission) = 16
Original query: select ships.name, groups.location, groups.siop from
ships,
groups where ships.assignment = groups.number
Final modified query:
select ships.name, groups.siop into #filter.sub.-- temp1 from ships,
groups where
ships.assignment = groups.number
Results:
Name Siop
__________________________________________________________________________
Nimitz 006
John F Kennedy
001
Iowa 006
Ticonderoga
004
Spruance 004
La Salle 006
Hamilton 006
Oliver Hazard Perry
001
Knox 001
Anchorage 001
Tarawa 006
Avenger 006
Whichita 006
Mars 001
Suribachi 001
Nitro 004
New Cimarron
001
Albuquerque
004
Enterprise 001
Constant 001
__________________________________________________________________________
TEST SCENARIO 4: Association Constraint (or Together Constraint)
constraints active:
Level(Together(groups.mission, groups.location)) = 10
Original query: select * from groups
User's level: 1
Final modified query:
select groups.number, groups.location, groups.siop into #filter.sub.--
temp1 from
groups
Results:
Number Location
Siop
__________________________________________________________________________
001 North Atlantic
001
002 South Atlantic
002
003 Mediterranean
006
004 Philippines
005
005 Persian Gulf
004
006 Indian Ocean
004
007 North Sea
003
3 DESIGN AND IMPLEMENTATION OF THE UPDATE PROCESSOR 3.1 OVERVIEW MLS/DBMSs ensure the assignment of a security level to data as data is inserted or modified. The security level assigned to the data, however, is generally assumed to be the login security level of the user entering the data. A more powerful and dynamic approach to assigning security levels to data is through the utilization of security constraints, or classification rules, during update operations. This section provides an overview of the functionality and utilization of a tool, the Update Processor, that utilizes security constraints as its mechanism for determining the security level of data being inserted or modified. Descriptions of the security policy and of the types of security constraints addressed by the Update Processor are also included. 3.1.1 SECURITY POLICY The security policy of the Update Processor is formulated from the simple security property in Bell, D., and L. La Padula, July 1975, "Secure Computer Systems: Unified Exposition and Multics Interpretation," Technical Report NTIS AD-A023588, The MITRE Corporation and from a security policy provided by our underlying MLS DBMS, SYBASE's Secure SQL Server. This policy is as follows: 1. All users are granted a maximum clearance level. A user may log in at any level that is dominated by his maximum clearance level. Subjects act on behalf of users at the user's login security level. 2. Objects are the rows, tables, and databases, and every object is assigned a security level upon creation. 3. A subject has read access to an object if the security level of the subject dominates the security level of the object. 4. A subject has write access to an object if the security level of the object dominates the security level of the subject. Statements 3 and 4 of the policy presented above are the simple and *-property of the Bell and LaPadula policy. Since the Secure SQL Server by default polyinstantiates with updates, we are utilizing the more relaxed security policy offered by the Secure SQL Server. This less strict security policy is provided via the relaxation property option. The relaxation property does polyinstantiate with inserts, does not polyinstantiate with updates and allows users to delete tuples which their login security level dominates. More deraris on the security policy of the Secure SQL Server are provided in Rougeau, P., and E. Stearns, "The Sybase SEcure Database Server: A Solution to the Multilevel Secure DBMS Problem," Proceedings of the 10th National Computer Security Conference, Baltimore, Md., 1987. 3.1.2 FUNCTIONALITY OF THE UPDATE PROCESSOR The Update Processor utilizes simple and content-dependent security constraints as guidance in determining the security level of the data being updated. The use of security constraints can thereby protect against users incorrectly labelling data as a result of logging in at the wrong level, against data being incorrectly labelled when it is imported from systems of different modes of operation such as a system high, and against database inconsistencies as a consequence of the security label of data in the database being affected by data being entered into the database. The security level of an update request is determined by the Update Processor as follows. The simple and content-dependent security constraints associated with the relation being updated and with a security label greater than the user login security level are retrieved and examined for applicability. If multiple constraints apply, the security level is determined by the constraint that specifies the highest classification level. If no constraints apply, the update level is the login security level of the user. The Update Processor, therefore, does not determine the security level of the data solely from the security constraints, but utilizes the constraints as guidance in determining the level of the input data. The following examples illustrate the functionality of the Update Processor. Consider a database that consists of a relation SHIPS whose attributes are number, name, class, date, and assignment, and number as its primary key. The content-based constraint which classifies all ships with name Georgia as secret is expressed as: SHIPS.name="Georgia" .fwdarw.Secret. A user at login security level confidential enters the following data to insert a tuple into the SHIPS relation: Insert SHIPS values ("SSBN 729", "Florida", "Ohio", "Feb 84", "008"). The Update Processor will receive this insert and retrieve the constraints associated with the SHIPS relation which specify a level greater than the user level, which is confidential, and whose level is less than or equal to the user level. The content-based constraint stated above is retrieved. Since the data entered for the name field is not "Georgia", the security constraint associated with the SHIPS relation will not affect the classification level of the insert, and the Update Processor will determine the insert level to be the user level, which is confidential. Suppose a user at login security level confidential then enters the following: Insert SHIPS values ("SSBN 730", "Georgia", "Ohio", "Mar 89", "009"). The Update Processor will again retrieve the content-based constraint associated with the SHIPS relation, which spedties a level greater than the user level and whose level is less than or equal to the user level. Since the data for the name field is "Georgia", the Update Processor will determine the insert level to be secret. If, however, the user entered this insert at login security level top secret, the Update Processor would perform the insert at the user level since the user level is higher than the level specified by the security constraint. The update operation of the Update Processor functions similarly to the insert operation. As an example, suppose a user at the confidential level enters the follow: Update SHIPS set name="Georgia"where class="Ohio". the Update Processor will retrieve the security constraints associated with the SHIPS relation which specify a level greater than the user level and whose level is less than or equal to the user level. The content-dependent constraint stated above will be retrieved, an the Update Processor will determine the update level to be secret since the name field is being modified to "Georgia". The tuple with a primary key of "SSBN 729" as defined above will then be updated at the secret level, and the original tuple will be deleted. In addition to describing the functionality of the Update Processor, the examples above illustrate the potential signaling channels that exist when operating with the Update Processor. A signaling channel is a form of covert channel which occurs when the actions of a high user or subject interfere with a low user or subject in a visible manner. Potential signaling channels occur when data is enter at a level higher than the user level and the user attempts to retrieve the data that he has entered, or when the Update Processor attempts to enter data at a higher level, but cannot since a tuple with the same primary key already exists at this level. We will discuss the potential signaling channels that could occur operating with the Update Processor and our solutions in Section 3.2.5. 3.1.3 UTILIZATION OF THE UPDATE PROCESSOR An MLS DBMS provides assurance that all objects in a database have a security level associated with them and that users are allowed to access only the data which they are cleared. Additionally, it provides a mechanism for entering multilevel data but relies on the user to login at the level at which the data is to be entered. The Update Processor will provide a mechanism that can operate as a standalone tool with a MLS DBMS to provide assurance that data is accurately labelled as it is entered into the data base. This could significantly enhance and simplify the ability of an MLS DBMS to assure that data entered via bulk data loads and bulk data updates is accurately labelled. Another significant use for an Update Processor is in operation with an Query processor which functions during query processing. The Query processor protects against certain security violations via inference that can occur when users issue multiple requests and consequently infer unauthorized knowledge. The Query processor Prototype also utilizes security constraints as its mechanism for determining the security level of data. The security constraints are used as derivation rules as they are applied to the data during query processing. Addressing all of the security constraint types mentioned above could add a significant burden to the query processor particularly if the number of constraints is high. To enhance the performance of the query processor, the Update Processor can be utilized to address certain constraint types as data is entered into the database, in particular, simple and content-based constraints, alleviating the need for the query processor to handle these constraint types. We assume that the security constraints remain relatively static, as reliance on the Update Processor to ensure that data in the database remains consistent would be difficult, particularly in a volattic environment where the constraints change dynamically. An additional concern is that database updates could leave the database in an inconsistent state. The Update Processor, however, is designed to reject updates that cause a rippling effect and thus leave the database in an inconsistent state. 3.2 DESIGN AND IMPLEMENTATION 3.2.1 REPRESENTATION OF SECURITY CONSTRAINTS The Update Processor handles the simple and content-based constraints. While the graph structure representation discussed in section 4 was efficient for a small number of constraints, we felt that it would be more efficient to store a large number of constraints in the database. Therefore, for the update processor prototype we decided to store the constraints in the database. As before the constraints were classified at different security levels, but stored at system-high. The owner of the constraint table is the SSO. Therefore only the SSO can manipulate the constraint table. The constraint manager, which is a trusted process, would ensure that only a user classified at level L could read the constraints classified at or below level L.
TABLE 1
______________________________________
CONSTRAINT Table
______________________________________
C.sub.-- ID
C.sub.-- LEVEL
RESULT.sub.-- REL.sub.-- NAME
CONDITION RESULT.sub.-- LEVEL
1 6 class = "Georgia
10 SHIPS
2 6 name = "Florida"
11 SHIPS
3 6 name = "Georgia"
12 SHIPS
4 6 1 = 1 8 SHIPS.sub.-- CLASS
______________________________________
The CONSTRAINT table, populated with example constraints, is presented in Table 1. The definition of the field names follows. CONSTRAINT. c.sub.- id is the primary key for the table and contains a unique constraint identifier. CONSTRAINT.c.sub.- level is the constraint level. Only data entered by users with a login security level at or above this constraint level will be affected by this constraint. CONSTRAINT.result.sub.- rel.sub.- name.sub.- id is the relation name associated with the constraint. CONSTRAINT.condition is the expression of the condition for a content-based constraint, and CONSTRAINT.result.sub.- evel is the level specified by the constraint. An additional field which we recommend adding to the CONSTRAINT table is a CONSTRAINT.status field to indicate whether the constraint is currently active or inactive. The capability to change the status of constraints is particularly useful for an application whose constraints change dynamically. 3.2.2 ASSUMPTIONS In implementing the Update Processor, the following assumptions were made. Examples are given for clarification when necessary. 1. Users can only update tuples they can see. If a user updates a tuple that exists at his login security level and the Update Processor determines the update security level to be higher than the user's login security level, the Update Processor will perform the update at this higher level. However, if a tuple with the same primary key already exists at this higher level, the update request will be rejected, as the user would in fact be updating a tuple whose security label is greater than his login security level. The Update Processor will return a request failed message to the user. We recommend that a request of this type be audited and that an SSO be alerted to resolve the conflict. 2. An update request will be aborted if it leaves the database in an inconsistent state. This may occur with the existence of more complex constraints on multiple relations. As an example: Given the constraint which references the SHIPS and SHIPS.sub.- CLASS tables, SHIPS CLASS.length="20".fwdarw.Level (SHIPS.name)=9. If the SHIPS CLASS.length field is updated to be equal to "20," then data in the SHIPS table where SHIPS.sub.- CLASS.classification=SHIPS.class and SHIPS CLASS.length="20" may be labelled inaccurately. An update of this type that will leave the database in an inconsistent state will be aborted.* We have designed techniques to handle such inconsistencies. These techniques have not yet been implemented. 3. If a user requests an update at a login security level that is higher than the level determined by the Update Processor, the SSO will examine the request and, if acceptable, will allow the update to be executed at the user level. The Update Processor thereby allows for the overclassification of data. 4. The Update Processor operates with the more relaxed security policy provided by SYBASE's relaxation property option. Operating with this option alleviates the need for the Update Processor to delete the original lower-level tuple when updating a tuple to a higher level since polyinstantiation is not supported with updates. 3.2.3 ALGORITHM FOR ASSIGNING SECURITY LEVELS TO DATA Insert Request The algorithm used by the Update Processor to determine the security level of data being inserted is as follows. Once an insert request is received, the request is parsed to retrieve the relation name. The Update Processor then searches the CONSTRAINT table for all constraints where CONSTRAINT. result.sub.- rel.sub.- name equals the relation name in the request, where the CONSTRAINT.c.sub.- level is less than or equal to the user login security level, and where the CONSTRAINT.result.sub.- level is greater than the user login security level. The applicable constraints are then ordered in descending order by CONSTRAINT.result.sub.- level. The constraints are ordered as such to alleviate the need to examine all the constraints. The CONSTRAINT.result.sub.- level of the first constraint that applies will be the insert level determined by the constraints. Following the retrieval from the CONSTRAINT table, the initial insert request is inserted into an empty temporary table. A select statement is then built using the temporary table as the relation and the condition from the first applicable constraint as the where clause. If this select statement successfully retrieves the row in the temporary table, then the constraint applies. The CONSTRAINT.result level for this constraint is the level at which the Update Processor will request the insert to the Secure SQL Server. If, however, the select statement does not retrieve the row in the temporary table, the temporary table is deleted, and the algorithm repeats for the next applicable constraint. If the algorithm complete and no constraints apply, then the insert level is determined to be the user login security level. An example of the insert algorithm is as follows. Consider the following insert requested by a user at login security level 6 on the ships database that has defined to it the constraints as specified in the CONSTRAINT table in Table 1: insert SHIPS values ("SSBN 730", "Georgia", "Ohio", "Feb 84", "009"). Three constraints are retrieved from the CONSTRAINT table in the order CONSTRAINT.c.sub.- id="3", CONSTRAINT.c.sub.- id="2", CONSTRAINT.c.sub.- id="1". The insert request is then modified to allow the data to be inserted into an empty temporary table that has the same schema as the SHIPS table. The temporary table, #insert.sub.- temp,is created using SQL as follows: select * into #insert.sub.- temp from rel.sub.- name where 1=2, where rel.sub.- name is the relation name of the insert request. The data is then inserted into the temporary table with the following insert request: insert #insert.sub.- temp values ("SSBN730", "Georgia", "Ohio", "Feb 84", "009"). Next, a select statement is built from the CONSTRAINT.condition data for CONSTRAINT.c.sub.- id="3" and this temporary table. The select statement is: select * from #insert.sub.- temp where name="Georgia". Since this select statement successfully retrieves the one tuple in the temporary table, this constraint applies, and the insert level is determined to be 12, which the CONSTRAINT.result.sub.- level for this constraint. Although the other constraints may apply, the CONSTRAINT.result.sub.- level for these constraints is less than 12, so it is not necessary to examine them. Update Request The algorithm used by the Update Processor to determine the security level of data being updated is as follows. The request is parsed to retrieve the relation name. The Update Processor then searches the CONSTRAINT table, as it does for an insert request, for all constraints where CONSTRAINT.result.sub.- rel.sub.- name equals the relation name in the request, where the CONSTRAINT.c.sub.- level is less than or equal to the user login security level and where the CONSTRAINT.result.sub.- level is greater than the user login security level. The application constraints are then ordered in descending order by CONSTRAINT.result.sub.- level. Following the retrieval from the CONSTRAINT table, a temporary table is created with tuples from the relation in the update request that satisfy the where clause in the update request. This temporary table is then utilized as it was for an insert request, i.e., as a mechanism to check if the constraints selected from the CONSTRAINT table apply. Select statements are built using the temporary table as the relation and the condition from the first applicable constraint as the where clause. If the select statement successfully retrieves any rows from the temporary table, then the constraint applies. The CONSTRAINT.result.sub.- level for this constraint is the level at which the Update Processor will request the update to the Secure SQL Server. As with an insert request, if the select statement does not retrieve any rows in the temporary table, the temporary table is deleted, and the algorithm repeats for the next applicable constraint. If the algorithm completes and no constraints apply, the update level is determined t be the user login security level. The following example illustrates the algorithm for update requests. Consider the update request by a user at login security level 6 on the SHIPS table which contains the tuple ("SSBN 728", "Lafayette", "Lafayette", "Jun 83", "009") and operates with constraints as defined in Table 1: update SHIPS set name="Florida" where name="Lafayette". Three constraints are retrieved from the CONSTRAINT table in the order CONSTRAINT.c.sub.- id="3", CONSTRAINT.c.sub.- id="2", CONSTRAINT.c.sub.- id -"1". A select statement is then bufit that selects into a temporary table the tuples that satisfy the condition "where name="Lafayette", which is the where clause of the update request. The select statement is: "select * into #update.sub.- temp from SHIPS where name="Lafayette" and see.sub.- label =convert(binary,user.sub.- see.sub.- label), where the test for the security label ensures that only tuples less than or equal to the user security label are selected since the process that performs this operation runs at system high. Once the temporary table is built, the update request is modified to update the temporary table. Then, the select statement is built using the where clause of the first applicable constraint as follows: "select * from #update.sub.- temp where name="Georgia" . Since this select statement does not retrieve any rows from the temporary table, the temporary table is deleted, and the algorithm repeats for the next constraint. The next constraint, SHIPS.name="Florida"== Level(SHIPS)=11, will apply, and the update level will be 11. The following subsection will describe details of the implementation design of the Update Processor. 3.2.4 MODULES OF THE UPDATE PROCESSOR A high-level architecture for the Update Processor prototype is provided in FIG. 9. A brief description for data flow within the prototype is as follows: the User Interface* accepts a user's input and sends the input to the Secure SQL Server for a syntax check. If the syntax is correct, the user interface routes the input to the Update Processor. The Update Processor accepts the input, determines the inert/update security level for the input using the security constraints as a guideline, and establishes a connection to the Secure SQL Server at the determined security level for execution of the transaction. The Update Processor then sends a message back to the User Interface indicating the completion status of the transaction. Minor changes were made to the user interface of the query processor for use by the Update Processor Prototype. This User Interface was utilized to provide a common interface for the Update Processor Prototype and the Query Processor Prototype. A more detailed presentation of the design of the Update Processor is in FIG. 10. This figure provides an overview of the modules that comprise the Update Processor. The Update Processor is modularized by function and by the security level at which the function is required to operate. Each module is implemented as an ULTRIX process, and process communication is via sockets. The underlying TCB must provide a reliable interprocess communication (IPC) mechanism for communication. A description of the functions of these modules is provided below. With is description is a discussion on the security level at which these processes run and whether they are trusted or untrusted processes. The update Processor employs a process structure similar to the Query processor to allow for integration with the Query processor Prototype. Process P1 provides a similar user interface to process P1 of the Query processor Prototype. Additionally, the functionality of process P2 could be integrated with the functionality of process P2 of the Query processor Prototype. However, processes P3 and P4 of the Update Processor must not be confused with processes P3 and P4 of the Query processor Prototype. Processes P3 and P4 are specific t the Update Processor. Should the Update Processor Prototype be integrated with the Query processor Prototype, processes P3 and P4 of the Update Processor must remain unique processes. Process PI: User Interface Manager The User Interface Manager process, process P1, provides a user interface to the Update Processor prototype. At start-up, P1 prompts the user for a password and security level. The level specified by the user is the level at which this process runs. Next, P1 prompts the user for a database request and remains in idle until it receives a request. Upon receiving a request, P1 logs into the Secure SQL Server using the user's userid, password, and clearance. The request is then sent to the server for a syntax check. The server returns a message indicating the result of the syntax check. If successful, communication is established with process P2, the Update Processor Controller, and the request, along with the login packet that contains the userid, login security level, and password of the user, is routed to P2. P1 then remains waiting for a response which will indicate the success or failure of the transaction from P2. Once a response is received from P2, P1 will display the response to the user, and P1 will again prompt the user for another request. If the user chooses to enter a request at a different login security level, process P1 will have to be restarred, at which point the user will again be prompted for a password and clearance. The User Interface Manager operates as the front-end to the Update Processor and does not perform security-critical operations. By design, it is isolated from the operations of the higher level processes. As a result, P1 is an untrusted process and, as mentioned above, operates at the user's level. Process P2: Update Processor Controller The Update Processor Controller manages the flow of information between the Update Constraint Gatherer (process P3), the Level Upgrader (process P4), and the Secure SQL Server in determining the level of the update and in performing the update. Upon start-up, P2 idles, waiting for a request for P1. Upon receiving the login packet and the request, P2 logs into the Secure SQL Server utilizing the userid, password, and clearance in the login packet. Thus, P2 runs at the user level. The Update Processor controller then examines the request to determine if it is a select, an insert, an update, or a delete. If the request is an insert or an update, some preliminary processing is performed on the request, and the request along with the login packet is sent to P3. P2 remains idle, waiting for a response which will contain the insert/update level from P3. If the level determined by P3 is greater than the user level, P2 invokes P4 to perform the insert/update level from P3. If the level determined by P3 is greater than the user level, P2 invokes P4 to perform the insert/update. P2 then idles, waiting for a successor or failure response from P4. If the level determined by P3 is the user level, then P2 sends the request to the Secure SQL Server to perform the inserffupdate. The Secure SQL Server returns a completion status message to P2, indicating whether the transaction completed or failed. P2 then sends this completion status message to P1 and waits for the next request from P1. The Update Processor Controller provides assurance that the connection to the Secure SQL Server is established at the correct level, that the user's request is not modified, and that the level determined by P3 is either the level at which the update is performed or the level sent to P4. As such, the Update Processor Controller is a trusted process. Process P3: Update Constraint Gatherer The Update Constraint Gatherer is responsible for determining the security level of the data utilizing the applicable security constraints. Since P3 must have access to the constraints that are stored in the CONSTRAINT table, which is defined at system high, P3 runs a system high. At start-up, P3 waits for a request from P2. Upon receiving a request, P3 determines the security level of the insert or update, utilizing the algorithms described above. P3 then sends this level to P2 and idles, waiting for another request. Since the Update Constraint Gatherer determines the level at which the insert/update will be performed, assurance must be provided that the applicable constraints are used and that the level determined by this process is accurate. This process, therefore, is a trusted process. Process P4: Level Upgrader The Level Upgrader is the process that issues the request to the Secure SQL Server at the level determined by P3 when the insert/update level determined by P3 is greater than the user level. (Note: P2 runs at the user level.) At start-up, P4 wait for a request from P2. Upon receiving the level from P2, P4 logs into the Secure SQL Server at this level and sends the request to the server. The response from the server is examined, and the completion status message is sent to P2. P4 then idles, awaiting another request from P2. The Level Upgrader provides assurance that the level at which it requests the Secure SQL Server to perform the insert/update is the level received from P2. P4 is therefore a trusted process. 3.2.5 GENERAL DISCUSSION In this section we provide a general discussion on the prototype implemented. Approximately 2500 lines of C code was implemented for the Update Processor. As mentioned earlier, the Update Processor has the ability to analyze a user's insert/update request, determine the security level of the data to be inserted/updated utilizing security constraints, and ensure that the data is inserted/updated at the determined level. The Update Processor can ensure that data is accurately labelled when a user enters data while logged in at the wrong level, when data is imported from systems of different modes of operation, such as a system high, or when the security level of data in the database is affected by data being entered into the database. As discussed previously, in addition to operating as a standalone tool, the Update Processor has been designed to operate with the Query processor Prototype. As such, some of the burden placed on the Query processor can be alleviated since the simple and content-based constraints can be addressed by the Update Processor. Operating inn an environment where users both query and update the database, however, allows for the occurrence of potential signaling channels. As an example, in some cases the user cannot retrieve the data he has entered. Since the security levels of the security constraints that determined the security level of the input is not at a level higher than the user level, i.e., the value of CONSTRAINT.c level for constraints used during update processing is the user level, we do not regard this as a signaling channel. The data in the CONSTRAINT table is labelled at system high to allow an SSO to maintain the table,* but the CONSTRAINT.c level value reflects the true level of the constraint. Therefore, if the constraint level, which is the value of CONSTRAINT.c level, is at or below the user level, we assume it is not the action of a high-level user or subject that is interfering with the result. SYBASE requires an SSO to be logged in at system high to have access to SSO functions. Another significant consideration with the Update Processor operating with the Query processor Prototype is the content of error messages. The content of some of the Secure SQL Server's error messages, coupled with the ability to query the database, may enable a user to infer something about the security level of his insert/update. As an example, if it is determined that an insert request should be processed at a higher level, and if a tuple with the same primary key already exists at the higher level, then a message that indicates that a duplicate key row already exists is sent by the Secure SQL Server to the Level Upgrader. If this message were routed to the User Interface Manager, the user could infer that the data he entered exists at a higher level. Furthermore, he could infer that the data exists at a higher level either because it was input by a user at a higher level or because a security constraint exists that determined the insert level to be so. Through experimenting with additional inserts, the user could determine the existence of this security constraint. Our solution is to have the Level Upgrader interpret this error message to be a request failed message. A request failed message is then sent to the Update Processor controller, who in turn sends it to the User Interface Manager that displays it to the user. The user, therefore, is only aware that the request failed. To further resolve this confusion for the user, we recommend that transactions of this type be audited and that the SSO be alerted to provide an explanation to the user if needed. Performance is an additional concern with the Update Processor. The response time of the Query processor may improve with the use of the Update Processor, but the response time for updates will be affected. This, however, is acceptable for an application whose percentage of retrievals exceeds that of updates. Additionally, should this functionality be incorporated into MLS DBMS, the effect on performance may not be significant since this functionality could exist as part of the DBMS kernel rather than as a user application as it currently exists. Regardless, we project that since the performance of updates, in general, is not quite as critical as the performance of retrievals, the benefits from implementing this security functionality should outweigh the projected minimal loss in performance. In general, the Update Processor provides functionality which is desirable in a multilevel operating environment. The nature of the tool allows for it to operate as a standalone tool or in conjunction with a Query processor. Additionally, this functionality could easily be adapted to operate with an existing MLD DBMS to enhance its security features. 3.3 TEST SCENARIOS This section illustrates the functionality of the Update Processor. Included in this section is a description of our test database and our test scenarios. With each test scenario is a statement of input, the significance of the test, and the results of the test. Each scenario uses our test database, the ships database, and each scenario is to be executed by a user at login security level 6. 3.3.1 TEST DATABASE Our test database is the ships database. The ships database and all the relations in this database have been defined at level 1. The test database will initially be empty and will not be reinitialized with each scenario so the reader can see the results of utilizing the Update Processor as each transaction completes, as this is how it would operationally be used. All of our example transactions are against the SHIPS and SHIPS CLASS relations which have been defined below. create table SHIPS (number varchar(10), name varchar(22), class varchar(22), date varchar(8), assignment varchar(10)) unique index: number create table SHIPS CLASS (classification varchar(50), length varchar(50), disp varchar(7), speed varchar(4), missile varchar(15), torpedo varchar(15), gun varchar(15)) unique index: classification As mentioned in section 3.3, each user database must contain a CONSTRAINTS table to store the simple and content-based security constraints used by the Update Processor. The following four constraints are active for these tests. 1. SHIPS.class="Ohio".fwdarw.Level (SHIPS)=10; 2. SHIPS.name="Florida".fwdarw.Level (SHIPS)=11; 3. SHIPS.name="Georgia".fwdarw.Level (SHIPS)=12; 4. .fwdarw.Level (SHIPS.sub.- CLASS)=8; 3.3.2 TEST SCENARIOS TEST SCENARIO I: insert SHIPS values ("SSBN 728", "Lafayette", "Lafayette", "Jun 83", "009") This scenario exemplifies an insert transaction that is not affected by the security constraints, since the value for SHIPS.class is not "ohio", and SHIPS.name is not "Florida" or "Georgia". The following response to the SQL select statement demonstrates the results of this transaction. 1>select sec.sub.- label, *from SHIPS 2>go
__________________________________________________________________________
sec.sub.-- label
number
name class
date
assignment
__________________________________________________________________________
0x060000000000000000000000
SSBN 28
Lafayette
Lafayette
Jun 83
009
__________________________________________________________________________
The results indicate that the tuple was not affected by the security constraints and was inserted at the user level which is level 6. TEST SCENARIO 2: Insert SHIPS values("SSBN 729", "Florida","Lafayette","Jun 83","09)) This scenario exemplifies an insert transaction that is affected by security constraint 2. The Update Processor actually retrieves the three security constraints associated with the SHIPS relation and examines them in descending order by constraint security level. As a result, security constraint 3 is examined, followed by security constraint 2. The following retrieval demonstrates the results of this transaction. 1>select sec.sub.- abel, *from SHIPS 2>go
__________________________________________________________________________
sec.sub.-- label
number
name class
date
assignment
__________________________________________________________________________
0x060000000000000000000000
SSBN 728
Lafayette
Lafayette
Jun 83
009
__________________________________________________________________________
This result does not indicate that the tuple was inserted. However, the Update Processor returned a successful response to the user. The user, therefore, will assume that either his tuple has since been deleted or that it was inserted at a level higher than his login security level. The following response, submitted by a user at login level 16, demonstrates the results of this transaction. 1>select sec.sub.- label, *from SHIPS 2>go
__________________________________________________________________________
sec.sub.-- label
number
name class
date
assignment
__________________________________________________________________________
0x060000000000000000000000
SSBN 728
Lafayette
Lafayette
Jun 83
009
0x0b0000000000000000000000
SSBN 729
Florida
Lafayette
Jun 83
009
__________________________________________________________________________
This response indicates that the tuple was inserted at level 11 since security constraint 2 was satisfied. TEST SCENARIO 3: Insert SHIPS values("SSBN 730","Georgia","Ohio","Feb 84","009") This scenario exemplifies an insert transaction that is affected by more than one security constraint. The Update Processor retrieves the three security constraints associated with the SHIPS relation in descending order by constraint security level. However, the condition from security constraint 3 is satisfied, so that the insert level is determined to be 12, ad the remaining constraints are not examined. The following response, submitted by a user at login level 16, demonstrates the results of this transaction. A user logged in at level 6 would retrieve only the tuple with number="SSBN 728". 1>select sec.sub.- label, *from SHIPS 2>go
__________________________________________________________________________
sec.sub.-- label
number
name class
date
assignment
__________________________________________________________________________
0x060000000000000000000000
SSBN 728
Lafayette
Lafayette
Jun 83
009
0x0b0000000000000000000000
SSBN 729
Florida
Lafayette
Jun 83
009
0x0c0000000000000000000000
SSBN 730
Georgia
Ohio Jun 85
006
__________________________________________________________________________
TEST SCENARIO 4: Update SHIPS set name="Florida" where name="Lafayette" This scenario exemplifies an update transaction that is affected by a security constraint. Without utilizing the Update Processor, this transaction would result in the modification to the name field in the tuple with number="SSBN 728". This tuple exists at level 6 which is the user's login security level. Utilizing the Update Processor, however, the name field will be modified as well as the classification level. Since the name is being set for "Florida", security constraint 2 will determine the update security level to be 11. The tuple will then be inserted at level 11, and the original tuple will be deleted, as we are running with the relaxation property on. The following response, submitted by a user at login level 16, demonstrates the results of this transaction. A user logged in at level 6 would not have access to the data currently in the SHIPS table. 1>select sec.sub.- label, *from SHIPS 2>go
__________________________________________________________________________
sec.sub.-- label
number
name class
date
assignment
__________________________________________________________________________
0x0b0000000000000000000000
SSBN 729
Florida
Lafayette
Jun 83
009
0x0c0000000000000000000000
SSBN 730
Georgia
Ohio Jun 85
006
0x0b0000000000000000000000
SSBN 728
Florida
Lafayette
Jun 83
009
__________________________________________________________________________
TEST SCENARIO 5: Insert SHIPS values("SSBN 729","Florida","Lafayette","June 83","09") This scenario exemplifies an insert transaction that will result in a duplicate key row. When a user logged in at level 6 queries the database, he will not retrieve the duplicate tuple at level 11. When this tuple is inserted, the Update Processor will determine that the insert level is level 11, will attempt to insert it at level 11, and will receive a message from the Secure SQL Server that a duplicate key row already exists. The Update Processor will then send a message to the user that the transaction failed. It would then be the responsibility of the SSO to resolve this situation with the user. TEST SCENARIO 6: Insert SHIPS values("SSBN 728","Lafayette","Lafayette","Jun 83","009") This scenario exemplifies an insert transaction that will result in a tuple being inserted at the user level, level 6, followed by an update operation that will be aborted, since it will result in a duplicate key row. The following tuples reside in the database after the above transaction is executed. The following response, submitted by a user at login level 16, demonstrates the results of this transaction. 1>select sec.sub.- label, *from SHIPS 2>go
__________________________________________________________________________
sec.sub.-- label
number
name class
date
assignment
__________________________________________________________________________
0x0b0000000000000000000000
SSBN 729
Florida
Lafayette
Jun 83
009
0x0c0000000000000000000000
SSBN 730
Georgia
Ohio Jun 85
006
0x0b0000000000000000000000
SSBN 728
Florida
Lafayette
Jun 83
009
0x060000000000000000000000
SSBN 728
Lafayette
Lafayette
Jun 83
009
__________________________________________________________________________
Following, the update transaction: Update SHIPS set name="Florida" where name="Lafayette" is executed. The Update Processor will determine the update level to be 11, since security constraint 2 is satisfied, and will attempt to execute this update at level 11. The server will abort this request and return a message indicating that a duplicate key row already exists. The Update Processor will then send a message to the user that the transaction failed. It would then be the responsibility of the SSO to resolve this situation with the user. TEST SCENARIO 7: Insert SHIPS.sub.- CLASS values("Ohio","Nuclear","17","187","20","tri I","Mk 68") This scenario exemplifies an insert transaction that is affected by security constraint 4. Security constraint 4 is a simple constraint that specifies that all data in the relation SHIPS.sub.- CLASS will be at level 8. Therefore, the Update Processor will determine the insert level to be level 8. The following response demonstrates the results of this transaction. 1>select sec.sub.- label, *from SHIPS 2>go
______________________________________
sec.sub.-- label name classification
length disp
______________________________________
0x0c0000000000000000000000
Ohio nuclear 17
______________________________________
(Attributes Continued)
speed missile torpedo gun
______________________________________
187 20 Tri I Mk68
______________________________________
4. HANDLING SECURITY CONSTRAINTS DURING DATABASE DESIGN 4.1 OVERVIEW The main focus of this section is a discussion on how association-based constraints (also called together or context-based constraints) could be handled during database design. We then briefly discuss how simple constraints as well as logical constraints could be handled. An association-based constraint classifies a collection of attributes taken together at a particular security level. What is interesting about the association-based constraint is that it can generate several relationships between the various attributes. For example, if there is a relation SHIPS whose attributes are S#, SNAME, and CAPTAIN, and if an association-based constraint classifies the SNAME and CAPTAIN taken together at the Secret level, then one of the pairs (S#, SNAME), (S#, CAPTAIN) should also be classified at the Secret level. Otherwise, an Unclassified user can obtain the (S#, SNAME0 and the $3, CAPTAIN) pairs and infer the Secret association (SNAME, CAPTAIN). There has been much discussion in the literature as to the appropriate place to handle these association-based constraints. Some argue that they should be handled during database design Lunt, T., May 1989, "Inference and Aggregation, Facts and Fallacies," Proceedings of the IEEE Symposium on Security and Privacy, Oakland, Calif. while others argue that they should be handled during query and update processing Stachour, P., and B. Thuraisingham, June 1990, "Design of LDV--a Multilevel Secure Relational Database Management System," IEE Transactions on Knowledge and Data Engineering, Volume 2, No. 2. However, none of the work reported so far studied the properties of these association-based constraints, nor has it provided any technique to generate the additional association-based constraints that can be deduced from an initial set of association-based constraints. We first describe an algorithm which processes a given set of association-based constraints and outputs the schema for the multilevel database. Given a set of association-based constraints and an initial schema, the algorithm will output clusters of attributes and the security level of each cluster. We then prove that the attributes within a cluster can be stored securely at the corresponding level. A tool based on this algorithm can help the systems security officer (SSO) design the multilevel database. The algorithm that we have designed does not necessarily have to be executed during database design only. It can also be executed during query processing. That is, the query processor can examine the attributes in the various clusters generated by the algorithm and then determine which information has to be released to the users. For example, if the algorithm places the attribute A1, A2 in cluster 1 at level L, and the attributes A3, A4 in cluster 2 at level L, then, after an attribute in cluster 1 has been released to a user at level L, none of the attributes in cluster 2 can be released to users at level L. Since simple constraints can be regarded as a special form of association-based constraints, where only one attribute is classified, we feel that such constraints could also be handled during database design. Another constraint that could be handled during database design is the logical constraint. For example, if attribute A implies an attribute B, and if attribute B is classified at the Secret level, then attribute A must be classified at least at the Secret level. It should be noted that if any of the constraints have conditions attached to them, then handling them during database design time would be difficult. For example, consider the following constraint: "Name and Destination taken together are Secret if destination is a Middle-east country". Such a constraint depends on data values. Therefore, they are best handled during either query and update processing. The organization of this paper is as follows. In section 6.2 we describe an algorithm which determines the security levels of the attributes given a set of association-based constraints. A tool could be developed based on this algorithm which the SSO could use to design the schema. In section 6.3 we describe how simple constraints could be handled during database design. Finally in section 6.4 we discuss how logical constraint may be processed. 4.2 HANDLING ASSOCIATION-BASED CONSTRAINTS In this section we describe an algorithm for handling association-based constraints. The input to this algorithm is a set of association-based constraints and a set of attributes. The output of this algorithm is a set of clusters for each security level. Each cluster for a security level L will have a collection of attributes that can be safely classified at the level L. That is, if A1, A2, and A4 are attributes in a cluster C at level Secret, then the attributes A1, A2, and A3 can be classified together safely at the security level Secret without violating security. The clusters are formed depending on the association-based constraints which are input to the program. Once the clusters are formed, then the database can be defined according to the functional and multivalued dependencies that are enforced. ALGORITHM HABC (Handling Association-Based Constraints) Begin Let C be the set of security constraints and W1, W2, . . . . . . Wm be the set of attributes which are input to the program. For each security level L, do the following: Begin Let C[L]be the largest subset of C and A={A1,A2, . . . An} be the largest subset of {W1, W2, . . . Wm}, such that the elements of subset of C and A are all visible at level L. Since n is the number of attributes which are visible at level L, clusters C1, C2, . . . Cn will be formed as follows: Set C1=C2=C3=. . . =Cn=Empty-set. For each i(1<i<n) do the following: Begin Find the first cluster Cj(1<j<n) such that Ai, together with any of the attributes already in Cj, is classified at a level dominated by L by the set of constraints C[L]. Place Ai in the cluster Cj. (Note that since we have defined n clusters, there will definitely be one such Cj.) End (for each i). Output all the non-empty clusters along with the security level L. End (for each security level L). End (HABL) Theorem 1: Algorithm HABL is Sound. Proof of Theorem 1: We need to show that for every security level L, the attributes in a cluster formed at L can safely be stored together in a file at level L. Let C be a cluster at level L, and let B1, B2, . . . . Br be the attributes in C. Note that before each Bi is placed, it will be first checked to determine whether or not there is an association-based constraint which classifies Bi together with any subset of the attributes B1, B2, . . . Bi-1 already in C at a level not dominated by L. If so, Bi would not have been placed in the cluster C. Since this is true for each Bi (1<i<r), there is no association-based constraint which classifies any subset of B1, B2, . . . Br taken together at a level not dominated by L. Therefore, B1, B2, . . . Br can be safely stored in a file at level L. Theorem 2: Algorithm HABL is Complete. Proof of Theorem 2: We need to show that, if Ci and Cj are two clusters at a level L, there are subsets A and B, respectively, of Ci and Cj, such that A and B cannot be stored together in a file at level L. Let i<j. Then the cluster Ci appears before Cj, in the enumeration of the clusters formed at level L. Suppose, on the contrary, that A and B do not exist. Consider an element X of cluster Cj. Since Ci is before Cj in the enumeration, before placing X in Cj, it would have been first checked to determine whether or not X can be placed in Ci. It would have been found that there was an association-based constraint which classifies X together with the attributes already in subset P of Ci at a level not dominated by L. That is, the subset P and {X} of Ci and Cj respectively cannot be stored in a file at level L. That is, we have found two sets A and B, which are subsets of Ci and Cj, respectively, which cannot be stored in a file at level L. This is a contradiction to our assumption. We now trace the algorithm with a simple example. Let the attributes be A1, A2, A3, A4, A5. Let the constraints be the following: CON1:A1.multidot.A2=Secret* By "A1.multidot.A2=Secret" is meant: A1 and A2 taken together are classified at the Secret level CON2:A1.multidot.A5=Secret CON3:A1.multidot.A4.multidot.A5=Secret CON4:A2.multidot.A4=Secret CON5:A3.multidot.A4=Secret Note that some of the constraints are redundant. For example, CON2 implies CON3. In this paper we are not concerned with the redundancy of the constraints. Since the maximum classification level assigned is Secret, aH the attributes can be stored in a file at the level Secret or Higher. At the Unclassified level, the following clusters are created: C1={A1, A3} C2={A2, A5} C3={A4} It should be noted that, although the algorithm guarantees that the constraints are processed securely, it does not provide any guarantee that the attributes are not overclassified. More research needs to be done in order to develop an algorithm which does not overclassify an attribute more than is necessary. 4.3 A NOTE ON SIMPLE CONSTRAINTS Since simple constraints classify individual attributes at a certain security level, they could also be handled during database design. Note that when an attribute A in relation R is classified at level L, then all elements which belong to A is also classified at level L. Therefore, we can store A itself at level L. The algorithm which handles simple constraint is straightforward. Each attribute that is | ||||||
