Echo „Hallo Welt!“;
Ich habe ein bisschen in Github gestöbert und habe Folgendes ausgegraben.
OSQuery ist ein schickes Projekt der Firma „Facebook“, welches zum Zweck ihrer eigenen Systemüberwachnung entstanden ist.
Es bildet Systeminformationen in einer schnellen SQLite- bzw. Postgresdatenbank ab.
Nach der Installation als Package osquery-1.5.1.pkg kann man direkt loslegen.
In der Bash kann man mit dem Aufruf von „osqueryi“ die interaktive Query Shell starten.
Hier eröffnet einem die interne Hilfe mehr Information zu dem was hier möglich ist.
osquery> .help Welcome to the osquery shell. Please explore your OS! You are connected to a transient 'in-memory' virtual database. .all [TABLE] Select all from a table .bail ON|OFF Stop after hitting an error; default OFF .echo ON|OFF Turn command echo on or off .exit Exit this program .header(s) ON|OFF Turn display of headers on or off .help Show this message .mode MODE Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns. (See .width) line One value per line list Values delimited by .separator string pretty Pretty printed SQL results .nullvalue STR Use STRING in place of NULL values .print STR... Print literal STRING .quit Exit this program .schema [TABLE] Show the CREATE statements .separator STR Change separator used by output mode and .import .show Show the current values for various settings .tables [TABLE] List names of tables .trace FILE|off Output each SQL statement as it is run .width [NUM1]+ Set column widths for "column" mode .timer ON|OFF Turn the CPU timer measurement on or off osquery>
Wir sind mal neugierig und schiessen auf der osquery Shell das folgende Kommando ab:
osquery> .tables .. => os_version => osquery_extensions => osquery_flags => osquery_info => osquery_packs => osquery_registry => osquery_schedule => package_bom => package_receipts => passwd_changes => pci_devices => preferences => process_envs => process_events => process_memory_map => process_open_files => process_open_sockets => processes => routes => safari_extensions => sandboxes => shell_history => smbios_tables => startup_items => suid_bin => system_controls => time ..
Was wir hier erhalten, sind die Systemfakten welche automatisch im Hintergrund in festgelegten Intervallen abgefragt werden.
Beispiel 1)
Fragen wir zum Test die ‚os_version‘ ab.
Dies tun wir folgendermaßen:
osquery> select * from os_version; +----------+-------+-------+-------+-------+ | name | major | minor | patch | build | +----------+-------+-------+-------+-------+ | Mac OS X | 10 | 10 | 4 | 14E46 | +----------+-------+-------+-------+-------+
Dies ist ein Beispiel für ein einfaches Abfragestatement. (Wenn wir wissen wollen welche OS-Version unsere Rechnerflotte hat.)
Beispiel 2)
Ein Komplexeres Beispiel in SQL:
osquery> select distinct process.name, listening.port, listening.address, process.pid FROM processes AS process JOIN listening_ports AS listening ON process.pid = listening.pid; +----------------+-------+---------+-----+ | name | port | address | pid | +----------------+-------+---------+-----+ | UserEventAgent | 0 | 0.0.0.0 | 251 | | UserEventAgent | 0 | | 251 | | Adium | 55648 | 0.0.0.0 | 261 | | SystemUIServer | 59036 | 0.0.0.0 | 265 | +----------------+-------+---------+-----+
Dies wird alles mit durch OSQuery in festgelegten Intervalle in das Logfile überführt.
Es liegt in unserem Beispielsystem unter
/var/log/osquery.log
und kann mit einer geeigneten Software wie Icinga & Logstash weiter ausgewertet werden.
Nun noch der knifflige Teil des Setups: Ich habe kurz angerissen, wie die SQL Syntax von OSQuery funktioniert und angedeutet, wie flexibel das Ganze ist.
Die unbeantwortete Frage ist allerdings, wie ich meine eigenen Checks in einem Interval definiere.
Dies erfolgt bei OSQuery über eine simple ‚.conf‘-Datei. In diesem Beispiel liegt diese unter /var/osquery/osquery.conf.
In der osquery.conf wird beispielsweise ein Check mit der folgenden Syntax erstellt:
.. excerpt "schedule": { "info": { "query": "select * from startup_items" "interval": 3600 } } ../excerpt
Fazit:
Aufgrund der simplen Abfragestatements und den kleinen Footprint durch eine SQLite Datenbank kann man im Hintergrund auf Linux & OS X Clients/Servern einen Faktencheck durchführen und durch andere Tools „in der Ferne“ auswerten lassen.
Kurzum, man bekommt ein mächtiges Werkzeug für Devops und Systemadministratoren, welches an die meisten Umgebungen angepasst werden kann.
Bis zum nächsten Post!
0 Kommentare