dabumana/ransomware-live-go

GitHub: dabumana/ransomware-live-go

Ransomware.live 威胁情报 API 的 Go 客户端,封装了勒索软件组织追踪、受害者查询、IoC 获取、谈判记录检索等全套接口,便于开发者将威胁情报集成到 Go 应用中。

Stars: 0 | Forks: 0

# Ransomware.live - Go Client Ransomware.live API 的 Go 客户端。Ransomware.live 是一个全面的威胁情报源,用于追踪勒索软件组织、受害者、入侵指标(IoCs)、谈判聊天记录、勒索信等。 ## 安装 ``` go get github.com/dabumana/ransomware ``` 如果发布,请替换为您实际的 module 路径。 ### 快速开始 ``` package main import ( "fmt" "log" "github.com/dabumana/ransomware" ) func main() { client := ransomware.NewClient("YOUR_API_KEY") // Get recent victims victims, err := client.GetRecentVictims() if err != nil { log.Fatal(err) } for _, v := range victims { fmt.Printf("%s - %s (%s)\n", v.Victim, v.Group, v.Country) } } ``` ## 认证 所有 endpoint 都需要 X-API-KEY header。您必须从 ransomware.live/my 获取免费的 API key。 将其传递给 NewClient: ``` client := ransomware.NewClient("your-api-key") ``` 速率限制:每个 key 每月 500,000 次请求。超出此配额的请求将返回 HTTP 429。 ### 客户端配置 您可以使用可选的 Option 函数自定义客户端: ### Option 描述 * **WithHTTPClient(http.Client)** 使用自定义的 HTTP 客户端(例如,使用代理)。 * **WithBaseURL(string)** 覆盖 base URL(对测试很有用)。 示例: ``` customClient := &http.Client{Timeout: 30 * time.Second} client := ransomware.NewClient( "api-key", ransomware.WithHTTPClient(customClient), ransomware.WithBaseURL("https://custom-api.example.com"), ) ``` ## API 方法 ### 组织 |方法 | Endpoint |描述| |-------|----------|-----------| |ListGroups() ([]GroupSummary, error) | GET /groups | 返回所有受追踪的勒索软件组织及其受害者数量。| |GetGroup(name string) (*GroupDetail, error) | GET /groups/{groupname} | 返回特定勒索软件组织的综合情报,包括描述、受害者、首次/最后发现时间、位置(Tor/明网 URL)、TTPs(MITRE ATT&CK)、漏洞(附带 CVSS 评分的 CVE)、工具、谈判/勒索信可用性。| ### 受害者 |方法 | Endpoint | 描述| |-------|----------|------------| |GetRecentVictims(order string) ([]Victim, error) | GET /victims/recent | 返回 100 个最近的活跃受害者,包含截图、infostealer 数据、新闻报道和 permalink。| |ListVictims(filter VictimFilter) ([]Victim, error) | GET /victims/ | 返回符合所提供过滤器的受害者(至少需要一个过滤器)。| |SearchVictims(q string, filter VictimFilter) ([]Victim, error) | GET /victims/search | 对受害者名称和网站域名进行全文搜索,支持可选的辅助过滤器。| |GetVictim(victimID string) (*VictimDetail, error) | GET /victim/{victim_id} | 返回单个受害者的详细信息。victim_id 是 post_title@group_name 的 Base64 编码字符串(可从任何受害者列表中的 id 字段获取)。| ### 入侵指标 |方法 | Endpoint | 描述| |-------|----------|------------| |ListIOCGroups(iocType string) ([]IOCGroup, error) GET /iocs 返回所有拥有 IoC 的勒索软件组织,并附带 IoC 类型和数量的明细。使用 ?type= 过滤具有特定 IoC 类型(如 md5、ip、btc)的组织。 |GetGroupIOCs(group string, iocType string) (*GroupIOCs, error) GET /iocs/{group} 返回特定勒索软件组织的所有 IoC,按类型(如 md5、ip、domain)组织。使用 ?type= 仅检索一种 IoC 类型。 ### 谈判聊天 |方法 | Endpoint | 描述| |-------|----------|------------| |ListNegotiationGroups() ([]NegotiationGroup, error) | GET /negotiations | 列出所有泄露了可用谈判聊天记录的勒索软件组织,并附带每个组织的聊天数量。| |ListNegotiationChats(group string) ([]NegotiationChat, error) | GET /negotiations/{group} | 返回给定组织所有可用谈判聊天的元数据(聊天 ID、消息计数、初始勒索金额、协商金额、支付状态)。| |GetNegotiationChat(group, chatID string) (*NegotiationChatDetail, error) | GET /negotiations/{group}/{chat_id} | 返回特定谈判聊天的完整消息线程和勒索元数据。| ### 勒索信 |方法 | Endpoint | 描述| |-------|----------|------------| |ListRansomNoteGroups() ([]RansomNoteGroup, error) | GET /ransomnotes | 列出所有至少存有一份勒索信的勒索软件组织,并附带每个组织的勒索信数量。| |ListRansomNotes(group string) ([]string, error) | GET /ransomnotes/{group} | 返回某个组织的勒索信标识符列表(不带扩展名的文件名)。| |GetRansomNote(group, noteName string) (*RansomNote, error) | GET /ransomnotes/{group}/{note_name} | 返回特定勒索信的完整文本内容(支持的格式:.txt、.html、.md)。| ### YARA 规则 |方法 | Endpoint | 描述| |-------|----------|------------| |ListYARAGroups() ([]YARAGroup, error) | GET /yara | 列出所有具有关联 YARA 检测规则的勒索软件组织,并附带每个组织的规则文件数量。| |GetYARARules(group string) ([]YARARule, error) | GET /yara/{group} | 返回特定勒索软件组织的所有 YARA 规则(文件名 + 完整规则内容)。| ### 新闻 / 网络攻击记录 |方法 | Endpoint | 描述| |-------|----------|------------| |ListPressEntries(year, month, country string) ([]PressEntry, error) | GET /press/all | 返回所有受追踪的网络攻击新闻记录,如果受害者域名与已知受害者匹配,则会附带 HudsonRock infostealer 数据和勒索软件链接。结果按日期降序排列。| |GetRecentPressEntries(country string) ([]PressEntry, error) | GET /press/recent | 返回 100 条最新的网络攻击新闻记录,包含 infostealer 数据和勒索软件链接。可选的国家/地区过滤器。| ### CSIRT 联系方式 |方法 | Endpoint | 描述| |-------|----------|------------| |GetCSIRTContacts(country string) ([]CSIRTContact, error) | GET /csirt/{country} | 返回指定国家/地区的所有 CSIRT/CERT 联系方式。接受 ISO 3166-1 alpha-2(如 FR)和 alpha-3(如 FRA)代码。| ### SEC 8-K 表格文件 |方法 | Endpoint | 描述| |-------|----------|------------| |GetSECFilings(ticker, cik, year, month string, item105, item801 bool) ([]SECFiling, error) | GET /8k | 返回与网络安全事件相关的 SEC 8-K 表格文件(Item 1.05 - 重大网络安全事件,自 2023 年 12 月起强制要求;Item 8.01 – 其他事件)。| ### 行业 |方法 | Endpoint | 描述| |-------|----------|------------| |ListSectors() ([]Sector, error) | GET /listsectors | 返回受害者数据库中所有唯一的行业/部门值,按字母顺序排序,并附带每个行业的受害者数量。| ### 统计数据 |方法 | Endpoint | 描述| |-------|----------|------------| |GetStats() (*Stats, error) | GET /stats | 返回高级统计数据:受害者总数、受追踪的勒索软件组织数量、新闻/网络攻击记录数量,以及最近发现的受害者时间戳。| ### 验证 |方法 | Endpoint | 描述| |-------|----------|------------| |ValidateKey() (*ValidationResponse, error) | GET /validate | 检查提供的 X-API-KEY header 是否有效,并返回关联的客户端标识符。| ### 数据类型 常见的日期和国家/地区字段 * 日期字段 – attackdate 是估计的攻击/发布日期;discovered 是 ransomware.live 首次观察到该列表的时间。 * 国家/地区代码 – 除非另有说明,否则使用 ISO 3166-1 alpha-2(两位字母,如 US、FR)。 ### 过滤 #### VictimFilter 与 ListVictims 和 SearchVictims 一起使用: |字段 | 类型 | 描述| |------|------|------------| |Group | string | 勒索软件组织名称,不区分大小写的精确匹配。 |Sector | string | 受害者行业/部门,不区分大小写的精确匹配(使用 ListSectors 获取有效值)。 |Country | string | ISO 3166-1 alpha-2 国家/地区代码,大写(如 US、FR)。 |Year | string | 4 位数字的年份(如 2024)。 |Month | string | 2 位数字的月份,需要同时指定 Year(如 03)。 |Date | string | 要过滤的日期字段:"discovered"(默认)或 "attacked"。 |Order | string | 最近受害者的排序方式:"discovered"(默认)或 "attacked"。 **注意**:ListVictims 至少需要设置一个过滤器。 ### 错误处理 客户端返回标准的 Go errors。常见错误: * HTTP 429 – 超出速率限制(500,000 次请求/月)。 * HTTP 401/403 – API key 无效或缺失。 * HTTP 404 – 找不到资源(例如,无效的组织名称、受害者 ID 或聊天 ID)。 * HTTP 400 – 参数无效(例如,缺少必填字段)。 ### 示例 1. 列出所有组织 ``` groups, err := client.ListGroups() if err != nil { log.Fatal(err) } for _, g := range groups { fmt.Printf("%s: %d victims\n", g.Group, g.Victims) } ``` 2. 获取详细的组织情报 ``` group, err := client.GetGroup("lockbit3") if err != nil { log.Fatal(err) } fmt.Printf("Description: %s\n", group.Description) for _, ttp := range group.TTPs { fmt.Printf("TTP: %s\n", ttp) } for _, vuln := range group.Vulnerabilities { fmt.Printf("CVE: %s (CVSS: %.1f)\n", vuln.ID, vuln.CVSS) } ``` 3. 获取最近的受害者 ``` victims, err := client.GetRecentVictims("discovered") if err != nil { log.Fatal(err) } for _, v := range victims { fmt.Printf("%s (%s) - %s\n", v.Victim, v.Group, v.Country) } ``` 4. 按组织和国家/地区过滤受害者 ``` filter := ransomware.VictimFilter{ Group: "lockbit", Country: "US", } victims, err := client.ListVictims(filter) if err != nil { log.Fatal(err) } ``` 5. 按关键字搜索受害者 ``` victims, err := client.SearchVictims("hospital", ransomware.VictimFilter{Country: "FR"}) if err != nil { log.Fatal(err) } ``` 6. 获取组织的 IoC ``` iocs, err := client.GetGroupIOCs("lockbit3", "ip") if err != nil { log.Fatal(err) } for _, ip := range iocs.IPs { fmt.Println(ip) } ``` 7. 获取谈判聊天 ``` chats, err := client.ListNegotiationChats("lockbit3") if err != nil { log.Fatal(err) } if len(chats) > 0 { chat, err := client.GetNegotiationChat("lockbit3", chats[0].ID) if err != nil { log.Fatal(err) } fmt.Printf("Initial ransom: %s, Paid: %t\n", chat.InitialRansom, chat.Paid) } ``` 8. 获取勒索信内容 ``` notes, err := client.ListRansomNotes("lockbit3") if err != nil { log.Fatal(err) } if len(notes) > 0 { note, err := client.GetRansomNote("lockbit3", notes[0]) if err != nil { log.Fatal(err) } fmt.Printf("Format: %s\nContent: %s\n", note.Extension, note.Content) } ``` 9. 获取 YARA 规则 ``` rules, err := client.GetYARARules("lockbit3") if err != nil { log.Fatal(err) } for _, rule := range rules { fmt.Printf("Rule: %s\n%s\n", rule.Filename, rule.Content) } ``` 10. 获取 SEC 8-K 文件 ``` filings, err := client.GetSECFilings("MSFT", "", "2025", "", true, true) if err != nil { log.Fatal(err) } for _, f := range filings { fmt.Printf("Filing: %s\n", f.Title) } ``` 11. 验证 API Key ``` resp, err := client.ValidateKey() if err != nil { log.Fatal(err) } fmt.Printf("Valid key for client: %s\n", resp.ClientID) ``` ## 重要说明 * 认证 – 所有 endpoint 都需要 X-API-KEY header。从 ransomware.live/my 获取免费 key。 * 速率限制 – 每个 key 每月 500,000 次请求。 * 日期字段 – attackdate 是估计的攻击/发布日期;discovered 是 ransomware.live 首次观察到该列表的时间。 * 国家/地区代码 – 除非另有说明,否则使用 ISO 3166-1 alpha-2(两位字母,如 US、FR)。 * 分页 – API 不会为所有 endpoint 暴露显式的分页。/victims/recent endpoint 始终返回 100 条最新记录。对于历史数据,请使用带有日期过滤器的 /victims/ endpoint。 * IoC Endpoints – IoC endpoint 不受速率限制,但需遵循合理使用原则。
标签:API客户端, EVTX分析, Go, Ruby工具, 勒索软件, 威胁情报, 开发者工具, 日志审计