PowerShell no Windows: Fundamentos e Aplicações em Segurança

Introdução ao PowerShell

O PowerShell é uma ferramenta de automação de tarefas e gerenciamento de configuração desenvolvida pela Microsoft. Ele combina uma interface de linha de comando com uma linguagem de script baseada no .NET Framwork. Diferente de ferramentas tradicionais baseadas em texto, o PowerShell trabalha com objetos, permitindo uma manipulação de dados mais eficiente e uma interação mais profunda com componentes do sistema.

História e Evolução

O desenvolvimento do PowerShell surgiu da necessidade de superar as limitações das ferramentas de linha de comando existentes no Windows, como o cmd.exe e scripts batch. A abordagem orientada a objetos foi projetada para integrar a simplicidade do scripting com a robustez do .NET Framework.

Conceito de Objetos

No contexto do PowerShell, um objeto represneta um item com propriedades (características) e métodos (ações). Por exemplo, um objeto arquivo pode ter propriedades como Nome, Tamanho e DataModificação, além de métodos como Copiar() e Renomear(). Quando um cmdlet é executado, ele retorna objetos em vez de texto puro, permitindo operações mais complexas e flexíveis.

Comandos Fundamentais do PowerShell

Sintaxe Verb-Noun

Os comandos do PowerShell, conhecidos como cmdlets, seguem a convenção de nomenclatura Verbo-Substantivo. O verbo descreve a ação, enquanto o substantivo identifica o alvo da ação.

  • Get-Content: Exibe o conteúdo de um arquivo.
  • Set-Location: Altera o diretório de trabalho atual.

Explorando Cmdlets

O cmdlet Get-Command lista todos os comandos disponíveis na sessão atual. Para filtrar apenas as funções, utilize o parâmetro -CommandType.

Get-Command -CommandType "Function"

O cmdlet Get-Help fornece documentação detalhada sobre outros comandos. Por exemplo, para ver exemplos de uso do cmdlet Get-Date:

Get-Help Get-Date -examples

O cmdlet Get-Alias exibe atalhos para comandos, como cd para Set-Location.

Instalação de Módulos

Para buscar módulos em repositórios online, use Find-Module. Para instalar um módulo, use Install-Module.

Find-Module -Name "Pester*"
Install-Module -Name "Pester"

Gerenciamento de Arquivos e Diretórios

Navegação no Sistema de Arquivos

Use Get-ChildItem para listar itens em um diretório.

Get-ChildItem -Path "C:\Documentos"

Para mudar o diretório atual:

Set-Location -Path "C:\Documentos\Projeto"

Criação e Remoção de Itens

Crie um novo diretório ou arquivo com New-Item.

New-Item -Path ".\NovoDiretorio" -ItemType "Directory"
New-Item -Path ".\NovoDiretorio\arquivo.txt" -ItemType "File"

Para remover itens:

Remove-Item -Path ".\NovoDiretorio\arquivo.txt"
Remove-Item -Path ".\NovoDiretorio" -Recurse

Leitura de Conteúdo

Exiba o conteúdo de um arquivo com Get-Content.

Get-Content -Path ".\NovoDiretorio\arquivo.txt"

Manipulação de Dados com Pipelines

Filtragem e Ordenação

Use o operador de pipeline | para passar objetos entre comandos. Por exemplo, para listar arquivos por tamanho:

Get-ChildItem | Sort-Object -Property Length

Filtre itens com Where-Object usando operadores de comparação como -eq, -gt, -like.

Get-ChildItem | Where-Object -Property Extension -eq ".txt"
Get-ChildItem | Where-Object -Property Length -gt 1024
Get-ChildItem | Where-Object -Property Name -like "relat*"

Seleção de Propriedades

Use Select-Object para escolher propriedades específicas de um objeto.

Get-ChildItem | Select-Object -Property Nome, Tamanho

Busca em Conteúdo

O cmdlet Select-String procura por padrões em arquivos, similar ao grep em sistemas Unix.

Select-String -Path ".\*.log" -Pattern "erro"

Informações do Sistema e Rede

Dados do Sistema

Obtenha informações detalhadas do sistema com Get-ComputerInfo.

Get-ComputerInfo | Select-Object -Property OsName, WindowsVersion, TotalPhysicalMemory

Liste os usuários locais com Get-LocalUser.

Get-LocalUser | Select-Object -Property Nome, Habilitado, Descrição

Configurações de Rede

Visualize a configuração IP com Get-NetIPConfiguration.

Get-NetIPConfiguration

Liste todos os endereços IP atribuídos com Get-NetIPAddress.

Get-NetIPAddress | Select-Object -Property IPAddress, InterfaceAlias, AddressFamily

Análise de Sistema em Tempo Real

Processos e Serviços

Monitore processos em execução com Get-Process.

Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5

Verifique o status dos serviços com Get-Service.

Get-Service | Where-Object -Property Status -eq "Running"

Conexões de Rede

Inspecione conexões TCP ativas com Get-NetTCPConnection.

Get-NetTCPConnection | Where-Object -Property State -eq "Established"

Integridade de Arquivos

Calcule o hash de um arquivo para verificação de integridade com Get-FileHash.

Get-FileHash -Path ".\importante.doc" -Algorithm SHA256

Scripting no PowerShell

O scriptign permite automatizar tarefas complexas. No contexto de segurança, scripts são essenciais para:

  • Defesa (Blue Team): Análise de logs, detecção de anomalias e resposta a incidentes.
  • Ataque (Red Team): Enumeração de sistemas, execução remota de comandos e evasão de defesas.

O cmdlet Invoke-Command é crucial para execução remota de comandos.

Invoke-Command -ComputerName "Servidor01" -ScriptBlock { Get-Process }

Para executar um script em um computador remoto:

Invoke-Command -FilePath "C:\Scripts\analise.ps1" -ComputerName "Servidor01"

Tags: PowerShell Windows Automação Cmdlets scripting

Publicado em 6-18 17:41