Top Banner
Omar Sardar Dimiter Andonov Finding in Windows 10 ++
71

Finding in Windows 10 - Black Hat Briefings · 2019. 8. 3. · ©2019 FireEye Memory Manager Crash Course Windows 10 Updates Accessing Compressed Memory Automating Analysis Volatility

Jan 28, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Omar Sardar

    Dimiter Andonov

    Finding in Windows 10 ++

  • ©2019 FireEye©2019 FireEye

    ▪ Staff Reverse Engineer @

    –Reverse engineer malware daily

    –Automate reverse engineering

    –Analyze Windows Internals for Product

    ▪ Interests

    Omar Sardar

    2

    @osardar1

  • ©2019 FireEye©2019 FireEye

    ▪ Sr. Staff Reverse Engineer @

    –Reverse engineer malware daily

    –Bootkit & Rootkit analysis

    –Analyze Windows Internals for Product

    ▪ Interests

    Dimiter Andonov

    3

    @dandonov

  • ©2019 FireEye©2019 FireEye

    Story Time

    4

  • ©2019 FireEye©2019 FireEye

    Obligatory IDA Screenshot

    5

  • ©2019 FireEye©2019 FireEye

    ▪Memory Manager Crash Course

    ▪Windows 10 Updates

    ▪Accessing Compressed Memory

    ▪Automating Analysis

    ▪Volatility & Rekall Support

    ▪Malware Extraction Demo

    ▪Q&A

    Overview

    6

  • ©2019 FireEye©2019 FireEye

    ▪Provides process with 2GB to 128TB memory

    ▪Translates virtual memory to physical memory

    ▪Moves data to-and-from hard drive (paging)

    ▪Book-keeping

    Memory Manager Overview

    7

  • ©2019 FireEye©2019 FireEye

    ▪Windows grants a new x64 process with 8TB

    –System doesn’t have 8TB for each process

    –8TB memory space is virtual

    –Data is accessed by reading from an address

    –Pages are 0x1000 bytes

    –Location of actualdata is transparent

    Virtual Memory

    8

  • ©2019 FireEye©2019 FireEye

    ▪Memory address is a series of indices & offset

    ▪Each index represents an entry in a table

    ▪The last table contains Page Table Entries

    Breaking Down a Virtual Address

    9

    0xD1A7460000

    000000001 101000110 100111010 000000000000

    PML4 PDPT PD Offset

    001100000

    PT

  • ©2019 FireEye©2019 FireEye

    Page Tables (x64)

    CR3

    PML4E [0]

    PML4E [1]

    PML4E [2]

    PML4E [511]

    PDPTE [0]

    PDPTE [1]

    PDPTE [2]

    PDPTE [326]

    PDPTE [511]

    PDE [0]

    PDE [1]

    PDE [2]

    PDE [314]

    PDE [511]

    PTE [0]

    PTE [1]

    PTE [2]

    PTE [96]

    PTE [511]

  • ©2019 FireEye©2019 FireEye

    Page Table Entries (PTEs)

    11

    kd> dt nt!_MMPTE*ntkrnlmp!_MMPTEntkrnlmp!_MMPTE_SUBSECTIONntkrnlmp!_MMPTE_HARDWAREntkrnlmp!_MMPTE_SOFTWAREntkrnlmp!_MMPTE_PROTOTYPEntkrnlmp!_MMPTE_TIMESTAMPntkrnlmp!_MMPTE_LISTntkrnlmp!_MMPTE_TRANSITION

  • ©2019 FireEye©2019 FireEye

    _MMPTE_SOFTWARE

    12

    Valid

    PageFileReserved

    PageFileAllocated

    ColdPage

    SwizzleBit

    Protection

    Prototype

    Transition

    PageFileLow

    UsedPageTableEntries

    ShadowStack

    Unused

    PageFileHigh

  • ©2019 FireEye©2019 FireEye

    _MMPTE_SOFTWARE Example

    13

  • ©2019 FireEye©2019 FireEye

    Demand-Paging Model

    14

    ?

  • ©2019 FireEye©2019 FireEye

    ▪Accessing data from a hard drive is

    ▪Accessing data from RAM is

    ▪Modern operating systems compress memory

    –Allows for more data to be stored in RAM

    –Highly parallelizable operation

    –Flexible kernel deployment

    Case for Compression

    15

  • ©2019 FireEye©2019 FireEye

    Mystery Pagefile

    16

  • ©2019 FireEye©2019 FireEye

    ▪Structure used to represent traditional pagefiles

    ▪Now supports Virtual Stores

    ▪Check VirtualStorePageFile for confirmation

    ▪Array of pagefiles located at nt!MmPagingFile

    MMPAGING_FILE

    17

  • ©2019 FireEye©2019 FireEye

    ▪Storage allocation & content tracking

    ▪Encryption & compression

    ▪Add, retrieve, or remove data

    ▪Each store page is represented by a key

    ▪Supports memory compression

    Store Manager

    18

  • ©2019 FireEye©2019 FireEye

    ▪Created by the Store Manager

    ▪XPRESS Compression Format

    ▪Pages stored in MemCompression

    ▪1 Page : 1 Key

    Virtual Store

    19

  • ©2019 FireEye©2019 FireEye

    Store Manager Page Key (ALG0)

    20

    Valid

    PageFileReserved

    PageFileAllocated

    ColdPage

    SwizzleBit

    Protection

    Prototype

    Transition

    PageFileLow

    UsedPageTableEntries

    ShadowStack

    Unused

    PageFileHigh

    PageFileLow PageFileHigh

    (PageFileLow

  • ©2019 FireEye©2019 FireEye

    20017A4D

    SM_PAGE_KEY (ALG0)

    21

  • ©2019 FireEye©2019 FireEye

    Store Manager Page Key (ALG1)

    22

    Valid

    PageFileReserved

    PageFileAllocated

    ColdPage

    SwizzleBit

    Protection

    Prototype

    Transition

    PageFileLow

    UsedPageTableEntries

    ShadowStack

    Unused

    PageFileHigh

    PageFileLow PageFileHigh

    SwizzleBit

    SwizzleBit

    (PageFileLow

  • ©2019 FireEye©2019 FireEye

    20024EDF

    SM_PAGE_KEY (ALG1)

    23

  • ©2019 FireEye©2019 FireEye

    Dude, Where’s my Page?

    24

  • ©2019 FireEye©2019 FireEye

    Navigating the Store Manager

    25

  • ©2019 FireEye©2019 FireEye

    ▪Journey begins at nt!SmGlobals

    ▪Calculate SM_PAGE_KEY

    ▪Search B+TREE for key

    ▪Determine store containing key

    Finding Your Store

    26

  • ©2019 FireEye©2019 FireEye

    B+TREE Layout

    27

    Key

    Key

    Key

    Key

    Tree Root

    # Entries

    Key Store Flags

    Key Store Flags

    Key Store Flags

    Key Store Flags

    Key Store Flags

    Key Store Flags

    Key Store Flags

  • ©2019 FireEye©2019 FireEye

    Traversing a B+TREE

    28

    2001a210 0000 3

    2001ac16 0000 3

    2001b689 0000 3

    2001b691 0000 3

    2001b687 0000 3

    2001b688 0000 3

    000200a2 a415d000

    2001c460 a875f000

    2001e6bc a2546000

    62,720 2001a210 a5c01000

    2001B68F

    2001b68f 0000 3

    a4163000a4163000

    2001a210 a5c01000

    2001b68f 0000 3

  • ©2019 FireEye©2019 FireEye

    Finding Your Store

    29

  • ©2019 FireEye©2019 FireEye

    ▪Store-specific structures

    –All information leads to locating a page record

    ▪SMKM_STORE

    –Pointer to an array of pointers to regions of compressed pages

    ▪ST_DATA_MGR

    –Chunk keys, compression format, region indices

    ▪SMHP_CHUNK_METADATA

    –Array of chunks that contains vectors of page records

    SMKM_STORE & Family

    30

  • ©2019 FireEye©2019 FireEye

    ▪Obtain Chunk Key from local B+TREE

    ▪Chunks lead us to ST_PAGE_RECORD

    ▪ST_PAGE_RECORD leads us to a Region

    ▪Regions lead us to

    Deriving Page Virtual Address

    31

  • ©2019 FireEye©2019 FireEye

    ▪Compressed pages previously stored in System

    ▪Storage container for all compressed data

    ▪Minimal process

    –No PEB or user threads, NTDLL is not mapped

    ▪Minimal threads (No TEB)

    –Page compression

    –Page read/write

    –Page swapping

    MemCompression

    32

  • ©2019 FireEye©2019 FireEye

    The Big Picture

    33

    ?

  • ©2019 FireEye©2019 FireEye

    34

  • ©2019 FireEye©2019 FireEye

    ▪Structures change between builds

    ▪Analysis effort is ~8h/kernel

    ▪Too many kernels

    ▪Automated analysis desired

    Structure Extraction Automation

    35

    Windows 10 0 17134 117

    OS Name Major Minor Build Revision

  • ©2019 FireEye©2019 FireEye

    ▪ IDA Pro Unicorn

    ▪Written by Tom Bennett @

    ▪Scriptable emulation framework

    ▪Rapid prototyping

    FLARE-EMU

    36

  • ©2019 FireEye©2019 FireEye

    ▪Analyzed ~10 kernels manually

    ▪Discovered commonalities

    –Structure locations

    –Function prototypes

    –Order of operations

    –Data usage patterns

    –Callstacks

    FLARE-EMU

    37

  • ©2019 FireEye©2019 FireEye

    Automate This

  • ©2019 FireEye©2019 FireEye

    FLARE-EMU

    3939

    ST_DATA_MGR

    AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzBaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzCaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzDaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzEaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzFaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzGaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzHaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzIaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzJaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzKaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzLaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzMaMbMcMdMeMfMG

  • ©2019 FireEye©2019 FireEye

    FLARE-EMU

    40

    “Km”

    0x20001400

    0x1423

    0x31001200

    0x1163

    0x20101000

    AaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzBaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzCaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzDaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzEaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzFaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzGaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzHaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzIaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzJaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzKaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzLaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzMaMbMcMdMeMfMG

  • ©2019 FireEye©2019 FireEye

    Field Offset Located

    41

    >>>pattern.find(“Km”)

    0x220

  • ©2019 FireEye©2019 FireEye42

    Rinse & Repeat

  • ©2019 FireEye©2019 FireEye43

  • ©2019 FireEye©2019 FireEye44

    “With Windows 10 you're not getting data you'd expect

    because it's compressed in

    memory...”- Andrew Case

  • ©2019 FireEye©2019 FireEye

    ▪ research integrated into plugins

    –Blaine Stancill (Volatility Lead)

    –Sebastian Vogl (Rekall Lead)

    Volatility & Rekall

    45

  • ©2019 FireEye©2019 FireEye

    Plugin’s Baby Steps

    46

    Compressed Address

    Decompressed Data

  • ©2019 FireEye©2019 FireEye

    volshell

    47

  • ©2019 FireEye©2019 FireEye

    Transparent Translation

    48

  • ©2019 FireEye©2019 FireEye

    modules

    49

  • ©2019 FireEye©2019 FireEye

    dlllist -p 2444

    50

  • ©2019 FireEye©2019 FireEye

    driverscan

    51

  • ©2019 FireEye©2019 FireEye

    ldrmodules

    52

  • ©2019 FireEye©2019 FireEye

    hashdump

    53

  • ©2019 FireEye©2019 FireEye

    Unlocked Data

    54

  • ©2019 FireEye©2019 FireEye

    Malware Overview

    55

    EXE DLL Shellcode

    Payload EXE

    Shellcode Comms

    Server DLL

  • ©2019 FireEye©2019 FireEye

    Get the Basics (imageinfo)

    56

  • ©2019 FireEye©2019 FireEye

    pstree

    57

  • ©2019 FireEye©2019 FireEye

    dlllist -p 5684

    58

  • ©2019 FireEye©2019 FireEye

    handles -p 5684 -t mutant

    59

  • ©2019 FireEye©2019 FireEye

    ▪malfind

    ▪handles (file)

    ▪procdump

    ▪dlldump

    ▪vaddump

    Fails

    60

  • ©2019 FireEye©2019 FireEye

    Malware Overview

    61

    EXE DLL Shellcode

    Payload EXE

    Shellcode Comms

    Server DLL

  • ©2019 FireEye©2019 FireEye

    handles -p 5684 -t mutant / file

    62

  • ©2019 FireEye©2019 FireEye

    malfind -p 5684

    63

    Shellcode

  • ©2019 FireEye©2019 FireEye

    malfind -p 5684

    64

  • ©2019 FireEye©2019 FireEye

    Server DLL Strings

    65

  • ©2019 FireEye©2019 FireEye

    Payload Strings

    66

  • ©2019 FireEye©2019 FireEye

    Malware Overview

    67

    EXE DLL Shellcode

    Payload EXE

    Shellcode Comms

    Server DLL

  • ©2019 FireEye©2019 FireEye

    Enhanced Analysis

    68

  • ©2019 FireEye©2019 FireEye

    Call It a Day

    69

  • github.com/fireeye

    win10_volatility win10_rekall flare-emuwin10_auto

    flare-on.com

  • Omar Sardar – Technical Lead (2016+)

    Claudiu Teodescoru – Technical Lead (2016)

    Dimiter Andonov – Windows Research (2017+)

    Blaine Stancill – Volatility Integration (2019+)

    Sebastian Vogl – Rekall Integration (2016+)

    win10_volatility win10_rekall flare-emuwin10_auto