Bu makalemizde Syslog ve syslog ile tutulan logların kanıtlanabilir
olması açısından OpenSSL kullanılarak nasıl imzalanacağı konusundan
bahsedeceğiz.Anlatım sırasında Unix/Linux tabanlı bir işletim sistemi
kullanılmıştır. OpenSSL aynı zamanda Windows sistemler üzerindede
çalışabilmektedir.Versiyon olarak ise son sürüm olan 1.0.1g sürümü
kullanılmıştır.
İmzalama gerçekleştirilirken öncelikle imzalama
işlemleri için gerekli konfigürasyonları yapıp ardından oluşturulan bu dosyalar
ile imzalama işlemini yapacağız.
1-Syslog
Cihazlar üzerlerinde yapılan işlemler için belirli kayıtlar
tutmaktadırlar.Bu tutulan kayıtlara log adı verilmektedir.Syslog bu kayıtlar için tanımlanmış bir servistir.Syslog bilgileri; bilgi sistemlerinin yönetimi
ve güvenlik denetimleri için kullanılabilirler.Printerlardan routerlara kadar
bir çok cihaz syslog desteklemekte ve logları farklı bir sisteme
gönderebilmektedirler.
Syslog mesajları facility kodlarından biri ile etiketlenir
ve bir severity tanımı taşırlar.Facility ve severity seviyeleri aşağıdaki gibi
gösterilebilirler.
Facility tanımları;
0 kern
1 user
2 mail
3 daemon
4 auth
5 syslog
6 lpr
7 news
8 uucp
9 clock daemon
10 authpriv
11 ftp
12 NTP subsystem
13 log audit
14 log alert
15 cron
16 -23 local 0-local 7
1 user
2 mail
3 daemon
4 auth
5 syslog
6 lpr
7 news
8 uucp
9 clock daemon
10 authpriv
11 ftp
12 NTP subsystem
13 log audit
14 log alert
15 cron
16 -23 local 0-local 7
Facility tablosunda görülen bilgiler tüm log desteği olan
cihazlar için aynı olmayabilirler.Farklı kodlar farklı anahtar kelimeler için
kullanılabilirler.
Severity tanımları;
0 Emergency emerg (panic)
1 Alert alert
2 Critical crit
3 Error err (error)
4 Warning warning (warn)
5 Notice notice
6 Informational info
7 Debug debug
1 Alert alert
2 Critical crit
3 Error err (error)
4 Warning warning (warn)
5 Notice notice
6 Informational info
7 Debug debug
Syslog Paket Yapısı
Syslog mesaj yapısı üç ayrı parça olarak
görüntülenirler.Format olarak aşağıdaki gibidir;
“<pri> header msg”
Priority (pri) :
Bu alan Facility ve Severity mesajlarını içerir.Bu mesajlar 8 bitlik
numaralardan oluşur.ilk 3 bit Severity geri kalan 5 bit ise Facility kodlarını
belirtmektedir.Önemli olan konulardan biri syslog programının herhangi bir
Facility veya Severity mesajı üretmemesidir.Kullanılan diğer programlar
üzerlerinde işlemler yapıldıkça bu mesajlar oluşurlar.
Header : Bu
alan yapılan işlemlerle ilgili oluşan log mesajlarının hangi saat ve tarihte
oluştuğunu göstermektedir.Bu zaman bilgisi sisteminize göre ayarlanacaktır. Bu
nedenle eğer sistem saat ve tarihiniz yanlış olursa mesajların zamanları da
yanlış olacaktır.Bu alan ayrıca hostname ve IP bilgilerini de içermektedir.
Message (msg) : Bu
alan log mesajları ilgili bazı ek bilgileri içermektedir.msg alanı kendi
içerisinde iki farklı bilgi taşımaktadır.Bu bilgilerden bir tanesi log
mesajlarını üreten program veya process ismini diğeri ise ek bilgileri
içermektedir.(TAG,Content)
Syslog ağ servisi UDP
514 portunu kullanarak paketleri iletmektedir.Paketlerin gönderilip
gönderilmediğinin kontrolünü yapmamaktadır.Bu nedenle gönderilen paketlerin
hedefe ulaşacağının herhangi bir garantisi yoktur. Syslog paketleri maksimum
1024byte büyüklüğünde iletilebilirler,herhangi bir minimum değer kısıtlaması
yoktur.
Syslog mesajlarına aşağıdaki satır örnek verilebilir;
Syslog mesajlarına aşağıdaki satır örnek verilebilir;
<34>1 2003-10-11T22:14:15.003Z
mymachine.example.com su - ID47
- BOM'su root' failed for lonvick on /dev/pts/8
- BOM'su root' failed for lonvick on /dev/pts/8
Syslog Sunucu Konfigürasyonu
Buradaki konfigürasyonlar syslogun daha yeni bir versiyonu
olan Rsyslog baz alınarak yapılmıştır.Siz de Unix/Linux tabanlı sistemlerinize
Rsyslog ‘ı kolayca entegre edebilirsiniz.
Rsyslog yüklü bir sistemi merkezi log sunucusu haline
getirmek için “/etc/rsyslog.conf” dosyası altında belirli ayarlar yapılmalıdır.
Sisteminizin üzerine log gelmesini sağlamak için
rsyslog.conf dosyası altında aşağıdaki
satırların aktif hale getirlmesi gerekmektedir.Ayrıca eğer network veya sistemde aktif bir Firewall varsa bu cihaz
üzerinde de UDP 514 portunun açık olması gereklidir.
2-OpenSSL Kurulum
Kurulum için aşağıdaki adımlar izlenmelidir;
-Öncelikle openssl sitesi üzerinden 1.0.1g versiyonu
indiriyoruz.
wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz
-Dosya tar.gz ile sıkıştırılmış olarak gelecektir.Dosyayı
dizine çıkartmak için;
“tar –xzvf openssl-1.0.1g.tar.gz” komutu kullanılmalıdır.Dosya çıkarma işlemi
bittikten sonra openssl-1.0.1g isimli bir dosya oluşacaktır. cd “openssl-1.0.1g”
komutu ile dosya içerisine girilir.
-Daha sonra “./config” komutu çalıştırılarak kurulum işlemi
başlatılır.Sonra “make” komutu ile openssl dosyaları derlenir en son olarak
“make install” komutu ile kurulum tamamlanır.
Dosyayı çıkarttığımız dizin kurulum yapacağımız dizinden farklı
biryerde olabilir.Bu durumda config komutu şu şekilde çalıştırılmalıdır.
“./config --prefix=/usr/local/” bu komut
sayesinde openssl kurulumu /usr/local/ dizini altında gerçekleştirilecektir.Siz
uygun gördüğünüz herhangi bir yere kurulumu gerçekleştirebilirsiniz.
İmzalama için Gerekli Konfigürasyonlar
Dosyaları karıştırmamak adına imzalama işlemlerimizi
gerçekleştireceğimiz dizinleri ve dosyaları manual olarak oluşturabiliriz.Bu
işlem için kök dizine bir klasör oluşturalım.Ben “openssl “isimli bir klasör
oluşturuyorum.Oluşturucağımız tüm konfigürasyon dosyaları burada tutulacak ve
kontrol edilecek.
Oluşturduğumuz bu klasör altına “private” ve “newcerts” adlı
iki altklasör oluşturmamız gerekiyor.Farklı bir isim ile oluşturulurlarsa openssl
bu klasörleri görmeyecek ve işlemlerimiz başarısız olacaktır.Bu işlemler için
aşağıdaki komutlar kullanılabilir;
“mkdir openssl”
“mkdir openssl/private”
“mkdir openssl/newcerts”
Openssl klasörü altına oluşturulması gereken diğer dosyalar
“serial” ve “index.txt” dosyalarıdır.Bu dosyalar sertifikalar üreltiğinde otomatik
olarak openssl tarafından güncelleneceklerdir.Serial dosyası içerisine openssl
kontrolünün sağlanması için bir değer girilmesi gereklidir.Aşağıdaki komutlar
ile işlemler gerçekleştirilebilir;
“cd openssl” öncelikle oluşturduğumuz klasör altına gidelim
“touch serial” komutu ile serial dosyası oluşturulur. “echo
01 > serial” komutu ile serial dosyası için gerekli değer girilir.
“touch index.txt”
komutu ile index.txt dosyası oluşturulur.
Gözden geçirilmesi gereken diğer bir konu ise “openssl.cnf”
dosyası altındaki ayarlardır.Ben openssl kurulumunu “/usr/local” altına
yaptım.Bu nedenle dosyaya ulaşmak için,“cd /usr/local/ssl” dizini altına
gidilmelidir.Herhangi bir text editör yardımı ile openssl.cnf dosyası açılır ve
içerisindeki satırlar aşağıdaki gibi değiştirilir.Değişiklik yapmadan önce bu
dosyanın bir yedeğini almanız faydalı olabilir.
İlk adım olarak oluşturduğumuz klasörün işlemlerimizi
geçekleşticeğimiz ana klasörü ve kök sertifikanın bulunduğu yeri belirtiriyoruz.Diğer alanlar otomatik
olarak yapılandırılacaktır.
İkinci olarak Time Stamp sertifikalarının bulunacağı dizini
gösteriyoruz.Ben hepsini aynı dizin altında toplayacağım bu nedenle buraya da
aynı klasör ismini giriyorum.
Son olarak extendedKeyUsage ,basicConstraints ve keyUsage
alanlarını aşağıdaki gibi düzenliyoruz.
İmzalama için Gerekli Sertifikaların Oluşturulması
İmzalama işlemlerimizi gerçekleştirebilmemiz için tüm
sertifikaların oluşmasını sağlayacak bir sertifika otoritesine (CA) ihtiyacımız
vardır.Oluşturacağımız bu sertifika kök sertifikadır .
Kök sertifikayı oluştururken dikkat etmemiz gereken bir kaç
konu var.Öncelikle openssl programını kurduğumuz dizin altında çalıştırmaya
özen gösterelim.Sisteminizde varsayılan olarak gelen sürüm en son sürüm
olmayabilir.Bu nedenle hatalar alabilirsiniz.
Diğer bir konu ise,kök sertifikalar daha önceden openssl.cnf
dosyasında girdiğimiz klasör altında
olmalılar.Şimdi aşağıdaki komut ile bahsettiğimiz sertifika (CA) ve bu sertifikanın private keyini
oluşturalım;
Öncelikle openssl programını kurduğumuz ve çalıştıracağımız
“bin” dizinine gidelim.
"cd /usr/local/bin"
Daha sonra aşağıdaki komutu çalıştıralım.Bu komut ile önce
gerekli kök sertifikayı ikinci olarak da bu sertifikaya ait private keyi
oluşturuyoruz.Dikkat edilmesi gereken nokta ise oluşturulan private key mutlaka
oluşturduğumuz private klasörü altında olmalıdır.
"openssl req -new -x509
-newkey rsa:2048 -days 3650 -out /openssl/cacert.pem –keyout
/openssl/private/cakey.pem"
Komut çalıştırıldığında sizden sertifika için şifre ve farklı birkaç bilgi girmenizi isteyecektir.Buraya belirlediğiniz bir şifreyi ve şehir firma gibi diğer bilgileri girin.Bu şifre ve girdiğiniz
diğer bilgileri kaybetmeyin.
Sırada TSA (Time Stamp) için bir private key oluşturma
var.Önceki işlemde olduğu gibi bu key de mutlaka private klasörü altında
bulunmalıdır.
"openssl genrsa -aes256
-out /openssl/private/tsakey.pem"
Komut çalıştırıldığında sizden şifre isteyecektir buraya da belirlediğimiz
bir şifre girelim ve bu şifreyi de saklayalım.
Dosyamızın imzalanması için kullanacağımız tsakey.pem
private keyine uygun bir request oluşturalım;
"openssl req -new -key
/openssl/private/tsakey.pem -out
/openssl/tsareq.csr"
Burada şifreler girilirken TSA private key oluştururken
girdiğiniz şifreyi girmeniz gereklidir.Ayrıca bilgileriniz CA oluştururken
girdiğiniz bilgilerle eşleşmelidir.Şifre yanlış girilirse program sizi
uyaracaktır.Extra attribute kısmını boş geçebilirsiniz,örnek olarak sadece
şifre kısmını girdim.
Burada farklı olarak .csr uzantılı bir dosya oluşacaktır. Sertifika
İmza Talebi (Certificate Signing Request) anlamına gelmektedir. CSR dosyası; sertifikayı talep eden kurum
bilgisi,sertifikanın kullanılacağı adres (Common Name),public Key gibi
bilgileri içerir ve oluşturduğumuz kök sertifikadan imza talebinde bulunur.
Buradaki son aşama olan daha onceden olusturulmus ana
sertifika (CA) kullanilarak TSA'nin gizli anahtarina uygun sertifikanin
üretilmesidir.Bu işlem için oluşturulan tsareq.csr dosyasını kullanıyoruz;
"openssl ca -days 3650 -in /openssl/tsareq.csr -out /openssl/tsacert.pem"
Komut girildiğinde bizden her adımda olduğu gibi bir şifre
isteyecektir.Burada girilecek olan şifre CA ana sertifikasını oluştururken
girdiğimiz şifredir.
Şifreyi doğru girdiğiniz takdirde karşınıza aşağıdaki gibi
bir ekran gelecektir.Sertifikanızı imzalamak ve mevcut veritabanını güncellemek
için sizden onay isteyecektir.Her iki soruyada “y” diyerek ilerliyoruz.
Son olarak aşağıdaki gibi bir ekran karşınıza çıkacaktır.Diğer
sertifika bilgileri update edilecektir.
İşlemler bittiğinde klasör altında openssl klasörü içeriği
aşağıdaki gibi görünecektir;
Serial ve index.txt dosyaları güncellendiği için program
otomatik olarak bunların yedeklerini oluşturacak ve sonralarına “.old” ifadesini
ekleyecektir.
İmzalama İşlemi
Bu bölümde log dosyasının imzalama kısmını anlatmaya
çalışacağım.Öncelikle daha kolay erişilmesi açısından ana dizin altına log
adında bir klasör oluşturup sistemde bulunan syslog adındaki log dosyasını
buraya kopyaladım.
Öncelikle aşağıdaki komut çalıştırılarak imzalanacak dosya
için bir request oluşturuyoruz;
"openssl ts -query -data
/log/syslog -no_nonce -out /openssl/syslog.tsq"
Daha sonra oluşturduğumuz request için bir time stamp token
oluşturacağız.Bu işlemle oluşturduğumuz token ,response yerine kullanılacaktır;
"openssl ts -reply -queryfile
/openssl/syslog.tsq -out /openssl/syslog.der -token_out -config /usr/local/ssl/openssl.cnf"
Komut çalıştırıldığında sizden parolanızı girmenizi
isteyecektir.Burada girmeniz gereken parola TSA private key oluşturulurken
(tsakey.pem) girdiğiniz parola olmalıdır.Eğer parolanız doğru şekilde girilirse
aşağıdaki gibi token oluşturulduğu bilgisi gelecektir.
Bu sırada karşınıza bir
uyarı gelebilir.Bunun nedeni programın default olarak tsaserial
dosyasını aramasıdır.Fakat biz daha önceden serial adında bir dosya
oluşturduğumuz için işlemlerimizi bu dosya ile sorunsuz gerçekleştirecektir.Ayrıca
openssl.cnf dosyası içerisinde yaptığımız konfigürasyon hatalı olursa
çalıştırdığımız komut bize hata döndürecektir.
Bu işlemin ardından klasör içerisinde “syslog.der” adında
bir dosya oluşacaktır.Dosya oluştuğu takdirde imzalama işleminiz gerçekleşmiş
anlamına gelmektedir.Bu dosya herhangi bir text editör yardımı ile açılamaz.Bu
nedenle eğer kontrol etmek isterseniz aşağıdaki komutu kullanabilirsiniz;
"openssl ts -reply -in
/openssl/syslog.der -token_in -text -token_out"
Oluşturulan token dosyası ile imza işleminin doğru bir
şekilde gerçekleştirilip gerçekleştirilmediğini kontrol etmek isterseniz
aşağıdaki komutu kullanabilirsiniz;
"openssl ts -verify -data /log/syslog -in
/openssl/syslog.der -token_in -CAfile /openssl/cacert.pem -untrusted
/openssl/tsacert.pem"
İmzalama işlemi düzgün bir şekilde gerçekleşmişse komutun
çıktısı aşağıdaki gibi olacaktır.
Kullanılan komutların kısaca açıklamaları aşağıdaki gibidir;
req: Belirlediğimiz kök (CA) sertifikayı oluşturur.
new: Yeni bir
sertifika istediği gönderir.
X509: Self-signed bir kök sertifika (CA) oluşturmak için kullanılır.
newkey: Yeni bir
sertifika ve private key oluşturma isteği için kullanılır.Komuttan sonra
belirli parametreler girilmesi gereklidir.Örneğin rsa:2048 parametresi ile 2048
bitlik bir rsa oluşturulur.
days: Sertifikanın ne
kadar süreyle geçerli olacağını belirtmektedir.(Deneme amaçlı 10 yıllık 3650 gün
olacak şekilde girildi ihtiyacınıza göre bir değer verebilirsiniz.)
out: Verilen parametrelere göre çıktı oluşmasını sağlar.
keyout: Out parametresine benzer fakat private key çıktıları
için kullanılmaktadır.
genrsa: RSA için bir private key oluşturulur.PEM
sertifikalar için aes kriptolama kullanılmaktadır.
ca: Sertifika isteklerinin imzalanması için
kullanılmaktadır.
ts: Time Stamp Authority (TSA) işlemleri için kullanılan
parametredir.
query : Time Stamp istekleri oluşturmak için kullanılmaktadır.
reply: Time Stamp response veya token üretmek için kullanılmaktadır.
token_out: Time stamp token üretmek için kullanılmaktadır.
config: İşlemleri gerçekleştirilirken kontrol edilecek
konfigürasyon dosyasını belirtmektedir.
verify: Time stamp token ve datanın doğruluğunu kontrol
etmek için kullanılmaktadır.
CAfile : PEM formatındaki self-signed CA sertifikasını
belirtmek için kullanılmaktadır.
untrusted: PEM formatındaki güvenilir olmayan sertifika
belirtilir.
www.syslogs.org
www.wikipedia.org
www.openssl.org
www.ulakbim.gov.tr