Nouveau post avec la nouvelle année.
Windows en frontal, prepare for anal
D'abord, commençons par un petit poème :
Code : Tout sélectionner
Malware du matin, chagrin
Snapshot du soir, espoir
User crétin, chagrin
Password dictionnaire, moi vénèr
On s'est pris un ransomware because... On s'est fait faire le cul d'un serveur applicatif (un vieux service qu'on fournit depuis l'aube du 21e siècle) qui avait :
- Des IPs publiques en façades sur un VLAN spécial (sans firewall matériel !)
- Un RDP ouvert parce que on a un partenaire tiers qui administre le système
Et on finit avec un serveur qui affiche une page web de rançon et il faut contacter par email et si on prend trop de temps le prix va monter blablabla.
On a donc eu la frayeur du siècle parce que deux machines sur ce réseau se sont faites ransomwariser, et que c'était une espèce d'intranet / calendrier pour plus d'une centaine de clients. DIEU MERCI on avait virtualisé et le stockage c'était du NetApp avec des snapshots du coup on a pu rollback proprement et sans casse. Sérieusement, snapshots et backups, vous sauvez des vies tous les jours et énormément de pognon.
Et là je réalise qu'un des postes touchés a une patte sur ... LE FUCKING RESEAU DE MANAGEMENT @#%! pour faciliter justement sa gestion.

Encore une fois, SANS FIREWALL.
Ou plutôt non, attendez, c'est plus drôle : il y avait un firewall. Le firewall Windows. Le gag ? On avait supposément mis une règle pour dire "RDP accessible uniquement depuis telle IP" mais la vérification pour cette rule et son application avaient été oubliées. Ceci pose une autre question horrible : COMMENT ON A FAIT POUR TENIR AUSSI LONGTEMPS ?

(apparemment quelques années)
Et là je me mets à baliser sur le vecteur d'infection et l'intelligence du gars. Dieu merci encore, c'était un système assez vieux pour dater d'avant la mise en place d'AD au sein de la boîte et ce service n'avait rien à faire dessus donc il n'avait jamais été mis sur un domaine, il tournait en workgroup.
Ceci fut bien et à la fois pas bien :
- Bien : même infecté, va te faire foutre pour te logger sur un serveur linké à AD. Au moins c'est pas openbar.
- Pas bien : On a découvert que le vecteur d'infection était un user "cifs" utilisé sur le serveur applicatif ET sur un autre serveur qui servait de NAS (partage réseau), et avec un mot de passe vulnérable.
- PAAAAAS BIEN : ...Ce compte était dans le groupe admin sur le serveur applicatif et le NAS, ET avait les privilèges RDP.

Dieu merci la DB (MSSQL Server 2005) n'avait cet user que en user ordinaire.
Mesures prises :
- Analyse forensic comparant le snapshot "une heure avant" avec "l'image infectée", on a découvert un truc sur l'infectée et pas sur le "une heure avant" donc on peut raisonnablement espérer qu'on a évité le pire
-- J'ai QUAND MÊME suggéré "dans le doute, on désintègre tout et on reconstruit au passage en Win2012 tant qu'on y est"
- On va étudier la construction d'un domaine spécifiquement pour ce service. Je refuse de me taper la gestion manuelle d'un user sur 4~5 serveurs comme ça. On est dans un cas à la con où un workgroup ferait bien l'affaire, mais où on a besoin d'une feature du domaine. Aussi si on fait un domaine, relation de trust à sens unique bien sûr.
À votre SAN-té, nous ne tenons pas nos Promesses pour la nouvelle année !
Et le lendemain de l'affaire ci-dessus ? Il y a un autre service au boulot qui tombe complètement en rade.
Symptomes : le monitoring Nagios secondaire de ce système ne remonte plus aucune alerte au Nagios principal, et c'est ainsi fait que au bout de 10 minutes sans updates, le Nagios principal fait tout passer en UNKNOWN "Stale information".
Je me fais réveiller par un appel paniqué de l'admin d'astreinte, et je pense d'abord à un souci de réseau :
- "OK, rapport de situation s'il te plaît"
- "Ben j'ai voulu regarder la VM du Nagios secondaire mais le vmhost est aussi dans les choux"
- "OK... Et si le Nagios primaire réagit comme ça, c'est que le secondaire est mort ; ce serait pas un souci réseau des fois ? Tu as check la gateway pour le datacenter pour ce projet ?"
- "Ah j'avais pas pensé merci... Ben non elle est up"
- "... ._O Bon attends je sors mon laptop et j'arrive sur IRC, on va continuer en direct"
Je remarque que absolument tout ce quadrant du réseau est apparemment down, mais pas certains équipements d'admin (KVM, PDU, firewall) ou autres. Par contre tout ce qui est VMs et serveurs physiques, presque tous down.
Presque tous.
Certains (physiques comme virtuels) me laissent me connecter en RDP, et j'ai un écran noir.
Et là je réalise avec horreur.
Le serveur est up, l'OS aussi mais a perdu presque toutes ses fonctions.
Certains serveurs étaient conçus pour tourner indépendamment, et eux fonctionnaient pépère sans interruption. Bon c'est déjà ça. Le plus gros du service est toujours fonctionnel.
Je chope le fichier zone du réseau en question pour choper l'IP du KVM et j'ignore l'avertissement SSL de "gros porc tu m'as accédé avec l'IP et pas le nom", et je vois que la majorité des serveurs physiques a effectivement rebooté. Vu qu'ils bootent en iSCSI, je vois l'écran de négociation avec le SAN... Et je vois que ça devrait booter, et l'écran avec le petit curseur qui clignote... Qui clignote... Qui clignote...
Et qui devrait virer au logo bleu de Windows 2012 qui boote, mais qui n'y vire jamais, et au bout de 5 minutes, je vois le serveur tenter de booter en PXE.
Et là je vais regarder nos graphes de monitoring, notamment le storage, qui semble pourtant up selon les critères classiques. Et je vois CECI.
Notez que l'unité est en OCTETS. Et que le réseau est ainsi fait que le storage peut prendre 20Gbits/s.
Le truc tente donc de me dire qu'il a transféré sur un volume logique 12GB/s, soit 100Gbits/s.

IMPOSSIBURU.
Mais j'ai vu un symptome bien plus choquant en regardant les graphes (voici un extrait que je viens de choper pour expliquer) :
En gros à un moment le storage cesse de débiter la moindre donnée. Confirmé aussi sur les switches (et bien sûr aucune trace du mystérieux pic de soi-disant transfert).
Bref, le storage répond, permet de se logger en iSCSI, mais ne répond aucune donnée.
Avec mon chef, on tente de rebooter un contrôleur, et ça freeze absolument tout. Il cesse de répondre, au ping, au SNMP, à tout (alors que jusque là on avait encore le SNMP pour surveiller la température, l'état du matos etc...)
- "Reboot contrôleur 1, paré ?"
- "Go. On a que ça à faire."
- "Euh. Ping lost. SSH lost. SNMP lost. Aucune réaction. He's dead Jim."
- "On attend un peu des fois qu'il reboote."
Dix minutes plus tard...
- "Non c'est pas normal, lors de l'update de firmware, le management avait eu zéro downtime et en tout ça avait pris cinq minutes..."
- "...Merde."
-" Bon, on passe au reboot éléctrique."
Un reboot éléctrique plus tard, et...
- "Ping, up ; SSH, up ; SNMP, up ; Les serveurs arrivent à booter dedans ; VMware a repris la main aussi."
- "Bon maintenant damage assessment... Toutes les VM sont bonnes pour un reboot, les Linux ont du basculer en read-only. Les Windows..."
- "Ok les Linux c'est facile, on les reboote avec les VMtools en masse. Reset pour les récalcitrants qui ont perdu leurs VMtools. Les Windows..."
- "Ouais, va falloir se logger et chkdsk tout."
Avec le staging et la prod, ça fait trente bécanes où il faut se logger, chkdsk c:, plus tous les disques de cluster et autres, et faire basculer le cluster pour réparer le node actif. Dieu merci il y a juste eu quelques pets genre fichiers temporaires écrasés, et espace libre mal déclaré.
Et là je chope un des serveurs (dieu merci un de ceux qui sont en pool et interchangeables), je note qu'il est bloqué et ne répond pas au reboot via le KVM. Je coupe le courant via la PDU, je relance... Et je remarque que là où les autres bouffent 40W, lui ne bouffe que 7W. Il est en alimentation minimale, mais il n'arrive pas à se rallumer.
- "PUTAIN le serv web #1 est down et ne revient pas"
- "Comment ça il revient pas ? O_o"
- "Alimentation éléctrique minimale, négocie sur le switch avec 100Mbps, on dirait que le chipset n'arrive même pas à s'initialiser, je n'ai même pas le signal VGA"
- "T'es en train de me dire que l'accident a EN PLUS niqué un serveur physique ?"
- "Ben visiblement oui..."
Après quelques heures de chkdsk acharné et de jonglage de cluster (deux clusters MSFC, un pour le core d'appli et un pour sa DB), on est revenus dans l'ordre.
On notifie le fabriquant, un minimum colère quand même mais bon on va être poli.

Et là on a pour réponse "J'ai vu le product leader il a mis ça dans sa file d'attente." Wait are you fucking SERIOUS ?
D'ailleurs gag le matos a remis ça hier.
Vendredi à 17H20.
Je regarde Nagios et je vois que plein de trucs virent UNKNOWN "Stale information" concernant ce service.
Oh non.
OH NON.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH
- "CHEF ! Regardez vite le Nagios je crois qu'il nous a remis ça"
- "Hein quoi ?"
- "Storage toujours up, mais traffic data tombé à zéro..."
- "Et c'est arrivé quand ?"
- "Ben y'a quinze minutes..."
- "Merde..."
- "Reboot éléctrique ? (après avoir get le service report)"
- "Reboot éléctrique."
Rinse, wash, repeat. On a réalisé bien plus vite ce qui se passait et réagit, alors certaines machines ont quand même survécu à ça (Apparemment si on reboote le storage Windows tient cinq bonnes minutes sans même faire un I/O error o_o), mais le recovery a quand même bien pris trois-quatre heures parce qu'on ne peut juste pas se permettre de se rater et se dire "bah tout va bien" après ça. Après, un mail bien senti au fournisseur avec "NON, on ne peut pas attendre, OUI c'est critique et si ils peuvent rien faire on casse le contrat et on met un NetApp à la place"
On a eu une réponse pour le moment. Le fabriquant, PROMISE, ne sait pas encore à l'heure qu'il est d'où vient le bug et n'arrive pas à le reproduire, et il nous conseille si ça se reproduit, pour le log de debug "de débrancher les cables du réseau iSCSI, et de mettre une clé USB sur le port de l'appareil" ... Oui sauf que l'appareil est en datacenter à 30 minutes :/ Enfin on peut s'en sortir en coupant immédiatement le traffic via le switch pour ne pas noyer les logs avec des erreurs iSCSI, puis foncer au datacenter mettre la clé USB pour récupérer le log complet -_-;
On soupçonne une mise à jour de firmware d'être responsable, donc à la prochaine merde on tente de récupérer le log et on downgrade.