PoC Rust : contournement AMSI sans patch via Page Guard sur AmsiScanBuffer
đ Contexte PubliĂ© sur GitHub (Whitecat18/Rust-for-Malware-Development), cet article prĂ©sente un proof-of-concept (PoC) en Rust implĂ©mentant un contournement de lâAntimalware Scan Interface (AMSI) de Microsoft sans modifier un seul octet de amsi.dll. âïž MĂ©canisme technique La technique repose sur lâexploitation des exceptions de page mĂ©moire gardĂ©e (Page Guard) : La page mĂ©moire contenant AmsiScanBuffer est transformĂ©e en « trap » via VirtualProtect avec le flag PAGE_GUARD. Tout appel Ă AmsiScanBuffer dĂ©clenche une violation de page gardĂ©e (exception 0x80000001) avant lâexĂ©cution de la premiĂšre instruction. Un Vectored Exception Handler (VEH) intercepte cette exception et : Ăcrit AMSI_RESULT_CLEAN dans la variable rĂ©sultat du caller (via dĂ©rĂ©fĂ©rencement du pointeur en [Rsp+0x30]). Simule un ret pour retourner au caller. RĂ©arme le piĂšge via une exception de single-step (0x80000004) pour le prochain appel. đ§© Point critique dâimplĂ©mentation Lâarticle souligne un gotcha critique : lâargument 6 sur la pile ([Rsp+0x30]) est un pointeur vers AMSI_RESULT, pas la valeur directe. Il faut charger le pointeur puis le dĂ©rĂ©fĂ©rencer â Ă©crire directement dans le slot de pile corrompt la pile sans affecter la variable rĂ©sultat du caller. ...