Časť 2 – Riadenie a Kontrola
Útočníci sa po úspešnom preniknutí do zariadenia snažia získať nad zariadením kontrolu (angl. Command & Control, C2) s cieľom využiť ju v ďalších fázach útoku. Veľmi často na tento účel útočníci spúšťajú škodlivé procesy, na hľadanie ktorých sa pozrieme v tejto časti našej série. Zvlášť ukážeme dopyty nápomocné pri identifikácii procesov s podozrivou sieťovou aktivitou, ktoré môžu útočníkovi slúžiť na jednoduchý opätovný prístup do zariadenia (backdoor). Dopyty z tohto blogu je potrebné spúšťať s administrátorskými privilégiami, inak môžu byť ich výsledky neúplné.
Viac o Osquery sa možete dočítať v krátkom článku, ktorý nájdete na našom blogu.
Bežiace procesy
Jedna z najčastejšie používaných Osquery tabuliek “processes” poskytuje množstvo informácie o práve bežiacich procesoch od základných, napríklad cesta ku spustiteľnému súboru, argumenty a PID až po podrobnosti typu využitia strojového času, veľkosti použitej pamäte, množstva dát zapísaných a prečítaných z disku. Nižšie uvedený dopyt predstavuje všeobecný základ, ktorý je možné upraviť podľa toho, aký typ podozrivej aktivity hľadáme. Navyše, demonštruje typické využitie Osquery pri integrácii dát s rôznych tabuliek. Prvé veci čo si treba vo výstupe všímať sú nezvyčajné argumenty interpreterov príkazov ako cmd, powershell, python, cscript a mená procesov bežiace z nezvyčajných priečinkov. Ako príklad uvedieme systémové spustiteľné súbory v akomkoľvek inom priečinku ako System32, prípadne SysWOW64. Za bližší pohľad stoja aj procesy bežiace z AppData, hoci tieto môžu byť aj legitímne. Pri každom procese sa oplatí skontrolovať v kontexte akého používateľa beží a aký je jeho nadradený proces.
Pri práci s relatívne krátkotrvajúcimi javmi je dôležité si uvedomiť možnosti a limitácie Osquery. Keď spustíme dopyt, vrátená informácia informuje o stave v danom okamihu. Pokiaľ proces začne aj skončí medzi dvoma Osquery dopytmi, v tabuľke “processes” ho nenájdeme.
SELECT
p.pid
p.path,
p.cmdline,
u.username,
datetime(p.start_time, "unixepoch"),
p.parent AS parent_pid,
p2.path AS parent_path
FROM processes AS p
JOIN users AS u USING(uid)
JOIN processes AS p2 ON p.parent = p2.pid;
Počúvajúce porty
Tento Osquery dopyt vypíše informácie identifikujúce procesy počúvajúce na sieti. Pri prehliadaní výsledkov je potrebné klásť otázku, či je pre daný proces v poriadku počúvať a či použitý port je pre neho štandardný.
SELECT
lp.pid,
lp.port,
lp.protocol,
lp.address,
p.path,
p.cmdline
FROM listening_ports AS lp
JOIN processes AS p USING(pid);
Otvorené sockety
Podobne ako dopyt z predchádzajúceho odseku, aj nižšie uvedený prináša informácie o procesoch počúvajúcich a komunikujúcich po sieti. Rozdiel je v tomto prípade v dopytovaní sa na otvorené sieťové sockety.
SELECT
s.pid,
p.path,
p.cmdline,
s.local_address,
s.local_port,
s.remote_address,
s.remote_port,
s.state
FROM process_open_sockets AS s
JOIN processes AS p USING(pid);
Haše
V prípade identifikovania podozrivého procesu, jeho spustiteľného súboru alebo iného súvisiaceho súboru je bežnou praxou skontrolovať jeho reputáciu v online databázach ako Virustotal, Hybrid-Analysis, Intezer a pod. Na jednoznačnú identifikáciu súborov sa v praxi využívajú ich hašové odtlačky. Osquery v tomto prípade prichádza na pomoc s nižšie uvedeným dopytom, kombinujúcim tabuľky “file” a “hash”. Haš súboru sa vypočítava na dopytovanom zariadení v momente obsluhovania dopytu a preto je nevyhnutná opatrnosť pri dopytovaní hašov viacerých súborov – môžeme tým značne zaťažiť dané zariadenie. V dopyte sú zahrnuté aj časové odtlačky súvisiace so súborom, ktoré sú veľmi užitočné pre rekonštrukciu časovej osi diania a koreláciu dát z iných zdrojov.
SELECT
f.path,
f.size,
datetime(f.atime, "unixepoch") AS access_time,
datetime(f.mtime, "unixepoch") AS modify_time,
datetime(f.ctime, "unixepoch") AS create_time,
h.sha256
FROM file AS f
JOIN hash AS h
WHERE h.path = f.path AND f.path = "<cesta_ku_suboru>";