
Esto me tiene un poco preocupado: estoy usandoafichepara monitorear un servidor CentOS 6 en busca de cambios en archivos y directorios. Quiero detectar cambios en archivos binarios, scripts PHP que se están introduciendo de contrabando en el servidor, archivos de configuración que cambian, etc. Esto se ejecuta a diario y recibo un correo electrónico con los cambios detectados. Por lo general, solo contiene archivos de registro y cambios después de que actualicé mi código web o instalé un nuevo software. Hoy parecía haber ganado el premio gordo, pero no estoy seguro.
Recibí un correo electrónico donde la suma de verificación MD5 de cientos de archivos cambió, pero no su marca de tiempo ni su tamaño. Esto incluye ejecutables como /bin/gawk
pero también bibliotecas como /lib/libasound.so.2.0.0
. Todo esto sucedió entre las 4:00 del 1 de enero y las 4:00 del 2 de enero (afick funciona a las 4:00).
Como prueba, restauré /bin/gawk desde la copia de seguridad y ejecuté una suma de comprobación md5 manual; De hecho, el archivo ha cambiado. Pero una diferencia entre los dos binarios no es concluyente:
--- old.gawk.hex 2017-01-02 15:56:06.000000000 +0100
+++ new.gawk.hex 2017-01-02 15:56:14.000000000 +0100
@@ -881,12 +881,12 @@
00003700 a6 03 00 00 00 00 00 00 d1 04 00 00 12 00 0d 00 |................|
00003710 f0 6d 42 00 00 00 00 00 2a 10 00 00 00 00 00 00 |.mB.....*.......|
00003720 01 00 00 00 b0 6b 5a 56 65 fd 1b 6d 00 00 00 00 |.....kZVe..m....|
-00003730 00 00 00 00 44 00 00 00 b0 6b 5a 56 b2 04 c4 e2 |....D....kZV....|
+00003730 00 00 00 00 44 00 00 00 56 e5 5d 58 82 a0 c7 cf |....D...V.]X....|
00003740 00 00 00 00 00 00 00 00 62 00 00 00 b0 6b 5a 56 |........b....kZV|
00003750 58 97 65 11 00 00 00 00 00 00 00 00 97 10 00 00 |X.e.............|
00003760 b0 6b 5a 56 30 fb 60 86 00 00 00 00 00 00 00 00 |.kZV0.`.........|
00003770 b0 2f 40 83 34 00 00 00 01 00 00 00 00 00 00 00 |./@.4...........|
-00003780 e0 08 65 00 00 00 00 00 e0 1f c8 83 34 00 00 00 |..e.........4...|
+00003780 e0 08 65 00 00 00 00 00 e0 1f 88 0a 35 00 00 00 |..e.........5...|
00003790 01 00 00 00 00 00 00 00 08 09 65 00 00 00 00 00 |..........e.....|
000037a0 50 2d 15 83 34 00 00 00 01 00 00 00 00 00 00 00 |P-..4...........|
000037b0 d0 ff ff ff ff ff ff ff 58 2d 15 83 34 00 00 00 |........X-..4...|
@@ -19806,13 +19806,13 @@
*
000501e0 28 00 65 00 00 00 00 00 1e 59 40 00 00 00 00 00 |(.e......Y@.....|
000501f0 00 00 00 00 00 00 00 00 00 b1 e8 82 34 00 00 00 |............4...|
-00050200 10 cd ec 82 34 00 00 00 50 32 a2 83 34 00 00 00 |....4...P2..4...|
-00050210 80 79 e6 82 34 00 00 00 e0 2f a2 83 34 00 00 00 |.y..4..../..4...|
+00050200 10 cd ec 82 34 00 00 00 50 32 62 0a 35 00 00 00 |....4...P2b.5...|
+00050210 80 79 e6 82 34 00 00 00 e0 2f 62 0a 35 00 00 00 |.y..4..../b.5...|
00050220 20 87 e7 82 34 00 00 00 20 bc e8 82 34 00 00 00 | ...4... ...4...|
00050230 20 9f e7 82 34 00 00 00 b0 05 e8 82 34 00 00 00 | ...4.......4...|
00050240 d0 af e9 82 34 00 00 00 20 5e ed 82 34 00 00 00 |....4... ^..4...|
00050250 40 7e ee 82 34 00 00 00 40 71 ec 82 34 00 00 00 |@[email protected]...|
-00050260 10 9d e9 82 34 00 00 00 30 6f a1 83 34 00 00 00 |....4...0o..4...|
+00050260 10 9d e9 82 34 00 00 00 30 6f 61 0a 35 00 00 00 |....4...0oa.5...|
00050270 f0 d7 ec 82 34 00 00 00 60 19 e3 82 34 00 00 00 |....4...`...4...|
00050280 e0 b1 e9 82 34 00 00 00 10 85 ee 82 34 00 00 00 |....4.......4...|
00050290 30 84 ec 82 34 00 00 00 40 20 e6 82 34 00 00 00 |0...4...@ ..4...|
(etc)
Por supuesto, mi primer pensamiento fue piratear, pero ver la diferencia me hace preguntarme. Ningún código real parece haber cambiado; No soy un experto en binarios ELF, pero creo que estas son sólo tablas de compensación de reubicación para bibliotecas compartidas.
Entonces, ¿qué crees que pasó realmente? Aparte de piratear, la única otra posibilidad que se me ocurre es una medida de "seguridad" en la que las compensaciones de bibliotecas compartidas son aleatorias y los archivos binarios vinculados también deben actualizarse. ¿Pero por qué ahora? La última vez que instalé algún software fue el 23 de diciembre y no apareció nada extraño en el medio. El único cronjob que podría estar relacionado es /etc/cron.daily/prelink, pero si es así, ¿por qué ahora?
Respuesta1
La diferencia en las sumas de verificación binarias que ha descrito probablemente se deba a la vinculación previa. Las distribuciones de Linux basadas en RHEL, como CentOS y Fedora, tienen el enlace previo habilitado de forma predeterminada. Así es como un 2009Artículo de LWN.netexplica el concepto detrás del prelink:
Los programas de Linux normalmente constan de un archivo ejecutable binario que hace referencia a varias bibliotecas compartidas. Estas bibliotecas se cargan en la memoria una vez y se comparten entre varios ejecutables. Para que esto suceda, el enlazador dinámico (es decir, ld.so) necesita cambiar el binario en la memoria de modo que cualquier dirección de los objetos de la biblioteca apunte al lugar correcto en la memoria. Para aplicaciones con muchas bibliotecas compartidas (programas GUI, por ejemplo), ese proceso puede llevar algún tiempo.
La idea detrás del enlace previo es bastante simple: reducir la cantidad de tiempo que el enlazador dinámico necesita para realizar estas reubicaciones de direcciones haciéndolo con anticipación y almacenando los resultados. El programa de preenlace procesa binarios ELF y bibliotecas compartidas de la misma manera que lo haría ld.so, y luego agrega secciones ELF especiales a los archivos que describen las reubicaciones. Cuando ld.so carga una biblioteca o un binario previnculado, verifica estas secciones y, si las bibliotecas se cargan en la ubicación esperada y la biblioteca no ha cambiado, puede hacer su trabajo mucho más rápido.
Sin embargo, si las bibliotecas siempre se cargan en la misma ubicación de memoria, los atacantes pueden intentar atacar estas ubicaciones con código malicioso, razón por la cual las distribuciones de Redhat se ejecutan prelink
regularmente con la -R
opción (para lograr la aleatorización del diseño del espacio de direcciones). Una consecuencia de cambiar las ubicaciones de la memoria es que cambiará la suma de comprobación de los archivos ejecutables binarios. Por lo tanto, si está utilizando un verificador de integridad de archivos como AIDE, recibirá una alerta sobre un binario "cambiado" cuando en realidad el único cambio que se ha producido es ASLR a través de prelink -R
.
Referencias: https://en.wikipedia.org/wiki/Prelink#Linux