车联网入侵检测1

发布时间 2023-11-24 16:41:36作者: 无心而为功

简介

基于迁移学习和深度学习的车载网络入侵检测系统在模型训练上以CIC-IDS数据集为例,整体预达到对车内所有经过流量达到入侵检测目的。

后端主要模块

数据输入与信息提取

以车载Linux或基于Linux其他操作系统为例。采用tcpdump进行抓包。脚本如下:

#!/bin/bash

# 查找最大的文件编号
maxnum=0
for file in cap*.pcap; do
  if [[ $file =~ cap([0-9]+).pcap ]]; then
    num=${BASH_REMATCH[1]}
    if (( num > maxnum )); then
      maxnum=$num
    fi
  fi
done

# 开始tcpdump命令
sudo tcpdump -C 1 -w "cap$(($maxnum+1)).pcap" &

# 获取tcpdump命令的PID
PID=$!

# 等待tcpdump命令开始运行
sleep 1

# 循环检查新的pcap文件
while kill -0 $PID 2> /dev/null; do
  # 查找新的pcap文件
  for file in cap*.pcap*; do
    # 检查文件名是否需要更改
    if [[ $file =~ cap([0-9]+).pcap([0-9]+) ]]; then
      # 获取文件编号
      num1=${BASH_REMATCH[1]}
      num2=${BASH_REMATCH[2]}
      # 构造新的文件名
      newfile="cap$(($num1+$num2)).pcap"
      # 重命名文件
      mv $file $newfile
    fi
  done
  # 等待一段时间再次检查
  sleep 1
done

输出cap1.pcap,cap2.pcap...依此类推。
采用pcap4j库对pcap文件进行信息提取,例如源地址、目的地址、http请求的payload等,如下:

十一月 20, 2023 10:25:44 上午 ReadPacketFile readPcapFile
信息: Payload: POST /auth/login/ HTTP/1.1
Host: honeypot.lab.cfiul.ca
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
X-CSRFToken: 1535499953##adb5da4e21786844551e15eb641fa650deec0392
X-Requested-With: XMLHttpRequest
Content-Length: 101
Cookie: session=.eJw9j0Frg0AUhP9KeeccNglehBy6mEpK34qwkr4tQeKaqOtuG2LoqsH_nqYNPQ3MMN8wV8iPdt_Vhw7Cjys8Xf6kgBD228AVfrWCafZwsri39C7sJu6_1cBPRcNZMfCaFsLqJVZlXJ_0wD1tS_tW3Zu7aTeDvCkhfCBEnDIR4ZjI2ijzatDRgkbl0G16MaY-kVkgojQgt74Pg-7Ox_zy1R4-_xEYIcOo6tEoK0zKlNFLGvVcmcz_ZEMin71yL00irSXJW5Qto98f0w26KE2M.Dmdivg.FuwCeBpW1t1HtZo_pWDK9-Oo8TQ
DNT: 1
Connection: keep-alive

{"email":"test@example","password":"%20%43%46%49%7b%31%6e%73%33%63%75%72%33%5f%6c%30%67%30%6e%7d%20"}
十一月 20, 2023 10:25:44 上午 ReadPacketFile readPcapFile
信息: Captured at: 2018-08-29T06:49:19.029084802+08:00[Asia/Shanghai]
Original length: 634 bytes
[Ethernet Header (14 bytes)]
  Destination address: ac:ed:5c:6f:68:73
  Source address: 6c:3b:6b:55:a1:de
  Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
  Version: 4 (IPv4)
  IHL: 5 (20 [bytes])
  TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
  Total length: 620 [bytes]
  Identification: 33444
  Flags: (Reserved, Don't Fragment, More Fragment) = (false, true, false)
  Fragment offset: 0 (0 [bytes])
  TTL: 63
  Protocol: 6 (TCP)
  Header checksum: 0x65df
  Source address: /10.10.20.4
  Destination address: /10.10.40.241
[TCP Header (32 bytes)]
  Source port: 80 (HTTP)
  Destination port: 47428 (unknown)
  Sequence Number: 997263206
  Acknowledgment Number: 1783381387
  Data Offset: 8 (32 [bytes])
  Reserved: 0
  URG: false
  ACK: true
  PSH: true
  RST: false
  SYN: false
  FIN: false
  Window: 253
  Checksum: 0xd802
  Urgent Pointer: 0
  Option: [Kind: 1 (No Operation)]
  Option: [Kind: 1 (No Operation)]
  Option: [Kind: 8 (Timestamps)] [Length: 10 bytes] [TS Value: 88586127] [TS Echo Reply: 322133]
[data (568 bytes)]
  Hex stream: 48 54 54 50 2f 31 2e 31 20 34 30 31 20 55 4e 41 55 54 48 4f 52 49 5a 45 44 0d 0a 53 65 72 76 65 72 3a 20 6e 67 69 6e 78 2f 31 2e 34 2e 36 20 28 55 62 75 6e 74 75 29 0d 0a 44 61 74 65 3a 20 54 75 65 2c 20 32 38 20 41 75 67 20 32 30 31 38 20 32 32 3a 34 39 3a 31 39 20 47 4d 54 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 34 34 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 2d 61 6c 69 76 65 0d 0a 53 65 74 2d 43 6f 6f 6b 69 65 3a 20 73 65 73 73 69 6f 6e 3d 2e 65 4a 77 39 6a 30 46 72 67 30 41 55 68 50 39 4b 65 65 63 63 4e 67 6c 65 68 42 79 36 6d 45 70 4b 33 34 71 77 6b 72 34 74 51 65 4b 61 71 4f 74 75 47 32 4c 6f 71 73 48 5f 6e 71 59 4e 50 51 33 4d 4d 4e 38 77 56 38 69 50 64 74 5f 56 68 77 37 43 6a 79 73 38 58 66 36 6b 67 42 44 32 32 38 41 56 66 72 57 43 61 66 5a 77 73 72 69 33 39 43 37 73 4a 75 36 5f 31 63 42 50 52 63 4e 5a 4d 66 43 61 46 73 4c 71 4a 56 5a 6c 58 4a 5f 30 77 44 31 74 53 5f 74 57 33 5a 75 37 61 54 65 44 76 43 6b 68 66 43 42 45 6e 44 49 52 34 5a 6a 49 32 69 6a 7a 61 74 44 52 67 6b 62 6c 30 47 31 36 4d 61 59 2d 6b 56 6b 67 6f 6a 51 67 74 37 34 50 67 2d 37 4f 78 5f 7a 79 31 52 34 2d 5f 78 45 59 49 63 4f 6f 36 74 45 6f 4b 30 7a 4b 6c 4e 46 4c 47 76 56 63 6d 63 7a 5f 5a 45 4d 69 6e 37 31 79 4c 30 30 69 72 53 58 4a 57 35 51 74 6f 39 38 66 30 77 32 36 4b 45 32 4d 2e 44 6d 64 69 37 77 2e 4b 62 5f 39 30 49 4c 43 47 5a 5f 65 30 74 31 76 42 50 62 35 68 68 38 77 54 5a 41 3b 20 48 74 74 70 4f 6e 6c 79 3b 20 50 61 74 68 3d 2f 0d 0a 0d 0a 7b 22 65 72 72 6f 72 22 3a 20 22 49 6e 63 6f 72 72 65 63 74 20 75 73 65 72 6e 61 6d 65 20 6f 72 20 70 61 73 73 77 6f 72 64 2e 22 7d

以此作为日志一部分

输入转换

使用开源的网络流特征提取工具CICFlowmeter,将pcap转csv文件作为算法输入
CICFlowmeter工具地址 https://github.com/ahlashkari/CICFlowMeter
工具提供的是界面启动方式和命令行启动方式,稍加依赖和启动类就可转为web服务作为接口待调用。

滚动日志

使用websocket让前端监听

数据库方面

因为把客户端取消了,加改了需要,之后数据库也要改
之前数据库
注册车表

字段 类型 说明 备注
car_number varchar(20) 车牌号 主键
car_brand varchar(10) 车品牌
car_color varchar(10) 车颜色
car_user_email varchar(50) 车主邮箱
created_time datetime 注册时间
total_duration decimal(10) 总时长

入侵记录表

字段 类型 说明 备注
car_intrusion_id varchar(10) 随机生成id 主键
car_number varchar(20) 被入侵的车牌号
intrusion_type varchar(20) 入侵类型
intrusion_time datetime 入侵时间
intrusion_src varchar(20) 入侵来源

检测记录表

字段 类型 说明 备注
detection_id varchar(5) 随机生成id 主键
car_number varchar(20) 车牌号
detection_time datetime 检测时间
is_abnormal tinyint(1)
detection_desc varchar(300)

反馈记录表

字段 类型 说明 备注
feedback_id varchar(20) id 主键
car_number varchar(20)
detection_src varchar(5) 反馈信息来源
feed_back_time datetime 反馈时间
feedback_desc varchar(255) 反馈描述

入侵类型例表

字段 类型 说明 备注
intrusion_type varchar(50) 入侵类型 主键
intrusion_desc varchar(50) 入侵描述
add_time datetime 添加时间

用户表

字段 类型 说明 备注
user_name varchar(20) 用户名 主键
user_email varchar(50) 用户邮箱
user_password varchar(20) 用户密码
auto_detection tinyint(1) 是否开启自动检测
warning tinyint(1) 是否开启警告
created_time datetime 注册时间

启动退出记录表

字段 类型 说明 备注
log_id varchar(5) id 主键
car_number varchar(20) 车牌号
start_time datetime 开启检测时间
end_time datetime 停止检测时间

后端技术选型

使用基于Spring Boot的微服务架构,并利用Spring Cloud提供的工具进行微服务的管理和协调。以Mybatis-plus作为持久层框架。使用Mysql为主,Redis为辅作为数据库支持。

请求返回格式

{
  "status": 2000,
  "data": {
    "xxx": "xxx",
  },
  "msg": "xxx"
}