Event Viewer yıllardır hepimizin belki de en çok kullandığı Windows ara yüzlerinden bir tanesi. Teknolojinin yıllar içerisin de geldiği noktaya bakarsak 2019 yılında hala o küçük gri ekran üzerinden analiz yapmak benim için her zaman sevimsiz bir eylem olmuştur. Sizde samanlıkta iğne aramaktan yorulduysanız, bence bu yazı oldukça ilginizi çekebilir. Dosya sunucuları üzerinde Auditing operayonu genelde atlanan fakat ihtiyaç anında eğer düzgün bir şekilde yapılandırılmış bir loglama metodolojiniz bulunmuyorsa IT personellerine ciddi geri dönüşleri olabilecek, oldukça önemli bir konu. Günümüzde Dosya Sunucularına özel Audit hizmeti veren birçok uygulama mevcut. Bir kısmı gerçekten benimde çok beğendiğim uygulamalar fakat bu uygulamaların kaliteli olanlarının teknik yetenekleri hariç ortak paydalarından biri de pahalı olmaları.
Açık kaynak kodlu yazılımlar dünya genelinde oldukça popüler ve bir çok IT profesyoneli tarafından hiçbir karşılık beklenmeden yıllardır geliştirilip, ücretsiz bir şekilde hepimizin kullanımına sunuluyor. Ortada bu kadar emek varken ben kişisel olarak bu tarz ürünlere para vermenin yanlış olduğunu düşünenlerdenim. Bugün amacım tamamen ücretsiz bir şekilde, yine birkaç açık kaynak kodlu uygulama kullanarak anlamlı ve tamamen ihtiyaçlarımıza yönelik güzel görseller ile desteklenmiş bir loglama mekanizması kurmak ve istediğimiz anda belki de aylar öncesine ait milyonlarca kayıt içerisinden gerekli olan veriye saniyeler içerisinde ulaşmak.
Hepsi tamamen Open Source olan Elasticsearch, Kibana ve Winlogbeat kullarak sizde aşağıdaki gibi bir Dashboard üzerinden Dosya Sunucunuzu takip edebilir, görmek istediğiniz kayıtlara hızlıca ulaşabilirsiniz. Görsel’in büyük halini görmek isterseniz Buraya tıklayın.
Resim-1
Kurulum için Altyapı Gereksinimleri: İşletim sistemi olarak CentOS 7.5 kullanacağız. Aşağıdaki kaynaklara sahip bir sunucu yeterli olacaktır. İleride yapınız büyürse kaynaklarınızı buna paralel arttırmanızı öneririm.
-
2 Core Vcpu
-
4 GB Memory
-
50 GB disk alanı
Elasticsearch kullanabilmeniz için sisteminizde Java yüklü olması gerekiyor. Burada dikkat etmemiz gereken nokta Versiyon 9 \10 desteklenmiyor, bende yazıda zaten Java 8 üzerinden ilerledim fakat yine de ayrıca belirtmekte fayda var. Ayrıca reverse Proxy görevi görmesi için Nginx kurulumu da yapacağız. Ayrıca her zamanki gibi Nano editör yükleyerek, Firewall ve Selinux ‘ü Disable etmeniz gerekiyor.
3 Aşamalı bir kurulum ve yapılandırma planı hazırladım. Bu şekilde parçalara ayırarak daha net bir şekilde aklınız da yer etmesini istiyorum aslında, sadece komut setlerini takip ederek yani tam olarak sindiremeden kurulumu tamamlanmanızı tavsiye etmem.
-
Elasticsearch ve Kibana Kurulumu
-
File Server Audit Policy aktivasyonu, Winlogbeat Agent kurulumu ve Konfigürasyonlarının yapılması, loğların aktarılması
-
İndex ayarları, Görseller için query dizayn edilmesi ve Dashboard
Elasticsearch ve Kibana ve Kurulumu
Ön gereksinimler kısmında belirttiğimiz gibi ilk önce Java 8 kurulumu ile yapmamız gerekiyor. Aşağıdaki komutu çalıştırarak Java kurulumunu yapın ve versiyonu kontrol edin.
Ön Gereksinimler ile başlayalım
$ sudo yum install java-1.8.0-openjdk
$ java –version
Resim-2
Elasticsearch package spoofing yapılmaması için güvenlik adına ayrı bir KEY ile paketleri imzalanmış durumda. Bu yüzden ilk önce Elasticsearch public GPG key’i download ederek Repository ye eklememiz gerekiyor.
$ sudo rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Kurulum için gerekli repository’imizi ekleyelim. Editor üzerinden elasticsearch.repo dosyasını oluşturun.
$ sudo vi /etc/yum.repos.d/elasticsearch.repo
Aşağıdaki repo bilgilerini girdikten sonra kayderek çıkış yapın.
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Elasticsearch
Kurulumu
Artık hazırız. Elasticsearch’ü yükleme aşamasına geçebiliriz. Aşağıdaki komutu çalıştırarak yüklemeyi tamamlayabilirsiniz.
$ sudo yum install elasticsearch
External bir kaynaktan erişebilmek için yapılandırma içerisinde birkaç parametreyi değiştirmemiz gerekiyor. YML dosyasını açarak;
$ vi /etc/elasticsearch/elasticsearch.yml
Aşağıdaki satırı Uncomment duruma getirin. Network.host kısmını localhost’dan 0.0.0.0 a çekin. Aşağıdaki resimde gösterildiği şekilde gözükmesi gerekiyor.
Resim-3
Servisi Start ettikten sonra ve eğer sunucu yeniden başlarsa otomatik olarak Start olması için Enable duruma getirelim.
$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
Servisin çalıştığından emin olmak için basit bir request gönderek test edin, aşağıdaki gibi bir çıktı almanız gerekiyor. Eğer ilk seferde response alamaz iseniz lütfen Firewall ve Selinux’un kapalı ve Disable olduğundan emin olun. Eğer her şey yolunda ise bir süre bekleyerek tekrar deneyin.
$ curl -X GET “localhost:9200”
Resim-4
Kibana Kurulumu
Kibana ya dışarıdan erişim için Reserve Proxy olarak kullanmak ve erişim yapacak kişiler için Web Interface üzerinden kullanıcı adı\şifre talep ederek doğrulama yapmak üzere Nginx kurulumu yapmamız gerekiyor.
Nginx i yükleyebilmemiz için ilk önce EPEL repository’i eklememiz lazım.
$ sudo yum install epel-release
Artık Nginx i yükleyebiliriz,aşağıdaki komutu çalıştırabilirsiniz.
$ sudo yum install nginx httpd-tools
Nginx üzerinden Kibana ya erişirken kullanmak üzere username\password belirleyelim. Komutu çalıştırdıktan sonra şifrenizi girerek doğrulayın, çıktıları kaydedin.
$ echo “kibanawebuser:`openssl passwd -apr1`” | sudo tee -a /etc/nginx/htpasswd.users
Resim-5
Nginx üzerinde Virtual Host yapılandırmamızı yaparak devam ediyoruz. Uzaktan erişim için bir FQDN belirleyin. Ben bu örnekte “fileserveraudit.demo.com” olarak belirledim, burayı isteğinize göre değiştirebilirsiniz.
$ sudo vi /etc/nginx/conf.d/fileserveraudit.demo.com.conf
Aşağıdaki konfigürasyonu yapıştırın, Server_name kısmını bir önceki aşamada belirlediğiniz FQDN’i girerek kendinize göre düzenleyin, kayderek çıkış yapın.
server {
listen 80;
server_name fileserveraudit.demo.com;
auth_basic “Restricted Access”;
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Resimde gösterildiği gibi bir konfigürasyona sahip olmanız gerekiyor.
Resim-6
Konfigürasyonda herhangi bir hata var mı diye kontrol ediyoruz.
$ sudo nginx –t
Test is successfull mesajını görmek önemli.
Resim-7
Servisi Start ve Enable ederek kurulumu bitiriyoruz.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Repo’yu daha önce eklediğimiz için hızlıca Kibana kurulumuna geçiyoruz. Kurulum sonrası her zamanki gibi servisi Start ederek, Enable duruma getiriyoruz.
$ sudo yum install kibana
Yükleme bittikten sonra yine birkaç konfigürasyon değişikliği yapmamız gerekiyor.
$ nano /etc/kibana/kibana.yml
Aşağıda belirtilen satırları Uncomment ederek, kaydedip çıkış yapın.
server.port: 5601
server.host: “localhost”
elasticsearch.url: “http://localhost:9200”
$ sudo systemctl start kibana
$ sudo systemctl enable kibana
http://fileserveraudit.demo.com adresi üzerinden Kibana arayüzüne erişebiliriz. Tabi ki siz burada ne belirlediyseniz o adres üzerinden giriş yapabilirsiniz, DNS kaydını local kullanıyorsanız bağlanmak istediğiniz istemci ve Centos üzerinde HOSTS dosyasına ilgili ip adresi ve FQDN’i girmeyi unutmayın. Ngnix kurulumu sırasında belirlediğiniz ( username: kibanawebuser olacak set etmiştim ben) kullanıcı adı ve şifre ile login oluyoruz.
Resim-8
File Server Audit Ayarları ve Winlogbeat Kurulum\Konfigürasyonu
File Server Audit Ayarları
File server üzerinden logları alabilmeniz için ilk önce Audit Policy üzerinde bir kaç konfigürasyon yapmanız gerekiyor. Domain Controller üzerinden GPO ile de halledebilirsiniz fakat ben size local group policy üzerinden nasıl yapabilirsiniz onu göstereceğim. Sunucu üzerinde Start/RUN dedikten sonra gpedit.msc yazarak entera basın . Object Access kategorisi içerisinde Audit File System’i seçerek Configuration the following events diyerek “Success” i işaretleyin, istediğinize göre “Failure” eventlarıda loglayabilirsiniz.
Resim-9
Global Object Access Auditing kategorisi altında; File System’e tıkladıktan sonra “Define the Policy Settings” i işaretleyin ve “Configure” e tıklayarak karşınıza çıkan ekran üzerinde “Add” butonuna basın. “Everyone” için kategori “success” olacak şekilde loglanmasını istediğiniz aksiyonları işaretleyin. Ben sadece hangi dosyaları kimin sildiği ile ilgilendiğim için silinen dosyalar ve permission değişikliklerinin loglanması için ilgili seçenekleri seçtim
Resim-10
Winlogbeat Kurulum ve Konfigürasyon
Bu çalışmaları loğlarını almak istediğimiz file server üzerinde yapacağız. Buraya tıklayarak ilgili dosyaları indirin.
-
İndirdiğiniz dosyaları zip’ten çıkartın
-
C:\Program Files\ altında “winlogbeat” diye bir folder oluşturarak dosyaları buraya kopyalayın.
Resim-11
Notepad++ yüklü değilse öncesinde yüklemenizi öneririm.
-
Winlogbeat.yml dosyasını notepad++ ile açın
Winlogbeat.event.logs: altında bulunan değerleri resimdeki gibi düzenleyin.
– name: Security
– name: System
– name: Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
Resim-12
Oputput.elasticsearch: altındaki host bilgisini kendi ip adresiniz ile düzenleyerek Uncomment edin. Dosyayı kaydererek çıkın.
Resim-13
-
Powershell üzerinden winlogbeat path’ine giderek;
.\install-service-winlogbeat.ps1 diyerek servis olarak yüklemeyi yapın.
Resim-14
-
Services altından Winlogbeat servisini start edin
Resim-15
Index eklenmesi, Query Dizayn ve Dashboard Hazırlanması
Index Eklenmesi
Management sekmesinden “Index Patterns” ‘e girin.
Resim-16
“Create İndex Pattern” butonuna basın. Sağ alt tarafta resimde olduğu gibi winglogbeat üzerinden gönderilen loğların tarih bilgisi ile beraber gözüküyor olması gerekli. Hemen gelmez ise bir süre bekleyin ve sayfayı yenileyerek tekrar bakın. Sağ alt tarafta “winglobeat-6.5.4-XXXX” ‘i görene kadar index pattern oluşturamayacaksınız.
Resim-17
Açılan ekran üzerindeki kutucuğa “winlogbeat*” yazarak Next e tıklayın. Bir sonraki ekranda “@timestamp” i seçtikten sonra index eklemeyi tamamlayabilirsiniz.
Resim-18
Discover ekranı üzerinden kontrol ettiğinizde loğların yavaş yavaş gelmeye başladığını görebilirsiniz. Tebrikler, loğlarınız başarılı bir şekilde elasticsearch üzerinden depolanıyor.
Resim-19
Query Görsellerinin hazırlanması\Yüklenmesi
Viualize sekmesi altından istediğiniz birçok farklı formatta anlamlı görseller hazırlayabilirsiniz. Windows file server özelinde hazırladığım query’ler ile düzenlediğim dashboard görsellerini Buraya tıklayarak indirin. JSON dosyasını zip’ten çıkatarak; Management\Saved Object\Import seçenekleri üzerinden import edin.
Resim-20
Dashboard Hazırlanması
Dashboard menüsü üzerinden yeni bir dashboard ekleyerek “Add Panel” dedikten sonra biraz önce import ettiğimiz görselleri seçin.
Resim-21
Artık sonucu görmek için hazırız.
Resim-22
Anlatım için teşekkürler. Sizin anlatım ile Virtual Centos 7x de başarılı olamadım. 2ci denemede kibana panele eriştim windows tan log gelmedi.
Yabancı makalelerde Elasticsearch , Kibana ve Logstash filebeat şeklinde kurulum yapıyorlar. Çok karmaşık işin içine Linux girince herşey manual.
Ubuntu 20.04 basic server kurdum kibana 7.10.x yı bir şekilde çalıştırdım windows 2019 file server dan loglar gelmeye başladı.
Dashboard olayı çok yetersiz anlamadığım terimler yüzünden tasarlayamadım. Kibanadan sonra yapılacaklarıda anlatan olmamış.
Sizin import dosya sürümü eskide kalmış yeni versiyona uyarlayamadım.
Merhabalar, evet bu yazıyı yazdıktan sonra bir çok şey değişti 🙂 Belki de makaleyi güncelleme vakti gelmiştir bu vesile ile. 7.10 ‘u çok başarılı buluyorum. Logstash ‘ı dahil etmedim bu çalışmaya, olabildiğince basic kalsın istemiştim o zaman.
Eğer siz logstash ile beraber kurduysanız file server özelinde winlogbeat.yml dosyasının daha custom ve güncel halini paylaşayayım, işinize yarar umarım.
local aksiyonları exclude etmek istedim ki loglarda boşuna yer kaplamasın ve sadece user’ların aktivitelerini görebileyim, bunuda Subject User ID ile yaptım. SID ve logstah server bilgilerini kendinize göre düzenleyip kullanabilirsiniz isterseniz, oldukça yerden tasarruf ettiriyor
winlogbeat.event_logs:
– name: Security
event_id: 4663
processors:
– drop_event:
when:
and:
– or:
– equals.winlog.event_id: 4663
– equals.winlog.event_data.SubjectUserSid: S-1-5-18
output.logstash:
# The Logstash hosts
hosts: [“logsth01.farukterzioglu.net:5044”, “logsth02.farukterzioglu.net:5044”]
index: ‘SERVERADILOG’
Faruk hocam çok teşekkürler, şuan deneme amaçlı kurdum mantığını anlamaya çalışıyorum. Makalelerde kişiden kişiye yöntem değişyor şuanki kurulumda logstash kurulu fakat kullanmıyor sanırım 🙂 önceki başarızı kurulumda anlatan kişi direkt logstash veri gönderiyordu.
Dediğiniz gibi çok yer kaplıyor ve gereksiz local eventlar var. Benimde amacım File Server kullanıcıları takip etmek. Yeni sürüm anlatım gelecekse beklerim 🙂
Muhtemelen en az 1-2 ay sonra ancak vaktim olur Ömer.
Graylog mu? Kibana mı? sizin graylog makalenizide başka platformda gördüm sanki.
2 sinide test amaçlı kurdum mantık aynı kibana biraz daha sıcak geldi.
Lepide gibi kullanımı kolay değil işin içinde linux girince, başka bildiğiniz open source audit yazılım var mı?
Java haddinden fazla kaynak tüketiyor, Elasticsearc, Logstash, vs.vs. bi dünya kurulum yapılıyor linux tarafında bunu sevmiyorum tek paket bi yazılım yok.
Tercih meselesi aslında, ELK bana daha özelleştirilebilir olması ve community support’u yüzünden bana da hep daha sıcak gelmiştir. Kurumsal uygulamalar zaten hazır olarka dizay edildiği ve kolay olduğu için ücretli , açık kaynak kodlu projeler için emek harcamak gerekiyor. Mshowto yada linkedin de görmüş olabilirsiniz. Graylog’da kullanıyorum ve çok memnunum. Graylog hazır paket appliance olarak internet sitesinde zaten mevcut, sadece import edip hızlıca kurabilirsiniz 10 dk nızı almaz.
Sonrasıdan makeledeki gibi nxlog kullarak file server’daki logları direk graylog’a atabilirsiniz.
http://www.farukterzioglu.net/graylog-ile-ucretsiz-file-server-audit-nasil-yapilir/
Faruk hocam Teşekkürler, bir türlü Kibana ve Graylog içim ısınmadı veya yeni bir şey öğrenmeye vakit yok diyelim.
Linux sistemleri üzerinde çokta ileri seviye değilim.
Araştırmaya devam ettim basit sade ara yüzlü logalyze adında open source yazılımı buldum.
http://www.logalyze.com/product/screenshots
Ekran Görüntülerine de bakarsanız güzel duruyor sade olması hoşuma gitti.
2018 de versiyon yenilemiş biraz makale ve destek hizmeti zayıf. Windows versiyonu var virtualde ara yüzüne bakmak için kurup sildim.
Siz denediniz mi bunu?
Kurulumu ile sıkıntı yaşadım.
Kurulumu anlatan sitede mevcut değil, youtube sitesinde 3 part video var, ubuntu 20.04 basic server kurdum java kısmında takıldım durdum.
4-5 virtual kurup sildim java’dan sebep.
LOGalyze ilede makale bekleriz.
Java java demişken windows gibi değil, oracle java open jdk jre ubuntu üzerinde çok kafamı karıştırdı.
Benim amacım hafif sistem özelliğinde loglama yapsın. java denilen zıkım çok sistem kaynağı tüketiyor.
Kibana kurarken bi komuta denk geldim, java çok hafif çalışıyordu not almayı da unuttum daha da bulamadım.
Java konusunda tavsiyeniz nedir.
Merhaba,
Windows Olay Günlükleri message= etiketi içine toplaması çok saçma. Win Event karmaşık Kibanada, graylog vs windows’tan daha karmaşık.
Sadece veri depoluyor, geriye dönük veri aramaya kalktığınızda başını kaşı dur.
Anlatımlara bakıyorum Logstash ayrıştırmaya filter uygulamaya yarıyor deniliyor fakat Windows için pekte kolay değil.
Örnekle açıklamak gerekirse; Silinen dosyayı kimin sildiğini bulmak için, Kibana tarafında filtre etmek oldukça zor iş. Windows event viewer ile aramak daha kolay.
Github olmak kaydıyla diğer platformları araştırdım winloadbeat tan gelen verileri logstash ile ayrıştırmayı tam olarak bulamadım.
Bazı meşhur ücretli uygulamalara bakıyoruz tek tıkla filtre ediliyor, windows tarafından gelen veriler kategorize edilmiş halde oluyor.
Bildiğiniz kaynak varsa paylaşın lütfen.
Selamlar, hangisi olduğu farketmez bu uygulamalar da deneyim kazandıkça o kadar da karmaşık gelmeyecektir. Bu yazı oldukça eskidi yakında güncel versiyon üzerinden bir ELK serisi daha yazacağım.
Genelde benzer mail ve yorumlar alıyorum o yazıda özellikle logu gönderiken filtreleme ve logstash üzerinden geçirirken tek bir header içerisinde (message örneğin) ayrıştırma konularına ağırlık vermek farz oldu gibi. 🙂
Acil lazım ise logstash grok filter olarak aratarak sadece belirli bir event ID için gelen logları nasıl ayrıştırarak elastic üzerine yazabileceğinizi aratabilirsiniz.
Örnek olması açısıdan da farklı bir event için kullandığım filter’ı ekliyeyim.
# Logon Event
if [event_id] == 4648 {
grok {
match => { “message” => “%{DATA:messageTitle}\n\n%{DATA:subjectHeader}\n\t%{DATA:subjectSecurityIDTitle}\t\t%{DATA:subjectSecurityID}\n\t%{DATA:subjectNameTitle}\t\t%{DATA:subjectName}\n\t%{DATA:subjectDomainTitle}\t\t%{DATA:subjectDomain}\n\t%{DATA:subjectLogonIDTitle}\t\t%{DATA:subjectLogonID}\n\t%{DATA:subjectLogonGUIDTitle}\t\t%{DATA:subjectLogonGUID}\n\n%{DATA:accountCredsHeader}\n\t%{DATA:accountNameTitle}\t\t%{DATA:accountName}\n\t%{DATA:accountDomainTitle}\t\t%{DATA:accountDomain}\n\t%{DATA:accountLogonGUIDTitle}\t\t%{DATA:accountLogonGUID}\n\n%{DATA:targetServerHeader}\n\t%{DATA:targetServerTitle}\t%{DATA:targetServer}\n\t%{DATA:targetServerInfoTitle}\t%{DATA:targetServerInfo}\n\n%{DATA:procInfoHeader}\n\t%{DATA:procIDTitle}\t\t%{DATA:procID}\n\t%{DATA:procNameTitle}\t\t%{DATA:procPath}\n\n%{DATA:networkInfoHeader}\n\t%{DATA:networkAddressTitle}\t%{DATA:networkAddress}\n\t%{DATA:networkPortTitle}\t\t\t%{DATA:networkPort}\n\n%{GREEDYDATA:messageEnd}” }
}
mutate {
remove_field => [ “subjectHeader”, “subjectSecurityIDTitle”, “subjectNameTitle”, “subjectDomainTitle”, “subjectLogonIDTitle”, “subjectLogonGUIDTitle”, “accountCredsHeader”, “accountNameTitle”, “accountDomainTitle”, “accountLogonGUIDTitle”, “targetServerHeader”, “targetServerTitle”, “targetServerInfoTitle”, “targetServerInfo”, “procInfoHeader”, “procIDTitle”, “procNameTitle”, “networkInfoHeader”, “networkAddressTitle”, “networkAddress”, “networkPortTitle”, “networkPort”, “messageEnd”, “message” ]
rename => [ “messageTitle”, “[log][title]” ]
rename => [ “subjectSecurityID”, “[log][subjectSID]” ]
rename => [ “subjectName”, “[log][subjectAccount]” ]
rename => [ “subjectDomain”, “[log][subjectDomain]” ]
rename => [ “subjectLogonID”, “[log][subjectLogonID]” ]
rename => [ “subjectLogonGUID”, “[log][subjectLogonGUID]” ]
rename => [ “accountName”, “[log][accountName]” ]
rename => [ “accountDomain”, “[log][accountDomain]” ]
rename => [ “accountLogonGUID”, “[log][accountLogonGUID]” ]
rename => [ “targetServer”, “[log][targetServer]” ]
rename => [ “procID”, “[log][processID]” ]
rename => [ “procPath”, “[log][processPath]” ]
}
}