|
--- |
|
license: cc-by-nc-nd-4.0 |
|
language: |
|
- en |
|
- de |
|
metrics: |
|
- accuracy |
|
- code_eval |
|
tags: |
|
- '1.0' |
|
--- |
|
# CANDefender – DoS Detection Model |
|
|
|
**Model Summary** |
|
This model detects **DoS attacks** on the CAN bus. It was trained on approximately **4.6 million** real CAN frames (both normal traffic and DoS data). The core is an **LSTM** architecture that processes the CAN ID and the 8-byte payload to classify each frame as either “DoS” or “Normal.” |
|
|
|
--- |
|
|
|
## Performance |
|
|
|
**Test Accuracy**: ~94.06% |
|
**Confusion Matrix** (DoS vs. Normal): |
|
|
|
| True \ Pred | DoS (pred) | Normal (pred) | |
|
|:-----------:|:----------:|:-------------:| |
|
| **DoS** | 3,632,463 | 2,120 | |
|
| **Normal** | 272,327 | 716,544 | |
|
|
|
- **Recall (DoS)**: ~99.94% |
|
- **Recall (Normal)**: ~72% |
|
|
|
_Interpretation:_ Almost no DoS frames are missed, but ~28% of normal traffic is misclassified as DoS (higher false alarms). |
|
|
|
--- |
|
|
|
## Intended Use |
|
|
|
- **Goal**: Real-time DoS detection on CAN bus data. |
|
- **Limitations**: |
|
- Focus on DoS only (other attack types like Fuzzy, Gear, RPM not covered). |
|
- Tends to over-classify normal frames as DoS (False Positives around 28%). |
|
|
|
--- |
|
|
|
## How to Use |
|
|
|
```python |
|
import torch |
|
import numpy as np |
|
from can_defender_dos import CANLSTM # replace with your actual import |
|
|
|
# Example frame: [CAN_ID, b0, b1, ..., b7] |
|
frame = [0x315, 0x12, 0x4F, 0xA2, 0x00, 0x00, 0x78, 0x1C, 0xAA] |
|
|
|
# Convert to the same shape as the model expects: (batch_size, seq_len, features) |
|
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("candefender_dos_final.pt")) |
|
model.eval() |
|
|
|
with torch.no_grad(): |
|
logits = model(torch.from_numpy(x_np)) |
|
pred = torch.argmax(logits, dim=1).item() |
|
print("Prediction:", "DoS" if pred == 0 else "Normal") |
|
``` |
|
|
|
|
|
## Training Configuration |
|
- Architecture: LSTM (64 hidden units) + final linear output |
|
- Optimizer: Adam, LR=1e-3 |
|
- Epochs: ~20 (stopped when performance saturated) |
|
- Dataset: 4.6 million CAN frames, including normal + DoS |
|
|
|
## Limitations & Next Steps |
|
- False Positives: ~28% of normal frames labeled as DoS. Might be acceptable for high security environments, but can be reduced via further tuning or additional features (time windows, frequency, etc.). |
|
- Focus on DoS: Future expansions for multi-class detection (Fuzzy, Gear, RPM) are possible. |
|
- Potential Enhancements: Weighted loss for normal class, real-time deployment with window-based sequences, or transformer-based architectures. |
|
|
|
## License & Contact |
|
- License: cc-by-nc-nd-4.0 |
|
- Author: Keyvan Hardani |
|
- Contact: https://www.linkedin.com/in/keyvanhardani/ |