sexta-feira, 29 de novembro de 2013

Configurando portas VLAN access no Mikrotik RouterOS

Existe muita documentação explicando como "criar" VLAN's no Mikrotik, mas sempre explicando como criar interfaces VLAN e não a VLAN de verdade, ainda sem diferenciar portas de acesso de portas de transporte (trunk). Uma interface VLAN (vlan interface) atrelada à uma interface física está mais próximo de uma porta de transporte que de uma uma VLAN como um todo.
Um porta de acesso é uma porta membro de uma VLAN (domínio de broadcast) onde os pacotes não saem com a marcação 802.1q, já os pacotes em portas de transporte recebem a marcação na saída, que é o caso das "VLAN interfaces" no RouterOS.

Falando em domínios de broadcast, no RouterOS você deve criar "bridges", onde cada porta de acesso da VLAN será inserida. As interfaces VLAN (Vlan interface) serão criadas sobre as portas de transporte, de onde os pacotes vão sair com a marcação (802.1q) da VLAN de origem, em seguida as interfaces VLAN são inseridas na bridge da sua VLAN.

Se quer saber um pouco mais sobre VLAN's acesse este artigo AQUI.

Neste exemplo estou usando um RB2011 UAS 2Hnd, onde eu tenho 10 portas e pretendo criar 2 Vlan's. A VLAN 10 com as portas ether7 e ether8, e a VLAN 20 com as portas ether9 e ether10.
A porta ether6 será a porta de transporte.



Primeiro criamos as 2 bridges, uma para cada VLAN (br-vlan10 e br-vlan20):






Em seguida adicione as portas ether7 e ether8 à br-vlan10 e as portas ether9 e ether10 à br-vlan20.


 Desta maneira já temos 2 VLANS de verdade, Basta agora criar as interfaces VLAN na porta de transporte e depois inseri-las na suas respectiva bridge.

Criando 2 interfaces VLAN na porta ehter6:





Coloque cada interface vlan dentro da sua bridge. A coisa fica mais ou menos assim:



Veja que as VLANS são definidas pelas portas dentro de uma bridge, e os pacotes egressos das "vlan interfaces" serão marcados com o TAG da VLAN e sairão pela ether6, que é a porta de transporte, onde você provavelmente terá um switch plugado.

Quem vem do mundo Cisco e cia, pode ficar confuso já que no IOS você define qual porta é membro de qual VLAN na configuração da própria porta. A configuração é muito mais simples, mas lembre-se que o RouterOS é basicamente o Linux, e que a RouterBoard não é exatamente um switch, o que lhe dá muito mais flexibilidade.

Problema

Nesta Routerboard que uso as portas 6 a 10 vem com uma configuração ainda mais estranha. Ao inserir as portas nas bridges das VLAN's você por se deparar com o seguinte erro:


Acontece que as portas ether7 em diante vem configuradas como "Slave" da porta ether6, que na prática é o mesmo que dizer que a porta ether6 e todas as suas "escravas" são um switch (uma bridge). Você deve primeiramente remover a configuração "Master Port" dessas portas, para que fiquem "livres", usando a opção "none":


A explicação para isso pode deixar as coisas ainda mais confusas, e fica para outro post. Na documentação da Mikrotik, esta configuração usa recursos diretos da CPU do switch - ASIC (application specific integrated circuit) - e oferece um desempenho maior na camada2, poupando processamento da CPU principal.


O RouterOS é um sistema completo e poderoso, mas se você não pisa firme nos conceitos de redes e camada 2 pode tropeçar bastante até entender a coisa.




sexta-feira, 22 de novembro de 2013

Sudo no Windows

O bom entendedor usuário de Linux já percebeu a ideia do post. Um comando para executar tarefas como administrador.

Mas para que isso? Para evitar a fadiga...

Primeiro, eu uso conta de usuário limitada, então é comum ter que executar alguma coisa com privilégios.
Segundo, eu odeio mouse. Só de ter que achar a coisa no explorer, depois clicar com o botão direito e em "Executar como Administrador", já é muito trabalho para mim. Faço praticamente tudo pelo Executar ou pelo cmd. A medida que uso a janela do Executar a lista fica mais completa e rápido para eu achar o que quero no histórico. Basta um "Windows +R" e mais uma ou 2 teclas e ENTER!

Tudo bem, poderia abrir o executar o digitar "runas /User:Administrador <COMANDO>" e pronto, basta então colocar a senha. Só que Não! Comando muito longo, e seria sempre repetido. Por que não apenas "sudo <comando>" ? Mais rápido.

Para isso crie um arquivo "sudo.cmd" e salve na pasta system32 com o seguinte conteúdo:

@echo off
rem --- Script para tarefas como usuário Administrador
runas /user:%computername%\Administrador %1

Substitua o nome do administrador caso o seu seja diferente, ou coloque antes o nome do domínio se for uma rede com domínio.

Exemplo: Surge um problema e você quer executar o gerenciador de tarefas para ver todos os processos sem restrições:

sudo taskmgr

Simples assim.

Bloqueando sites indesejados - na gambiarra

O truque do arquivo hosts é bem velho. Você pode relacionar endereços IP com nomes fixos no arquivo, ou mesmo indicar um IP falso para um determinado nome ( por exemplo facebook.com ).
A ideia de usar este método, muito deselegante por sinal, é que em alguns casos você tem redes onde não há um servidor proxy ou algo do tipo, o o pessoal quer bloquear alguns sites para que os usuários não desviem do trabalho, mas apenas em algumas máquinas. Pequenos escritórios ou escolas são bons exemplos. Acaba sendo uma solução rápida e eficaz.

O arquivo deve indicar o endereço IP e o nome DNS da maquina linha por linha. Para cada nome DNS usado o sistema consulta o arquivo hosts antes do servidor DNS, então você pode envenenar o arquivo com entradas falsas. Provavelmente o seu Anti vírus vai reclamar, por isso preste atenção nele durante o procedimento.

O endereço do arquivo é o "C:\Windows\System32\drivers\etc\hosts". Abra o arquivo no bloco de notas e comece a escrever. Veja abaixo como bloquear o fcebook:

127.0.0.1     fb.com
127.0.0.1     www.fb.com
127.0.0.1     facebook.com
127.0.0.1     www.facebook.com
127.0.0.1     pt-br.facebook.com
127.0.0.1     facebook.com.br
127.0.0.1     www.facebook.com.br
127.0.0.1     pt-br.facebook.com

Salve e pronto. Veja que devem ser colocadas entradas com variações do domínio do site.

Você pode fazer um script se você usar isso em vários locais ou em várias máquinas. Fiz um exemplo de um onde é aberto um arquivo no qual você pode digitar os domínios sem se preocupar em digitar os endereços. Em seguida ele gera as entradas corretamente e salva no arquivo hosts:

@echo off
echo.
if not exist "%Userprofile%\Bloqueados.txt" echo. > "%Userprofile%\Bloqueados.txt"

echo  Digite em linha por linha neste arquivo os endereços que deseja bloquear.
echo Salve e feixe o bloco de notas.
echo.
echo.
set /p R=         Tecle para abrir...

notepad "%Userprofile%\Bloqueados.txt"

echo.
echo.
echo  Salvando relacao anterior....
type %Systemroot%\System32\Drivers\etc\hosts > %Systemroot%\System32\Drivers\etc\hosts.old
echo.
echo         Carregando dominios bloqueados....
echo. > %Systemroot%\System32\Drivers\etc\hosts
echo 127.0.0.1    localhost >> %Systemroot%\System32\Drivers\etc\hosts

for /f %%B IN ( ' type "%Userprofile%\Bloqueados.txt" ' ) DO ( echo 127.0.0.1    %%B >> %Systemroot%\System32\Drivers\etc\hosts )
 

type %Systemroot%\System32\Drivers\etc\hosts

echo.
echo.
pause


Assim que executado ele verifica a existência de um arquivo "Bloqueados.txt" no perfil do usuário, que pode ser copiado previamente, em seguida abre no bloco de notas para edição. Assim que salvo, ele carrega as entradas no arquivo hosts. Eu chamei o script de Bloq.cmd, e sempre copio para a pasta system32, é claro.

Script para configurar Proxy.


É comum em uma rede grande, onde cada usuário tem a sua conta, ter que configurar o proxy de um por um. Você simplesmente tem que fazer isso de máquina em máquina e para cada conta de usuário. É um trabalho ingrato, mas você pode simplesmente orientar o usuário, por telefone, de como fazer a configuração caso precise. Mas por que não automatizar?
Faça um pequeno script com a sua configuração e poupe alguns instantes de trabalho. Vamos criar um script (BAT) para ser usado como um comando qualquer e um script em VB caso precise de interação com o usuário. Você pode colocar um atalho para os scripts em um local fácil para o usuário, e uma cópia no path para que seja executado como um comando normal. Por fim você pode colocá-lo para ser executado no logon do usuário ou nos scripts do domínio via GPO.

Abra o bloco de notas e copie o seguinte conteúdo:

@echo off
rem Configurar proxy

reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d 192.0.2.1:3128 /f
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f
reg add "
hkey_current_user\Software\Microsoft\Windows\currentVersion\Internet Settings" /v ProxyOverride /d "*intranet.exp.br;192.168.0.1;www.caixa.gov.br;<local>" /f

echo.
echo Servidor Proxy Padrão definido

E salve o arquivo como o nome "SetProxy.cmd". Copie o arquivo para a pasta System32 para que possa ser executado como um comando qualquer. Lembre-se de substituir o endereço pelo endereço do seu servidor proxy com a porta e as exceções de acordo a sua necessidade. Caso não use nenhuma exceção deixe apenas o valor "<local>" que é bem comum ser usado. 

Você pode criar um atalho para o script em um lugar fácil de os usuários encontrarem, ou mesmo pedir para executar procurando na pesquisa do Windows.

Em alguns casos os usuários de notebook podem sair da sua rede para locais onde não há servidor proxy, e fica meio complicado explicar todo o caminho para que ele saiba desabilitar a configuração. Com um script em VB você pode fazer aparecer uma caixinha de diálogo "SIM ou NÃO" para ele usar sempre que quiser.

Crie um segundo arquivo no bloco de notas e valve com o nome "ConfProxy.VBS":

dim ConfProxy
set ConfProxy = Wscript.CreateObject("Wscript.Shell")

if msgbox("Habilitar Proxy?", vbQuestion or vbYesNo) = vbYes then
ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 1, "REG_DWORD" 
ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\currentVersion\Internet Settings\ProxyServer", "192.0.2.1:3128", "REG_SZ" 
ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\currentVersion\Internet Settings\ProxyOverride", "*intranet.exp.br;192.168.0.1;www.caixa.gov.br;<local>", "REG_SZ"
else 

ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 0, "REG_DWORD" 
End if 
Set ConfProxy = Nothing

Clicando no script o usuário pode selecionar sim ou não. Você pode salvar na área de trabalho ou fazer um atalho.

Deixando o script mais robusto

Se você odeia fazer configurações manualmente, e precisa alterar essas configurações frequentemente, você pode aprimorar o script para que ele defina o endereço do servidor com um argumento, ou mesmo que habilite ou não a configuração. Veja o código abaixo:

@echo off
rem Configurar proxy

set Arg1=%1
set Arg2=%2
if defined Arg1 goto %Arg1%

rem ---- Define a configuração padrão
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d 192.0.2.1:3128 /f
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f

reg add "hkey_current_user\Software\Microsoft\Windows\currentVersion\Internet Settings" /v ProxyOverride /d "*intranet.exp.br;192.168.0.1;www.caixa.gov.br;<local>" /f
echo.
echo Servidor Proxy Padrão definido
goto fim

rem  ----- Define segundo o IP informado no argumento IP
:/IP
:IP
if not defined Arg2 goto ERRO
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d %Arg2% /f
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f
echo.
goto fim

rem ----- Desativa o uso do proxy
:/disable
:disable
:/off
:off
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 0 /f
echo.
echo Uso de servidor Proxy desabilitado
goto fim

rem ----- Ativa o uso do proxy
:/enable
:enable
:/on
:on
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f
echo.
echo Uso de servidor Proxy habilitado
goto fim

:--help
:--?
:help
:/h
:/help
:?
:-?
echo.
echo  Uso do SetProxy
echo          Setproxy - Definie o servidor padrão
echo         "SetProxy IP <IP do servidor>:<porta> " - Define o IP e porta do proxy
echo          SetProxy off - Desabilita o proxy
echo.
echo Exemplo: SetProxy IP 192.168.88.1:8080
echo.
goto fim

:ERRO
echo.
echo    Você deve especificar o endereço do servidor para a opção IP
echo "SetProxy IP <IP do servidor>:<porta>" - Define o IP e porta do proxy
echo.
echo Exemplo: SetProxy IP 192.0.2.1:3128
echo.
goto fim

:fim


Veja que agora você pode executar o script usando o argumento IP <IP do servidor>:<porta>, ou os argumentos "on" ou "off" para habilitar ou desabilitar. Qualquer argumento inválido o o programa é encerrado sem qualquer alteração, e se usado sem argumentos a configuração padrão é carregada.

SetProxy ?   ---- Exibe o help
SetProxy IP 10.0.0.250:8080 ---- Configura o proxy com o endereço fornecido.
SetProxy ON    -----  Habilita o uso do proxy
SetProxy OFF    -----  Desabilita o uso do proxy

Para multiplicar este arquivo em toda rede você pode fazer uma GPO ou deixar uma cópia em uma pasta compartilhada facilmente acessível. Ou até mesmo copiá-lo para todos os PCs. Outro recurso interessante é colocar uma entrada autorun para ele no registro. Veja os comandos abaixo:

# Coloca uma entrada para o perfil do usuário atual:
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Run" /v ConfProxy /d "<CaminhoDoScript>" /f

# Coloca uma entrada para ser executado no logon de todos usuários:
reg add "hkey_local_machine\Software\Microsoft\Windows\CurrentVersion\Run" /v ConfProxy /d "<CaminhoDoScript>" /f

domingo, 10 de novembro de 2013

Dica rápida - Renomear interfaces de rede

Se por um motivo qualquer você não gostou dos nomes que o sistema atribuiu às interfaces de rede no Linux você pode rapidamente alterar os nomes editando um arquivo do udev.

Por exemplo, você trocou uma placa de rede na máquina e o nome veio como eth2, ou eth3, e você quer que fique eth0.

Antes de tudo identifique o endereço MAC das placas de rede com o ifconfig:

#  ifconfig ethX | grep HW

 Lembre-se de substituir o X pelo número da sua interface.
Edite o arquivo "/etc/udev/rules.d/70-persistent-net.rules".

#  nano /etc/udev/rules.d/70-persistent-net.rules

Lá estão os nomes da interfaces uma em cada linha, com o endereço MAC de cada placa no "ATTR{address}=="ab:cd:ef:gh:ij:kl"". Procure pelo parâmetro "NAME="ethX", você deve comentar linhas de interfaces antigas caso encontre alguma.

Reinicie o sistema:

#  init 6

E pronto!

sábado, 9 de novembro de 2013

Ajustes no terminal do Debian.

Não me perguntem por que, mas no Debian algumas funcionalidades são desabilitadas por padrão na linha de comando. Uma espiada nos scripts de configuração do bash e verá que pode deixar o ambiente um pouco mais agradável.

O bash tem alguns scripts que são executados imediatamente no login do usuário, que são:


/etc/profile
/etc/bash.bashrc

E o perfil do usário que é armazenado na sua pasta home:
~/profile
~/.bashrc

Os 2 primeiros são os arquivos principais, valem para todos os usuários. O arquivo /etc/profile estabelece algumas configurações e em seguida "invoca" o /etc/bash.bashrc. Repare, por exemplo que nas primeiras linhas do /etc/profile é estabelecido o path do sistema, se o UID do usuário for 0 (root) ele tem umas pastas a mais.

if [ "`id -u`" -eq 0 ]; then
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

export PATH

 Em seguida ele invoca o arquivo "/etc/bash.bashrc", e todos os arquivo terminados com sh dentro da pasta "/etc/profile.d/", onde você pode criar arquivos de configuração a vontade.

No arquivo "/etc/bash.bashrc" você deve habilitar o bash completion, descomentando as linhas referentes à ele. Estranhamente o Debian é instalado com ele desabilitado. O bash completion é talvez o melhor recurso do shell. Ele faz a mágica da tecla TAB. Por exemplo, não é necessário digitar
"apt-get install isc-dhcp-server", pressionando o TAB ele completa os comandos e mostra os pacotes possiveis. Então é algo como "apt-g<TAB> i<TAB> isc<TAB>s<TAB>".

 Bom, acho que todos conhecem e abusam da funcionalidade, mas esta é uma daquelas coisas que é muito mais complicado explicar do que fazer, então mãos à obra.

Procure pelas seguintes linhas no arquivo e remova as "#":

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
         . /etc/bash_completion
fi

Com isso o bash completion estará habilitado para todos os usuários, para que a alteração tenha efeito é necessário fazer logout e login novamente.

Repare que o bash completion é tão "inteligente" que ele ele analisa o contexto do sistema para mostrar as possibilidades de complementação dos comandos. Por exemplo, se você não tem o pacote htop instalado e digitar "apt-get remove h<TAB><TAB>" ele não colocará o htop na lista pelo simples fato de ser um pacote que comece com H. Outro exemplo são os módulos. Ao digitar "modprobe <TAB><TAB>" ele mostrará todos os módulos disponíveis, mas se for para remover, "modprobe -r <TAB><TAB>" ele mostra apenas os módulos carregados.

Após executar o perfil global, bash executa o arquivo na sua pasta home, o "~/.profile", que executa o "~/.bashrc" em seguida. Outra coisa estranha é que o arquivo "~/.bashrc" do root é muito mais simples que o dos outros usuários. Como root abra os arquivos "~/.bashrc" e o arquivo "/etc/skell/.bashrc" e verá que o segundo ( que é a matriz para os usuários quando criados ) é bem diferente.
Eu gosto de renomear o arquivo original do root e copiar o segundo:

# mv ~/.bashrc ~/.bashrc.OLD
# cp /etc/skell/.bashrc ~/.bashrc

Dando uma olhada no "/etc/skell/.bashrc" você encontra algumas coisas interessantes, como alguns aliases úteis, prompt colorido e forçar alguns outros comandos a usarem cores também, o que é muito útil. É o caso do grep por exemplo, os termos ficam em destaque na saída do comando.
Voltando ao aquivo descomente as seguintes linhas:

...
#force_color_prompt=yes
...
if [ -x /usr/bin/dircolors ]; then
       test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
       alias ls='ls --color=auto'
       #alias dir='dir --color=auto'
       #alias vdir='vdir --color=auto'

        #alias grep='grep --color=auto'
       #alias fgrep='fgrep --color=auto'
       #alias egrep='egrep --color=auto'
fi

# some more aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

Você pode adicionar mais alguma coisa que goste. Eu particularmente sempre ponho:

alias cls=clear
alias df='df -h'
alias du='du -h'
alias free='free -m'

Desta forma, todo usuário criado a partir de então vai copiar o arquivo pronto na pasta "/etc/skell/" para o seu perfil. Para usuários já existentes, você pode abrir o arquivo "~/.bashrc" de cada um e editar, ou mesmo copiar a matriz para todos.

Repare que agora o shell fica mais agradável à cores, e você ficará até mesmo mal acostumado com o bash completion.

quinta-feira, 7 de novembro de 2013

Vírus no pendrive. Matando a cobra e mostrando o pau.

Em 2009 eu trabalhava em uma escola com 12 computadores, na época vírus provenientes de pendrive eram um problema sério. Tudo graças ao recurso de autorun do Windows XP, que de maneira muito ingênua executava qualquer programa indicado no arquivo autorun.inf de unidades removíveis. Em pouco tempo infecções por pendrives se tornaram um caos. O pendrive se tornou o simbolo de promiscuidade no mundo da informática.

Logo os mais preocupados com a questão descobriram a maneira correta de cortar o mal pela raiz desativando a funcionalidade de autorun no Windows XP via GPO. Qualquer unidade removível montada no sistema, antes que alguém pudesse impedir, o Windows fazia-lhe o favor de verificar a existência do famigerado arquivo autorun.inf, onde era indicado o programa (vírus) a ser executado imediatamente, o que não dava qualquer chance para o usuário.

Um arquivo autorun.inf geralmente tem um conteúdo como este:

[autorun] 
open=virus.exe 
icon=virus.exe,0
label=Run Virus

Por uma causa nobre o Windows criou todos estes problemas. Mas a funcionalidade foi aprimorada no Windows 7, e funciona de modo muito mais seguro. Neste artigo a Microsoft explica todos os recursos disponíveis usando os arquivos autorun.inf em unidades removíveis, caso você tenha interesse em entender ou mesmo em utilizar em algum software seu.

No Windows 7 você pode configurar facilmente várias opções de autorun no painel de controle acessando o item  "Reprodução automática", mas o bom mesmo é desmarcar a primeira opção "Usar Reprodução automática em todas as mídias e dispositivos".


Ele tem muito mais opções relacionadas à música e vídeos, e para executar um programa indicado pelo arquivo o usuário deve selecionar em um menu que aparece assim que o dispositivo é plugado. O padrão é "Abrir pasta para exibir arquivos":




Prevenindo no Windows XP

Para desativar a funcionalidade do autorun no Windows XP, vá em "Executar, digite gpedit.msc, e Enter". No console da GPO você pode procurar por "Modelos administrativos > Sistema > Desativar autoexecutar", marque a opção habilitado e em "Todas as unidades". Com isto o usuário tem uma chance de caçar o vírus antes que o próprio Windows abra as portas para ele. Veja a descrição completa da função no site oficial AQUI.

Assim o usuário ganha tempo, mas não resolve o problema. Se o pendrive estiver com o arquivo autorun.inf indicando o executável do vírus, ao clicar duas vezes no seu ícone em "Meu Computador" o sistema age da mesma maneira, executando o vírus. É preciso então fazer uma varredura cuidadosa na unidade antes de abri-la. Alguns antivírus o fazem bem, ou mesmo ferramentas de segurança próprias para pendrive. No entanto é bom entender como o problema funciona e fazer alguns procedimentos para evitar infecções futuras.

Por isso comecei e desenvolver o Pendrive Limpeitor Tabajara com a ideia de que se você tiver um bom script em mãos que faça o trabalho rápido e eficiente, pode poupar o processamento do seu antivírus e evitar problemas futuros.

Problemas comuns 


Com alguma experiência pude observar os seguintes sintomas das infecções e o que o script deve fazer par solucionar.

 - Criação do arquivo "autorun.inf" na unidade onde é indicado o executável do vírus. O script deve remover o arquivo e criar uma pasta autorun.inf com atributos S, H e R, para evitar que um novo arquivo seja criado no lugar futuramente.

 - Procurar arquivos executáveis no raiz da unidade e oferecer para excluir.

 - Varrer a unidade em busca de pastas ocultas onde pode estar o programa malicioso. É comum eles usarem do truque da lixeira para dificultar as coisas. Uma pasta oculta é criada, e dentro dela outra pasta com um arquivo "Desktop.ini" com um conteúdo que faz o sistema pensar que aquela é uma pasta de lixeira. O script tenta identificar estas pastas e excluir.


 - Resolver o problema dos atalhos e revelar as pastas ocultas

 O problema do atalhos

A moda hoje é o vírus ocultar todas as suas pastas e criar atalhos para ele, sem que você perceba  ao clicar no atalho o programa é executado e logo em seguida ele abre a pasta desejada. É importante fazer uma varredura por atalhos e "desocultar" (retirar os atributos H e S) todas as pastas no raiz da unidade.
Se você tem este problema dos atalhos com algum pendrive, pode revolver com 2 comandos:

 attrib -r -h -s /d /S X:\
del /f X:\*.lnk

Onde X: é a letra da unidade do seu pendrive ou disco. Tome muito cuidado para não fazer isso em unidades do sistema, então tenha certeza da letra da unidade. O problema de usar desse método é que pode demorar muito já que ele vai ser processado em todos os arquivos da unidade. Além de muito dispendioso, apenas revela as pastas e arquivos ocultos, para que sejam removidos manualmente.

 Você pode usar os seguintes comandos para revelar pastas e processar atalhos apenas no raiz da unidade poupando tempo. Lembre-se de substituir H: pela letra da sua unidade:

for /F "delims==" %X IN ('dir /b /a H:\') DO ( attrib -H -S -R "H:\%X" )

O comando acima revela todas as pastas e arquivos ocultos apenas no raiz, em seguida você pode analisar a unidade e apagar coisas suspeitas manualmente.

Outra opção é o comando abaixo. Ele relaciona todas as pastas e arquivos que tenham um atalho de mesmo nome, remove os atributos e apaga o atalho:

for /F "delims=." %X IN ('dir /b /a H:\*.lnk') DO ( if exist H:\%X ( attrib -H -S -R "H:\%X" & del /f /a /p H:\%X.lnk ))

Este recupera suas pastas de acordo com os nomes dos atalhos, mas outras pastas ocultas permanecem ocultas.

Um amigo meu desenvolveu um software similar que revela as pastas ocultas em apenas um clique!
Por ser um programa gráfico é muito mais amigável para leigos, ele ainda tem um vídeo explicando como fazer o procedimento. É o Folder Recovery. Você pode conferir nos links abaixo:

Video: http://www.youtube.com/watch?v=zXnOcfn1Zhs
Versão simplificada.(Vista/7) http://www.mediafire.com/?axu4524wncogs77 
Versão de tirar o vírus.(XP/Vista/7) http://www.mediafire.com/?8o6j9l68s2ed598

Entendendo os atributos

Atributos são recursos do sistema de arquivos (FAT ou NTFS), os arquivos podem ser facilmente marcados com atributos para implementar funcionalidades diversas no sistema operacional. Os atributos no Windows são:

H - Hide, arquivo ou pasta oculta
R - Read only. Somente Leitura
S - System, arquivo ou pasta do sistema
A - Atributo de arquivamento. Serve para operações de backup. (irrelevante neste caso)
I - Índice de pesquisa. Arquivos com este atributo não são indexados. (irrelevante neste caso)

Arquivos ou pastas com atributo de sistema também ficam ocultos, e para vê-los você deve desmarcar a opção  "Ocultar arquivos protegidos do sistema operacional" no menu de "Opções de pasta" no Painel de controle:


Você pode manipular os atributos de arquivos e pastas clicando com o botão direito e em propriedades. Em relação aos atributos I, e A clicando no botão "Avançado":


Outra alternativa é usar a linha de comando com o attrib. A sintaxe é bem simples:

attrib arquivo.txt                      # Exibe os atributos do arquivo
attrib +S arquivo.txt                 # Adiciona o atributo S no arquivo
attrib -H arquivo.txt                 # Remove o atributo H do arquivo
attrib +H +S +R arquivo.txt    # Adiciona os 3 atributos no arquivo

Toda pasta ou arquivo que um malware deseja esconder, invariavelmente serão aplicados os atributos H, R e S. O atributo S não pode ser manipulado diretamente pelo Explorer nas propriedades do arquivo, então você deve usar o comando attrib para adicionar ou remover o atributo:

attrib -S arquivo.txt


Métodos preventivos

Tendo o pendrive limpo você pode usar de alguns artifícios para prevenir infecções posteriores. Uma delas é criar uma pasta de nome AUTORUN.INF e aplicar os atributos nela para que não seja substituída por um vírus.

md autorun.inf & attrib +H +S +R autorun,inf

Se a unidade é formatada em NTFS, você pode remover as permissões da pasta para dificultar ainda mais a sua alteração.

Outro método mais radical é formatar a unidade em NTFS, criar uma pasta no raiz onde serão armazenados os seus arquivos legítimos e remover todas as permissões de alteração no raiz. Para isso o mecanismo de herança deve ser desabilitado na pasta criada, onde você poderá delegar permissões a vontade.

O "Pendrive Limpeitor Tabajara"

Com a ideia de fazer todo o processo automaticamente comecei a desenvolver um script que chamei de "Pendrive Limpeitor Tabajara", para agilizar na limpeza de pendrives de alunos e outras pessoas que eram espetados nas máquinas todos os dias. Ele tem evoluído bastante, tenta identificar atalhos com nomes de pastas na unidade, recuperar as pastas de mesmo nome dos atalhos que estiverem ocultas, remover o arquivo autorun.inf, detectar executáveis ocultos na unidade e por fim cria a pasta AUTORUN.INF que funciona como uma espécie de vacina.
Basta executar e digitar a letra da unidade selecionada, em seguida a varredura é feita e cada arquivo ou pasta detectado só é excluído com a confirmação do usuário.








No final, o máximo que pode sobrar são pastas que podem conter vírus, mas todas elas reveladas, e o usuário poderá excluir facilmente sabendo que não é uma pasta dele.
Tem sido muito eficiente, mas estou aberto a sugestões para melhorar, ou até mesmo migrar para uma linguagem compilada.

Veja o vídeo de demonstração aqui: http://goo.gl/BXysfg

Aparando as arestas com o Autoruns e Process Explorer

Se o usuário teve o pendrive infectado ou mesmo plugou o pendrive infectado na sua máquina é importante saber se o sistema não foi comprometido.
Para isso sempre uso estas duas ferramenta do Sysinternals Suite. Leia um artigo mais detalhado aqui.
É importante executar primeiro o "procexp" para ver se não há nenhum processo suspeito em execução, depois o "autoruns" lhe mostrará se não foi criada nenhuma entrada para que o vírus seja novamente executado na inicialização dos sistema. Ultimamente o vírus mais comum aparece como um JScript (extensão .js) que é executado pelo interpretador do Windows, o "wscript.exe". Veja o processo no Process Explorer:






Quanto a entrada de autorun gerada, tome cuidado, por ela pode ser criada apenas no perfil do usuário que foi infectado, principalmente se você usa várias contas de usuário. Este é mais um caso onde usar uma conta sem privilégio de administrador pode prevenir que o sistema todo seja comprometido, já que removendo o perfil do usuário infectado resolveria o problema posteriormente. Veja as dicas de segurança AQUI.


Conclusão

Assim que plugar pendrives ou unidades removíveis no seu PC, use imediatamente uma ferramenta como esta. É muito mais seguro que deixar o Anti vírus cuidar do serviço. Se você quer uma cópia do Tabajara, por favor mande um email para joaolucasmacedo AT gmail.com :-)


sábado, 2 de novembro de 2013

Removendo arquivos com segurança

Um arquivo nada mais é do que uma sequência de dados distribuída no disco. Para resolver a bagunça os arquivos são relacionados em uma tabela, este é o trabalho fundamental do sistema de arquivos. Quando você manda um arquivo para a lixeira ele é simplesmente movido da pasta de origem para uma pasta chamada lixeira. Quando excluímos um arquivo a sua referência na tabela é eliminada, deixando os blocos que ele ocupa "órfãos", prontos para serem preenchidos com qualquer outro conteúdo assim que possível. Imagine um livro que é removido do índice da biblioteca, mas continua na estante, mesmo que ninguém a princípio vá localizá-lo.
Por isso é relativamente simples recuperar um arquivo. Um software especial varre todo o disco procurando por sequências que façam sentido, revelando qualquer informação solta por ali. Quanto mais tempo decorrido após a exclusão, mais provável é que o sistema tenha reutilizado o espaço e "passado por cima" do conteúdo anterior. Uma boa ferramenta livre para o trabalho é o TestDisk.

Se você tem algum arquivo que não deseja que seja recuperado tão facilmente, você deve apagar este arquivo com segurança. A técnica é simples. Antes de apagar o arquivo (remover da tabela de alocação do sistema de arquivos) o documento é sobrescrito várias vezes com dados aleatórios, e em seguida removido.

 No Windows não há ferramenta nativa para isso. Você pode baixar o pacote do SysInternals Suite e usar o utilitário Sdelete. Se você não conhece o SysInternals leia este artigo. Copie o executável do Sdelete para a pasta "C:\Windows\system32" e você já pode usá-lo como um comando qualquer. Para apagar um arquivo use:

sdelete -p 5 arquivo.txt

Consulte opções adicionais com o parâmetro "/?".

sdelete /?



 O AVG Anti Vírus 2014 veio com a opção de "triturar" arquivos integrada no menu de contexto. Se você usa o AVG, mesmo o Free, você pode simplesmente clicar com o botão direito no arquivo e triturá-lo.



Resolvendo o problema no Linux ou um LiveCD

O Linux tem uma ferramenta nativa para o serviço, o shred. O uso é bem simples:

shred -n 5 arquivo.txt

Você pode comprovar a ação exibindo o conteúdo do arquivo logo em seguida. Verá que o conteúdo foi sobrescrito por dados ininteligíveis. A opção "-n 5" especifica a quantidade de vezes que o arquivo será sobrescrito.
Existe ainda a opção "-u" que remove o arquivo em seguida. O padrão é apenas "picotar" o arquivo sem apagá-lo, já que você poderia estar usando o mesmo comando em arquivos especiais como partições, que não podem ser apagados. Então para picotar e apagar o arquivo seria:

shred -u -n 5 arquivo.txt

Outro método interessante é dar boot no sistema com um live CD e apagar partições ou mesmo discos inteiros usando o shred. Imagine que você tem um HD com infirmações sigilosas da empresa que não será mais utilizado.

shred -n 5 /dev/sda

Lembre que ele percorrerá todo o disco, então se você definir um número muito alto de escritas pode levar muito tempo. Usando um live CD também é válido usar do dd para realizar a tarefa, e destruir o conteúdo de um disco. Por exemplo:

dd if=/dev/zero of=/dev/sda            # Preenche o disco com Zeros
dd if=/dev/random of=/dev/sda      # Preenche o disco com dados aleatórios

Outra opção interessante é usar os atributos para definir aquivos que devem ser apagados com segurança. Os atributos oferecem uma série de funcionalidade no sistema de arquivos, um dele é o atributo "s" (minúsculo) que informa que os blocos devem ser preenchidos com zeros antes que o arquivo seja apagado. Para definir o atributo "s" em um arquivo use o comando chattr. Alguns atributos só podem ser definidos pelo root, então considere dar uma lida na documentação antes de usar os recursos:

# chattr +s arquivo.txt        # Adiciona o atributo "s" ao arquivo
$ lsattr arquivo.txt              # exibe os atributos do arquivo


Por fim você deve lembrar que os sistemas de arquivos modernos podem possuir cópias dos dados temporariamente devido ao uso do journaling. Ou mesmo em locais onde há snapshots das alterações das pastas, backups automáticos, shadow copies, etc. Você pode consultar a documentação e este artigo AQUI para se orientar. O mais indicado mesmo é executar a limpeza em todo o HD (ou pendrive) no caso de prevenção de vazamento de informações. Mas se você está realmente preocupado com o conteúdo deste arquivo nunca pare de alimentar a sua paranoia.