
TL; DR: Galah (/ ɡəˈlː/-ออกเสียงว่า 'Guh-laa') เป็นเว็บฮันนีพ็อตที่ขับเคลื่อนด้วย LLM ที่ออกแบบมาเพื่อเลียนแบบแอปพลิเคชันต่าง ๆ และตอบสนองต่อคำขอ HTTP โดยพลการ Galah สนับสนุนผู้ให้บริการ LLM รายใหญ่รวมถึง Openai, Googleai, Vertex AI ของ GCP, มานุษยวิทยา, Cohere และ Ollama
ซึ่งแตกต่างจาก honeypots เว็บแบบดั้งเดิมที่เลียนแบบเว็บแอปพลิเคชันหรือช่องโหว่ที่เฉพาะเจาะจงด้วยตนเอง Galah งานฝีมือการตอบสนองที่เกี่ยวข้องแบบไดนามิก - รวมถึงส่วนหัว HTTP และเนื้อหาของร่างกาย - สำหรับคำขอ HTTP ใด ๆ การตอบสนองที่สร้างขึ้นโดย LLM จะถูกแคชเป็นระยะเวลาที่กำหนดได้เพื่อป้องกันการสร้างซ้ำสำหรับคำขอที่เหมือนกันลดต้นทุน API การแคชเป็นเฉพาะพอร์ตเพื่อให้มั่นใจว่าการตอบสนองที่สร้างขึ้นสำหรับพอร์ตใดพอร์ตนั้นจะไม่ถูกนำกลับมาใช้ใหม่สำหรับคำขอเดียวกันในพอร์ตอื่น
การกำหนดค่าพรอมต์เป็นกุญแจสำคัญในฮันนีพ็อตนี้ ในขณะที่คุณสามารถอัปเดตพรอมต์ในไฟล์การกำหนดค่าเป็นสิ่งสำคัญในการรักษาเซ็กเมนต์ที่กำกับ LLM เพื่อสร้างคำตอบในรูปแบบ JSON ที่ระบุ
หมายเหตุ: Galah ได้รับการพัฒนาเป็นโครงการสุดสัปดาห์ที่สนุกสนานในการสำรวจความสามารถของ LLMS ในการสร้างข้อความ HTTP และไม่ได้มีไว้สำหรับการใช้งานการผลิต Honeypot อาจระบุได้ด้วยวิธีการต่าง ๆ เช่นเทคนิคการพิมพ์ลายนิ้วมือเครือข่ายเวลาตอบสนองที่ยืดเยื้อขึ้นอยู่กับผู้ให้บริการและแบบจำลอง LLM และการตอบสนองที่ไม่ได้มาตรฐาน เพื่อป้องกันการปฏิเสธการโจมตีของกระเป๋าเงินให้แน่ใจว่าได้ กำหนดขีด จำกัด การใช้งานใน LLM API ของคุณ
config.yaml หากจำเป็น% 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
บันทึกเหตุการณ์ 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"
}
ดูตัวอย่างเพิ่มเติมที่นี่