Que contient vraiment le keylogger de Windows 10 ?
A force de lire tout et n'importe quoi à ce sujet, je me suis lancé dans mes propres analyses de trafic.
Voyons ce que contient ce Windows 10 qui fait tant parler de lui.
tcpdump
Avant tout j'en profite pour vous parler de ce super tutoriel pour lire du contenu HTTPS avec wireshark s'il provient de votre navigateur, simple et rapide. Dans mon cas ce n'est pas du flux venant d'un navigateur mais du système directement donc je ne pourrai pas utiliser cette méthode.
J'utilise Windows 10 sur une machine virtuelle (VirtualBox). J'ai donc commencé par analyser le trafic au moment de faire une recherche dans le menu démarrer. Je précise que j'ai désactiver la recherche en ligne dans les options de Windows, et pourtant il y a bien du trafic.
Voici ce que voit passer mon routeur tomato (passerelle de sortie) :
./tcpdump -s0 host win10 and port not 22 -n IP 192.168.0.68.53226 > 204.79.197.200.443: . 1493:2933(1440) ack 4667 win 1024 IP 192.168.0.68.53226 > 204.79.197.200.443: P 2933:2986(53) ack 4667 win 1024 IP 204.79.197.200.443 > 192.168.0.68.53226: . ack 2933 win 513 IP 204.79.197.200.443 > 192.168.0.68.53226: . ack 2986 win 513 IP 204.79.197.200.443 > 192.168.0.68.53226: P 4667:6096(1429) ack 2986 win 513 IP 204.79.197.200.443 > 192.168.0.68.53226: . 6096:7556(1460) ack 2986 win 513 IP 204.79.197.200.443 > 192.168.0.68.53226: . 7556:9016(1460) ack 2986 win 513 IP 204.79.197.200.443 > 192.168.0.68.53226: P 9016:9349(333) ack 2986 win 513 IP 192.168.0.68.53226 > 204.79.197.200.443: . ack 9349 win 1024 IP 192.168.0.68.53190 > 204.79.197.200.80: P 5777:6789(1012) ack 1081 win 1020 IP 192.168.0.68.53190 > 204.79.197.200.80: P 6789:7206(417) ack 1081 win 1020
- 192.168.0.68 = IP de ma machine Windows 10
- 204.79.197.200 = a-0001.a-msedge.net
Et à chaque nouvelle recherche dans le menu démarrer on retrouve cette séquence.
Premièrement c'est une surprise car quand on se dit le trafic que ça doit pomper à l'échelle mondiale, c'est monumental.
Mais que transite dans ces paquets ?
Kali
Autant faire le barbu jusqu'au bout, j'ai donc sorti Kali! Cela évite d'avoir à installer une tonne d'outils qui sont déjà présents.
J'ai utilisé une deuxième machine virtuelle, sous Kali Linux 2.0 cette fois-ci. Avec deux interfaces, une sur le réseau local (eth0) et une autre sur un réseau interne à VirtualBox (eth1) que j'ai nommé "guest" :
- eth0 = 192.168.0.68 (dhcp via tomato, accès par pont)
- eth1 = 10.1.1.254/24 (ip fixe, réseau interne "guest")
udhcpd
J'ai installé un serveur dhcp (pas obligatoire mais plus pratique) :
apt-get install udhcpd
Configuration minimaliste :
# grep -E -v '^(#|$|;)' /etc/udhcpd.conf start 10.1.1.11 end 10.1.1.50 interface eth1 #default: eth0 opt dns 8.8.8.8 option subnet 255.255.255.0 opt router 10.1.1.254 option domain local option lease 864000
Commenter la ligne /etc/default/udhcpd :
#DHCPD_ENABLED="no"
Et démarrer le service :
/etc/init.d/udhcpd start [ ok ] Starting udhcpd (via systemctl): udhcpd.service.
J'ai basculé ma VM Windows dans ce même réseau interne "guest" pour vérifier que Kali lui donnait bien une IP.
Certificats
Je pensais qu'il était nécessaire de générer un certificat pour pouvoir intercepter le trafic SSL, surtout que j'étais parti sur l'outil sslstrip au départ. Et puis cet outil n'allait pas il permet seulement de ne pas rediriger du HTTP vers du HTTPS mais il est incapable d'intercepter du HTTPS.
Je vous met quand même la procédure au cas où ça vous serve dans un cas particulier :
mkdir cert && cd cert apt-get install libssl-dev libevent-dev openssl genrsa -out ca.key 4096 openssl req -new -x509 -days 1826 -key ca.key -out ca.crt You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:BM State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:A.BM Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:*.bing.com Email Address []:
Seul le "common name" est important, il doit correspondre au site à intercepter. Dans l'exemple "*.bing.com" assure la compatibilité avec "www.bing.com" par exemple. Cela ne fonctionnera pas en revanche avec "bing.com" tout court, il faudra un sous domaine. Vous pouvez préciser plusieurs CN si vous utilisez un fichier de configuration.
On fusionne :
cat ca.key ca.crt > ca.pem
Récupérer ca.crt et importez le "autorité de certification racines de confiance > certificats" (windows + R > certmgr.msc). Cela fonctionnera pour Edge et IE, pour Firefox ça se passe dans
- Outils > Options > Avancé > Certificats > Onglet "Autorités" : Importer
Si besoin consultez ce tutoriel complémentaire.
iptables, ouvres toi
On active le routage (les deux commandes fonctionnent) :
echo "1" > /proc/sys/net/ipv4/ip_forward sysctl -w net.ipv4.ip_forward=1
Puis on ajoute ces règles pour rediriger tout le trafic venant des ports 80 et 443 (HTTP et HTTPS) vers notre outil mitmproxy :
iptables -t nat -F iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080 iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8080
Cela va couper le trafic pour votre Windows 10.
mitmproxy
mitmproxy est présent dans Kali, c'est lui qui va relayer les requêtes web, comme un vulgaire proxy. Mais il vous permet au passage de voir ce qui transite.
Par défaut il écoute sur le port 8080 et il semblerait que le changer peut poser problème. Lançons-le :
mitmproxy -T --host --cert=cert/ca.pem
Nous précisons au passage le certificat ca.pem, bien que je le répète ça fonctionne aussi sans dans notre cas car Microsoft ne contrôle pas l'auto-signature du certificat et n'utilise pas HSTS. En effet HSTS rend impossible toute interception si votre navigateur l'implémente :
Vous devriez maintenant pouvoir surfer depuis la VM sous Windows 10 et voir les premiers paquets transiter, faites ENTREE pour en visualiser un :
Dans la capture c'est du HTTP mais ça fonctionne aussi en HTTPS
Résultats
Je constate que l'IP 204.79.197.200 est attaquée en direct, autrement dit elle est hardcodée. Voilà qui explique pourquoi on pouvait lire sur la toile que Windows 10 ne tenait pas compte du fichier host. Il en tient donc bien compte, mais il ne sert à rien quand une IP est attaquée en directe.
La qualité de la capture n'est pas terrible, mon on voit que chaque recherche déclenche du trafic :
D'ailleurs selon comment vous lancez tcpdump ou wireshark c'est l'outil qui fait la résolution inverse (IP vers domaine), ce qui peut amener cette confusion. L'option "-n" ne résoud pas les IP.
Et voici le contenu d'une trame interceptée avec Kali :
Request GET /manifest/threshold.appcache HTTP/1.1 Accept: */* Referer: https://www.bing.com/ X-Search-SafeSearch: Strict X-Device-MachineId: {7791A0B7-70CD-43BA-B3EB-0C27EFA10CFE} X-BM-Market: FR X-BM-DateFormat: dd/MM/yyyy X-Device-OSSKU: 4 X-Device-NetworkType: ethernet X-BM-DTZ: 120 X-DeviceID: 01000E2B09009A0C X-BM-DeviceScale: 100 X-Device-Manufacturer: innotek GmbH X-BM-Theme: ffffff;4f4f4f X-BM-DeviceDimensionsLogical: 1391x875 X-BM-DeviceDimensions: 1391x875 X-Device-Product: VirtualBox X-BM-CBT: 1440793203 X-Device-isOptin: false Accept-Language: fr-FR, fr, en-US, en X-Device-Touch: false X-Device-ClientSession: 622207B7813F451685445E4F1E151CDE X-BM-ClientFeatures: OemEnabled X-Search-AppId: Microsoft.Windows.Cortana_cw5n1h2txyewy!CortanaUI User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0; Cortana 1.4.8.176; 10.0.0.0.10240.21) like Gecko Origin: https://www.bing.com Accept-Encoding: gzip, deflate Host: www.bing.com Cookie: SRCHD=AF=NOFORM; SRCHUSR=AUTOREDIR=0&GEOVAR=&DOB=20150724; ANON=A=A644AD824544D5AC41FAB97CFFFFFFFF; SRCHHPGUSR=LUT=1440787047065; MUID=2C92A4A5447D46E6AA757EFA6F11F0E8; _SS=SID=83FC6CF6C6C343D1ACD995F6C2B6E7F4&CPID=1440806117065&AC=1&CPH=d7a6a5e3&HV=1440806147; _EDGE_S=SID=1A9BCBB3E9586929213AC3A2E8546820; MUIDB=2C92A4A5447D46E6AA757EFA6F11F0E8; SRCHUID=V=2&GUID=C6A1AE407FDB4367BEAB5C0CA1ED6507 Content-Length: 0 ==Response HTTP/1.1 200 OK Cache-Control: private Content-Length: 4167 Content-Type: text/cache-manifest; charset=utf-8 Vary: Accept-Encoding Server: Microsoft-IIS/8.5 Edge-control: no-store X-MSEdge-Ref: Ref A: 20D2CCDC37664B81B50955609D97F6AF Ref B: 9275466BA5691D4B075A4B2442491B75 Ref C: Fri Aug 28 16:56:51 2015 PST Date: Fri, 28 Aug 2015 23:56:50 GMT CACHE MANIFEST # Version:d7a6a5e3 CACHE: /AS/API/WindowsCortanaPane/V2/Init /devicecontent /rms/Ajax.Bundle/jc/e2d6f5b9/afad0936.js?bu=rms+answers+AjaxSerp+Core%24ajax.shared%2cThreshold%24ajax.history.threshold%2cCore%24ajax.render%2cCore%24ajax.providers%2cCore%24ajax.lifeCycle%2cCore%24Providers%24ajax.provider.threshold /rms/BingCore.Bundle/jc/4212d55d/93046b62.js?bu=rms+answers+Shared+BingCore%24shared%2cBingCore%24env.override%2cBingCore%24event.custom.fix%2cBingCore%24event.native%2cBingCore%24dom%2cBingCore%24cookies_parser%2cBingCore%24XHRPrefetch%24rmsajax_xhrprefetch%2cBingCore%24ClientInstV2%24InstrumentationConfigThrvis%2cBingCore%24ClientInstV2%24LogUploadCapFeatureDisabled%2cBingCore%24ClientInstV2%24ClientInstConfigSeparateQFQueue%2cBingCore%24ClientInstV2%24clientinst_xls%2cEmpty%2cBingCore%24ClientInstV2%24LogHelper%2cBingCore%24ClientInstV2%24VisibilityChangeEventHelper%2cBingCore%24Animation%2cBingCore%24fadeAnimation%2cBingCore%24framework%2cBingCore%24ShowWebView%2cBingCore%24CoreUtilities /rms/BlueBrand/ortl,cc/cfd824f0/ed765317.css?bu=rms+answers+BrandBundle_Mobile+thbrand%24CombinedAsset_Windows_th_b%2cthbrand%24Colors_th_b%2cthbrand%24Type_th_b%2cthbrand%24Grid_th_b%2cempty%2cEmpty /rms/BlueHeader/cir,ortl,cc/e3c56965/692701b1.css?bu=rms+answers+BrandBundle_Mobile+thbrand%24Header_CombinedAsset%2cthbrand%24Header_Colors_th_b%2cthbrand%24Header_Type%2cthbrand%24Header_Grid_th_b%2cempty /rms/BundledViews/jc/2307c526/4b700f39.js?bu=rms+views+Shared+CenteredImagePair%2cAlertWrapper%2cFootnoteWrapper%2cGroupLabel%2cHorizontalList%2cHorizontalListItem%2cImagePair%2cImagePairWrapper%2cLargeSubtitle%2cLegacyImagePair%2cRichCaptionControl%2cSelectItem%2cTitleWrapper%2cVerticalList%2cVerticalListItem%2cVerticalStackPanel%2cVerticalStackPanelItem /rms/BundledViews/jc/426e0434/6ee7a7b8.js?bu=rms+views+Threshold+DenseTileLayout%2cErrorMessage%2cInlineError%2cItemList%2cLocalStrings%2cMyStuffHeader%2cMyStuffPhotoItem%2cPageCanvas%2cPagination%2cPlaceHolderImage%2cRecourse%2cRegion%2cResultItem%2cResultItemCentered%2cResultItemPosition%2cResultItemPositionItem%2cResultItemPrimaryPosition%2cResultItemSecondaryPosition%2cResultItemWideColumnPosition%2cSection%2cSectionContents%2cSpellCorrection%2cSpellerSuggestion%2cSubsectionHeader%2cInstLink /rms/Framework/jc/98a1080c/8f35ad43.js?bu=rms+answers+BoxModel+config.threshold%2crules%24rulesThresholdv2%2ccore%2cmodules%24scroll%2cmodules%24resize%2cmodules%24state%2cmodules%24mutation%2cmodules%24error%2cmodules%24network%2cmodules%24cursor%2cmodules%24keyboard%2cmodules%24bot /rms/rms%20answers%20AutoSuggest%20Modules$Aggregators$FastRankModel/jc/8ab4816a/c9022570.js /rms/rms%20answers%20AutoSuggest%20Modules$Aggregators$TopHitConfidenceModel/jc/cdd5debb/e17a4d4c.js /rms/rms%20answers%20AutoSuggest%20Partners$BingMDL2/ortl,cc/beb7ff27/cfa7c403.css /rms/rms%20answers%20AutoSuggest%20Partners$CortanaMDL2/ortl,cc/f7ab76d7/53ee1b5a.css /rms/rms%20localizationstrings%20AutoSuggest%20CortanaQF/jc/977f644e/09e2fa3e.js /rms/rms%20localizationstrings%20Feedback%20LocStrings/jc/c495b727/7095ed03.js /rms/rms%20localizationstrings%20Threshold%20LocStrings/jc/7417ae58/35c6ce5b.js /rms/rms%20views%20AutoSuggest%20CortanaIcon/jc/2b83323c/09cbd0f2.js /rms/rms%20views%20AutoSuggest%20HighlightedText/jc/43aaa2f3/4987a95a.js /rms/rms%20views%20AutoSuggest%20Icon/jc/c511bd1f/d98da31c.js /rms/rms%20views%20AutoSuggest%20WindowsGroup/jc/cd70749a/10528dc4.js /rms/rms%20views%20AutoSuggest%20WindowsGroups/jc/73bef063/5a9e8c24.js /rms/rms%20views%20AutoSuggest%20WindowsIndexingMessage/jc/ce7b6b63/1504f776.js /rms/rms%20views%20AutoSuggest%20WindowsPermanentDisambig/jc/3e434d5d/a72607ec.js /rms/rms%20views%20AutoSuggest%20WindowsSuggestionSingleLine/jc/1604fb44/d727d90a.js /rms/rms%20views%20AutoSuggest%20WindowsSuggestionThreeLines/jc/22443ed7/3d9b6c2e.js /rms/rms%20views%20AutoSuggest%20WindowsTopResults/jc/057e9dc3/570a83fb.js /rms/SparkleFramework/jc/9a391b26/d18f4c62.js?bu=rms+serp+snr%24react.min%2csnr%24Sparkle%2csnr%24Sparkle.React%2csnr%24ResourceManagement.source%2csnr%24Array_c.source%2csnr%24string_c.source
On trouve aussi un appel à http://www.msftncsi.com/ncsi.txt qui permet à Windows de savoir si la liaison internet fonctionne, mais ce n'est pas propre à Windows 10.
Conclusion
Cela confirme le sentiment que j'avais sur Windows 10, il est très bavard, trop bavard. Qu'il discute de temps en temps pour savoir s'il y a des mises à jour je veux bien, mais envoyer ma résolution, le modèle et marque de ma machine à chaque fois que je fais une recherche dans le menu démarrer... non merci. Sachant que j'ai désactivé la recherche en ligne...
Après coup j'ai pu voir que mes données se recoupent avec l'article de Ars Technica qui a utilisé Fiddler, de mon côté Fiddler ne voyait pas les données j'ignore s'il y a une configuration particulière à faire.
Je n'utiliserai donc pas Windows 10 tant que cette situation n'évoluera pas, malgré les quelques outils désactivent les mouchards. Je me demande bien d'ailleurs ce que la CNIL attend pour se pencher sur ce sujet. Je ne dis pas que c'est illégal, Microsoft a forcément blindé les conditions d'utilisation, mais ce n'est pas acceptable en l'état.
Je ferai peut-être d'autres analyses sans désactiver les mouchards et avec aucune entrée dans le fichiers hosts, histoire de voir ce qui peut transiter pour "monsieur tout le monde" comme se le demande aussi Nicolas Simon dans son billet.
BM vous parraine en mode Premium chez iGraal.fr : 10 euros offerts à l'inscription :)Vous devriez me suivre sur Twitter : @xhark
Article original écrit par Mr Xhark publié sur Blogmotion le 02/09/2015 |
37 commentaires |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons