The lie marketers told us in the late 1990s and early 2000s (and that many in tech still believe as an article of faith) was that people don’t dislike ads, they only dislike irrelevant ones. [...] The problem is, to make ads ever more relevant, Big Tech firms have argued they must collect vast amounts of information about people to build dossiers on them that can predict their wants and needs.
Une faille permettait à une application confinée via flatpak de s'échapper de son confinement.
On apprend au passage qu'une application flatpak qui a accès au bus DBus org.freedesktop.Flatpak
peut s'échapper en exécutant flatpak-spawn --host <commande>
. C'est le cas notamment de l'IDE VSCode (et de sa version sans télémétrie VSCodium), ce trou dans la raquette étant nécessaire pour accéder à un terminal non confiné depuis l'IDE, comme documenté sur le dépôt de l'empaquetage flatpak de VSCode
- L'agent GPG stocke le mot de passe de la clé en mémoire vive.
- Ce mot de passe est lui-même chiffré : un dump de l mémoire vive ne permet pas de le retrouver en clair.
- Néanmoins, la clé de chiffrement de ce mot de passe étant aussi en mémoire, on peut la retrouver et déchiffrer le mot de passe à partir d'un tel dump : en l'état, la protection apportée par le chiffrement est illusoire (la fonctionnalité est présentée comme pouvant servir à terme avec un TPM)
- La clé privée protégée par le mot de passe est-elle aussi stockée en mémoire vive?
- Si oui, il est inutile stocker aussi le mot de passe, c'est absurde. J'en déduis que non
- Si non, ça fait une petite protection contre attaquant peu probable qui aurait accès à la mémoire vive (accès très difficile à obtenir) mais pas au système de fichiers (accès a priori moins difficile).
Points relatifs à la sécurité:
✅ stabilité du langage (mais il manque encore des choses indispensables)
✅ la doc indique clairement de séparer la résolution des dépendances par projet
⛔ installer une dépendance passer par l'exécution de code provenant de celle-ci
Arnaud Rebillot rend compte des efforts fructueux pour "debianiser" Docker-ce (sous le nom de docker.io). Le problème principal réside dans le fort couplage en go entre un projet et ses dépendances : il faut alors séparer en plusieurs paquets indépendants lorsque les dépendances peuvent être utilisées ailleurs et maintenues séparément, mais sans séparer les composants d'un même logiciel.
Il est ironique de déployer tout cet effort pour "débundler" (définitions) un outil destiné à faire tourner des applications qui le sont au plus haut point (les conteneurs).
En 2019 Matrix a subi une intrusion sur ses serveurs. Ils en retirent plusieurs recommandations.
Sur le plan technique :
- Ne PAS utiliser l'agent forwarding avec SSH, privilégier le ProxyJump (
-J
) - placer le fichier
authorized_keys
sous le contrôle de root plutôt que sous celui de l'utilisateur - avoir des procédés automatisés pour détecter les mises à jour à lettre en œuvre
- segmenter le réseau, limiter les privilèges au minimum nécessaire
Sur le plan organisationnel:
- ils notent le danger des infrastructures (ou outils) "legacy", maintenus en fonctionnement et laissés en l'état quand les efforts se concentrent sur une nouvelle architecture/version plus sûre: il faut impérativement avoir une personne en responsabilité de lettre fin à cette situation.
- il faut des check-lists pour la remise en route des services et la rotation des secrets
- lors d'un incident, il faut quelqu'un pour coordonner les travaux, gérer la communication interne et la communication externe: si peuvent être remplies par la même personne, il s'agit bien de 3 missions distincted
Le proxy SSH fonctionne de façon similaire au proxy HTTP avec CONNECT :
- le client C ouvre une session SSH (http) vers le proxy P
- dans cette session, il demande l'ouverture d'une connexion TCP par le proxy vers le serveur S de destination
- le serveur ouvre la connexion et la redirige vers le client (il encapsule la session TCP dans la session SSH ou HTTP)
- via cette nouvelle connexion TCP, le client démarre une nouvelle session SSH ou HTTP vers S.
Plusieurs conséquences:
- si les conditions de sécurité sont réunies, le proxy ne peut ni déchiffrer ni altérer la communication entre le client et le serveur de destination (conditions réunies = usage de TLS et de certificat valide pour HTTP et préconnaissance mutuelle du serveur et du client pour SSH ou usage de SSHFP ou usage de PKI SSH)
- le proxy P connait l'adresse du client et l'adresse et le nom du serveur de destination (si le client demande un serveur par son nom plutôt que par IP), sauf si plusieurs proxies sont utilisés pour atteindre la destination.
- le serveur S de destination ne voit plus l'adresse du client, mais seulement celle du proxy.
C'est donc une forme de connexion bien plus sécurisée que par l'usage du SSH agent forwarding, qui permet au serveur proxy P d'usurper l'identité du client C auprès de n'importe quel serveur.
Voir aussi man ssh_config#ProxyJump
Les conteneurs sous Linux sont un assemblage de plusieurs outils plus simples: cgroups, namespace (et chroot) à des fins d'isolation des programmes. De leur côté, les jails de BSD, les zones de solaris ou les machines virtuelles sont des objets plus simples, conçus pour l'isolation dès le début.
En conséquence, les conteneurs sont plus complexes: plus flexibles mais aussi plus fragiles (il est plus facile de se tirer une balle dans le pied).
Un problème d'isolation permet au worker PHP, qui exécute le code de l'application pour le compte du visiteur du site web, de prendre le contrôle de l'orchestrateur php-fpm qui, dans la configuration par défaut, s'exécute avec tous les droits sur le serveur. Cette faille permet une élévation de privilèges et est potentiellement exploitable à distance si un script PHP vulnérable est présent sur le serveur.
Mitigation évidente: ne pas faire tourner php-fpm avec les droits root. Dans une installation LEMP classique, on a:
- systemd qui doit orchestrer les services et s'exécute en root (inévitable)
- nginx qui reçoit les les requêtes web et les répartit, notamment vers php-fpm. Il fonctionne avec un processus maître qui fonctionne en root pour se mettre en écoute sur le port 443 et des workers, non privilégiés, qui traitent les requêtes
- php-fpm qui tourne sous root, reçoit les requêtes vers des scripts PHP de la part de nginx et les répartit vers des workers moins privilégiés.
Ça fait beaucoup trop de choses qui tournent avec les droits root. Systemd, c'est inévitable. Mais:
- php-fpm il n'y a aucune raison
- nginx la seule raison est de pouvoir écouter sur le port 443 (port privilégié). Mais on peut confier cette tâche à systemd et ainsi réduire les droits de nginx.
Une petite page sur freedesktop explique comment utiliser l'activation par socket pour nginx et php-fpm ce qui permet pour nginx de le lancer sans les privilèges root. Dans la configuration proposée, php-fpm est lancé avec l'utilisateur "nginx", ce qui est bien car ce n'est pas root, mais pas idéal car c'est le même utilisateur que nginx, donc ça expose les clés privées TLS a des scripts PHP compromis.
Avec cette configuration, si un script contient une faille, l'attaquant pourra:
- voler les identifiants et les données d'un autre utilisateur
- accéder à la base de données sans filtre ou à toute donnée à laquelle une application PHP sur le même serveur donne accès
- (potentiellement) modifier l'application
Mais il ne pourra pas:
- installer une application arbitraire sur le système
- accéder aux clés privées du système (SSH, TLS)
- rebondir vers d'autres systèmes via les comptes administrateurs
Le même type de failles est susceptible d'apparaître sur des serveurs logiciels d'autres langages (uwsgi ou gunicorn avec python, etc.), selon la configuration par défaut (droits root pour le processus maître ou non). La même mesure de protection s'applique.
Pour un projet informatique, l'intégration continue permet de faire des opérations automatiquement: tests, construction de binaires, déploiement. Le déploiement et certains tests utilisent des éléments secrets (clés privées, mots de passe) tandis que d'autres ne nécessitent aucune information privée.
Lors du développement, les tests sont utilisés pour contrôler la qualité de modifications proposées au logiciel. Si les propositions externes sont permises (développement ouvert), L'outil d'intégration continue se retrouve à exécuter le code ainsi soumis, potentiellement malveillant. Celui-ci ne doit pas avoir accès aux secrets, sous peine de voir un attaquant les exfiltrer par ce canal.
Les opérations de déploiement et de tests avec secrets sont donc réservées au code approuvé et seuls les tests n'utilisant pas de secrets peuvent être réalisés sur les propositions externes. De plus, les secrets utilisés dans le premier cas ne doivent pas être exposés dans le second.
Pendant une semaine, Travis CI exposait des secrets aux code qui n'était pas sensé y avoir accès, mettant en danger les nombreux projets utilisant cet outil.
Les États détournent des technologies existantes pour des fins policières et, dans des états non démocratiques, à des fins de police politique. C'est du moins l'argument des oppositions à la technologie anti-pédophilie d'Apple. Est-il fondé ?
Quelques exemples (liste à compléter...) :
- The new warrant: how US police mine Google for your location and search history (The Guardian) : la police requiert de google de lui communiquer la liste des usagers présents dans telle zone à telle moment pour identifier des suspects (et non pas pour confirmer la présence de telle personne déjà suspectée ...), voire de communiquer la liste des usagers ayant cherché tel ou tel mot clé. La collecte de données opérée par Google à des fins commerciales se voit exploitée à des fins policières.
- British Telecom espionne ses usagers de cloud.mail.ru pour identifier des infractions au copyright (section « investigating intent: BT ») : « They also shared that the interception system was originally constructed as part of CleanFeed, a government initiative to block access to images of child abuse. However, it was inevitably repurposed to target copyright abuse. »
- Le fichier national des empreintes génétiques : ciblait initialement les personnes condamnées (ou soupçonnés ?) pour des délits ou crimes de nature sexuelle, et cible aujourd'hui toute infraction.
James 'albinowax' Kettle explore tout un tas de choses qui peuvent mal se passer à cause des proxys web :
- le serveur proxy et celui de destination n'interprètent pas les requêtes de la même façon (http desync attacks)
- le serveur proxy émet des requêtes HTTP ou DNS sur la base de ce qu'il voit passer (cracking the lens)
- ils ne parlent pas le même dialecte (http/2 vs http/1.1) (l'article en question)
Toutes ces choses peuvent permettre à un attaquant de cartographier le réseau cible, d'accéder à des ressources normalement cachées ou d'accéder aux données d'autres utilisateurs du même service.
Seald fournit :
- un SDK fournissant le chiffrement de bout en bout aux applications avec gestion des équipements (sous-identités associées à une identité principale) et des groupes pour partager l'information
- un séquestre stockant les clés de déchiffrement de chaque couple (information, utilisateur OU groupe), clés elles-mêmes chiffrées par le mot de passe utilisateur (le déchiffrement s'opère donc côté client)
Une interview du fondateur présente de manière claire ce dispositif et ses limites. La principale : la "racine de confiance" se résume au code exécuté. S'agissant d'applications web le plus souvent, la principale faille est donc la prise de contrôle du serveur web qui distribue l'application javascript aux clients.
Une isolation insuffisante entre les notebook jupyter exécutés par différents clients sur le cloud Azure (Microsoft) permettait, après plusieurs étapes, à un client mal intentionné d'accéder aux données d'autres clients.
TLS est un protocole de chiffrement permettant à 2 partenaires de mener une discussion sans que celle-ci soit lue par un tiers, et certifiant l'identité d'au moins un des 2 partenaires à l'autre partenaire.
Il est utilisé pour sécuriser d'autres protocoles, répondant à des besoins spécifiques (HTTP pour le web, SMTP et IMAP pour l'envoi d'emails, FTP pour le transfert de fichiers, T-SQL pour l'interrogation de bases de données SQL server).
TLS et le protocole chiffré par TLS peuvent s'articuler de 2 façons :
- on commence par établir la connexion chiffrée avec TLS puis on démarre le second protocole, entièrement chiffré (mode "implicite")
- on commence le protocole d'échange, puis les participants signalent leur souhait de chiffrer la communication, l'échange TLS se met en place puis le premier protocole reprend son cours, désormais protégé par le chiffrement (mode "explicite").
Le premier mode est considéré comme plus sûr mais, pour des raisons de rétrocompatibilité, de nombreux protocoles utilisent encore le mode explicite.
Cette étude fait le point sur de nombreuses failles logicielles permises par le mode explicite de SMTP ("starttls"), le protocole d'envoi de mails. Quasiment tous les clients mails sachant utiliser smtps (TLS implicite pour SMTP), il est recommandé d'autoriser seulement ce mode dans les clients SMTP.
Ayant identifié récemment quelques fragilités dans l'usage de TLS avec SQL Server, je ne serai pas surpris si certaines de ces failles trouvaient à s'appliquer pour le T-SQL :-) .
Les services de certificats AD sont parfois un point faible de l'environnement, permettant des mouvements latéraux ou une escalade de privilèges au sein du domaine.
L'article commence par une introduction très claire à l'authentification dans le monde Active Directory.
Modèle de menace : soit votre ennemi n'est pas le Mossad, et avec un bon mot de passe et un minimum de bon sens vous pouvez vous défendre, soit votre ennemi est le Mossad et vous êtes fichus.
Une personne qui observe le trafic chiffré entre un visiteur et un site web peut reconstituer sa navigation en mesurant la taille de chaque page consultée et des autres éléments chargés en même temps, en s'appuyant sur une image précise du site (poids de chaque page, éléments associés à chaque page, liens entre ces pages).
Cela ne permet pas de déchiffrer des messages particuliers envoyés par le visiteur au site web (mot de passe, code de carte bancaire ...).
Les iPhone sont bien sécurisés, comparables à un château fort. Mais c'est un château fort dont Apple a les clés, pas vous : c'est davantage une prison dorée qu'un domicile. À cette conception de la sécurité comme "faites confiance à Apple", les auteurs opposent l'idée de donner le contrôle à l'utilisateur, via la transparence du système.
Cellebrite vend un logiciel pour extraire plein d'informations d'un portable arraché aux mains de son propriétaire (e.g. en garde à vue), dont les clés de déchiffrement de conversations Signal. Signal remarque que leur logiciel n'est pas sécurisé et distribue des fichiers exploitant ces failles aux utilisateurs de l'application.
Anyone familiar with software security will immediately recognize that the primary task of Cellebrite’s software is to parse “untrusted” data from a wide variety of formats as used by many different apps. That is to say, the data Cellebrite’s software needs to extract and display is ultimately generated and controlled by the apps on the device, not a “trusted” source, so Cellebrite can’t make any assumptions about the “correctness” of the formatted data it is receiving. This is the space in which virtually all security vulnerabilities originate.