Il mistero dei binari modificati e la soluzione via Facebook

Recentemente mi sono imbattuto in uno strano caso di file binari installati dagli stessi pacchetti RPM che su sistemi diversi (ma assolutamente uguali per configurazioni) risultavano avere checksum md5sum (e contenuto) diversi. Sono bastate poche ore per ricevere una risposta via Facebook.

Problema e soluzione sono spiegati nei messaggi riportati.
Il messaggio originario fu postato di sera, la mattina dopo il caso si chiude:

RPM checksum mystery
Tuesday, November 18, 2008 at 8:13pm  

Faccio un broadcast su FB perchè quello che ho visto mi sembra troppo assurdo per essere vero, eppure non ho trovato riferimenti in rete.
Magari qualcuno ha trovato lo stesso problema o lo può verificare sui suoi sistemi.

In breve (chi deve capire, capisce):
[root@pandora ~]# rpm -qf /usr/sbin/wpa_supplicant
wpa_supplicant-0.4.8-10.2.el5
[root@pandora ~]# md5sum /usr/sbin/wpa_supplicant
2284aea37009ed5b5c9061c450eb0bc7 /usr/sbin/wpa_supplicant

[root@trinity2 ~]# rpm -qf /usr/sbin/wpa_supplicant
wpa_supplicant-0.4.8-10.2.el5
[root@trinity2 ~]# md5sum /usr/sbin/wpa_supplicant
252ba05a35c9015d0a306891d704527f /usr/sbin/wpa_supplicant

Due diverse macchine, Centos 5, aggiornate allo stesso modo, stesso pacchetto, stesso file, contenuto diverso, checksum diverso (i file sono effettivamente diversi in alcuni byte, ma hanno stessa dimensione)
A prima vista capita sostanzialmente per TUTTI i file binari installati da RPM.

Stesso comportamento l'ho ricontrato in una infrastruttura completamente diversa e separata, basata su RedHat 5.
Un elemento in comune, fra i due diversi ambienti (a parte le affinità Centos/RedHat) è che i relativi sistemi sono stati installati via Kickstart.

Inizialmente ho temuto il peggio (rootkit, intrusioni profonde e, insomma, il peggio) poi, visto che la cosa l'ho verificata su diversi ambienti e sembra impattare tutti i binari, mi sono, in parte, tranquillizzato e sto cercando di capire se c'è una spiegazione più logica, per quanto illogico sembri il tutto.

Insomma, cari Friends, se avete la possibilità di verificare se ricontrate comportamente simili su sistemi simili o avete info al riguardo, fatemi sapere.. plz!


La mattina dopo arrivano pronte domande e risposte...

Francesco Crippa wrote
at 9:45am on November 19th, 2008
...l'architettura e' la stessa? E le differenze sull'MD5 dei binari e' su TUTTI i pacchetti?


Alessandro Franceschi wrote
at 10:05am on November 19th, 2008
Ovviamente stessa architettura, stessi rpm stesso tutto, la differenza la si trova solo su file tipo (presumo sia lo stesso su binari a 32 bit):
ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

Su file tipo: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, stripped
non c'è il problema.

Da altre prove ho verificato che la cosa si presenta anche su macchine installate a mano.
Hints?


Massimo Leonarda wrote
at 10:46am on November 19th, 2008
La differenza mostrata da md5sum è dovuta alle informazioni di "prelinking" memorizzate nell'eseguibile (di default l'attività di prelink viene eseguita ogni giorno dallo script "/etc/cron.daily/prelink).

Infatti:

[root@host2 ~]# rpm -qf /usr/sbin/wpa_supplicant
wpa_supplicant-0.4.9-1.1.el4

[root@host2 ~]# rpm -q --dump wpa_supplicant |grep /usr/sbin/wpa_supplicant
/usr/sbin/wpa_supplicant 311656 1170366949 924f77de5235743318736aaf01017e5d 0100755 root root 0 0 0 X

L'rpm ci dice che l'MD5 dovrebbe essere "924f77de5235743318736aaf01017e5d"

Ma se eseguo l'md5sum ottengo

[root@host2 ~]# md5sum /usr/sbin/wpa_supplicant
d007825f77ff27a8f87bd2e6ec263dc5 /usr/sbin/wpa_supplicant

Facendo un "verify" con l'rpm però non si ottengono errori

[root@host2 ~]# rpm -qV wpa_supplicant
[root@host2~]#

Il motivo è che "rpm" è "prelink aware" cioè esegue la verifica md5 dopo aver fatto "unprelink" dell'eseguibile e lo confronta con quanto riportato nel pacchetto di installazione.

Se ripeto l'operazione su una macchina differente (ma gemella come install), ottengo lo stesso risultato:

[root@host11 ~]# rpm -qf /usr/sbin/wpa_supplicant
wpa_supplicant-0.4.9-1.1.el4

[root@host1 ~]# rpm -q --dump wpa_supplicant |grep /usr/sbin/wpa_supplicant
/usr/sbin/wpa_supplicant 311656 1170366949 924f77de5235743318736aaf01017e5d 0100755 root root 0 0 0 X

[root@host1 ~]# md5sum /usr/sbin/wpa_supplicant
64a3089825ef7b9264c10d40b29b0152 /usr/sbin/wpa_supplicant

[root@host1~]# rpm -qV wpa_supplicant
[root@host1~]#


Beh, che dire, la risposta di Massimo spiega tutto e chiude il caso.
Ho usato Facebook invece di altri social network anche più tecnici, come LinkedIn, perchè effettivamente su FB l'interazione e la comunicazione fra i partecipanti è molto più spinta, l'esperimento, in questo senso, è ben riuscito.

Privacy Policy