
TL; DR: Galah (/ ɡəˈlːː / - prononcé «guh-laa») est un pot de miel Web alimenté par LLM conçu pour imiter diverses applications et répond dynamiquement aux demandes HTTP arbitraires. Galah soutient les principaux fournisseurs de LLM, notamment Openai, Googleai, GCP Vertex AI, Anthropic, Cohere et Olllama.
Contrairement aux pots de miel traditionnels qui imitent manuellement des applications ou des vulnérabilités Web spécifiques, Galah élabore dynamiquement les réponses pertinentes, y compris les en-têtes HTTP et le contenu corporel - à toute demande HTTP. Les réponses générées par le LLM sont mises en cache pendant une période configurable pour empêcher la production répétitive pour des demandes identiques, en réduisant les coûts d'API. La mise en cache est spécifique au port, garantissant que les réponses générées pour un port particulier ne seront pas réutilisées pour la même demande sur un port différent.
La configuration de l'invite est la clé de ce pot de miel. Bien que vous puissiez mettre à jour l'invite dans le fichier de configuration, il est crucial de maintenir le segment en direction du LLM pour produire des réponses au format JSON spécifié.
Remarque: Galah a été développé comme un projet de week-end amusant pour explorer les capacités des LLM dans la création de messages HTTP et n'est pas destiné à une utilisation en production. Le pot de miel peut être identifiable à travers diverses méthodes telles que les techniques d'empreintes digitales du réseau, les temps de réponse prolongés en fonction du fournisseur et du modèle LLM, et des réponses non standard. Pour protéger contre le déni des attaques de portefeuille, assurez-vous de fixer des limites d'utilisation sur votre API LLM .
config.yaml si nécessaire.% git clone [email protected]:0x4D31/galah.git
% cd galah
% go mod download
% go build -o galah ./cmd/galah
% export LLM_API_KEY=your-api-key
% ./galah --help
██████ █████ ██ █████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██
██ ███ ███████ ██ ███████ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ██ ███████ ██ ██ ██ ██
llm-based web honeypot // version 1.0
author: Adel " 0x4D31 " Karimi
Usage: galah --provider PROVIDER --model MODEL [--server-url SERVER-URL] [--temperature TEMPERATURE] [--api-key API-KEY] [--cloud-location CLOUD-LOCATION] [--cloud-project CLOUD-PROJECT] [--interface INTERFACE] [--config-file CONFIG-FILE] [--event-log-file EVENT-LOG-FILE] [--cache-db-file CACHE-DB-FILE] [--cache-duration CACHE-DURATION] [--log-level LOG-LEVEL]
Options:
--provider PROVIDER, -p PROVIDER
LLM provider (openai, googleai, gcp-vertex, anthropic, cohere, ollama) [env: LLM_PROVIDER]
--model MODEL, -m MODEL
LLM model (e.g. gpt-3.5-turbo-1106, gemini-1.5-pro-preview-0409) [env: LLM_MODEL]
--server-url SERVER-URL, -u SERVER-URL
LLM Server URL (required for Ollama) [env: LLM_SERVER_URL]
--temperature TEMPERATURE, -t TEMPERATURE
LLM sampling temperature (0-2). Higher values make the output more random [default: 1, env: LLM_TEMPERATURE]
--api-key API-KEY, -k API-KEY
LLM API Key [env: LLM_API_KEY]
--cloud-location CLOUD-LOCATION
LLM cloud location region (required for GCP ' s Vertex AI) [env: LLM_CLOUD_LOCATION]
--cloud-project CLOUD-PROJECT
LLM cloud project ID (required for GCP ' s Vertex AI) [env: LLM_CLOUD_PROJECT]
--interface INTERFACE, -i INTERFACE
interface to serve on
--config-file CONFIG-FILE, -c CONFIG-FILE
Path to config file [default: config/config.yaml]
--event-log-file EVENT-LOG-FILE, -o EVENT-LOG-FILE
Path to event log file [default: event_log.json]
--cache-db-file CACHE-DB-FILE, -f CACHE-DB-FILE
Path to database file for response caching [default: cache.db]
--cache-duration CACHE-DURATION, -d CACHE-DURATION
Cache duration for generated responses (in hours). Use 0 to disable caching, and -1 for unlimited caching (no expiration). [default: 24]
--log-level LOG-LEVEL, -l LOG-LEVEL
Log level (debug, info, error, fatal) [default: info]
--help, -h display this help and exit% git clone [email protected]:0x4D31/galah.git
% cd galah
% mkdir logs
% export LLM_API_KEY=your-api-key
% docker build -t galah-image .
% docker run -d --name galah-container -p 8080:8080 -v $( pwd ) /logs:/galah/logs -e LLM_API_KEY galah-image -o logs/galah.json -p openai -m gpt-3.5-turbo-1106./galah -p gcp-vertex -m gemini-1.0-pro-002 --cloud-project galah-test --cloud-location us-central1 --temperature 0.2 --cache-duration 0 % curl -i http://localhost:8080/.aws/credentials
HTTP/1.1 200 OK
Date: Sun, 26 May 2024 16:37:26 GMT
Content-Length: 116
Content-Type: text/plain; charset=utf-8
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Journal des événements JSON:
{
"eventTime": "2024-05-26T18:37:26.742418+02:00",
"httpRequest": {
"body": "",
"bodySha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"headers": "User-Agent: [curl/7.71.1], Accept: [*/*]",
"headersSorted": "Accept,User-Agent",
"headersSortedSha256": "cf69e186169279bd51769f29d122b07f1f9b7e51bf119c340b66fbd2a1128bc9",
"method": "GET",
"protocolVersion": "HTTP/1.1",
"request": "/.aws/credentials",
"userAgent": "curl/7.71.1"
},
"httpResponse": {
"headers": {
"Content-Length": "127",
"Content-Type": "text/plain"
},
"body": "[default]naws_access_key_id = AKIAIOSFODNN7EXAMPLEnaws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYn"
},
"level": "info",
"llm": {
"model": "gemini-1.0-pro-002",
"provider": "gcp-vertex",
"temperature": 0.2
},
"msg": "successfulResponse",
"port": "8080",
"sensorName": "mbp.local",
"srcHost": "localhost",
"srcIP": "::1",
"srcPort": "51725",
"tags": null,
"time": "2024-05-26T18:37:26.742447+02:00"
}
Voir plus d'exemples ici.