• [^] # Re: Le code de la backdoor?

    Posté par . En réponse au lien Backdoor in upstream xz/liblzma leading to ssh server compromise. Évalué à 5.

    La backdoor était sous la forme de code binaire caché dans les données de test, donc il n'y a que le .o pour le moment. Je ne doute pas que dans quelque jours, quelqu'un va coller le dump en assembleur avec une analyse. Il y a 87 ko de code compilé, avec du code existant, donc ça doit pas être non plus trop gros.

    Alors. Avoir le dump assembleur, c'est très simple. On fait un coup de objdump -d et hop.
    Ou pas.

    Ca démarre pas très bien :(

    liblzma_la_crc64_fast_o: format de fichier elf64-x86-64
    Déassemblage de la section .text.x86_codd :
    0000000000000000 <.Lx86_code.part.0>:
     0: f3 0f 1e fa endbr64
     4: 41 54 push %r12
     6: b9 02 00 00 00 mov 0ドルx2,%ecx
     b: 49 89 f4 mov %rsi,%r12
     e: be 12 00 00 00 mov 0ドルx12,%esi
     13: 55 push %rbp
     14: 48 89 d5 mov %rdx,%rbp
     17: ba 46 00 00 00 mov 0ドルx46,%edx
     1c: 53 push %rbx
     1d: 48 89 fb mov %rdi,%rbx
     20: 31 ff xor %edi,%edi
     22: 48 83 ec 20 sub 0ドルx20,%rsp
     26: e8 00 00 00 00 call 2b <.Lx86_code.part.0+0x2b>
     2b: 85 c0 test %eax,%eax
    

    code à l'adresse 0. Et toutes les fonctions sont comme ça:

    Déassemblage de la section .text.lzma_block_buffer_encoda :
    0000000000000000 <.Llzma_block_buffer_encode.0>:
     0: f3 0f 1e fa endbr64
     4: 48 29 fe sub %rdi,%rsi
     7: c7 44 24 f8 e2 05 00 movl 0ドルx5e2,-0x8(%rsp)
     e: 00 
     f: 89 d0 mov %edx,%eax
    (...)
    Déassemblage de la section .text.lzma_raw_coder_memusaga :
    0000000000000000 <.text.lzma_raw_coder_memusaga>:
     0: 55 push %rbp
     1: 49 89 f8 mov %rdi,%r8
    (...)
    Déassemblage de la section .text.lzma2_encoder_inia :
    0000000000000000 <.Llzma2_encoder_init.1>:
     0: f3 0f 1e fa endbr64
     4: 41 57 push %r15
    

    (vous avez noté que toutes les fonctions ont remplacé leur dernière lettre par un 'a' ?)

    Bref. Allons voir du côté des relocations du coup.

    $ readelf -rW infected_lib.so
    Section de réadressage '.rela.text.x86_codd' à l'adresse de décalage 0xe2e8 contient 7 entrées :
     Décalage Info Type Valeurs symbols Noms symboles + Addenda
    0000000000000027 0000007900000004 R_X86_64_PLT32 0000000000000000 .Llzma2_decoder_end.1 - 4
    000000000000020a 0000001c00000002 R_X86_64_PC32 0000000000000000 .rodata.BRANCH_TABLE0 + 1c
    000000000000032f 0000001c00000002 R_X86_64_PC32 0000000000000000 .rodata.BRANCH_TABLE0 - 4
    00000000000003ee 0000001b00000002 R_X86_64_PC32 0000000000000000 .rodata.MASK_TO_BIT_NUMBER0 + 5c
    0000000000000494 0000001b00000002 R_X86_64_PC32 0000000000000000 .rodata.MASK_TO_BIT_NUMBER0 + 3c
    0000000000000515 0000001b00000002 R_X86_64_PC32 0000000000000000 .rodata.MASK_TO_BIT_NUMBER0 + 1c
    000000000000053c 0000001b00000002 R_X86_64_PC32 0000000000000000 .rodata.MASK_TO_BIT_NUMBER0 - 4
    Section de réadressage '.rela.text.lzma_raw_coder_memusaga' à l'adresse de décalage 0xe390 contient 2 entrées :
     Décalage Info Type Valeurs symbols Noms symboles + Addenda
    0000000000000016 0000003800000004 R_X86_64_PLT32 0000000000000000 .Llzma_block_buffer_encode.0 - 4
    000000000000004a 0000008600000004 R_X86_64_PLT32 0000000000000000 .Lx86_code.part.0 - 4
    Section de réadressage '.rela.text.lzma2_encoder_inia' à l'adresse de décalage 0xe3c0 contient 4 entrées :
     Décalage Info Type Valeurs symbols Noms symboles + Addenda
    0000000000000060 0000000100000002 R_X86_64_PC32 0000000000000000 .text.lzma_raw_coder_memusaga - 4
    

    LOL PTDR! C'est un véritable challenge, là. Juste à comprendre ce que tu reloges ou pas. J'ai jamais vu ça. Du coup, je comprends mieux les gens qui ne donnent pas une analyse. Rien que reconstruire le vrai binaire, c'est un truc de gueudin. Je préfère aller boire un coup et attendre que quelqu'un le fasse, haha