- Izvještaji o stanju jezgre bilježe stanje sustava u kritičnim greškama i ključni su za otklanjanje pogrešaka i sigurnosnu reviziju.
- U sustavu Windows, analiziraju se pomoću WinDbg-a ili KD-a, koristeći simbole i naredbe poput !analyze -vy .bugcheck za lociranje upravljačkih programa i uzroka pogreške.
- U Linuxu, alati poput crash, LiME i gcore omogućuju vam izdvajanje i proučavanje kernel i procesnih dumpova, s posebnom pažnjom na zaštitu osjetljivih podataka.
- FreeBSD i drugi Unix sustavi zahtijevaju kernele kompajlirane sa simbolima i korištenje kgdb-a, uvijek se oslanjajući na dokumentaciju i izvorni kod za interpretaciju rezultata.

Kada operativni sustav paniči ili se spektakularno sruši, jedini način da se shvati što se dogodilo jest... dump memorije kernela i naknadna analizaOvi dumpovi bilježe unutarnje stanje sustava u trenutku kvara i predstavljaju sirovinu za otklanjanje složenih pogrešaka, istraživanje sigurnosnih incidenata ili provođenje forenzičkih ispitivanja.
Iako možda zvuči vrlo "niskorazinsko", analiziranje memorijskog dumpa nije isključivo za razvojne programere kernela. Administratori sustava, 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 Windowsima, Unixu/Linuxu i BSD-u, koristeći alate kao što su WinDbg, crash, kgdb i LiME.
Što je izvadak memorije kernela i zašto ga vrijedi analizirati?
Izvadak memorije kernela (često se naziva Izvadak iz sustava za rušenje kernela ili jednostavno izvadak iz sustava za rušenje) je datoteka koja sadrži kopiju, potpunu ili djelomičnu, memorije u trenutku kada sustav pretrpi kritičan kvar, kao što je kernel panika u Unixu/Linuxu ili plavi ekran smrti (BSOD) u Windowsima.
U praksi, ovakva vrsta odlagališta štedi interne strukture kernela, stogovi poziva, kontekst procesa i učitani upravljački programiZahvaljujući tome, nakon katastrofe može se napraviti "post mortem" analiza, vrlo slična otklanjanju pogrešaka u aktivnom sustavu, ali bez pritiska dodirivanja proizvodnog stroja dok ne radi.
Razlozi za duboko istraživanje kernel dumpova su različiti: od otklanjanje pogrešaka u naizgled nasumičnim greškama i povremenim padovima sustava...čak i istražujući je li sustav zlonamjerno manipuliran ili je li pad sustava ostavio tragove osjetljivih informacija na disku.
Uz potpune kernel dumpove, postoji mogućnost izdvajanja dumpova pojedinačnih procesa (klasični izvatci jezgre), koji su vrlo korisni kada ono što želimo je ograničiti problem na određenu primjenu ili pregledati utjecaj na povjerljivost usluge poput klijenta za e-poštu ili razmjenu poruka.

Vrste memorijskih dumpova u sustavu Windows i njihova korisnost
Na Windows sustavima, sam operativni sustav može generirati različite vrste izvatka kada se pojavi STOP pogreška. Svaka vrsta uključuje različitu razinu detalja, stoga je ključno znati koje koristiti. Koja vrsta dumpa nam je potrebna na temelju problema i ograničenja prostora na disku?.
Jedan od najčešćih formata u korisničkim okruženjima i mnogim poslužiteljima je mali memorijski dump (minidump)To je onaj koji zauzima najmanje prostora i obično se nalazi u %SystemRoot%\Minidump, s datotekama stila MiniMMDDYG-01.dmp.
Ovaj mini dump sadrži vrlo specifične, ali važne informacije: STOP kod greške i njegovi parametri, popis upravljačkih programa učitanih u trenutku kvara, kontekst procesora koji je zaustavljen (PRCB), kontekste uključenog procesa i niti (strukture EPROCESS i ETHREAD) i stog poziva kernel-moda te niti.
Zahvaljujući ovim osnovnim strukturama, čak i s minidumpom često je moguće identificirati koji upravljački program ili modul uzrokuje pad sustava, iako neće uvijek biti moguće pratiti cijeli problem ako on potječe daleko od niti koja se izvodila u trenutku pada. Dostupne kontekstualne informacije su ograničene.
Windows također može generirati izvatke memorije kernela i mnogo veće potpune izvatke koji sadrže dijelove ili cijelu fizičku memoriju. To je posebno korisno u analiza niske razine, forenzička istraživanja i napredno otklanjanje pogrešaka u upravljačkim programima ili samom sustavu.
Konfigurirajte i otvorite memorijske dumpove u sustavu Windows pomoću WinDbg-a i KD-a
Da biste iskoristili prednosti izvatka u sustavu Windows, prvo je ispravno konfigurirati opcije. pokretanje i oporavakU Upravljačkoj ploči, u naprednim svojstvima sustava, možete odabrati vrstu izvatka koji želite generirati u slučaju kvara: na primjer, "Mali izvatak memorije (256 KB)" i putanju gdje će se pohraniti.
Sustavu je također potreban datoteka za pokretanje na volumenu za pokretanje od najmanje nekoliko megabajta kako bi se zapisala datoteka s izvatkom. U modernim verzijama sustava Windows, svaki pad sustava stvara novu datoteku, a povijest se održava u konfiguriranoj mapi, što omogućuje jednostavan pregled prošlih incidenata.
Nakon generiranja, postoji nekoliko načina za provjeru ispravnosti dumpa. Jedan klasični alat je Dumpchk.exešto vam omogućuje provjeru osnovnog integriteta datoteke i ispis sažetnih informacija. Za napredniju analizu koriste se sljedeći: Alati za otklanjanje pogrešaka za Windows, koji uključuju WinDbg (grafičko sučelje) i KD (verzija s naredbenim retkom).
Nakon instaliranja paketa za otklanjanje pogrešaka s Microsoftove web stranice, alati se obično nalaze u mapi poput C:\Programske datoteke\Alati za otklanjanje pogrešaka za WindowsOdatle možemo otvoriti naredbeni redak i učitati dump s WinDbg ili KD pomoću parametra -z za određivanje datoteke:
windbg -y <RutaSimbolos> -i <RutaBinarios> -z <RutaDump>
Put simbola može pokazivati na poslužitelj simbola s lokalnom predmemorijom, na primjer:
srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
Iako je binarni put obično nešto poput C:\Windows\I386 ili mapu u koju smo kopirali izvršne datoteke sustava koje odgovaraju verziji koja je generirala dump. To je važno jer Minidumps ne uključuje sve binarne datoteke, samo reference na njih, pa ih debugger mora moći pronaći.
Osnovna analiza izvatka o rušenju kernela u sustavu Windows
Nakon što se dump učita pomoću WinDbg-a ili KD-a, analiza dumpa kernela nakon rušenja sustava prilično je slična sesiji otklanjanja pogrešaka nakon smrti. Prva naredba koju gotovo svi pokreću je !analizirati, što pokreće automatsku analizu i generira početno izvješće.
Naredba !analyze -show pokazati kod za provjeru grešaka i njegovi parametriDok !analyze -v Proizvodi puno detaljniji izlaz: sumnjivi modul, stog poziva, kontekstualne informacije i, u mnogim slučajevima, prijedloge o mogućim uzrocima ili dijagnostičkim koracima.
Kao nadopuna toj analizi, naredba .bugcheck Ponovno ispisuje kod greške i povezane parametre, koji se zatim mogu usporediti s referenca koda za provjeru grešaka od Microsofta kako biste saznali točno značenje svake vrijednosti i tipične uzroke.
Naredba lm N T (popis modula) vam omogućuje da vidite Popis učitanih modula s njihovom putanjom, adresama i statusomOvo pomaže potvrditi je li upravljački program identificiran automatskom analizom doista u memoriji i koja je verzija. Ovaj popis je posebno koristan kada sumnjamo na upravljačke programe trećih strana ili sigurnosne komponente koje komuniciraju s jezgrom.
Po želji, proces utovara možemo pojednostaviti stvaranjem batch datoteka Prima putanju do dumpa i pokreće KD ili WinDbg s odgovarajućim parametrima. Na taj način, potrebno je samo napisati kratku naredbu koja uključuje lokaciju datoteke, a skripta se brine za sve ostalo.
Korištenje WinDbg-a za duboke izvatke kernela
Za memorijske dumpove u kernel modu, WinDbg također nudi mogućnost rada s više datoteka i sesija. Dumpovi se mogu otvoriti iz naredbenog retka pomoću -zili iz grafičkog sučelja, pomoću izbornika Datoteka > Otvori izvadak memorije ili prečaca na tipkovnici Ctrl + D.
Ako je WinDbg već otvoren u pasivnom načinu rada, jednostavno odaberite datoteku u dijaloškom okviru "Otvori izvadak iz sustava", navodeći putanju ili pregledavajući disk. Nakon učitavanja, možemo pokrenuti sesiju naredbom g (Idi) u određenim scenarijima ili izravno pokrenuti prve naredbe za analizu.
Osim klasičnog !analyzePreporučljivo je upoznati se s odjeljak s referencom naredbe za ispravljanje pogrešakaOvo opisuje sve dostupne naredbe za čitanje unutarnjih struktura, ispitivanje memorije, interpretiranje stoga i još mnogo toga. Mnoge od ovih tehnika primjenjive su i na sesije uživo i na offline dumpove.
WinDbg vam također omogućuje rad s više paralelnih dumpovaU naredbeni redak možemo dodati više parametara -z, svaki nakon kojeg slijedi različito ime datoteke, ili dodati nove ciljeve pomoću naredbe .opendumpOtklanjanje pogrešaka na više odredišta korisno je za usporedbu ponavljajućih kvarova ili ulančanih incidenata.
U nekim okruženjima, memorijski dumpovi se pakiraju u CAB datoteke radi uštede prostora ili olakšavanja prijenosa. WinDbg može izravno otvoriti .cab s dumpom unutra, i korištenjem -z i s .opendumpiako će čitati Izvući će samo jednu od izvučenih datoteka i neće izvući ostale datoteke. to bi moglo ići u isti paket.
Izvještaji o rušenju sustava u Unixu i Linuxu: uslužni programi, alati i zahtjevi
U Unix i GNU/Linux sustavima, filozofija je slična, ali ekosustav alata se znatno razlikuje. Većina Unix-sličnih kernela nudi mogućnost spremiti kopiju memorije kada se dogodi katastrofalni događaj, ono što znamo kao izvadak jezgre ili izvadak iz sustava prilikom rušenja kernela.
Iako im je primarna namjena razvoj kernela i upravljačkih programa, ovi dumpovi imaju jasan sigurnosni aspekt. Rušenje sustava može biti uzrokovano... programske pogreške, ali i zlonamjerne radnje neuspjeli pokušaji manipuliranja komponentama sustava ili nespretno iskorištavanje uvjeta utrke.
U dobro konfiguriranom Unix sustavu, dnevni rušenja nisu česta, ali kada se dogode, mudro je imati rezervni plan. infrastruktura za odlaganje podataka kao što su Kdump, LKCD ili druga rješenja koji omogućuju snimanje sistemske memorije. Međutim, potrebno je odvagnuti i dijagnostičku vrijednost izvatka i rizik da sadrži vrlo osjetljive podatke.
Jedan od najkompletnijih i najraširenijih alata za ovu vrstu analize u Linuxu je sudarIzvorno razvijen od strane Red Hata, ovaj uslužni program postao je de facto standard za ispitivanje kernel dumpova i analizu pokrenutih sustava.
Rušenje može djelovati protiv žive memorije sustava kroz /dev/mem ili, u Red Hatu i izvedenim distribucijama, korištenjem specifičnog uređaja /dev/crashUnatoč tome, uobičajena je praksa da se alatu dostavlja datoteka s dumpom koju generiraju mehanizmi kao što su Kdump, datoteka za izradu dumpa, Ispis diska ili izvatke specifične za arhitekturu poput s390/s390x ili xendump u virtualiziranim okruženjima.
Uloga rušenja i važnost vmlinuxa u Linuxu
Uslužni program za rušenje stvoren je, dijelom, kako bi se prevladala ograničenja korištenja gdb izravno na /proc/kcoreIzmeđu ostalog, pristup toj pseudo-slici memorije može biti ograničen, a osim toga, određene opcije kompilacije kernela otežavaju pravilnu interpretaciju unutarnjih struktura ako imamo samo komprimiranu izvršnu binarnu datoteku.
Da bi sustav sudara ispravno funkcionirao, potrebna su dva ključna elementa: a vmlinux datoteka kompilirana sa simbolima za otklanjanje pogrešaka (obično sa zastavicama poput -g) i sam kernel dump. Ova kombinacija omogućuje alatu mapiranje memorijskih adresa na funkcije, strukture i retke koda.
Važno je razlikovati između vmlinux i vmlinuzNa većini sustava vidljiv je samo vmlinux, što je komprimirana, bootabilna verzija kernela. Za rušenje sustava 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 pokrenutu jezgru — unesite argument popisa imena.
Iako je moguće ručno dekomprimirati vmlinuz, proces nije uvijek jednostavan i u praksi je obično puno praktičniji. Ponovno kompajlirajte kernel kako biste dobili i vmlinux i vmlinuz paralelno. U ozbiljnim administrativnim okruženjima, dobra je praksa održavati vmlinux koji odgovara svakoj verziji kernela implementiranoj upravo za te slučajeve.
Nakon što su uvjeti 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 jezgre, navesti procese, pregledati stogove poziva i izdvojiti forenzičke informacijeOni koji žele još dublje istražiti mogu konzultirati specijaliziranu dokumentaciju, kao što je dobro poznati dokument o tehničkim padovima sustava.
Ograničenja /dev/mem i prvi pristupi u Linuxu
Prije pribjegavanja određenim alatima, mnogi administratori su povijesno pokušavali dobiti izvadak memorije. čitanje izravno s uređaja /dev/memOvaj pristup se činio jednostavnim: koristiti alat poput izvadak memorije (što ispisuje taj uređaj na STDOUT) ili povlači iz dd if=/dev/mem of=volcado.mem.
Međutim, moderne jezgre 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 panika trenutno i ponovno pokretanje stroja.
Ova zaštita ima savršenog smisla sa sigurnosnog stajališta, ali nas prisiljava da tražimo Drugi načini za dobivanje pouzdanog i potpunog dumpa bez potpunog oslanjanja 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 izvještaje o rušenju sustava, 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 alat za ekstrakciju memorije)LiME je kernel modul posebno dizajniran za kontrolirano snimanje nestabilne memorije i bez ograničenja koja utječu na /dev/mem. LiME radi u kernel prostoru, tako da može puno izravnije pristupiti RAM-u.
LiME se distribuira sa svojim izvornim kodom i kompajlira se protiv zaglavlja kernela u upotrebiProces kompilacije generira modul .ko specifičan za verziju kernela u koju će se učitati. 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.
Za korištenje LiME-a, jednostavno učitajte modul s insmod iz korijena i proslijedite mu odgovarajuće opcije, na primjer navođenjem odredište mrežnog dumpa pomoću TCP-a i sirovog formata:
insmod lime-3.x.y.ko "path=tcp:4444 format=raw"
Paralelno, na računalu koje će primiti dump, slušamo konfigurirani port pomoću alata poput 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 sustava. Ovo je potpuni 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 pomoću alata poput gcore u Unixu/Linuxu.
Ovi poprocesni dumpovi su puno manji i lakše upravljivi te vam omogućuju da usmjerite analizu na određene aplikacije kao što su klijent za razmjenu poruka (na primjer, Skype) ili klijent e-pošte (kao što je Thunderbird), gdje je relativno lako pronaći lozinke u običnom tekstu, tokeni sesije ili kontaktni podaci ako se istražuju memorijski nizovi.
Iz perspektive razvoja, ovi osnovni dumpovi pomažu u lociranju programskih pogrešaka, curenja memorije ili nekonzistentnih stanja u usluzi. Ali iz perspektive sigurnosti, problem nastaje kada Izvještaji se generiraju rutinski i pohranjuju na mjestima dostupnim drugim korisnicima.bilo na samom sustavu ili na dijeljenim mrežnim resursima.
Ako korisnik zakaže, na primjer, zadatak cron Periodičnim snimanjem izvatka 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ćuje napadaču oporavak vjerodajnice, popisi kontakata, povijest komunikacije i drugi privatni podaci uz relativno mali napor.
Stoga je u svakoj ozbiljnoj reviziji Unix sustava preporučljivo posvetiti nekoliko minuta provjeri generiraju li se dumpovi (potpuni ili djelomični), gdje se pohranjuju, koje dozvole imaju i postoje li uopće... automatizirani proces koji ostavlja kopije memorije dostupne neovlaštenim korisnicima.
Post mortem analiza dumpova u FreeBSD-u s kgdb
U BSD svijetu, a posebno u FreeBSD-u, pristup post mortem analizi uključuje Omogućite izvatke iz sustava i kompajlirajte kernel sa simbolima za otklanjanje pogrešakaOvo se kontrolira iz direktorija 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 ponovno kompajlirati. Neki objekti će biti regenerirani (npr. trap.o) zbog promjene u datotekama za izgradnju. Cilj je dobiti kernel s isti kod kao onaj koji ima problema, ali s dodavanjem potrebnih informacija za otklanjanje pogrešakaPreporučljivo je usporediti stare i nove veličine pomoću naredbe size kako bi se osiguralo da nije došlo do neočekivanih promjena u binarnoj datoteci.
Nakon što je kernel instaliran pomoću simbola, sada možemo pregledati dumpove pomoću kgdb kao što je opisano u službenoj dokumentaciji. Nisu svi simboli mogućni, a neke funkcije mogu se pojaviti bez brojeva redaka ili informacija o argumentima, ali u većini slučajeva razina detalja je dovoljna za praćenje problema.
Ne postoji apsolutno jamstvo da će analiza riješiti sve incidente, ali u praksi, Ova strategija prilično dobro funkcionira u visokom postotku scenarijaposebno kada se izvješćivanja o padu sustava kombiniraju s dobrim pregledom nedavnih promjena sustava.
Najbolje prakse za analizu i dokumentiranje pogrešaka jezgre
Bez obzira na operativni sustav, 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 pogreš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 pogreškama kernela mogu se pratiti do točne datoteke iz koje potječu, što pomaže u razumijevanju problema. kontekst u kojem se aktivira BUG() ili WARN() odlučan.
U sustavu Windows, Microsoftova dokumentacija, njegova baza znanja (KB) i tehnički forumi pružaju detaljna objašnjenja kodovi za provjeru grešaka, preporuke za rješavanje problema i poznati obrasci grešakaKombiniranjem tih informacija s izvješćima !analyze -v, moguće je izraditi razuman plan ublažavanja.
Prava vrijednost izvatka podataka o padu sustava proizlazi kada se sve te informacije usporede s dobro poznavanje operativnog sustava i specifičnog okruženja u kojem se dogodio kvarSamo 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 izvatka memorije jezgre je, u konačnici, spoj znanosti i umijeća: zahtijeva odgovarajuće alate, prethodnu konfiguraciju (simbole, opcije izvatka, sigurno pohranjivanje) i mnogo iskustva u čitanju stogova, struktura i kodova grešaka. Savladavanje ovih tehnika omogućuje vam ne samo otklanjanje pogrešaka u složenim incidentima, već i drastično povećati razinu sigurnosti i otpornosti sustava kojima upravljamo.
Sadržaj
- Što je izvadak memorije kernela i zašto ga vrijedi analizirati?
- Vrste memorijskih dumpova u sustavu Windows i njihova korisnost
- Konfigurirajte i otvorite memorijske dumpove u sustavu Windows pomoću WinDbg-a i KD-a
- Osnovna analiza izvatka o rušenju kernela u sustavu Windows
- Korištenje WinDbg-a za duboke izvatke kernela
- Izvještaji o rušenju sustava u Unixu i Linuxu: uslužni programi, alati i zahtjevi
- Uloga rušenja i važnost vmlinuxa u Linuxu
- Ograničenja /dev/mem i prvi pristupi u Linuxu
- LiME Forensics: Ekstrakcija memorije u Linuxu i Androidu
- Rizici izbacivanja podataka iz procesa i izlaganja podataka
- Post mortem analiza dumpova u FreeBSD-u s kgdb
- Najbolje prakse za analizu i dokumentiranje pogrešaka jezgre