Catégorie : Technique

  • Récupérer un fichier dans une machine virtuelle à l’aide des VMWare Tools

    Récupérer un fichier dans une machine virtuelle à l’aide des VMWare Tools

    Dans le cadre d’un projet pour un client, nous avons été amené à récupérer des fichiers présents dans une machine virtuelle à l’aide des VMWare Tools. Pour ce faire, rien de plus simple, il faut utiliser l’API de VMWare, dans notre cas, nous avons fait le choix d’utiliser du Python et pyvmomi

    But de l’opération ?

    Sur une machine par exemple piratée, il est alors possible, en déconnectant la machine du réseau, de récupérer son contenu qui pourrait ne pas avoir été sauvegardé, ou bien encore, à travers une autre API de VMWare, lancer un exécutable qui écrirait dans un fichier de logs le résultat et en récupérer le résultat pour analyser.

    On peut récupérer des fichiers mais on peut également en envoyer et on peut également lancer des commandes à travers les VMWare Tools. La récupération de données ne peut se faire que sur des fichiers, il faut donc zipper le contenu si vous avez besoin de récupérer un ensemble de fichiers.

    On veut du code …

    from pyVim.connect import SmartConnectNoSSL, Disconnect
    from pyVmomi import vim, vmodl
    import argparse
    import getpass
    
    def get_args():
        parser = argparse.ArgumentParser(description='Arguments for talking to vCenter')
        parser.add_argument('--host', required=True, action='store', help='vCenter host')
        parser.add_argument('--user', required=True, action='store', help='User name to use')
        parser.add_argument('--password', required=False, action='store', help='Password to use')
        parser.add_argument('--vm-name', required=True, action='store', help='Name of VM to interact with')
        parser.add_argument('--file-path', required=True, action='store', help='Path of the file to retrieve from the VM')
        parser.add_argument('--guest-user', required=True, action='store', help='Guest OS user')
        parser.add_argument('--guest-password', required=True, action='store', help='Guest OS password')
        args = parser.parse_args()
    
        if not args.password:
            args.password = getpass.getpass(prompt='Enter password for vCenter: ')
    
        return args
    
    def main():
        args = get_args()
    
        # Connect to the host without SSL certification verification
        si = SmartConnectNoSSL(host=args.host, user=args.user, pwd=args.password)
        content = si.RetrieveContent()
    
        # Find the VM
        vm = None
        for child in content.rootFolder.childEntity:
            if hasattr(child, 'vmFolder'):
                datacenter = child
                vmFolder = datacenter.vmFolder
                vmList = vmFolder.childEntity
                for vm in vmList:
                    if vm.name == args.vm_name:
                        break
                if vm:
                    break
    
        if not vm:
            print("VM not found")
            return
    
        # Set up guest file manager
        creds = vim.vm.guest.NamePasswordAuthentication(username=args.guest_user, password=args.guest_password)
        gfm = content.guestOperationsManager.fileManager
    
        # Define the file to retrieve
        guestFilePath = args.file_path
    
        # Generate a URL to download the file
        try:
            fileTransferInformation = gfm.InitiateFileTransferFromGuest(vm, creds, guestFilePath)
            print(f"Download URL: {fileTransferInformation.url}")
        except vmodl.MethodFault as error:
            print("Error: ", error.msg)
    
        # Disconnect from the host
        Disconnect(si)
    
    if __name__ == "__main__":
        main()

    Vous pouvez récupérer votre fichier à l’adresse indiquée par Download URL. Comme vous pouvez le voir, les VMWare tools doivent être installés et fonctionnels. Il faut également un nom d’utilisateur et un mot de passe pour pouvoir récupérer du contenu.

  • WatchTower : l’outil qui met à jour vos containers Docker

    WatchTower : l’outil qui met à jour vos containers Docker

    Comme sur beaucoup d’infrastructures, nous utilisons Docker et il est relativement fréquent de devoir procéder à des mises à jour des containers que nous déployons. Afin d’automatiser à minima cette tâche, nous nous sommes mis en quête de trouver l’outil qui pourrait nous simplifier la tâche, c’est ce que propose WatchTower (suite…)

  • Memcached : solution pour attaque DDoS

    L’attaque Memcrashed

    Les dernières nouvelles de Memcached (Memcrashed) sont plutôt orientées attaques DDoS. En effet, plusieurs acteurs de l’internet ont été victimes d’attaques sur le port 11211 en UDP, l’attaque aurait un effet d’amplification de 51 200x, ce qui est énorme.

    Concrètement, avec une demande toute petite, on peut consommer 51200x la bande passante en sortie pour attaquer une victime, l’attaque se produit quand on utilise le protocole UDP.

    Comment s’en protéger ?

    Comme le dit le bon adage, pour vivre heureux, vivons cachés … grosso modo, il ne faut pas exposer Memcached sans firewall pour éviter qu’une personne malicieuse s’en service ou bien tout bonnement désactiver l’écoute sur toutes les adresses IP de la machine si vous utilisez localement l’instance Memcached.

    En résumé

    Aussi, nous attirons l’attention sur cette attaque qui peut viser n’importe qui et survenir n’importe quand. Les solutions anti-DDoS ne seront certainement pas très efficaces contre le volume de l’attaque pouvant être généré. Il s’agit là de l’attaque ayant pour le moment le facteur d’amplification le plus important.

  • APC 3.1.14 est buggé

    Un billet un peu technique pour avertir les administrateurs de serveur. Nous avons procédé à la mise à jour de PHP 5.3 sur certains serveurs et nous nous sommes confrontés à un problème assez cocasse. Nous utilisons APC sur ces serveurs pour accélérer quelque peu les performances des pages PHP et bénéficier de cache. En mettant à jour vers PHP 5.3.21, nous avons également passé APC en 3.1.14 et ce changement de version d’APC a causé des gros soucis. Nous avions des erreurs 500, des scripts PHP partaient en timeout. Après désactivation d’APC, les sites refonctionnaient normalement.

    APC en version 3.1.13 conseillé actuellement

    Donc en conclusion, il ne faut pas installer APC 3.1.14 pour le moment, la version maximale conseillée actuellement est la 3.1.13 ( nous avons trouvé une version 3.1.14 fonctionnelle mais qui ressemble à une version de dev sur le site de Rasmus Lerdorf – https://lerdorf.com/apc.php )

    Sur certains sites, nous avions réussi à faire fonctionner cette nouvelle version mais ce n’était pas stable du tout, le pire était que les entrées utilisateurs étaient bien mises en cache mais pas les fichiers PHP, ce qui a un intérêt très très limité … )

    Nos clients en infogérance bénéficient désormais de PHP 5.3.21 avec APC 3.1.13. La version d’APC ne bougera pas tant que les bugs ne seront pas corrigés.