diff --git a/src/components/ToolCard.astro b/src/components/ToolCard.astro index b7454a7..6f2b846 100644 --- a/src/components/ToolCard.astro +++ b/src/components/ToolCard.astro @@ -2,6 +2,7 @@ export interface Props { tool: { name: string; + type?: string; description: string; domains: string[]; phases: string[]; @@ -19,6 +20,9 @@ export interface Props { const { tool } = Astro.props; +// Check if this is a method vs software +const isMethod = tool.type === 'method'; + // Check if tool has a valid project URL (means we're hosting it) const hasValidProjectUrl = tool.projectUrl !== undefined && tool.projectUrl !== null && @@ -28,19 +32,22 @@ const hasValidProjectUrl = tool.projectUrl !== undefined && // Check if tool has knowledgebase entry const hasKnowledgebase = tool.knowledgebase === true; -// Determine card styling based on hosting status (derived from projectUrl) -const cardClass = hasValidProjectUrl ? 'card card-hosted tool-card' : (tool.license !== 'Proprietary' ? 'card card-oss tool-card' : 'card tool-card'); +// Determine card styling based on type and hosting status +const cardClass = isMethod ? 'card card-method tool-card' : + hasValidProjectUrl ? 'card card-hosted tool-card' : + (tool.license !== 'Proprietary' ? 'card card-oss tool-card' : 'card tool-card'); --- -
- +
+

{tool.name}

-
- {hasValidProjectUrl && CC24-Server} - {tool.license !== 'Proprietary' && OSS} - {hasKnowledgebase && 📖} -
+
+ {isMethod && Methode} + {!isMethod && hasValidProjectUrl && Self-Hosted} + {!isMethod && tool.license !== 'Proprietary' && OSS} + {hasKnowledgebase && 📖} +
@@ -77,7 +84,7 @@ const cardClass = hasValidProjectUrl ? 'card card-hosted tool-card' : (tool.lice - {tool.license === 'Proprietary' ? 'Prop.' : tool.license.split(' ')[0]} + {isMethod ? 'Methode' : tool.license === 'Proprietary' ? 'Prop.' : tool.license?.split(' ')[0]}
@@ -91,7 +98,12 @@ const cardClass = hasValidProjectUrl ? 'card card-hosted tool-card' : (tool.lice
- {hasValidProjectUrl ? ( + {isMethod ? ( + + + Zur Methode + + ) : hasValidProjectUrl ? (
diff --git a/src/components/ToolFilters.astro b/src/components/ToolFilters.astro index 6d8d751..be04c21 100644 --- a/src/components/ToolFilters.astro +++ b/src/components/ToolFilters.astro @@ -251,6 +251,11 @@ const sortedTags = Object.entries(tagFrequency) tool.projectUrl.trim() !== ""; } + // Check if item is a method + function isMethod(tool) { + return tool.type === 'method'; + } + // Update matrix highlighting based on current filters function updateMatrixHighlighting() { const currentView = document.querySelector('.view-toggle.active')?.getAttribute('data-view'); @@ -324,8 +329,8 @@ const sortedTags = Object.entries(tagFrequency) return false; } - // Proprietary filter - if (!includeProprietary && tool.license === 'Proprietary') { + // Proprietary filter (skip for methods since they don't have licenses) + if (!includeProprietary && !isMethod(tool) && tool.license === 'Proprietary') { return false; } @@ -337,21 +342,30 @@ const sortedTags = Object.entries(tagFrequency) return true; }); - // Sort filtered results: server-based first, proprietary last +// Sort filtered results: methods first, then self-hosted, then OSS, proprietary last filtered.sort((a, b) => { + const aMethod = isMethod(a); + const bMethod = isMethod(b); const aHosted = isToolHosted(a); const bHosted = isToolHosted(b); - const aProprietary = a.license === 'Proprietary'; - const bProprietary = b.license === 'Proprietary'; + const aProprietary = !aMethod && a.license === 'Proprietary'; + const bProprietary = !bMethod && b.license === 'Proprietary'; - // Self-hosted tools first (regardless of license) - if (aHosted && !bHosted) return -1; - if (!aHosted && bHosted) return 1; + // Methods first + //if (aMethod && !bMethod) return -1; + //if (!aMethod && bMethod) return 1; - // If both have same hosting status, proprietary tools go last - if (aHosted === bHosted) { - if (!aProprietary && bProprietary) return -1; - if (aProprietary && !bProprietary) return 1; + // If both are methods or both are tools + if (aMethod === bMethod) { + // Self-hosted tools first (regardless of license) + if (aHosted && !bHosted) return -1; + if (!aHosted && bHosted) return 1; + + // If both have same hosting status, proprietary tools go last + if (aHosted === bHosted) { + if (!aProprietary && bProprietary) return -1; + if (aProprietary && !bProprietary) return 1; + } } return 0; @@ -359,7 +373,6 @@ const sortedTags = Object.entries(tagFrequency) // Update matrix highlighting updateMatrixHighlighting(); - // Emit custom event with filtered results window.dispatchEvent(new CustomEvent('toolsFiltered', { detail: filtered })); } diff --git a/src/components/ToolMatrix.astro b/src/components/ToolMatrix.astro index 8e91b4b..d1d3bd0 100644 --- a/src/components/ToolMatrix.astro +++ b/src/components/ToolMatrix.astro @@ -107,13 +107,17 @@ domains.forEach((domain: any) => { {phases.map((phase: any) => ( {matrix[domain.id][phase.id].map((tool: any) => { + const isMethod = tool.type === 'method'; const hasValidProjectUrl = tool.projectUrl !== undefined && tool.projectUrl !== null && tool.projectUrl !== "" && tool.projectUrl.trim() !== ""; + const chipClass = isMethod ? 'tool-chip-method' : + hasValidProjectUrl ? 'tool-chip-hosted' : + tool.license !== 'Proprietary' ? 'tool-chip-oss' : ''; return ( { // Re-populate with filtered tools based on domains × phases filtered.forEach(tool => { + const isMethod = tool.type === 'method'; const hasValidProjectUrl = tool.projectUrl !== undefined && tool.projectUrl !== null && tool.projectUrl !== "" && @@ -405,7 +410,10 @@ domains.forEach((domain: any) => { const cell = document.querySelector(`[data-domain="${domain}"][data-phase="${phase}"]`); if (cell) { const chip = document.createElement('span'); - chip.className = `tool-chip ${hasValidProjectUrl ? 'tool-chip-hosted' : tool.license !== 'Proprietary' ? 'tool-chip-oss' : ''}`; + const chipClass = isMethod ? 'tool-chip-method' : + hasValidProjectUrl ? 'tool-chip-hosted' : + tool.license !== 'Proprietary' ? 'tool-chip-oss' : ''; + chip.className = `tool-chip ${chipClass}`; chip.setAttribute('title', `${tool.name}${tool.knowledgebase === true ? ' (KB verfügbar)' : ''}`); chip.innerHTML = `${tool.name}${tool.knowledgebase === true ? '📖' : ''}`; chip.onclick = () => window.showToolDetails(tool.name); diff --git a/src/data/tools.yaml b/src/data/tools.yaml index ef10c6d..3bfba51 100644 --- a/src/data/tools.yaml +++ b/src/data/tools.yaml @@ -1,5 +1,6 @@ tools: - name: Autopsy + type: software description: >- Die führende Open-Source-Alternative zu kommerziellen Forensik-Suiten mit intuitiver grafischer Oberfläche. Besonders stark in der Timeline-Analyse, @@ -34,6 +35,7 @@ tools: - artifact-extraction - keyword-search - name: Volatility 3 + type: software description: >- Das Schweizer Taschenmesser der Memory-Forensik, unverzichtbar für die Analyse von RAM-Dumps. Mit über 100 Plugins extrahiert es Prozesse, @@ -69,6 +71,7 @@ tools: - scripting - process-analysis - name: TheHive 5 + type: software description: >- Moderne Security-Orchestrierungs-Plattform für die koordinierte Incident-Response im Team. Integriert nahtlos mit MISP, Cortex und anderen @@ -103,6 +106,7 @@ tools: - incident-tracking statusUrl: https://uptime.example.lab/api/badge/1/status - name: MISP + type: software description: >- Das Rückgrat des modernen Threat-Intelligence-Sharings mit über 40.000 aktiven Instanzen weltweit. Ermöglicht den strukturierten Austausch von @@ -136,6 +140,7 @@ tools: - automation statusUrl: https://status.mikoshi.de/api/badge/34/status - name: Timesketch + type: software description: >- Google's Open-Source-Lösung für kollaborative Timeline-Analyse großer Datensätze. Visualisiert und korreliert Ereignisse aus verschiedenen @@ -168,6 +173,7 @@ tools: - correlation statusUrl: https://uptime.example.lab/api/badge/3/status - name: Wireshark + type: software description: >- Der unangefochtene König der Netzwerk-Protokoll-Analyse mit Support für über 3000 Protokolle. Unverzichtbar für die Untersuchung von @@ -203,6 +209,7 @@ tools: - visualization - filtering - name: Magnet AXIOM + type: software description: >- Die Rolls-Royce unter den kommerziellen Forensik-Suiten mit beeindruckender Automatisierung. Glänzt besonders bei Cloud-Forensik mit @@ -237,6 +244,7 @@ tools: - automated-analysis - reporting - name: Cellebrite UFED + type: software description: >- Der Goldstandard der mobilen Forensik mit legendären Entsperrungsfähigkeiten für aktuelle Smartphones. Nutzt Zero-Day-Exploits @@ -268,6 +276,7 @@ tools: - hardware-interface - automated-analysis - name: Cuckoo Sandbox 3 + type: software description: >- Die führende Open-Source-Sandbox für automatisierte Malware-Analyse in isolierten Umgebungen. Zeichnet Systemaufrufe, Netzwerkverkehr und @@ -299,6 +308,7 @@ tools: - virtualization - automated-analysis - name: Ghidra + type: software description: >- NSAs Geschenk an die Reverse-Engineering-Community als mächtige Alternative zu IDA Pro. Der Decompiler verwandelt Maschinencode zurück in @@ -330,6 +340,7 @@ tools: - scripting - static-analysis - name: Plaso (log2timeline) + type: software description: >- Der industrielle Staubsauger für Zeitstempel - extrahiert aus hunderten Quellen eine Super-Timeline. Parst Windows-Event-Logs, Browser-Historie, @@ -364,6 +375,7 @@ tools: - artifact-extraction - scripting - name: CyberChef + type: software description: >- Das digitale Schweizer Taschenmesser für Daten-Manipulation mit über 300 Operations. Von Base64-Dekodierung über Verschlüsselung bis zur @@ -395,6 +407,7 @@ tools: - visualization - parsing - name: Velociraptor + type: software description: >- Die nächste Evolution der Endpoint-Forensik mit skalierbarer Remote-Collection-Architektur. Die mächtige VQL-Abfragesprache ermöglicht @@ -434,6 +447,7 @@ tools: - hunting statusUrl: https://status.mikoshi.de/api/badge/33/status - name: GRR Rapid Response + type: software description: >- Googles Antwort auf Enterprise-Scale-Forensik für die Untersuchung von Flotten mit tausenden Clients. Sammelt gezielt Artefakte und führt @@ -469,6 +483,7 @@ tools: - live-forensics - fleet-management - name: Arkime + type: software description: >- Das Heavy-Metal-Tool für Full-Packet-Capture mit der Fähigkeit, Petabytes an Netzwerkverkehr zu speichern. Indiziert in Echtzeit Metadaten für @@ -502,6 +517,7 @@ tools: - api - big-data - name: NetworkMiner + type: software description: >- Der benutzerfreundliche kleine Bruder von Wireshark mit Fokus auf Forensik statt Live-Analyse. Extrahiert automatisch übertragene Dateien, Bilder und @@ -534,6 +550,7 @@ tools: - parsing - session-reconstruction - name: ExifTool + type: software description: >- Der Metadaten-Maestro, der aus über 1000 Dateiformaten verborgene Informationen extrahiert. Findet GPS-Koordinaten in Fotos, Autoren in @@ -568,6 +585,7 @@ tools: - scripting - batch-processing - name: Chainalysis + type: software description: >- Der Platzhirsch der Blockchain-Forensik mit Zugriff auf die größte Krypto-Intelligence-Datenbank weltweit. Clustering-Algorithmen @@ -598,6 +616,7 @@ tools: - api - reporting - name: Neo4j + type: software description: >- Die führende Graph-Datenbank verwandelt komplexe Beziehungsgeflechte in verständliche Visualisierungen. Mit Cypher-Queries lassen sich @@ -635,6 +654,7 @@ tools: - query-language statusUrl: https://status.mikoshi.de/api/badge/32/status - name: QGIS + type: software description: >- Das Open-Source-GIS-Kraftpaket für die Visualisierung von Geodaten in forensischen Untersuchungen. Erstellt aus GPS-Logs von Smartphones @@ -667,6 +687,7 @@ tools: - scripting - reporting - name: Nextcloud + type: software description: >- Die Open-Source-Cloud-Suite als sichere Kollaborations-Zentrale für Forensik-Teams. Bietet verschlüsselte Dateifreigabe, Office-Integration @@ -703,6 +724,7 @@ tools: - document-management statusUrl: https://status.mikoshi.de/api/badge/11/status - name: Gitea + type: software description: >- Das leichtgewichtige Git-Repository für die Versionierung von Forensik-Skripten und Dokumentation. Perfekt für die Verwaltung von @@ -733,6 +755,7 @@ tools: - ci-cd statusUrl: https://status.mikoshi.de/api/badge/18/status - name: Binwalk + type: software description: >- Der Firmware-Flüsterer, der aus IoT-Geräten und Routern ihre Geheimnisse extrahiert. Erkennt eingebettete Dateisysteme, komprimierte Archive und @@ -763,6 +786,7 @@ tools: - extraction - scripting - name: LibreOffice + type: software description: >- Die freie Office-Suite, die mehr kann als nur Berichte schreiben. Calc eignet sich hervorragend für die Analyse von CSV-Exporten und Log-Dateien. @@ -802,6 +826,7 @@ tools: - data-processing - scripting - name: Microsoft Office 365 + type: software description: >- Der Industriestandard für professionelle Dokumentation mit nahtloser Cloud-Integration. Excel's Power Query verwandelt komplexe @@ -842,6 +867,7 @@ tools: - cloud-based - reporting - name: GraphSense + type: software description: >- Die europäische Alternative zu Chainalysis mit Open-Source-Kern und Fokus auf Privatsphäre. Clustering-Qualität noch nicht auf Chainalysis-Niveau, @@ -872,6 +898,7 @@ tools: - api - big-data - name: FTK Imager + type: software description: >- Der Oldtimer unter den Imaging-Tools, aber immer noch zuverlässig wie ein Schweizer Uhrwerk. Erstellt bit-genaue Kopien von Festplatten mit @@ -901,6 +928,7 @@ tools: - verification - write-blocking - name: Guymager + type: software description: >- Das schlanke Linux-Imaging-Tool mit Fokus auf Performance und Zuverlässigkeit. Multi-threaded Design nutzt moderne CPUs optimal für @@ -929,6 +957,7 @@ tools: - multi-threading - write-blocking - name: Fuji + type: software description: >- Der Geheimtipp für macOS-Forensiker - Live-Imaging ohne Kernel-Modifikationen. Umgeht geschickt Apples Sicherheitsmechanismen für @@ -957,6 +986,7 @@ tools: - filesystem - macos-specific - name: ALEAPP + type: software description: >- Android-Forensik leicht gemacht - parst dutzende Apps und System-Artefakte automatisch. Von WhatsApp-Chats über Standortdaten bis zu gelöschten @@ -989,6 +1019,7 @@ tools: - reporting - timeline-analysis - name: iLEAPP + type: software description: >- Das iOS-Pendant zu ALEAPP mit Fokus auf Apple's geschlossenem Ökosystem. Extrahiert versteckte Schätze aus iPhone-Backups inklusive gelöschter @@ -1021,6 +1052,7 @@ tools: - reporting - ios-specific - name: VLEAPP + type: software description: >- Die Zukunft der Fahrzeug-Forensik für vernetzte Autos und Infotainment-Systeme. Parst CAN-Bus-Daten, GPS-Tracks und @@ -1052,6 +1084,7 @@ tools: - gps-analysis - can-bus - name: Kali Linux + type: software description: >- Die Schweizer Armee-Messer-Distribution mit über 600 vorinstallierten Security-Tools. Von Forensik über Penetration Testing bis Reverse @@ -1086,6 +1119,7 @@ tools: - virtualization - arm-support - name: dd + type: software description: >- Das Unix-Urgestein für bit-genaues Kopieren von Datenträgern seit 1974. Minimalistisch aber mächtig - der Goldstandard für forensische Disk-Images @@ -1115,6 +1149,7 @@ tools: - unix-tool - scripting - name: dcfldd + type: software description: >- Die forensische Weiterentwicklung von dd mit eingebauter Hash-Verifizierung. Zeigt Fortschrittsbalken, splittet große Images und @@ -1143,6 +1178,7 @@ tools: - progress-monitoring - split-output - name: ewfacquire + type: software description: >- Das Kommandozeilen-Tool für Expert Witness Format (E01) Images mit Kompression. Teil der libewf-Suite, erstellt gerichtsfeste Images mit @@ -1172,6 +1208,7 @@ tools: - metadata - verification - name: PhotoRec + type: software description: >- Der Datenretter in der Not - findet gelöschte Dateien ohne Dateisystem-Strukturen. Signature-basiertes Carving für über 300 @@ -1203,6 +1240,7 @@ tools: - signature-based - cross-platform - name: Kismet + type: software description: >- Der WLAN-Schnüffler der Extraklasse für Wireless-Forensik und Sicherheitsaudits. Passives Monitoring deckt versteckte Netzwerke, Rogue @@ -1232,6 +1270,7 @@ tools: - passive-scanning - api - name: OSFMount + type: software description: >- Mountet Disk-Images als virtuelle Laufwerke unter Windows für komfortable Analyse. Unterstützt alle gängigen Formate von RAW über E01 bis zu @@ -1260,6 +1299,7 @@ tools: - virtual-drive - format-support - name: Thumbcache Viewer + type: software description: >- Spezialist für Windows Thumbnail-Caches mit Zugriff auf gelöschte Bildvorschauen. Extrahiert Thumbnails aus thumbcache_*.db Dateien @@ -1289,6 +1329,7 @@ tools: - thumbnail-extraction - deleted-data - name: RegRipper + type: software description: >- Der Windows-Registry-Experte mit hunderten Plugins für automatisierte Analyse. Extrahiert USB-Historie, installierte Software, @@ -1320,6 +1361,7 @@ tools: - plugin-system - artifact-extraction - name: YARA + type: software description: >- Die Pattern-Matching-Engine für Malware-Jäger und Threat Hunter. Regelbasierte Suche nach Strings, Byte-Sequenzen und regulären Ausdrücken. @@ -1351,6 +1393,7 @@ tools: - library - signature-based - name: Strings + type: software description: >- Das simple Tool mit großer Wirkung - extrahiert lesbare Texte aus Binärdateien. Findet URLs, Passwörter, Pfade und andere @@ -1381,6 +1424,7 @@ tools: - text-search - cross-platform - name: MaxMind GeoIP + type: software description: >- Die Geolocation-Datenbank für IP-Adressen-Zuordnung zu Ländern und Städten. Unverzichtbar für die Analyse von Netzwerk-Logs und @@ -1412,6 +1456,7 @@ tools: - enrichment - library - name: SIFT Workstation + type: software description: >- SANS' kuratierte Ubuntu-Distribution vollgepackt mit Forensik-Tools und Skripten. Über 500 Tools vorinstalliert, vorkonfiguriert und dokumentiert @@ -1443,6 +1488,7 @@ tools: - documentation - ubuntu-based - name: Tsurugi Linux + type: software description: >- Die von Forensikern entwickelte Forensik-Distribution mit Fokus auf Benutzerfreundlichkeit. Besonders stark bei Mobile- und Malware-Forensik @@ -1472,6 +1518,7 @@ tools: - mobile-focus - lightweight - name: Parrot Security OS + type: software description: >- Die Datenschutz-fokussierte Alternative zu Kali mit Forensik-Werkzeugen. AnonSurf für anonymisierte Ermittlungen und verschlüsselte Kommunikation @@ -1502,6 +1549,7 @@ tools: - lightweight - anonymization - name: Eric Zimmerman Tools + type: software description: >- Die Tool-Sammlung des Windows-Forensik-Gurus für Artefakt-Analyse. Von ShellBags über Prefetch bis zu Amcache - jedes Tool ein Spezialist. Die @@ -1530,6 +1578,7 @@ tools: - tool-collection - artifact-extraction - name: Impacket + type: software description: >- Python-Bibliothek für Netzwerk-Protokoll-Manipulation und Windows-Forensik. Ermöglicht Remote-Zugriff auf Windows-Systeme für @@ -1562,6 +1611,7 @@ tools: - scripting - api - name: RSA NetWitness + type: software description: >- Enterprise-Grade SIEM und Forensik-Plattform für große Netzwerke. Korreliert Logs, Packets und Endpoints für 360-Grad-Sicht auf Incidents. @@ -1593,6 +1643,7 @@ tools: - machine-learning - enterprise - name: X-Ways Forensics + type: software description: >- Der deutsche Präzisionsskalpell unter den Forensik-Tools mit unübertroffener Effizienz. Besonders geschätzt für blitzschnelle Searches @@ -1622,6 +1673,7 @@ tools: - german-made - hex-editor - name: EnCase + type: software description: >- Der Veteran der kommerziellen Forensik-Tools mit 25 Jahren Gerichtserfahrung. EnScript-Programmierung ermöglicht maßgeschneiderte @@ -1652,6 +1704,7 @@ tools: - certification - scripting - name: FRED + type: software description: >- Forensic Recovery of Evidence Device - spezialisierte Hardware für Imaging. Kombiniert Write-Blocker, Imager und Analyse-Workstation in einem @@ -1680,6 +1733,7 @@ tools: - professional-lab - integrated-system - name: ICSpector + type: software description: >- Ein von Microsoft entwickeltes Open-Source-Framework, das eine besondere Nische bedient: Die Datensammlung bei Industriekontrollsystemen und @@ -1703,6 +1757,104 @@ tools: - python - binary - scripting + - name: "Live Memory Acquisition Procedure" + type: method + description: >- + Standardisiertes Verfahren zur forensisch korrekten Akquisition des + Arbeitsspeichers laufender Systeme. Umfasst Bewertung der + Systemkritikalität, Auswahl geeigneter Tools, Minimierung der + System-Kontamination und Dokumentation der Chain of Custody. Essentiell + für die Sicherung flüchtiger Beweise wie Prozess-Informationen, + Netzwerkverbindungen und Verschlüsselungsschlüssel. + domains: + - incident-response + - law-enforcement + - malware-analysis + phases: + - data-collection + platforms: [] + domain-agnostic-software: null + skillLevel: advanced + accessType: null + url: https://www.nist.gov/publications/guide-integrating-forensic-techniques-incident-response + projectUrl: + license: null + knowledgebase: false + tags: + - memory-acquisition + - volatile-evidence + - live-forensics + - ram-dump + - evidence-preservation + - procedure + - name: "Rapid Incident Response Triage on macOS" + type: method + description: >- + Spezialisierte Methodik für die schnelle Incident Response auf + macOS-Systemen mit Fokus auf die Sammlung kritischer forensischer + Artefakte in unter einer Stunde. Adressiert die Lücke zwischen + Windows-zentrierten IR-Prozessen und macOS-spezifischen + Sicherheitsarchitekturen. Nutzt Tools wie Aftermath für effiziente + Datensammlung ohne zeitaufwändige Full-Disk-Images. Besonders wertvoll + für Unternehmensumgebungen mit gemischten Betriebssystem-Landschaften. + domains: + - incident-response + - law-enforcement + - malware-analysis + phases: + - data-collection + - examination + platforms: [] + domain-agnostic-software: null + skillLevel: intermediate + accessType: null + url: https://www.sans.org/white-papers/rapid-incident-response-on-macos-actionable-insights-under-hour/ + projectUrl: + license: null + knowledgebase: + tags: + - macos + - rapid-response + - triage + - incident-response + - aftermath + - enterprise + - methodology + - apple + - name: "Aftermath" + type: software + description: >- + Jamf's Open-Source-Tool für die schnelle Sammlung forensischer Artefakte + auf macOS-Systemen. Sammelt kritische Daten wie Prozessinformationen, + Netzwerkverbindungen, Dateisystem-Metadaten und Systemkonfigurationen + ohne Full-Disk-Imaging. Speziell entwickelt für die Rapid-Response-Triage + in Enterprise-Umgebungen mit macOS-Geräten. Normalisiert Zeitstempel und + erstellt durchsuchbare Ausgabeformate für effiziente Analyse. + domains: + - incident-response + - law-enforcement + - malware-analysis + phases: + - data-collection + - examination + platforms: + - macOS + domain-agnostic-software: null + skillLevel: intermediate + accessType: download + url: https://github.com/jamf/aftermath/ + projectUrl: '' + license: Apache 2.0 + knowledgebase: false + tags: + - macos + - incident-response + - triage + - artifact-collection + - rapid-response + - jamf + - enterprise + - commandline domains: - id: incident-response name: Incident Response & Breach-Untersuchung diff --git a/src/pages/index.astro b/src/pages/index.astro index 3587d74..a532fd9 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -337,6 +337,7 @@ const tools = data.tools; (window as any).switchToAIView = () => switchToView('ai'); function createToolCard(tool) { + const isMethod = tool.type === 'method'; const hasValidProjectUrl = tool.projectUrl !== undefined && tool.projectUrl !== null && tool.projectUrl !== "" && @@ -345,7 +346,9 @@ function createToolCard(tool) { const hasKnowledgebase = tool.knowledgebase === true; const cardDiv = document.createElement('div'); - const cardClass = hasValidProjectUrl ? 'card card-hosted tool-card' : (tool.license !== 'Proprietary' ? 'card card-oss tool-card' : 'card tool-card'); + const cardClass = isMethod ? 'card card-method tool-card' : + hasValidProjectUrl ? 'card card-hosted tool-card' : + (tool.license !== 'Proprietary' ? 'card card-oss tool-card' : 'card tool-card'); cardDiv.className = cardClass; cardDiv.style.cursor = 'pointer'; cardDiv.onclick = () => (window as any).showToolDetails(tool.name); @@ -354,8 +357,9 @@ function createToolCard(tool) {

${tool.name}

- ${hasValidProjectUrl ? 'CC24-Server' : ''} - ${tool.license !== 'Proprietary' ? 'OSS' : ''} + ${isMethod ? 'Methode' : ''} + ${!isMethod && hasValidProjectUrl ? 'Self-Hosted' : ''} + ${!isMethod && tool.license !== 'Proprietary' ? 'OSS' : ''} ${hasKnowledgebase ? '📖' : ''}
@@ -392,7 +396,7 @@ function createToolCard(tool) { - ${tool.license === 'Proprietary' ? 'Prop.' : tool.license.split(' ')[0]} + ${isMethod ? 'Methode' : tool.license === 'Proprietary' ? 'Prop.' : tool.license?.split(' ')[0] || 'N/A'}
@@ -402,7 +406,11 @@ function createToolCard(tool) {
- ${hasValidProjectUrl ? ` + ${isMethod ? ` + + Zur Methode + + ` : hasValidProjectUrl ? `
Homepage diff --git a/src/styles/global.css b/src/styles/global.css index 45f387e..6e1d18f 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -26,6 +26,8 @@ --color-hosted-bg: #f3f0ff; --color-oss: #10b981; --color-oss-bg: #ecfdf5; + --color-method: #3a90ed; + --color-method-bg: #f3f4f6; --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 5%); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 10%); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%); @@ -53,6 +55,8 @@ --color-hosted-bg: #2e1065; --color-oss: #34d399; --color-oss-bg: #064e3b; + --color-method: #8bbdfa; + --color-method-bg: #2e4e81; --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 30%); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 40%); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 50%); @@ -278,6 +282,11 @@ input[type="checkbox"] { border-color: var(--color-oss); } +.card-method { + background-color: var(--color-method-bg); + border-color: var(--color-method); +} + .grid-auto-fit { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 350px)); @@ -390,6 +399,10 @@ input[type="checkbox"] { background: linear-gradient(to right, transparent 0%, var(--color-oss-bg) 70%); } +.card-method .tool-tags-container::after { + background: linear-gradient(to right, transparent 0%, var(--color-method-bg) 70%); +} + .tool-card-buttons { margin-top: auto; flex-shrink: 0; @@ -538,6 +551,11 @@ input[type="checkbox"] { color: white; } +.tool-chip-method { + background-color: var(--color-method); + color: white; +} + /* Consolidated Badge System */ .badge { display: inline-flex; diff --git a/src/utils/dataService.ts b/src/utils/dataService.ts index 2b4bce0..1c44eb1 100644 --- a/src/utils/dataService.ts +++ b/src/utils/dataService.ts @@ -5,19 +5,20 @@ import { z } from 'zod'; const ToolSchema = z.object({ name: z.string(), + type: z.string(), description: z.string(), domains: z.array(z.string()).optional().nullable().default([]), phases: z.array(z.string()).optional().nullable().default([]), platforms: z.array(z.string()).default([]), skillLevel: z.string(), url: z.string(), - license: z.string(), + license: z.string().optional().nullable(), tags: z.array(z.string()).default([]), // Optional fields that can be null, undefined, or empty projectUrl: z.string().optional().nullable(), knowledgebase: z.boolean().optional().nullable(), statusUrl: z.string().optional().nullable(), - accessType: z.string().optional(), + accessType: z.string().optional().nullable(), 'domain-agnostic-software': z.array(z.string()).optional().nullable(), });