Securing the Oracle Listener
February 7, 2011 Leave a comment
Oracle listener is a server process, which listens incoming connections on the specified port(default is 1521) and redirects them to the database server. It is not limited to database connections, but it also can be used to access executable programs on the database server. As you can guess executing external procedures sometimes is not secure, because listener can be used by hackers to execute malicious programs.
There are several security options:
1.Setting the password for listener
It can be accomplished by the several ways:
1.1. Add the following entry to the listener.ora file.
PASSWORD_LISTENER=YourPassword
–Reload the listener
lsnrctl>reload
Note that password, in this case, is a plain text.
1.2. Using CHANGE_PASSWORD command
lsnrctl> change_password Old password: New password: Reenter new password: ....
Note that Old password option asks you to enter the old password for listener, but if it doesn’t exist(means that listener currently not have the password) press the Enter key(do not enter anything).
You should save the configuration of the listener. Before saving, set its password, because listener is governed by the password right now and for to save the configuration you should enter the password for the listener.
lsnrctl> set password Password: lsnrctl> save_config
–To check, open listener.ora file and you will see the entry like this:
#----ADDED BY TNSLSNR 06-FEB-2011 23:40:18--- PASSWORDS_LISTENER = ADD733DA61CD19A5 #--------------------------------------------
Note that the password is in an encrypted format.
2. Controlling the Access
Valid Node Cheching it the functionality by which access can be controlled for some specific hosts.
This functionality is implemented by manually adding some entries to sqlnet.ora file.
Valid entries are:
TCP.VALIDNODE_CHECKING – YES/NO, its value should be YES to enable valid node checking.
TCP.INVITED_NODES – values are ip addresses or hostnames, from where requests can be accepted.
TCP.EXCLUDED_NODES – values are ip addresses or hostnames, from where requests should not be accepted.
Note that just one option TCP.INVITED_NODES or TCP.EXCLUDED_NODES may be specified, not both of them. Because they are mutually exclusive. Also wild card values can not be used, each individual ip/hostname should be specified.
For example:
We need to configure oracle net configuration like that just request from 192.168.11.2 and Reichel can be accepted. To do this, we should add the following entries to sqlnet.ora file:
tcp.validnode_checking=yes tcp.invited_nodes=(192.168.11.2, Reichel)
–Restart the listener
lsnrctl> stop lsnrctl> start
3. Using the Listener Logging
Enabling this feature gives you an ability to track down all listener activities. For example, it may contain brute force password attack symptoms. Error TNS-01169 in the log file indicates that someone was trying to enter the password for the listener but failed.
To turn on the logging, the following parameters should be used:
LOG_DIRECTORY – location where log files should be created.
LOG_FILE – name of the log file.
LOG_STATUS – ON/OFF , to enable logging set its value to ON.
lsnrctl> set log_directory C:\oracle\product\10.2.0\oralsnrlogs lsnrctl> set log_file listener_ora.log lsnrctl> set log_status on
You should save the configuration. Restarting listener is not necessary.
4. Removing External Procedure Services
This service is defined in listener.ora file.
–listener.ora file.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = ORCL) ) (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = Mariami-PC)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )
Underlined rows need to be removed. After removing reload the listener.
5. Creating a Separate Listener for External Procedures
I think that this choice is better than explicitly removing external procedure entries from listener.ora file. You can run another lister, which listens just external procedures, under limited operating user or limit the libraries from which procedures can be executed.
5.1 Executing listener under limited OS user
When external procedure is called it runs the extproc agent process, which inherits privileges from OS user under which the listener process was started.
This user should not have any permission to access files owned by oracle user account.No permission to read data files. For this user, listener.ora file must be readonly.
5.2 Limiting libraries
As I said you can limit libraries from where external procedures can be executed. You can do it by the following way:
–In listener.ora file
(ENVS="EXTPROC_DLLS=ONLY:/usr/libjava.so:/usr/lib/libz.so,PATH=$PATH")
ENVS -is used to define any environment variable.
EXTPROC_DLLS -list of libraries that can be accessed,list is separated by colon.
ONLY – only specified libraries list.
6. ADMIN_RESTRICTIONS Parameter
If the value of this parameter is ON in listener.ora file, than listener file can only be modified manually. It disallows all SET commands.
Above post is extracted and modified from Sybex.OCA.Oracle.10g.Administration.II.Study.Guide.1Z0-042