Osquery ile hibrit ortamlarda ücretsiz uçnokta görünürlüğü sağlamak

Giriş

Facebook tarafından, kendi hibrit ortamlarını izleyebilmek amacıyla geliştirilen osquery, sağladığı uçnokta görünürlüğü anlamında oldukça gelişmiş yeteneklere sahiptir.

Gerek açık kaynak kodlu olması, gerek arkasında Facebook gibi bir şirketin olması da -özellikle ticari EDR ürünleri için bütçeniz yoksa- ürüne bir şans verme anlamında oldukça haklı bir gerekçe olacaktır.

Windows, macOS işletim sistemleri ve Redhat, Ubuntu vb. gibi bilindik Linux dağıtımları için desteği olan osquery, esasında uçnoktada çalışan bir in-memory SQL veritabanı gibi davranmakta ve uçnoktaya dair olayları loglamaktadır. Sonrasında loglanan bu bilgileri SQL diliyle kullanıcıya sunmaktadır.

Temel olarak 2 bileşeni vardır;

1-) osqueryd: Zamanlanmış sorgular da çalıştırabileceğiniz -logları da toplayan- servis
2-) osqueryi: osquery sorguları çalıştırabileceğiniz interaktif arayüz

Temel kullanım

osqueryi komutuyla gireceğiniz interaktif konsolda ilgili komutları çalıştırabilirsiniz

osquery> SELECT * FROM processes WHERE on_disk = 0;

Bu sorgu, mevcutta çalışan process'lerden diskte bir izi olmayan process'leri gösterecektir

Sistemde çalışan 5 process'e ait process id, process adı ve çalıştığı dizin bilgisini çekmek istersek;

osquery> SELECT pid, name, path FROM processes LIMIT 5;
+-----+----------------+---------------------------------------------------------------------------------------+ | pid | name | path | +-----+----------------+---------------------------------------------------------------------------------------+ | 0 | kernel_task | | | 1 | launchd | /sbin/launchd | | 45 | syslogd | /usr/sbin/syslogd | | 46 | UserEventAgent | /usr/libexec/UserEventAgent | | 49 | uninstalld | /System/Library/PrivateFrameworks/Uninstall.framework/Versions/A/Resources/uninstalld | +-----+----------------+---------------------------------------------------------------------------------------+ osquery>

Örneğin şimdi de, bir bağlantı talebi bekleyen, listening durumdaki, process'leri PID değerleriye beraber listeleyelim;

osquery> SELECT DISTINCT process.name,listening.port,process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid WHERE listening.address = '0.0.0.0'; +-------------------+-------+-----+ | name | port | pid | +-------------------+-------+-----+ | loginwindow | 0 | 98 | | UserEventAgent | 0 | 282 | | rapportd | 62903 | 296 | | rapportd | 3722 | 296 | | identityservicesd | 0 | 306 | | WiFiAgent | 0 | 307 | | assistantd | 0 | 310 | | sharingd | 0 | 343 | | SystemUIServer | 0 | 402 | | SystemUIServer | 56816 | 402 | | Dropbox | 17500 | 405 | | WiFiProxy | 0 | 419 | | Spotify | 57621 | 423 | | Spotify | 62930 | 423 | | Spotify | 1900 | 423 | | Spotify | 50151 | 423 | +-------------------+-------+-----+ osquery>

Sistemdeki kullanıcıları çekelim;
SELECT * FROM users;

Nelere bakabiliyoruz?

Sisteme ait loglanan tüm bilgilere dair tablo isimlerini osqueryi uygulamasına yazacağınız .tables komutuyla görebilirsiniz;

osquery> .tables => account_policy_data => acpi_tables => ad_config => alf => alf_exceptions => alf_explicit_auths => alf_services => app_schemes => apps => apt_sources => arp_cache => asl (...)

Yine bir tabloya ait sütun isimleri için .schema ifadesini kullanabilirsiniz;

osquery> .schema yara
CREATE TABLE yara(
pathTEXT,matchesTEXT,countINTEGER,siggroupTEXT,sigfileTEXT,stringsTEXT,tagsTEXT, PRIMARY KEY (path,matches,siggroup,sigfile)) WITHOUT ROWID;
CREATE TABLE yara_events(
targetpathTEXT,categoryTEXT,actionTEXT,transactionidBIGINT,matchesTEXT,countINTEGER,stringsTEXT,tagsTEXT,timeBIGINT,eidTEXT HIDDEN);
osquery>

Sunulan veri listesi: https://osquery.io/schema/3.3.0

Kaynak:

https://www.osquery.io
https://github.com/facebook/osquery

Furkan ÇALIŞKAN

Read more posts by this author.