Auditing an Oracle database for security issues is very important. PeteFinnigan.com provides all of the information and tools that you will need Click here for details of PeteFinnigan.com Limited's detailed Oracle database security audit service Click here for details of PeteFinnigan.com Limited's Oracle Security Training Courses
There are 66 visitors online    
Cookie Policy:We only use essential cookies on small sections of this website. For details see here.

Pete Finnigan's Oracle security weblog


Automatically Add License Protection and Obfuscation to PL/SQL

April 17th, 2014 by Pete

Yesterday we released the new version 2.0 of our product PFCLObfuscate. This is a tool that allows you to automatically protect the intellectual property in your PL/SQL code (your design secrets) using obfuscation and now in version 2.0 we have added "dynamic obfuscation". This is a new engine added to our parser that allows dynamic obfuscation to be run at various "hook" points in your PL/SQL source code files. These hooks are reached at the start of a declaration block, end of a declaration block, start of a PL/SQL block or end of a PL/SQL block. Also hooks occur when a defined PL/SQL package or procedure is located. The dynamic obfuscation is completely configurable by the customer and adds very powerful features to PFCLObfuscate.

Dynamic obfuscation allows us to add deeper obfuscations and also to automatically add license protections to your PL/SQL code or even tamperproof protections. This means that you can deploy your PL/SQL code with license type features controlling how and when your customers can use your code.

Please contact me for more details if you are interested in this new version of our product. We have kept the license fees at version 1.0 levels for the initial release. I have just written a detailed blog post on our product website and included an example of automatically adding license features to a set of PL/SQL code. The blog is PFCLObfuscate - Protect your PL/SQL

[No Comments]


Twitter Oracle Security Open Chat Thursday 6th March

March 5th, 2014 by Pete

I will be co-chairing/hosting a twitter chat on Thursday 6th March at 7pm UK time with Confio. The details are here. The chat is done over twitter so it is a little like the Oracle security round table sessions I do at the UKOUG Oracle conference here in the UK live each year. This chat is done via twitter and sounds like fun. You can ask questions or join in the chat. Simply use the tag #DataChat in your responses or posts from 7pm (UK time) on Thursday. You can also use a tool like tweetdeck and set up a new column for the tag #DataChat and you can see all of the threads.

If you fancy joining in, please do so. If you have a subject or question to raise before hand then please email me (pete at petefinnigan dot com) or send me a tweet to @petefinnigan

[No Comments]


PFCLScan Reseller Program

October 29th, 2013 by Pete

We are going to start a reseller program for PFCLScan and we have started the plannng and recruitment process for this program. I have just posted a short blog on the PFCLScan website titled "PFCLScan Reseller Program". If you are running a consultancy specialising in Oracle or security and you feel you would like to be involved in reselling PFCLScan then please speak to us.

[No Comments]


PFCLScan Version 1.3 Released

October 18th, 2013 by Pete

We released version 1.3 of PFCLScan our enterprise database security scanner for Oracle a week ago. I have just posted a blog entry on the PFCLScan product site blog that describes some of the highlights of the over 220 new changes/features/fixes/content added in 1.3. Please have a look and if you would like any details please contact me.

[No Comments]


PFCLScan Updated and Powerful features

September 4th, 2013 by Pete

We have just updated PFCLScan our companies database security scanner for Oracle databases to version 1.2 and added some new features and some new contents and more. We are working to release another service update also in the next couple of weeks that will add some updates to the reporting tool and language and also a new feature to allow the customer through point and click and change data values that are not known until they come to use them BUT we have already tests and checks in our standard audit policies that use these values. This will allow customers to enable additonal checks based on their own values and data. An example is that a customer may have a custom DBA role that they have designed for their own use. We don't know what that is in advance so cannot add a check to test its exists and is used only by the DBA team. The new PFCL.config screens and functionallity allows a user to add the values in a configuration screen and have custom checks work for them and so allows us to answer questions that we could not answer before.

I have also just written a blog post titled "Powerful features of PFCLScan" and published it on our PFCLScan product website. Please have a look.

[No Comments]


Oracle Security Training, 12c, PFCLScan, Magazines, UKOUG, Oracle Security Books and Much More

August 28th, 2013 by Pete

It has been a few weeks since my last blog post but don't worry I am still interested to blog about Oracle 12c database security and indeed have nearly 700 pages of notes in MS Word related to 12c security research I have gathered already.

I have not blogged because I have been very busy and also been on vacation for two weeks in Calabria Italy which was very nice and hot and relaxing on the beach. I have quite a lot of news items to cover here, some have been mentioned on Twitter previously but its worth re-iterating them here:

1) I am teaching my class "How to perform a security audit of an Oracle database" in Rome, Italy with Oracle University on November 19th and 20th. If you would like to attend a public class in Rome then please have a look at Oracles registration http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=609&p_org_id=32&lang=I&get_params=dc:D80323_1025738,p_preview:N - Sorry its not a live link, there is something about Oracles links that make them break IE so please cut and paste it into your browser.

2) I am teaching my class "How to perform a security audit of an Oracle database" in Kiev, Ukraine wth ISSA on October the 16th and 17th with ISSP, based in Kiev. If you would like to attend this class then please vist their registration link.

3) I am teaching my class "How to perform a security audit of an Oracle database" online on October the 7th to 10th inclusive. The class is two days normally but for on-line we are going to do it over 4 days. The timing each day will be 2pm to 6pm UK time to allow students to join from the USA and also CET. We advertised this class a few weeks ago once on Twitter and had a lot of interest and a few registrations but there are still places available. The class costs £750 + VAT (if applicable) per student and if you book and pay for more than one place we will give you a discount on all places you book. Each student gets a free download of pdfs from the course (approx 570 pages) and also over 70 free tools/scripts.

If you are interested and want to book a place then please email me at pete at petefinnigan dot com

4) We have just updated our Oracle database security scanner PFCLScan to version 1.2 and released to clients. This is a reasonable size update with Oracle security specific changes and additions and also some core product changes to make it better for customers to customise and automate. We have made changes to add the first tranche of changes to support Oracle 12c and we have updated the password cracker to make its logic faster, we have re-implemented the encryption used to protect credentials and we have added the ability to create "plug-ins" for PFCLScan using PFCLScan projects and policies themselves. There are around 40 individual changes, new features, bug fixes and changes and additions to the standard policies. Please talk to us if you are interested in licensing PFCLScan

5) The other major change we have made with PFCLScan is to introduce a new license. We have a great license model for PFCLScan where the license is an annual model and based on the number of installations of the software and not the number of databases or targets that you scan. We believe that this is a fairer model and our customers seem happy with this. We had two PFCLScan licenses "Pro" and "Enterprise" that allows a single installation or as many installations as you wish on your site for the "Enterprise" license. We also offer great renewal deals, if you renew your license after one year then the renewal is 54% of the original fee.

We have a very simple license model but we have had a number of discussions with people who say there is a licence missing or a gap in our model. We have decided to rectify this. We have specifically added an engagement license so that customer can licesen PFCLScan for a 30 day period to enable a single audit engagement either internally or for a consultants customers to take place. This is again competitively priced at £85 + VAT for a single installation with a renewal for 30 more days at £70 + VAT is renewed concurrently.

6) Our second product PFCLObfuscate is also selling licenses well and is aimed at protecting Intellectual Property in PL/SQL or SQL. We have been promising to release version 2.0 for some time now. We created an alpha test version earlier this year and have tested and experimented with this. Finally we have started work to implement the production version of version 2.0. Version 2.0 is a major release and will add some great new functionallity. The core of the product is a built ibn scripting language and "hook" points that allows each piece of PL/SQL code that is parsed to be interpreted at various points (Start, Begin, End and also when any defined package call is found or when a string is found). PFCLObfuscate still obfuscates code but when a hook point is found it can decleratively execute a script to generate PL/SQL code to insert which is added and recursively obfuscated. What does all this mean?

Well it means that you can obfuscate standard package calls within your PL/SQL where you add dynamically covering APIs and also obfuscate them without adding external procedures to do this; it means that you can use any dynamic method to obfuscate strings; it means that you can insert code to execute when a string is found or a package found or when a block starts or ends. This all allows us to much more strongly protect and add license type features to PL/SQL. When combined with Wrap and WrapProtect it means that your PL/SQL code is much safer.

If anyone wants more details or would like to purchase a license then please email me.

7) I have also had two slots accepted for the UKOUG conference coming up at the start of December and this year for the first time held in Manchester. I will be chairing an open session on the 3rd of December about Oracle security so please come along and join in. My second session also on the 3rd December is going to be an hour long demo session with no slides!!, that should be really fun and exciting (spelt terror!). This talk is going to revolve around Oracle database audit trails and protections. I am going to focus on the core database and not the new 12c Unified audit and look at what works and what doesn't in terms of designing simple audit trails that are practical and can be taken away and used in your own databases. This means I am not going to focus on data auditing but on privilege audit and escalation of privilege. I am going to discuss adaptive controls, breakgalss and the aftermath of issuing a privileged password, I am going to also talk about allowing third parties into your database and capturing what they do whilst in there, I will talk about security of audit, audit of security and audit of audit. I am also going to demonstrate some simple packages that you can deploy to detect issues in the database.

I aim to cover quite a bit of ground but the goal is really to show how you can create a comprehensive audit of privilege, security and audit and cover breakglass and adaptive controls, IDS and IPS but show how its all acheivable as a good start point in your own database. Clearly there are two issues with audit, performance and storage of audit data so again I am focusing on privilege as that should not cause performance as anyone abusing privilege should not be using privilege hence if there is a performance issue the action should be stopped not the performance sorted to allow the abuse to continue. The second issue is around storage of audit trails; my solution (which can be combined with stored audit) is to act upon the trail and report on summaries and issues rather than store enourmous amounts of data.

The demo is made up of a package in PL/SQL I am calling PFCLFirewall that will implement the audit and the protections and also reports and dashboard. This is at a simple level to start with. I am going to walk through the code and explain it and then install it and abuse my database and demonstrate what it all does and how the whole thing sits together. If you come to the talk I will let you have a copy of the PL/SQL PFCLFirewall or if you ask me for it i will give it to you but after the talk of course in December. The PL/SQL package PFCLFirewall was started and the core written around a year ago but its been worked on again in between times.

8) I have also been asked to speak about Oracle security and PFCLObfuscate on Paul Dot Com on September 13th this year, so if you are interested to see this then please head over to their site and watch and listen to me speak.

9) I have also just written a new 1500 word article on Oracle 12 New Security features for the Oracle Scene magazine which will be published in time for the UKOUG conference in December in Manchester. So watch out for that.

10) I have just agreed to write some reviews of some Oracle Security products for some famous companies and I will write a nice review based on flow and practical use of a product. There will be a paper and a webcast for that later in the year. As I get more details I will let you know, so watch out for that to get a free paper and also hear me speak on a webcast.

11) Finally.... as I have now quite a lot of research on Oracle Security around Audit trails, database IDS (built in PL/SQL) discussed above, identity in the database, adaptive controls, protection of audit, security of security, breakglass and of course on 12c security i have been thinking to write to all into a nice e-book and publish on Kindle. This would be a nice book, around 150 - 190 pages and not expensive so that people can afford to buy it. It is an idea now but if i get some encouragement I will write it and publish it. A book like this may also be a good basis for a single day training class. Lets see.

OK, thats some news on Oracle security, more on 12c security next time.

[No Comments]


Oracle 12c Security - SQL Translation and Last Logins

July 31st, 2013 by Pete

There has been some big new security items added to 12cR1 such as SHA2 in DBMS_CRYPTO, code based security in PL/SQL, Data Redaction, unified audit or even privilege analysis but also as I hinted in some previous blogs there are lots of little things that have changed related to security or big things that have changed that affect security such as the multitenant architecture.

I am going to discuss a couple here this time in this short post. The first came from a post on Kerry Osborne's blog that I found via the oaktable list, titled "SQL Translation Framework" that discusses that the SQL translation framework from SQl Developer is now in the database as a feature. This was intended to translate non Oracle SQL to Oracle SQL but the key thing is that it can translate Oracle SQL to Oracle SQL. The first comment in Kerry's blog by Stew Ashton summed it up: " Wow, generalised bottom-up SQL injection!". It is not really SQL injection but SQL replacement but the concerns and the sentiment are justified.

The feature is great for resolving application issues with bad code for performance or workability issues but quite obviously it could be abused for attacking the database as well. It could also be use for security "good" as well as security "bad". It could be used for instance to aid an application to use a shared "view/logon" account instead of having users use the schema to connect to, it could be used to enable security within an existing application, it could maybe be used to enable encryption BUT the bigger issue is to make sure it is not used to bypass security. Imagine an application that logs in and then says "select role from app_roles where username=lowest of the low" it could be changed to say "select role from app_roles where username=god" . To enable the translation the package DBMS_SQL_TRANSLATOR must be available:





who_can_access: Release 1.0.3.0.0 - Production on Wed Jul 31 09:59:46 2013
Copyright (c) 2004 PeteFinnigan.com Limited. All rights reserved.

NAME OF OBJECT TO CHECK [USER_OBJECTS]: DBMS_SQL_TRANSLATOR
OWNER OF THE OBJECT TO CHECK [USER]: SYS
OUTPUT METHOD Screen/File [S]:
FILE NAME FOR OUTPUT [priv.lst]:
OUTPUT DIRECTORY [DIRECTORY or file (/tmp)]:
EXCLUDE CERTAIN USERS [N]:
USER TO SKIP [TEST%]:

Checking object => SYS.DBMS_SQL_TRANSLATOR
====================================================================


Object type is => PACKAGE (TAB)
Privilege => EXECUTE is granted to =>
Role => PUBLIC (ADM = NO)

PL/SQL procedure successfully completed.


For updates please visit http://www.petefinnigan.com/tools.htm

SQL>






And the user must be able to do:





SQL> alter session set sql_translation_profile='blah';
SQL> alter session set events = '10601 trace name context forever, level 32';






So this needs access to ALTER SESSION to enable the event:





SQL> alter session set events='10601 trace name context forever, level 32';
ERROR:
ORA-01031: insufficient privileges


SQL>






So we can test who has this:





who_has_priv: Release 1.0.3.0.0 - Production on Wed Jul 31 10:10:21 2013
Copyright (c) 2004 PeteFinnigan.com Limited. All rights reserved.

PRIVILEGE TO CHECK [SELECT ANY TABLE]: ALTER SESSION
OUTPUT METHOD Screen/File [S]:
FILE NAME FOR OUTPUT [priv.lst]:
OUTPUT DIRECTORY [DIRECTORY or file (/tmp)]:
EXCLUDE CERTAIN USERS [N]:
USER TO SKIP [TEST%]:

Privilege => ALTER SESSION has been granted to =>
====================================================================
Role => DBA (ADM = YES) which is granted to =>
User => SYS (ADM = YES)
User => SYSTEM (ADM = YES)
User => SYS (ADM = NO)
Role => RECOVERY_CATALOG_OWNER (ADM = NO) which is granted to =>
User => SYS (ADM = YES)
User => CTXSYS (ADM = NO)
User => APEX_040200 (ADM = NO)
User => SYSBACKUP (ADM = NO)
User => APPQOSSYS (ADM = NO)
User => GSMADMIN_INTERNAL (ADM = NO)
User => XDB (ADM = NO)
User => SYSDG (ADM = NO)
User => WMSYS (ADM = NO)

PL/SQL procedure successfully completed.

For updates please visit http://www.petefinnigan.com/tools.htm

SQL>






By default ALTER SESSION is only granted to some default accounts, my 12cR1 system shows this:





who_has_priv: Release 1.0.3.0.0 - Production on Wed Jul 31 10:10:21 2013
Copyright (c) 2004 PeteFinnigan.com Limited. All rights reserved.

PRIVILEGE TO CHECK [SELECT ANY TABLE]: ALTER SESSION
OUTPUT METHOD Screen/File [S]:
FILE NAME FOR OUTPUT [priv.lst]:
OUTPUT DIRECTORY [DIRECTORY or file (/tmp)]:
EXCLUDE CERTAIN USERS [N]:
USER TO SKIP [TEST%]:

Privilege => ALTER SESSION has been granted to =>
====================================================================
Role => DBA (ADM = YES) which is granted to =>
User => SYS (ADM = YES)
User => SYSTEM (ADM = YES)
User => SYS (ADM = NO)
Role => RECOVERY_CATALOG_OWNER (ADM = NO) which is granted to =>
User => SYS (ADM = YES)
User => CTXSYS (ADM = NO)
User => APEX_040200 (ADM = NO)
User => SYSBACKUP (ADM = NO)
User => APPQOSSYS (ADM = NO)
User => GSMADMIN_INTERNAL (ADM = NO)
User => XDB (ADM = NO)
User => SYSDG (ADM = NO)
User => WMSYS (ADM = NO)

PL/SQL procedure successfully completed.

For updates please visit http://www.petefinnigan.com/tools.htm

SQL>






So; if you are worried that the SQL Translator can be used for bad then block access to the API DBMS_SQL_TRANSLATOR package and also make sure no one has ALTER SESSION. Also ensure that you review whats set up already.

Finally if you read Kerrys blog it would seem that it uses exact match so if you used this package to enable some security be aware as Kerry exampled that comments in the SQL can make it do something else, i.e. not translate.

The second simple new feature added to 12cR1 is the last logon. I have mentioned this many times in the past that it would be nice to see users last logon. I even wrote a script in my Oracle security tools page that used audit to test for last logon because up until 12cR1 you needed audit to be able to do this.

It states in the documentation that last logon is recorded in the SYS.USER$ table, in fact its recorded in SYS.USER$.SPARE6 or you can get it from the DBA_USERS.LAST_LOGIN column or the SYS.CDB_USERS.LAST_LOGIN column. In fact this information is only available in these two views and SYS.USER$:





SQL> select table_name,column_name from dba_tab_columns
2 where owner='SYS'
3 and column_name like 'LAST_LOG%';

TABLE_NAME
--------------------------------------------------------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
DBA_USERS
LAST_LOGIN

CDB_USERS
LAST_LOGIN


2 rows selected.

SQL>






That is a simplistic search of course!.

It also states in the documentation that security administrators can view when accounts were last used with this column and also that individuals can see their own last logon via the SQL*Plus banner. That of course assumes that you are using SQL*Plus!

For my system I can see:





SQL> @print 'select username,last_login from dba_users where last_login is not null'
Executing Query [select username,last_login from dba_users where last_login is
not null]
USERNAME : SYSTEM
LAST_LOGIN : 31-JUL-13 10.10.13.000000000 +01:00
-------------------------------------------
USERNAME : CTXSYS
LAST_LOGIN : 24-JUL-13 16.27.05.000000000 +01:00
-------------------------------------------
USERNAME : C##TST
LAST_LOGIN : 31-JUL-13 10.07.41.000000000 +01:00
-------------------------------------------

PL/SQL procedure successfully completed.

SQL>






This is interesting as I have logged in as SYSTEM and also C##TST today but I didnt login as CTXSYS on my Oracle 12cR1 PE installation. That means Oracle itself logged in as CTXSYS during the installation. Also if i do this:





SQL> connect sys/oracle1@//192.168.1.40:1521/orcl as sysdba
Connected.
SQL> set serveroutput on
SQL> @print 'select username,last_login from dba_users where last_login is not null'
Executing Query [select username,last_login from dba_users where last_login is
not null]
USERNAME : SYSTEM
LAST_LOGIN : 31-JUL-13 10.10.13.000000000 +01:00
-------------------------------------------
USERNAME : CTXSYS
LAST_LOGIN : 24-JUL-13 16.27.05.000000000 +01:00
-------------------------------------------
USERNAME : C##TST
LAST_LOGIN : 31-JUL-13 10.07.41.000000000 +01:00
-------------------------------------------

PL/SQL procedure successfully completed.

SQL>






It does not record last login as SYSDBA. The mandatory audit trail records the logon as SYSDBA already but it would be nice to distinguish an interactive logon as sysdba and record it.

Also the banner does not show up if you use an older SQL Client or older SQL*Plus. I am using 11.2 SQL client and SQL*Plus and no banner for 12cR1, this is to be expected of course as the banner must be built into SQL*Plus. If i instead login with a 12c client and I have logged in previously as the same user then I get the banner:





SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 31 10:53:20 2013

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Last Successful login time: Wed Jul 31 2013 10:46:03 +01:00

Connected to:
Personal Oracle Database 12c Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>






The interesting thought would be how does it read the spare6 column or the last_login column of cdb_users or dba_users as these are not available to all users normally, it would imply that access to the user$ table is exposed to everyone for this column at least. USER$ is removed from SELECT ANY DICTIONARY but its data is available still of course. Either SQL*Plus runs code as SYS or its exposed via a public view.

[No Comments]


April 2014
SMTWTFS
  12345
6789101112
13141516171819
20212223242526
27282930   

This is the weblog for Pete Finnigan. Pete works in the area of Oracle security and he specialises in auditing Oracle databases for security issues. This weblog is aimed squarely at those interested in the security of their Oracle databases.

Weblog Home
Weblog Archives


Home
Oracle Security Tools page
Oracle security papers
Oracle Security alerts

Web Development
SQL Server Security

RSS 1.0 FEED
RSS 2.0 FEED
Atom 0.3 FEED
Powered by gm-rss 2.0.0


Valid XHTML 1.0!