Python ile Linux Sistemlerden Veri Toplama

Bir siber olay sonrası kanıtların incelenmesi ve korunması için verilerin toplanabilmesi gerekir. Veri toplama hassas bir işlemdir, hedef makinenin çökmesine, verilerinin bozulmasına yol açmamalıdır. Bu nedenle veri toplama işlemi yapılırken hedef sistem üzerinde minimum düzeyde değişiklik yapılmalıdır.

Verilerin bozulması, hedef sistemde gereksiz değişikliklerin yapılması, sistemin çökmesi gibi durumlarla karşılaşmamak için toplama işlemini otomatize etmek gerekir. Ayrıca toplama işlemi yapmadan önce aşağıdaki durumların da değerlendirilmiş olması gerekir:

  • Hazırlanan otomasyon daha önce test edildi mi?
  • Performans sorunu yaratıyor mu?
  • Sistemde çökme meydana gelirse ne olacak?

Ayrıca temel düzeyde hazırlanan bir aracın toplayabilmesi gereken veriler vardır. Bunlar:

  • Sistem saat ve tarihi
  • İşletim sistemi bilgisi
  • Genel sistem bilgileri
  • Kullanıcı ve grup listesi
  • Ağ detayları
  • Ağ bağlantıları
  • Servisler ve programlar listesi
  • Mevcut driver lar
  • Dosyalar
  • Aktif prosesler
  • Tarayıcı geçmişi
  • Sistem konfigürasyon verileri
  • ARP tablosu, DNS cache

NOT: Eğer dosya transferi yapılacaksa dosyanın aktarım aşamasında değişmediğinin teyit edilebilmesi için hash bilgisi de gönderilmelidir.

Basit bir otomasyonu kendim oluşturmak istedim ve ilk olarak Python ile client – server TCP socket yapısını hazırladım.

Sunucuya bağlı olan admin, ulaşmak istediği veriler için komutu sunucuya iletiyor. Sunucu da komutu istemciye iletip, aldığı veriyi admine yönlendiriyor.

İlk olarak admin ve client ın bağlanabileceği server için internetten kod örneği buldum.

Ardından admin kısmında verileri talep etmek ve almak için TCP socket oluşturdum. 

İstemci tarafında komutları bekleyen dinleyici (main.py) ve alınan alınan komutlar doğrultusunda verileri oluşturan (data.py) Python kodlarını hazırladım.

Dinleyiciye gelen komutlar “!” ile başlarsa “data.py” içerisindeki getValue() fonksiyonuna gönderiliyor.

Eğer toplanmak istenen veri destekleniyor ise istemci tarafında veriler toplanıyor. Toplanmak istenen bilgiler ve bilgilerin toplanması için çalıştırılan komutlar:

VeriKomut
Sistem tarih ve zaman bilgisidate
İşletim sistemi bilgisicat /etc/issue
Kernel versiyon bilgisiuname -a
Uptimew
Kullanıcı hesaplarıcat /etc/passwd
Gruplarcat /etc/group
Ağ bağlantılarınetstat -anp
Driverlarlsmod
Network interfacesifconfig -a
Routing tablenetstat -rn

Uygulamayı test etmek için 3 ayrı sanal Ubuntu makinesi hazırladım ve yazılımları kurdum.

MakineIP
Server 192.168.131.128
Admin 192.168.131.129
Client 192.168.131.132

Server terminaline baktığımda istemci ve adminin sunucuya başarıyla bağlandığını gördüm.

Admin kullanıcısı ile tarayıcı geçmişini talep ettiğimde aşağıdaki görselde görüldüğü gibi istemcinin geçmişine sahip oldum.

Çalıştırılan bazı komutlar:

Bash history

Kernel version

Kaynak kodların tamamına Github sayfamdan ulaşılabilir.

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir