Alloy : 另类的形式化检测规则漏洞

一句话:

根据trace和goal(Goals are properties that the system should achieve),使用满足一些属性就是插值的定义,计算出插值(trace和goal),插值说明了出现反例的原因是反例的一部分,如果不摆脱它就会一直出错。插值就是用几个已知去预测未知的过程。用插值和前一状态计算最弱前置条件,从后往前推理,trying to find the first place where the violation might be avoided,阻止操作发生或者让没出现的操作发生(是否发生也是要满足一些属性)来避免冲突。如果没有满足,就去前面的状态找,计算新的插值以及其它信息

在这里插入图片描述
第一条用人话说就是当前路径要有at的trigger和状态
第二条就是说at之后的状态要能消除冲突

加入at本身的触发条件

表示状态的开始,结束或归为false
existing rules’ trigger states, cannot add new rules or preserve
existing property-compliant behaviors.
✸ (eventually) LTL是因为temporal operators (next)



Device = set attributes
attribute = set values
Trigger、Action、Condition = Device、Attribute、Value

match ri中一个元素与rj中一个元素如果在(device、attribute)有交集
在这里插入图片描述

same_channel ai和tj一个channel
在这里插入图片描述

are_connected ri的a触发rj的t 满足match same_channel不一定是漏洞,还需要are_connected
directly (by involving overlapping devices, attributes, and values) or mediated by some physical channel

CHANNEL以及act on在上面的actutors和sense on在上面的sensor
在这里插入图片描述

在这里插入图片描述

本文由于什么什么,比如考虑了某个东西,所以可以检测

理论是对的
每条相关规则都有可能由于交互产生漏洞,但不知道具体原因是哪一条,生成反例能知道具体原因是哪一条
经过之前的预处理,可不可以默认是配置及语义不正确

一、建模信息生成

1.1 生成缺陷状态

处理环境属性:
不考虑动态的余热,温度这种维持两个状态再变化,设置flag+1,加到2可以变化同时归0 (heater_indicator=1 & heater_on:温度升高)

temperature.low(触发或不触发)	 temperature.low	temperature.high
					             co.high(if触发)	co.high
co.high(if触发,A.1)co.high

两个延时属性,触发或不触发,都不会出现连续两次两个状态toggle
但是其他情况就会toggle

处理toggle

tuple < s1>
<s1,s2>


1.2 识别检测缺陷状态 / 漏洞

B1 通常对应 When / If __ , __ should / must be / not be __.
next(not_present) & next(heater)不能同时出现,be和not be对应两种语句

B2 next(temperature) > x &

n 从判断改为涉及的状态


1.3 生成安全属性对应的初始规则(待定,估计放到原始信息)


1.4 设备选择,包括筛选和当前系统有关的property


二 、基础模型

环境不变化,而是在初始时随机赋值 或者初始时随机赋值,然后环境正常变化(esac union一个增长一个不变一个变小)
如何实现单点特性

三、扩展模型

3.1 规则配置


3.2 规则语义

while condition 当前所有device selection设备的condition都加,可以考虑while none
平均准备30条总规则

修复模板

根据安全属性和Ngram得到常见组合、排除部分组合

当前所有设备对应的状态条件都进行组合变异,一种组合方式对应一条执行路径

第一个条件能达到该点,然后精细化
加了修复措施,是否能在不安全时达到安全


四、反例分析

变异后找不到,返回原配置。反例分析配置没变则要进行语义层面修改(或不返回原配置,如果LTL为对应值说明纯靠配置不成功)

意味着无法通过改进规则语义和规则配置来解决冲突







处理多property冲突,AutoTap没说 下雨时开窗

加入property对应的初始规则
If raining , then close window
If co > x , then open window

对于涉及同一设备的property在一起建模

co高时下雨
If raining while co
If raining while !co
下雨时 co高
If co while raining(其实就不用改,因为co在之后)
If co while raining
同时的情况

规则执行的次数,一次If还是多次When

处理没有TAP规则

在上一条基础上

客厅灯光照闪灯 纯配置

property: 灯不要toggle
设备筛选(还要是同attribute)后得到以下规则
规则1: when illuminance < 100 , turn on light
light illuminance(channel是自己定义的light和光照有关) 如果是开窗通风,window,co2,temperature

– 规则2: light.on , turn on light2 这个就是B3,因为涉及3个状态
规则2: when illuminance > 500 , turn off light
规则3: not present , turn off light
light illuminance,首先都在light里所以match,其次才是illuminance,都对应一条illuminance
判断两条规则value in 或者 same_channel
然后到自动机里判断loop

规则4: 口头命令 , TV on
规则5: TV on , turn on light

F(X)可以精准地探测到未来状态的下一状态
X(flag=0 & XX等价于第一、二个状态
[event1] should [never] happen within [time] after [event2] ¬F(time#event2 ∧ X@event1)
!F(time=2&X(flag=0)) 不等于 !F(time=2->X(flag=0))
red always followed by green or yellow  G(color.red → X(color.green ∨ color.yellow))

check_ltlspec -p "!G((time=2->X(flag=1))&(time=2->X(X(flag=0))))"

p->q等价于非p或q
φ ↔ ψ ≡ (φ → ψ) ∧ ( ψ → φ)
**->和->F有区别**
一个判断当前和后续,一个只判断未后续状态
**!一般用于取具体的例子**

!G不等于G!
G! (runinfan61.timer=2 & fan.switchCap.switch = off)  全局的每一个状态存在! (runinfan61.timer=2 & fan.switchCap.switch = off) 
等价于 !F(runinfan61.timer=2 & fan.switchCap.switch = off)

把500改为改为100+500=600

出现loop,而且loop的与light相关规则flag为1且满足互相触发

如何检测loop?
前后状态会有些一样
判定一条规则触发了另一条规则,立刻触发了另一条
判定没触发另一条规则
如何判断是哪几条?要更改哪一个?规则设置flag?flag,rule1 trigger:1,rule2 trigger:2

温湿度导致的uncertain 纯语义

If 8:00 while temperature < 20 , close window
If 8:00 while humidity > 60 , close window

<20 且 >60 ,用户选
<20 且 <60,原
大于60 且>20 ,原

温度正常

温度链

Action Breaking 改condition

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q1uTruth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值