- Výpisy pamäte jadra zachytávajú stav systému pri kritických zlyhaniach a sú nevyhnutné pre ladenie a bezpečnostný audit.
- V systéme Windows sa analyzujú pomocou WinDbg alebo KD, pričom sa na vyhľadanie ovládačov a príčin chyby používajú symboly a príkazy, ako napríklad !analyze -vy .bugcheck.
- V Linuxe vám nástroje ako crash, LiME a gcore umožňujú extrahovať a študovať výpisy jadra a procesov so zameraním na ochranu citlivých údajov.
- FreeBSD a iné unixové systémy vyžadujú jadrá kompilované so symbolmi a použitie kgdb, pričom sa pri interpretácii výsledkov vždy spoliehajú na dokumentáciu a zdrojový kód.

Keď operačný systém spanikári alebo sa výrazne zrúti, jediný spôsob, ako pochopiť, čo sa stalo, je... výpis pamäte jadra a následná analýzaTieto výpisy zachytávajú vnútorný stav systému v momente zlyhania a slúžia ako surovina na ladenie zložitých chýb, vyšetrovanie bezpečnostných incidentov alebo vykonávanie forenzných skúmaní.
Aj keď to môže znieť veľmi „nízkoúrovňovo“, analýza výpisu pamäte nie je výhradnou záležitosťou vývojárov jadra. Systémoví administrátori, technici podpory a dokonca aj bezpečnostní audítori z nej môžu mať úžitok, ak poznajú základy. vhodné nástroje, typy výpisov a základné interpretačné technikyCelú túto cestu si prejdeme v systémoch Windows, Unix/Linux a BSD s použitím nástrojov ako WinDbg, crash, kgdb a LiME.
Čo je to výpis pamäte jadra a prečo sa oplatí ho analyzovať?
Výpis pamäte jadra (často nazývaný Výpis jadra alebo jednoducho výpis z núdze) je súbor, ktorý obsahuje kópiu, úplnú alebo čiastočnú, pamäte v momente, keď systém utrpí kritickú poruchu, ako napríklad jadro paniky v systéme Unix/Linux alebo modrá obrazovka smrti (BSOD) vo Windowse.
V praxi tento typ výpisu šetrí interné štruktúry jadra, zásobníky volaní, kontext procesov a načítané ovládačeVďaka tomu je možné po katastrofe vykonať „post mortem“ analýzu, veľmi podobnú ladeniu živého systému, ale bez tlaku z nutnosti dotýkať sa produkčného stroja počas jeho poruchy.
Dôvody na hlbšie skúmanie výpisov jadra sú rôzne: od ladenie zdanlivo náhodných chýb a občasných pádov...dokonca aj vyšetrovanie, či bol systém zlomyseľne manipulovaný alebo či havária mohla zanechať na disku stopy citlivých informácií.
Okrem úplných výpisov jadra existuje možnosť extrahovania výpisov jednotlivých procesov (klasický jadrové skládky), ktoré sú veľmi užitočné, keď chceme obmedziť problém na konkrétnu aplikáciu alebo preskúmať vplyv na dôvernosť služby ako napríklad e-mailový alebo messagingový klient.

Typy výpisov pamäte v systéme Windows a ich užitočnosť
V systémoch Windows môže samotný operačný systém generovať rôzne typy výpisov, keď sa vyskytne chyba STOP. Každý typ má inú úroveň detailov, preto je dôležité vedieť, ktoré z nich použiť. Aký typ výpisu potrebujeme na základe problému a obmedzení miesta na disku?.
Jedným z najbežnejších formátov v používateľských prostrediach a na mnohých serveroch je malý výpis pamäte (minidump)Je to ten, ktorý zaberá najmenej miesta a zvyčajne sa nachádza v %SystemRoot%\Minidumpso súbormi štýlu MiniMMDDYY-01.dmp.
Tento mini výpis obsahuje veľmi špecifické, ale dôležité informácie: Kód chyby STOP a jeho parametre, zoznam ovládačov načítaných v čase zlyhania, kontext procesora, ktorý sa zastavil (PRCB), kontexty zapojeného procesu a vlákna (štruktúry EPROCESS a ETHREAD) a zásobník volaní režimu jadra daného vlákna.
Vďaka týmto základným štruktúram je aj s minidumpom často možné identifikovať, ktorý ovládač alebo modul spôsobuje pády, hoci nie vždy bude možné vysledovať celý problém, ak pochádza ďaleko od vlákna, ktoré bežalo v čase pádu. Dostupné kontextové informácie sú obmedzené.
Systém Windows dokáže tiež generovať výpisy pamäte jadra a oveľa väčšie úplné výpisy, ktoré obsahujú časti alebo celú fyzickú pamäť. Tieto sú obzvlášť užitočné v nízkoúrovňová analýza, forenzné vyšetrovania a pokročilé ladenie ovládačov alebo samotného systému.
Konfigurácia a otvorenie výpisov pamäte v systéme Windows pomocou WinDbg a KD
Ak chcete využiť výhody výpisov v systéme Windows, najprv je potrebné mať správne nakonfigurované možnosti. spustenie a obnovaV ovládacom paneli v rozšírených vlastnostiach systému si môžete vybrať typ výpisu, ktorý chcete vygenerovať v prípade zlyhania: napríklad „Malý výpis pamäte (256 KB)“ a cestu, kam sa bude ukladať.
Systém tiež potrebuje stránkovací súbor na zavádzacom zväzku s veľkosťou aspoň niekoľkých megabajtov aby sa zapísal výpis. V moderných verziách systému Windows každé zlyhanie vytvorí nový súbor a história sa uchováva v nakonfigurovanom priečinku, čo umožňuje jednoduché prezeranie minulých incidentov.
Po vygenerovaní existuje niekoľko spôsobov, ako overiť správnosť výpisov. Jedným z klasických nástrojov je Súbor Dumpchk.exečo vám umožňuje skontrolovať základnú integritu súboru a vytlačiť súhrnné informácie. Pre pokročilejšiu analýzu sa používajú nasledujúce: Nástroje na ladenie pre Windows, medzi ktoré patria WinDbg (grafické rozhranie) a KD (verzia pre príkazový riadok).
Po nainštalovaní ladiacieho balíka z webovej stránky spoločnosti Microsoft sa nástroje zvyčajne nachádzajú v priečinku, ako je C:\Program Files\Nástroje na ladenie pre systém WindowsOdtiaľ môžeme otvoriť príkazový riadok a načítať výpis pomocou WinDbg alebo KD pomocou parametra -z na zadanie súboru:
windbg -y <RutaSimbolos> -i <RutaBinarios> -z <RutaDump>
Cesta symbolu môže ukazovať na symbolový server s lokálnou vyrovnávacou pamäťou, napríklad:
srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
Zatiaľ čo binárna cesta je zvyčajne niečo ako C:\Windows\I386 alebo priečinok, kam sme skopírovali spustiteľné súbory systému zodpovedajúce verzii, ktorá vygenerovala výpis. Toto je dôležité, pretože Minidumpy neobsahujú všetky binárne súbory, iba odkazy na ne, takže ladiaci program ich musí vedieť nájsť.
Základná analýza výpisu jadra v systéme Windows
Po načítaní výpisu pomocou WinDbg alebo KD je analýza výpisu jadra po havárii dosť podobná ladeniu po operácii. Prvý príkaz, ktorý spustí takmer každý, je !analyzovať, ktorá spustí automatickú analýzu a vygeneruje úvodnú správu.
Príkaz !analyze -show ukazuje kód kontroly chýb a jeho parametreKým !analyze -v Vytvára oveľa podrobnejší výstup: podozrivý modul, zásobník volaní, kontextové informácie a v mnohých prípadoch aj návrhy možných príčin alebo diagnostických krokov.
Na doplnenie tejto analýzy, príkaz .kontrola chýb Znovu vytlačí chybový kód a súvisiace parametre, ktoré je potom možné porovnať s referenčný kód kontroly chýb od spoločnosti Microsoft, aby ste zistili presný význam každej hodnoty a typické príčiny.
Príkaz lm N T (zoznam modulov) vám umožňuje vidieť Zoznam načítaných modulov s ich cestou, adresami a stavomToto pomáha potvrdiť, či sa ovládač identifikovaný automatickou analýzou skutočne nachádza v pamäti a akú má verziu. Tento zoznam je obzvlášť užitočný, keď máme podozrenie na ovládače alebo bezpečnostné komponenty tretích strán, ktoré interagujú s jadrom.
V prípade potreby môžeme zjednodušiť proces nakladania vytvorením dávkový súbor Prijme cestu k výpisu a spustí KD alebo WinDbg s príslušnými parametrami. Takto stačí napísať krátky príkaz, ktorý obsahuje umiestnenie súboru, a skript sa postará o všetko ostatné.
Používanie WinDbg pre hlboké výpisy jadra
Pre výpisy pamäte v režime jadra ponúka WinDbg aj možnosť práce s viacerými súbormi a reláciami. Výpisy je možné otvoriť z príkazového riadku pomocou -zalebo z grafického rozhrania pomocou ponuky Súbor > Otvoriť výpis pamäte alebo klávesovej skratky Ctrl + D.
Ak je WinDbg už otvorený v pasívnom režime, jednoducho vyberte súbor v dialógovom okne „Otvoriť výpis z havárie“, zadajte cestu alebo prehľadajte disk. Po načítaní môžeme spustiť reláciu príkazom g (Ísť) v určitých scenároch alebo priamo spustiť prvé analytické príkazy.
Okrem klasickej !analyzeJe vhodné oboznámiť sa s sekcia s referenčnými pokynmi pre ladiaci príkazTáto časť popisuje všetky dostupné príkazy na čítanie vnútorných štruktúr, skúmanie pamäte, interpretáciu zásobníkov a mnoho ďalšieho. Mnohé z týchto techník sú použiteľné pre živé relácie aj offline výpisy.
WinDbg vám tiež umožňuje pracovať s viacero paralelných výpisovNa príkazovom riadku môžeme pridať viacero parametrov -z, za každým nasledovaným iným názvom súboru, alebo pridať nové ciele pomocou príkazu .opendumpLadenie viacerých cieľových umiestnení je užitočné na porovnávanie opakujúcich sa zlyhaní alebo reťazených incidentov.
V niektorých prostrediach sú pamäťové výpisy zabalené do súborov CAB, aby sa ušetrilo miesto alebo uľahčil prenos. WinDbg dokáže priamo otvoriť .cab s výpisom vo vnútri, pomocou -z aj s .opendumphoci bude čítať Extrahuje iba jeden z uložených súborov a neextrahuje ostatné súbory. to by mohlo ísť do toho istého balíka.
Výpisy z havárie v systémoch Unix a Linux: utilita, nástroje a požiadavky
V systémoch Unix a GNU/Linux je filozofia podobná, ale ekosystém nástrojov sa značne líši. Väčšina jadier podobných Unixu ponúka možnosť uložiť kópiu pamäte v prípade katastrofickej udalosti, čo poznáme ako jadrová skládka alebo výpis jadra.
Hoci ich primárne využitie zostáva vývoj jadra a ovládačov, tieto výpisy majú jasný bezpečnostný aspekt. Pád môže byť spôsobený... programovacie chyby, ale aj škodlivé akcie neúspešné pokusy o manipuláciu s komponentmi systému alebo nešikovné zneužitie podmienok pretekania.
V dobre nakonfigurovanom unixovom systéme nie sú denné pády bežné, ale keď k nim dôjde, je rozumné mať záložný plán. infraštruktúra na ukladanie dát, ako napríklad Kdump, LKCD alebo iné riešenia ktoré umožňujú zachytávanie systémovej pamäte. Je však potrebné zvážiť diagnostickú hodnotu výpisu a riziko, že obsahuje vysoko citlivé údaje.
Jeden z najkompletnejších a najrozšírenejších nástrojov pre tento typ analýzy v systéme Linux je havárieTento nástroj, pôvodne vyvinutý spoločnosťou Red Hat, sa stal de facto štandardom na skúmanie výpisov jadra a analýzu bežiacich systémov.
Pád môže pôsobiť proti živej pamäti systému prostredníctvom /dev/mem alebo v Red Hat a odvodených distribúciách pomocou špecifického zariadenia /dev/crashNapriek tomu je bežnou praxou posielať do nástroja súbor s výpisom vygenerovaný mechanizmami, ako napríklad Kdump, súbor s výpisom údajov, Výpis z disku alebo architektúrne špecifické výpisy ako napríklad s390/s390x alebo xendump vo virtualizovaných prostrediach.
Úloha crash a dôležitosť vmlinux v Linuxe
Nástroj na prelomenie havárie bol čiastočne vytvorený na prekonanie obmedzení používania gdb priamo na /proc/kcoreOkrem iného môže byť prístup k tomuto pseudoobrazu pamäte obmedzený a navyše niektoré možnosti kompilácie jadra sťažujú správnu interpretáciu vnútorných štruktúr, ak máme iba komprimovaný spustiteľný binárny súbor.
Pre správne fungovanie havárie sú potrebné dva kľúčové prvky: súbor vmlinux skompilovaný s ladiacimi symbolmi (zvyčajne s príznakmi ako -g) a samotným výpisom jadra. Táto kombinácia umožňuje nástroju mapovať pamäťové adresy na funkcie, štruktúry a riadky kódu.
Je dôležité rozlišovať medzi vmlinux a vmlinuzNa väčšine systémov je viditeľný iba vmlinux, čo je komprimovaná, bootovateľná verzia jadra. Pád vyžaduje symbolicky dekomprimovaný vmlinux; bez neho pri pokuse o načítanie výpisu alebo /dev/mem Stretneme sa s chybami typu Nepodarilo sa nájsť spustené jadro – zadajte argument zoznamu názvov.
Hoci je možné manuálne dekomprimovať vmlinuz, tento proces nie je vždy triviálny a v praxi je zvyčajne oveľa pohodlnejší. Prekompilujte jadro, aby ste získali vmlinux aj vmlinuz paralelne. V serióznych administrátorských prostrediach je dobrou praxou udržiavať vmlinux zodpovedajúci každej verzii jadra nasadenej práve pre tieto prípady.
Keď sú splnené požiadavky, zrútenie výpisu je relatívne jednoduché: zadáte príslušný vmlinux a súbor s výpisom a nástroj otvorí interaktívnu reláciu, z ktorej môžete prechádzať štruktúrami jadra, vypisovať procesy, zobrazovať zásobníky volaní a extrahovať forenzné informácieTí, ktorí sa chcú ponoriť ešte hlbšie, môžu nahliadnuť do špecializovanej dokumentácie, ako napríklad do známej technickej správy o haváriách.
Obmedzenia /dev/mem a prvé prístupy v Linuxe
Predtým, ako sa uchýlili ku konkrétnym nástrojom, sa mnohí správcovia historicky pokúšali získať výpis pamäte. čítanie priamo zo zariadenia /dev/memTento prístup sa zdal jednoduchý: použiť nástroj ako výpis pamäte (ktorý vypíše dané zariadenie do STDOUT) alebo stiahne z dd if=/dev/mem of=volcado.mem.
Moderné jadrá však ponúkajú možnosti kompilácie, ako napríklad CONFIG_STRICT_DEVMEMktoré výrazne obmedzujú prístup z používateľského priestoru do /dev/memTypickým výsledkom je, že čítanie sa preruší po malom bloku (napr. 1 MB) alebo v najhoršom prípade môže chyba v tejto interakcii skončiť... jadro paniky okamžitý a reštart stroja.
Táto ochrana dáva z bezpečnostného hľadiska dokonalý zmysel, ale núti nás hľadať Iné spôsoby, ako získať spoľahlivý a kompletný výpis bez toho, aby sa museli úplne spoliehať na generické zariadenia, ktoré už nie sú také dostupné ako predtým.
Súčasným trendom je preto spoliehať sa na špecifické moduly alebo integrované infraštruktúry pre výpisy z pamäte, namiesto jednoduchého pokusu o „zoškrabanie pamäte“ pomocou nástrojov používateľského priestoru, ktoré nie sú navrhnuté tak, aby koexistovali s modernými politikami ochrany jadra.
LiME Forensics: Extrakcia pamäte v Linuxe a Androide
Veľmi silnou alternatívou vo svete forenznej vedy je LiME (Linuxový extraktor pamäte)LiME je modul jadra navrhnutý špeciálne na kontrolované zachytávanie volatilnej pamäte bez obmedzení, ktoré ovplyvňujú /dev/mem. LiME beží v priestore jadra, takže môže pristupovať k RAM oveľa priamejšie.
LiME sa distribuuje so zdrojovým kódom a kompiluje sa s ním. používané hlavičky jadraProces kompilácie generuje modul .ko špecifické pre verziu jadra, do ktorej sa načíta. Po kompilácii to môžeme overiť pomocou nástrojov ako napríklad file aby sa zabezpečilo, že modul ELF zodpovedajúci našej architektúre bol správne vygenerovaný.
Ak chcete použiť LiME, jednoducho načítajte modul pomocou insmod z koreňového adresára a odovzdať mu príslušné možnosti, napríklad zadaním cieľ sieťového výpisu pomocou TCP a RAW formátu:
insmod lime-3.x.y.ko "path=tcp:4444 format=raw"
Súbežne na počítači, ktorý bude prijímať výpis, počúvame nakonfigurovaný port pomocou nástroja ako ncpresmerovanie výstupu do súboru:
nc <IP_origen> 4444 > volcado.mem
Po niekoľkých minútach, v závislosti od množstva pamäte RAM a výkonu siete, budeme mať súbor, ktorého veľkosť zodpovedá fyzickej pamäti zdrojového systému. Toto je kompletný výpis RAM, ktorý môžeme analyzovať pomocou forenzných nástrojov alebo dokonca pomocou reťazcov či iných nástrojov ako prvý krok k nájdeniu zaujímavých reťazcov.
Riziká úniku údajov z procesov a ich spracovania
Úplný výpis jadra je mimoriadne informatívny, ale môže byť aj prehnaný, keď nás zaujíma iba konkrétny proces. V takom prípade má veľký zmysel uchýliť sa k... jednotlivé výpisy procesov pomocou nástrojov ako gcore v Unixe/Linuxe.
Tieto výpisy pre jednotlivé procesy sú oveľa menšie a lepšie spravovateľné a umožňujú vám zamerať analýzu na konkrétne aplikácie, ako napríklad klient na odosielanie správ (napríklad Skype) alebo e-mailový klient (napríklad Thunderbird), kde je relatívne ľahké nájsť heslá v obyčajnom texte, tokeny relácie alebo kontaktné údaje ak sú preskúmané pamäťové reťazce.
Z hľadiska vývoja tieto výpisy základných údajov pomáhajú lokalizovať programovacie chyby, úniky pamäte alebo nekonzistentné stavy v službe. Z hľadiska bezpečnosti však problém nastáva, keď Výpisy sa generujú pravidelne a ukladajú sa na miestach prístupných ostatným používateľom.buď na samotnom systéme, alebo na zdieľaných sieťových zdrojoch.
Ak si používateľ naplánuje napríklad úlohu cron Pravidelným zaznamenávaním výpisov citlivých procesov a ich ponechávaním v globálne čitateľnom adresári útočník otvára obrovské dvere k odhaleniu kritických informácií. V mnohých scenároch auditu analýza týchto súborov umožňuje útočníkovi obnoviť prihlasovacie údaje, zoznamy kontaktov, história komunikácie a ďalšie súkromné údaje s relatívne malým úsilím.
Preto je pri každom serióznom audite unixového systému vhodné venovať niekoľko minút kontrole, či sa generujú výpisy (úplné alebo čiastočné), kde sú uložené, aké majú povolenia a či nejaké existujú. automatizovaný proces, ktorý ponecháva kópie pamäte prístupné neoprávneným používateľom.
Postmortem analýza výpisov vo FreeBSD s kgdb
Vo svete BSD, a konkrétne vo FreeBSD, prístup k analýze po smrti zahŕňa Povoliť výpisy z núdze v systéme a mať jadro skompilované s ladiacimi symbolmiToto sa ovláda z konfiguračného adresára jadra, zvyčajne v /usr/src/sys/<arq>/conf.
V príslušnom konfiguračnom súbore je možné povoliť generovanie symbolov pomocou riadku, ako je tento:
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
Po úprave konfigurácie je potrebné jadro prekompilovať. Niektoré objekty budú regenerované (ako napríklad trap.o) kvôli zmene v súboroch zostavenia. Cieľom je získať jadro s rovnaký kód ako ten, ktorý má problémy, ale s pridaním potrebných ladiacích informáciíOdporúča sa porovnať staré a nové rozmery pomocou príkazu size aby sa zabezpečilo, že v binárnom súbore nedošlo k žiadnym neočakávaným zmenám.
Keď je jadro nainštalované pomocou symbolov, môžeme preskúmať výpisy pomocou kgdb ako je popísané v oficiálnej dokumentácii. Nie všetky symboly nemusia byť úplné a niektoré funkcie sa môžu zobraziť bez čísel riadkov alebo informácií o argumentoch, ale vo väčšine prípadov je úroveň detailov dostatočná na vysledovanie problému.
Neexistuje absolútna záruka, že analýza vyrieši všetky incidenty, ale v praxi... Táto stratégia funguje celkom dobre vo vysokom percente scenárovnajmä keď sú výpisy po havárii kombinované s dobrým prehľadom nedávnych zmien systému.
Najlepšie postupy pre analýzu a dokumentovanie chýb jadra
Bez ohľadu na operačný systém, analýza výpisu jadra zvyčajne vedie k technická dokumentácia, znalostné bázy, špecializované fóra alebo dokonca samotný zdrojový kód jadra interpretovať správy, chybové kódy a neznáme symboly.
V systéme Linux je veľmi užitočné spoliehať sa na oficiálny zdrojový kód, vstavanú dokumentáciu a komunitné zdroje. Mnohé chybové hlásenia jadra možno vysledovať späť k presnému súboru, z ktorého pochádzajú, čo pomáha pochopiť problém. kontext, v ktorom sa spustí BUG() alebo WARN() rozhodnutý.
V systéme Windows poskytuje dokumentácia spoločnosti Microsoft, jej znalostná databáza (KB) a technické fóra podrobné vysvetlenia kódy kontroly chýb, odporúčania na riešenie a známe vzory chýbKombináciou týchto informácií so správami !analyze -v je možné vypracovať rozumný plán na zmiernenie rizík.
Skutočná hodnota výpisu z havárie sa ukáže, keď sa všetky tieto informácie porovnajú s dôkladná znalosť operačného systému a konkrétneho prostredia, v ktorom došlo k zlyhaniuLen týmto spôsobom možno navrhnúť trvalé riešenia a predovšetkým zabrániť opakovaniu rovnakého problému v budúcnosti s vážnejšími následkami.
Analýza výpisu pamäte jadra je v konečnom dôsledku zmesou vedy a remesla: vyžaduje si vhodné nástroje, predchádzajúcu konfiguráciu (symboly, možnosti výpisu, bezpečné úložisko) a značné skúsenosti s čítaním zásobníkov, štruktúr a chybových kódov. Zvládnutie týchto techník vám umožní nielen ladiť zložité incidenty, ale aj drasticky zvýšiť úroveň bezpečnosti a odolnosti systémov, ktoré spravujeme.
obsah
- Čo je to výpis pamäte jadra a prečo sa oplatí ho analyzovať?
- Typy výpisov pamäte v systéme Windows a ich užitočnosť
- Konfigurácia a otvorenie výpisov pamäte v systéme Windows pomocou WinDbg a KD
- Základná analýza výpisu jadra v systéme Windows
- Používanie WinDbg pre hlboké výpisy jadra
- Výpisy z havárie v systémoch Unix a Linux: utilita, nástroje a požiadavky
- Úloha crash a dôležitosť vmlinux v Linuxe
- Obmedzenia /dev/mem a prvé prístupy v Linuxe
- LiME Forensics: Extrakcia pamäte v Linuxe a Androide
- Riziká úniku údajov z procesov a ich spracovania
- Postmortem analýza výpisov vo FreeBSD s kgdb
- Najlepšie postupy pre analýzu a dokumentovanie chýb jadra