Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
fickling — Un decompilador de pickling de Python y analizador estático | Kitploit
Herramientas/GitHubGitHub/trailofbits/fickling
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoAnálisis de MalwareAnálisis de BinariosSeguridad de Cadena de SuministroAprendizaje AutomáticoSeguridad de IA
GitHubtrailofbits/fickling

fickling

Un decompilador de pickling de Python y analizador estático

Ver Repositorio
66375hace 4 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Fickling

Fickling image

Fickling es un descompilador, analizador estático y reescritor de bytecode para serializaciones de objetos pickle de Python. Puedes usar Fickling para detectar, analizar, aplicar ingeniería inversa o incluso crear archivos pickle o basados en pickle maliciosos, incluidos archivos PyTorch.

Fickling se puede usar tanto como biblioteca de Python como CLI.

  • Instalación
  • Asegurar entornos de IA/ML
  • Detección genérica de archivos maliciosos
  • Uso avanzado
    • Trazar la ejecución de pickle
    • Inyección de código pickle
    • Descompilación de pickle
    • Políglotas de PyTorch
  • Más información
  • Contacto

Instalación

Fickling se ha probado en Python 3.9 hasta Python 3.13 y tiene muy pocas dependencias. Tanto la biblioteca como la utilidad de línea de comandos se pueden instalar con pip o uv:

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

# Using uv
uv pip install fickling

PyTorch es una dependencia opcional de Fickling. Por lo tanto, para usar los módulos pytorch y de Fickling, debes ejecutar:

Descargar herramienta
polyglot
root@kitploit:~
# Using pip
python -m pip install fickling[torch]

# Using uv
uv pip install fickling[torch]

Asegurar entornos de IA/ML

Fickling puede ayudar a asegurar bases de código de IA/ML escaneando automáticamente los archivos pickle contenidos en los modelos. Fickling engancha el módulo pickle y verifica las importaciones realizadas al cargar un modelo. Solo comprueba las importaciones contra una lista de permitidos de importaciones de bibliotecas de ML que se consideran seguras, y bloquea los archivos que contienen otras importaciones.

Añade las siguientes líneas lo antes posible, antes de importar torch, numpy o cualquier otra biblioteca que use pickle:

root@kitploit:~
import fickling

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

Para eliminar la protección:

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

Es posible que los modelos que estés utilizando contengan importaciones que Fickling no permite. Si aun así quieres cargar el modelo, puedes simplemente permitir importaciones adicionales para tu caso de uso específico con el argumento also_allow:

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

Importante: Siempre debes asegurarte de que las importaciones añadidas manualmente sean realmente seguras y no puedan permitir que atacantes ejecuten código arbitrario. Si no estás seguro de cómo hacerlo, puedes abrir un issue en el repositorio de Github de Fickling que indique las importaciones/modelos en cuestión, y nuestro equipo puede revisarlos e incluirlos en la lista de permitidos si es posible.

Detección genérica de archivos maliciosos

Fickling puede integrarse perfectamente en tu base de código para detectar y detener la carga de archivos maliciosos en tiempo de ejecución.

A continuación mostramos las diferentes formas en las que puedes usar fickling para aplicar comprobaciones de seguridad en archivos pickle. Internamente, engancha la biblioteca pickle para añadir comprobaciones de seguridad de modo que cargar un archivo pickle lance una excepción UnsafeFileError si se detecta contenido malicioso en el archivo.

Opción 1 (recomendada): comprobar la seguridad de todos los archivos pickle cargados

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!")

Opción 2: usar un administrador 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")

Al salir, el administrador de contexto restaura lo que estuviera instalado cuando se entró, por lo que un hook ya existente permanece en efecto en lugar de dejar pickle sin enganchar.

Opción 3: comprobar y cargar un solo archivo

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!")

Opción 4: solo comprobar la seguridad del archivo pickle sin cargarlo

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

Acceso a los resultados del análisis de seguridad

Puedes acceder a los detalles del análisis de seguridad de fickling desde la excepción lanzada:

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]')"
            ]
        }
    }
}

Si estás usando otro lenguaje distinto de Python, aun puedes usar la CLI de fickling para comprobar la seguridad de archivos pickle:

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

Uso avanzado

Trazar la ejecución de pickle

La CLI de Fickling permite trazar de forma segura la ejecución de la máquina virtual Pickle sin ejecutar ningún código malicioso:

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

Inyección de código pickle

Fickling permite inyectar código arbitrario en un archivo pickle que se ejecutará cada vez que se cargue el archivo:

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

Descompilación de pickle

Fickling puede usarse para descompilar un archivo pickle para su posterior análisis:

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=[])

Políglotas de PyTorch

PyTorch contiene múltiples formatos de archivo con los que se pueden crear archivos políglota, es decir, archivos que pueden interpretarse válidamente como más de un formato de archivo. Fickling permite identificar, inspeccionar y crear políglotas con los siguientes formatos de archivo de PyTorch:

  • PyTorch v0.1.1: Archivo Tar con sys_info, pickle, storages y tensors
  • PyTorch v0.1.10: Archivos pickle apilados
  • TorchScript v1.0: Archivo ZIP con model.json
  • TorchScript v1.1: Archivo ZIP con model.json y attributes.pkl
  • TorchScript v1.3: Archivo ZIP con data.pkl y constants.pkl
  • TorchScript v1.4: Archivo ZIP con data.pkl, constants.pkl y versión establecida en 2 o superior (2 archivos pickle y una carpeta)
  • PyTorch v1.3: Archivo ZIP que contiene data.pkl (1 archivo pickle)
  • Formato de archivo de modelo de PyTorch [ZIP]: Archivo ZIP que incluye archivos de código Python y archivos 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']

¡Echa un vistazo a nuestros ejemplos para aprender más sobre el uso de fickling!

Más información

Los objetos Python serializados con pickle son, de hecho, bytecode interpretado por una máquina virtual basada en pila integrada en Python llamada "Pickle Machine". Fickling puede tomar flujos de datos serializados con pickle y descompilarlos en código Python legible por humanos que, al ejecutarse, deserializará el objeto original serializado. Esto es posible gracias a la implementación personalizada de la PM por parte de Fickling. Fickling es seguro de ejecutar en archivos potencialmente maliciosos porque su PM ejecuta código simbólicamente en lugar de ejecutarlo abiertamente.

Los autores no prescriben ningún significado para la “F” de Fickling; podría ser “fickle,” … o algo más. Descifrar su significado es un viaje personal de discreción y se deja como ejercicio para el lector.

Aprende más sobre fickling en nuestro artículo de blog y charla de DEF CON AI Village 2021.

Contacto

Si deseas reportar un error o solicitar una función, usa nuestra página de issues. No dudes en contactarnos o escribir en Empire Hacking para obtener ayuda sobre el uso o la extensión de fickling.

Licencia

Esta utilidad fue desarrollada por Trail of Bits. Está licenciada bajo la GNU Lesser General Public License v3.0. Contáctanos si buscas una excepción a los términos.

© 2021, Trail of Bits.