| | --- |
| | 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/ |