GDI Font Fuzzing in Windows        Kernel for Fun       Kernel for Fun   Lee Ling Chuan & Chan Lee Yee                    ...
Agenda• Introduction•  TrueType Font (.TTF)•  TTF Fuzzer•  Exploit Demonstration – MS11‐087•  Microsoft Windows Bitmapped ...
Introduction• Two groups of categories are exist:      o g oups o catego es a e e st:  a. GDI Fonts  b. Device Fonts  b. D...
Introduction…• Raster fonts: a glyph is a bitmap that uses to  Raster fonts: a glyph is a bitmap that uses to   draw a sin...
TrueType Fonts (.TTF)            TrueType Fonts (.TTF)• TrueType font file contains data, in table  TrueType font file con...
TrueType Fonts (.TTF)…                TrueType Fonts (.TTF)…• TTF table is designed to keep the entire glyph  TTF table is...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• TrueType embedded bitmaps are also called  TrueType embedded bit...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…                .TTF Font Structure                 TTF Font Struc...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• EBDT – Embedded Bitmap Data Table:  EBDT  Embedded Bitmap Data T...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…               EBDT Table Structure               EBDT Table Struc...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• EBLC – Embedded Bitmap Location Table:  a. The ‘EBLC’ table iden...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…               EBLC Table Structure3/16/2012                      ...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• EBSC – Embedded Bitmap Scaling Table:                           ...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…               EBSC Table Structure3/16/2012                      ...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• Glyph Data (glyf)  a. This table contains information that   a T...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• TrueType instructions are uniquely specified by   their opcodes....
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• Examples: Managing the flow of control  ‐ f ti [0 1C] it JMPR   ...
TrueType Fonts (.TTF)…                 TrueType Fonts (.TTF)…• Examples: Managing the Control Value Table  ‐ function[0x44...
TrueType Fonts (.TTF)…                TrueType Fonts (.TTF)…• Important info (1) in exploitation:  Important info (1) in e...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…• Important info (2) in exploitation:     p             ( )    p  ...
TrueType Fonts (.TTF)…            TrueType Fonts (.TTF)…            The TrueType Instruction Set3/16/2012                 ...
TrueType Fonts (.TTF)…                TrueType Fonts (.TTF)…                                       itrp_InnerExecute    Gl...
TrueType Fonts (.TTF)…                TrueType Fonts (.TTF)…                                       itrp_InnerExecute    Gl...
TrueType Fonts (.TTF)…                TrueType Fonts (.TTF)…                                                itrp_InnerExec...
TrueType Fonts (.TTF)…                TrueType Fonts (.TTF)…                                                            it...
TTF Fuzzer                            TTF Fuzzer• TTF font fuzzer is created to fuzz the TTF font into   different sizes• ...
TTF Fuzzer                          TTF Fuzzer• The overall process of the fuzzer:  a. automating the installation of the ...
TTF Fuzzer                         TTF Fuzzer• A range of font size    lf=win32gui.LOGFONT()    for fontsize in range (0, ...
TTF Fuzzer                        TTF Fuzzer• Calling physical font APIs and display the   font text  font text    windll....
TTF Fuzzer            TTF Fuzzer3/16/2012                30
Exploit MS11 087            Exploit MS11‐0873/16/2012                      31
Exploit MS11 087                   Exploit MS11‐087Name                               Value   DescriptionEBSC.bitmapScaleT...
Exploit MS11 087             Exploit MS11‐087• usScaleWidth     =(EBLC.ppemX+((EBSC.ppemX*2)*                EBDT.width))/...
Exploit MS11 087            Exploit MS11‐087• usScaleHeight =  usScaleHeight =   (EBLC.ppemY+((EBSC.ppemY*2)*EBDT.height))...
Exploit MS11 087             Exploit MS11‐087• usScaleRowBytes           =((usScaledWidth+0x1F)>>3)&(0xFFFC)           = (...
Exploit MS11 087            Exploit MS11‐087• usOriginalRowBytes  usOriginalRowBytes        = ((EBDT.width+0x1F)>>3)&(0xFF...
Exploit MS11 087            Exploit MS11‐087• Byte of scaling bitmap data  Byte of scaling bitmap data           =usScaleH...
Exploit MS11 087                        Exploit MS11‐087structure fnt_GlobalGraphicStateType{    stackBase;             /*...
Exploit MS11 087                        Exploit MS11‐087structure fnt_GlobalGraphicStateType{    stackBase;             /*...
Exploit MS11 087            Exploit MS11‐087                       fnt_GlobalGraphicStateType+134h                        ...
Exploit MS11 087            Exploit MS11‐0873/16/2012                      41
Exploit MS11 087            Exploit MS11‐0873/16/2012                      42
Exploit MS11 087            Exploit MS11‐087                       ecx: value ‘stackBase+0’                       edx: val...
Exploit MS11 087            Exploit MS11‐0873/16/2012                      44
Exploit MS11 087            Exploit MS11‐0873/16/2012                      45
Exploit MS11 087            Exploit MS11‐087                         Perfectly jump into                          Perfectl...
Demonstration3/16/2012                   47
Microsoft Windows Bitmapped Font                 (.fon)                (f )• Microsoft Windows Bitmapped Fonts (.fon)  Mic...
FON FUZZER                FON FUZZER• .FON fuzzer consits of 2 files:  a. mkwinfont.py       k f      ‐ written and/or mai...
FON FUZZER                         FON FUZZER• Some modification:  a. mkwinfont.py      k i f            value = string.at...
FON FUZZER            FON FUZZER3/16/2012                51
Exploit MS11 077            Exploit MS11‐077• Discovered by Byoungyoung Lee  Discovered by Byoungyoung Lee• BSOD: BAD_POOL...
Exploit MS11 077                     Exploit MS11‐077   win32k!BmfdOpenFontContext                                ;.Fon wi...
Exploit MS11 077                     Exploit MS11‐077   win32k!BmfdOpenFontContext                      ;the ‘EngAllocMem’...
Exploit MS11 077            Exploit MS11‐0773/16/2012                      55
Exploit MS11 077                     Exploit MS11‐077 ;Font data ‘aa’ will process and the result as index to read from th...
Exploit MS11 077            Exploit MS11‐0773/16/2012                      57
Exploit MS11 077            Exploit MS11‐077               Overwrite 3 bytes in                 next pool header          ...
Limitation of Exploit MS11 077      Limitation of Exploit MS11‐077                win32k!vStretchGlyphBitmap3/16/2012     ...
Limitation of Exploit MS11 077      Limitation of Exploit MS11‐077                win32k!vStretchGlyphBitmap3/16/2012     ...
Exploit MS11 077            Exploit MS11‐0773/16/2012                      61
Exploit MS11 077 (another try)     Exploit MS11‐077 (another try)3/16/2012                             62
Exploit MS11 077                 Exploit MS11‐077            Possible to bypass Kernel Canary in Kernel Land??            ...
Demonstration3/16/2012                   64
Thank You    Credit to: jvjvlglg, Byoungyoung Lee &                    Tarjei Mandt3/16/2012                              ...
Upcoming SlideShare
Loading in...5
×

GDI Font Fuzzing in Windows Kernel For Fun

2,219

Published on

Published in: Technology, Art & Photos
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,219
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

GDI Font Fuzzing in Windows Kernel For Fun

  1. 1. GDI Font Fuzzing in Windows  Kernel for Fun Kernel for Fun Lee Ling Chuan & Chan Lee Yee Ministry of Science, Technology and Innovation
  2. 2. Agenda• Introduction• TrueType Font (.TTF)• TTF Fuzzer• Exploit Demonstration – MS11‐087• Microsoft Windows Bitmapped font (.fon) Microsoft Windows Bitmapped font ( fon)• FON Fuzzer (by Byoungyoung Lee) with some  modification• Exploit Demonstration – MS11‐077 3/16/2012 2
  3. 3. Introduction• Two groups of categories are exist: o g oups o catego es a e e st: a. GDI Fonts b. Device Fonts b. Device Fonts• GDI fonts which are based in Windows consists of  three types: yp a. raster b. Vector c. TrueType & OpenTypeReference: http://msdn.microsoft.com/en‐us/library/dd162893(v=vs.85).aspxReference: http://msdn microsoft com/en us/library/dd162893(v=vs 85) aspx3/16/2012 3
  4. 4. Introduction…• Raster fonts: a glyph is a bitmap that uses to Raster fonts: a glyph is a bitmap that uses to  draw a single character in the font• Vector fonts: a glyph is a collection of line Vector fonts: a glyph is a collection of line  endpoints that define the line segments and  uses to draw a character in the font uses to draw a character in the font• TrueType & OpenType fonts: a glyph is a  collection of line and curve commands as well  ll i f li d d ll as a collection of hints3/16/2012 4
  5. 5. TrueType Fonts (.TTF) TrueType Fonts (.TTF)• TrueType font file contains data, in table TrueType font file contains data, in table  format, that compromises an outline font • The outlines of glyphs in TrueType fonts are The outlines of glyphs in TrueType fonts are  made of straight line segments and quadratic  Bézier curves• The Windows scale these fonts to any size  using the hints inside the TTF file.• Hints included in TTF files and are used to  correct oversights3/16/2012 5
  6. 6. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• TTF table is designed to keep the entire glyph TTF table is designed to keep the entire glyph  data in various table: a. EBDT: Embedded Bitmap Data Table a EBDT: Embedded Bitmap Data Table b. EBLC: Embedded Bitmap Location Table c. EBSC: Embedded Bitmap Scaling Table EBSC E b dd d Bit S li T bl• The rasterizer uses combination of data from  differents to render the glyph data in the font diff t t d th l h d t i th f tReference: TrueType 1.0 Font File, Technical Specification Revision 1.66 August 1995 MicrosoftR f T T 10F Fil T h i l S ifi i R i i 1 66 A 1995 Mi f3/16/2012 6
  7. 7. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• TrueType embedded bitmaps are also called TrueType embedded bitmaps are also called  ‘scaler bitmaps’ or ‘sbits’• A set of bitmaps for a face at a given size is A set of bitmaps for a face at a given size is  called a strike3/16/2012 7
  8. 8. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… .TTF Font Structure TTF Font Structure3/16/2012 8
  9. 9. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• EBDT – Embedded Bitmap Data Table: EBDT  Embedded Bitmap Data Table: a. EBDT table stores the glyph bitmap data.  b. The ‘EBDT’ table begins with a header  b h ‘ ’ bl b i ih h d containing simply the table version number c. The rest of the ‘EBDT’ table is a collection of  bitmap data bitmap data3/16/2012 9
  10. 10. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… EBDT Table Structure EBDT Table Structure3/16/2012 10
  11. 11. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• EBLC – Embedded Bitmap Location Table: a. The ‘EBLC’ table identifies the sizes and glyph  range of the sbits, and keeps offsets to glyph  bitmap data in indexSubTables bit d t i i d S bT bl b. The ‘EBLC’ table begins with a header  (eblcHeader) containing the table version and  (eblcHeader) containing the table version and number of strikes. c. The eblcHeader is followed by the  bitmapSizeTable array(s) d. Each strike is defined by one bitmapSizeTable3/16/2012 11
  12. 12. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… EBLC Table Structure3/16/2012 12
  13. 13. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• EBSC – Embedded Bitmap Scaling Table: p g a. The ‘EBSC’ table allows a font to define a  bitmap strike as a scaled version of another strike b. The table begins with a header (ebscHeader)  containing the table version and number of strikes c. The ebscHeader is followed immediately by the  bitmapScaleTable array. The numSizes in the  ebscHeader indicates the number of  b H d i di t th b f bitmapScaleTables in the array d. Each strike is defined by one bitmapScaleTable d Each strike is defined by one bitmapScaleTable3/16/2012 13
  14. 14. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… EBSC Table Structure3/16/2012 14
  15. 15. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• Glyph Data (glyf) a. This table contains information that  a This table contains information that describes the glyphs in the font b. Table provides instructions for each of the following   tasks: ‐ Pushing data onto the interpreter stack ‐ managing the Storage Area managing the Storage Area ‐ managing the Control Value Table ‐ modifying Graphics State settings y g p g ‐ Managing outlines ‐ General purpose instructions3/16/2012 15
  16. 16. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• TrueType instructions are uniquely specified by  their opcodes.  th i d GLYFDirectoryEntry ‐>  DataGLYFData[x+1]‐> SimpleGLYFData[x]‐> instructions• Examples: Pushing data onto the interpreter stack – function[0xB0]: itrp_PUSHB1 p_ – function[0xB8]: itrp_PUSHW13/16/2012 16
  17. 17. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• Examples: Managing the flow of control ‐ f ti [0 1C] it JMPR function[0x1C]: itrp_JMPR ‐ function[0x1F]: itrp_LSW ‐ function[0x78]: itrp JROT function[0x78]: itrp_JROT• Examples: Managing the stack ‐ function[0x20]: itrp_DUP ‐ function[0x23]: itrp_SWAP• Examples: Managing the Storage Area ‐ function[0x43]: itrp RS function[0x43]: itrp_RS ‐ function[0x42]: itrp_WS3/16/2012 17
  18. 18. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• Examples: Managing the Control Value Table ‐ function[0x44]: itrp_WCVT ‐ function[0x45]: itrp_RCVT• Examples: Managing the Graphics State Examples: Managing the Graphics State ‐ function[0x4D]: itrp_FLIPON ‐ function[0x4E]: itrp_FLIPOFF• Examples: Arithmetic Functions ‐ function[0x60]: itrp_ADD ‐ function[0x61]: itrp SUB function[0x61]: itrp_SUBReference: Chapter Appendix B, TrueType 1.0 Font File, Technical Specification Revision 1.66 August 1995  Microsoft3/16/2012 18
  19. 19. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• Important info (1) in exploitation: Important info (1) in exploitation: structure fnt_GlobalGraphicStateType{ stackBase; / the stack area  /*the stack area store; /*the storage area controlValueTable; /*the control value table …… int8 non90DegreeTransformation /*bit0: 1 if non‐90 degree /*bit 1:1 if x scale not equal y scale …… unit16 cvtCount; } fnt_GlobalGraphicStateType;3/16/2012 19
  20. 20. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)…• Important info (2) in exploitation: p ( ) p ‐ function ‘itrp_InnerExecute’ as the disassembler  engine to process Glyph Data and map to correct  TrueType instructions TrueType instructions• fnt_GlobalGraphicStateType: +0 : stackBase +0 : stackBase +4: store +8: controlValueTable +8: controlValueTable +90h: non90DegreeTransformation +134h: cvtCount3/16/2012 20
  21. 21. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… The TrueType Instruction Set3/16/2012 21
  22. 22. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… itrp_InnerExecute Glyph data in hexadicimal format3/16/2012 22
  23. 23. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… itrp_InnerExecute Glyph data in hexadicimal format3/16/2012 23
  24. 24. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… itrp_InnerExecute ;Function[0xB0]: itrp_PUSHB1 ;’00’ is parameter of the instruction Glyph data in hexadicimal format3/16/2012 24
  25. 25. TrueType Fonts (.TTF)… TrueType Fonts (.TTF)… itrp_PUSHB1 ;ecx: parameter ‘00’ ;esi: pointer structure fnt_GlobalGraphicStateType+0 Glyph data in hexadicimal format3/16/2012 25
  26. 26. TTF Fuzzer TTF Fuzzer• TTF font fuzzer is created to fuzz the TTF font into  different sizes• In GDI, we can create a font by: a. filling in a LOGFONT structure  b. calling ‘CreateFontIndirect’ which returns a  font handle (HFONT)   c. Work with fonts at a lower level through font  W k ith f t t l l l th hf t APIs: GetFontData, GetGlyphIndices, ExtTextOut  _ _ with ETO_GLYPH_INDEX flag gReference: http://blogs.msdn.com/b/text/archive/2009/04/15/introducing‐the‐ directwrite‐font‐system.aspx3/16/2012 26
  27. 27. TTF Fuzzer TTF Fuzzer• The overall process of the fuzzer: a. automating the installation of the crafted  a automating the installation of the crafted font in ‘C:WINDOWSFonts’ folder htr=windll.gdi32.AddFontResourceExA(fileFont, FR_PRIVATE, None)  h dll d dd (f l ) b. Register a window class and creating a new  window to automate the display of the font  window to automate the display of the font text in a range of font size c. Remove the fonts in  C:WINDOWSFonts c Remove the fonts in ‘C:WINDOWSFonts’  folder windll.gdi32.RemoveFontResourceExW(fileFont, FR_PRIVATE, None) windll.gdi32.RemoveFontResourceExW(fileFont, FR PRIVATE, None)3/16/2012 27
  28. 28. TTF Fuzzer TTF Fuzzer• A range of font size lf=win32gui.LOGFONT() for fontsize in range (0, 100, 1): lf.lfHeight=fontsize lf.lfFaceName="Dexter" lf.lfWidth=0 lf lf d h lf.lfEscapement=0 lf.lfOrientation=0 lf.lfWeight=FW_NORMAL lf lfWeight=FW NORMAL lf.lfItalic=False lf.lfUnderline=False lf.lfStrikeOut False lf lfStrikeOut=False lf.lfCharSet=DEFAULT_CHARSET lf.lfOutPrecision=OUT_DEFAULT_PRECIS f f p _ _ lf.lfClipPrecision=CLIP_DEFAULT_PRECIS lf.lfPitchAndFamily=DEFAULT_PITCH|FF_DONTCARE3/16/2012 28
  29. 29. TTF Fuzzer TTF Fuzzer• Calling physical font APIs and display the  font text font text windll.gdi32.ExtTextOutW( hdc, 5, 5, ETO_GLYPH_INDEX, None, var1, var1 len(var1), None)3/16/2012 29
  30. 30. TTF Fuzzer TTF Fuzzer3/16/2012 30
  31. 31. Exploit MS11 087 Exploit MS11‐0873/16/2012 31
  32. 32. Exploit MS11 087 Exploit MS11‐087Name Value DescriptionEBSC.bitmapScaleTable[0].ppemX 0x004 Target horizontal pixels per EmEBSC.bitmapScaleTable[0].ppemY 0x004 Target vertical pixels per EmEBLC.bitmapSizeTable[5].ppemX 0x001 Horizontal pixels per EmEBLC.bitmapSizeTable[5].ppemYEBLC bit Si T bl [5] Y 0x001 Vertical pixels per Em 0 001 V ti l i l EEBDT.bitmapData.EbdtFormat8[11]. 0x001 Number of rows of datasmallMetrics.heightEBDT.bitmapData.EbdtFormat8[11]. 0x0ff Number of columns of datasmallMetrics.widthEBDT.bitmapData.EbdtFormat8[11]. 0x040 Position of component leftebdtComponent[0].xOffsetEBDT.bitmapData.EbdtFormat8[11]. 0x052 Position of component topebdtComponent[0].yOffset Important info in exploitation3/16/2012 32
  33. 33. Exploit MS11 087 Exploit MS11‐087• usScaleWidth =(EBLC.ppemX+((EBSC.ppemX*2)* EBDT.width))/(2 EBLC.ppemX) EBDT.width))/(2*EBLC.ppemX) =(0x001+((0x004*2)*0x0ff))/(2*0x001) = (0x001+0x7F8)/(0x002) (0 001 0 7F8)/(0 002) = 0x03FC 3/16/2012 33
  34. 34. Exploit MS11 087 Exploit MS11‐087• usScaleHeight = usScaleHeight =  (EBLC.ppemY+((EBSC.ppemY*2)*EBDT.height)) /(2 EBLC.ppemY) /(2*EBLC ppemY) =(0x001+0x008)/(0x002) = 0x0004 0 00043/16/2012 34
  35. 35. Exploit MS11 087 Exploit MS11‐087• usScaleRowBytes =((usScaledWidth+0x1F)>>3)&(0xFFFC) = ((0x03FC+0x1F)>>3)& (0xFFFC) ((0 03 C 0 ) 3)& (0 C) = (0x85)&(0xFFFC) = 0x80 3/16/2012 35
  36. 36. Exploit MS11 087 Exploit MS11‐087• usOriginalRowBytes usOriginalRowBytes  = ((EBDT.width+0x1F)>>3)&(0xFFFC) = ((0x0FF+0x1F)>>3)&(0xFFFC) ((0 0 0 ) 3)&(0 C) = 0x203/16/2012 36
  37. 37. Exploit MS11 087 Exploit MS11‐087• Byte of scaling bitmap data Byte of scaling bitmap data =usScaleHeight*usScaleRowBytes = 0x004 0x080 = 0x004*0x080 = 0x200• R Required byte of scaling bitmap data offset i db t f li bit d t ff t = (EBDT.yOffset)*(usOriginalRowBytes) = 0x52*0x20 = 0x0A403/16/2012 37
  38. 38. Exploit MS11 087 Exploit MS11‐087structure fnt_GlobalGraphicStateType{ stackBase; /*the stack area  store; / the storage area /*the storage area controlValueTable;    /*the control value table …… int8 non90DegreeTransformation  …… unit16 cvtCount; } fnt_GlobalGraphicStateType; BEFORE AFTER 3/16/2012 38
  39. 39. Exploit MS11 087 Exploit MS11‐087structure fnt_GlobalGraphicStateType{ stackBase; /*the stack area  store; / the storage area /*the storage area controlValueTable;    /*the control value table …… int8 non90DegreeTransformation  …… unit16 cvtCount; } fnt_GlobalGraphicStateType; BEFORE AFTER 3/16/2012 39
  40. 40. Exploit MS11 087 Exploit MS11‐087 fnt_GlobalGraphicStateType+134h  (cvtCount) BEFORE AFTER3/16/2012 40
  41. 41. Exploit MS11 087 Exploit MS11‐0873/16/2012 41
  42. 42. Exploit MS11 087 Exploit MS11‐0873/16/2012 42
  43. 43. Exploit MS11 087 Exploit MS11‐087 ecx: value ‘stackBase+0’ edx: value Control Value Table3/16/2012 43
  44. 44. Exploit MS11 087 Exploit MS11‐0873/16/2012 44
  45. 45. Exploit MS11 087 Exploit MS11‐0873/16/2012 45
  46. 46. Exploit MS11 087 Exploit MS11‐087 Perfectly jump into  Perfectly jump into the shellcode3/16/2012 46
  47. 47. Demonstration3/16/2012 47
  48. 48. Microsoft Windows Bitmapped Font  (.fon) (f )• Microsoft Windows Bitmapped Fonts (.fon) Microsoft Windows Bitmapped Fonts (.fon)  come in two different types:  a. New Executable NE (old format used by  a. New Executable NE (old format used by Windows 3)NE  b. Portable Executable PE (new 32bit  b. Portable Executable PE (new 32bit executable format used in Windows 95 and  above)Note: Can’t find any complete documentation of Microsoft Windows Bitmapped Font. If you have  any, share with me ☺!!3/16/2012 48
  49. 49. FON FUZZER FON FUZZER• .FON fuzzer consits of 2 files: a. mkwinfont.py k f ‐ written and/or maintained by Simon  Tatham ‐ python script generates NE fon files only python script generates NE .fon files only  b. fuzzer.py  ‐ written by Byoungyoung Lee i b ‐ fuzz the .fon in different width, height3/16/2012 49
  50. 50. FON FUZZER FON FUZZER• Some modification: a. mkwinfont.py k i f value = string.atol(w, 16) ;support hexadecimal b. fuzzer.py if width ! 0: if width != 0: for j in range(height): fdStr += "A"*width + "n“ fdStr += "n" fd " "3/16/2012 50
  51. 51. FON FUZZER FON FUZZER3/16/2012 51
  52. 52. Exploit MS11 077 Exploit MS11‐077• Discovered by Byoungyoung Lee Discovered by Byoungyoung Lee• BSOD: BAD_POOL_HEADER(19) Interesting bug but based on the analysis,  i b b b d h l i there is very difficult to bypass the ‘safe  unlinking’ in windows kernel pool li ki ’ i i d k l l• BSOD: DRIVER_OVERRAN_STACK_BUFFER(f7) Possible to bypass the Stack‐Canary in Kernel  Land3/16/2012 52
  53. 53. Exploit MS11 077 Exploit MS11‐077 win32k!BmfdOpenFontContext ;.Fon width=498 (0x1F2) ; eax=(0x1F2)*5=0x9ba3/16/2012 53
  54. 54. Exploit MS11 077 Exploit MS11‐077 win32k!BmfdOpenFontContext ;the ‘EngAllocMem’ function allocates a block of memory (0x160) and inserts  ;a  ‘Bmfd’ pool tag before the allocation 3/16/2012 54
  55. 55. Exploit MS11 077 Exploit MS11‐0773/16/2012 55
  56. 56. Exploit MS11 077 Exploit MS11‐077 ;Font data ‘aa’ will process and the result as index to read from the following array: a. _awStretch5W1 a. awStretch5W1 b. _BFA10171 c. _awStretch5W2 d. _BFA10191 e. _ajStretch5B1   jS h5B13/16/2012 56
  57. 57. Exploit MS11 077 Exploit MS11‐0773/16/2012 57
  58. 58. Exploit MS11 077 Exploit MS11‐077 Overwrite 3 bytes in  next pool header lh d3/16/2012 58
  59. 59. Limitation of Exploit MS11 077 Limitation of Exploit MS11‐077 win32k!vStretchGlyphBitmap3/16/2012 59
  60. 60. Limitation of Exploit MS11 077 Limitation of Exploit MS11‐077 win32k!vStretchGlyphBitmap3/16/2012 60
  61. 61. Exploit MS11 077 Exploit MS11‐0773/16/2012 61
  62. 62. Exploit MS11 077 (another try) Exploit MS11‐077 (another try)3/16/2012 62
  63. 63. Exploit MS11 077 Exploit MS11‐077 Possible to bypass Kernel Canary in Kernel Land??  Possible to bypass Kernel Canary in Kernel Land?? gave up without detail testing3/16/2012 63
  64. 64. Demonstration3/16/2012 64
  65. 65. Thank You Credit to: jvjvlglg, Byoungyoung Lee &  Tarjei Mandt3/16/2012 65
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×