Spaces:
Sleeping
Sleeping
File size: 3,979 Bytes
b4b4a13 95319f8 bc1ff3b 95319f8 b4b4a13 bc1ff3b 95319f8 bc1ff3b 88598e9 bc1ff3b b4b4a13 95319f8 b4b4a13 95319f8 b4b4a13 95319f8 b4b4a13 a03397e b4b4a13 2ddb527 88598e9 ce512f2 88598e9 f4c58dc bc1ff3b b4b4a13 a03397e 8105b4c b4b4a13 37b0960 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import gradio as gr
from huggingface_hub import InferenceClient
import os
from mitreattack.stix20 import MitreAttackData
from descriptions import descriptions
# Chemins des fichiers JSON
ics_attack_path = 'ics-attack.json'
enterprise_attack_path = 'enterprise-attack.json'
# Charger les données ATT&CK
mitre_attack_data = MitreAttackData(enterprise_attack_path)
# Charger les techniques ATT&CK
techniques = mitre_attack_data.get_techniques(remove_revoked_deprecated=True)
# Convert techniques to a readable string format
techniques_str = "\n".join([f"{technique['name']} ({mitre_attack_data.get_attack_id(technique['id'])})" for technique in techniques])
def clean_string(input_string):
characters_to_remove = [',', '/', ':', '"',';','|','-','_']
cleaned_string = ''.join(char for char in input_string if char not in characters_to_remove)
return cleaned_string
client = InferenceClient(model='mistralai/Mixtral-8x7B-Instruct-v0.1')
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
messages = [{"role": "system", "content": system_message}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
message_content = message
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
demo = gr.ChatInterface(
respond,
additional_inputs=[
# gr.Textbox(value=f"""<s>[INST] Given these TTPs: {techniques_str}\n\n and here are {descriptions}\n\nfigure out which major techniques are used in these logs and respond in bullets points and nothing else[/INST]""", label="System message"),
# gr.Textbox(value=f"""<s>[INST] Given these TTPs: {techniques_str}\n\nfigure out which major techniques are used in these logs and respond in bullets points and nothing else[/INST]""", label="System message"),
gr.Textbox(
value=f"""<s>[INST]
Step 1: Given these TTPs: {techniques_str}, identify the major techniques present in these logs and list them in bullet points only.\n\n
Step 2: As a cybersecurity analyst, interpret the logs provided, which include login failures, event logs, firewall logs, and brute force logs. Analyze the data and provide an interpretation based on the following indicators:
- Multiple IP addresses signing in to the same account within a short period
- Excessive login failures (failed MFA requests, failed username/password attempts, failures due to geo-blocking)
- Multiple sign-in attempts from different countries within a short period
- Detection of malware on the device
- Unusual activity by admin accounts (excessive actions, resetting passwords, changing MFA methods)
- Sharing emails with attachments to personal accounts
- Logins occurring after working hours
- General unusual user account activity
Important: Do not use any information outside of the input provided. Focus solely on the data and indicators given in this prompt.
Response: Provide a detailed analysis and interpretation of the observed logs, focusing on identifying and explaining potential security threats or breaches based solely on the information and indicators provided.
[/INST]""",
label="System message"
),
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.1, step=0.1, label="Temperature"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
],
)
if __name__ == "__main__":
demo.launch()
|