Ma version de LineageOS 13 pour le ZTE Open C

Bonjour à tous,

J’avais acheté en 2014 un ZTE Open C sous Firefox OS mais hélas ce système d’exploitation mobile libre n’a pas eu le succès escompté. Je me suis alors rabattu sur CyanogenMod puis LineageOS via l’excellent port non-officiel de KonstaT.

Ne voyant pas l’intérêt de changer mon téléphone tant qu’il fonctionne, j’ai donc mis à jour la rom de KonstaT afin d’avoir le dernier correctif de sécurité Android disponible permettant notamment de corriger la vulnérabilité BlueBorne et de commencer à durcir le noyau linux utilisé. Si j’ai utilisé va version 13 (Android 6.0.1) de LineageOS et non pas la 14.1 (Android 7.1.1) c’est car elle offre de meilleures performances.

Voici les modifications que j’ai effectuées :

  1. Application des recommandations KSPP sur la configuration du noyau
  2. Restriction de l’accès à /proc/<PID>/environ jusqu’à ce qu’il soit prêt
  3. Réduction de la surface d’attaque sur user_namespace par PaX/Grsecurity
  4. Désactivation de l’horodatage TCP
  5. Restriction d’accès sur /proc/config.gz et /proc/kallsyms
  6. Ajout de DENYUSB (port minimal de grsecurity)
  7. Ajout de DEVICE_SIDECHANNEL (provenant également de grsecurity)
  8. Ajout de GRKERNSEC_PROC_IPADDR (qui créé /proc/<pid>/ipaddr)
  9. Modification du driver PRIMA pour tester par la suite de générer une adresse MAC aléatoire sur cette carte wifi.

Idéalement, il faudrait rajouter l’émulation PXN/PAN et la fonction hardened usercopy pour sécuriser d’avantage la version obsolète du noyau Linux utilisé (version 3.4) ou mieux encore inclure PaX/Grsecurity. Sans plus tarder, voici :

Ma ROM personnalisée (Somme de contrôle MD5=71d4b469911b24ac49b56b7ac166df3d)
lineage-13.0-20171005-UNOFFICIAL-kis3.zip

Et le patch regroupant mes modifications :
LOÏC-UNOFFICIAL-kis3.patch

Si vous avez des questions concernant l’installation, veuillez-vous référer au site konstakang.com où tout est bien expliqué.

Publicités

Matériel pour GNU/Linux

RYF

Suite à une demande récente dans commentaire et à l’approche des fêtes de fin d’année (et oui que le temps passe vite…) beaucoup seront tentés de faire des achats numériques. En tant que Linuxien et fervent défenseur des logiciels libres, voici quelques liens pour vous aider à vous décider.

Matériel libre certifier par la FSF:
https://www.fsf.org/resources/hw/endorsement/respects-your-freedom
https://h-node.org/hardware/catalogue/en

Carte mère et PC portable pouvant être exorciser (totalement libéré):
http://www.libreboot.org/docs/hcl/
http://www.coreboot.org/Supported_Motherboards
https://www.fsf.org/resources/hw/systems/

Matériel embarqué (routeur principalement):
https://wiki.openwrt.org/toh/start

Matériel testé sous GNU/Linux:
https://www.debian.org/distrib/pre-installed#fr
https://www.ubuntu-fr.org/revendeurs
http://doc.ubuntu-fr.org/materiel_assembleurs_en_ligne
http://doc.ubuntu-fr.org/ordinateur_vendu_avec_ubuntu
http://www.dell.com/learn/fr/fr/frbsdt1/campaigns/dell-linux-ubuntu-en?c=fr&l=fr&s=bsd
https://wiki.archlinux.org/index.php/HCL/Laptops

Identifier les bons constructeurs:
http://bons-constructeurs-ordinateurs.info/#bons-optionnalite

D’autres liens à me faire connaître? N’hésitez pas à me laisser un commentaire ! 😉

Patch Linux pour changer son adresse MAC aléatoirement

MAC-freebox

Il existe plusieurs façons de changer son adresse MAC sous GNU/Linux (macchanger étant la méthode la plus connue) mais l’avantage de ce qui va suivre c’est que cela se passera directement au niveau du noyau Linux ce qui a pour avantage d’être particulièrement efficace et sûr. Alors certes il faut compiler son petit noyau mais bon nous sommes tous des geeks barbus, non?

Brad nous a sorti un petit patch (hack) sympathique pour changer aléatoirement l’adresse MAC d’une interface réseau dès que celle-ci est activée 🙂
Ainsi à chaque démarrage de l’ordinateur, les adresses MAC changent de manière aléatoire tout comme elles changeront également à chaque redémarrage du service réseau.
Pour information, le patch ci-dessous n’est pas intégré dans grsec car ce n’est pas le but visé par le projet.

Voici le code qui va bien du path « random_mac.diff » :

diff --git a/net/core/dev.c b/net/core/dev.c
index 19d9b66..9a16733 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4823,6 +4823,24 @@ int dev_change_flags(struct net_device *dev, unsigned flags)
rtmsg_ifinfo(RTM_NEWLINK, dev, changes);

__dev_notify_flags(dev, old_flags);
+
+ if ((changes & IFF_UP) && !(old_flags & IFF_UP)) {
+ /* randomize MAC whenever interface is brought up */
+ struct sockaddr sa;
+ unsigned int mac4;
+ unsigned short mac2;
+
+ mac4 = prandom_u32();
+ mac2 = prandom_u32();
+ memcpy(sa.sa_data, &mac4, sizeof(mac4));
+ memcpy((char *)sa.sa_data + sizeof(mac4), &mac2, sizeof(mac2));
+ if (!is_valid_ether_addr(sa.sa_data))
+ sa.sa_data[5] = 1;
+ sa.sa_data[0] &= 0xFC;
+ sa.sa_family = dev->type;
+ dev_set_mac_address(dev, &sa);
+ }
+
return ret;
}
EXPORT_SYMBOL(dev_change_flags);
@@ -4991,7 +5009,8 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
return dev_set_mtu(dev, ifr->ifr_mtu);

case SIOCSIFHWADDR:
– return dev_set_mac_address(dev, &ifr->ifr_hwaddr);
+ /* ignore userland MAC changes */
+ return 0;

case SIOCSIFHWBROADCAST:
if (ifr->ifr_hwaddr.sa_family != dev->type)

Pour les noyaux égals ou supérieurs à la version 3.15, j’ai dû modifier le précédant patch pour qu’il fonctionne toujours avec les versions plus récentes:

diff --git a/net/core/dev.c b/net/core/dev.c
index a30bef1..7eb6778 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5476,6 +5476,24 @@ int dev_change_flags(struct net_device *dev, unsigned int flags)

changes = (old_flags ^ dev->flags) | (old_gflags ^ dev->gflags);
__dev_notify_flags(dev, old_flags, changes);
+
+ if ((changes & IFF_UP) && !(old_flags & IFF_UP)) {
+ /* randomize MAC whenever interface is brought up */
+ struct sockaddr sa;
+ unsigned int mac4;
+ unsigned short mac2;
+
+ mac4 = prandom_u32();
+ mac2 = prandom_u32();
+ memcpy(sa.sa_data, &mac4, sizeof(mac4));
+ memcpy((char *)sa.sa_data + sizeof(mac4), &mac2, sizeof(mac2));
+ if (!is_valid_ether_addr(sa.sa_data))
+ sa.sa_data[5] = 1;
+ sa.sa_data[0] &= 0xFC;
+ sa.sa_family = dev->type;
+ dev_set_mac_address(dev, &sa);
+ }
+
return ret;
}
EXPORT_SYMBOL(dev_change_flags);
diff –git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c
index cf999e0..265c2b3 100644
— a/net/core/dev_ioctl.c
+++ b/net/core/dev_ioctl.c
@@ -260,6 +260,8 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)

case SIOCSIFHWADDR:
return dev_set_mac_address(dev, &ifr->ifr_hwaddr);
+ /* ignore userland MAC changes */
+ return 0;

case SIOCSIFHWBROADCAST:
if (ifr->ifr_hwaddr.sa_family != dev->type)

Bonne compilation 😉

libbdplus disponible dans debian via deb-multimedia.org

J’ai effectué une demande pour la création d’un paquet pour libbdplus dans Debian mais ma demande est toujours en attente depuis plusieurs mois
Pourtant cette bibliothèque est très importante si vous souhaitez pouvoir lire vos bluray protégés par BD+ sous GNU/Linux, par impatience j’ai demandé à Christian Marillat si il pouvait faire ce paquet, chose faite dans la foulée 🙂

Le paquet est donc d’ores et déjà disponible pour debian Sid (unstable) :
http://www.deb-multimedia.org/dists/unstable/main/binary-amd64/package/libbdplus0

C’est la deuxième fois que je lui demande la création d’un paquet Debian pour un logiciel de multimédia, mon autre demande étant pour CinePaint

snapshot.cinepaint.blue.angels.0.25.0.png

Outil de retouche d’images vidéo très apprécié par les sociétés hollywoodiennes d’effets spéciaux et d’animation.

Un grand merci pour son travail 😉

Mate Desktop est disponible dans Debian Jessie

Mate

L’environnement de bureau Mate, le fork de GNOME 2 est maintenant disponible dans Debian Jessie (l’actuel Debian Testing).

C’est une bonne nouvelle si comme moi vous n’êtes pas adepte des autres environnements de bureau. Pour ma part je peux résumer les autres environnements ainsi :
_GNOME 3 = Changement brutal, perte d’accès aux fonctionnalités, perte d’usabilité et d’efficacité.
_Unity = Pas pratique pour un usage quotidien ou en production.
_KDE = J’ai adoré la version 3.5 mais tout comme gnome je n’ai pas aimé le changement de direction (le bureau Plasma une atrocité).
_LXDE = Léger mais sans plus.
_XFCE = Avec le menu Whisker et les icônes modernes de bureau (je conseil d’ailleurs de tester la dernière version de Xubuntu pour s’en rendre compte) c’est vraiment pas mal mais cela s’avère moins pratique à l’utilisation (raccourci clavier, ergonomie des applications, le gestionnaire de fichier).

Pour en revenir à Mate, la version actuellement disponible est la 1.8.0 (voir cette page pour suivre le statut dans Debian, l »inclusion dans les backports pour Debian 7 stable alias Wheezy est toujours en cours). Cette version sortie début mars comporte de nouvelle fonctionnalité intéressante dont notamment :
_Caja via le menu contextuel, dispose maintenant d’une option pour ouvrir l’emplacement parent lors d’une recherche de fichier (très pratique)
_Marco dispose maintenant d’une option pour redimensionner les fenêtres rapidement au contact des bords verticaux de l’écran (centre de contrôle –> Fenêtres –> Placement –> Cocher Magnétisme des fenêtres)
_Eye of MATE, la visionneuse d’images peut désormais lire aléatoirement les photos en mode diaporama.
_Une nouvelle applet « commande » a été introduite.

Pour procéder à son installation, mettre à jour la liste de paquet :
sudo apt-get update

Puis pour installer l’environnement de bureau MATE minimale :
sudo apt-get install mate-desktop-environment-core

Sinon pour la version complète :
sudo apt-get install mate-desktop-environment

Enfin pour installer le bureau MATE complet avec quelques extras :
sudo apt-get install mate-desktop-environment-extras

A votre avis Mate sera t-il l’environnement par défaut de la prochaine version stable de Debian alias Debian 8 Jessie? A mon avis, son interface, sa légèreté, sa stabilité et son rythme de développement proche de Debian font de lui un choix idéal.

libbdplus est disponible au publique !

La bibliothèque ouverte libbdplus conçue pour décrypter le DRM BD+ du bluray est enfin disponible à tous.
Voici une capture d’écran de la lecture du bluray Avatar :

libbdplus

Bluray qui est sorti le 21 avril 2010 est dorénavant lisible dans nos distributions… Si vous souhaitez comprendre pourquoi cela a été aussi long, je vous invite à regarder la vidéo de l’équipe Videolan lors de la conférence Pas Sage En Seine 2013.

Pour résumer rapidement, voici comment lire un bluray sous GNU/Linux.

  1. Installer libbluray, libaacs et libbdplus
  2. Installer VLC, mplayer ou XBMC
  3. Installer une base de données de clés (celle-ci ou celle-là)

Avec la première base de donnée il est facile de lire un bluray de AACS v1 à v25 mais au delà c’est à vous de déchiffrer votre volume. Pour info la dernière version de AACS est la 46…

Merci aux différents développeurs et à Videolan pour ses trois bibliothèques ainsi qu’à Alessio Treglia pour les empaqueter dans Debian à chacune de mes demandes.

Libérer un BIOS/UEFI – Installation de coreboot sur l’ASRock E350M1

Coreboot_full_web

Mes chers lecteurs, bien que majorité d’entre vous utilise un système d’exploitation GNU/Linux ou *BSD, combien d’entre vous peuvent prétendre avoir un ordinateur entièrement libre et donc avoir entièrement le contrôle ?
Comme le dit si bien le site Prism-break pour éviter de participer à un programme de surveillance à votre insu vous devez avoir un accès total au code/matériel.

Au menu de cet article nous allons voir comment libérer profondément un ordinateur en remplaçant un BIOS propriétaire (un UEFI dans cet exemple) par le logiciel libre d’amorçage coreboot.
Coreboot effectue qu’un tout petit peu d’initialisation du matériel, puis exécute une logique d’amorçage supplémentaire, appelée charge utile (payload).

Avec cette séparation de l’initialisation du matériel et le démarrage logique plus tard, coreboot peut évoluer à partir des applications spécialisées qui fonctionnent directement à partir du firmware, exécuter des systèmes d’exploitations dans la mémoire flash, charger des programmes d’amorçages personnalisés, ou mettre en œuvre les normes du firmware, comme les services PC BIOS ou UEFI. Cela permet aux systèmes d’inclure uniquement les fonctions nécessaires à l’application cible, ce qui réduit la quantité de code et de l’espace flash nécessaire.

Avertissement : Bien que simplifié au maximum cet article s’adresse aux personnes expérimentées, consulter préalablement le wiki du projet voir si cette procédure est toujours d’actualité.

Ingrédients nécessaires :

_ Idéalement une distribution 100 % libre supportée par la FSF
_ Une carte mère supporté par coreboot (les modèles récents encore commercialisés sont l’ASUS F2A85-M et l’ASRock E350M1 qui sera utilisé ici pour la suite)
_ Des puces de secours
_ Un extracteur de puce
_ Optionnellement un noyau linux 100% libre (si vous voulez un noyau plus récent que celui de votre distribution).

Préparation de la recette :

Installer votre distribution.
Retirer la puce originale de la carte mère et la garder précieusement (pour la garantie notamment) et y placer l’une de vos puces.

Installer les dépendances pour la construction de coreboot:
sudo apt-get install git build-essential libncurses5-dev

Optionnellement vous pouvez également installer les paquets suivants :
sudo apt-get install iasl flex bison gdb

Récupérer coreboot :
git clone http://review.coreboot.org/p/coreboot
cd coreboot
git submodule update --init --checkout

Pour éviter les erreurs avec la chaine de compilation de nos distributions, taper la commande :
make crossgcc
rm .xcompile

Récupérer votre bios vga (depuis le wiki ou de par vous même) puis le placer à la racine du dossier coreboot (et pas ailleurs!).
cp Bios-vga-E350M1.bin coreboot/vgabios.bin

Vérifier la somme md5 du bios vga de l’Asrock E350M1 :
md5sum vgabios.bin

Vous devez absolument avoir retrouvé l’une des 2 sommes de contrôles que j’ai testé (la différence entre les 2 c’est que l’un est coupé en hexa au niveau 0000e200) :
27d5d5b9dbd69dcd9af596de59cadc2a
ou
c6489a495362c09dd591ddb5cf3c5cac

Capture-vgabios.bin - GHex

Configurer coreboot :
make menuconfig

  1. Dans « Mainboard » choisir « ASROCK » en tant que « Mainboard vendor ».
    Selectionner « E350M1 » dans « Mainboard model ».
    Vérifier que le « ROM chip size » correspond bien à la taille de vos chips, pour ma part 4096 KB (4 MB). Coreboot
  2. Dans « Generic Drivers » cocher si besoin la case « PS/2 keyboard init ».
  3. Dans « VGA BIOS » cocher la case « Add a VGA BIOS image ».
  4. Dans « Payload » vérifier que ce soit bien « SeaBIOS » qui est sélectionné.
    Seabios est la charge utile la plus compatible qui fonctionne avec Windows, Linux et BSD car elle implémente les standards des BIOS. C’est également cette charge utile qui est utilisée dans QEMU et KVM.

Passer à la compilation :
make

Si tout c’est bien passé, votre bios « coreboot.rom » est disponible dans le dossier « build« .

Vérifier que votre bios vga soit bien intégré à votre rom coreboot, soit avec un éditeur de fichiers binaires genre « ghex » vous avec cette commande :
cat build/coreboot.rom | grep -ai VBIOS

La commande précédente devant vous renvoyer :
AMD Fusion Wrestler generic VBIOS

Mise au four de notre préparation :

Après la création de notre rom coreboot, nous allons utiliser l’utilitaire flashrom pour écrire sur notre puce de mémoire flash.

Pour installer Flashrom des dépôts :
sudo apt-get install flashrom

Sauvegarder le BIOS
sudo flashrom -r sauvegarde-bios.rom

Flasher le BIOS avec votre rom coreboot :
sudo flashrom -w coreboot.rom

Enfin et uniquement si flashrom n’a pas détecté d’erreurs, vous pouvez redémarrer votre machine.

Si vous avez une erreur aller faire un tour sur l’IRC de flashrom pour demander de l’aide ou essayez de rattraper votre puce avec une version récente de flashrom provenant de branche AMD :
sudo dpkg --purge flashrom
sudo apt-get install libpci-dev zlib1g-dev pciutils
cd ~
git clone https://github.com/stefanct/flashrom.git
cd flashrom/
git checkout -b amd origin/amd
make
sudo make install

Puis re-flasher (la syntaxe peut-être différente entre la version des dépôts et la dernière version disponible) :
flashrom -p internal -c modèle-de-votre-puce -w coreboot.rom

coreboot-boot

Sur le wiki il y a également un fichier de configuration pour fancontrol afin ajuster la vitesse du ventilateur du CPU de manière dynamique. Pour cela installer fancontrol :
sudo apt-get install fancontrol

Copier le fichier de configuration au bon emplacement :
sudo cp fancontrol /etc/fancontrol

Charger le module nécessaire maintenant et redémarrer le service fancontrol :
sudo modprobe w83627ehf
sudo /etc/init.d/fancontrol restart

Puis pour charger automatiquement le module à chaque démarrage :
echo "w83627ehf" >> /etc/modules

A consommer tout de suite et sans modération. Admirer la vitesse, 2 seconde top chrono entre le démarrage et grub 😉 (et encore c’est juste l’histoire d’appuyer sur F12 pour démarrer sur un autre support mdr)

Je tiens à remercier le projet Coreboot et Flasrom pour leur travail et à remercier spécialement Alien, Rluett, Openvoid pour avoir répondu à mes questions, à GNUtoo pour son choix de carte mère, à stefanct pour sa branche git amd flasrom.