Based on notes by Fei Li and Hong Li

Slides:



Advertisements
Similar presentations
Message Passing Vs Distributed Objects
Advertisements

What is RMI? Remote Method Invocation –A true distributed computing application interface for Java, written to provide easy access to objects existing.
Module 5: Configuring Access for Remote Clients and Networks.
Company LOGO Remote Method Invocation Georgi Cholakov, Emil Doychev, University of Plovdiv “Paisii.
FONG CHAN SING (143334) WONG YEW JOON (143388). JAVA RMI is a distributive system programming interface introduced in JDK 1.1. A library that allows an.
LAB#2 JAVA SECURITY OVERVIEW Prepared by: I.Raniah Alghamdi.
Distributed Application Development B. Ramamurthy.
Component-Based Software Engineering Introducing the Bank Example Paul Krause.
Java Server Programming Jeff Schmitt Towson University October 15, 1998.
Web Proxy Server. Proxy Server Introduction Returns status and error messages. Handles http CGI requests. –For more information about CGI please refer.
8/19/20151 Securing a Database Based on notes by Fei Li and Hong Li.
Advance Computer Programming Java Database Connectivity (JDBC) – In order to connect a Java application to a database, you need to use a JDBC driver. –
Getting connected.  Java application calls the JDBC library.  JDBC loads a driver which talks to the database.  We can change database engines without.
1 CSC 440 Database Management Systems JDBC This presentation uses slides and lecture notes available from
Securing Large Applications CSCI 5931 Web Security Rungang Mo, Yingying Sun.
Hands-On Microsoft Windows Server Security Enhancements in Windows Server 2008 Windows Server 2008 was created to emphasize security –Reduced attack.
Objectives Configure routing in Windows Server 2008 Configure Routing and Remote Access Services in Windows Server 2008 Network Address Translation 1.
Protecting Internet Communications: Encryption  Encryption: Process of transforming plain text or data into cipher text that cannot be read by anyone.
Connecting to Oracle using Java November 4, 2009 David Goldschmidt, Ph.D. David Goldschmidt, Ph.D.
Spring/2002 Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads 1 RMI.
Database Architectures Database System Architectures Considerations – Data storage: Where do the data and DBMS reside? – Processing: Where.
UNIT III - JDBC JDBC Overview – JDBC implementation – Connection class – Statements - Catching Database Results, handling database Queries. Networking–
Database Security Cmpe 226 Fall 2015 By Akanksha Jain Jerry Mengyuan Zheng.
JSP Server Integrated with Oracle8i Project2, CMSC691X Summer02 Ching-li Peng Ying Zhang.
WEB SERVER SOFTWARE FEATURE SETS
Basics of JDBC Session 14.
Ch. NoNameMarks 01AWT24 02Networking18 03JDBC20 04Swing18 05Servlet20 Advance Java Programming.
Introduction to JDBC Instructor: Mohamed Eltabakh 1.
UMBC Distributed Computing with Objects RMI/Corba CMSC 432 Shon Vick.
JDBC Java and Databases. SWC – JDBC JDBC – Java DataBase Connectivity An API (i.e. a set of classes and methods), for working with databases in.
Intro to JDBC Joseph Sant Applied Computing and Engineering Sciences Sheridan ITAL.
1 Example security systems n Kerberos n Secure shell.
DEPTT. OF COMP. SC & APPLICATIONS
Interacting with Database
Data Virtualization Tutorial… SSL with CIS Web Data Sources
ODBC, OCCI and JDBC overview
JDBC Database Management Database connectivity
Distributed Computing
Module Overview Installing and Configuring a Network Policy Server
The Client/Server Database Environment
Chapter 5 : Designing Windows Server-Level Security Processes
Servlet Fudamentals.
Configuring and Troubleshooting Routing and Remote Access
Chapter 8 Building the Transaction Database
Radius, LDAP, Radius used in Authenticating Users
Advanced Web Automation Using Selenium
What is RMI? Remote Method Invocation
Deploying and Configuring SSIS Packages
NETWORK PROGRAMMING CNET 441
Chapter 3: Windows7 Part 4.
Knowledge Byte In this section, you will learn about:
MIDP Application Security
Mr. Harish Sharma Asst. Professor Dept. of CA & IT SGRRITS Dehradun
Oracle Architecture Overview
Interacting with Database
Lecture Set 14 B new Introduction to Databases - Database Processing: The Connected Model (Using DataReaders)
The Secure Sockets Layer (SSL) Protocol
Java Database Connectivity
Using a Database with JDBC
JAVA DATABaSE CONNECTIVITY
ODBC and JDBC.
SSL certificates TIBCO BusinessWorks.
Java Remote Method Invocation
Designing IIS Security (IIS – Internet Information Service)
Electronic Payment Security Technologies
Software Design Lecture : 38.
Message Passing Systems Version 2
Introduction of Week 5 Assignment Discussion
Plug-In Architecture Pattern
Message Passing Systems
Presentation transcript:

Based on notes by Fei Li and Hong Li Securing a Database Based on notes by Fei Li and Hong Li 11/14/2018

Topics Securing the connections to the database: SSL-tunneling between client machine and database machine A secure JDBC driver Securing the data within a database Secure Thin JDBC Connection Sample 11/14/2018

JDBC Basics JDBC is a Java API for executing SQL statements JDBC makes it possible to do three things: establish a connection with a database send SQL statements process the results. 11/14/2018

Securing a database Two points of attack against a database The connection between clients and database The data in the database 11/14/2018

Securing the JDBC driver transmission Approach 1: SSL-tunneling Running a daemon on the client machine Advantage: simplicity and performance Disadvantage: not enough of authentication, esp. if the client machine is a shared or multi-user environment. Approach 2: Proxy to JDBC drivers developing a JDBC driver proxy Advantage: provide more security Disadvantage: much more complex 11/14/2018

SSL-Tunneling Database Machine Client Machine TunnelServer SSL Socket Database Machine Client Machine TunnelServer TunnelServer SQL request SQL response SQL request SQL response Client Application Database instance 11/14/2018

The SSL-Tunneling Approach Two instances of the tunnel server, one on the client machine and the other on the database server machine Each instance serves as a proxy. Simplicity of encrypting the database connection by SSL-tunneling between the client application and the DBMS 11/14/2018

Query processing Client Machine Client application The JDBC client Client-side tunnel server Reads unencrypted data from the JDBC client; Write it to the database machine over SSL Database Machine Server-side tunnel server Reads the encrypted data from the client-side tunnel server; Sends it unencrypted to the DBMS over localhost Database server 11/14/2018

Response processing Database Machine Database server Sends query result to the tunnel server Server-side tunnel server Reads the query result from the DBMS over localhost; Sends it encrypted to the client-side tunnel server; Client Machine Client-side tunnel server Reads encrypted data from the server-side tunnel server; Write it to the JDBC client; Client application 11/14/2018

The SSL-Tunneling Approach 2. Encrypted SQL request Database Machine Client Machine TunnelServer TunnelServer 1. SQL request 4. SQL response 5. Encrypted SQL response 3. SQL request 6. SQL response Client Application Database instance Assumption: Connections to localhost cannot be snooped. True or false? 11/14/2018

Example 1: The Tunnel Server Two classes TunnelServer TunnelThread TunnelServer class (p. 310) Correction: client (mRemote == false) or the server (mRemote == true) public TunnelServer (String server, int appPort, int tunnelPort, boolean remote) { super(); mDestServer = server; mAppPort = appPort; mTunnelPort = tunnelPort; mRemote = remote; waitForConnections(); } 11/14/2018

Example1: The Tunnel Server Get server socket, waiting for connections, and create two instances of TunnelThread. private void waitForConnections() { …… serverSocket = getServerSocket(); while (mListening) { try { logMessage("Waiting for connections."); srcSocket = serverSocket.accept(); destSocket = connect(); logMessage("Connected to remote server at " + destSocket .getInetAddress() + "."); fromClient = getTunnelThread("fromClient"); toClient = getTunnelThread("toClient"); 11/14/2018

Example1: The Tunnel Server The TunnelThread class (p. 315-316) Forwarding requests and responds /** Creates new TunnelThread * @param name a name for this thread*/ public TunnelThread(String name) { super(name); setDaemon(true); } /**Default constructor -- create a tunnel thread with a default name*/ public TunnelThread( ) { super( ); public void run ( ) { 11/14/2018

Example1: The Tunnel Server Run the Tunnel Server with JDBC Generate keystore/certificates for client and server  serverKeyStore, clientKeyStore (p.317) Copy serverKeyStore to the database server; Start the tunnel server on the server side (database machine) Copy clientKeyStore to the client machine; Start the tunnel server on the client side (client machine) (p.318) Run a test application on the client machine 11/14/2018

Example1: The Tunnel Server Create Keystore >keytool -genkey -keyalg RSA -keystore serverKeyStore >keytool -genkey -keyalg RSA -keystore clientKeyStore 11/14/2018

Example1: The Tunnel Server Create Keystore Export the certificates >keytool -export -keystore serverKeyStore -file server.cer >keytool -export -keystore clientKeyStore -file client.cer 11/14/2018

Example1: The Tunnel Server Create Keystore Import the certificates >keytool -import -file client.cer -alias client -keystore serverKeyStore >keytool -import -file server.cer -alias server -keystore clientKeyStore 11/14/2018

Example1: The Tunnel Server Start the tunnel server on the server Copy serverKeyStore TunnelServer.class, and TunnelThread.class to the database machine >java -Djavax.net.ssl.keyStore=serverKeyStore -Djavax.net.ssl.keyStorePassword=sps2020 -Djavax.net.ssl.trustStore=serverKeyStore com.isnetworks.crypto.net.TunnelServer localhost 1521 6543 remote Exercise: Use the TunnelServer.java source code to trace the execution of the server-side TunnelServer and show its screen output. 11/14/2018

Example1: The Tunnel Server Start the tunnel server on the client Copy clientKeyStore TunnelServer.class, and TunnelThread.class to the clinet machine >java -Djavax.net.ssl.keyStore=clientKeyStore -Djavax.net.ssl.keyStorePassword=cps2020 -Djavax.net.ssl.trustStore=clientKeyStore com.isnetworks.crypto.net.TunnelServer diamond.rocks.cl.uh.edu 1521 6543 local 11/14/2018

Example1: The Tunnel Server Run a test application on the client machine Use JDBCTest.java Set the JDBC driver (classes.zip) in the classpath DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection ( "jdbc:oracle:thin:@localhost:1521:nas", “username", “password"); 11/14/2018

Example1: The Tunnel Server Sample programs for running Tunnel Server on dcm.cl.uh.edu (the client application) and diamond.rocks.cl.uh.edu (the DBMS server): TunnelServer.java TunnelThread.java JDBCTest.java Detailed instructions: instructions.doc 11/14/2018

Securing the JDBC Driver Transmission Approach 2: Proxy to JDBC drivers developing a JDBC driver proxy Advantage: provide more security Disadvantage: much more complex 11/14/2018

The JDBC Driver Proxy Provide the encryption and authentication for many applications Delegate all the calls to dynamically bound driver Provide proxies to JDBC driver classes Proxy design pattern in distributed computing Use SSL for the connection Encryption Authentication later on 11/14/2018

The JDBC Driver Database Machine Proxy Secure JDBC Driver Database client (application server) DB 11/14/2018

The JDBC Driver Client-Server communication Server handles configuration, connections to the DB, and delegation of the JDBC calls Client delegates all the connections to the server Choose RMI as a network transport for communication Have to add one more layer to the remote call The diagram on p.321. 11/14/2018

The JDBC Driver Implementation Delegate the common operations to an abstract super class. Use a single remote class to pass any method call instead of creating an RMI proxy for each JDBC interface Is a complex solution to a simple problem Proxy pattern enables developer to add service 11/14/2018

The JDBC Driver Using the secure JDBC driver Detailed instructions for running the sample application: SecureDriver.rtf Steps of Configuring the driver: Generate the keys and certificates Edit the SecureDriver_config.xml file Create policy files for the server and client 11/14/2018

The JDBC Driver Edit the SecureDriver_config.xml file Defines JDBC connection directly to the database from the secure driver Create policy files RMI requires that code run with a security manager Add some special permissions to policy files Server policy file The ability to connect to the database The ability to talk to the RMI registry The ability to receive a connection from a remote client 11/14/2018

The JDBC Driver Connecting to the RMI server process: The connect( ) method is called by DriverManager and connects to the RMI server process, which is where the actual JDBC connections reside. 11/14/2018

The JDBC Driver Discussion: Can the application be modified to run without RMI? How? 11/14/2018

Securing Data in the Database Protect the data in database Database permission Should be set properly by the administrator Read- or write-only database If it is well protected, highly controlled, and not often accessed Large online retailers use write-only database 11/14/2018

Securing data in the database Protect the data in databases Symmetric encryption Applications storing a secret key need to be completely safe Asymmetric encryption Public key is used for encrypting the data in the DB Private key must be stored somewhere safe. Disadvantage of encrypting data Expensive Remove some of the value of using a database 11/14/2018

Example3: Encrypting credit cards 3Xizmj2 Cg31C1l … One-way encrypt Database (Stores encrypted credit card data) Server Decrypt Finance client 11/14/2018

Encrypting credit cards CreditCardFactory -mAccountID -mCreditCardNumber -mPublicKey +createCreditCard() +findAllCreditCards() +findCreditCard() +CreditCard() +getAccountID() +getCreditCardNumber() CrditCardDBO DatabaseOperations -mAccountID -mEncryptedCCNumber -mEncryptedSessionKey +getAllCreditCardAccountIDs() +loadCreditCardDBO() +store(creditCardDBO:CreditCardDBO) +CreditCardDBO() +getAccountID() +getEncryptedCCNumber() +getEncryptedSessionKey() 11/14/2018

Encrypting credit cards Testing the application – CreateTest.java Create a credit card based on user-specified account ID and credit card number Create a Properties object from the file system Properties properties = new Properties(); FileInputStream fis = new FileInputStream(PROPERTIES_FILE); properties.load(fis); fis.close(); // Create the credit card CreditCardFactory factory = new CreditCardFactory(properties); CreditCard creditCard = factory.createCreditCard(id,ccNumber); 11/14/2018

Encrypting credit cards Testing the application – ViewTest Define the location of the keystore Load the keystore to retrieve the private key private static final String KEYSTORE = "creditcardExample.ks"; …… // Load the keystore to retrieve the private key. String ksType = KeyStore.getDefaultType(); KeyStore ks = KeyStore.getInstance(ksType); FileInputStream fis = new FileInputStream(KEYSTORE); ks.load(fis,PASSWORD); fis.close(); PrivateKey privateKey = (PrivateKey)ks.getKey("mykey",PASSWORD); 11/14/2018

Secure Thin JDBC Connection Oracle JDBC Thin Driver The Oracle JDBC Thin driver is a 'Type IV' (native protocol, 100% Pure Java) implementation that complies with the JDBC 1.22 standard. The JDBC Thin driver uses Java Sockets to connect directly to the Oracle Server The JDBC Thin driver does not require Oracle software on the client side 11/14/2018

Secure Thin JDBC Connection Encryption and integrity support use Oracle Advanced Security data encryption and integrity features in your Java database applications When using the Thin driver, the parameters are set through a Java properties file Encryption is enabled or disabled based on a combination of the client-side encryption-level setting and the server-side encryption-level setting 11/14/2018

Secure Thin JDBC Connection Get SecureThinDriver.jar to run the sample Configuring Encryption Parameter Using Oracle Net Manager Run the Application using JDeveloper Environment Run the Application from JDK Environment  11/14/2018

Reference [1] JDBC Introduction http://java.sun.com/docs/books/jdbc/intro.html [2] J. Garms and D. Somerfield. Professional Java Security [3] Secure Thin JDBC Connection http://otn.oracle.com/sample_code/deploy/security/files/secure_thin_driver/Readme.html [4] The status of HIPNS http://nfdfn.jinr.ru/~litvin/nobugs2000/nobugs2000_litvin_hipns_proceeding.htm [5] Improving Database Performance with Oracle8‚ http://otn.oracle.com/products/oracle8/htdocs/xo8p3twp.htm 11/14/2018