Analiza memorijskog dumpa i kernela na Windows i Unix sistemima

Posljednje ažuriranje: 21 March of 2026
  • Izvještaji o memorijskom stanju jezgra bilježe stanje sistema u kritičnim greškama i neophodni su za otklanjanje grešaka i sigurnosnu reviziju.
  • U Windowsu se analiziraju pomoću WinDbg-a ili KD-a, koristeći simbole i naredbe poput !analyze -vy .bugcheck za lociranje upravljačkih programa i uzroka greške.
  • U Linuxu, alati poput crash, LiME i gcore omogućavaju vam izdvajanje i proučavanje kernel i procesnih dumpova, s posebnom pažnjom na zaštitu osjetljivih podataka.
  • FreeBSD i drugi Unix sistemi zahtijevaju kernele kompajlirane sa simbolima i korištenje kgdb-a, uvijek se oslanjajući na dokumentaciju i izvorni kod za interpretaciju rezultata.

Analiza memorijskog dumpa i kernela

Kada operativni sistem "paničari" ili se spektakularno sruši, jedini način da se shvati šta se dogodilo je da... dump memorije kernela i naknadna analizaOvi dampovi bilježe unutrašnje stanje sistema u trenutku kvara i predstavljaju sirovinu za otklanjanje grešaka u složenim sistemima, istraživanje sigurnosnih incidenata ili provođenje forenzičkih ispitivanja.

Iako možda zvuči vrlo "niskonivojski", analiziranje memorijskog dumpa nije isključivo za programere kernela. Sistem administratori, inženjeri podrške, pa čak i sigurnosni revizori mogu imati koristi od toga ako poznaju osnove. odgovarajući alati, vrste odlagališta i osnovne tehnike interpretacijePokrit ćemo cijeli ovaj put u Windowsu, Unixu/Linuxu i BSD-u, koristeći alate kao što su WinDbg, crash, kgdb i LiME.

Šta je izvod memorije kernela i zašto ga vrijedi analizirati?

Izvadak memorije kernela (često se naziva Crash Dump kernela ili jednostavno crash dump) je datoteka koja sadrži kopiju, potpunu ili djelomičnu, memorije u trenutku kada sistem pretrpi kritičan kvar, kao što je kernel panic u Unixu/Linuxu ili plavi ekran smrti (BSOD) u Windowsu.

U praksi, ovakva vrsta dampa štedi interne strukture kernela, stekovi poziva, kontekst procesa i učitani drajveriZahvaljujući tome, nakon katastrofe može se uraditi "post-mortem" analiza, vrlo slična otklanjanju grešaka u aktivnom sistemu, ali bez pritiska dodirivanja proizvodne mašine dok ona ne radi kako treba.

Razlozi za duboko istraživanje kernel dumpova su različiti: od otklanjanje grešaka u naizgled nasumičnim greškama i povremenim padovima sistema...čak i istražujući da li je sistem zlonamjerno manipulisan ili da li je pad sistema ostavio tragove osjetljivih informacija na disku.

Pored kompletnih kernel dumpova, postoji mogućnost izdvajanja dumpova pojedinačnih procesa (klasični osnovne datoteke), koji su veoma korisni kada ono što želimo je ograničiti problem na određenu aplikaciju ili pregledati utjecaj na povjerljivost usluge kao što je klijent za e-poštu ili razmjenu poruka.

Analiziraj izvod iz pada kernela

Vrste memorijskih dumpova u Windowsu i njihova korisnost

Na Windows sistemima, sam operativni sistem može generirati različite vrste ispisa podataka kada se pojavi STOP greška. Svaki tip uključuje drugačiji nivo detalja, tako da je ključno znati koje koristiti. Koji tip dumpa nam je potreban na osnovu problema i ograničenja prostora na disku?.

Jedan od najčešćih formata u korisničkim okruženjima i mnogim serverima je mali memorijski dump (minidump)To je onaj koji zauzima najmanje prostora i obično se nalazi u %SystemRoot%\Minidump, sa datotekama stila MiniMMDDYY-01.dmp.

Ovaj mini damp sadrži vrlo specifične, ali važne informacije: Kod STOP greške i njegovi parametri, listu drajvera učitanih u trenutku kvara, kontekst procesora koji je zaustavljen (PRCB), kontekste procesa i uključene niti (strukture EPROCESS i ETHREAD) i stek poziva kernel-moda te niti.

Zahvaljujući ovim osnovnim strukturama, čak i uz minidump često je moguće identificirati koji drajver ili modul uzrokuje pad sistema, iako neće uvijek biti moguće pratiti cijeli problem ako potiče daleko od niti koja je bila pokrenuta u trenutku pada sistema. Dostupne kontekstualne informacije su ograničene.

Windows također može generirati izvode memorije kernela i mnogo veće potpune izvode koji sadrže dijelove ili cijelu fizičku memoriju. Ovo je posebno korisno u analiza niskog nivoa, forenzička istraživanja i napredno otklanjanje grešaka u drajverima ili samom sistemu.

Konfigurišite i otvorite memorijske dumpove u Windowsu pomoću WinDbg-a i KD-a

Da biste iskoristili prednosti dumpa u Windowsu, prvo je da pravilno konfigurišete opcije. pokretanje i oporavakIz Kontrolne ploče, u naprednim svojstvima sistema, možete odabrati vrstu izvatka koji želite generirati u slučaju kvara: na primjer, "Mali izvatak memorije (256 KB)" i putanju gdje će biti pohranjen.

Sistemu je također potreban datoteka stranične memorije na volumenu za pokretanje od najmanje nekoliko megabajta kako bi se zapisala datoteka za ispis. U modernim verzijama Windowsa, svaki pad sistema kreira novu datoteku, a historija se čuva u konfiguriranoj mapi, što omogućava jednostavan pregled prošlih incidenata.

Nakon generiranja, postoji nekoliko načina za provjeru ispravnosti ispisa. Jedan klasičan alat je Dumpchk.exešto vam omogućava da provjerite osnovni integritet datoteke i ispišete sažetak informacija. Za napredniju analizu koriste se sljedeći: Alati za otklanjanje grešaka za Windowskoji uključuju WinDbg (grafički interfejs) i KD (verzija iz komandne linije).

  Ojačavanje Linuxa pomoću SELinuxa: kompletan i praktičan vodič

Nakon instaliranja paketa za otklanjanje grešaka sa Microsoftove web stranice, alati se obično nalaze u mapi poput C:\Programske datoteke\Alati za otklanjanje grešaka za WindowsOdatle možemo otvoriti komandni redak i učitati dump sa WinDbg ili KD korištenjem parametra -z da biste odredili datoteku:

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

Putanja simbola može ukazivati ​​na server simbola s lokalnom keš memorijom, na primjer:

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

Iako je binarni put obično nešto poput C:\Windows\I386 ili fasciklu u koju smo kopirali izvršne datoteke sistema koje odgovaraju verziji koja je generirala dump. Ovo je važno jer Minidumps ne uključuju sve binarne datoteke, samo reference na njih, tako da debugger mora biti u mogućnosti da ih pronađe.

Osnovna analiza izvještaja o padu kernela u Windowsu

Nakon što se damp učita pomoću WinDbg-a ili KD-a, analiziranje kernel crash dumpa je prilično slično sesiji otklanjanja grešaka nakon smrti. Prva komanda koju gotovo svi izvršavaju je !analiziraj, što pokreće automatsku analizu i generira početni izvještaj.

Naredba !analyze -show pokazuje the kod za provjeru grešaka i njegovi parametridok !analyze -v Proizvodi mnogo detaljniji izlaz: sumnjivi modul, stek poziva, kontekstualne informacije i, u mnogim slučajevima, prijedloge o mogućim uzrocima ili dijagnostičkim koracima.

Kao dopuna toj analizi, komanda .bugcheck Ponovo ispisuje kod greške i povezane parametre, koji se zatim mogu uporediti sa referenca koda za provjeru grešaka od Microsofta kako biste saznali tačno značenje svake vrijednosti i tipične uzroke.

Naredba lm N T (lista modula) vam omogućava da vidite Lista učitanih modula sa njihovom putanjom, adresama i statusomOvo pomaže u potvrđivanju da li se upravljački program koji je identificirala automatska analiza zaista nalazi u memoriji i koja je njegova verzija. Ova lista je posebno korisna kada sumnjamo na upravljačke programe ili sigurnosne komponente trećih strana koje komuniciraju s kernelom.

Po želji, možemo pojednostaviti proces utovara otpada kreiranjem batch datoteka Trebao bi primiti putanju do dumpa i pokrenuti KD ili WinDbg s odgovarajućim parametrima. Na ovaj način, potrebno je samo napisati kratku naredbu koja uključuje lokaciju datoteke, a skripta će se pobrinuti za sve ostalo.

Korištenje WinDbg-a za duboke kernel dump-ove

Za memorijske dumpove u kernel modu, WinDbg također nudi mogućnost rada s više datoteka i sesija. Dumpovi se mogu otvoriti iz komandne linije pomoću -zili iz grafičkog interfejsa, korištenjem menija Datoteka > Otvori izvod memorije ili prečice na tastaturi Ctrl + D.

Ako je WinDbg već otvoren u pasivnom režimu, jednostavno odaberite datoteku u dijaloškom okviru "Otvori izvod iz pada sistema", navodeći putanju ili pregledavajući disk. Nakon učitavanja, možemo pokrenuti sesiju naredbom. g (Idi) u određenim scenarijima ili direktno pokrenuti prve naredbe za analizu.

Pored klasičnog !analyzePreporučljivo je upoznati se sa odjeljak s referencom naredbe za debugiranjeOvo opisuje sve dostupne komande za čitanje internih struktura, ispitivanje memorije, interpretiranje stekova i još mnogo toga. Mnoge od ovih tehnika su primjenjive i na žive sesije i na offline dumpove.

WinDbg vam također omogućava rad sa više paralelnih dumpovaU komandnoj liniji možemo dodati više parametara -z, svaki nakon kojeg slijedi različito ime datoteke, ili dodati nove ciljeve pomoću komande .opendumpOtklanjanje grešaka na više odredišta korisno je za poređenje ponavljajućih kvarova ili ulančanih incidenata.

U nekim okruženjima, memorijski dumpovi se pakuju u CAB datoteke radi uštede prostora ili olakšavanja prenosa. WinDbg može direktno otvoriti .cab sa dumpom unutra, i korištenjem -z i sa .opendumpiako će čitati Izdvojit će samo jednu od datoteka koje se dumpuju i neće izdvojiti ostale datoteke. to bi moglo ići u istom paketu.

Crash dumps u Unixu i Linuxu: uslužni programi, alati i zahtjevi

U Unix i GNU/Linux sistemima, filozofija je slična, ali se ekosistem alata znatno razlikuje. Većina Unix-sličnih kernela nudi mogućnost sačuvati kopiju memorije kada se dogodi katastrofalan događaj, ono što znamo kao izvatka jezgra ili izvod iz pada kernela.

Iako je njihova primarna upotreba i dalje razvoj kernela i drajvera, ovi dumpovi imaju jasan sigurnosni aspekt. Pad sistema može biti uzrokovan... programske greške, ali i zlonamjerne radnje neuspjeli pokušaji manipulacije sistemskim komponentama ili nespretno iskorištavanje uslova utrke.

U dobro konfigurisanom Unix sistemu, dnevni padovi sistema nisu česti, ali kada se dogode, mudro je imati rezervni plan. infrastruktura za odlaganje podataka kao što su Kdump, LKCD ili druga rješenja koji omogućavaju snimanje sistemske memorije. Međutim, potrebno je odvagnuti i dijagnostičku vrijednost dumpa i rizik da on sadrži vrlo osjetljive podatke.

Jedan od najkompletnijih i najrasprostranjenijih alata za ovu vrstu analize u Linuxu je sudarPrvobitno razvijen od strane Red Hata, ovaj uslužni program je postao de facto standard za ispitivanje kernel dumpova i analizu pokrenutih sistema.

  Skeniranje virusa u Windowsu 11 pomoću Windows Defendera: praktični vodič i savjeti

Pad sistema može djelovati protiv žive memorije sistema kroz /dev/mem ili, u Red Hat i izvedenim distribucijama, korištenjem specifičnog uređaja /dev/crashUprkos tome, uobičajena je praksa da se alatu dostavlja datoteka s podacima generirana mehanizmima kao što su Kdump, napraviti datoteku za ispis, Ispis diska ili arhive specifične za arhitekturu poput s390/s390x ili xendump u virtuelizovanim okruženjima.

Uloga crasha i važnost vmlinuxa u Linuxu

Uslužni program za rušenje je dijelom kreiran kako bi se prevazišla ograničenja korištenja gdb direktno na /proc/kcoreIzmeđu ostalog, pristup toj pseudo-slici memorije može biti ograničen, a osim toga, određene opcije kompajliranja kernela otežavaju pravilnu interpretaciju unutrašnjih struktura ako imamo samo komprimiranu izvršnu binarnu datoteku.

Da bi sistem sudara ispravno funkcionisao, potrebna su dva ključna elementa: ​​a vmlinux datoteka kompajlirana sa simbolima za otklanjanje grešaka (obično sa zastavicama poput -g) i sam kernel dump. Ova kombinacija omogućava alatu da mapira memorijske adrese na funkcije, strukture i linije koda.

Važno je razlikovati vmlinux i vmlinuzNa većini sistema, vidljiv je samo vmlinux, što je komprimirana, bootabilna verzija kernela. Za rušenje sistema potreban je simbolički dekomprimirani vmlinux; bez njega, pri pokušaju učitavanja dumpa ili /dev/mem Naići ćemo na greške tipa Ne mogu pronaći pokrenuto jezgro — unesite argument liste imena.

Iako je moguće ručno dekompresovati vmlinuz, proces nije uvijek jednostavan i, u praksi, obično je mnogo praktičniji. Ponovo kompajlirajte kernel da biste dobili i vmlinux i vmlinuz paralelno. U ozbiljnim administrativnim okruženjima, dobra je praksa održavati vmlinux koji odgovara svakoj verziji kernela raspoređenoj upravo za ove slučajeve.

Nakon što su zahtjevi ispunjeni, rušenje dumpa je relativno jednostavno: odredite odgovarajući vmlinux i dump datoteku, a alat otvara interaktivnu sesiju iz koje možete pregledati strukture kernela, listati procese, pregledati stekove poziva i izdvojiti forenzičke informacijeOni koji žele još dublje istražiti mogu konsultovati specijaliziranu dokumentaciju, kao što je dobro poznati dokument o tehničkim padovima sistema.

Ograničenja /dev/mem i prvi pristupi u Linuxu

Prije pribjegavanja specifičnim alatima, mnogi administratori su historijski pokušavali dobiti memorijski dump. čitanje direktno s uređaja /dev/memOvaj pristup se činio jednostavnim: koristite alat poput memdump (što prebacuje taj uređaj na STDOUT) ili ga povlači iz dd if=/dev/mem of=volcado.mem.

Međutim, moderni kerneli nude opcije kompajliranja kao što su CONFIG_STRICT_DEVMEMkoji ozbiljno ograničavaju pristup iz korisničkog prostora do /dev/memTipičan rezultat je da se čitanje prekida nakon malog bloka (npr. 1 MB) ili, u najgorem slučaju, greška u toj interakciji može završiti... kernel panic trenutno i ponovno pokretanje mašine.

Ova zaštita ima savršenog smisla sa sigurnosnog stanovišta, ali nas prisiljava da tražimo Drugi načini za dobijanje pouzdanog i potpunog dumpa bez oslanjanja u potpunosti na generičke uređaje koji više nisu toliko dostupni kao prije.

Stoga je trenutni trend oslanjanje na specifične module ili integrirane infrastrukture za prikupljanje podataka o padu sistema, umjesto jednostavnog pokušaja "struganja memorije" alatima korisničkog prostora koji nisu dizajnirani za koegzistiranje s modernim politikama zaštite kernela.

LiME Forensics: Ekstrakcija memorije u Linuxu i Androidu

Vrlo moćna alternativa u forenzičkom svijetu je LiME (Linuxov program za ekstrakciju memorije)LiME je kernel modul dizajniran posebno za kontrolirano snimanje nestabilne memorije i bez ograničenja koja utječu na /dev/mem. LiME radi u kernel prostoru, tako da može mnogo direktnije pristupiti RAM-u.

LiME se distribuira sa svojim izvornim kodom i kompajlira se u odnosu na zaglavlja kernela koja se koristeProces kompajliranja generira modul .ko specifično za verziju kernela u koju će biti učitano. Nakon kompajliranja, možemo ga provjeriti alatima kao što su file kako bismo osigurali da je ELF modul koji odgovara našoj arhitekturi ispravno generiran.

Da biste koristili LiME, jednostavno učitajte modul sa insmod iz korijena i proslijedite mu odgovarajuće opcije, na primjer navođenjem odredište mrežnog dumpa koristeći TCP i sirovi format:

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

Paralelno, na mašini koja će primiti damp, slušamo na konfigurisanom portu koristeći alat kao što je ncpreusmjeravanje izlaza u datoteku:

nc <IP_origen> 4444 > volcado.mem

Nakon nekoliko minuta, ovisno o količini RAM-a i performansama mreže, imat ćemo datoteku čija veličina odgovara fizičkoj memoriji izvornog sistema. Ovo je kompletan RAM dump koji možemo analizirati forenzičkim alatima ili čak pomoću stringova ili drugih uslužnih programa kao prvi korak u pronalaženju zanimljivih lanaca.

Rizici izbacivanja podataka iz procesa i izlaganja podataka

Potpuni kernel dump je izuzetno informativan, ali može biti i pretjeran kada nas zanima samo određeni proces. U tom slučaju, ima puno smisla pribjeći... pojedinačni dumpovi procesa koristeći alate kao što su gcore u Unixu/Linuxu.

Ovi dumpovi po procesu su mnogo manji i lakše upravljivi, te vam omogućavaju da fokusirate analizu na određene aplikacije kao što su klijent za razmjenu poruka (na primjer, Skype) ili klijent za e-poštu (kao što je Thunderbird), gdje je relativno lako pronaći lozinke u običnom tekstu, tokeni sesije ili kontakt podaci ako se istraže memorijski nizovi.

  Nepotrebne aplikacije u Windowsu 11: kompletan vodič za njihovo uklanjanje

Iz perspektive razvoja, ovi osnovni dumpovi pomažu u lociranju programskih grešaka, curenja memorije ili nekonzistentnih stanja u servisu. Ali iz perspektive sigurnosti, problem nastaje kada Dampovi se generiraju rutinski i pohranjuju na lokacijama dostupnim drugim korisnicima.bilo na samom sistemu ili na dijeljenim mrežnim resursima.

Ako korisnik zakaže, na primjer, zadatak cron Periodičnim snimanjem podataka osjetljivih procesa i njihovim ostavljanjem u globalno čitljivom direktoriju, napadač otvara ogromna vrata za otkrivanje kritičnih informacija. U mnogim scenarijima revizije, analiza ovih datoteka omogućava napadaču da se oporavi akreditacije, liste kontakata, historije komunikacije i drugi privatni podaci sa relativno malim naporom.

Stoga, prilikom svake ozbiljne revizije Unix sistema, preporučljivo je posvetiti nekoliko minuta provjeri da li se generiraju dumpovi (potpuni ili djelomični), gdje se pohranjuju, koje dozvole imaju i da li ih ima. automatizirani proces koji ostavlja kopije memorije dostupne neovlaštenim korisnicima.

Post mortem analiza dumpova u FreeBSD-u sa kgdb

U BSD svijetu, a posebno u FreeBSD-u, pristup post mortem analizi uključuje Omogućite izvode iz pada sistema na sistemu i imajte jezgro kompajlirano sa simbolima za otklanjanje grešakaOvo se kontroliše iz direktorijuma za konfiguraciju kernela, obično u /usr/src/sys/<arq>/conf.

U odgovarajućoj konfiguracijskoj datoteci, generiranje simbola može se omogućiti linijom poput ove:

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

Nakon izmjene konfiguracije, kernel se mora ponovo kompajlirati. Neki objekti će biti regenerirani (kao što su trap.o) zbog promjene u datotekama za izgradnju. Cilj je dobiti kernel sa isti kod kao onaj koji ima problema, ali s dodavanjem potrebnih informacija za otklanjanje grešakaPreporučljivo je uporediti stare i nove veličine pomoću komande size kako bi se osiguralo da nije došlo do neočekivanih promjena u binarnom fajlu.

Nakon što je kernel instaliran pomoću simbola, sada možemo pregledati dump-ove sa kgdb kao što je opisano u službenoj dokumentaciji. Nisu svi simboli mogućno potpuni, a neke funkcije se mogu pojaviti bez brojeva linija ili informacija o argumentima, ali u većini slučajeva nivo detalja je dovoljan da se prati problem.

Ne postoji apsolutna garancija da će analiza riješiti sve incidente, ali u praksi, Ova strategija prilično dobro funkcioniše u visokom procentu scenarijaposebno kada se izvještaji o padu sistema kombinuju sa dobrim pregledom nedavnih sistemskih promjena.

Najbolje prakse za analizu i dokumentiranje grešaka kernela

Bez obzira na operativni sistem, analiza kernel dump-a obično na kraju dovede do tehnička dokumentacija, baze znanja, specijalizirani forumi ili čak sam izvorni kod kernela tumačiti poruke, kodove grešaka i nepoznate simbole.

U Linuxu je vrlo korisno osloniti se na službeno stablo izvornog koda, ugrađenu dokumentaciju i resurse zajednice. Mnoge poruke o greškama kernela mogu se pratiti do tačne datoteke iz koje potiču, što pomaže u razumijevanju problema. kontekst u kojem se aktivira BUG() ili WARN() odlučan.

U Windowsu, Microsoftova dokumentacija, baza znanja (KB) i tehnički forumi pružaju detaljna objašnjenja o kodovi za provjeru grešaka, preporuke za rješavanje problema i poznati obrasci grešakaKombinovanjem tih informacija sa izvještajima !analyze -v, moguće je izraditi razuman plan ublažavanja.

Prava vrijednost crash dumpa se pojavljuje kada se sve te informacije uporede sa dobro poznavanje operativnog sistema i specifičnog okruženja u kojem je došlo do kvaraSamo na taj način mogu se predložiti trajna rješenja i, prije svega, spriječiti ponavljanje istog problema u budućnosti s ozbiljnijim posljedicama.

Analiza memorijskog dumpa kernela je, u konačnici, spoj nauke i vještine: zahtijeva odgovarajuće alate, prethodnu konfiguraciju (simbole, opcije dumpa, sigurno skladištenje) i mnogo iskustva u čitanju stekova, struktura i kodova grešaka. Savladavanje ovih tehnika vam omogućava ne samo da otklanjate greške u složenim incidentima, već i drastično povećati nivo sigurnosti i otpornosti sistema kojima upravljamo.