|
İş verilerinin sayısal ortamda yönetilmeye başlanması ile beraber, iş
akışlarının ve verilerin uygulamalar aracılığı ile kontrolü ve
verilerin sayısal olarak saklanması mümkün olmuştur. Kurumsal seviyede
bilgi güvenliği söz konusu olduğunda, Şekil 1’de verilen
fonksiyonların bütün kaynak erişim süreçleri için gerçeklenebilmesi ve
kimlik yönetiminin de merkezi bir yapıya kavuşturulması gerekmektedir.
Şirket bünyesinde farklı amaca hizmet eden uygulamalar çok farklı
yazılım altyapısı ve farklı iş mantığı yapıları üzerine bina edilmiş
olabilirler. KYS (Kimlik Yönetim Sistemi)’lerin hayata geçirilmesi sırasında, en
çekinilen konu da uygulamaların ne şekilde ve hangi seviyelerde
değişiklik yapılarak KYS’ye entegre edilebileceğidir. Bu makalede
mümkün olduğunda kod örnekleri ile değişik entegrasyon seçenekleri
incelenecektir.
Şekil 1- Temel Uygulama Güvenlik Akışı
Prototip entegrasyon senaryoları için açık kaynak kodlu OpenSSO
Enterprise 8 (Update 1) [5] uygulaması kullanılmıştır. OpenSSO
uygulamasında erişim denetimi (access control) bölümü altında işletim
sistemleri, uygulamalar ve veritabanları için ayrı etki alanları
(realm) ve gerekli görüldüğü yerlerde alt etki alanları
oluşturulmuştur. Örnek olarak sanal şirketimizin satınalma bölümü
tarafından kullanılan uygulamanın kimlik, grup ve kaynak erişim
kurallarını içeren satinalma isimli etki alanı kullanılmıştır. Birden
fazla uygulamaya erişebilen kullanıcı grupları için uygulama etki alanı
(realm) hiyerarşisi vardır. Dizin olarak OpenDS 2.0 [6]
kullanılmıştır. OpenSSO – OpenDS ikili kullanımında, rol yönetimi
desteklenmediğinden, rol yönetimi kullanıcı grupları kullanılarak
sağlanmıştır. Aşağıda verilecek kod örnekleri de KYS erişim
kontrolünün OpenSSO üzerinden yapılması durumunda geçerli olacaktır.
Hem OpenSSO hem de örnek uygulamalar Glassfish v2.1 [7] üzerinde
çalışmaktadır.
HTTP Tabanlı Uygulamaların KYS Entegrasyonu
Uygulamaların KYS ile entegresyonunun kuşbakışı olarak zihinde canlandırılabilmesi için birkaç konunun anlaşılması faydalı olacaktır.
-
Web uygulamaları için asıl olan tümleşik oturum yönetimine geçişin sağlanmasıdır. KYS tümleşik oturum yönetim sunucusu bütün web uygulamalarına erişim öncesi araya girer ve kullanıcı için oluşturulmuş bir çerezin varlığını kontrol eder.
-
Web uygulamalarının KYS ile entegrasyonu, uygulama sunumcusu üzerine bir ajan (agent) uygulamanın kurulması ile sağlanabilir. Ajan uygulamalar, asıl kaynağa erişim için kullanıcı tarafından gönderilen talepleri keser ve KYS tümleşik oturum sunumcusu tarafından oluşturulan ve internet tarayıcısı tarafından gönderilen çerezin varlığını kontrol ederler. Çerezin geçerliliği sağlanır ise, yetkilendirme sorgusu (talep edilen kaynaklara erişim yetkisinin olup olmadığı) yapılır ve sonuç uygulamaya döndürülür.
-
Web uygulamalarının ters vekil sunumcu (Reverse Proxy) arkasında çalışması durumunda, ajan uygulamanın sadece ters vekil sunumcu üzerinde yürütülüyor olması yeterli olacaktır ve bu durumda politika ajanlarının yönetimi de kolaylaşacaktır zira her uygulama sunucusu üzerinde ayrı bir ajan kurulması ihtiyacı ortadan kalkacaktır.
-
KYS uygulamaları, kimlik doğrulama ve yetkilendirme sorgularının herhangi bir ajan uygulama kurulumuna ihtiyaç olmadan programatik olarak gerçekleştirilebilmesi için yazılım arayüzleri (API) sunarlar. Bu servislerin kullanımı için, uygulamaların uygun şekilde güncellenmesi gerekmektedir.
Örnek: J2EE Tabanlı Uygulamaların KYS Entegrasyonu
Standart J2EE uygulamasının entegrasyonunda, bu amaç için kullanılabilecek bir ajanın kurulması sağlanmıştır. Korunan uygulamanın web.xml dosyası içinde filtre uygulama tanımı yapılarak, uygulamaya gelen çağrıların ajan (filter-class) üzerinden geçmesi sağlanır. Ajanın kurulumu sırasında çerezin varlığını, geçerliliğini ve çerez var ise erişim yetkilerini sorgulayabileceği KYS sunucunun bilgileri verilmiştir. Filtre olarak kullanılan ajan tümleşik oturum çerezi yok ise çerezin oluşturulması için ilgili sunucuya yönlendirme işlemini gerçekleştirir.
<filter>
<filter-name>J2eeAjan</filter-name>
<filter-class> com.sun.identity.agents.filter.AmAgentFilter </filter-class>
</filter>x
<filter-mapping>
<filter-name>J2eeAjan</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Gerekli kimlik doğrulama işleminin ajan üzerinden yapılması sonrası, aşağıdaki şekilde yetkiler sorgulanabilir.
İlgili xml dosyasında (uygulama sunucusuna göre değişebilir) security-role-mapping tanımlaması yapılmalıdır.
<security-role-mapping>
<role-name>MANAGER_ROLE</role-name>
<group-name>id=manager,ou=satinalma,ou=kys,dc=kurum-etki-alani,dc=com,dc=tr</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>EMPLOYEE_ROLE</role-name>
<group-name>id=employee,ou=satinalma,ou=kys,dc=kurum-etki-alani,dc=com,dc=tr </group-name>
</security-role-mapping>
Uygulamanın kodunda yetki sorgulaması aşağıdaki gibi yapılabilir.
private String getSecurityDetails(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
String user = (principal != null)?principal.toString():"Anonymous";
boolean isManager = request.isUserInRole("MANAGER_ROLE");
boolean isEmployee = request.isUserInRole("EMPLOYEE_ROLE");
StringBuffer buff = new StringBuffer();
buff.append("Kullanıcı \"").append(user).append("\": ");
if (isManager) {
if (isEmployee) {
buff.append(" yönetici ve aynı zamanda çalışan.");
} else {
buff.append("yönetici fakat çalışan değil.");
}
} else {
if (isEmployee) {
buff.append("yönetici değil sadece çalışan.");
} else {
buff.append("çalışan değil, yönetici değil.");
}
}
return buff.toString();
}
Örnek: Web Sunucusu (HTTP Server) Üzerinden KYS Entegrasyonu
Web sunucusu üzerinden uygulamaların KYS ile entegrasyonu sağlanması durumunda, URL tabanlı kaynakların (Örneğin web sayfası) korunması ve yetki politikalarının uygulanması sağlanabilir. J2EE ajanlarının sunduğu servislerden farklı olarak, fonksiyonel bir yetkinin (Örneğin aynı sayfa üzerinden bir kullanıcının güncelleme diğerinin ise sadece görüntüleme yetkisinin olması gibi) yönetimi mümkün değildir.
Web politika ajanının kullanıldığı uygulamalar için son kullanıcı ve kaynak erişimi için (Örneğin web sayfasının çağrılması) şu akış gerçekleşir.
-
HTTP sunucuya entegre modül olarak çalışan, web ajanı HTTP isteğini keser ve istekte erişilmek istenilen kaynak korunmuyor ise (listeden kontrol edilir) şifresiz geçiş izni verilir.
-
Erişilmek istenen kaynak kimlik doğrulama gerektiriyor ise, tümleşik oturum sunucusu giriş sayfasına kullanıcı yönlendirilir. (HTTP Location başlığı kullanılarak)
-
Giriş kimlik bilgileri ve/veya biometrik/akıllı kart yöntemleri ile giriş yapılır. Kimlik yönetimi sistemi tarafından, ilgili uygulama için öngörülen kimlik doğrulama prosedürleri uygulanır. (Örn. Hem şifre, hem de akıllı kart PIN girişi istenebilir)
-
Başarılı giriş sonrası KYS tarafından çerez oluşturulur ve bu çerez kullanılarak web ajanı tarafından kaynak erişim yetkisi kontrol edilir.
-
Bütün erişim kuralları yorumlandıktan sonran kullanıcının istenilen kaynağa erişebiliyor olması durumunda ilgili kaynağa yönlendirme yapılır.
Şekil 2’te web tabanlı bir uygulamanın HTTP sunucu üzerine kurulan bir politika ajanı ile KYS sistemine nasıl entegre olarak çalışacağı anlatılmıştır.
Şekil 2- Web Ajanı Örnek Topoloji
Web sunucu ile entegre çalışan politika ajanlarının kurulumu aşağıdaki basamaklardan oluşmaktadır.
LoadModule dsame_module /usr/local/linux_agent_apache/agents/apache/lib/libamapc2.so
include /etc/opt/agents/apache/config/_etc_httpd_conf/AMAgent.properties
Ajan konfigurasyon dosyası içinde, KYS erişim bilgileri de yer almaktadır.
Örnek: Web Servisleri Üzerinden KYS Entegrasyonu
Kullanımı öngörülen KYS uygulamanız, web servisleri üzerinden kimlik doğrulama, oturum doğrulama ve yetki sorgulama hizmetlerini sunuyor olabilir. Uygulamaların KYS entegrasyonu kapsamında bu yöntemin kullanılması durumuna, yukarıda bahsedilen ajan uygulamaların sizin yerinize gerçekleştirmiş olduğu işlemleri de uygulama yazılımı içinde geliştirmeniz gerekmektedir. Bir kaynağa erişim isteği geldiğinde,
-
Kullanıcının oturumunun geçerli olup olmadığı, geçerli değil ise tümleşik oturum sunucusu giriş sayfasına yönlendirme
-
Oturumu doğrulanan kimliğin hangi grup yada rollere dahil olduğu ve yetkilerinin istekte bulunulan kaynağa erişim için yeterli olup olmadığının sorgulanması
işlemleri uygulama geliştirici tarafından gerçeklenmelidir.
1. İlgili KYS uygulamasının kimlik web servisi tanım dosyası (WSDL) kullanılarak istemci tarafında gerekli nesneler oluşturulmalıdır. (Client Stubs)
https://sso.kurum-etki-alani.com.tr:8080/opensso/identityservices?WSDL
...
com.kys.kysistemci.IdentityServicesImplService
com.kys.kysistemci.IdentityServicesImpl
com.kys.kysistemci.Token
com.kys.kysistemci.UserDetail
...
2. Satınalma uygulamasının giriş ekranında bir HTML form aracılığı ile kimlik (kullanıcı ismi ve şifresi) bilgileri girilmesi sağlanıp, KYS uygulaması web servisleri üzerinden kimlik yönetim işlemleri gerçekleştirilebilir.
<form name="giris" action="giris.jsp" method="POST">
<input type="text" name="username" />
<input type="password" name="passwd" />
<input type="submit" value="Giris" name="WSGiris" /><br><br>
</form>
3. giris.jsp sayfasına gönderilen kimlik bilgilerininin geçerlilik kontrolü yapılıp, oturum anahtarı elde edilebilir.
<%
String username = request.getParameter("username");
String password = request.getParameter("passwd");
String token = null;
try {
if (username == null || username.length() == 0
||password == null || password.length() == 0) {
out.println("Şifre yada kullanıcı ismi yanlış.");
}else{
com.kys.kysistemci.IdentityServicesImplService service = new com.kys.kysistemci.IdentityServicesImplService();
com.kys.kysistemci.IdentityServicesImpl port = service.getIdentityServicesImplPort();
java.lang.String uri = "realm=satinalma";
com.kys.kysistemci.Token result = port.authenticate(username, password, uri);
out.println("Giriş Başarılı. ");
token = result.getId();
out.println("Token Değeri="+ token)
}
}catch (Exception e) {
// Hata olustu
}
4. Uygulamanın herhangi bir bölümünde oturum anahtarı kullanılarak gerekli sorgular yapılabilir.
try {
com.kys.kysistemci.IdentityServicesImplService service = new
com.kys.kysistemci.IdentityServicesImplService();
com.kys.kysistemci.IdentityServicesImpl port = service.getIdentityServicesImplPort();
java.util.List<java.lang.String> attributeNames = null;
com.kys.kysistemci.Token id = new com.kys.kysistemci.Token();
com.kys.kysistemci.UserDetails result = port.attributes(attributeNames, id);
out.println("Kimlik Detayları = "+ result);
} catch (Exception e) {
// Hata yonetimi
}
Örnek: HTTP İstek-Yanıt Mekanizmaları Üzerinden Entegrasyon
KYS uygulamasına HTTP istekleri gönderilip, gelen yanıtların yorumlanması sayesinde de uygulamaların KYS entegrasyonu sağlanabilir. Prototip uygulamamızda OpenSSO kullanılmıştır. Şirket içinde kullanılan bir satınalma uygulamasının kimliklerini içeren satinalma isimli bir etki alanı oluşturulmuş (ou=satinalma,ou=kys,dc=kurum,dc=com,dc=tr) ve bu uygulamanın kullanıcılarının kimlik ve yetki sorgulamalarının nasıl yapıldığı gösterilmiştir. Örnek olarak curl uygulaması aracılığı ile HTTP istekleri gönderilmiştir. Böyle bir seçeneğin entegrasyon için kullanılması durumunda mutlaka SSL güvenlikli bağlantı tercih edilmelidir. İlgili programlama dilinin HTTP istek-yanıt kütüphaneleri bu tür bir entegrasyon için kullanılabilir. ( Örn. HTTPServletRequest, HTTPServletResponse)
curl -d "&username=satinalma_kullanici_ismi&password=sha1_sifresi&realm=satinalma" https://sso.kurum-etki-alani.com.tr:8080/fam/identity/authenticate
Yanıt: iPlanetDirectoryPro=AQIC5wM2LY4SfczqMIOj3DJKQZiwLjxWsm+EEzVYhtGEVfQ=-AT-AAJTSQACMDE=#"
curl –b "iPlanetDirectoryPro=AQIC5wM2LY4SfczqMIOj3DJKQZiwLjxWsm+EEzVYhtGEVfQ=-AT-AAJTSQACMDE=#" https://sso.kurum-etki-alani.com:8080/fam/identity/isTokenValid
Yanıt: boolean=false yada boolean=true
curl -d "uri=https://satinalma.kurum-etki-alani.com.tr/satinalmaOnayla&action=POST& iPlanetDirectoryPro=AQIC5wM2LY4SfczqMIOj3DJKQZiwLjxWsm+EEzVYhtGEVfQ=-AT-AAJTSQACMDE=#" https://sso.kurum-etki-alani.com:8080/fam/identity /authorize
Yanıt: boolean=false yada boolean=true
curl –b "attributes_names=uid& iPlanetDirectoryPro=AQIC5wM2LY4SfczqMIOj3DJKQZiwLjxWsm+EEzVYhtGEVfQ=-AT-AAJTSQACMDE=#" https://sso.kurum-etki-alani.com:8080/fam/identity/attributes
Yanıt:
userdetails.attribute.name=cn
userdetails.attribute.value=satinalma_kullanici_ismi_adi_soyadi
userdetails.attribute.name=userpassword
userdetails.attribute.value={SSHA}XhiE0RMwO/D7SSQ5fYLrTlFjmbHmYbQkIU43FA==
userdetails.attribute.name=uid
userdetails.attribute.value=satinalma_kullanici_ismi
userdetails.attribute.name=inetuserstatus
userdetails.attribute.value=Active
Tamamlayıcı Güvenlik Önlemleri
Organizasyon için değerli olan verinin korunması gerekir. Korunan verinin güvenliğinin sağlanması için bütün veri erişim kanallarının Şekil 1’e göre yönetilmesi ve güvenli hale getirilmesi yeterli olmayacaktır. Veriye erişimin güvenli, denetlenebilir ve yönetilebilir hale getirilmesini sağlamakla beraber, uç kullanıcının kimlik denetimi, sürekli erişilebilirlik ve felaket kurtarma gibi güvenlik önlemlerini içermediğinden, organizasyon seviyesinde bir güveniğin ancak tamamlayıcı önlemler ile sağlanabileceği açıktır.
Akıllı Kart ve Biometrik Kimlik Doğrulama
Şekil 1’de belirtilen akışa göre sisteme dahil olan bir kullanıcı, bu akışın başlangıç noktasını oluşturmaktadır. Kullanıcılar uygulamaların servislerinden kendilerine sunulan arayüzler üzerinden faydalanırlar. Fakat sunulan servisin gerçekten bizim kullanmasını öngördüğümüz kullanıcı tarafından kullanılıp kullanılmadığından emin olmak için, tekilliğinden (neredeyse) emin olabileceğimiz bilgilerin kullanıma alınması gerekmektedir. Akıllı kart kullanımı ile kimlik doğrulamanın güçlendirilmesi mümkün olmakla birlikte, biometrik verilere dayanan bir tekillik bilgisinin kullanımı daha güçlü bir yöntem sunacaktır.(Bkz. [4]) Uygulamaların kullanıcı arayüzünün sunulduğu uygulama ( Örn. Firefox, Internet Explorer) ile uygulama sunucusu arasındaki iletişim açısından biometrik yada akıllı kart yöntemleri için teknik bir fark olmamakla beraber, biometrik verilerin başkalarına kolaylıkla devredilemez olduğu gerçeği, biometrik yöntemleri daha güçlü kılmaktadır.
Diğer taraftan, Global Scaling Theory [3] gibi fiziksel kuramlar da tekil tanımlama için pratikte kullanılmaya başlanmıştır.
Güçlü kimlik doğrulamanın KYS entegrasyonu için gerekli adımlar şu şekilde özetlenebilir.
1. Tümleşik oturum sunucusunun koştuğu sunucu için (örn. sso.kurum-etki-alani.com.tr) “SSL Sunucu Sertifikası” alınmalıdır.
2. Tümleşik oturum sunucusunun koştuğu uygulama sunucusu (örn. Glassfish) ilgili anahtar deposuna; hem sunucu sertifikasını veren kurumun kök açık anahtarı ve varsa ara sertifikalar hem de Madde 1’de temin edilen açık ve özel anahtar aktarılmalıdır. Prototip uygulamamızda, KamuSM kök ve ara açık anahtarları kullanılmıştır. Sunucu ve bireysel sertifikalar da KamuSM tarafından sağlanmıştır.
java ImportKey sso_sunucu_ozel.der sso_sunucu_acik.der # keystore_aktar.der isimli bir dosya oluşacaktır.
/usr/lib/jvm/java-6-sun/bin/keytool -importkeystore -destkeystore keystore.jks -srckeystore
keystore_aktar.der -srcstoretype JKS
/usr/lib/jvm/java-6-sun/bin/keytool -import -v -alias cacert -trustcacerts
-keystore cacerts.jks -storepass sifre_varsayilan_changeit -file
Kamusm_Kok_sertifika.pem
Buna ek olarak uygulama sunucusu üzerinde istemci kimlik doğrulaması aktive edilmelidir. (Client Authentication)
3. Onaylanmış bir sertifika sağlayıcısından kullanıcılar için bireysel sertifika talep edilmelidir. Bireysel sertifikaların açık anahtarı, LDAP dizinde var olan kullanıcıların userCertificate ikili alanına base64 kodlanmış olarak aktarılmalıdır. Kullanıcıların inetOrgPerson nesne sınıfında oluşturulduğu varsayılmıştır. Örnek kod aşağıda verilmiştir.
4. Akıllı kart kullanımı durumunda, kart okuyucunun yada USB cihazın işletim sistemine özel sürücülerinin kurulması ve internet tarayıcıları için oluşturulmuş kütüphanelerin ilgili yerlere kopyalanması (eklenmesi) gerekmektedir.
Şekil 3 - Akis Kütüphanelerinin Tanıtılması
5. Tümleşik oturum doğrulayıcı üzerinde yapılacak gerekli ayarlamalar sonrası, korunan herhangi bir kaynağa erişilmeye çalışıldığında, internet tarayıcı deposunda kayıtlı bireysel sertifikaları gösterecek ve sizin ilgili sertifikayı seçmeniz sonrası, özel anahtarı koruyan PIN numarasını soracaktır.
Şekil 4 - Örnek Kullanıcı Sertifikası
6. Tümleşik oturum sunucusu üzerinde, birden fazla kimlik doğrulama uygulanması için kurallar belirlemişseniz, bu kurallar uyarınca kimlik doğrulama işlemleri sırasıyla uygulanacaktır.
7. Bütün kimlik doğrulama basamaklarının başarılı olması durumunda, ilgili politika ajanı erişim kontrolünü gerçekleştirip, kullanıcıyı erişmek istediği kaynağa yönlendirir.
Bireysel sertifika açık anahtarları uuencode ile base64 formatına çevrilip, ldapmodify aracı kullanılarak LDAP dizine aktarılmıştır.
uuencode -m satinalma_kullanici_adi.der test.data
Bu komutun çıktısında satır sonu karakterleri ve son satırda bulanan “====” bilgisi temizlendikten sonra, aşağıdaki içerikli bir dosya oluşturulur.
Satinalma_kullanici_ismi.ldif
dn: uid=satinalma_kullanici_ismi,ou=satinalma,ou=kys,dc=kurum-etki-alani,dc=com,dc=tr
changetype: modify
replace: usercertificate;binary
usercertificate;binary::MIICwTCCAioCCQDA7ADyVdz0+jANBgkqhkiG9w.....
Oluşturulan satınalma_kullanici_ismi.ldif dosyası, LDAP dizine aktarılmalıdır. Bu alan OpenSSO tümleşik oturum sunucusu üzerinde, kullanıcının tarayıcısı tarafından gönderilen sertifika bilgilerini ile karşılaştırılacak ve eşleme sonrası kullanıcı için oturum çerezi oluşturulacaktır.
$OPENDS_HOME/bin/ldapmodify -h sso.kurum-etki-alani.com.tr -p 1389 -D "cn=Dizin Yoneticisi " -w sifre -c -f satinalma_kullanici_ismi.ldif
Kullanılan bireysel sertifikaların CN alanı ile kullanıcının LDAP dizindeki CN alanı değerleri örtüşmekte, bu alan kişinin adı ve soyadından oluşmaktadır. Kişinin adı ve soyadı bilgileri organizasyonda tekil olmayabileceğinden, TC Kimlik No gibi ek alanların da kontrol edilmesi daha uygun olacaktır.
Kaynakça
[1] Kimlik Yönetimi, Kavramlar ve Gereksinimler, Yılmaz Çankaya, Haziran 2009, https://www.bilgiguvenligi.gov.tr
[2] Akıllı Kartlar ve Uygulamaları; Akıllı Kart Nedir?, Mustafa Başak, Tubitak UEKAE Dergisi, Cilt 1, Sayı 1, Eylül-Aralık 2009
[3] Eine kurze Einführung in die Global Scaling Theorie, André Waser
[4] Kholmatov, Alisher Anatolyevich and Yanıkoğlu, Berrin, "Identity authentication using improved online signature verification method", Pattern recognition letters, Vol.26, No.15, November 2005, 2400-2408 (SCI)
[5] OpenSSO Ürün Ana Sayfası, https://opensso.dev.java.net/
[6] OpenDS Ürün Ana Sayfası, http://www.opends.org/
[7] Glassfish Ürün Ana Sayfası, https://glassfish.dev.java.net/
[8] uuencode, http://en.wikipedia.org/wiki/Uuencoding
Favori olarak ekle (0) | Görüntüleme sayısı: 388
Sadece kayıtlı kullanıcılar yorum yazabilir. Lütfen sisteme giriş yapın veya kayıt olun. |