Časť 1 – Perzistencia
V nasledujúcej trojdielnej sérii si na jednoduchých príkladoch priblížime využitie Osquery pri hľadaní kybernetických hrozieb na zariadeniach s operačným systémom Windows. Na predvedenie informácií viditeľných pomocou Osquery stačí dopyty spúšťať len na jednom zariadení. Treba však mať na pamäti, že sila Osquery sa naplno prejaví v jeho plošnom nasadení a centrálnom riadení, kedy ten istý dopyt vráti dáta z celého prostredia. V prvej časti ukážeme niekoľko dopytov, ktoré pomáhajú odhaliť perzistenciu vytvorenú útočníkom alebo škodlivým kódom.
Viac o Osquery sa možete dočítať v krátkom článku, ktorý nájdete na našom blogu.
Plánované úlohy
Notoricky známa technika vykonania škodlivého kódu a zabezpečenia perzistencie je vytvorenie plánovanej úlohy (scheduled task), prípadne škodlivá úprava legitímnej (MITRE ATT&CK T1053.005). Vo výstupe nižšie uvedeného dopytu sa oplatí všímať nezvyčajné názvy úloh, cesty ku spustiteľným súborom a ich príkazové argumenty. Výrazne môže pomôcť porovnanie vráteného zoznamu úloh voči zoznamu zaručene preverených úloh. Skepticizmu nikdy nie je dosť - útočníci totiž často vymýšľajú veľmi dôveryhodne pôsobiace názvy úloh, avšak z pochopiteľných príčin ku nim nie je možne na internete nájsť akúkoľvek dokumentáciu.
SELECT
name,
action,
path,
state,
datetime(last_run_time, "unixepoch") AS last_run_time,
datetime(next_run_time, "unixepoch") AS next_run_time
FROM scheduled_tasks;
Služby
Technika dosiahnutia perzistencie vytvorením Windows služby (service), prípadne úpravou už existujúcej legitímnej úlohy je v MITRE ATT&CK zapísaná pod označením T1543.003 a je často útočníkmi používaná. Podobne ako pri plánovaných úlohách, aj v tomto prípade často útočníci vymýšľajú dôveryhodne znejúce názvy služieb, ktoré ľahko zmätú nepripravených. Treba prešetriť služby, ktorých proces sa nachádza v nezvyčajnom priečinku, notorický príklad je AppData a jeho podpriečinky. Navyše, argumenty pre proces svchost môžu obsahovať znaky &&, čo pri interpretovaní príkazu pri spúšťaní služby spôsobí vykonanie ľubovoľného príkazu pripojeného na koniec.
SELECT
name,
display_name,
status,
start_type,
path,
module_path
FROM services
Položky Startup
Po prihlásení sa používateľa do svojho účtu spustí operačný systém programy linkované v tzv. Startup priečinkoch, či už celosystémových, alebo špecifických pre daného používateľa. Takisto systém automaticky vykoná príkazy zapísané v kľúčoch Windows registra Run, RunOnce, RunServices a RunServicesOnce. Zneužitie tejto funkcionality útočníkmi na vytvorenie perzistencie je popísané v MITRE ATT&CK ako technika T1547.001. V položkách vypísaných nižšie uvedeným dopytom je treba všímať si umiestnenia spustiteľných súborov v nezvyčajných priečinkoch a nezvyčajné príkazy v ich argumentoch, obzvlášť ak sa spúšťa príkazový riadok, PowerShell alebo iný interpreter.
SELECT
name,
path,
args,
source,
username
FROM startup_items;
WMI
WMI (Windows Management Instrumentation) obsahuje funkcionalitu umožňujúcu vykonanie kódu, ktoré je podmienené odohraním sa vopred definovanej udalosti. Funguje to spojením troch prvkov: filter udalostí – prepojenie – spotrebiteľ (z angl. Event Filter – Binding – Consumer). Filter udalosti definuje udalosť pri ktorej sa vygeneruje spúšťací signál. Ten sa cez vytvorené prepojenia dostane ku spotrebiteľom, ktorí obsahujú definíciu úkonu a ten sa vykoná. Útočníci zneužívajú vytvorenie takejto trojice WMI objektov na dosiahnutie perzistencie, čo je v MITRE ATT&CK popísané ako technika T1546.003. Osquery nám pomôže do týchto WMI objektov nahliadnuť pomocou štvorice nižšie uvedených dopytov. V prvom rade si treba v spotrebiteľoch všímať podozrivé príkazy a cesty ku skriptom a spustiteľným súborom. Prepojenia nás následne privedú ku filtrom, ktoré nám povedia čo sú spúšťače danej podozrivej aktivity.
SELECT
name,
command_line_template,
executable_path,
relative_path
FROM wmi_cli_event_consumers;
SELECT
name,
scripting_engine,
script_file_name,
script_text,
relative_path
FROM wmi_script_event_consumers;
SELECT
consumer,
filter,
relative_path
FROM wmi_filter_consumer_binding;
SELECT
name,
query,
relative_path
FROM wmi_event_filters;