|
|
--- |
|
|
license: cc-by-nc-nd-4.0 |
|
|
language: |
|
|
- en |
|
|
- de |
|
|
tags: |
|
|
- automotive |
|
|
- IDS |
|
|
- CAN |
|
|
- CANIDS |
|
|
- AutomotiveSecurity |
|
|
- Cybersecurity |
|
|
--- |
|
|
|
|
|
# CANDefender – Fuzzy Attack Detection Model |
|
|
|
|
|
**Model Summary** |
|
|
This model detects **Fuzzy attacks** on the CAN bus. It was trained on **4.73 million** real CAN frames, including normal data and Fuzzy-labeled data. The model uses an LSTM architecture that processes the CAN ID and 8-byte payload to classify each frame as either “Fuzzy” or “Normal.” |
|
|
|
|
|
--- |
|
|
|
|
|
## Performance |
|
|
|
|
|
**Test Accuracy**: ~94.09% |
|
|
**Confusion Matrix** (Fuzzy vs. Normal): |
|
|
|
|
|
| True \ Pred | Fuzzy (pred) | Normal (pred) | |
|
|
|:-----------:|:-------------:|:-------------:| |
|
|
| **Fuzzy** | 3,737,645 | 13,379 | |
|
|
| **Normal** | 266,808 | 722,063 | |
|
|
|
|
|
- **Recall (Fuzzy)**: ~99.6% (very few Fuzzy frames missed) |
|
|
- **Recall (Normal)**: ~73% (about 27% false positives on Normal) |
|
|
|
|
|
--- |
|
|
|
|
|
## Intended Use |
|
|
|
|
|
- **Goal**: Real-time detection of **Fuzzy attacks** on the CAN bus. |
|
|
- **Limitations**: |
|
|
- Focused on Fuzzy vs. Normal classification only (other attacks handled in separate models). |
|
|
- Tends to misclassify ~27% of normal frames as Fuzzy (relatively high false alarms). |
|
|
|
|
|
--- |
|
|
|
|
|
## How to Use |
|
|
|
|
|
```python |
|
|
import torch |
|
|
import numpy as np |
|
|
from can_defender_fuzzy import CANLSTM # Adjust import name |
|
|
|
|
|
# Example frame => [CAN_ID, b0..b7] |
|
|
frame = [0x315, 0x12, 0x4F, 0xA2, 0x00, 0x00, 0x78, 0x1C, 0xAA] |
|
|
|
|
|
x_np = np.array(frame, dtype=np.float32).reshape(1,1,9) |
|
|
|
|
|
model = CANLSTM(input_dim=9, hidden_dim=64, num_classes=2) |
|
|
model.load_state_dict(torch.load("can_lstm_model_final.pt")) |
|
|
model.eval() |
|
|
|
|
|
with torch.no_grad(): |
|
|
logits = model(torch.from_numpy(x_np)) |
|
|
pred = torch.argmax(logits, dim=1).item() |
|
|
print("Prediction:", "Fuzzy" if pred == 0 else "Normal") |
|
|
``` |
|
|
|
|
|
## Training Configuration |
|
|
- Architecture: LSTM (64 hidden units), final linear layer → 2 classes (Fuzzy vs. Normal) |
|
|
- Optimizer: Adam (lr=1e-3) |
|
|
- Epochs: ~30 (stopped once performance stabilized) |
|
|
- Dataset: 4.73 million CAN frames |
|
|
## Limitations & Next Steps |
|
|
- False Positives: ~27% of normal frames get labeled as Fuzzy. Acceptable for high-sensitivity scenarios, but can be improved (weighted loss, time-window approach, etc.). |
|
|
- Scope: Only focuses on Fuzzy detection. Other attacks (DoS, Gear, RPM) are separate. |
|
|
# Potential Enhancements: |
|
|
- Weighted training or additional features (delta-time, frequency) |
|
|
- Window-based LSTM or transformers for sequence data |
|
|
|
|
|
## License & Contact |
|
|
- License: cc-by-nc-nd-4.0 |
|
|
- Author: Keyvan Hardani |
|
|
- Contact: https://www.linkedin.com/in/keyvanhardani/ |