14 Comments

  • 1. mxatone  |  novembre 12th, 2007 at 15:40

    En faite le probleme de ta technique c que si tu mappes une page writeable a cet endroit, tu va rendre le système vulnérable à toutes les attaques userland.

    Voici comment NtWriteVirtualMemory check un pointeur :

    Dump de NtWriteVirtualMemory():
    and [ebp+ms_exc.disabled], 0
    mov eax, _MmUserProbeAddress
    cmp ebx, eax
    jnb loc_5257A0

    loc_505FD0:
    mov eax, [ebx]

    [..]

    loc_5257A0: ; le mauvais cas ou l’adresse pointe dans le kernel space
    mov dword ptr [eax], 0
    jmp loc_505FD0

    kd> dd nt!MmUserProbeAddress L 1
    80557bb4 7fff0000

    Quand on regardes ca, on comprend d’abord pas vraiment pourquoi dans le mauvais cas il essaie d’ecrire 0 a MmUserProbeAddress et continue …

    C’est tout simplement pour lever une exception catch plus loin (pour return un status d’access denied).

    Alors si la page en question est writeable, l’exception n’est pas leve et on peut ecrire en ring0 … on imagine la suite facilement ;).

    Donc okay mais attention, pas writeable.

  • 2. texane  |  novembre 12th, 2007 at 17:17

    Salut,

    Pour shadow Walker, la technique me plaisait pas mal aussi (apres avoir lu le dernier MISC d ailleurs) et j avais commence a coder un truc (ca marchouille pas top, mais au moins y a une base): https://blog.kaneton.org/bin/view/Blog/Articles

    Plus precisement la technique de shadow walker consiste a desynchro les tlbs en fonction de l operation d acces a la memoire. Ca tue bien mais y a quand mm qques soucis.

    Aussi pour le coup d ajouter un mapping a la main, fais gaf aux PDEs qui contiennent des entrees mappant directement 4Mo(donc pas de PTE, les larges pages), sinon tu vas canner le systeme.

  • 3. newsoft  |  novembre 12th, 2007 at 21:08

    Il y a aussi un vieux PoC appelé CRCVert :
    http://www.vinay-mahadik.info/ReverseEngineering/crcVert/

    Je cross-poste chez b0l0k :)

  • 4. newsoft  |  novembre 12th, 2007 at 21:10

    Ah non pas de cross-post, son système de commentaires est cassé :)

    —————————–
    Asirra validation failed!

    ticket =
    start ASIRRAVALIDATION ir=
    cd ir data=
    cd ir data=
    start RESULT ir=1
    cd ir 1 data=Fail
    end Resource id #55
    cd ir 0 data=
    cd ir 0 data=
    start DEBUG ir=
    cd ir data=exceptions.Exception: invalid ticket format
    end Resource id #55
    cd ir 0 data=
    end Resource id #55
    XML:
    Fail
    exceptions.Exception: invalid ticket format
    —————————–

  • 5. admin  |  novembre 12th, 2007 at 21:57

    @newsoft
    Vi je connaissais, j’ai le code sur mon ordi.

    @texane
    J’ai regardé ton code aussi, on sent une certaine touche « linuxienne ». Je le garde, merci :]

    @mxatone
    Bien vu ! J’avais complétement oublié que cette page servir à généré une exception. Je voudrais juste préciser que cecelle-ci est levée uniquement si l’argument optionnel du pointeur NumberOfBytesWritten est présent. Dans ce cas il y un check :

    PAGE:004AF9E4 8B 5D 18                    mov ebx, [ebp+ReturnLength]
    PAGE:004AF9E7 85 DB                       test ebx, ebx ; si ebx!=0 on saute, si =0 argument non présent, ptr NULL 
    PAGE:004AF9E9 0F 85 D0 65 05 00           jnz loc_505FBF
    
    PAGE:00505FBF                         loc_505FBF:                             ; CODE XREF: NtWriteVirtualMemory(x,x,x,x,x)+5Ej
    PAGE:00505FBF 83 65 FC 00                 and [ebp+ms_exc.disabled], 0
    PAGE:00505FC3 A1 B4 FE 48 00              mov eax, _MmUserProbeAddress
    PAGE:00505FC8 3B D8                       cmp ebx, eax
    PAGE:00505FCA 0F 83 D0 F7 01 00           jnb loc_5257A0 ; si ebx > eax on jmp 
    
    PAGE:005257A0                         loc_5257A0:                             ; CODE XREF: NtWriteVirtualMemory(x,x,x,x,x)+5663Fj
    PAGE:005257A0 C7 00 00 00 00 00           mov dword ptr [eax], 0 ; !! EXCEPT !! gérée par un try{}except
    PAGE:005257A6 E9 25 08 FE FF              jmp loc_505FD0
    

    Je pense qu’il est possible de desactiver/reactiver les protection mémoire avec VirtualProtect pour écrire rapidement dans la page (code dans une critical section) et remettre la proctection en écriture après.

  • 6. texane  |  novembre 12th, 2007 at 22:28

    je dirais plutot linuxien, te fie pas au pseudo :)

  • 7. b0l0k  |  novembre 16th, 2007 at 22:59

    Yo ivan, :)

    Toujours des idées venu d’ailleurs toi, tu mange du pain perdu avec tes chocapicz pour penser a la page perdu ? =>[]

    Serieusement, encore un article clair et fun. Pour shadow walker, ce qui a été dommage c’est que la technique n’a pas eu grand succes non plus.

    Bon je viendrai sur IRC quand la vue d’un ordinateur ne me donnera plus des nausées :)

    Continue comme ca ;)

    @newsoft: ah le serveur microsoft devait pas etre en forme ( c’est rare ca ! ) quand t’as essayé de post un comment. Enfin :< toute facon c’est a l’abandon ! :)

    @ la prochaine !

  • 8. Babewn  |  novembre 17th, 2007 at 18:00

    @ texane :
    « je dirais plutot linuxien, te fie pas au pseudo »

    le « ne » n’a rien a voir avec ton genre (ni meme ton nombre :P )

    UNE touche , donc linuxienNE
    un genre linuxien , une touche linuxienne

    la faute aurait ete d’ecrire une touche linuxien …

    @Ivanlef0u :
    Bien bien mon petit.

    (j’comprend rien mais ca fait leet de te feliciter avec une petite tape bienveillante dans le dos :p )

  • 9. texane  |  novembre 17th, 2007 at 22:11

    @Babewn: oula, on ne t a pas nourri au second degre toi… en meme temps c’est sur qu on n’est pas sur le blog de Pivot :)

  • 10. Taron  |  novembre 17th, 2007 at 23:12

    sale Gauss ?

  • 11. Babewn  |  novembre 18th, 2007 at 20:58

    Je n’ai en effet rien vu qui puisse se prendre au second degré
    :-/

    Fin bon , j’arrete de polluer le blog d’Ivanov

  • 12. lethys  |  novembre 21st, 2007 at 17:54

    /me déprime alors vient pourrir tes commentaires ! Je pensais trouver un pti ea games mais pour ça je suppose qu’il faudrait voir les fichiers cachés du repository …

  • 13. Ivanlef0u’s Blog &r&hellip  |  février 4th, 2008 at 00:30

    [...] Pour comprendre comment fonctionne la protection en non-execute des pages, il faut d’abord savoir comment fonctionne la translation d’adresses virtuelles en adresses physiques, pour cela je vous invite à relire ce post. [...]

  • 14. Volatility : Extraction o&hellip  |  mai 10th, 2010 at 09:47

    [...] avons une nouvelle table : classiquement nous avions sans PAE une page directory, une page table (PDE/PTE rappelez vous) et nous pouvions pointé l’octet en mémoire physique ; maintenant nous avons une page [...]

Trackback this post