Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
fickling — Um decompilador de pickling Python e analisador estático | Kitploit
Ferramentas/GitHubGitHub/trailofbits/fickling
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoAnálise de MalwareAnálise de BináriosSegurança da Cadeia de SuprimentosAprendizado de MáquinaSegurança de IA
GitHubtrailofbits/fickling

fickling

Um decompilador de pickling Python e analisador estático

Ver Repositório
66375há 4 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Fickling

Fickling image

Fickling é um descompilador, analisador estático e reescritor de bytecode para serializações de objetos pickle do Python. Você pode usar o fickling para detectar, analisar, fazer engenharia reversa ou até mesmo criar arquivos pickle maliciosos ou baseados em pickle, incluindo arquivos PyTorch.

O Fickling pode ser usado tanto como biblioteca python quanto como CLI.

  • Instalação
  • Protegendo ambientes de IA/ML
  • Detecção genérica de arquivos maliciosos
  • Uso avançado
    • Rastrear execução de pickle
    • Injeção de código pickle
    • Descompilação de pickle
    • Poliglotas PyTorch
  • Mais informações
  • Contato

Instalação

Fickling foi testado no Python 3.9 até o Python 3.13 e tem muito poucas dependências. Tanto a biblioteca quanto o utilitário de linha de comando podem ser instalados via pip ou uv:

root@kitploit:~
# Using pip
python -m pip install fickling

# Using uv
uv pip install fickling

PyTorch é uma dependência opcional do Fickling. Portanto, para usar os módulos pytorch e polyglot do Fickling, você deve executar:

Baixar ferramenta
root@kitploit:~
# Using pip
python -m pip install fickling[torch]

# Using uv
uv pip install fickling[torch]

Protegendo ambientes de IA/ML

O Fickling pode ajudar a proteger bases de código de IA/ML ao escanear automaticamente arquivos pickle contidos em modelos. O Fickling intercepta o módulo pickle e verifica as importações feitas ao carregar um modelo. Ele verifica as importações apenas contra uma lista de permissões de importações de bibliotecas de ML consideradas seguras e bloqueia arquivos que contenham outras importações.

Adicione as seguintes linhas o mais cedo possível, antes de importar torch, numpy ou qualquer outra biblioteca que use pickle:

root@kitploit:~
import fickling

# This sets global hooks on pickle
fickling.hook.activate_safe_ml_environment()

Para remover a proteção:

root@kitploit:~
fickling.hook.deactivate_safe_ml_environment()

É possível que os modelos que você está usando contenham importações que não são permitidas pelo Fickling. Se você ainda quiser carregar o modelo, basta permitir importações adicionais para seu caso de uso específico com o argumento also_allow:

root@kitploit:~
fickling.hook.activate_safe_ml_environment(
    also_allow=[
        "some.import",
        "another.allowed.import",
    ]
)

Importante: Você deve sempre garantir que importações adicionadas manualmente sejam realmente seguras e não possam permitir que atacantes executem código arbitrário. Se você não tiver certeza de como fazer isso, abra uma issue no repositório do Fickling no Github indicando as importações/modelos em questão, e nossa equipe poderá revisá-los e incluí-los na lista de permissões, se possível.

Detecção genérica de arquivos maliciosos

O Fickling pode ser integrado perfeitamente à sua base de código para detectar e interromper o carregamento de arquivos maliciosos em tempo de execução.

Abaixo mostramos as diferentes maneiras de usar o fickling para aplicar verificações de segurança em arquivos pickle. Internamente, ele intercepta a biblioteca pickle para adicionar verificações de segurança, de modo que carregar um arquivo pickle levanta uma exceção UnsafeFileError se conteúdo malicioso for detectado no arquivo.

Opção 1 (recomendada): verificar a segurança de todos os arquivos pickle carregados

root@kitploit:~
# This enforces safety checks every time pickle is used to deserialize
fickling.always_check_safety()

# Attempt to load an unsafe file now raises an exception
with open("file.pkl", "rb") as f:
    try:
        pickle.load(f)
    except fickling.UnsafeFileError:
        print("Unsafe file!")

Opção 2: usar um gerenciador de contexto

root@kitploit:~
with fickling.check_safety():
    # All pickle files loaded within the context manager are checked for safety
    try:
        with open("file.pkl", "rb") as f:
            pickle.load("file.pkl")
    except fickling.UnsafeFileError:
        print("Unsafe file!")

# Files loaded outside of context manager are NOT checked
pickle.load("file.pkl")

Ao sair, o gerenciador de contexto restaura o que estava instalado quando foi iniciado, de modo que um hook já existente permanece em vigor em vez de o pickle ficar sem hook.

Opção 3: verificar e carregar um único arquivo

root@kitploit:~
# Use fickling.load() in place of pickle.load() to check safety and load a single pickle file
try:
    fickling.load("file.pkl")
except fickling.UnsafeFileError as e:
    print("Unsafe file!")

Opção 4: verificar apenas a segurança do arquivo pickle sem carregá-lo

root@kitploit:~
# Perform a safety check on a pickle file without loading it
if not fickling.is_likely_safe("file.pkl"):
    print("Unsafe file!")

Acessando os resultados da análise de segurança

Você pode acessar os detalhes da análise de segurança do fickling a partir da exceção levantada:

root@kitploit:~

>>> try:
...     fickling.load("unsafe.pkl")
... except fickling.UnsafeFileError as e:
...     print(e.info)

{
    "severity": "OVERTLY_MALICIOUS",
    "analysis": "Call to `eval(b'[5, 6, 7, 8]')` is almost certainly evidence of a malicious pickle file. Variable `_var0` is assigned value `eval(b'[5, 6, 7, 8]')` but unused afterward; this is suspicious and indicative of a malicious pickle file",
    "detailed_results": {
        "AnalysisResult": {
            "OvertlyBadEval": "eval(b'[5, 6, 7, 8]')",
            "UnusedVariables": [
                "_var0",
                "eval(b'[5, 6, 7, 8]')"
            ]
        }
    }
}

Se você estiver usando outra linguagem além de Python, ainda pode usar o CLI do fickling para verificar a segurança de arquivos pickle:

root@kitploit:~
fickling --check-safety -p pickled.data

Uso avançado

Rastrear execução de pickle

O CLI do Fickling permite rastrear com segurança a execução da máquina virtual Pickle sem executar nenhum código malicioso:

root@kitploit:~
fickling --trace file.pkl

Injeção de código pickle

O Fickling permite injetar código arbitrário em um arquivo pickle que será executado toda vez que o arquivo for carregado

root@kitploit:~
fickling --inject "print('Malicious')" file.pkl > malicious.pkl

Descompilação de pickle

O Fickling pode ser usado para descompilar um arquivo pickle para análises adicionais

root@kitploit:~
>>> import ast, pickle
>>> from fickling.fickle import Pickled
>>> fickled_object = Pickled.load(pickle.dumps([1, 2, 3, 4]))
>>> print(ast.dump(fickled_object.ast, indent=4))
Module(
    body=[
        Assign(
            targets=[
                Name(id='result', ctx=Store())],
            value=List(
                elts=[
                    Constant(value=1),
                    Constant(value=2),
                    Constant(value=3),
                    Constant(value=4)],
                ctx=Load()))],
    type_ignores=[])

Poliglotas PyTorch

O PyTorch contém vários formatos de arquivo com os quais é possível criar arquivos poliglotas, que são arquivos que podem ser interpretados validamente como mais de um formato de arquivo. O Fickling suporta identificar, inspecionar e criar poliglotas com os seguintes formatos de arquivo do PyTorch:

  • PyTorch v0.1.1: arquivo Tar com sys_info, pickle, storages e tensors
  • PyTorch v0.1.10: arquivos pickle empilhados
  • TorchScript v1.0: arquivo ZIP com model.json
  • TorchScript v1.1: arquivo ZIP com model.json e attributes.pkl
  • TorchScript v1.3: arquivo ZIP com data.pkl e constants.pkl
  • TorchScript v1.4: arquivo ZIP com data.pkl, constants.pkl e versão definida como 2 ou superior (2 arquivos pickle e uma pasta)
  • PyTorch v1.3: arquivo ZIP contendo data.pkl (1 arquivo pickle)
  • PyTorch model archive format[ZIP]: arquivo ZIP que inclui arquivos de código Python e arquivos pickle
root@kitploit:~
>> import torch
>> import torchvision.models as models
>> from fickling.pytorch import PyTorchModelWrapper
>> model = models.mobilenet_v2()
>> torch.save(model, "mobilenet.pth")
>> fickled_model = PyTorchModelWrapper("mobilenet.pth")
>> print(fickled_model.formats)
Your file is most likely of this format:  PyTorch v1.3
['PyTorch v1.3']

Confira nossos exemplos para saber mais sobre como usar o fickling!

Mais informações

Objetos Python em pickle são, na verdade, bytecode interpretado por uma máquina virtual baseada em pilha embutida no Python chamada "Pickle Machine". O Fickling pode pegar fluxos de dados em pickle e descompilá-los em código Python legível por humanos que, quando executado, desserializará o objeto serializado original. Isso é possível graças à implementação personalizada da PM pelo Fickling. O Fickling é seguro para executar em arquivos potencialmente maliciosos porque sua PM executa código simbolicamente, em vez de executá-lo de forma direta.

Os autores não atribuem nenhum significado ao “F” em Fickling; ele poderia significar “fickle” (volúvel), … ou outra coisa. Decifrar seu significado é uma jornada pessoal de discrição e fica como exercício para o leitor.

Saiba mais sobre o fickling em nosso post no blog e na palestra do DEF CON AI Village 2021.

Contato

Se você quiser reportar um bug ou solicitar um recurso, use nossa página de issues. Sinta-se à vontade para nos contatar ou procurar ajuda no Empire Hacking para usar ou estender o fickling.

Licença

Este utilitário foi desenvolvido pela Trail of Bits. Ele é licenciado sob a GNU Lesser General Public License v3.0. Entre em contato se você estiver procurando uma exceção aos termos.

© 2021, Trail of Bits.