Nouvelle fonctionnalité IIS pour aider à identifier une version TLS obsolète / New IIS functionality to help identify weak TLS usage

Go to English version

[MAJ :  03/09/2020] Réécriture de l’article et ajout de scripts LogParser pour une meilleure exploitation des données

L’article https://www.microsoft.com/security/blog/2017/09/07/new-iis-functionality-to-help-identify-weak-tls-usage/ explique comment utiliser les champs de log personnalisés pour récupérer des informations (en provenance des variables serveurs IIS) relatives aux requêtes chiffrées. Les informations renvoyées sont très utiles mais non exploitables directement sous leur forme hexadécimales. Je me propose ici de vous fournir dans un premier temps le code permettant de mettre en place ces 4 champs dans vos logs IIS (au niveau des valeurs par défaut des sites web) et ensuite de vous fournir un script PowerShell (prérequis : ce fichier dans le même répertoire) afin de les exploiter plus facilement.

Le code PowerShell permettant d’activer les 4 enregistrements dans les logs IIS est le suivant :

Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/siteDefaults/logFile/customFields" -name "." -value @{logFieldName='crypt-protocol';sourceName='CRYPT_PROTOCOL';sourceType='ServerVariable'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/siteDefaults/logFile/customFields" -name "." -value @{logFieldName='crypt-cipher';sourceName='CRYPT_CIPHER_ALG_ID';sourceType='ServerVariable'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/siteDefaults/logFile/customFields" -name "." -value @{logFieldName='crypt-hash';sourceName='CRYPT_HASH_ALG_ID';sourceType='ServerVariable'}
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.applicationHost/sites/siteDefaults/logFile/customFields" -name "." -value @{logFieldName='crypt-keyexchange';sourceName='CRYPT_KEYEXCHANGE_ALG_ID';sourceType='ServerVariable'}

Ce qui aura pour effet d’ajouter les 4 nouveaux champs suivants dans vos log IIS.

Remarque : Vos logs seront préfixés par un _x (par exemple u_ex200903_x.log pour le 23 septembre 2020) pour un indiquer que vous utilisez la fonctionnalité de « Custom Fields ».

Comme affiché dans la capture d’écran précédente, les valeurs enregistrées pour ces champs ne sont pas très explicites. C’est pour cette raison que je vous propose le script PowerShell suivant qui vous permettra de rajouter 4 nouveaux champs plus explicites  comme le montre la capture d’écran suivante :

Ces 4 nouveaux champs (Protocol, Cipher, Hash, KeyExchange)  sont une interprétation plus explicite des 4 autres champs précédents (crypt-protocol, crypt-cipher, crypt-hash et crypt-keyexchange) en basant sur les liens en bas de cet article. Par exemple SP_PROT_TLS1_2_SERVER est la traduction de 400 (en réalité 0x400 soit 1024 en décimal) pour le champs crypt-protocol.
Ce script est à lancer une fois que le fichier de logs IIS quotidien (par défaut) à fini d’être traité (à minuit UTC par défaut – pas en temps réel donc). Il va , en réalité, créer un nouveau fichier de log avec le préfixe  _TLS dans le même répertoire. Par exemple le fichier u_ex200903_x.log deviendra u_ex200903_x_TLS.log. Le traitement ne prend que quelques secondes car Logparser est utilisé pour l’opération. Il est donc nécessaire de l’avoir installé sur la machine de traitement des logs.

Hormis l’ajout des 4 nouveaux champs  (Protocol, Cipher, Hash, KeyExchange), l’entête du fichier sera également changé pour passer de « #Software: Microsoft Internet Information Services 10.0 » à  « #Software: Microsoft Log Parser » dans le fichier de destination (*_TLS.log).

Après cela libre à vous d’utiliser le fichier de requêtes LogParser suivant pour avoir des statistiques sur l’utilisation SSL/TLS sur vos serveurs IIS.

Quelques liens utiles :

Aller à la version française

[Update: 09/03/2020] Rewriting the article and adding LogParser scripts for better data exploitation

The article https://www.microsoft.com/security/blog/2017/09/07/new-iis-functionality-to-help-identify-weak-tls-usage/ explains how to use custom log fields for retrieve information (from IIS server variables) relating to encrypted requests. The information returned is very useful but cannot be used directly in its hexadecimal form. I propose here to first provide you with the code allowing to set up these 4 fields in your IIS logs (at the level of the default values of websites) and then to provide you with one PowerShell (prerequisite: this file in the same directory) script in order to exploit them more simply.

The PowerShell code for activating the 4 records in the IIS logs is as follows:

These 4 new fields (Protocol, Cipher, Hash, KeyExchange) are a more explicit interpretation of the other 4 previous fields (crypt-protocol, crypt-cipher, crypt-hash and crypt-keyexchange) based on the links at the bottom of this article . For example SP_PROT_TLS1_2_SERVER is the translation of 400 (actually 0x400 or 1024 in decimal) for the crypt-protocol field.

This script should be run once the daily IIS log file (by default) has finished being processed (at midnight UTC by default – not in real time therefore). It will actually create a new log file with the _TLS prefix in the same directory. For example the u_ex200903_x.log file will become u_ex200903_x_TLS.log. Processing only takes a few seconds because LogParser is used for the operation. It is therefore necessary to have it installed on the log processing machine.

Apart from adding the 4 new fields (Protocol, Cipher, Hash, KeyExchange), the file header will also be changed to go from « #Software: Microsoft Internet Information Services 10.0 » to « #Software: Microsoft Log Parser » in the destination file (* _TLS.log).

After that you are free to use the following LogParser script to have statistics on SSL / TLS usage on your IIS servers.

Some useful links :

Laurent.

Feel free to share:)