Analiza izpisa pomnilnika in jedra v sistemih Windows in Unix

Zadnja posodobitev: 21 marec 2026
  • Izpisi pomnilnika jedra zajamejo stanje sistema v primeru kritičnih napak in so bistveni za odpravljanje napak in varnostni nadzor.
  • V sistemu Windows se analizirajo z WinDbg ali KD, pri čemer se za iskanje gonilnikov in vzrokov napake uporabljajo simboli in ukazi, kot je !analyze -vy .bugcheck.
  • V Linuxu orodja, kot so crash, LiME in gcore, omogočajo ekstrahiranje in preučevanje izpisov jedra in procesov, s posebnim poudarkom na zaščiti občutljivih podatkov.
  • FreeBSD in drugi Unix sistemi zahtevajo jedra, prevedena s simboli, in uporabo kgdb, pri čemer se za interpretacijo rezultatov vedno zanašajo na dokumentacijo in izvorno kodo.

Analiza pomnilnika in jedra

Ko operacijski sistem povzroči paniko ali se spektakularno sesuje, je edini način, da razumemo, kaj se je zgodilo, ta, da ... izpis pomnilnika jedra in nadaljnja analizaTi izpisi podatkov zajamejo notranje stanje sistema v trenutku okvare in so surovina za odpravljanje napak pri kompleksnih napakah, preiskovanje varnostnih incidentov ali izvajanje forenzičnih preiskav.

Čeprav se morda sliši zelo "nizkoristenčno", analiziranje izpisa pomnilnika ni namenjeno samo razvijalcem jedra. Sistemski skrbniki, podporni inženirji in celo varnostni revizorji lahko od tega imajo koristi, če poznajo osnove. ustrezna orodja, vrste odlagališč in osnovne tehnike interpretacijeCelotno pot bomo obravnavali v sistemih Windows, Unix/Linux in BSD z uporabo orodij, kot so WinDbg, crash, kgdb in LiME.

Kaj je izpis pomnilnika jedra in zakaj ga je vredno analizirati?

Izpis pomnilnika jedra (pogosto imenovan Izpis sesutja jedra ali preprosto izpis sesutja) je datoteka, ki vsebuje kopijo, celotno ali delno, pomnilnika v trenutku, ko sistem doživi kritično napako, kot je na primer jedro panike v Unixu/Linuxu ali modri zaslon smrti (BSOD) v sistemu Windows.

V praksi tovrstno odlaganje prihrani notranje strukture jedra, skladi klicev, kontekst procesa in naloženi gonilnikiZahvaljujoč temu je po nesreči mogoče opraviti "post mortem" analizo, zelo podobno odpravljanju napak v delujočem sistemu, vendar brez pritiska, da se je treba dotikati proizvodnega stroja, medtem ko ta odpoveduje.

Razlogi za poglobljeno raziskovanje izpisov jedra so različni: od odpravljanje na videz naključnih napak in občasnih zrušitev... celo preiskovanje, ali je bil sistem zlonamerno spremenjen ali ali je zrušitev morda pustila sledi občutljivih informacij na disku.

Poleg celotnih izpisov jedra obstaja možnost ekstrakcije izpisov posameznih procesov (klasični izpisi jeder), ki so zelo uporabni, kadar želimo omejiti težavo na določeno aplikacijo ali pregledati vpliv na zaupnost storitve kot je odjemalec za e-pošto ali sporočila.

Analiziraj izpis podatkov o sesutju jedra

Vrste izpisov pomnilnika v sistemu Windows in njihova uporabnost

V sistemih Windows lahko operacijski sistem sam ustvari različne vrste izpisov, ko pride do napake STOP. Vsaka vrsta vključuje drugačno raven podrobnosti, zato je ključnega pomena vedeti, katere uporabiti. Kakšno vrsto izpisa podatkov potrebujemo glede na težavo in omejitve prostora na disku?.

Ena najpogostejših oblik v uporabniških okoljih in na številnih strežnikih je majhen izpis pomnilnika (minidump)Je tista, ki zavzame najmanj prostora in se običajno nahaja v %SystemRoot%\Minidump, z datotekami v slogu MiniMMDDYY-01.dmp.

Ta mini odlagališče vsebuje zelo specifične, a pomembne informacije: Koda napake STOP in njeni parametri, seznam gonilnikov, naloženih v času napake, kontekst procesorja, ki se je ustavil (PRCB), kontekste vključenega procesa in niti (strukturi EPROCESS in ETHREAD) ter sklad klicev jedrnega načina te niti.

Zahvaljujoč tem osnovnim strukturam je tudi z minidumpom pogosto mogoče ugotoviti, kateri gonilnik ali modul povzroča sesutje, čeprav celotne težave ne bo vedno mogoče izslediti, če izvira daleč od niti, ki se je izvajala v času sesutja. Razpoložljive kontekstualne informacije so omejene.

Windows lahko ustvari tudi izpise pomnilnika jedra in veliko večje celotne izpise, ki vsebujejo dele ali ves fizični pomnilnik. To je še posebej uporabno v nizkonivojska analiza, forenzične preiskave in napredno odpravljanje napak gonilnikov ali samega sistema.

Konfigurirajte in odprite izpise pomnilnika v sistemu Windows z WinDbg in KD

Če želite izkoristiti prednosti izpisov v sistemu Windows, morate najprej pravilno konfigurirati možnosti. zagon in obnovitevV nadzorni plošči lahko v naprednih sistemskih lastnostih izberete vrsto izpisa pomnilnika, ki ga želite ustvariti v primeru napake: na primer »Majhen izpis pomnilnika (256 KB)« in pot, kamor bo shranjen.

Sistem potrebuje tudi ostranjevalna datoteka na zagonskem nosilcu, velika vsaj nekaj megabajtov za zapisovanje izpisa podatkov. V sodobnih različicah sistema Windows vsaka sesutje ustvari novo datoteko, zgodovina pa se shrani v konfigurirani mapi, kar omogoča enostaven pregled preteklih incidentov.

Ko so izpisi ustvarjeni, obstaja več načinov za preverjanje pravilnosti izpisov. Eno klasično orodje je Datoteka Dumpchk.exekar vam omogoča preverjanje osnovne integritete datoteke in tiskanje povzetkov informacij. Za naprednejšo analizo se uporabljajo naslednji načini: Orodja za odpravljanje napak v sistemu Windowski vključujejo WinDbg (grafični vmesnik) in KD (različica ukazne vrstice).

  Okrepitev Linuxa s SELinuxom: popoln in praktičen vodnik

Po namestitvi paketa za odpravljanje napak z Microsoftovega spletnega mesta se orodja običajno nahajajo v mapi, kot je C:\Programske datoteke\Orodja za odpravljanje napak za WindowsOd tam lahko odpremo ukazni poziv in naložimo izpis z WinDbg ali KD z uporabo parametra -z za določitev datoteke:

windbg -y <RutaSimbolos> -i <RutaBinarios> -z <RutaDump>

Pot simbola lahko kaže na strežnik simbolov z lokalnim predpomnilnikom, na primer:

srv*C:\Symbols*https://msdl.microsoft.com/download/symbols

Čeprav je binarna pot običajno nekaj takega kot C:\Windows\I386 ali mapo, kamor smo kopirali izvedljive sistemske datoteke, ki ustrezajo različici, ki je ustvarila izpis pomnilnika. To je pomembno, ker Minidumpi ne vključujejo vseh binarnih datotek, samo sklicevanja nanje, zato jih mora razhroščevalnik znati najti.

Osnovna analiza izpisa podatkov o sesutju jedra v sistemu Windows

Ko je izpis pomnilnika naložen z WinDbg ali KD, je analiza izpisa pomnilnika ob sesutju jedra precej podobna seji odpravljanja napak po smrti. Prvi ukaz, ki ga skoraj vsi izvedejo, je !analiziraj, ki sproži samodejno analizo in ustvari začetno poročilo.

Ukaz !analyze -show prikazuje koda za preverjanje napak in njeni parametriMedtem ko je !analyze -v Izdaja veliko podrobnejši izhod: sumljivi modul, sklad klicev, kontekstualne informacije in v mnogih primerih predloge o možnih vzrokih ali diagnostičnih korakih.

Za dopolnitev te analize je ukaz .preverjanje napak Ponovno izpiše kodo napake in povezane parametre, ki jih je nato mogoče primerjati z referenca kode za preverjanje napak od Microsofta, da se naučite natančnega pomena posamezne vrednosti in tipičnih vzrokov.

Ukaz lm N T (seznam modulov) vam omogoča ogled Seznam naloženih modulov z njihovo potjo, naslovi in ​​stanjemTo pomaga potrditi, ali je gonilnik, ki ga je prepoznala avtomatizirana analiza, dejansko v pomnilniku in katera je njegova različica. Ta seznam je še posebej uporaben, kadar sumimo, da gre za gonilnike ali varnostne komponente drugih proizvajalcev, ki komunicirajo z jedrom.

Po želji lahko postopek nakladanja odlagališča poenostavimo z ustvarjanjem paketna datoteka Prejme pot do izpisišča in zažene KD ali WinDbg z ustreznimi parametri. Na ta način morate napisati le kratek ukaz, ki vključuje lokacijo datoteke, skript pa poskrbi za vse ostalo.

Uporaba WinDbg za globoke izpise jedra

Za izpise pomnilnika v načinu jedra WinDbg ponuja tudi možnost dela z več datotekami in sejami. Izpise je mogoče odpreti iz ukazne vrstice z -zali iz grafičnega vmesnika z uporabo menija Datoteka > Odpri izpis pomnilnika ali bližnjice na tipkovnici Ctrl + D.

Če je WinDbg že odprt v pasivnem načinu, preprosto izberite datoteko v pogovornem oknu »Odpri izpis podatkov o sesutju«, določite pot ali poiščite disk. Ko je naložen, lahko sejo zaženemo z ukazom g (Pojdi) v določenih scenarijih ali neposredno zaženite prve ukaze za analizo.

Poleg klasičnega !analyzePriporočljivo je, da se seznanite z razdelek z referenco ukazov za odpravljanje napakTo opisuje vse razpoložljive ukaze za branje notranjih struktur, pregledovanje pomnilnika, interpretiranje skladov in še veliko več. Številne od teh tehnik so uporabne tako za seje v živo kot za izpise podatkov brez povezave.

WinDbg vam omogoča tudi delo z več vzporednih izpisovV ukazno vrstico lahko dodamo več parametrov -z, vsakemu sledi drugo ime datoteke, ali pa dodamo nove cilje z ukazom .opendumpOdpravljanje napak na več destinacijah je uporabno za primerjavo ponavljajočih se napak ali verižnih incidentov.

V nekaterih okoljih so izpisi pomnilnika zapakirani v datoteke CAB, da se prihrani prostor ali olajša prenos. WinDbg lahko neposredno odpre .cab z izpisom znotraj, tako z uporabo -z kot z .opendumpčeprav bo bral Izvleče samo eno od izkopanih datotek in ne bo izvlečel drugih datotek. kar bi lahko šlo v isti paket.

Izpisi napak v Unixu in Linuxu: pripomoček, orodja in zahteve

V sistemih Unix in GNU/Linux je filozofija podobna, vendar se ekosistem orodij precej razlikuje. Večina jeder, podobnih Unixu, ponuja možnost shrani kopijo pomnilnika, ko se zgodi katastrofalen dogodek, kar poznamo kot izpis jedra ali izpis podatkov o sesutju jedra.

Čeprav je njihova primarna uporaba še vedno razvoj jedra in gonilnikov, imajo ti izpisi jasno varnostno plat. Zrušitev lahko povzroči ... programske napake, pa tudi zlonamerna dejanja neuspešni poskusi manipulacije sistemskih komponent ali nerodno izkoriščanje tekmovalnih pogojev.

V dobro konfiguriranem sistemu Unix dnevni sesutji niso pogosti, ko pa se zgodijo, je pametno imeti vzpostavljen rezervni načrt. infrastruktura za odlaganje podatkov, kot so Kdump, LKCD ali druge rešitve ki omogočajo zajem sistemskega pomnilnika. Vendar je treba pretehtati tako diagnostično vrednost izpisa pomnilnika kot tudi tveganje, da vsebuje zelo občutljive podatke.

Eno najbolj popolnih in razširjenih orodij za tovrstno analizo v Linuxu je crashTa pripomoček, ki ga je prvotno razvil Red Hat, je postal dejanski standard za pregledovanje izpisov jedra in analizo delujočih sistemov.

  Iskanje virusov v sistemu Windows 11 s programom Windows Defender: praktični vodnik in nasveti

Zrušitev lahko deluje proti živemu pomnilniku sistema skozi /dev/mem ali v Red Hatu in izpeljanih distribucijah z uporabo določene naprave /dev/crashKljub temu je običajna praksa, da se orodju napaja datoteka z izpisom podatkov, ki jo ustvarijo mehanizmi, kot je Kdump, datoteka za izdelavo izpisa, Izpis diska ali izpisi, specifični za arhitekturo, kot so s390/s390x ali xendump v virtualiziranih okoljih.

Vloga crasha in pomen vmlinuxa v Linuxu

Pripomoček za crash je bil deloma ustvarjen za premagovanje omejitev uporabe gdb neposredno na /proc/kcoreMed drugim je lahko dostop do te psevdoslike pomnilnika omejen, poleg tega pa nekatere možnosti prevajanja jedra otežujejo pravilno interpretacijo notranjih struktur, če imamo le stisnjeno izvedljivo binarno datoteko.

Za pravilno delovanje sistema Crash sta potrebna dva ključna elementa: Datoteka vmlinux, prevedena z odhroščevalnimi simboli (običajno z zastavicami, kot je -g) in samim izpisom jedra. Ta kombinacija orodju omogoča preslikavo pomnilniških naslovov v funkcije, strukture in vrstice kode.

Pomembno je razlikovati med vmlinux in vmlinuzNa večini sistemov je viden samo vmlinux, ki je stisnjena, zagonska različica jedra. Za sesutje sistema je potreben simbolično razpakiran vmlinux; brez njega pa pri poskusu nalaganja izpisa pomnilnika ali /dev/mem Naleteli bomo na napake tipa ni mogoče najti zagnanega jedra – vnesite argument seznama imen.

Čeprav je mogoče ročno razpakirati vmlinuz, postopek ni vedno preprost in je v praksi običajno veliko bolj priročen. Ponovno prevedite jedro, da dobite tako vmlinux kot vmlinuz vzporedno. V resnih skrbniških okoljih je dobra praksa, da se vmlinux, ki ustreza vsaki različici jedra, nameščeni prav za te primere.

Ko so zahteve izpolnjene, je sesutje izpisa pomnilnika relativno preprosto: določite ustrezen vmlinux in datoteko izpisa, orodje pa odpre interaktivno sejo, iz katere lahko prečkanje struktur jedra, seznam procesov, ogled skladov klicev in pridobivanje forenzičnih informacijTisti, ki želijo še podrobneje raziskati, si lahko ogledajo specializirano dokumentacijo, kot je na primer dobro znana bela knjiga o tehničnih nesrečah.

Omejitve /dev/mem in prvi pristopi v Linuxu

Preden so se zatekli k določenim orodjem, so mnogi skrbniki v preteklosti poskušali pridobiti izpis pomnilnika. branje neposredno iz naprave /dev/memTa pristop se je zdel preprost: uporabite orodje, kot je izpis pomnilnika (ki izpiše to napravo v STDOUT) ali pa potegne iz dd if=/dev/mem of=volcado.mem.

Vendar pa sodobna jedra ponujajo možnosti prevajanja, kot so CONFIG_STRICT_DEVMEMki močno omejujejo dostop iz uporabniškega prostora do /dev/memTipičen rezultat je, da se branje prekine po majhnem bloku (npr. 1 MB) ali, v najslabšem primeru, lahko napaka v tej interakciji povzroči jedro panike takojšen in ponovni zagon stroja.

Ta zaščita je z varnostnega vidika povsem smiselna, vendar nas sili, da iščemo Drugi načini za pridobitev zanesljivega in popolnega izpisa podatkov brez popolnega zanašanja na generične naprave, ki niso več tako dostopne kot prej.

Zato je trenutni trend zanašanje na specifične module ali integrirane infrastrukture za izpis podatkov ob sesutju, namesto da bi preprosto poskušali "strgati pomnilnik" z orodji za uporabniški prostor, ki niso zasnovana za sobivanje s sodobnimi politikami zaščite jedra.

LiME Forensics: Ekstrakcija pomnilnika v Linuxu in Androidu

Zelo močna alternativa v forenzičnem svetu je LiME (razširjevalnik pomnilnika v Linuxu)LiME je jedrni modul, zasnovan posebej za zajemanje nestanovitnega pomnilnika na nadzorovan način in brez omejitev, ki vplivajo na /dev/mem. LiME deluje v jedrnem prostoru, zato lahko do RAM-a dostopa veliko bolj neposredno.

LiME se distribuira skupaj z izvorno kodo in se prevaja v uporabljene glave jedraPostopek prevajanja ustvari modul .ko specifično za različico jedra, v katero bo naloženo. Ko je prevedeno, ga lahko preverimo z orodji, kot so file da zagotovimo, da je bil modul ELF, ki ustreza naši arhitekturi, pravilno generiran.

Za uporabo LiME preprosto naložite modul z insmod iz korena in mu posredujte ustrezne možnosti, na primer z določitvijo cilj omrežnega izpisa z uporabo TCP in surove oblike:

insmod lime-3.x.y.ko "path=tcp:4444 format=raw"

Vzporedno na računalniku, ki bo prejel izpis, poslušamo na konfiguriranih vratih z orodjem, kot je ncpreusmeritev izhoda v datoteko:

nc <IP_origen> 4444 > volcado.mem

Po nekaj minutah, odvisno od količine RAM-a in zmogljivosti omrežja, bomo imeli datoteko, katere velikost ustreza fizičnemu pomnilniku izvornega sistema. To je popoln izpis RAM-a, ki ga lahko analiziramo s forenzičnimi orodji ali celo z nizi ali drugimi pripomočki kot prvi korak k iskanju zanimivih verig.

Tveganja izpisov procesov in izpostavljenosti podatkov

Popoln izpis jedra je izjemno informativen, vendar je lahko tudi pretiran, kadar nas zanima le določen proces. V tem primeru je zelo smiselno uporabiti ... posamezni izpiski procesov z uporabo orodij, kot je gcore v Unixu/Linuxu.

Ti izpisi podatkov za posamezne procese so veliko manjši in bolj obvladljivi ter vam omogočajo, da analizo osredotočite na določene aplikacije, kot sta odjemalec za sporočanje (na primer Skype) ali odjemalec za e-pošto (na primer Thunderbird), kjer je relativno enostavno najti gesla v navadnem besedilu, žetoni seje ali kontaktni podatki če se raziščejo pomnilniški nizi.

  Nepotrebne aplikacije v sistemu Windows 11: popoln vodnik za njihovo odstranitev

Z razvojnega vidika ti izpisi osnovnih podatkov pomagajo najti programske napake, puščanje pomnilnika ali nedosledna stanja v storitvi. Z varnostnega vidika pa se težava pojavi, ko Izpisi se ustvarjajo rutinsko in shranjujejo na mestih, ki so dostopna drugim uporabnikom.bodisi na samem sistemu bodisi na skupnih omrežnih virih.

Če uporabnik na primer načrtuje opravilo cron Z občasnim zajemanjem izpisov občutljivih procesov in njihovim shranjevanjem v globalno berljivem imeniku napadalec odpira ogromna vrata za razkritje kritičnih informacij. V mnogih scenarijih revizije analiza teh datotek napadalcu omogoča, da si opomore. poverilnice, seznami stikov, zgodovina komunikacije in drugi zasebni podatki z relativno majhnim naporom.

Zato je pri vsaki resni reviziji Unix sistema priporočljivo nameniti nekaj minut preverjanju, ali se ustvarjajo izpisi podatkov (celotni ali delni), kje so shranjeni, kakšna dovoljenja imajo in če obstajajo kakšna. avtomatiziran postopek, ki pušča kopije pomnilnika dostopne nepooblaščenim uporabnikom.

Post mortem analiza izpisov v FreeBSD z kgdb

V svetu BSD, še posebej v FreeBSD, pristop k post mortem analizi vključuje Omogočite izpise iz sesutja sistema in imejte jedro, prevedeno s simboli za odpravljanje napakTo se nadzoruje iz imenika za konfiguracijo jedra, običajno v /usr/src/sys/<arq>/conf.

V ustrezni konfiguracijski datoteki lahko omogočite generiranje simbolov s takšno vrstico:

makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols

Po spremembi konfiguracije je treba jedro ponovno prevesti. Nekateri objekti bodo regenerirani (kot npr. trap.o) zaradi spremembe v datotekah za gradnjo. Cilj je pridobiti jedro z ista koda kot tista, ki ima težave, vendar z dodanimi potrebnimi informacijami za odpravljanje napakPriporočljivo je primerjati stare in nove velikosti z ukazom size da se zagotovi, da v binarni datoteki ni prišlo do nepričakovanih sprememb.

Ko je jedro nameščeno s simboli, lahko zdaj pregledamo izpise z kgdb kot je opisano v uradni dokumentaciji. Vsi simboli morda niso popolni in nekatere funkcije se lahko pojavijo brez številk vrstic ali podatkov o argumentih, vendar je v večini primerov raven podrobnosti zadostna za sledenje težave.

Ni absolutnega zagotovila, da bo analiza rešila vse incidente, vendar v praksi Ta strategija deluje precej dobro v visokem odstotku scenarijevše posebej, če so izpisi podatkov ob zrušitvi združeni z dobrim pregledom nedavnih sistemskih sprememb.

Najboljše prakse za analizo in dokumentiranje napak jedra

Ne glede na operacijski sistem analiza izpisa jedra običajno privede do tehnična dokumentacija, baze znanja, specializirani forumi ali celo sama izvorna koda jedra za razlago sporočil, kod napak in neznanih simbolov.

V Linuxu je zelo koristno, če se zanesete na uradno drevo izvorne kode, vgrajeno dokumentacijo in vire skupnosti. Številna sporočila o napakah v jedru je mogoče izslediti nazaj do natančne datoteke, iz katere izvirajo, kar pomaga razumeti težavo. kontekst, v katerem se sproži BUG() ali WARN() določena.

V sistemu Windows so podrobne razlage za Microsoftovo dokumentacijo, njegovo zbirko znanja (KB) in tehnični forume. kode za preverjanje napak, priporočila za reševanje in znani vzorci napakZ združitvijo teh informacij s poročili !analyze -v je mogoče pripraviti razumen načrt za ublažitev.

Prava vrednost izpisa podatkov o nesreči se pokaže, ko se vse te informacije primerjajo z dobro poznavanje operacijskega sistema in specifičnega okolja, v katerem je prišlo do napakeLe na ta način je mogoče predlagati trajne rešitve in predvsem preprečiti, da bi se ista težava v prihodnosti ponovila z resnejšimi posledicami.

Analiza izpisa pomnilnika jedra je navsezadnje mešanica znanosti in obrti: zahteva ustrezna orodja, predhodno konfiguracijo (simbole, možnosti izpisa pomnilnika, varno shranjevanje) in veliko izkušenj z branjem skladov, struktur in kod napak. Obvladovanje teh tehnik vam omogoča ne le odpravljanje napak v kompleksnih incidentih, temveč tudi drastično povečati raven varnosti in odpornosti sistemov, ki jih upravljamo.