Proyecto Clean-MemoryStick
Es habitual que cuando trabajamos con pendrives y vamos de un equipo para otro el pendrive acabe infectado con algún tipo de virus. Estos virus se aprovechan de una característica de Windows: el autoarranque (autorun). El autoarranque consiste en que si en la raíz del pendrive existe el fichero autorun.inf
, Windows lo analiza y ejecuta lo que indique ese fichero (pudiendo ser un virus oculto en el propio pendrive).
El contenido del fichero puede ser el siguiente:
[autorun]
icon=machanguito.ico
; esto es un comentario
label=MiPendrive
shellexecute=http://www.informaticofriki.blogspot.com/
open=peazovirus.exe
...
En concreto la línea con la opción open
es la que indica el ejecutable del pendrive que se va a
iniciar (y que para nosotros es sospechoso).
Este proyecto consiste en implementar un script para el PowerShell de Windows que permita chequear y limpiar pendrives de este tipo de amenazas.
- El nombre del script será
Clean-MemoryStick.ps1
.
Sintaxis
La sintaxis del script es la siguiente:
Clean-MemoryStick.ps1 [ -Help | -Check unidad | -CheckAll | -Clean unidad [-Quarantine] ]
El funcionamiento del script será el siguiente:
Opción | Descripción |
---|---|
-Help |
Muestra la ayuda de sí mismo: Get-Help .\Clean-MemoryStick.ps1 |
-Check unidad |
Busca en la unidad (C:, D:, E:, …) del dispositivo removible (pendrive) si existe el fichero autorun.inf ; si existe, se extraerá el nombre del ejecutable de la opción open y se mostrará la letra de la unidad y el nombre del ejecutable. |
-CheckAll |
Similar a -Check pero busca en todos los dispositivos removibles. |
-Clean unidad [-Quarantine] |
Busca en la unidad (C:, D:, E:, …) del dispositivo removible (pendrive) si existe fichero autorun.inf ; si existe, se extraerá el nombre del ejecutable de la opción open y se preguntará al usuario si se quiere eliminar el ejecutable de la unidad correspondiente. Si se especifica además la opción -Quarantine , en vez de eliminar los archivos ejecutables, se moverán a la carpeta .quarantine en el directorio HOME del usuario ($HOME\.quarantine ). Este directorio deberá crearse si no existe. |
El script deberá contener los comentarios de ayuda de PowerShell, de forma que se muestre toda la información del mismo con
Get-Help
.
Ejemplos de uso
Suponiendo que hay un pendrive en la unidad E:
conteniendo el fichero autorun.inf
anterior y otro en la unidad F:
sin éste fichero.
# Muestra la ayuda del script
PS> .\Clean-MemoryStick.ps1 -Help
# ó
PS> Get-Help .\Clean-MemoryStick.ps1
# Comprobar si hay virus sólo en la unidad E:
PS> .\Clean-MemoryStick.ps1 -Check E:
E: - peazovirus.exe
# Comprobar si hay virus en todas las unidades (E: y F: en este caso)
PS> .\Clean-MemoryStick.ps1 -CheckAll
E: - peazovirus.exe
F: - No se ha encontrado nada.
# Eliminar virus de la unidad E:
PS> .\Clean-MemoryStick.ps1 -Clean E:
E: - peazovirus.exe
¿Desea eliminar el ejecutable? (S/N): s
El ejecutable peazovirus.exe ha sido eliminado de la unidad E:
# Poner en cuarentena el virus en la unidad E:
PS> .\Clean-MemoryStick.ps1 -Clean E: -Quarantine
E: - peazovirus.exe
¿Desea poner el ejecutable en cuarentena? (S/N): s
El ejecutable peazovirus.exe de la unidad E: ha sido puesto en cuarentena.
# Poner en cuarentena lo que hay en todas las unidades
PS> .\Clean-MemoryStick.ps1 -Clean E: -Quarantine
E: - peazovirus.exe
¿Desea poner el ejecutable en cuarentena? (S/N): s
El ejecutable peazovirus.exe de la unidad E: ha sido puesto en cuarentena.
Pistas
Para obtener todas las unidades de disco (Provider.Name == FileSystem) montadas (Free != nulo) en el sistema:
PS> Get-PSDrive | Where-Object { $_.Provider.Name -eq "FileSystem" -and $_.Free -ne $null }
Calificación
Opción | Funcionalidad | Peso (%) |
---|---|---|
-Help | Mostrar la ayuda. | 10 |
-Check | Buscar ejecutables en autorun.inf . |
20 |
-CheckAll | Check en todas las unidades. | 15 |
-Clean | Eliminar ejecutables en autorun.inf . |
40 |
-Quarantine | Mover ejecutables en autorun.inf a .quarantine . |
15 |