viernes, 18 de noviembre de 2022

PsKill Vs TaskKill El Assassin de Procesos

Matar un proceso es una tarea bien conocida en el mundo de la informática, por diferentes motivos, casi todos los profesionales o apasionados de la tecnología han tenido que eliminar un proceso.

Existen múltiples herramientas que permiten suprimir la actividad de uno o varios procesos, en Windows el propio Administrador de Tareas, Process Explorer y otras tools de la suite de Sysinternals permiten realizar esta tarea desde el entorno gráfico, pero en algunas ocasiones es necesario eliminar procesos desde la consola o línea de comandos y una de las utilidades mas conocidas es PsKill de PsTools, un software de la suite de SysInternals para trabajar desde una shell.

Quizás no sea la mejor opción para matar procesos, y si te digo, que hay un killer mejor para esa tarea y ademas esta integrado dentro del sistema operativo Windows, el Assassin de los Procesos es TaskKill.

 

PsKill es una utilidad fantástica, pero esta escrita hace mucho tiempo y en las últimas versiones de Windows existen procesos de sistema que están protegidos, las limitaciones por el control de cuentas de usuario, ademas de las limitaciones asociadas a la ejecución en un dispositivo remoto, aunque hay trucos, como utilizar PsExec con la opción -s para ejecutar como System, esta utilidad esta muy limitada. Las opciones disponibles son:

PS C:\pstools> ./PsKill -?

Usage: pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>
     -t    Kill the process and its descendants.
     -u    Specifies optional user name for login to
           remote computer.
     -p    Specifies optional password for user name. If you omit this
           you will be prompted to enter a hidden password.
     -nobanner Do not display the startup banner and copyright message.


En el otro lado del ring tenemos un programa que esta integrado con el propio sistema operativo, disponible desde cmd o Windows PowerShell y con muchas mas opciones, el Assassin de Procesos por derecho: TaskKill. Y sus opciones son:

PS C:\> TaskKill /?

TASKKILL [/S sistema] [/U usuario [/P [contraseña]]]]
         { [/FI filtro] [/PID IdProceso | /IM NombreImagen] } [/T] [/F]

Descripción:
    Esta herramienta se usa para terminar tareas mediante el Id.
    de proceso (PID) o nombre de imagen.

Lista de parámetros:
  /S    sistema            Especifica el sistema remoto al que conectarse.

  /U    [dominio\]usuario  Especifica el contexto de usuario en el que
                           el comando debe ejecutarse.

  /P    [contraseña]       Especifica la contraseña para el contexto de
                           usuario dado. Pide entrada si se omite.

  /FI   filter             Aplica un filtro para seleccionar un conjunto de
                           tareas. Permite el uso de "*". ej. imagename eq
                           acme*

  /PID  processid          Especifica el PID del proceso que debe terminarse.
                           Use TaskList para obtener el PID.

  /IM   nombre de imagen   Especifica el nombre de imagen del proceso que
                           se va a terminar. Puede usarse el comodín '*'
                           para especificar todas las tareas o nombres de
                           imagen.

  /T                       Termina el proceso especificado y todos los
                           procesos secundarios iniciados por él.

  /F                       Especifica terminar forzosamente el proceso.

  /?                       Muestra este mensaje de ayuda.

Filtro(s):
    Nombre filtro     Operadores válidos         Valores válidos
    ------------              ------------------             -------------------------
    STATUS                 eq, ne                           RUNNING |
                                                                       NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                           Nombre de imagen.
    PID                       eq, ne, gt, lt, ge, le       Valor de PID.
    SESSION              eq, ne, gt, lt, ge, le       Número de sesión
    CPUTIME            eq, ne, gt, lt, ge, le        Tiempo válido en el formato
                                                                      hh:mm:ss.
                                                                      hh - horas,
                                                                      mm - minutos, ss - segundos
    MEMUSAGE        eq, ne, gt, lt, ge, le       Uso de memoria en KB.
    USERNAME         eq, ne                          Nombre de usuario en formato
                                                                     [dominio\]usuario.
    MODULES           eq, ne                          Nombre de DLL
    SERVICES            eq, ne                          Nombre de servicio.
    WINDOWTITLE   eq, ne                          Título de ventana.
 
  NOTA
  ----
  1) El comodín '*' para el modificador /IM se acepta solo cuando se aplica
     un filtro.
  2) Los procesos remotos se terminarán siempre forzosamente (/F).
  3) Los filtros "WINDOWTITLE" y "STATUS" no se considerarán cuando se
     especifique un equipo remoto.

Ejemplos:
    TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253
    TASKKILL /F /IM cmd.exe /T
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S sistema /U dominio\usuario /FI "USERNAME ne NT*" /IM *

 

La diferencia de opciones disponibles es evidente, sobre todo destaca la cantidad de filtros disponibles para TaskKill, lo que permite que la utilidad sea mucho mas versátil a la hora de eliminar uno o varios procesos.

Seguridad a lo Jabalí para Todos!!

Archivo del blog

Consultor e Instructor de Sistemas y Seguridad Informática en Asturias