Auteur Sujet: Script pour analyser les log Apache et sortir les clients non compatible TLS 1.2  (Lu 19408 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
Scripts pour analyser les log Apache d'un site afin de détecter les User Agent non compatible TLS 1.2

1/ Pourquoi faire ?

LaFibre.info ne supporte plus TLS 1.0 et TLS 1.1 depuis le 1er novembre à 0h00 (concrètement seul TLS 1.2 est disponible)

La version minimum pour surfer sur LaFibre.info est donc Internet Explorer 11, Firefox 27, Chrome 30 ou Safari 7. Si vous utilisez le navigateur par défaut sur Android, il faut Android 5 minimum (pour ceux qui sont sous Android 2/3/4, il est conseillé de télécharger Firefox ou Chrome pour avoir le support de TLS 1.2). Le site https://caniuse.com/#feat=tls1-2 liste les navigateurs compatible TLS 1.2.

La question que se pose tout site avant de sauter le pas est de savoir si ils ont des lecteurs avec ces vieux navigateurs.

Pour LaFibre.info, j'ai vu qu'il y avait jusqu'à 8% des visiteurs qui avaient un navigateur non compatible TLS 1.2 ce qui incite a rester avec le support de TLS 1.0 et plus de TLS 1.2

J'ai analysé les log d'un sujet qui a été vu plusieurs centaines de fois en Afrique : Bénin: Fin de la neutralité. Internet vers les services OTT est lourdement taxé, car je sais qu'il y a plus de probabilité de trouver de vieux navigateurs en Afrique.

J'ai analysé un par un les IP associées a ceux qui avait un navigateur non compatible TLS 1.2. Voici le résultat :

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0;  Trident/5.0)
91.209.8.xxx Hébergeur DGM Sofia, Bulgaria

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)
23.96.208.xxx Cloud Microsoft

Mozilla/5.0 (Windows; U; Win 9x 4.90; SG; rv:1.9.2.4) Gecko/20101104 Netscape/9.1.0285
54.145.92.xxx Amazon Data Services NoVa

Mozilla/5.0 (Windows; U; Win 9x 4.90; rv:1.7) Gecko/20040803 Firefox/52.0.2
88.99.195.xxx Hetzner Online

Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.7.6) Gecko/20050317 Firefox/50.0.2
88.99.195.xxx Hetzner Online

Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
54.83.149.xxx Amazon EC2

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
217.182.21.xxx OVH

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
178.208.12.xxx Leonix Telecom

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1
31.193.51.xxx Datacenter Eolas

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.803.0 Safari/535.1
178.208.12.xxx Leonix Telecom

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.31 (KHTML, like Gecko) Chrome/13.0.748.0 Safari/534.31
178.208.12.xxx Leonix Telecom

Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0
37.187.56.xxx OVH

Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
34.238.150.xxx Amazon EC2

Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30
188.165.196.xxx OVH

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17
34.227.97.xxx Amazon EC2

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.43 Safari/536.11
54.91.172.xxx Amazon EC2

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.801.0 Safari/535.1\
178.208.12.xxx Leonix Telecom

Mozilla/5.0 (Linux; Android; 4.1.2; GT-I9100 Build/000000) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1234.12 Mobile Safari/537.22 OPR/14.0.123.123
107.167.99.xxx Opera Software Americas

Bref, toutes les IP sont des IP de serveurs et non de vrais clients. Le user-agent est probablement bidon.

C'est même certains pour Internet Explorer sous Windows XP. Le support d'Internet Explorer 6 pour Windows XP a été retiré sur ce forum en 2014 (cf Kill d'Internet Explorer 6 sur LaFibre.info. Avec cette configuration, Toutes les versions de Firefox, Chrome, Edge sont suportéss. Pour Internet Explorer, la version 7 est la la version minium et pour le navigateur intégré a Android, il faut Android 2.3 et supérieur.

Le 3 septembre 2017 c'était IE 8 sous XP qui était retiré : Internet Explorer 8 sous Windows XP n'est plus supporté (retrait des suites 3DES)

J'ai donc décidé de passer le cap de la suppression de TLS 1.0 et TLS 1.1. Depuis le 1er novembre 2018, La version minimum pour surfer sur LaFibre.info est donc Internet Explorer 11, Firefox 27, Chrome 30 ou Safari 7. Si vous utilisez le navigateur par défaut sur Android, il faut Android 5 minimum.

vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
2/ Comment post-traiter les données Apache ?


La première étape consiste à filtrer pour ne récupérer que les requêtes ayant abouties (code 200) :

cat apache.log | grep "\" 200 " > apache200.log

Vous obtenez un fichier apache200.log vidé des différents scans qui testent les failles des sites web




La seconde étape consiste à liste les user agents utilisés avec le nombre d'IP différentes vues pour chaque user agent :

- Cas N°1 : Si vous logez les ports source et destination dans votre fichier apache2 et que les logs sont à ce format :

LogFormat "%h %{remote}p %{local}p %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combiport
La commande à utiliser est

awk -F ' [0-9]* [0-9]* |"' '{ua[$8][$1] = 0} END { for(i in ua) print(length(ua[i]), ":", i)}' apache200.log | sort -rh > stats.csv
- Cas N°2 : Si vous utilisez les logs sont au format "combined" :
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
La commande à utiliser est
awk -F ' - |"' '{ua[$7][$1] = 0} END { for(i in ua) print(length(ua[i]), ":", i)}' apache200.log | sort -h > stats.csv
Vous obtenez un fichier listant les user agent les plus utilisés. Le chiffre correspond aux nombres d'IP différentes trouvées.



La troisième étape consiste à extraire les user agent que l'on sait incompatible TLS 1.2.

J'ai réalisé ce petit script "stats.sh" qui prend en argument le nom du fichier à traiter :

#!/bin/dash
# Navigateurs pré-historiques
cat $1 | grep "Mozilla/4" | grep -v "Trident/7"
cat $1 | grep "Mozilla/3"
cat $1 | grep "Mozilla/2"
cat $1 | grep "Mozilla/1"
cat $1 | grep "Netscape"
cat $1 | grep "AmigaOS"
# Version de Windows ne supportant aucun navigateur avec TLS 1.2 :
cat $1 | grep "Win 95"
cat $1 | grep "Win 98"
cat $1 | grep "Win 9x"
cat $1 | grep "Windows ME"
cat $1 | grep "Win95"
cat $1 | grep "Win98"
cat $1 | grep "WinME"
cat $1 | grep "Win9x"
cat $1 | grep "Windows NT 5\.0"
cat $1 | grep "Windows NT 4"
cat $1 | grep "Windows NT 3"
# Internet Explorer ne supportant pas TLS 1.2 :
cat $1 | grep "MSIE 10" | grep -v "Trident/7"
cat $1 | grep "MSIE 9" | grep -v "Trident/7"
cat $1 | grep "MSIE 8"
cat $1 | grep "MSIE 7" | grep -v "Trident/7"
cat $1 | grep "MSIE 6"
cat $1 | grep "MSIE 5"
cat $1 | grep "MSIE 4"
cat $1 | grep "MSIE 3"
cat $1 | grep "MSIE 2"
cat $1 | grep "MSIE 1\."
cat $1 | grep "Trident/6"
cat $1 | grep "Trident/5"
cat $1 | grep "Trident/4"
cat $1 | grep "Trident/3"
cat $1 | grep "Trident/2"
cat $1 | grep "Trident/1"
# Chrome ne supportant pas TLS 1.2 :
cat $1 | grep "Chrome/29\."
cat $1 | grep "Chrome/28\."
cat $1 | grep "Chrome/27\."
cat $1 | grep "Chrome/26\."
cat $1 | grep "Chrome/25\."
cat $1 | grep "Chrome/24\."
cat $1 | grep "Chrome/23\."
cat $1 | grep "Chrome/22\."
cat $1 | grep "Chrome/21\."
cat $1 | grep "Chrome/20\."
cat $1 | grep "Chrome/19\."
cat $1 | grep "Chrome/18\."
cat $1 | grep "Chrome/17\."
cat $1 | grep "Chrome/16\."
cat $1 | grep "Chrome/15\."
cat $1 | grep "Chrome/14\."
cat $1 | grep "Chrome/13\."
cat $1 | grep "Chrome/12\."
cat $1 | grep "Chrome/11\."
cat $1 | grep "Chrome/10\."
cat $1 | grep "Chrome/9\."
cat $1 | grep "Chrome/8\."
cat $1 | grep "Chrome/7\."
cat $1 | grep "Chrome/6\."
cat $1 | grep "Chrome/5\."
cat $1 | grep "Chrome/4\."
cat $1 | grep "Chrome/3\."
cat $1 | grep "Chrome/2\."
cat $1 | grep "Chrome/1\."
# Firefox ne supportant pas TLS 1.2 :
cat $1 | grep "Firefox/26\."
cat $1 | grep "Firefox/25\."
cat $1 | grep "Firefox/24\."
cat $1 | grep "Firefox/23\."
cat $1 | grep "Firefox/22\."
cat $1 | grep "Firefox/21\."
cat $1 | grep "Firefox/20\."
cat $1 | grep "Firefox/19\."
cat $1 | grep "Firefox/18\."
cat $1 | grep "Firefox/17\."
cat $1 | grep "Firefox/16\."
cat $1 | grep "Firefox/15\."
cat $1 | grep "Firefox/14\."
cat $1 | grep "Firefox/13\."
cat $1 | grep "Firefox/12\."
cat $1 | grep "Firefox/11\."
cat $1 | grep "Firefox/10\."
cat $1 | grep "Firefox/9\."
cat $1 | grep "Firefox/8\."
cat $1 | grep "Firefox/7\."
cat $1 | grep "Firefox/6\."
cat $1 | grep "Firefox/5\."
cat $1 | grep "Firefox/4\."
cat $1 | grep "Firefox/3\."
cat $1 | grep "Firefox/2\."
cat $1 | grep "Firefox/1\."
cat $1 | grep "Firefox/0\."
# Safari sur Mac OS X ne supportant pas TLS 1.2 :
cat $1 | grep "Mac OS X" | grep -v "CPU OS" | grep -v "iPhone OS" | grep -v "Chrome" | grep -v "Firefox" | grep "AppleWebKit/5"
cat $1 | grep "Mac OS X" | grep -v "CPU OS" | grep -v "iPhone OS" | grep -v "Chrome" | grep -v "Firefox" | grep "AppleWebKit/4"
cat $1 | grep "Mac OS X" | grep -v "CPU OS" | grep -v "iPhone OS" | grep -v "Chrome" | grep -v "Firefox" | grep "AppleWebKit/3"
# Safari sur iOS ne supportant pas TLS 1.2 :;
cat $1 | grep "OS 4_"
cat $1 | grep "OS 3_"
cat $1 | grep "OS 2_"
cat $1 | grep "OS 1_"
# Navigateur par défault d'Android ne supportant pas TLS 1.2 :
cat $1 | grep "Android 4" | grep -v "Firefox" | grep -v "Chrome" | grep -v "Trident" | grep -v "Opera Mobi"
cat $1 | grep "Android 3" | grep -v "Firefox" | grep -v "Chrome" | grep -v "Trident" | grep -v "Opera Mobi"
cat $1 | grep "Android 2" | grep -v "Firefox" | grep -v "Chrome" | grep -v "Trident" | grep -v "Opera Mobi"
cat $1 | grep "Android 1" | grep -v "Firefox" | grep -v "Chrome" | grep -v "Trident" | grep -v "Opera Mobi"

Une ligne peut être listée plusieurs fois il faut donc séparer les doublons.

Son utilisation :
./stats.sh stats.csv | sort -rh | uniq > vieux-navigateurs.txt

Vous obteniez un listing des user agent non compatible TLS 1.2 classés par ordre d'utilisation.

vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
3/ Concrètement pour Lafibre.info, cela donne quoi ?

J'ai post traitées les données 2 jours avant la suppression de TLS 1.0 et 2 jours après.

Les données sont dans le fichier Libre Office Calc
201811_lafibre_stats_ua_non_compatible_tls12.ods

Note : Il est lisible avec Excel.

Il y a deux onglets :
- Données du mardi 30 et mercredi 31 octobre, avec support de TLS 1.0 / TLS 1.1 / TLS 1.2
- Données du jeudi 1er et vendredi 2 novembre, avec support de TLS 1.2 uniquement.

Il y a un peu moins de visite le 1er et 2 novembre, mais c'est lié au jour férié (jeudi 1er novembre) et pont (vendredi 2 novembre).

On peut par contre voir que tous user agents non compatible TLS 1.2 avec plus de 10 clients du 30/31 octobre sont bien présents le 1er et 2 novembre : on a donc la certitude que tous les clients qui se cachent derrière sont réellement compatible TLS 1.2 et que le user-agent présenté est faux.

vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
4/ Pourquoi ne pas garder TLS 1.0 en plus de TLS 1.2 ?

- À partir du 30 juin 2018, tous les sites Web devront au moins être en TLS 1.1 pour être conformes au standard PCI Data Security Standard (DSS) : TLS 1.0 doit être désactivé pour être conforme. => 30 juin 2018: TLS 1.0 doit être désactivé pour être conforme PCI DSS

- C'est une recommandation de l'ANSSI, l'Agence nationale de la sécurité des systèmes d'information.

(cliquez sur la miniature ci-dessous - le document est au format PDF)


Concrètement, le retrait de la compatibilité TLS 1.0 et TLS 1.1 de LaFibre.info fait progresser le ranking sur CryptCheck ( https://tls.imirhil.fr/ ) : on passe de la notation B à la notation A+

Le 31 octobre : LaFibre.info support TLS 1.0 , TLS 1.1 et TLS 1.2


Le 1er novembre : LaFibre.info supporte uniquement TLS 1.2


vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
Mozilla, l'éditeur de Firefox met à disposition deux outils :

- Un observatoire, qui permet de tester un site : https://observatory.mozilla.org/
- Un outil pour générer la configuration Apache : https://mozilla.github.io/server-side-tls/ssl-config-generator/

3 options sont proposées :
- "Modern" (compatible Internet Explorer 11 et +)
- "Intermediate" (compatible Internet Explorer 8 sous Windows XP et +)
- "Old" (compatible Internet Explorer 6 et +)

Ma nouvelle configuration est de type moderne (j'ai utilisé le générateur de Mozilla) mais pourtant, le test de Mozilla continue de me classer en "Intermediate".
Si vous savez pourquoi, je suis preneur !



vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
Enfin l'outil le plus connu est Qualys SSL Labs

Qualys SSL Labs ( https://www.ssllabs.com/ ) existent depuis de nombreuses années et il n'a pas eu de grand changement dans la notation. Si au début peu de sites obtenaient un A, aujourd'hui ils sont majoritairement en A. Il faudrait durcir les paramètres, c'est à l'étude puis 2 ans mais toujours pas en prod.

LaFibre.info a donc un A+, avec ou sans TLS 1.0

Le 31 octobre : LaFibre.info support TLS 1.0 , TLS 1.1 et TLS 1.2


Le 1er novembre : LaFibre.info supporte uniquement TLS 1.2


jack

  • Professionnel des télécoms
  • *
  • Messages: 1 602
  • La Madeleine (59)
Plutôt que de te baser sur l'user-agent, tu peux également redéfinir ton format de journaux d'accès (https://httpd.apache.org/docs/2.4/fr/mod/mod_log_config.html#logformat) pour ajouter la variable SSL_PROTOCOL du mod_ssl


vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
Ah oui, cela aurait été pertinent. Cela sera intéressant pour voir la pénétration de TLS 1.3

Maintenant TLS 1.0 est désactivé (comme 28% des sites web sur les  150 000 sites les plus populaires)

(On gagne un point par mois systématiquement depuis plus d'un an et cela s’accélère)


vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
La première étape consiste à filtrer pour ne récupérer que les requêtes ayant abouties (code 200) :

A posteriori, je pense qu'il est plus pertinent de séparer les erreurs 404 et de garder le reste, même si cela ne devrait pas changer grand chose pour les visiteurs uniques.

J'ai par exemple des retour 206 (Partial Content = Une partie seulement de la ressource a été transmise.) pour les vidéos qui ne sont pas visionnées en entier.

Il y a aussi de nombreux 304 (Not Modified = Document non modifié depuis la dernière requête.)

Sans parler des redirections (301 Moved Permanently ou 302 Document déplacé de façon temporaire)

Sendell

  • Abonné SFR fibre FttH
  • *
  • Messages: 15
  • Lyon
    • Site perso
Hola

Ma nouvelle configuration est de type moderne (j'ai utilisé le générateur de Mozilla) mais pourtant, le test de Mozilla continue de me classer en "Intermediate".

L'absence du support de la suite basée sur ChaCha20 et Poly1305 ?
Si tu es sur une Debian stable (stretch), mod_ssl a été compilé avec libssl1.0.2, donc même si tu la précises dans le SSLCipherSuite elle ne sera en fait pas proposée, il faut libssl1.1. Cependant mon serveur de tests (debian testing, avec libssl1.1.1 et Apache2.4.37 tout juste arrivé) le propose bien, en TLS1.2 et TLS1.3, mais le TLSObservatory ne le voit pas (au contraire de SSLLabs) et me classe aussi en intermediate. J'utilise la CipherSuite HIGH+ECDH+CHACHA20:HIGH+ECDH+AESGCM:HIGH+ECDH+AES:!SHA

Concrètement, le retrait de la compatibilité TLS 1.0 et TLS 1.1 de LaFibre.info fait progresser le ranking sur CryptCheck ( https://tls.imirhil.fr/ ) : on passe de la notation B à la notation A+

À ma connaissance, cet outil n'est plus maintenu à cette adresse, au contraire de CryptCheck.fr (qui est du coup bien plus sévère, mais il ne connait par ailleurs pas encore TLS1.3) : sur cet outil aussi c'est un A+ !
« Modifié: 06 novembre 2018 à 21:21:54 par Sendell »

vivien

  • Administrateur
  • *
  • Messages: 48 042
    • Twitter LaFibre.info
Script pour analyser les log Apache et sortir les clients non compatible TLS 1.2
« Réponse #10 le: 06 novembre 2018 à 21:32:36 »
Effectivement LaFibre.info utilise OpenSSL 1.0.2g , car je n'ai pas encore fait la mise à jour vers Ubuntu 18.04 (pb de compatibilité de SMF avec PHP 7.2)

J'ai par contre d'autres sites web hébergés avec Ubuntu 18.04 et donc OpenSSL 1.1.0g et j'ai la même suite de Cipher Suites et le même problème avec un classement intermédiaire.

J'ai pourtant tenté de reproduire exactement la configuration de https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=apache-2.4.29&openssl=1.1.0g&hsts=yes&profile=modern
( Apache 2.4.29 | modern profile | OpenSSL 1.1.0g )

C'est le cas de https://iperf.fr/

butler_fr

  • Client Bbox adsl
  • Modérateur
  • *
  • Messages: 3 588
  • FTTH orange
Script pour analyser les log Apache et sortir les clients non compatible TLS 1.2
« Réponse #11 le: 06 novembre 2018 à 22:09:47 »
vraiment très utile ce site https://mozilla.github.io/server-side-tls/ssl-config-generator
je l'utilise régulièrement au boulot

par contre il peut ne pas donner la bonne configuration dans certains cas spécifique

exemple sur une debian7 avec apache 2.2.22 (oui je sais ça date), pour lui tls1.2 n'est pas disponible alors que dans le cas de debian l'ajout de tls1.2 dans la version 2.2.23 d'apache a été backporté sur la version 2.2.22 (version officielle de debian).