@@ -10238,8 +10304,8 @@
tscmWifiDevices.push(device);
updateTscmDisplays();
updateTscmThreatCounts();
- // Add to high interest if score >= 6
- if (device.score >= 6) {
+ // Add to findings panel if score >= 3 (review level or higher)
+ if (device.score >= 3) {
addHighInterestDevice(device, 'wifi');
}
}
@@ -10252,8 +10318,8 @@
tscmBtDevices.push(device);
updateTscmDisplays();
updateTscmThreatCounts();
- // Add to high interest if score >= 6
- if (device.score >= 6) {
+ // Add to threats panel if score >= 3 (review level or higher)
+ if (device.score >= 3) {
addHighInterestDevice(device, 'bluetooth');
}
}
@@ -10267,8 +10333,8 @@
tscmRfSignals.push(signal);
updateTscmDisplays();
updateTscmThreatCounts();
- // Add to high interest if score >= 6
- if (signal.score >= 6) {
+ // Add to findings panel if score >= 3 (review level or higher)
+ if (signal.score >= 3) {
addHighInterestDevice(signal, 'rf');
}
}
@@ -10297,21 +10363,28 @@
function updateHighInterestPanel() {
const panel = document.getElementById('tscmThreatList');
if (tscmHighInterestDevices.length === 0) {
- panel.innerHTML = '
' + tscmHighInterestDevices.map(d => `
-
+ // Sort by score (highest first)
+ const sorted = [...tscmHighInterestDevices].sort((a, b) => b.score - a.score);
+ panel.innerHTML = '
' + sorted.map(d => {
+ const severityClass = d.score >= 6 ? 'critical' : d.score >= 4 ? 'high' : 'medium';
+ return `
+
${escapeHtml(d.name)}
- ${d.indicators.slice(0, 2).map(i => i.desc || i.type).join(' | ')}
+
+ ${d.indicators && d.indicators.length > 0 ? d.indicators.slice(0, 2).map(i => i.desc || i.type).join(' | ') : 'Review recommended'}
+
-
${d.recommended_action || 'investigate'}
+
${d.recommended_action || 'review'}
- `).join('') + '
';
+ `;
+ }).join('') + '
';
}
}
@@ -10537,6 +10610,110 @@
document.getElementById('tscmDeviceModal').style.display = 'none';
}
+ function showDevicesByCategory(category) {
+ const modal = document.getElementById('tscmDeviceModal');
+ const content = document.getElementById('tscmDeviceModalContent');
+
+ let devices = [];
+ let title = '';
+ let titleClass = '';
+
+ if (category === 'correlations') {
+ // Show correlations
+ title = 'Cross-Protocol Correlations';
+ titleClass = 'classification-yellow';
+
+ if (tscmCorrelations.length === 0) {
+ content.innerHTML = `
+
+
+
No correlations detected yet.
+
+ `;
+ } else {
+ content.innerHTML = `
+
+
+ ${tscmCorrelations.map(c => `
+
+
${escapeHtml(c.description || 'Cross-protocol match')}
+
+ Protocols: ${(c.protocols || []).join(', ')}
+ Devices: ${(c.devices || []).join(', ')}
+
+
+ `).join('')}
+
+ `;
+ }
+ modal.style.display = 'flex';
+ return;
+ }
+
+ // Filter devices by classification
+ const allDevices = [
+ ...tscmWifiDevices.map(d => ({...d, protocol: 'wifi', id: d.bssid})),
+ ...tscmBtDevices.map(d => ({...d, protocol: 'bluetooth', id: d.mac})),
+ ...tscmRfSignals.map(d => ({...d, protocol: 'rf', id: d.frequency}))
+ ];
+
+ if (category === 'high_interest') {
+ devices = allDevices.filter(d => d.classification === 'high_interest');
+ title = 'High Interest Devices';
+ titleClass = 'classification-red';
+ } else if (category === 'review') {
+ devices = allDevices.filter(d => d.classification === 'review');
+ title = 'Devices Needing Review';
+ titleClass = 'classification-yellow';
+ } else if (category === 'informational') {
+ devices = allDevices.filter(d => d.classification === 'informational');
+ title = 'Informational Devices';
+ titleClass = 'classification-green';
+ }
+
+ // Sort by score descending
+ devices.sort((a, b) => (b.score || 0) - (a.score || 0));
+
+ if (devices.length === 0) {
+ content.innerHTML = `
+
+
+
No devices in this category.
+
+ `;
+ } else {
+ content.innerHTML = `
+
+
+ ${devices.map(d => `
+
+
+
+ ${d.protocol}
+ ${d.indicators ? d.indicators.slice(0, 2).map(i => `${i.type}`).join('') : ''}
+
+
+ `).join('')}
+
+ `;
+ }
+ modal.style.display = 'flex';
+ }
+
function updateTscmDisplays() {
// Update WiFi list
const wifiList = document.getElementById('tscmWifiList');