Listener Güvenliği

Ekim 26 2009

“Listener” hizmeti veritabanına istemcilerden gelen bağlantı taleplerini dinleyen servistir. Bu servisin çalışmaması durumunda veritbanı çalışıyor olsa bile istemciler bağlantı kuramaz. Bu nedenle “listener” hizmeti güvenliğine büyük önem vermemiz gereken kritik bir servistir. (6)

1 – Listener Yönetiminde Kısıtlama

Listener servisinin yönetimi iki şekilde yapılabilir. Bunlardan birincisi listener.ora dosyasının içinde değişiklik yaparak, ikincisi lsnrctl komutuyla listener konfigürasyon moduna geçip, bu modda set komutları kullanaraktır. Aşağıdaki örnekte set komutu kullanılarak listener servisi hakkında önemli bilgilerin /tmp klasörü altına gönderilmesi sağlanmaktadır. /tmp dizinine tüm kullanıcıların erişebildiklerini düşünürsek bu durum güvenlik riski yaratmaktadır. (1)

$lsnrctl
LSNRCTL> set trc_level support
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ttelekom)(PORT=1521)))
LISTENER parameter “trc_level” set to support
The command completed successfully

LSNRCTL> set trc_directory /tmp
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ttelekom)(PORT=1521)))
LISTENER parameter “trc_directory” set to /tmp
The command completed successfully

Listener konfigürasyon modu altında set komutuyla konfigürasyon değişikliği yapılmasını yasaklayarak, tüm değişiklikleri listener.ora dosyası içerisinden yapmaya mecbur kılmak, güvenlik açısından faydalı olacaktır. Bunu sağlamak için aşağıdaki satır listener.ora dosyası içerisine eklenir, listener servisi yeniden başlatılır.

ADMIN_RESTRICTIONS_LISTENER = ON

LSNRCTL> reload

2 – Listener Şifresi Yaratmak

Listener servisi için bir şifre yaratarak, tüm listener konfigürasyon ve yönetim işlemlerini şifre doğrulaması sonrasında gerçekleştirmek önemli bir güvenlik adımıdır.Listener şifresi yaratmak için aşağıdaki komutlar kullanılabilir.

$ lsnrctl
LSNRCTL> change_password
Old password:
New password:
Reenter new password:

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ttelekom)(PORT=1521)(IP=192.168.1.1)))
Password changed for LISTENER
The command completed successfully
LSNRCTL> save_config

Bu şekilde şifre yaratıldıktan sonra, yaratılan şifre ile ilgili aşağıdaki satırların listener.ora dosyası içerine otomatik eklendiği görülebilir.

#—-ADDED BY TNSLSNR 24-OCT-2005 17:02:28—
PASSWORDS_LISTENER_ODSSDB01 = 75CD180DE6C75466
#——————————————–

Yanlış şifre girilmesi durumunda aşağıdaki hata alınır.

TNS-01169: The listener has not recognized the password.

Şifre girilmeden önemli bir konfigürasyon vs. komutu girildiğinde aşağıdaki hata alınır.

TNS-01190: The user is not authorized to execute the requested listener command

Şifre yaratılarak güvenli hale getirilen listener servisinin durumuna “lsnrctl status” komutuyla bakıldığında Security satırı aşağıdaki şekilde görülür.

STATUS of the LISTENER
————————
Alias LISTENER_ODSPDB02
Version TNSLSNR for HPUX: Version 10.1.0.4.0 – Production
Start Date 16-OCT-2005 05:58:35
Uptime 9 days 17 hr. 44 min. 41 sec
Trace Level off
Security ON: Password or Local OS Authentication

Listener şifresi ile ilgili çok önemli bir nokta ise Oracle yazılım sahibi işletim sistemi kullanıcısı hakkındadır. Bu kullanıcı 10g versiyonu itibariyle listener şifresi tanımlanmış olsa dahi, şifre girişi yapmadan listener servisi ile ilgili tüm işlemleri yapabilmektedir. Daha önce belirtildiği gibi Listener binary dosyalarının erişim yetkileri aşağıdaki komutla düzeltilir ise, Oracle yazılım sahibi kullanıcı dışındaki hiçbir kullanıcı zaten Listener servislerine hiçbir şekilde müdahale edemeyeceklerdir.

chmod 700 lsnrctl tnslsnr

Listener binary dosyaları erişim yetkileri bu şekilde düzenlendi ise Listener şifresi yaratmak 10g versiyonu için gerekmeyecektir.

3 – LISTENER LOG’larının Gözlemlenmesi

Daha önceki konularda Listener binary dosyasının erişim yetkilerini düzenleyerek Oracle yazılım sahibi kullanıcı dışında erişimi engelleme, Listener yönetiminde kısıtlama ile parametrelerin online değiştirilmesini önleme, Listener parolası yaratma konuları ile Oracle Listener’ı güvenli hale getirmeyi gördük. Ancak kötü niyetli kişilerin girişimlerini gözlemlemek te, güvenlik önlemi almak kadar önemlidir.

Başarısız girişimleri listener log dosyasından gözlemleyebiliriz. Listener log dosyası varsayılanda $ORACLE_HOME/network/log dizininde listener.log ismi ile bulunmaktadır. Örneğin, bir kullanıcı parola girmez ya da yanlış parola girer ve Listener’da değişiklik yapmak isterse listener log dosyasına aşağıdaki şekilde bir kayıt düşecektir.

06-OCT-2009 11:56:50 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=seyhan2)(USER=system))(COMMAND=stop)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869824)) * stop * 1190
TNS-01190: The user is not authorized to execute the requested listener command

Ya da Listener Yönetimine 5.1.’de bahsedildiği gibi kısıtlama getirildiyse SET komutu ile konfigürasyon değişikliği yapmak istendiğinde aşağıdakine benzer bir kayıt log dosyasına düşecektir.

06-OCT-2009 14:30:01 * log_status * 12508
TNS-12508: TNS:listener could not resolve the COMMAND given

Bu log dosyasının periyodik bir şekilde izlenmesi güvenlik açısından önemlidir. Bu amaçla bir shell script yazılarak listener.log dosyası içi periyodik taranabilir ve belirli durumlarda veritabanı yöneticilerine uyarı gönderilmesi sağlanabilir. Örneğin belirli bir sayıda TNS-01190 ya da TNS-12508 hatası alındığında durumu bildiren bir mail atılması faydalı olacaktır.

Emre Baransel tarafından yayınlandı

Bir Cevap Yazın