Skip to content

gitstq/ThreatGraph-CLI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Version Python License Zero Dependencies

็ฎ€ไฝ“ไธญๆ–‡ ย |ย  ็น้ซ”ไธญๆ–‡ ย |ย  English

Multilingual


ThreatGraph-CLI

่ฝป้‡็บง็ฝ‘็ปœๅฎ‰ๅ…จๅจ่ƒๅ›พ่ฐฑๅˆ†ๆžๅผ•ๆ“Ž ยท Lightweight Cybersecurity Threat Graph Analysis Engine

ThreatGraph-CLI ๅŠŸ่ƒฝๆผ”็คบๆˆชๅ›พ
ๅ›พ๏ผšThreatGraph-CLI Web ๅฏ่ง†ๅŒ–็•Œ้ข โ€” D3.js ๅŠ›ๅฏผๅ‘ๅ›พ๏ผˆๆš—่‰ฒไธป้ข˜๏ผ‰


็›ฎๅฝ•


็ฎ€ไฝ“ไธญๆ–‡

๐ŸŽ‰ ้กน็›ฎไป‹็ป

ๅฎƒๆ˜ฏไป€ไนˆ๏ผŸ

ThreatGraph-CLI ๆ˜ฏไธ€ๆฌพ้ขๅ‘ๅฎ‰ๅ…จ็ ”็ฉถไบบๅ‘˜ๅ’Œ่“้˜Ÿๅˆ†ๆžๅธˆ็š„่ฝป้‡็บงๅ‘ฝไปค่กŒๅจ่ƒๅ›พ่ฐฑๅˆ†ๆžๅผ•ๆ“Žใ€‚ๅฎƒๅฐ†็ฆปๆ•ฃ็š„ๅฎ‰ๅ…จๆŒ‡ๆ ‡๏ผˆIOC๏ผ‰โ€”โ€”IP ๅœฐๅ€ใ€ๅŸŸๅใ€URLใ€้‚ฎ็ฎฑใ€ๆ–‡ไปถๅ“ˆๅธŒใ€ๆถๆ„่ฝฏไปถๅฎถๆ—ใ€CVE ๆผๆดž็ผ–ๅทโ€”โ€”่ฝฌๅŒ–ไธบไธ€ๅผ ๅฏไบคไบ’ใ€ๅฏๆŸฅ่ฏขใ€ๅฏๅˆ†ๆž็š„ๅ…ณ็ณปๅ›พ่ฐฑ๏ผŒๅธฎๅŠฉไฝ ๅœจ็ปˆ็ซฏไธญๅฟซ้€ŸๅฎŒๆˆๅจ่ƒๅ…ณ่”ใ€ๆ”ปๅ‡ปๆบฏๆบๅ’Œๆ€ๅŠฟๆ„Ÿ็Ÿฅใ€‚

่งฃๅ†ณไป€ไนˆ็—›็‚น๏ผŸ

ๅœจๆ—ฅๅธธๅฎ‰ๅ…จ่ฟ่ฅไธญ๏ผŒๆˆ‘ไปฌ็ปๅธธ้ขไธด่ฟ™ไบ›ๅ›ฐๅขƒ๏ผš

  • ๆ•ฐๆฎๅญคๅฒ›๏ผšๅจ่ƒๆƒ…ๆŠฅๆ•ฃ่ฝๅœจ CSVใ€JSONใ€STIX ็ญ‰ไธๅŒๆ ผๅผ็š„ๆ–‡ไปถไธญ๏ผŒ้šพไปฅ็ปŸไธ€ๅ…ณ่”
  • ๅทฅๅ…ท่‡ƒ่‚ฟ๏ผšไธปๆตๅจ่ƒๆƒ…ๆŠฅๅนณๅฐๅŠจ่พ„้œ€่ฆ้ƒจ็ฝฒ Elastic Stack ๆˆ– Neo4j๏ผŒๅฏน่ฝป้‡็บงๅบ”ๆ€ฅๅ“ๅบ”ๆฅ่ฏดๅคช้‡ไบ†
  • ๅฏ่ง†ๅŒ–้—จๆง›้ซ˜๏ผšๆƒณๅฟซ้€Ÿ็”ปไธ€ๅผ ๆ”ปๅ‡ปๅ…ณ็ณปๅ›พ๏ผŒๅด่ฆๆ‰“ๅผ€ Gephi ๆˆ– Maltego๏ผŒ้…็ฝฎ็น็
  • ๅˆ†ๆžๆต็จ‹ๆ–ญ่ฃ‚๏ผšๅฏผๅ…ฅใ€ๅˆ†ๆžใ€ๅฏ่ง†ๅŒ–ใ€ๅฏผๅ‡บๅพ€ๅพ€้œ€่ฆๅˆ‡ๆขๅคšไธชๅทฅๅ…ท๏ผŒๆ•ˆ็އไฝŽไธ‹

ThreatGraph-CLI ๆญฃๆ˜ฏไธบไบ†่งฃๅ†ณ่ฟ™ไบ›้—ฎ้ข˜่€Œ่ฏž็”Ÿ็š„ใ€‚

ๆ ธๅฟƒไปทๅ€ผ

  • ้›ถไพ่ต–ๆ ธๅฟƒ๏ผš็บฏ Python ๅฎž็Žฐ๏ผŒpip install ๅŽๅณๅฏไฝฟ็”จ๏ผŒๆ— ้œ€ๅฎ‰่ฃ…ๆ•ฐๆฎๅบ“ๆˆ–ๅ›พๅผ•ๆ“Ž
  • ๅคšๆ ผๅผ้€šๅƒ๏ผšCSVใ€JSONใ€YAMLใ€IOC ๆ–‡ๆœฌใ€STIX ไธ€้”ฎๅฏผๅ…ฅ๏ผŒ่‡ชๅŠจ่ฏ†ๅˆซไธŽๆ˜ ๅฐ„
  • ๅ›พ็ฎ—ๆณ•ๅ†…็ฝฎ๏ผšๆœ€็Ÿญ่ทฏๅพ„ใ€ไธญๅฟƒๆ€งๅˆ†ๆžใ€็คพๅŒบๆฃ€ๆต‹็ญ‰็ฎ—ๆณ•ๅผ€็ฎฑๅณ็”จ
  • ไธ€้”ฎๅฏ่ง†ๅŒ–๏ผšๅ†…็ฝฎ D3.js ๅŠ›ๅฏผๅ‘ๅ›พ Web ็•Œ้ข๏ผŒthreatgraph serve ๅณๅฏๅฏๅŠจ
  • ็ตๆดปๅฏผๅ‡บ๏ผšJSONใ€CSVใ€SVGใ€Mermaidใ€HTML ไบคไบ’ๅผๆŠฅๅ‘Š๏ผŒ้€‚้…ๅ„็งๆฑ‡ๆŠฅๅœบๆ™ฏ

ๅทฎๅผ‚ๅŒ–ไบฎ็‚น

็‰นๆ€ง ThreatGraph-CLI Neo4j + Bloom Maltego Gephi
้›ถๅค–้ƒจไพ่ต– โœ… โŒ โŒ โŒ
ๅ‘ฝไปค่กŒๅŽŸ็”Ÿ โœ… โŒ โŒ โŒ
ๅคšๆ ผๅผ่‡ชๅŠจ่งฃๆž โœ… โš ๏ธ โš ๏ธ โŒ
ๅ†…็ฝฎๅ›พ็ฎ—ๆณ• โœ… โœ… โš ๏ธ โœ…
Web ๅฏ่ง†ๅŒ– โœ… โœ… โœ… โŒ
ๅ•ๆ–‡ไปถ้ƒจ็ฝฒ โœ… โŒ โŒ โŒ
ๅผ€ๆบๅ…่ดน โœ… โš ๏ธ โŒ โœ…

็ตๆ„Ÿๆฅๆบ

ThreatGraph-CLI ็š„่ฎพ่ฎก็ตๆ„Ÿๆฅ่‡ช๏ผš

  • MITRE ATT&CK ๆก†ๆžถ็š„ๆ”ปๅ‡ป้“พๅปบๆจกๆ€ๆƒณ
  • Graph Theory ๅœจ็คพไบค็ฝ‘็ปœๅˆ†ๆžไธญ็š„ๆˆ็†Ÿๅบ”็”จ
  • Unix ๅ“ฒๅญฆโ€”โ€”ๅšๅฅฝไธ€ไปถไบ‹๏ผŒ้€š่ฟ‡็ฎก้“็ป„ๅˆๅฎŒๆˆๅคๆ‚ไปปๅŠก
  • ๅฎ‰ๅ…จ็คพๅŒบๅฏน"่ฝป้‡็บงใ€ๅฏ็ฆป็บฟ่ฟ่กŒ"ๅฎ‰ๅ…จๅทฅๅ…ท็š„่ฟซๅˆ‡้œ€ๆฑ‚

โœจ ๆ ธๅฟƒ็‰นๆ€ง

๐Ÿง  ๅ›พๆ•ฐๆฎๅผ•ๆ“Ž

  • ๅคš็ฑปๅž‹่Š‚็‚น๏ผšๆ”ฏๆŒ IPใ€ๅŸŸๅใ€URLใ€้‚ฎ็ฎฑใ€ๆ–‡ไปถ Hash๏ผˆMD5/SHA1/SHA256๏ผ‰ใ€ๆถๆ„่ฝฏไปถๅฎถๆ—ใ€CVE ็ญ‰่Š‚็‚น็ฑปๅž‹
  • ไธฐๅฏŒๅ…ณ็ณป็ฑปๅž‹๏ผšresolves_toใ€communicates_withใ€hosts_malwareใ€exploitsใ€associated_with ็ญ‰ๅคš็งๆœ‰ๅ‘่พน
  • Dijkstra ๆœ€็Ÿญ่ทฏๅพ„๏ผšๅฟซ้€ŸๆŸฅๆ‰พไธคไธช่Š‚็‚น้—ด็š„ๆœ€็Ÿญๆ”ปๅ‡ป่ทฏๅพ„
  • ไธญๅฟƒๆ€งๅˆ†ๆž๏ผšๅบฆไธญๅฟƒๆ€ง๏ผˆDegree Centrality๏ผ‰ๅ’Œไป‹ๆ•ฐไธญๅฟƒๆ€ง๏ผˆBetweenness Centrality๏ผ‰๏ผŒ็ฒพๅ‡†ๅฎšไฝๅ…ณ้”ฎ่Š‚็‚น
  • ็คพๅŒบๆฃ€ๆต‹๏ผšๅŸบไบŽๆ ‡็ญพไผ ๆ’ญ็ฎ—ๆณ•๏ผˆLabel Propagation๏ผ‰่‡ชๅŠจๅ‘็Žฐๅจ่ƒ่š็ฑป

๐Ÿ“ฅ ๅคšๆ ผๅผๆ™บ่ƒฝ่งฃๆž

  • CSV๏ผš่‡ชๅŠจ่ฏ†ๅˆซๅˆ—ๅๅนถๆ˜ ๅฐ„ๅˆฐ่Š‚็‚น/่พน็ฑปๅž‹๏ผŒๆ”ฏๆŒ่‡ชๅฎšไน‰ๅˆ—ๆ˜ ๅฐ„
  • JSON๏ผšๅŽŸ็”Ÿ JSONใ€JSON ๅˆ—่กจใ€ๅตŒๅฅ— JSON ไธ‰็งๆ ผๅผๅ…จๅ…ผๅฎน
  • YAML๏ผš็ป“ๆž„ๅŒ–้…็ฝฎๆ–‡ไปถ็›ดๆŽฅๅฏผๅ…ฅ
  • IOC ๆ–‡ๆœฌๆๅ–๏ผš้€š่ฟ‡ๆญฃๅˆ™่กจ่พพๅผไปŽไปปๆ„ๆ–‡ๆœฌไธญๆๅ– IPใ€ๅŸŸๅใ€URLใ€Hash ็ญ‰ IOC
  • STIX ๆ ผๅผ๏ผšๆ”ฏๆŒ STIX 2.x ๆ ผๅผ็š„ๅจ่ƒๆƒ…ๆŠฅๅฏผๅ…ฅ

๐Ÿ” ๅจ่ƒๅˆ†ๆž่ƒฝๅŠ›

  • ๅคšๅ› ๅญ้ฃŽ้™ฉ่ฏ„ๅˆ†๏ผš็ปผๅˆ่€ƒ่™‘่Š‚็‚น็ฑปๅž‹ใ€่ฟžๆŽฅๆ•ฐใ€ไธญๅฟƒๆ€งๆŒ‡ๆ ‡ใ€็คพๅŒบ่ง„ๆจก็ญ‰ๅ› ็ด ๏ผŒ่ฎก็ฎ—็ปผๅˆ้ฃŽ้™ฉๅˆ†
  • ๅ…ณ้”ฎ่Š‚็‚น่ฏ†ๅˆซ๏ผš่‡ชๅŠจๅ‘็Žฐๅ›พ่ฐฑไธญ็š„ๆžข็บฝ่Š‚็‚นๅ’Œๆกฅๆข่Š‚็‚น
  • ๅ…ณ่”ๅˆ†ๆž๏ผšๅ‘็Žฐ้š่—ๅœจๆ•ฐๆฎ่ƒŒๅŽ็š„ๅฎžไฝ“ๅ…ณ่”ๅ…ณ็ณป
  • ่š็ฑปๆฃ€ๆต‹๏ผšๅŸบไบŽๅ›พ็ป“ๆž„่‡ชๅŠจ่ฏ†ๅˆซๅจ่ƒๅ›ขไผ™ๅ’Œๆ”ปๅ‡ป็ป„็ป‡
  • ๆ—ถ้—ด็บฟๅˆ†ๆž๏ผšๆŒ‰ๆ—ถ้—ด็ปดๅบฆ่ฟฝ่ธชๅจ่ƒๆผ”ๅŒ–่ฟ‡็จ‹
  • ๆ”ปๅ‡ป่ทฏๅพ„ๆŸฅๆ‰พ๏ผšไปŽไปปๆ„่ตท็‚นๅˆฐ็ปˆ็‚น็š„ๆœ€็Ÿญๆ”ปๅ‡ป่ทฏๅพ„่ฟ˜ๅŽŸ

๐Ÿ“ค ๅคšๆ ผๅผๅฏผๅ‡บ

  • JSON๏ผš็ป“ๆž„ๅŒ–ๆ•ฐๆฎๅฏผๅ‡บ๏ผŒไพฟไบŽไธ‹ๆธธๅทฅๅ…ท้›†ๆˆ
  • CSV๏ผš่กจๆ ผๅŒ–ๅฏผๅ‡บ๏ผŒ้€‚้… Excel ๅ’Œ BI ๅทฅๅ…ท
  • SVG๏ผš็Ÿข้‡ๅ›พๅฏผๅ‡บ๏ผŒ้€‚ๅˆๆŠฅๅ‘Šๅ’Œๆผ”็คบๆ–‡็จฟ
  • Mermaid๏ผšMarkdown ๅ‹ๅฅฝ็š„ๆต็จ‹ๅ›พ่ฏญๆณ•๏ผŒๅฏ็›ดๆŽฅๅตŒๅ…ฅๆ–‡ๆกฃ
  • HTML ไบคไบ’ๅผๆŠฅๅ‘Š๏ผšๅ†…ๅตŒ D3.js ็š„็‹ฌ็ซ‹ HTML ๆ–‡ไปถ๏ผŒๆ— ้œ€ๆœๅŠกๅ™จๅณๅฏๆต่งˆ

โŒจ๏ธ ๅผบๅคง็š„ CLI ๅ‘ฝไปค

ๅ‘ฝไปค ๅŠŸ่ƒฝ
import ๅฏผๅ…ฅๅจ่ƒๆ•ฐๆฎ๏ผˆๆ”ฏๆŒ CSV/JSON/YAML/IOC/STIX๏ผ‰
analyze ๆ‰ง่กŒๅ›พๅˆ†ๆž๏ผˆ้ฃŽ้™ฉ่ฏ„ๅˆ†/ไธญๅฟƒๆ€ง/็คพๅŒบๆฃ€ๆต‹/่ทฏๅพ„ๆŸฅๆ‰พ๏ผ‰
export ๅฏผๅ‡บๅ›พ่ฐฑๆ•ฐๆฎ๏ผˆJSON/CSV/SVG/Mermaid/HTML๏ผ‰
template ไฝฟ็”จ้ข„็ฝฎๅˆ†ๆžๆจกๆฟ๏ผˆ้’“้ฑผ/ๆถๆ„่ฝฏไปถ/APT๏ผ‰
stats ๆŸฅ็œ‹ๅ›พ่ฐฑ็ปŸ่ฎกไฟกๆฏ
serve ๅฏๅŠจ Web ๅฏ่ง†ๅŒ–ๆœๅŠก
query ไบคไบ’ๅผๅ›พๆŸฅ่ฏข

๐ŸŒ Web ๅฏ่ง†ๅŒ–

  • Flask REST API๏ผšๅฎŒๆ•ด็š„ๅŽ็ซฏๆŽฅๅฃ๏ผŒๆ”ฏๆŒๅ›พ่ฐฑ CRUD ๅ’Œๅˆ†ๆžๆ“ไฝœ
  • D3.js ๅŠ›ๅฏผๅ‘ๅ›พ๏ผš็‰ฉ็†ๆจกๆ‹Ÿ็š„่Š‚็‚นๅธƒๅฑ€๏ผŒ็›ด่ง‚ๅฑ•็คบๅ…ณ็ณป็ฝ‘็ปœ
  • ๆš—่‰ฒไธป้ข˜๏ผšๆŠค็œผ่ฎพ่ฎก๏ผŒ้€‚ๅˆ้•ฟๆ—ถ้—ดๅˆ†ๆžๅทฅไฝœ
  • ่Š‚็‚น็€่‰ฒ๏ผšๆŒ‰่Š‚็‚น็ฑปๅž‹๏ผˆIP/ๅŸŸๅ/ๆถๆ„่ฝฏไปถ็ญ‰๏ผ‰่‡ชๅŠจ็€่‰ฒ
  • ไบคไบ’ๆ“ไฝœ๏ผšๆ”ฏๆŒๆ‹–ๆ‹ฝ่Š‚็‚นใ€็ผฉๆ”พ็”ปๅธƒใ€ๆœ็ดขๅฎšไฝใ€็‚นๅ‡ปๆŸฅ็œ‹่ฏฆๆƒ…

๐Ÿ“‹ ้ข„็ฝฎๅˆ†ๆžๆจกๆฟ

  • ้’“้ฑผๆ”ปๅ‡ปๅˆ†ๆž๏ผšไธ€้”ฎๅฏผๅ…ฅ้’“้ฑผ้‚ฎไปถ็›ธๅ…ณ IOC๏ผŒ่‡ชๅŠจๆž„ๅปบๆ”ปๅ‡ป้“พ
  • ๆถๆ„่ฝฏไปถๆบฏๆบ๏ผšไปŽๆ–‡ไปถ Hash ๅ‡บๅ‘๏ผŒ่ฟฝ่ธชๆถๆ„่ฝฏไปถ็š„ไผ ๆ’ญ่ทฏๅพ„
  • APT ่ฐƒๆŸฅๆจกๆฟ๏ผš้’ˆๅฏน้ซ˜็บงๆŒ็ปญๆ€งๅจ่ƒ็š„ๆ ‡ๅ‡†ๅŒ–ๅˆ†ๆžๆต็จ‹

๐Ÿ’พ ๆŒไน…ๅŒ–ๅญ˜ๅ‚จ

  • ๅ›พ่ฐฑๆ•ฐๆฎ่‡ชๅŠจๆŒไน…ๅŒ–ๅˆฐ ~/.threatgraph/graph.json
  • ่ทจไผš่ฏไฟ็•™ๅˆ†ๆž็ป“ๆžœ๏ผŒๆ— ้œ€้‡ๅคๅฏผๅ…ฅ

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

็Žฏๅขƒ่ฆๆฑ‚

  • Python 3.8 ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ
  • ๆ“ไฝœ็ณป็ปŸ๏ผšLinux / macOS / Windows
  • ๅฏ้€‰ไพ่ต–๏ผš
    • flask โ€” Web ๅฏ่ง†ๅŒ–ๆจกๅผ๏ผˆpip install flask๏ผ‰
    • networkx โ€” ๅขžๅผบๅ›พ็ฎ—ๆณ•๏ผˆpip install networkx๏ผ‰
    • pyyaml โ€” YAML ๆ ผๅผๆ”ฏๆŒ๏ผˆpip install pyyaml๏ผ‰

ๅฎ‰่ฃ…

# ไปŽ GitHub ๅ…‹้š†้กน็›ฎ
git clone https://github.com/gitstq/ThreatGraph-CLI.git
cd ThreatGraph-CLI

# ๅฎ‰่ฃ…ๆ ธๅฟƒ๏ผˆ้›ถๅค–้ƒจไพ่ต–๏ผ‰
pip install .

# ๆˆ–่€…๏ผŒๅฎ‰่ฃ…ๅ…จ้ƒจๅฏ้€‰ไพ่ต–
pip install ".[web,enhanced,yaml]"

ไธ‰ๆญฅไธŠๆ‰‹

# 1๏ธโƒฃ ๅฏผๅ…ฅๅจ่ƒๆ•ฐๆฎ
threatgraph import --format csv --file ioc_data.csv

# 2๏ธโƒฃ ๆ‰ง่กŒๅˆ†ๆž
threatgraph analyze --method risk-score

# 3๏ธโƒฃ ๅฏๅŠจ Web ๅฏ่ง†ๅŒ–
threatgraph serve --port 8080

ๆ‰“ๅผ€ๆต่งˆๅ™จ่ฎฟ้—ฎ http://localhost:8080๏ผŒๅณๅฏ็œ‹ๅˆฐไบคไบ’ๅผๅจ่ƒๅ›พ่ฐฑ๏ผ

ๅฟซ้€Ÿๅผ€ๅง‹ๆผ”็คบ
ๅ›พ๏ผšไธ‰ๆญฅๅฟซ้€ŸไธŠๆ‰‹ ThreatGraph-CLI


๐Ÿ“– ่ฏฆ็ป†ไฝฟ็”จๆŒ‡ๅ—

1. ๆ•ฐๆฎๅฏผๅ…ฅ (import)

ไปŽ CSV ๅฏผๅ…ฅ

# ่‡ชๅŠจ่ฏ†ๅˆซๅˆ—ๅๆ˜ ๅฐ„
threatgraph import --format csv --file threat_data.csv

# ๆŒ‡ๅฎšๅˆ—ๆ˜ ๅฐ„
threatgraph import --format csv --file data.csv \
  --map "source_ip=src,dst_ip=target,relation=type"

CSV ๆ–‡ไปถ็คบไพ‹๏ผš

source_ip,dst_ip,relation,timestamp
192.168.1.100,10.0.0.1,communicates_with,2024-01-15
10.0.0.1,evil.com,resolves_to,2024-01-15
evil.com,phishing-page,hosts_malware,2024-01-16

ไปŽ JSON ๅฏผๅ…ฅ

# ๅŽŸ็”Ÿ JSON ๆ ผๅผ
threatgraph import --format json --file nodes.json

# JSON ๅˆ—่กจๆ ผๅผ
threatgraph import --format json --file ioc_list.json

JSON ๆ–‡ไปถ็คบไพ‹๏ผš

{
  "nodes": [
    {"id": "192.168.1.100", "type": "ip", "labels": ["internal"]},
    {"id": "evil.com", "type": "domain", "labels": ["malicious"]}
  ],
  "edges": [
    {"source": "192.168.1.100", "target": "evil.com", "relation": "communicates_with"}
  ]
}

ไปŽ IOC ๆ–‡ๆœฌๆๅ–

# ไปŽไปปๆ„ๆ–‡ๆœฌไธญๆๅ– IOC
threatgraph import --format ioc --file report.txt

# ็›ดๆŽฅไปŽๆ ‡ๅ‡†่พ“ๅ…ฅๆๅ–
cat firewall.log | threatgraph import --format ioc --stdin

ไปŽ STIX ๆ ผๅผๅฏผๅ…ฅ

threatgraph import --format stix --file threat_intelligence.stix2.json

ไปŽ YAML ๅฏผๅ…ฅ

threatgraph import --format yaml --file config.yaml

2. ๅ›พๅˆ†ๆž (analyze)

้ฃŽ้™ฉ่ฏ„ๅˆ†

# ๅฏนๆ‰€ๆœ‰่Š‚็‚น่ฟ›่กŒ้ฃŽ้™ฉ่ฏ„ๅˆ†
threatgraph analyze --method risk-score

# ๆŸฅ็œ‹้ฃŽ้™ฉๆœ€้ซ˜็š„ Top 10 ่Š‚็‚น
threatgraph analyze --method risk-score --top 10

# ๆŒ‡ๅฎš่ฏ„ๅˆ†ๆƒ้‡
threatgraph analyze --method risk-score \
  --weights "degree=0.3,betweenness=0.3,community=0.2,type=0.2"

ไธญๅฟƒๆ€งๅˆ†ๆž

# ๅบฆไธญๅฟƒๆ€งๅˆ†ๆž
threatgraph analyze --method degree-centrality

# ไป‹ๆ•ฐไธญๅฟƒๆ€งๅˆ†ๆž
threatgraph analyze --method betweenness-centrality

็คพๅŒบๆฃ€ๆต‹

# ๆ ‡็ญพไผ ๆ’ญ็คพๅŒบๆฃ€ๆต‹
threatgraph analyze --method community-detection

# ๆŒ‡ๅฎš่ฟญไปฃๆฌกๆ•ฐ
threatgraph analyze --method community-detection --iterations 100

ๆœ€็Ÿญ่ทฏๅพ„

# ๆŸฅๆ‰พไธคไธช่Š‚็‚น้—ด็š„ๆœ€็Ÿญ่ทฏๅพ„
threatgraph analyze --method shortest-path \
  --source "192.168.1.100" --target "evil.com"

ๆ”ปๅ‡ป่ทฏๅพ„ๅˆ†ๆž

# ไปŽๆŒ‡ๅฎš่ตท็‚นๆŸฅๆ‰พๆ‰€ๆœ‰ๅฏ่พพ็š„ๆถๆ„่Š‚็‚น
threatgraph analyze --method attack-path \
  --source "192.168.1.100" --target-type malware

3. ๆ•ฐๆฎๅฏผๅ‡บ (export)

# ๅฏผๅ‡บไธบ JSON
threatgraph export --format json --output result.json

# ๅฏผๅ‡บไธบ CSV
threatgraph export --format csv --output result.csv

# ๅฏผๅ‡บไธบ SVG ็Ÿข้‡ๅ›พ
threatgraph export --format svg --output graph.svg

# ๅฏผๅ‡บไธบ Mermaid ่ฏญๆณ•
threatgraph export --format mermaid --output graph.mmd

# ๅฏผๅ‡บไธบ HTML ไบคไบ’ๅผๆŠฅๅ‘Š
threatgraph export --format html --output report.html

4. ้ข„็ฝฎๆจกๆฟ (template)

# ้’“้ฑผๆ”ปๅ‡ปๅˆ†ๆžๆจกๆฟ
threatgraph template phishing --ioc "suspicious-url.com" --ioc "attacker@evil.com"

# ๆถๆ„่ฝฏไปถๆบฏๆบๆจกๆฟ
threatgraph template malware-trace --hash "a1b2c3d4e5f6..."

# APT ่ฐƒๆŸฅๆจกๆฟ
threatgraph template apt-investigation --cve "CVE-2024-0001" --domain "c2-server.com"

5. ๅ›พ่ฐฑ็ปŸ่ฎก (stats)

# ๆŸฅ็œ‹ๅŸบๆœฌ็ปŸ่ฎก
threatgraph stats

# ๆŸฅ็œ‹่ฏฆ็ป†็ปŸ่ฎก๏ผˆๅซไธญๅฟƒๆ€งๆŒ‡ๆ ‡๏ผ‰
threatgraph stats --detailed

่พ“ๅ‡บ็คบไพ‹๏ผš

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘            ThreatGraph ็ปŸ่ฎกๆฆ‚่งˆ                  โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘  ่Š‚็‚นๆ€ปๆ•ฐ:  1,234                                โ•‘
โ•‘  ่พนๆ€ปๆ•ฐ:    3,456                                โ•‘
โ•‘  ่Š‚็‚น็ฑปๅž‹:  IP(456) Domain(234) Hash(189) ...   โ•‘
โ•‘  ๅ…ณ็ณป็ฑปๅž‹:  12 ็ง                                โ•‘
โ•‘  ็คพๅŒบๆ•ฐ้‡:  8                                    โ•‘
โ•‘  ๅญ˜ๅ‚จ่ทฏๅพ„:  ~/.threatgraph/graph.json            โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

6. Web ๅฏ่ง†ๅŒ– (serve)

# ๅฏๅŠจ Web ๆœๅŠก๏ผˆ้ป˜่ฎค็ซฏๅฃ 5000๏ผ‰
threatgraph serve

# ๆŒ‡ๅฎš็ซฏๅฃๅ’Œไธปๆœบ
threatgraph serve --host 0.0.0.0 --port 8080

# ๅฏ็”จ่ฐƒ่ฏ•ๆจกๅผ
threatgraph serve --debug

Web ๅฏ่ง†ๅŒ–็•Œ้ข
ๅ›พ๏ผšThreatGraph-CLI Web ๅฏ่ง†ๅŒ–็•Œ้ข โ€” ๆš—่‰ฒไธป้ข˜ D3.js ๅŠ›ๅฏผๅ‘ๅ›พ

7. ไบคไบ’ๅผๆŸฅ่ฏข (query)

# ่ฟ›ๅ…ฅไบคไบ’ๅผๆŸฅ่ฏขๆจกๅผ
threatgraph query

# ๅœจๆŸฅ่ฏขๆจกๅผไธญ๏ผš
# > find node 192.168.1.100
# > find edges from 192.168.1.100
# > shortest-path 192.168.1.100 evil.com
# > neighbors evil.com --depth 2
# > exit

๐Ÿ’ก ่ฎพ่ฎกๆ€่ทฏไธŽ่ฟญไปฃ่ง„ๅˆ’

่ฎพ่ฎก็†ๅฟต

ThreatGraph-CLI ้ตๅพชไปฅไธ‹่ฎพ่ฎกๅŽŸๅˆ™๏ผš

  1. Unix ๅ“ฒๅญฆ๏ผšๆฏไธชๅ‘ฝไปคๅšๅฅฝไธ€ไปถไบ‹๏ผŒ้€š่ฟ‡็ฎก้“ๅ’Œ็ป„ๅˆๅฎŒๆˆๅคๆ‚ๅˆ†ๆž
  2. ๆธ่ฟ›ๅขžๅผบ๏ผšๆ ธๅฟƒๅŠŸ่ƒฝ้›ถไพ่ต–๏ผŒๅฏ้€‰ไพ่ต–ๆŒ‰้œ€ๅฎ‰่ฃ…
  3. ๆ•ฐๆฎ้ฉฑๅŠจ๏ผšๆ‰€ๆœ‰ๅˆ†ๆžๅŸบไบŽๅ›พๆ•ฐๆฎ็ป“ๆž„๏ผŒ็กฎไฟ็ฎ—ๆณ•็š„้€š็”จๆ€งๅ’Œๅฏๆ‰ฉๅฑ•ๆ€ง
  4. ๅฎ‰ๅ…จๅˆ†ๆžๅธˆไผ˜ๅ…ˆ๏ผšๅ‘ฝไปค่กŒๅŽŸ็”Ÿ๏ผŒ้€‚้…ๅฎ‰ๅ…จๅ›ข้˜Ÿ็š„ๆ—ฅๅธธๅทฅไฝœๆต

ๆŠ€ๆœฏ้€‰ๅž‹ๅŽŸๅ› 

ๆŠ€ๆœฏ้€‰ๆ‹ฉ ๅŽŸๅ› 
็บฏ Python ๆ ธๅฟƒ ๆœ€ๅคงๅŒ–ๅฏ็งปๆคๆ€ง๏ผŒ้ฟๅ… C ๆ‰ฉๅฑ•็ผ–่ฏ‘้—ฎ้ข˜
Flask ่ฝป้‡็บง Web ๆก†ๆžถ๏ผŒไธŽ้กน็›ฎ"่ฝป้‡"ๅฎšไฝไธ€่‡ด
D3.js ๆœ€ๆˆ็†Ÿ็š„ JavaScript ๅฏ่ง†ๅŒ–ๅบ“๏ผŒๅŠ›ๅฏผๅ‘ๅ›พๆ•ˆๆžœๅ‡บ่‰ฒ
networkx๏ผˆๅฏ้€‰๏ผ‰ Python ็”Ÿๆ€ไธญๆœ€ๆˆ็†Ÿ็š„ๅ›พ็ฎ—ๆณ•ๅบ“
JSON ๆŒไน…ๅŒ– ไบบ็ฑปๅฏ่ฏปใ€ๆ˜“ไบŽ่ฐƒ่ฏ•ใ€ๆ— ้œ€ๆ•ฐๆฎๅบ“ไพ่ต–

ๆžถๆž„ๆฆ‚่งˆ

graph TB
    subgraph ่พ“ๅ…ฅๅฑ‚["๐Ÿ“ฅ ่พ“ๅ…ฅๅฑ‚"]
        CSV["CSV"]
        JSON_F["JSON"]
        YAML_F["YAML"]
        IOC["IOC ๆ–‡ๆœฌ"]
        STIX["STIX"]
    end

    subgraph ๆ ธๅฟƒๅฑ‚["๐Ÿง  ๆ ธๅฟƒๅฑ‚"]
        Parser["ๅคšๆ ผๅผ่งฃๆžๅ™จ"]
        GraphEngine["ๅ›พๆ•ฐๆฎๅผ•ๆ“Ž"]
        Algorithms["ๅ›พ็ฎ—ๆณ•ๅบ“"]
        Storage["ๆŒไน…ๅŒ–ๅญ˜ๅ‚จ"]
    end

    subgraph ๅˆ†ๆžๅฑ‚["๐Ÿ” ๅˆ†ๆžๅฑ‚"]
        RiskScore["้ฃŽ้™ฉ่ฏ„ๅˆ†"]
        Centrality["ไธญๅฟƒๆ€งๅˆ†ๆž"]
        Community["็คพๅŒบๆฃ€ๆต‹"]
        PathFinder["่ทฏๅพ„ๆŸฅๆ‰พ"]
        Timeline["ๆ—ถ้—ด็บฟๅˆ†ๆž"]
    end

    subgraph ่พ“ๅ‡บๅฑ‚["๐Ÿ“ค ่พ“ๅ‡บๅฑ‚"]
        CLI["CLI ๅ‘ฝไปค"]
        WebVis["Web ๅฏ่ง†ๅŒ–"]
        Export["ๅคšๆ ผๅผๅฏผๅ‡บ"]
    end

    CSV --> Parser
    JSON_F --> Parser
    YAML_F --> Parser
    IOC --> Parser
    STIX --> Parser

    Parser --> GraphEngine
    GraphEngine --> Algorithms
    GraphEngine --> Storage

    GraphEngine --> RiskScore
    GraphEngine --> Centrality
    GraphEngine --> Community
    GraphEngine --> PathFinder
    GraphEngine --> Timeline

    RiskScore --> CLI
    Centrality --> CLI
    Community --> CLI
    PathFinder --> CLI
    Timeline --> CLI

    GraphEngine --> WebVis
    GraphEngine --> Export
Loading

ๅŽ็ปญ่ง„ๅˆ’

  • v1.1๏ผšๆ”ฏๆŒ GraphML ๅ’Œ GEXF ๆ ผๅผๅฏผๅ…ฅ/ๅฏผๅ‡บ
  • v1.2๏ผš้›†ๆˆ MITRE ATT&CK ็Ÿฉ้˜ต่‡ชๅŠจๆ˜ ๅฐ„
  • v1.3๏ผšๆทปๅŠ ๆ—ถ้—ดๅบๅˆ—ๅˆ†ๆžๆจกๅ—๏ผŒๆ”ฏๆŒๅจ่ƒ่ถ‹ๅŠฟ้ข„ๆต‹
  • v1.5๏ผšๆ”ฏๆŒๆ’ไปถ็ณป็ปŸ๏ผŒๅ…่ฎธ็”จๆˆท่‡ชๅฎšไน‰ๅˆ†ๆž็ฎ—ๆณ•
  • v2.0๏ผšๅผ•ๅ…ฅๅคšๅ›พ่ฐฑๅ…ณ่”ๅˆ†ๆž๏ผŒๆ”ฏๆŒ่ทจ่ฐƒๆŸฅๅไฝœ

๐Ÿ“ฆ ๆ‰“ๅŒ…ไธŽ้ƒจ็ฝฒๆŒ‡ๅ—

ไปŽๆบ็ ๅฎ‰่ฃ…

git clone https://github.com/gitstq/ThreatGraph-CLI.git
cd ThreatGraph-CLI
pip install .

ไฝฟ็”จ pip ็›ดๆŽฅๅฎ‰่ฃ…

pip install threatgraph-cli

ๅฎ‰่ฃ…ๅฏ้€‰ไพ่ต–

# Web ๅฏ่ง†ๅŒ–ๆ”ฏๆŒ
pip install threatgraph-cli[web]

# ๅขžๅผบ็ฎ—ๆณ•ๆ”ฏๆŒ
pip install threatgraph-cli[enhanced]

# ๅ…จ้ƒจๅฏ้€‰ไพ่ต–
pip install threatgraph-cli[all]

Web ๆจกๅผ้ƒจ็ฝฒ

# ็”Ÿไบง็Žฏๅขƒๅปบ่ฎฎไฝฟ็”จ gunicorn
pip install gunicorn

# ๅฏๅŠจๆœๅŠก
gunicorn -w 4 -b 0.0.0.0:8080 "threatgraph.web:create_app()"

# ๆˆ–ไฝฟ็”จๅ†…็ฝฎๅ‘ฝไปค
threatgraph serve --host 0.0.0.0 --port 8080

Docker ้ƒจ็ฝฒ๏ผˆ่ง„ๅˆ’ไธญ๏ผ‰

# ๆž„ๅปบ้•œๅƒ
docker build -t threatgraph-cli .

# ่ฟ่กŒๅฎนๅ™จ
docker run -d -p 8080:8080 -v ~/.threatgraph:/data threatgraph-cli

๐Ÿค ่ดก็ŒฎๆŒ‡ๅ—

ๆˆ‘ไปฌๆฌข่ฟŽไปปไฝ•ๅฝขๅผ็š„่ดก็Œฎ๏ผๆ— ่ฎบๆ˜ฏๆไบค Bug ๆŠฅๅ‘Šใ€ๆ”น่ฟ›ๆ–‡ๆกฃ๏ผŒ่ฟ˜ๆ˜ฏ่ดก็Œฎๆ–ฐๅŠŸ่ƒฝใ€‚

ๆไบค Pull Request

  1. Fork ๆœฌไป“ๅบ“
  2. ๅˆ›ๅปบ็‰นๆ€งๅˆ†ๆ”ฏ๏ผšgit checkout -b feature/your-feature-name
  3. ๆไบคๆ›ดๆ”น๏ผšgit commit -m "feat: add your feature description"
  4. ๆŽจ้€ๅˆฐ่ฟœ็จ‹๏ผšgit push origin feature/your-feature-name
  5. ๆไบค Pull Request

Commit ่ง„่Œƒ

่ฏท้ตๅพช Conventional Commits ่ง„่Œƒ๏ผš

feat: ๆ–ฐๅŠŸ่ƒฝ
fix: Bug ไฟฎๅค
docs: ๆ–‡ๆกฃๆ›ดๆ–ฐ
style: ไปฃ็ ๆ ผๅผ๏ผˆไธๅฝฑๅ“้€ป่พ‘๏ผ‰
refactor: ้‡ๆž„
test: ๆต‹่ฏ•็›ธๅ…ณ
chore: ๆž„ๅปบ/ๅทฅๅ…ท้“พ็›ธๅ…ณ

Issue ่ง„ๅˆ™

  • ๆไบค Bug ๅ‰๏ผŒ่ฏทๅ…ˆๆœ็ดขๅทฒๆœ‰ Issue๏ผŒ้ฟๅ…้‡ๅค
  • Bug ๆŠฅๅ‘Š่ฏทๅŒ…ๅซ๏ผšๅค็Žฐๆญฅ้ชคใ€ๆœŸๆœ›่กŒไธบใ€ๅฎž้™…่กŒไธบใ€็Žฏๅขƒไฟกๆฏ
  • ๅŠŸ่ƒฝๅปบ่ฎฎ่ฏทๆ่ฟฐไฝฟ็”จๅœบๆ™ฏๅ’Œ้ข„ๆœŸๆ•ˆๆžœ

๐Ÿ“„ ๅผ€ๆบๅ่ฎฎ

ๆœฌ้กน็›ฎๅŸบไบŽ MIT License ๅผ€ๆบใ€‚

MIT License

Copyright (c) 2024 ThreatGraph-CLI Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

โญ ๅฆ‚ๆžœ่ฟ™ไธช้กน็›ฎๅฏนไฝ ๆœ‰ๅธฎๅŠฉ๏ผŒๆฌข่ฟŽ Star ๆ”ฏๆŒไธ€ไธ‹๏ผโญ


็น้ซ”ไธญๆ–‡

๐ŸŽ‰ ๅฐˆๆกˆไป‹็ดน

ๅฎƒๆ˜ฏไป€้บผ๏ผŸ

ThreatGraph-CLI ๆ˜ฏไธ€ๆฌพๅฐˆ็‚บๅฎ‰ๅ…จ็ ”็ฉถไบบๅ“ก่ˆ‡่—้šŠๅˆ†ๆžๅธซๆ‰“้€ ็š„่ผ•้‡็ดšๅ‘ฝไปคๅˆ—ๅจ่„…ๅœ–่ญœๅˆ†ๆžๅผ•ๆ“Žใ€‚ๅฎƒๅฐ‡ๆ•ฃ่ฝ็š„ๅจ่„…ๆŒ‡ๆจ™๏ผˆIOC๏ผ‰โ€”โ€”IP ไฝๅ€ใ€็ถฒๅŸŸๅ็จฑใ€URLใ€้›ปๅญ้ƒต็ฎฑใ€ๆช”ๆกˆ้›œๆนŠใ€ๆƒกๆ„่ปŸ้ซ”ๅฎถๆ—ใ€CVE ๆผๆดž็ทจ่™Ÿโ€”โ€”่ฝ‰ๅŒ–็‚บไธ€ๅผตๅฏไบ’ๅ‹•ใ€ๅฏๆŸฅ่ฉขใ€ๅฏๅˆ†ๆž็š„้—œไฟ‚ๅœ–่ญœ๏ผŒๅ”ๅŠฉไฝ ๅœจ็ต‚็ซฏๆฉŸไธญๅฟซ้€ŸๅฎŒๆˆๅจ่„…้—œ่ฏใ€ๆ”ปๆ“Šๆบฏๆบ่ˆ‡ๆ…‹ๅ‹ขๆ„Ÿ็Ÿฅใ€‚

่งฃๆฑบไป€้บผ็—›้ปž๏ผŸ

ๅœจๆ—ฅๅธธๅฎ‰ๅ…จ็‡Ÿ้‹ไธญ๏ผŒๆˆ‘ๅ€‘็ถ“ๅธธ้ข่‡จไปฅไธ‹ๅ›ฐๅขƒ๏ผš

  • ่ณ‡ๆ–™ๅญคๅณถ๏ผšๅจ่„…ๆƒ…ๅ ฑๆ•ฃ่ฝๅœจ CSVใ€JSONใ€STIX ็ญ‰ไธๅŒๆ ผๅผ็š„ๆช”ๆกˆไธญ๏ผŒ้›ฃไปฅ็ตฑไธ€้—œ่ฏ
  • ๅทฅๅ…ท่‡ƒ่…ซ๏ผšไธปๆตๅจ่„…ๆƒ…ๅ ฑๅนณๅฐๅ‹•่ผ’้œ€่ฆ้ƒจ็ฝฒ Elastic Stack ๆˆ– Neo4j๏ผŒๅฐ่ผ•้‡็ดšๆ‡‰ๆ€ฅๅ›žๆ‡‰ไพ†่ชชๅคช้‡ไบ†
  • ่ฆ–่ฆบๅŒ–้–€ๆชป้ซ˜๏ผšๆƒณๅฟซ้€Ÿ็•ซไธ€ๅผตๆ”ปๆ“Š้—œไฟ‚ๅœ–๏ผŒๅป่ฆๆ‰“้–‹ Gephi ๆˆ– Maltego๏ผŒ้…็ฝฎ็น็‘ฃ
  • ๅˆ†ๆžๆต็จ‹ๆ–ท่ฃ‚๏ผšๅŒฏๅ…ฅใ€ๅˆ†ๆžใ€่ฆ–่ฆบๅŒ–ใ€ๅŒฏๅ‡บๅพ€ๅพ€้œ€่ฆๅˆ‡ๆ›ๅคšๅ€‹ๅทฅๅ…ท๏ผŒๆ•ˆ็އไฝŽไธ‹

ThreatGraph-CLI ๆญฃๆ˜ฏ็‚บไบ†่งฃๆฑบ้€™ไบ›ๅ•้กŒ่€Œ่ช•็”Ÿ็š„ใ€‚

ๆ ธๅฟƒๅƒนๅ€ผ

  • ้›ถไพ่ณดๆ ธๅฟƒ๏ผš็ด” Python ๅฏฆไฝœ๏ผŒpip install ๅพŒๅณๅฏไฝฟ็”จ๏ผŒ็„ก้ ˆๅฎ‰่ฃ่ณ‡ๆ–™ๅบซๆˆ–ๅœ–ๅผ•ๆ“Ž
  • ๅคšๆ ผๅผ้€šๅƒ๏ผšCSVใ€JSONใ€YAMLใ€IOC ๆ–‡ๅญ—ใ€STIX ไธ€้ตๅŒฏๅ…ฅ๏ผŒ่‡ชๅ‹•่ญ˜ๅˆฅ่ˆ‡ๆ˜ ๅฐ„
  • ๅœ–ๆผ”็ฎ—ๆณ•ๅ…งๅปบ๏ผšๆœ€็Ÿญ่ทฏๅพ‘ใ€ไธญๅฟƒๆ€งๅˆ†ๆžใ€็คพ็พคๅตๆธฌ็ญ‰ๆผ”็ฎ—ๆณ•้–‹็ฎฑๅณ็”จ
  • ไธ€้ต่ฆ–่ฆบๅŒ–๏ผšๅ…งๅปบ D3.js ๅŠ›ๅฐŽๅ‘ๅœ– Web ไป‹้ข๏ผŒthreatgraph serve ๅณๅฏๅ•Ÿๅ‹•
  • ้ˆๆดปๅŒฏๅ‡บ๏ผšJSONใ€CSVใ€SVGใ€Mermaidใ€HTML ไบ’ๅ‹•ๅผๅ ฑๅ‘Š๏ผŒ้ฉ้…ๅ„็จฎๅฝ™ๅ ฑๅ ดๆ™ฏ

ๅทฎ็•ฐๅŒ–ไบฎ้ปž

็‰นๆ€ง ThreatGraph-CLI Neo4j + Bloom Maltego Gephi
้›ถๅค–้ƒจไพ่ณด โœ… โŒ โŒ โŒ
ๅ‘ฝไปคๅˆ—ๅŽŸ็”Ÿ โœ… โŒ โŒ โŒ
ๅคšๆ ผๅผ่‡ชๅ‹•่งฃๆž โœ… โš ๏ธ โš ๏ธ โŒ
ๅ…งๅปบๅœ–ๆผ”็ฎ—ๆณ• โœ… โœ… โš ๏ธ โœ…
Web ่ฆ–่ฆบๅŒ– โœ… โœ… โœ… โŒ
ๅ–ฎๆช”ๆกˆ้ƒจ็ฝฒ โœ… โŒ โŒ โŒ
้–‹ๆบๅ…่ฒป โœ… โš ๏ธ โŒ โœ…

้ˆๆ„Ÿไพ†ๆบ

ThreatGraph-CLI ็š„่จญ่จˆ้ˆๆ„Ÿไพ†่‡ช๏ผš

  • MITRE ATT&CK ๆก†ๆžถ็š„ๆ”ปๆ“Š้ˆๅปบๆจกๆ€ๆƒณ
  • Graph Theory ๅœจ็คพไบค็ถฒ่ทฏๅˆ†ๆžไธญ็š„ๆˆ็†Ÿๆ‡‰็”จ
  • Unix ๅ“ฒๅญธโ€”โ€”ๅšๅฅฝไธ€ไปถไบ‹๏ผŒ้€้Ž็ฎก้“็ต„ๅˆๅฎŒๆˆ่ค‡้›œไปปๅ‹™
  • ๅฎ‰ๅ…จ็คพ็พคๅฐใ€Œ่ผ•้‡็ดšใ€ๅฏ้›ข็ทš้‹่กŒใ€ๅฎ‰ๅ…จๅทฅๅ…ท็š„่ฟซๅˆ‡้œ€ๆฑ‚

โœจ ๆ ธๅฟƒ็‰นๆ€ง

๐Ÿง  ๅœ–่ณ‡ๆ–™ๅผ•ๆ“Ž

  • ๅคš้กžๅž‹็ฏ€้ปž๏ผšๆ”ฏๆด IPใ€็ถฒๅŸŸๅ็จฑใ€URLใ€้›ปๅญ้ƒต็ฎฑใ€ๆช”ๆกˆ Hash๏ผˆMD5/SHA1/SHA256๏ผ‰ใ€ๆƒกๆ„่ปŸ้ซ”ๅฎถๆ—ใ€CVE ็ญ‰็ฏ€้ปž้กžๅž‹
  • ่ฑๅฏŒ้—œไฟ‚้กžๅž‹๏ผšresolves_toใ€communicates_withใ€hosts_malwareใ€exploitsใ€associated_with ็ญ‰ๅคš็จฎๆœ‰ๅ‘้‚Š
  • Dijkstra ๆœ€็Ÿญ่ทฏๅพ‘๏ผšๅฟซ้€ŸๆŸฅๆ‰พๅ…ฉๅ€‹็ฏ€้ปž้–“็š„ๆœ€็Ÿญๆ”ปๆ“Š่ทฏๅพ‘
  • ไธญๅฟƒๆ€งๅˆ†ๆž๏ผšๅบฆไธญๅฟƒๆ€ง๏ผˆDegree Centrality๏ผ‰่ˆ‡ไป‹ๆ•ธไธญๅฟƒๆ€ง๏ผˆBetweenness Centrality๏ผ‰๏ผŒ็ฒพๆบ–ๅฎšไฝ้—œ้ต็ฏ€้ปž
  • ็คพ็พคๅตๆธฌ๏ผšๅŸบๆ–ผๆจ™็ฑคๅ‚ณๆ’ญๆผ”็ฎ—ๆณ•๏ผˆLabel Propagation๏ผ‰่‡ชๅ‹•็™ผ็พๅจ่„…่š้กž

๐Ÿ“ฅ ๅคšๆ ผๅผๆ™บๆ…ง่งฃๆž

  • CSV๏ผš่‡ชๅ‹•่ญ˜ๅˆฅๆฌ„ไฝๅ็จฑไธฆๆ˜ ๅฐ„ๅˆฐ็ฏ€้ปž/้‚Š้กžๅž‹๏ผŒๆ”ฏๆด่‡ช่จ‚ๆฌ„ไฝๆ˜ ๅฐ„
  • JSON๏ผšๅŽŸ็”Ÿ JSONใ€JSON ๅˆ—่กจใ€ๅทข็‹€ JSON ไธ‰็จฎๆ ผๅผๅ…จ็›ธๅฎน
  • YAML๏ผš็ตๆง‹ๅŒ–่จญๅฎšๆช”็›ดๆŽฅๅŒฏๅ…ฅ
  • IOC ๆ–‡ๅญ—ๆๅ–๏ผš้€้Žๆญฃๅ‰‡่กจ็คบๅผๅพžไปปๆ„ๆ–‡ๅญ—ไธญๆๅ– IPใ€็ถฒๅŸŸๅ็จฑใ€URLใ€Hash ็ญ‰ IOC
  • STIX ๆ ผๅผ๏ผšๆ”ฏๆด STIX 2.x ๆ ผๅผ็š„ๅจ่„…ๆƒ…ๅ ฑๅŒฏๅ…ฅ

๐Ÿ” ๅจ่„…ๅˆ†ๆž่ƒฝๅŠ›

  • ๅคšๅ› ๅญ้ขจ้šช่ฉ•ๅˆ†๏ผš็ถœๅˆ่€ƒๆ…ฎ็ฏ€้ปž้กžๅž‹ใ€้€ฃๆŽฅๆ•ธใ€ไธญๅฟƒๆ€งๆŒ‡ๆจ™ใ€็คพ็พค่ฆๆจก็ญ‰ๅ› ็ด ๏ผŒ่จˆ็ฎ—็ถœๅˆ้ขจ้šชๅˆ†
  • ้—œ้ต็ฏ€้ปž่ญ˜ๅˆฅ๏ผš่‡ชๅ‹•็™ผ็พๅœ–่ญœไธญ็š„ๆจž็ด็ฏ€้ปž่ˆ‡ๆฉ‹ๆจ‘็ฏ€้ปž
  • ้—œ่ฏๅˆ†ๆž๏ผš็™ผ็พ้šฑ่—ๅœจ่ณ‡ๆ–™่ƒŒๅพŒ็š„ๅฏฆ้ซ”้—œ่ฏ้—œไฟ‚
  • ่š้กžๅตๆธฌ๏ผšๅŸบๆ–ผๅœ–็ตๆง‹่‡ชๅ‹•่ญ˜ๅˆฅๅจ่„…ๅœ˜ๅคฅ่ˆ‡ๆ”ปๆ“Š็ต„็น”
  • ๆ™‚้–“็ทšๅˆ†ๆž๏ผšๆŒ‰ๆ™‚้–“็ถญๅบฆ่ฟฝ่นคๅจ่„…ๆผ”ๅŒ–้Ž็จ‹
  • ๆ”ปๆ“Š่ทฏๅพ‘ๆŸฅๆ‰พ๏ผšๅพžไปปๆ„่ตท้ปžๅˆฐ็ต‚้ปž็š„ๆœ€็Ÿญๆ”ปๆ“Š่ทฏๅพ‘้‚„ๅŽŸ

๐Ÿ“ค ๅคšๆ ผๅผๅŒฏๅ‡บ

  • JSON๏ผš็ตๆง‹ๅŒ–่ณ‡ๆ–™ๅŒฏๅ‡บ๏ผŒไพฟๆ–ผไธ‹ๆธธๅทฅๅ…ทๆ•ดๅˆ
  • CSV๏ผš่กจๆ ผๅŒ–ๅŒฏๅ‡บ๏ผŒ้ฉ้… Excel ่ˆ‡ BI ๅทฅๅ…ท
  • SVG๏ผšๅ‘้‡ๅœ–ๅŒฏๅ‡บ๏ผŒ้ฉๅˆๅ ฑๅ‘Š่ˆ‡็ฐกๅ ฑๆ–‡็จฟ
  • Mermaid๏ผšMarkdown ๅ‹ๅ–„็š„ๆต็จ‹ๅœ–่ชžๆณ•๏ผŒๅฏ็›ดๆŽฅๅตŒๅ…ฅๆ–‡ไปถ
  • HTML ไบ’ๅ‹•ๅผๅ ฑๅ‘Š๏ผšๅ…งๅตŒ D3.js ็š„็จ็ซ‹ HTML ๆช”ๆกˆ๏ผŒ็„ก้ ˆไผบๆœๅ™จๅณๅฏ็€่ฆฝ

โŒจ๏ธ ๅผทๅคง็š„ CLI ๅ‘ฝไปค

ๅ‘ฝไปค ๅŠŸ่ƒฝ
import ๅŒฏๅ…ฅๅจ่„…่ณ‡ๆ–™๏ผˆๆ”ฏๆด CSV/JSON/YAML/IOC/STIX๏ผ‰
analyze ๅŸท่กŒๅœ–ๅˆ†ๆž๏ผˆ้ขจ้šช่ฉ•ๅˆ†/ไธญๅฟƒๆ€ง/็คพ็พคๅตๆธฌ/่ทฏๅพ‘ๆŸฅๆ‰พ๏ผ‰
export ๅŒฏๅ‡บๅœ–่ญœ่ณ‡ๆ–™๏ผˆJSON/CSV/SVG/Mermaid/HTML๏ผ‰
template ไฝฟ็”จ้ ็ฝฎๅˆ†ๆžๆจกๆฟ๏ผˆ้‡ฃ้ญš/ๆƒกๆ„่ปŸ้ซ”/APT๏ผ‰
stats ๆŸฅ็œ‹ๅœ–่ญœ็ตฑ่จˆ่ณ‡่จŠ
serve ๅ•Ÿๅ‹• Web ่ฆ–่ฆบๅŒ–ๆœๅ‹™
query ไบ’ๅ‹•ๅผๅœ–ๆŸฅ่ฉข

๐ŸŒ Web ่ฆ–่ฆบๅŒ–

  • Flask REST API๏ผšๅฎŒๆ•ด็š„ๅพŒ็ซฏไป‹้ข๏ผŒๆ”ฏๆดๅœ–่ญœ CRUD ่ˆ‡ๅˆ†ๆžๆ“ไฝœ
  • D3.js ๅŠ›ๅฐŽๅ‘ๅœ–๏ผš็‰ฉ็†ๆจกๆ“ฌ็š„็ฏ€้ปžไฝˆๅฑ€๏ผŒ็›ด่ง€ๅฑ•็คบ้—œไฟ‚็ถฒ่ทฏ
  • ๆš—่‰ฒไธป้กŒ๏ผš่ญท็œผ่จญ่จˆ๏ผŒ้ฉๅˆ้•ทๆ™‚้–“ๅˆ†ๆžๅทฅไฝœ
  • ็ฏ€้ปž่‘—่‰ฒ๏ผšๆŒ‰็ฏ€้ปž้กžๅž‹๏ผˆIP/็ถฒๅŸŸๅ็จฑ/ๆƒกๆ„่ปŸ้ซ”็ญ‰๏ผ‰่‡ชๅ‹•่‘—่‰ฒ
  • ไบ’ๅ‹•ๆ“ไฝœ๏ผšๆ”ฏๆดๆ‹–ๆ›ณ็ฏ€้ปžใ€็ธฎๆ”พ็•ซๅธƒใ€ๆœๅฐ‹ๅฎšไฝใ€้ปžๆ“ŠๆŸฅ็œ‹่ฉณๆƒ…

๐Ÿ“‹ ้ ็ฝฎๅˆ†ๆžๆจกๆฟ

  • ้‡ฃ้ญšๆ”ปๆ“Šๅˆ†ๆž๏ผšไธ€้ตๅŒฏๅ…ฅ้‡ฃ้ญš้ƒตไปถ็›ธ้—œ IOC๏ผŒ่‡ชๅ‹•ๅปบๆง‹ๆ”ปๆ“Š้ˆ
  • ๆƒกๆ„่ปŸ้ซ”ๆบฏๆบ๏ผšๅพžๆช”ๆกˆ Hash ๅ‡บ็™ผ๏ผŒ่ฟฝ่นคๆƒกๆ„่ปŸ้ซ”็š„ๅ‚ณๆ’ญ่ทฏๅพ‘
  • APT ่ชฟๆŸฅๆจกๆฟ๏ผš้‡ๅฐ้ซ˜้šŽๆŒ็บŒๆ€งๅจ่„…็š„ๆจ™ๆบ–ๅŒ–ๅˆ†ๆžๆต็จ‹

๐Ÿ’พ ๆŒไน…ๅŒ–ๅ„ฒๅญ˜

  • ๅœ–่ญœ่ณ‡ๆ–™่‡ชๅ‹•ๆŒไน…ๅŒ–่‡ณ ~/.threatgraph/graph.json
  • ่ทจๆœƒ่ฉฑไฟ็•™ๅˆ†ๆž็ตๆžœ๏ผŒ็„ก้ ˆ้‡่ค‡ๅŒฏๅ…ฅ

๐Ÿš€ ๅฟซ้€Ÿ้–‹ๅง‹

็’ฐๅขƒ้œ€ๆฑ‚

  • Python 3.8 ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ
  • ไฝœๆฅญ็ณป็ตฑ๏ผšLinux / macOS / Windows
  • ๅฏ้ธไพ่ณด๏ผš
    • flask โ€” Web ่ฆ–่ฆบๅŒ–ๆจกๅผ๏ผˆpip install flask๏ผ‰
    • networkx โ€” ๅขžๅผทๅœ–ๆผ”็ฎ—ๆณ•๏ผˆpip install networkx๏ผ‰
    • pyyaml โ€” YAML ๆ ผๅผๆ”ฏๆด๏ผˆpip install pyyaml๏ผ‰

ๅฎ‰่ฃ

# ๅพž GitHub ่ค‡่ฃฝๅฐˆๆกˆ
git clone https://github.com/gitstq/ThreatGraph-CLI.git
cd ThreatGraph-CLI

# ๅฎ‰่ฃๆ ธๅฟƒ๏ผˆ้›ถๅค–้ƒจไพ่ณด๏ผ‰
pip install .

# ๆˆ–่€…๏ผŒๅฎ‰่ฃๅ…จ้ƒจๅฏ้ธไพ่ณด
pip install ".[web,enhanced,yaml]"

ไธ‰ๆญฅไธŠๆ‰‹

# 1๏ธโƒฃ ๅŒฏๅ…ฅๅจ่„…่ณ‡ๆ–™
threatgraph import --format csv --file ioc_data.csv

# 2๏ธโƒฃ ๅŸท่กŒๅˆ†ๆž
threatgraph analyze --method risk-score

# 3๏ธโƒฃ ๅ•Ÿๅ‹• Web ่ฆ–่ฆบๅŒ–
threatgraph serve --port 8080

ๆ‰“้–‹็€่ฆฝๅ™จ้€ ่จช http://localhost:8080๏ผŒๅณๅฏ็œ‹ๅˆฐไบ’ๅ‹•ๅผๅจ่„…ๅœ–่ญœ๏ผ

ๅฟซ้€Ÿ้–‹ๅง‹ๆผ”็คบ
ๅœ–๏ผšไธ‰ๆญฅๅฟซ้€ŸไธŠๆ‰‹ ThreatGraph-CLI


๐Ÿ“– ่ฉณ็ดฐไฝฟ็”จๆŒ‡ๅ—

1. ่ณ‡ๆ–™ๅŒฏๅ…ฅ (import)

ๅพž CSV ๅŒฏๅ…ฅ

# ่‡ชๅ‹•่ญ˜ๅˆฅๆฌ„ไฝๅ็จฑๆ˜ ๅฐ„
threatgraph import --format csv --file threat_data.csv

# ๆŒ‡ๅฎšๆฌ„ไฝๆ˜ ๅฐ„
threatgraph import --format csv --file data.csv \
  --map "source_ip=src,dst_ip=target,relation=type"

CSV ๆช”ๆกˆ็ฏ„ไพ‹๏ผš

source_ip,dst_ip,relation,timestamp
192.168.1.100,10.0.0.1,communicates_with,2024-01-15
10.0.0.1,evil.com,resolves_to,2024-01-15
evil.com,phishing-page,hosts_malware,2024-01-16

ๅพž JSON ๅŒฏๅ…ฅ

# ๅŽŸ็”Ÿ JSON ๆ ผๅผ
threatgraph import --format json --file nodes.json

# JSON ๅˆ—่กจๆ ผๅผ
threatgraph import --format json --file ioc_list.json

JSON ๆช”ๆกˆ็ฏ„ไพ‹๏ผš

{
  "nodes": [
    {"id": "192.168.1.100", "type": "ip", "labels": ["internal"]},
    {"id": "evil.com", "type": "domain", "labels": ["malicious"]}
  ],
  "edges": [
    {"source": "192.168.1.100", "target": "evil.com", "relation": "communicates_with"}
  ]
}

ๅพž IOC ๆ–‡ๅญ—ๆๅ–

# ๅพžไปปๆ„ๆ–‡ๅญ—ไธญๆๅ– IOC
threatgraph import --format ioc --file report.txt

# ็›ดๆŽฅๅพžๆจ™ๆบ–่ผธๅ…ฅๆๅ–
cat firewall.log | threatgraph import --format ioc --stdin

ๅพž STIX ๆ ผๅผๅŒฏๅ…ฅ

threatgraph import --format stix --file threat_intelligence.stix2.json

ๅพž YAML ๅŒฏๅ…ฅ

threatgraph import --format yaml --file config.yaml

2. ๅœ–ๅˆ†ๆž (analyze)

้ขจ้šช่ฉ•ๅˆ†

# ๅฐๆ‰€ๆœ‰็ฏ€้ปž้€ฒ่กŒ้ขจ้šช่ฉ•ๅˆ†
threatgraph analyze --method risk-score

# ๆŸฅ็œ‹้ขจ้šชๆœ€้ซ˜็š„ Top 10 ็ฏ€้ปž
threatgraph analyze --method risk-score --top 10

# ๆŒ‡ๅฎš่ฉ•ๅˆ†ๆฌŠ้‡
threatgraph analyze --method risk-score \
  --weights "degree=0.3,betweenness=0.3,community=0.2,type=0.2"

ไธญๅฟƒๆ€งๅˆ†ๆž

# ๅบฆไธญๅฟƒๆ€งๅˆ†ๆž
threatgraph analyze --method degree-centrality

# ไป‹ๆ•ธไธญๅฟƒๆ€งๅˆ†ๆž
threatgraph analyze --method betweenness-centrality

็คพ็พคๅตๆธฌ

# ๆจ™็ฑคๅ‚ณๆ’ญ็คพ็พคๅตๆธฌ
threatgraph analyze --method community-detection

# ๆŒ‡ๅฎš่ฟญไปฃๆฌกๆ•ธ
threatgraph analyze --method community-detection --iterations 100

ๆœ€็Ÿญ่ทฏๅพ‘

# ๆŸฅๆ‰พๅ…ฉๅ€‹็ฏ€้ปž้–“็š„ๆœ€็Ÿญ่ทฏๅพ‘
threatgraph analyze --method shortest-path \
  --source "192.168.1.100" --target "evil.com"

ๆ”ปๆ“Š่ทฏๅพ‘ๅˆ†ๆž

# ๅพžๆŒ‡ๅฎš่ตท้ปžๆŸฅๆ‰พๆ‰€ๆœ‰ๅฏ้”็š„ๆƒกๆ„็ฏ€้ปž
threatgraph analyze --method attack-path \
  --source "192.168.1.100" --target-type malware

3. ่ณ‡ๆ–™ๅŒฏๅ‡บ (export)

# ๅŒฏๅ‡บ็‚บ JSON
threatgraph export --format json --output result.json

# ๅŒฏๅ‡บ็‚บ CSV
threatgraph export --format csv --output result.csv

# ๅŒฏๅ‡บ็‚บ SVG ๅ‘้‡ๅœ–
threatgraph export --format svg --output graph.svg

# ๅŒฏๅ‡บ็‚บ Mermaid ่ชžๆณ•
threatgraph export --format mermaid --output graph.mmd

# ๅŒฏๅ‡บ็‚บ HTML ไบ’ๅ‹•ๅผๅ ฑๅ‘Š
threatgraph export --format html --output report.html

4. ้ ็ฝฎๆจกๆฟ (template)

# ้‡ฃ้ญšๆ”ปๆ“Šๅˆ†ๆžๆจกๆฟ
threatgraph template phishing --ioc "suspicious-url.com" --ioc "attacker@evil.com"

# ๆƒกๆ„่ปŸ้ซ”ๆบฏๆบๆจกๆฟ
threatgraph template malware-trace --hash "a1b2c3d4e5f6..."

# APT ่ชฟๆŸฅๆจกๆฟ
threatgraph template apt-investigation --cve "CVE-2024-0001" --domain "c2-server.com"

5. ๅœ–่ญœ็ตฑ่จˆ (stats)

# ๆŸฅ็œ‹ๅŸบๆœฌ็ตฑ่จˆ
threatgraph stats

# ๆŸฅ็œ‹่ฉณ็ดฐ็ตฑ่จˆ๏ผˆๅซไธญๅฟƒๆ€งๆŒ‡ๆจ™๏ผ‰
threatgraph stats --detailed

่ผธๅ‡บ็ฏ„ไพ‹๏ผš

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘            ThreatGraph ็ตฑ่จˆๆฆ‚่ฆฝ                  โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘  ็ฏ€้ปž็ธฝๆ•ธ:  1,234                                โ•‘
โ•‘  ้‚Š็ธฝๆ•ธ:    3,456                                โ•‘
โ•‘  ็ฏ€้ปž้กžๅž‹:  IP(456) Domain(234) Hash(189) ...   โ•‘
โ•‘  ้—œไฟ‚้กžๅž‹:  12 ็จฎ                                โ•‘
โ•‘  ็คพ็พคๆ•ธ้‡:  8                                    โ•‘
โ•‘  ๅ„ฒๅญ˜่ทฏๅพ‘:  ~/.threatgraph/graph.json            โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

6. Web ่ฆ–่ฆบๅŒ– (serve)

# ๅ•Ÿๅ‹• Web ๆœๅ‹™๏ผˆ้ ่จญ้€ฃๆŽฅๅŸ  5000๏ผ‰
threatgraph serve

# ๆŒ‡ๅฎš้€ฃๆŽฅๅŸ ่ˆ‡ไธปๆฉŸ
threatgraph serve --host 0.0.0.0 --port 8080

# ๅ•Ÿ็”จ้™ค้Œฏๆจกๅผ
threatgraph serve --debug

Web ่ฆ–่ฆบๅŒ–ไป‹้ข
ๅœ–๏ผšThreatGraph-CLI Web ่ฆ–่ฆบๅŒ–ไป‹้ข โ€” ๆš—่‰ฒไธป้กŒ D3.js ๅŠ›ๅฐŽๅ‘ๅœ–

7. ไบ’ๅ‹•ๅผๆŸฅ่ฉข (query)

# ้€ฒๅ…ฅไบ’ๅ‹•ๅผๆŸฅ่ฉขๆจกๅผ
threatgraph query

# ๅœจๆŸฅ่ฉขๆจกๅผไธญ๏ผš
# > find node 192.168.1.100
# > find edges from 192.168.1.100
# > shortest-path 192.168.1.100 evil.com
# > neighbors evil.com --depth 2
# > exit

๐Ÿ’ก ่จญ่จˆๆ€่ทฏ่ˆ‡่ฟญไปฃ่ฆๅŠƒ

่จญ่จˆ็†ๅฟต

ThreatGraph-CLI ้ตๅพชไปฅไธ‹่จญ่จˆๅŽŸๅ‰‡๏ผš

  1. Unix ๅ“ฒๅญธ๏ผšๆฏๅ€‹ๅ‘ฝไปคๅšๅฅฝไธ€ไปถไบ‹๏ผŒ้€้Ž็ฎก้“่ˆ‡็ต„ๅˆๅฎŒๆˆ่ค‡้›œๅˆ†ๆž
  2. ๆผธ้€ฒๅขžๅผท๏ผšๆ ธๅฟƒๅŠŸ่ƒฝ้›ถไพ่ณด๏ผŒๅฏ้ธไพ่ณดๆŒ‰้œ€ๅฎ‰่ฃ
  3. ่ณ‡ๆ–™้ฉ…ๅ‹•๏ผšๆ‰€ๆœ‰ๅˆ†ๆžๅŸบๆ–ผๅœ–่ณ‡ๆ–™็ตๆง‹๏ผŒ็ขบไฟๆผ”็ฎ—ๆณ•็š„้€š็”จๆ€ง่ˆ‡ๅฏๆ“ดๅฑ•ๆ€ง
  4. ๅฎ‰ๅ…จๅˆ†ๆžๅธซๅ„ชๅ…ˆ๏ผšๅ‘ฝไปคๅˆ—ๅŽŸ็”Ÿ๏ผŒ้ฉ้…ๅฎ‰ๅ…จๅœ˜้šŠ็š„ๆ—ฅๅธธๅทฅไฝœๆต

ๆŠ€่ก“้ธๅž‹ๅŽŸๅ› 

ๆŠ€่ก“้ธๆ“‡ ๅŽŸๅ› 
็ด” Python ๆ ธๅฟƒ ๆœ€ๅคงๅŒ–ๅฏๆ”œๆ€ง๏ผŒ้ฟๅ… C ๆ“ดๅ……็ทจ่ญฏๅ•้กŒ
Flask ่ผ•้‡็ดš Web ๆก†ๆžถ๏ผŒ่ˆ‡ๅฐˆๆกˆใ€Œ่ผ•้‡ใ€ๅฎšไฝไธ€่‡ด
D3.js ๆœ€ๆˆ็†Ÿ็š„ JavaScript ่ฆ–่ฆบๅŒ–ๅ‡ฝๅผๅบซ๏ผŒๅŠ›ๅฐŽๅ‘ๅœ–ๆ•ˆๆžœๅ‡บ่‰ฒ
networkx๏ผˆๅฏ้ธ๏ผ‰ Python ็”Ÿๆ…‹ไธญๆœ€ๆˆ็†Ÿ็š„ๅœ–ๆผ”็ฎ—ๆณ•ๅ‡ฝๅผๅบซ
JSON ๆŒไน…ๅŒ– ไบบ้กžๅฏ่ฎ€ใ€ๆ˜“ๆ–ผ้™ค้Œฏใ€็„ก้ ˆ่ณ‡ๆ–™ๅบซไพ่ณด

ๆžถๆง‹ๆฆ‚่ฆฝ

graph TB
    subgraph ่ผธๅ…ฅๅฑค["๐Ÿ“ฅ ่ผธๅ…ฅๅฑค"]
        CSV["CSV"]
        JSON_F["JSON"]
        YAML_F["YAML"]
        IOC["IOC ๆ–‡ๅญ—"]
        STIX["STIX"]
    end

    subgraph ๆ ธๅฟƒๅฑค["๐Ÿง  ๆ ธๅฟƒๅฑค"]
        Parser["ๅคšๆ ผๅผ่งฃๆžๅ™จ"]
        GraphEngine["ๅœ–่ณ‡ๆ–™ๅผ•ๆ“Ž"]
        Algorithms["ๅœ–ๆผ”็ฎ—ๆณ•ๅบซ"]
        Storage["ๆŒไน…ๅŒ–ๅ„ฒๅญ˜"]
    end

    subgraph ๅˆ†ๆžๅฑค["๐Ÿ” ๅˆ†ๆžๅฑค"]
        RiskScore["้ขจ้šช่ฉ•ๅˆ†"]
        Centrality["ไธญๅฟƒๆ€งๅˆ†ๆž"]
        Community["็คพ็พคๅตๆธฌ"]
        PathFinder["่ทฏๅพ‘ๆŸฅๆ‰พ"]
        Timeline["ๆ™‚้–“็ทšๅˆ†ๆž"]
    end

    subgraph ่ผธๅ‡บๅฑค["๐Ÿ“ค ่ผธๅ‡บๅฑค"]
        CLI["CLI ๅ‘ฝไปค"]
        WebVis["Web ่ฆ–่ฆบๅŒ–"]
        Export["ๅคšๆ ผๅผๅŒฏๅ‡บ"]
    end

    CSV --> Parser
    JSON_F --> Parser
    YAML_F --> Parser
    IOC --> Parser
    STIX --> Parser

    Parser --> GraphEngine
    GraphEngine --> Algorithms
    GraphEngine --> Storage

    GraphEngine --> RiskScore
    GraphEngine --> Centrality
    GraphEngine --> Community
    GraphEngine --> PathFinder
    GraphEngine --> Timeline

    RiskScore --> CLI
    Centrality --> CLI
    Community --> CLI
    PathFinder --> CLI
    Timeline --> CLI

    GraphEngine --> WebVis
    GraphEngine --> Export
Loading

ๅพŒ็บŒ่ฆๅŠƒ

  • v1.1๏ผšๆ”ฏๆด GraphML ่ˆ‡ GEXF ๆ ผๅผๅŒฏๅ…ฅ/ๅŒฏๅ‡บ
  • v1.2๏ผšๆ•ดๅˆ MITRE ATT&CK ็Ÿฉ้™ฃ่‡ชๅ‹•ๆ˜ ๅฐ„
  • v1.3๏ผšๆ–ฐๅขžๆ™‚้–“ๅบๅˆ—ๅˆ†ๆžๆจก็ต„๏ผŒๆ”ฏๆดๅจ่„…่ถจๅ‹ข้ ๆธฌ
  • v1.5๏ผšๆ”ฏๆดๅค–ๆŽ›็ณป็ตฑ๏ผŒๅ…่จฑไฝฟ็”จ่€…่‡ช่จ‚ๅˆ†ๆžๆผ”็ฎ—ๆณ•
  • v2.0๏ผšๅผ•ๅ…ฅๅคšๅœ–่ญœ้—œ่ฏๅˆ†ๆž๏ผŒๆ”ฏๆด่ทจ่ชฟๆŸฅๅ”ไฝœ

๐Ÿ“ฆ ๆ‰“ๅŒ…่ˆ‡้ƒจ็ฝฒๆŒ‡ๅ—

ๅพžๅŽŸๅง‹็ขผๅฎ‰่ฃ

git clone https://github.com/gitstq/ThreatGraph-CLI.git
cd ThreatGraph-CLI
pip install .

ไฝฟ็”จ pip ็›ดๆŽฅๅฎ‰่ฃ

pip install threatgraph-cli

ๅฎ‰่ฃๅฏ้ธไพ่ณด

# Web ่ฆ–่ฆบๅŒ–ๆ”ฏๆด
pip install threatgraph-cli[web]

# ๅขžๅผทๆผ”็ฎ—ๆณ•ๆ”ฏๆด
pip install threatgraph-cli[enhanced]

# ๅ…จ้ƒจๅฏ้ธไพ่ณด
pip install threatgraph-cli[all]

Web ๆจกๅผ้ƒจ็ฝฒ

# ็”Ÿ็”ข็’ฐๅขƒๅปบ่ญฐไฝฟ็”จ gunicorn
pip install gunicorn

# ๅ•Ÿๅ‹•ๆœๅ‹™
gunicorn -w 4 -b 0.0.0.0:8080 "threatgraph.web:create_app()"

# ๆˆ–ไฝฟ็”จๅ…งๅปบๅ‘ฝไปค
threatgraph serve --host 0.0.0.0 --port 8080

Docker ้ƒจ็ฝฒ๏ผˆ่ฆๅŠƒไธญ๏ผ‰

# ๅปบ็ฝฎๆ˜ ๅƒ
docker build -t threatgraph-cli .

# ๅŸท่กŒๅฎนๅ™จ
docker run -d -p 8080:8080 -v ~/.threatgraph:/data threatgraph-cli

๐Ÿค ่ฒข็ปๆŒ‡ๅ—

ๆˆ‘ๅ€‘ๆญก่ฟŽไปปไฝ•ๅฝขๅผ็š„่ฒข็ป๏ผ็„ก่ซ–ๆ˜ฏๆไบค Bug ๅ›žๅ ฑใ€ๆ”น้€ฒๆ–‡ไปถ๏ผŒ้‚„ๆ˜ฏ่ฒข็ปๆ–ฐๅŠŸ่ƒฝใ€‚

ๆไบค Pull Request

  1. Fork ๆœฌๅ€‰ๅบซ
  2. ๅปบ็ซ‹็‰นๆ€งๅˆ†ๆ”ฏ๏ผšgit checkout -b feature/your-feature-name
  3. ๆไบค่ฎŠๆ›ด๏ผšgit commit -m "feat: add your feature description"
  4. ๆŽจ้€ๅˆฐ้ ็ซฏ๏ผšgit push origin feature/your-feature-name
  5. ๆไบค Pull Request

Commit ่ฆ็ฏ„

่ซ‹้ตๅพช Conventional Commits ่ฆ็ฏ„๏ผš

feat: ๆ–ฐๅŠŸ่ƒฝ
fix: Bug ไฟฎๅพฉ
docs: ๆ–‡ไปถๆ›ดๆ–ฐ
style: ็จ‹ๅผ็ขผๆ ผๅผ๏ผˆไธๅฝฑ้Ÿฟ้‚่ผฏ๏ผ‰
refactor: ้‡ๆง‹
test: ๆธฌ่ฉฆ็›ธ้—œ
chore: ๅปบ็ฝฎ/ๅทฅๅ…ท้ˆ็›ธ้—œ

Issue ่ฆๅ‰‡

  • ๆไบค Bug ๅ‰๏ผŒ่ซ‹ๅ…ˆๆœๅฐ‹ๅทฒๆœ‰ Issue๏ผŒ้ฟๅ…้‡่ค‡
  • Bug ๅ›žๅ ฑ่ซ‹ๅŒ…ๅซ๏ผš้‡็พๆญฅ้ฉŸใ€ๆœŸๆœ›่กŒ็‚บใ€ๅฏฆ้š›่กŒ็‚บใ€็’ฐๅขƒ่ณ‡่จŠ
  • ๅŠŸ่ƒฝๅปบ่ญฐ่ซ‹ๆ่ฟฐไฝฟ็”จๅ ดๆ™ฏ่ˆ‡้ ๆœŸๆ•ˆๆžœ

๐Ÿ“„ ้–‹ๆบๅ”่ญฐ

ๆœฌๅฐˆๆกˆๅŸบๆ–ผ MIT License ้–‹ๆบใ€‚

MIT License

Copyright (c) 2024 ThreatGraph-CLI Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

โญ ๅฆ‚ๆžœ้€™ๅ€‹ๅฐˆๆกˆๅฐไฝ ๆœ‰ๅนซๅŠฉ๏ผŒๆญก่ฟŽ Star ๆ”ฏๆŒไธ€ไธ‹๏ผโญ


English

๐ŸŽ‰ About the Project

What is it?

ThreatGraph-CLI is a lightweight command-line threat graph analysis engine built for security researchers and blue team analysts. It transforms scattered Indicators of Compromise (IOCs) โ€” IP addresses, domain names, URLs, email addresses, file hashes, malware families, CVE identifiers โ€” into an interactive, queryable, and analyzable relationship graph, empowering you to perform threat correlation, attack attribution, and situational awareness right from your terminal.

What problems does it solve?

In day-to-day security operations, we frequently encounter these challenges:

  • Data silos: Threat intelligence is scattered across CSV, JSON, STIX, and other formats, making unified correlation difficult
  • Bloated toolchains: Mainstream threat intelligence platforms require deploying Elastic Stack or Neo4j โ€” overkill for lightweight incident response
  • High visualization barriers: Quickly sketching an attack relationship graph means firing up Gephi or Maltego with tedious configuration
  • Fragmented workflows: Importing, analyzing, visualizing, and exporting often require switching between multiple tools, killing efficiency

ThreatGraph-CLI was born to solve exactly these problems.

Core Value Proposition

  • Zero-dependency core: Pure Python implementation โ€” just pip install and go, no database or graph engine required
  • Universal format support: One-click import from CSV, JSON, YAML, IOC text, and STIX with automatic recognition and mapping
  • Built-in graph algorithms: Shortest path, centrality analysis, community detection โ€” all ready out of the box
  • One-command visualization: Built-in D3.js force-directed graph web UI โ€” just run threatgraph serve
  • Flexible export: JSON, CSV, SVG, Mermaid, and interactive HTML reports to fit any reporting scenario

What Sets Us Apart

Feature ThreatGraph-CLI Neo4j + Bloom Maltego Gephi
Zero external dependencies โœ… โŒ โŒ โŒ
CLI-native โœ… โŒ โŒ โŒ
Multi-format auto-parsing โœ… โš ๏ธ โš ๏ธ โŒ
Built-in graph algorithms โœ… โœ… โš ๏ธ โœ…
Web visualization โœ… โœ… โœ… โŒ
Single-file deployment โœ… โŒ โŒ โŒ
Free & open source โœ… โš ๏ธ โŒ โœ…

Inspiration

ThreatGraph-CLI draws design inspiration from:

  • MITRE ATT&CK framework's attack chain modeling philosophy
  • Graph Theory applications in social network analysis
  • The Unix philosophy โ€” do one thing well, compose complex tasks through pipelines
  • The security community's urgent need for lightweight, offline-capable security tools

โœจ Core Features

๐Ÿง  Graph Data Engine

  • Multi-type nodes: Supports IP, domain, URL, email, file hash (MD5/SHA1/SHA256), malware family, CVE, and more
  • Rich relationship types: resolves_to, communicates_with, hosts_malware, exploits, associated_with, and other directed edge types
  • Dijkstra shortest path: Quickly find the shortest attack path between any two nodes
  • Centrality analysis: Degree Centrality and Betweenness Centrality for pinpointing critical nodes
  • Community detection: Automatic threat cluster discovery via Label Propagation algorithm

๐Ÿ“ฅ Smart Multi-Format Parsing

  • CSV: Auto-detects column names and maps them to node/edge types, with custom column mapping support
  • JSON: Full compatibility with native JSON, JSON lists, and nested JSON formats
  • YAML: Direct import of structured configuration files
  • IOC text extraction: Regex-powered extraction of IPs, domains, URLs, and hashes from arbitrary text
  • STIX format: Import from STIX 2.x threat intelligence feeds

๐Ÿ” Threat Analysis Capabilities

  • Multi-factor risk scoring: Computes composite risk scores considering node type, connection count, centrality metrics, and community size
  • Key node identification: Automatically discovers hub nodes and bridge nodes in the graph
  • Correlation analysis: Uncovers hidden entity relationships buried in your data
  • Cluster detection: Identifies threat groups and attack organizations based on graph topology
  • Timeline analysis: Tracks threat evolution along the time dimension
  • Attack path finding: Reconstructs the shortest attack path from any origin to destination

๐Ÿ“ค Multi-Format Export

  • JSON: Structured data export for downstream tool integration
  • CSV: Tabular export compatible with Excel and BI tools
  • SVG: Vector graphics export for reports and presentations
  • Mermaid: Markdown-friendly diagram syntax โ€” embed directly in docs
  • HTML interactive report: Self-contained HTML with embedded D3.js โ€” no server needed to view

โŒจ๏ธ Powerful CLI Commands

Command Function
import Import threat data (CSV/JSON/YAML/IOC/STIX)
analyze Run graph analysis (risk scoring/centrality/community detection/path finding)
export Export graph data (JSON/CSV/SVG/Mermaid/HTML)
template Use pre-built analysis templates (phishing/malware/APT)
stats View graph statistics
serve Launch web visualization service
query Interactive graph querying

๐ŸŒ Web Visualization

  • Flask REST API: Complete backend interface supporting graph CRUD and analysis operations
  • D3.js force-directed graph: Physics-simulated node layout for intuitive network visualization
  • Dark theme: Easy on the eyes during extended analysis sessions
  • Node coloring: Automatic color-coding by node type (IP/domain/malware/etc.)
  • Interactive controls: Drag nodes, zoom canvas, search and locate, click for details

๐Ÿ“‹ Pre-built Analysis Templates

  • Phishing analysis: One-click import of phishing-related IOCs with automatic attack chain construction
  • Malware tracing: Trace malware propagation paths starting from a file hash
  • APT investigation template: Standardized analysis workflow for advanced persistent threats

๐Ÿ’พ Persistent Storage

  • Graph data is automatically persisted to ~/.threatgraph/graph.json
  • Analysis results carry over across sessions โ€” no need to re-import

๐Ÿš€ Quick Start

Prerequisites

  • Python 3.8 or later
  • Operating System: Linux / macOS / Windows
  • Optional dependencies:
    • flask โ€” Web visualization mode (pip install flask)
    • networkx โ€” Enhanced graph algorithms (pip install networkx)
    • pyyaml โ€” YAML format support (pip install pyyaml)

Installation

# Clone from GitHub
git clone https://github.com/gitstq/ThreatGraph-CLI.git
cd ThreatGraph-CLI

# Install core (zero external dependencies)
pip install .

# Or install all optional dependencies
pip install ".[web,enhanced,yaml]"

Three Steps to Get Started

# 1๏ธโƒฃ Import threat data
threatgraph import --format csv --file ioc_data.csv

# 2๏ธโƒฃ Run analysis
threatgraph analyze --method risk-score

# 3๏ธโƒฃ Launch web visualization
threatgraph serve --port 8080

Open your browser and navigate to http://localhost:8080 to see the interactive threat graph!

Quick Start Demo
Fig: Three steps to get started with ThreatGraph-CLI


๐Ÿ“– Detailed Usage Guide

1. Data Import (import)

Import from CSV

# Auto-detect column name mapping
threatgraph import --format csv --file threat_data.csv

# Specify custom column mapping
threatgraph import --format csv --file data.csv \
  --map "source_ip=src,dst_ip=target,relation=type"

Example CSV file:

source_ip,dst_ip,relation,timestamp
192.168.1.100,10.0.0.1,communicates_with,2024-01-15
10.0.0.1,evil.com,resolves_to,2024-01-15
evil.com,phishing-page,hosts_malware,2024-01-16

Import from JSON

# Native JSON format
threatgraph import --format json --file nodes.json

# JSON list format
threatgraph import --format json --file ioc_list.json

Example JSON file:

{
  "nodes": [
    {"id": "192.168.1.100", "type": "ip", "labels": ["internal"]},
    {"id": "evil.com", "type": "domain", "labels": ["malicious"]}
  ],
  "edges": [
    {"source": "192.168.1.100", "target": "evil.com", "relation": "communicates_with"}
  ]
}

Extract from IOC Text

# Extract IOCs from arbitrary text
threatgraph import --format ioc --file report.txt

# Extract directly from stdin
cat firewall.log | threatgraph import --format ioc --stdin

Import from STIX Format

threatgraph import --format stix --file threat_intelligence.stix2.json

Import from YAML

threatgraph import --format yaml --file config.yaml

2. Graph Analysis (analyze)

Risk Scoring

# Score all nodes for risk
threatgraph analyze --method risk-score

# View top 10 highest-risk nodes
threatgraph analyze --method risk-score --top 10

# Specify custom scoring weights
threatgraph analyze --method risk-score \
  --weights "degree=0.3,betweenness=0.3,community=0.2,type=0.2"

Centrality Analysis

# Degree centrality analysis
threatgraph analyze --method degree-centrality

# Betweenness centrality analysis
threatgraph analyze --method betweenness-centrality

Community Detection

# Label propagation community detection
threatgraph analyze --method community-detection

# Specify iteration count
threatgraph analyze --method community-detection --iterations 100

Shortest Path

# Find the shortest path between two nodes
threatgraph analyze --method shortest-path \
  --source "192.168.1.100" --target "evil.com"

Attack Path Analysis

# Find all reachable malicious nodes from a given source
threatgraph analyze --method attack-path \
  --source "192.168.1.100" --target-type malware

3. Data Export (export)

# Export as JSON
threatgraph export --format json --output result.json

# Export as CSV
threatgraph export --format csv --output result.csv

# Export as SVG vector graphic
threatgraph export --format svg --output graph.svg

# Export as Mermaid syntax
threatgraph export --format mermaid --output graph.mmd

# Export as interactive HTML report
threatgraph export --format html --output report.html

4. Pre-built Templates (template)

# Phishing analysis template
threatgraph template phishing --ioc "suspicious-url.com" --ioc "attacker@evil.com"

# Malware tracing template
threatgraph template malware-trace --hash "a1b2c3d4e5f6..."

# APT investigation template
threatgraph template apt-investigation --cve "CVE-2024-0001" --domain "c2-server.com"

5. Graph Statistics (stats)

# View basic statistics
threatgraph stats

# View detailed statistics (including centrality metrics)
threatgraph stats --detailed

Example output:

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘           ThreatGraph Statistics Overview        โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘  Total Nodes:    1,234                           โ•‘
โ•‘  Total Edges:    3,456                           โ•‘
โ•‘  Node Types:     IP(456) Domain(234) Hash(189)  โ•‘
โ•‘  Relation Types: 12                              โ•‘
โ•‘  Communities:    8                               โ•‘
โ•‘  Storage Path:   ~/.threatgraph/graph.json       โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

6. Web Visualization (serve)

# Launch web service (default port 5000)
threatgraph serve

# Specify port and host
threatgraph serve --host 0.0.0.0 --port 8080

# Enable debug mode
threatgraph serve --debug

Web Visualization Interface
Fig: ThreatGraph-CLI Web Visualization โ€” Dark-themed D3.js force-directed graph

7. Interactive Query (query)

# Enter interactive query mode
threatgraph query

# Inside query mode:
# > find node 192.168.1.100
# > find edges from 192.168.1.100
# > shortest-path 192.168.1.100 evil.com
# > neighbors evil.com --depth 2
# > exit

๐Ÿ’ก Design Philosophy & Roadmap

Design Principles

ThreatGraph-CLI follows these core design principles:

  1. Unix philosophy: Each command does one thing well; compose complex analyses through pipelines
  2. Progressive enhancement: Zero dependencies for core features; optional dependencies installed on demand
  3. Data-driven: All analyses built on graph data structures, ensuring algorithmic generality and extensibility
  4. Analyst-first: CLI-native design tailored to security teams' daily workflows

Technology Choices

Choice Rationale
Pure Python core Maximizes portability; avoids C extension compilation issues
Flask Lightweight web framework aligned with the project's "lightweight" positioning
D3.js The most mature JavaScript visualization library with excellent force-directed graph support
networkx (optional) The most mature graph algorithm library in the Python ecosystem
JSON persistence Human-readable, easy to debug, no database dependency

Architecture Overview

graph TB
    subgraph Input["๐Ÿ“ฅ Input Layer"]
        CSV["CSV"]
        JSON_F["JSON"]
        YAML_F["YAML"]
        IOC["IOC Text"]
        STIX["STIX"]
    end

    subgraph Core["๐Ÿง  Core Layer"]
        Parser["Multi-format Parser"]
        GraphEngine["Graph Data Engine"]
        Algorithms["Algorithm Library"]
        Storage["Persistent Storage"]
    end

    subgraph Analysis["๐Ÿ” Analysis Layer"]
        RiskScore["Risk Scoring"]
        Centrality["Centrality Analysis"]
        Community["Community Detection"]
        PathFinder["Path Finding"]
        Timeline["Timeline Analysis"]
    end

    subgraph Output["๐Ÿ“ค Output Layer"]
        CLI["CLI Commands"]
        WebVis["Web Visualization"]
        Export["Multi-format Export"]
    end

    CSV --> Parser
    JSON_F --> Parser
    YAML_F --> Parser
    IOC --> Parser
    STIX --> Parser

    Parser --> GraphEngine
    GraphEngine --> Algorithms
    GraphEngine --> Storage

    GraphEngine --> RiskScore
    GraphEngine --> Centrality
    GraphEngine --> Community
    GraphEngine --> PathFinder
    GraphEngine --> Timeline

    RiskScore --> CLI
    Centrality --> CLI
    Community --> CLI
    PathFinder --> CLI
    Timeline --> CLI

    GraphEngine --> WebVis
    GraphEngine --> Export
Loading

Roadmap

  • v1.1: GraphML and GEXF format import/export support
  • v1.2: MITRE ATT&CK matrix auto-mapping integration
  • v1.3: Time series analysis module for threat trend prediction
  • v1.5: Plugin system for user-defined analysis algorithms
  • v2.0: Multi-graph correlation analysis with cross-investigation collaboration

๐Ÿ“ฆ Packaging & Deployment Guide

Install from Source

git clone https://github.com/gitstq/ThreatGraph-CLI.git
cd ThreatGraph-CLI
pip install .

Install via pip

pip install threatgraph-cli

Install Optional Dependencies

# Web visualization support
pip install threatgraph-cli[web]

# Enhanced algorithm support
pip install threatgraph-cli[enhanced]

# All optional dependencies
pip install threatgraph-cli[all]

Web Mode Deployment

# For production, we recommend using gunicorn
pip install gunicorn

# Launch the service
gunicorn -w 4 -b 0.0.0.0:8080 "threatgraph.web:create_app()"

# Or use the built-in command
threatgraph serve --host 0.0.0.0 --port 8080

Docker Deployment (Planned)

# Build the image
docker build -t threatgraph-cli .

# Run the container
docker run -d -p 8080:8080 -v ~/.threatgraph:/data threatgraph-cli

๐Ÿค Contributing

We welcome contributions of all kinds โ€” whether it's filing a bug report, improving documentation, or contributing new features.

Submitting a Pull Request

  1. Fork this repository
  2. Create a feature branch: git checkout -b feature/your-feature-name
  3. Commit your changes: git commit -m "feat: add your feature description"
  4. Push to remote: git push origin feature/your-feature-name
  5. Submit a Pull Request

Commit Convention

Please follow the Conventional Commits specification:

feat:     New feature
fix:      Bug fix
docs:     Documentation update
style:    Code formatting (no logic change)
refactor: Code refactoring
test:     Test-related changes
chore:    Build/tooling changes

Issue Guidelines

  • Search existing issues before submitting a new bug report to avoid duplicates
  • Bug reports must include: reproduction steps, expected behavior, actual behavior, and environment details
  • Feature requests should describe the use case and expected outcome

๐Ÿ“„ License

This project is licensed under the MIT License.

MIT License

Copyright (c) 2024 ThreatGraph-CLI Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

โญ If you find this project helpful, please give it a Star! โญ


Made with โค๏ธ by ThreatGraph-CLI Contributors

About

๐Ÿ›ก๏ธ Lightweight Cybersecurity Threat Graph Analysis Engine | ่ฝป้‡็บง็ฝ‘็ปœๅฎ‰ๅ…จๅจ่ƒๅ›พ่ฐฑๅˆ†ๆžๅผ•ๆ“Ž

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors