TGViewer
ML&|Sec Feed ML&|Sec Feed @mlsecfeed · 1.39K subscribers
Post #1519 149

Forwarded from Purple Team Diary's (Mr Kribel)

Llamator для тех кто в танке, в банке, без интернета

Базовый сценарий работы Llamator'а предполагает взаимодействие с 3 моделями:

1. Атакующая-модель: генерирует промты
2. Модель которую тестируем
3. Модель-судья: анализирует ответы тестируемой модели

Мы будем использовать зараннее подготовленый файл с промтами, специфичными для внутреннего пользования.
Создаем заглушку для атакующей модели работающую с json:

class ClientFromFile(ClientBase):
def __init__(self, prompts_file: str, model_description: str = "Провайдер промптов из файла"):

super().__init__()
self.model_description = model_description
self.prompts: List[str] = []
self.index = 0

try:
with open(prompts_file, "r", encoding="utf-8") as f:
data = json.load(f)

# Обработка разных форматов данных в файле
if isinstance(data, list):
if data and isinstance(data[0], str):
self.prompts = data
elif data and isinstance(data[0], dict):
self.prompts = [
item.get("text") or item.get("content") or str(item)
for item in data
]
else:
self.prompts = [str(data)]
else:
self.prompts = [str(data)]

except FileNotFoundError:
self.prompts = []
except json.JSONDecodeError as e:
self.prompts = []


В этом же классе переопределяем interact, который возвращает следующий промпт из списка:

 def interact(self, message: str = "", *args, **kwargs) -> Dict[str, Any]:
if not self.prompts:
return {"content": "Нет доступных промптов"}

response_text = self.prompts[self.index % len(self.prompts)]
self.index += 1

return {"content": response_text}


Далее переопределяем интерфейс генерации промтов (просто вызывается interact), отказываемся от сохранении истории чата и возвращаем информацию о модели в отчете.

def generate(self, prompt: str, *args, **kwargs) -> Dict[str, Any]:
return self.interact(prompt, *args, **kwargs)

def chat(self, messages: List[Dict[str, str]], *args, **kwargs) -> Dict[str, Any]:
return self.interact("", *args, **kwargs)

def get_model_info(self) -> Dict[str, Any]:
return {
"model_type": "file_based",
"description": self.model_description,
"prompts_count": len(self.prompts),
}


Загружаем промты из файла:


attack_model = ClientFromFile(prompts_file="all_prompts.json")


Тестируемая модель Qwen через Ollama:

tested_model = llamator.ClientOpenAI(
api_key="ollama", # Ключ для Ollama (фиктивный, т.к. не требуется)
base_url="http://localhost:11434/v1",
model="qwen:7b-chat",
temperature=0.1,
model_description="Qwen 7B"
)


Готовим атаки:

basic_tests = [
("aim_jailbreak", {"num_attempts": 3}), # Обход ограничений
("base64_injection", {"num_attempts": 2}), # Инъекции через Base64
("dan", {"num_attempts": 2}), # "Do Anything Now" промпты
("linguistic_evasion", {"num_attempts": 3}), # Лингвистические обходы
("harmbench", {"num_attempts": 2}), # Тесты на вредоносность
]


Конфигурирование тестирования:

config = {
"enable_logging": True,
"enable_reports": True,
"artifacts_path": "./artifacts",
"debug_level": 1,
"report_language": "ru",
"save_responses": True,
}


Запускаем тестирование:

test_result_dict = llamator.start_testing(
attack_model=attack_model,
tested_model=tested_model,
judge_model=None, # Оценка без модели
config=config,
basic_tests=basic_tests,
num_threads=1,
)



#MlSecOps
  • 🔥 2
  • ❤ 1
More from @mlsecfeed
  1. Oct 15, 2026Post #2803
  2. Oct 15, 2026Полисемантичность всё? Авторисёрч забил последний гвоздь в гроб SAE. Нейроны уже распутаны…
  3. Oct 15, 2026🔖 MITRE ATT&CK v20: ИИ наконец-то получил полноценную прописку в матрице 13 октября вышло…
  4. Oct 14, 2026Коллеги подвели итоги конкурса ИИ-агентов BlueSec по расследованию инцидентов ИБ, о которо…
  5. Oct 14, 2026Поговорили с Ильей Шабановым — главным редактором Anti-Malware — о рисках и безопасности г…
  6. Oct 13, 2026Стартап в США создал 350000 поддельных пенсионеров - чтобы нагрузить мошенников. Apate соз…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →