LineageOS avec un noyau Grsec non officiel pour le ZTE Open C

Comme promis, voici une nouvelle version de ma ROM LineageOS pour le ZTE Open C.
La principale nouveauté est le port (non officiel) d’une ancienne version du patch de sécurité Grsecurity.
Le noyau étant obsolète, tout durcissement étant ainsi bon à prendre.
Veuillez notez que toute les options de grsec ne sont pas encore activées mais cela viendra 😉

JOURNAL DES MODIFICATIONS :
Activation de SCHED_AUTOGROUP (pour les performances).
Remplacement du bootanimation par un simple logo animé (plus léger).
Désactivation du démarrage automatique de debuggerd.
Ajout du patch grsec (basé initialement sur la version 2.9.1-3.4.7-201208021520).
Correction de plusieurs fonctions comme « virt_addr_valid » et « alloc_vmap_area ».
Résolution d’un problème de corruption sur slab (non fixé dans le noyau de KonstaT).
Résolution de plusieurs problèmes de stabilité de ma précédente ROM qui contenait PaX.

LIEN DE TÉLÉCHARGEMENT : lineage-13.0-20180425-UNOFFICIAL-kis3_with_unofficial_grsec.zip
SOMME DE CONTRÔLE MD5 = 0d224de872609d5146230e226da319ce
CODE SOURCE : disponible ici.

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 😉