How to monitor when user pugs a USB Storage Device

Aqui segue uma das minhas obras primas. Trata-se de um script (WSH + VBScript) que fica rodando em background, monitorando quando alguém insere um dispositivo de armazenamento USB. Quando o usuário insere o dispositivo, o sistema envia um email pro administrador.
Útil, não?

Basta salvar em um arquivo texto com extensão .VBS e rodar. Cuidado com as quebras de linha...

'USB Storage Monitor
'
'Vinicius Canto
'MVP Visual Developer - Scripting
'
'Grupo PET Computagco - Universidade de Sco Paulo - Brasil

'Disabling error messages...
On Error Resume Next


'Main routine
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE Targetinstance ISA 'Win32_PNPEntity' and TargetInstance.DeviceId like '%USBStor%'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Notifier(objLatestEvent.TargetInstance)
Loop

Sub Notifier(object)
Set objNet = CreateObject("Wscript.Network")

'You can change the function below to perform other actions
SendMailWithoutSSL _
"admin@network.com", _
"USB storage detected on " & objNet.Computername, _
"machine@network.com", _
"The user " & objNet.Username & " connected an USB Storage device on computer.", _
"smtp.network.com", _
25, _
"user", _
"pass"
End Sub




' CDOSYS official documentation:
' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wss/wss/_cdo_queue_top.asp
'
' by Vinicius Canto
Sub SendMailWithoutSSL(strDestination, strTitle, strFrom, strMessage, strSMTP, intPort, strUsername, strPassword)
set oMessage = CreateObject("CDO.Message")
set oConf = CreateObject("CDO.Configuration")
Set oFields = oConf.Fields



oFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
oFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = intPort
oFields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic: Auth with user and password sent with plain text
oFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUsername
oFields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPassword
oFields.Item("http://schemas.microsoft.com/cdo/configuration/Smtpusessl") = false
oFields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 '1: Using local SMTP; 2: Using port; 3: Using Exchange
oFields.Update

oMessage.Fields.Item("urn:schemas:mailheader:to") = strDestination
oMessage.Fields.Item("urn:schemas:mailheader:from") = strFrom
oMessage.Fields.Item("urn:schemas:mailheader:sender") = strFrom 'reply-to
oMessage.Fields.Item("urn:schemas:mailheader:subject")= strTitle
oMessage.Fields.Item("urn:schemas:mailheader:x-mailer") = "Vinicius Small Mail System -- by Vinicius Canto "
oMessage.Fields.Update

oMessage.Configuration = oConf

oMessage.TextBody = strMessage
oMessage.Send
End Sub

Esse daí eu fiz a pedido de um amigo meu, Sérgio Dias, MVP e Analista Consultor na área de Segurança da Informação. Aliás, aqui vai o link pro blog dele, que necessita urgentemente de uma atualização: =)
http://msmvps.com/blogs/sdias

O mais legal disso tudo é que não existe nada parecido no mundo ainda. Vou mandar pra tudo quanto é lugar agora... ScriptCenter, Knowledge Base, etc...

Aproveitem...!

Categorias dessa postagem: , , , ,

Comentários

Anônimo : Nesse script só preciso altera o e-mail ?

Desculpe não manjo nada de script.

Valeu

Flávio Bispo
bispo.flavio@gmail.com [18/7/06 14:17 - link]

Anônimo : Vinicius

Boa Noite

Desculpe a pergunta, mas onde eu coloco este script, em que logar eu coloco ele.

Tenho um DC win2003 sp1 como DC, nele eu rodo um script para algumas funcoes, eu poderia imcorporar este seu script em meu .BAT

Julio Vaz
juliovaz@hotmail.com [3/8/06 23:37 - link]

Carlos Alberto Martins Mendes : Grande, Gostaria de saber aonde posso alterar o email e aonde posso colocar para rodar o script de maneira que não impacte a minha rede.
Obrigadão,
Carlos
carlosjob@hotmail.com [8/3/07 12:51 - link]

Vinicius Canto : É só alterar as linhas abaixo:
'You can change the function below to perform other actions
SendMailWithoutSSL _
"admin@network.com", _
"USB storage detected on " & objNet.Computername, _
"machine@network.com", _
"The user " & objNet.Username & " connected an USB Storage device on computer.", _
"smtp.network.com", _
25, _
"user", _
"pass"
End Sub

Troque o email, o servidor smtp, usuário e senha. Mantenha as aspas do jeito que estão.

Quanto ao script, basta salvar com a extensão .VBS e chamar ele em algum script de logon. Vale lembrar que isso é um procedimento meio arriscado, visto que a conta e a senha de um usuário válidos no SMTP. Sugiro criar um usuário próprio pra ser usado pra isso no seu servidor smtp local.

[]s,


Vinicius [21/3/07 02:58 - link]

Clark Kent : Boa Noite.

Alguém pode me ajudar, com um script para criar usuários em um servidor win2003.
HELP. [10/5/07 19:19 - link]

Vinicius Canto : Já procurou aqui?

http://www.microsoft.com/technet/scriptcenter/scripts/ad/users/default.mspx

[]s,

Vinicius Canto
MVP Scripting [14/5/07 20:03 - link]

Neto Bezerra : Vinicius,

Coloquei tudo como voce informou, executo o scrit e ele não da nenhum erro... conecto a usb e nada de chegar o e-mail. Voce pode me ajudar?

A configuração está ssim do script
'You can change the function below to perform other actions
SendMailWithoutSSL _
"rneto@empresa.com.br", _
"USB storage detected on " & objNet.Computername, _
"mti00@empresa.com.br", _
"The user " & objNet.Username & " connected an USB Storage device on computer.", _
"mail.empresa.com.br", _
25, _
"rneto", _
"********"
End Sub


o que pode está dando errado? [17/5/07 13:46 - link]

Vinicius Canto : Troque a linha

Notifier(objLatestEvent.TargetInstance)

por

msgbox objLatestEvent.TargetInstance

E veja o que acontece. Quando você plugar o USB, deve aparecer uma mensagem na tela. Se aparecer, problema no envio do email só... caso contrário, problemas com o seu WMI. Veja que minha rotina de envio de emails é bem simples, e usa CDOsys e um servidor que suporte enviar mensagens com autenticação simples.

Lembre-se que esse processo roda em segundo plano, o wscript. Caso você execute várias vezes, lembre-se de matá-los com o Gerenciador de Tarefas.

[]s, [17/5/07 23:58 - link]

Nonato Segundo : Vinicius, bom dia...
Vc conhece algum script que monitore a copia de arquivos na usb, e nao somente o momento q plugo? por exemplo.
no momento em que eu colocar o componente usb ele comeca a monitorar a copia de arquivos e cada arquivo copiado eu envie um email com o nome do arquivo copiado?

tem como fazer isso... ja procurei bastante na net e nao achei nada. [26/6/07 10:06 - link]

Vinicius Canto : Olá Nonato,

postei recentemente um artigo sobre como monitorar o drive A. Basta adaptar ele...

[]s,

Vinicius Canto
MVP Windows Server - Admin Frameworks [28/7/07 16:32 - link]

Semog : Boa Noite!

Parabens pelo seu script para monitor de usb.
Você saberia me informar pois meu server de email não está fechado para envio de smtp, então posso criar qualquer usuario e envial email, para nao ter um usuário válido, o que eu preciso alterar no script original [21/9/07 00:21 - link]

Anônimo : Ola Vinicius,

Seus scripts é de grande ajuda, estou precisando criar um scripts para usuarios externo que utilizam o exchange que a senha esta para expirar via email, vc teria esse script?

Abraço

John [1/10/07 11:29 - link]

Vinicius Canto : Semog:

Desculpe, mas não entendi sua dúvida. O que você quer fazer, exatamente?

Anônimo:
Não, não possuo scripts para Exchange ainda... mas ele tá na lista de coisas que pretendo estudar =)

[]s,

Vinicius [28/10/07 10:21 - link]

Alexandre Trentini (TRENTINI_UNIAO) : Olá, Vinicius!

Estou efetuando os testes com o SCRIPT mas não consigo receber o e-mail. Será feito primeiro o teste no Windows XP (minha máquina), tenho liberado o SMTP e não preciso de autenticação na minha rede interna.

Eu utilizo o CDOSYS ou CDONTS?

Quando eu conecto o USB tenho que esperar algum tempo?

OBRIGADO,
TRENTINI [13/11/07 11:31 - link]

Carros : Parabéns pelo script, ficou muito bom mesmo! [27/8/08 16:44 - link]

Michelle : Boa tarde Vinicius,

Gostaria de saber se é possível alterar o script para que, ao invés de enviar e-mail apenas grave em um arquivo.

Grata,

Michelle [15/9/08 15:10 - link]

Anônimo : Olá Vinicius, funcionou perfeitamente. Parabéns pelo script.
Gostaria de saber se tem como incluir no texto da mensagem o horário que foi conectado o pendrive.

Abraço

Digão [2/2/09 10:36 - link]

Anônimo : já descobri
apenas acrescentei o comando now() no final do texto.

abraço [2/2/09 10:53 - link]

Fabyo : Esse script não funciona comigo
tentei de tudo, e tentei em outros micros e nada
eu ate tentei mostrar uma mensagem assim que conectar o pendrive, mas ele nao faz nada
alguem poderia me passar o script que esteja funcionando certinho?

valeu [2/4/09 14:35 - link]

Vinicius : Opa! E aew Vinicius, blz?

Cara, esse script funciona no Vista?

Estou tendo problemas nos usuários comuns, no administrador rola lega, porém nos usuários deixa o logon muito lento e não fica executando em segundo plano...

Tu já enfrentou esse tipo de problema?

Abarço

Vinicius Rodrigues [9/10/09 09:56 - link]

af : Meu Caro... Meus Parabéns que mente é essa... show...

gostaria de saber como faço pra implantar isso em minha rede, por favor poderiar me passar o passo-a-passo, sou leigo na área...

afj_junior@hotmail.com [2/12/09 10:45 - link]

Renato : Vinícius, boa tarde

Gostaria de uma ajuda sua, implementei esse script em minha máquina antes de por em minha rede, mas ele não funcionou, fiz todas as alterações que vc indicou acima, e nada acontece, nem a mensagem na tela aparece. Será que existe outro modo?
Obrigado [1/4/10 15:12 - link]

Mauro Borges : vinicius,
Show esse script.
Mas me tira uma dúvida, ele só avisa que um pen drive foi conectado ou ele também mostra quais arquivos foram copiados????
Valeu
mauroborges@yahoo.com.br [18/8/11 14:51 - link]

Leonardo Ridolfi : Olçá, bacana o Script, eu gostaria que um grupo de email's recebecem esse e-mail, o problema é que esse grupo não tem senha ... Eu posso utilizar meu usuario e senha mas como devo configurar?


Obrigado

leonardo_ridolfi@hotmail.com [14/9/11 11:52 - link]