1.                                                

Syslog Yapısı ve OpenSSL ile Log İmzalama İşlemleri

'Diğer' forumunda scorp1 tarafından 15 Mart 2016 tarihinde açılan konu

  1. scorp1

    scorp1 New Member

    Katılım:
    15 Mart 2016
    Mesaj:
    6
    Beğeniler:
    0
    Ödül Puanları:
    0

    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.
    [​IMG]



    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.
    [​IMG]

    İ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.
    [​IMG]

    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.
    [​IMG]

    İ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.
    [​IMG]
    Son olarak extendedKeyUsage ,basicConstraints ve keyUsage alanlarını aşağıdaki gibi düzenliyoruz.
    [​IMG]

    İmzalama için GerekliSertifikaları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.
    [​IMG]



    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.
    [​IMG]

    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.
    [​IMG]

    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.
    [​IMG]

    Ş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.

    [​IMG]

    Son olarak aşağıdaki gibi bir ekran karşınıza çıkacaktır.Diğer sertifika bilgileri update edilecektir.
    [​IMG]

    İş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.
    [​IMG]

    [​IMG]


    [​IMG]

    İ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.
    [​IMG]
    Bu sırada karşınıza biruyarı 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"
    [​IMG]

    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.
    [​IMG]

    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
     

Bu Sayfayı Paylaş

Share