Analisis dump memori pada Windows dengan BSOD menggunakan WinDBG

Pada saat kegagalan kritis, sistem operasi Windows mengganggu dan menampilkan layar biru kematian (BSOD). Isi RAM dan semua informasi tentang kesalahan yang terjadi dicatat dalam file halaman. Pada boot Windows berikutnya, dump dump dibuat dengan informasi debug berdasarkan data yang disimpan. Catatan kesalahan kritis dibuat dalam log peristiwa sistem.

Perhatian! Tumpukan darurat tidak dibuat jika subsistem disk gagal atau kesalahan kritis terjadi selama tahap awal boot Windows.

Konten:

  • Jenis Windows Crash Dumps
  • Cara mengaktifkan pembuatan dump memori di Windows?
  • Menginstal WinDBG di Windows
  • Mengkonfigurasi asosiasi file .dmp dengan WinDBG
  • Mengkonfigurasi server simbol debug di WinDBG
  • Analisis Crash dump di WinDBG

Jenis Windows Crash Dumps

Menggunakan sistem operasi saat ini Windows 10 (Windows Server 2016) sebagai contoh, pertimbangkan jenis-jenis utama dump memori yang dapat dibuat oleh sistem:

  • Tempat penyimpanan memori mini (256 KB) Jenis file ini termasuk jumlah informasi minimum. Ini hanya berisi pesan kesalahan BSOD, informasi tentang driver, proses yang aktif pada saat crash, dan proses atau utas kernel mana yang menyebabkan crash..
  • Pembuangan memori kernel. Sebagai aturan, ukurannya kecil - sepertiga dari memori fisik. Dump memori kernel lebih verbose dari dump mini. Ini berisi informasi tentang driver dan program dalam mode kernel, termasuk memori yang dialokasikan untuk kernel Windows dan lapisan abstraksi perangkat keras (HAL), serta memori yang dialokasikan untuk driver dan program lain dalam mode kernel.
  • Dump memori lengkap. Volume terbesar dan membutuhkan memori yang sama dengan RAM sistem Anda ditambah 1MB, yang diperlukan Windows untuk membuat file ini.
  • Pembuangan memori otomatis. Sesuai dengan dump memori inti dalam hal informasi. Hanya berbeda dalam berapa banyak ruang yang digunakan untuk membuat file dump. Jenis file ini tidak ada di Windows 7. Itu ditambahkan di Windows 8..
  • Dump memori aktif. Jenis ini memfilter item yang tidak dapat menentukan penyebab kegagalan sistem. Ini ditambahkan di Windows 10 dan sangat berguna jika Anda menggunakan mesin virtual, atau jika sistem Anda adalah host Hyper-V..

Cara mengaktifkan pembuatan dump memori di Windows?

Menggunakan Win + Pause, buka jendela dengan parameter sistem, pilih "Parameter sistem tambahan"(Pengaturan sistem lanjutan). Di tab"Opsional"(Lanjutan), bagian"Unduh dan kembalikan"(Startup dan Pemulihan) klik"Parameter"(Pengaturan). Di jendela yang terbuka, konfigurasikan tindakan jika terjadi kegagalan sistem. Centang kotak"Tulis acara ke log sistem"(Tulis acara ke log sistem), pilih jenis dump yang harus dibuat ketika sistem crash. Jika di kotak centang"Ganti file dump yang ada"(Timpa file yang ada) centang, file akan ditimpa setiap kali crash. Lebih baik hapus centang pada kotak ini, maka Anda akan memiliki lebih banyak informasi untuk dianalisis. Nonaktifkan juga restart sistem secara otomatis (Restart secara otomatis).

Dalam kebanyakan kasus, dump memori kecil akan cukup bagi Anda untuk menganalisis penyebab BSOD..

Sekarang, ketika BSOD terjadi, Anda dapat menganalisis file dump dan menemukan penyebab kegagalannya. Mini dump default disimpan di folder% systemroot% \ minidump. Untuk menganalisis file dump, saya sarankan menggunakan program ini Windbg (Microsoft Kernel Debugger).

Menginstal WinDBG di Windows

Utilitas Windbg termasuk dalam "Windows 10 SDK"(Windows 10 SDK). Unduh di sini..

File itu disebut winsdksetup.exe, ukuran 1,3 MB.

WinDBG untuk Windows7 dan sistem sebelumnya termasuk dalam paket "Microsoft Windows SDK untuk Windows 7 dan .NET Framework 4". Unduh di sini.

Jalankan instalasi dan pilih apa yang perlu dilakukan - instal paket di komputer ini atau unduh untuk instalasi di komputer lain. Instal paket di komputer lokal.

Anda dapat menginstal seluruh paket, tetapi hanya menginstal alat debug, pilih Alat Debugging untuk Windows.

Setelah instalasi, pintasan WinDBG dapat ditemukan di menu mulai.

Mengkonfigurasi asosiasi file .dmp dengan WinDBG

Untuk membuka file dump dengan klik sederhana, kaitkan ekstensi .dmp dengan utilitas WinDBG.

  1. Buka prompt perintah sebagai administrator dan jalankan perintah untuk sistem 64-bit:cd C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x64
    windbg.exe -IA

    untuk sistem 32-bit:
    C: \ Program Files (x86) \ Windows Kits \ 10 \ Debuggers \ x86
    windbg.exe -IA
  2. Akibatnya, jenis file: .DMP, .HDMP, .MDMP, .KDMP, .WEW - akan dipetakan ke WinDBG.

Mengkonfigurasi server simbol debug di WinDBG

Simbol debug (simbol debug atau file simbol) adalah blok data yang dihasilkan selama kompilasi program bersama dengan file yang dapat dieksekusi. Blok data tersebut berisi informasi tentang nama variabel, fungsi yang disebut, perpustakaan, dll. Data ini tidak diperlukan saat menjalankan program, tetapi berguna saat debugging. Komponen Microsoft dikompilasi dengan karakter yang didistribusikan melalui Microsoft Symbol Server.

Konfigurasikan WinDBG untuk menggunakan Microsoft Symbol Server:

  • Buka WinDBG;
  • Pergi ke menu File -> Jalur File Simbol;
  • Tuliskan baris yang berisi URL untuk mengunduh simbol debugging dari situs web Microsoft dan folder untuk menyimpan cache: SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols Dalam contoh ini, cache dimuat ke folder E: \ Sym_WinDBG, Anda dapat menentukan apa saja.
  • Ingatlah untuk menyimpan perubahan ke menu. File -> Simpan WorkSpace;

WinDBG akan mencari karakter di folder lokal dan, jika tidak menemukan karakter yang diperlukan di dalamnya, itu akan mengunduh karakter dari situs yang ditentukan sendiri. Jika Anda ingin menambahkan folder Anda sendiri dengan simbol, maka Anda dapat melakukannya seperti ini:

SRV * E: \ Sym_WinDBG * http: //msdl.microsoft.com/download/symbols; c: \ Symbols

Jika tidak ada koneksi Internet, unduh paket simbol dari sumber daya Paket Simbol Windows terlebih dahulu..

Analisis Crash dump di WinDBG

WinDBG debugger membuka file dump dan mengunduh simbol yang diperlukan untuk debugging dari folder lokal atau dari Internet. Anda tidak dapat menggunakan WinDBG selama proses ini. Di bagian bawah jendela (pada baris perintah debugger) muncul Debugee tidak terhubung.

Perintah dimasukkan di baris perintah yang terletak di bagian bawah jendela.

Yang paling penting untuk diperhatikan adalah kode kesalahan, yang selalu ditunjukkan dalam nilai heksadesimal dan memiliki formulir 0xXXXXXXXXX (ditunjukkan dalam salah satu opsi - BERHENTI: 0x0000007B, 07/02/2019 0008F, 0x8F). Dalam contoh kita, kode kesalahan 0x139.

Panduan kesalahan lengkap dapat ditemukan di sini..

Debugger menawarkan untuk menjalankan perintah! Analisis -v, cukup arahkan tautan dan klik. Untuk apa perintah ini??

  • Ia melakukan analisis awal dump memori dan memberikan informasi terperinci untuk memulai analisis..
  • Perintah ini menampilkan kode berhenti dan nama simbol kesalahan..
  • Ini menunjukkan setumpuk panggilan perintah yang menyebabkan crash..
  • Selain itu, alamat IP, proses, dan register kerusakan ditampilkan di sini..
  • Tim dapat memberikan rekomendasi yang sudah jadi untuk menyelesaikan masalah..

Poin utama yang harus Anda perhatikan ketika menganalisis setelah menjalankan perintah! Menganalisis -v (daftar tidak lengkap).

1: kd> !menganalisis -v

******************************** .... *******************************
* * *
* Analisis Bugcheck *
* * *
******************************** .... *******************************

Nama simbol kesalahan STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
Deskripsi kesalahan (Komponen kernel merusak struktur data kritis. Kerusakan ini berpotensi memungkinkan penyerang untuk mendapatkan kendali atas mesin ini):

Komponen kernel telah merusak struktur data penting. Korupsi berpotensi dapat memungkinkan pengguna jahat untuk mendapatkan kendali atas mesin ini.
Argumen untuk kesalahan adalah:

Argumen:
Arg1: 0000000000000003, A LIST_ENTRY telah rusak (mis. Hapus dua kali).
Arg2: ffffd0003a20d5d0, Alamat frame perangkap untuk pengecualian yang menyebabkan bugcheck
Arg3: ffffd0003a20d528, Alamat dari catatan pengecualian untuk pengecualian yang menyebabkan bugcheck
Arg4: 0000000000000000, Dicadangkan
Rincian Debugging:
------------------

Penghitung menunjukkan berapa kali sistem crash dengan kesalahan yang sama:

CUSTOMER_CRASH_COUNT: 1

Kategori utama kegagalan saat ini:

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

STOP kode kesalahan dalam format singkat:

BUGCHECK_STR: 0x139

Proses selama eksekusi dimana kegagalan terjadi (belum tentu menjadi penyebab kesalahan, hanya pada saat kegagalan dalam memori proses ini dieksekusi):

PROCESS_NAME: sqlservr.exe

CURRENT_IRQL: 2

Dekripsi kode kesalahan: Dalam aplikasi ini, sistem mendeteksi stack buffer overflow, yang memungkinkan penyerang untuk mendapatkan kendali atas aplikasi ini.

ERROR_CODE: (NTSTATUS) 0xc0000409 - Sistem mendeteksi overrun buffer berbasis stack dalam aplikasi ini. Overrun ini berpotensi dapat memungkinkan pengguna jahat untuk mendapatkan kendali atas aplikasi ini.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - Sistem mendeteksi overrun buffer berbasis stack dalam aplikasi ini. Overrun ini berpotensi dapat memungkinkan pengguna jahat untuk mendapatkan kendali atas aplikasi ini.

Panggilan terakhir di stack:

LAST_CONTROL_TRANSFER: dari fffff8040117d6a9 hingga fffff8040116b0a0

Tumpukan panggilan pada saat kegagalan:

STACK_TEXT:
ffffd000'3a20d2a8 fffff804'0117d6a9: 00000000'00000139 00000000'00000003 ffffd000'3a20d5d0 ffffd000'3a20d528: nt! KeBugCheckEx
ffffd000'3a20d2b0 fffff804'0117da50: ffffe000'f3ab9080 ffffe000'fc37e001 ffffd000'3a20d5d0 fffff804'0116e2a2: nt! KiBugCheckDispatch + 0x69
ffffd000'3a20d3f0 fffff804'0117c150: 00000000'0000000000000000000000000000000000'00000000000000000000000000: nt! KiFastFailDispatch + 0xd0
ffffd000'3a20d5d0 fffff804'01199482: ffffc000'701ba270 ffffc000'00000001 000000ea'73f68040 fffff804'000006f9: nt! KiRaiseSecurityCheckFailure + 0x3d0
ffffd000'3a20d760 fffff804'014a455d: 00000000'00000001 ffffd000'3a20d941 ffffe000'fcacb000 ffffd000'3a20d951: nt! ?? :: FNODOBFM :: 'string' + 0x17252
ffffd000'3a20d8c0 fffff804'013a34ac: 00000000'00000004 00000000'00000000 ffffd000'3a20d9d8 ffffe001'0a34c600: nt! IopSynchronousServiceTail + 0x379
ffffd000'3a20d990 fffff804'0117d313: ffffffff'fffffffe 00000000'00000000 00000000'00000000000000ebeb_a0cf1380: nt! NtWriteFile + 0x694
ffffd000'3a20da90 00007ffb'475307da: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: nt! KiSystemServiceCopyEnd + 0x13
000000ee'f25ed2b8 00000000'00000000: 00000000'00000000 00000000'00000000 00000000'00000000 00000000'00000000: 0x00007ffb'475307da

Bagian dari kode tempat kesalahan terjadi:

FOLLOWUP_IP:
nt! KiFastFailDispatch + d0
fffff804'0117da50 c644242000 mov byte ptr [rsp + 20h], 0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt! KiFastFailDispatch + d0
FOLLOWUP_NAME: Pemiliki Mesin

Nama modul di tabel objek kernel. Jika penganalisis mampu mendeteksi driver masalah, nama ditampilkan di bidang MODULE_NAME dan IMAGE_NAME:

MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe

Jika Anda mengklik pada tautan modul (nt), Anda akan melihat informasi terperinci tentang lintasan dan properti modul lainnya. Temukan file yang ditentukan dan pelajari propertinya.

1: kd> lmvm nt
Jelajahi daftar modul lengkap
File gambar simbol yang dimuat: ntkrnlmp.exe
File gambar memori yang dipetakan: C: \ ProgramData \ dbg \ sym \ ntoskrnl.exe \ 5A9A2147787000 \ ntoskrnl.exe
Jalur gambar: ntkrnlmp.exe
Nama gambar: ntkrnlmp.exe
Nama Internal: ntkrnlmp.exe
OriginalFilename: ntkrnlmp.exe
ProductVersion: 6.3.9600.18946
FileVersion: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

Dalam contoh di atas, analisis menunjuk ke file kernel ntkrnlmp.exe. Ketika analisis dump memori menunjuk ke driver sistem (misalnya, win32k.sys) atau file kernel (seperti dalam contoh kita ntkrnlmp.exe), kemungkinan besar bukan penyebab masalahnya. Seringkali ternyata masalahnya terletak pada driver perangkat, pengaturan BIOS, atau kegagalan perangkat keras.

Jika Anda melihat bahwa BSOD disebabkan oleh driver pihak ketiga, namanya akan ditunjukkan dalam nilai MODULE_NAME dan IMAGE_NAME.

Sebagai contoh:

Jalur gambar: \ SystemRoot \ system32 \ drivers \ cmudaxp.sys
Nama gambar: cmudaxp.sys

Buka properti dari file driver dan periksa versinya. Dalam kebanyakan kasus, masalah dengan driver diselesaikan dengan memperbarui mereka..