Limpiar nuestro Linux de virus con ClamAV

Recientemente he tenido un caso de un debian infectado por un troyano que minaba, el consumo de CPU de esta maquina estaba disparado las 24h con procesos aleatorios que no parecían ser sospechosos, no obstante cuando notas un consumo excesivo de CPU y revisas el sistema ves que algo esta pasando.

Lo primero que hicimos fue parar estos procesos, vimos que la CPU bajaba el consumo radicalmente y procedimos a reiniciar el servidor para comprobar si estos procesos volvían, como era de esperar sin realizar ninguna acción mas los procesos volvían con nombres diferentes pero mismo consumo.

Asi que decidimos echar mano del mejor escaner de malware, virus etc que existe en linux bajo mi punto de vista, ClamAV, vamos a explicar como funciona ya que es muy sencillo.

Para su instalacion creo que los que hayan llegado hasta aqui sabran como instalarlo ya que esta en los repositorios oficiales de casi todas las distribuciones.

yum install clamav para distros centos y apt-get install clamav para distros basadas en debian.

El siguiente paso seria actualizar las bases de firmas con el comando freshclam y continuariamos con un clamscan -r -i /tmp si quisiesemos escanear el directorio /tmp de nuestro equipo, -i lo añadimos para que solo nos muestre los archivos infectados y se haga mas legible la salida en pantalla.

Este fue el resultado de mi escaner bajo la carpeta /tmp y /etc, como veis el equipo tenia bicho. Lo que veréis en muchos manuales es que buscan virus y con un rm eliminan los archivos contaminados pero muchas veces nos encontraremos con archivos que nos den un: Operation not permitted porque están marcado con un atributo que en linux se llama “immutable bit” esto imposibilita la eliminación de estos archivos, para ello con un lsattr /directorio/archivo podréis comprobar los atributos del archivo en cuestión y si comprobáis que tiene el bit immutable con un chattr -i  /directorio/archivo eliminareis este atributo siendo posible la eliminación.

En la imagen superior veréis los archivos infectados y como fui desmarcando el atributo para eliminar todo estos, los archivos podéis eliminarlos vosotros mismos o podéis usar el propio ClamAV con esta entra en consola.

clamscan –infected –remove –recursive /Directorio

No obstante el comando no desmarca el atributo y dará error en su eliminación si no procedéis primero con el chattr -i

Es bueno revisar antes de eliminar los archivos para limpiar correctamente el sistema, en mi caso existía un fichero test.sh en el cual se hacían llamadas a otras rutas y se generaban otros archivos, también renombraron el fichero netstat dejando un netstat infectado en su lugar, procedí a la eliminación de netstat y renombre de nuevo el original a su nombre, es un proceso algo tedioso pero necesario ya que podemos generar inestabilidad en el sistema si eliminas archivos sin saber que eliminamos.

ClamAV tiene muchos mas parámetros de configuración y escaneo, aquí os dejo todos los que están disponibles actualmente, con ellos podréis jugar bastante.

clamscan –help
Clam AntiVirus: Scanner 0.101.2
By The ClamAV Team: https://www.clamav.net/about.html#credits
(C) 2019 Cisco Systems, Inc.
clamscan [options] [file/directory/-]
–help -h Show this help
–version -V Print version number
–verbose -v Be verbose
–archive-verbose -a Show filenames inside scanned archives
–debug Enable libclamav’s debug messages
–quiet Only output error messages
–stdout Write to stdout instead of stderr
–no-summary Disable summary at end of scanning
–infected -i Only print infected files
–suppress-ok-results -o Skip printing OK files
–bell Sound bell on virus detection
–tempdir=DIRECTORY Create temporary files in DIRECTORY
–leave-temps[=yes/no(*)] Do not remove temporary files
–gen-json[=yes/no(*)] Generate JSON description of scanned file(s). JSON will be printed and also-
dropped to the temp directory if –leave-temps is enabled.
–database=FILE/DIR -d FILE/DIR Load virus database from FILE or load all supported db files from DIR
–official-db-only[=yes/no(*)] Only load official signatures
–log=FILE -l FILE Save scan report to FILE
–recursive[=yes/no(*)] -r Scan subdirectories recursively
–allmatch[=yes/no(*)] -z Continue scanning within file after finding a match
–cross-fs[=yes(*)/no] Scan files and directories on other filesystems
–follow-dir-symlinks[=0/1(*)/2] Follow directory symlinks (0 = never, 1 = direct, 2 = always)
–follow-file-symlinks[=0/1(*)/2] Follow file symlinks (0 = never, 1 = direct, 2 = always)
–file-list=FILE -f FILE Scan files from FILE
–remove[=yes/no(*)] Remove infected files. Be careful!
–move=DIRECTORY Move infected files into DIRECTORY
–copy=DIRECTORY Copy infected files into DIRECTORY
–exclude=REGEX Don’t scan file names matching REGEX
–exclude-dir=REGEX Don’t scan directories matching REGEX
–include=REGEX Only scan file names matching REGEX
–include-dir=REGEX Only scan directories matching REGEX
–bytecode[=yes(*)/no] Load bytecode from the database
–bytecode-unsigned[=yes/no(*)] Load unsigned bytecode
–bytecode-timeout=N Set bytecode timeout (in milliseconds)
–statistics[=none(*)/bytecode/pcre] Collect and print execution statistics
–detect-pua[=yes/no(*)] Detect Possibly Unwanted Applications
–exclude-pua=CAT Skip PUA sigs of category CAT
–include-pua=CAT Load PUA sigs of category CAT
–detect-structured[=yes/no(*)] Detect structured data (SSN, Credit Card)
–structured-ssn-format=X SSN format (0=normal,1=stripped,2=both)
–structured-ssn-count=N Min SSN count to generate a detect
–structured-cc-count=N Min CC count to generate a detect
–scan-mail[=yes(*)/no] Scan mail files
–phishing-sigs[=yes(*)/no] Enable email signature-based phishing detection
–phishing-scan-urls[=yes(*)/no] Enable URL signature-based phishing detection
–heuristic-alerts[=yes(*)/no] Heuristic alerts
–heuristic-scan-precedence[=yes/no(*)] Stop scanning as soon as a heuristic match is found
–normalize[=yes(*)/no] Normalize html, script, and text files. Use normalize=no for yara compatibility
–scan-pe[=yes(*)/no] Scan PE files
–scan-elf[=yes(*)/no] Scan ELF files
–scan-ole2[=yes(*)/no] Scan OLE2 containers
–scan-pdf[=yes(*)/no] Scan PDF files
–scan-swf[=yes(*)/no] Scan SWF files
–scan-html[=yes(*)/no] Scan HTML files
–scan-xmldocs[=yes(*)/no] Scan xml-based document files
–scan-hwp3[=yes(*)/no] Scan HWP3 files
–scan-archive[=yes(*)/no] Scan archive files (supported by libclamav)
–alert-broken[=yes/no(*)] Alert on broken executable files (PE & ELF)
–alert-encrypted[=yes/no(*)] Alert on encrypted archives and documents
–alert-encrypted-archive[=yes/no(*)] Alert on encrypted archives
–alert-encrypted-doc[=yes/no(*)] Alert on encrypted documents
–alert-macros[=yes/no(*)] Alert on OLE2 files containing VBA macros
–alert-exceeds-max[=yes/no(*)] Alert on files that exceed max file size, max scan size, or max recursion limit
–alert-phishing-ssl[=yes/no(*)] Alert on emails containing SSL mismatches in URLs
–alert-phishing-cloak[=yes/no(*)] Alert on emails containing cloaked URLs
–alert-partition-intersection[=yes/no(*)] Alert on raw DMG image files containing partition intersections
–nocerts Disable authenticode certificate chain verification in PE files
–dumpcerts Dump authenticode certificate chain in PE files
–max-filesize=#n Files larger than this will be skipped and assumed clean
–max-scansize=#n The maximum amount of data to scan for each container file (**)
–max-files=#n The maximum number of files to scan for each container file (**)
–max-recursion=#n Maximum archive recursion level for container file (**)
–max-dir-recursion=#n Maximum directory recursion level
–max-embeddedpe=#n Maximum size file to check for embedded PE
–max-htmlnormalize=#n Maximum size of HTML file to normalize
–max-htmlnotags=#n Maximum size of normalized HTML file to scan
–max-scriptnormalize=#n Maximum size of script file to normalize
–max-ziptypercg=#n Maximum size zip to type reanalyze
–max-partitions=#n Maximum number of partitions in disk image to be scanned
–max-iconspe=#n Maximum number of icons in PE file to be scanned
–max-rechwp3=#n Maximum recursive calls to HWP3 parsing function
–pcre-match-limit=#n Maximum calls to the PCRE match function.
–pcre-recmatch-limit=#n Maximum recursive calls to the PCRE match function.
–pcre-max-filesize=#n Maximum size file to perform PCRE subsig matching.
–disable-cache Disable caching and cache checks for hash sums of scanned files.
Pass in – as the filename for stdin.
(*) Default scan settings
(**) Certain files (e.g. documents, archives, etc.) may in turn contain other
files inside. The above options ensure safe processing of this kind of data.

También te podría gustar...

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.