-
Notifications
You must be signed in to change notification settings - Fork 0
/
TamperableLinkModel.hs
46 lines (35 loc) · 1.81 KB
/
TamperableLinkModel.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PostfixOperators #-}
{-# LANGUAGE MonadComprehensions #-}
module TamperableLinkModel where
import Data.Set.Monad as Set
import Palladio
import Security
import Control.Monad.Trans.Class(lift)
import Misc
import Reasons
import ReasonsModel
class (Ord (Location m),
ConcreteDesignModel m) => TamperAbilitiesLinkAccessModel m where
linkPayloadSecuredByMethod :: LinkingResource m -> Set (TamperingAbility m)
linkMetaDataSecuredByMethod :: LinkingResource m -> Set (TamperingAbility m)
instance (TamperAbilitiesLinkAccessModel m, ConcreteDesignModel m, Reasons m) => LinkAccessModel m where
exposesPhsicallyAccessiblePayloadTo link =
[ attacker | attacker <- lift $ attackers,
method <- linkPayloadSecuredByMethodM link,
ability <- tamperingAbilitiesM attacker,
method == ability
] `hence` (Inferred2 ExposesPhsicallyAccessiblePayloadTo link)
exposesPhsicallyAccessibleMetaDataTo link =
[ attacker | attacker <- lift $ attackers,
method <- linkMetaDataSecuredByMethodM link,
ability <- tamperingAbilitiesM attacker,
method == ability
] `hence` (Inferred2 ExposesPhsicallyAccessibleMetaDataTo link)
linkMetaDataSecuredByMethodM :: (TamperAbilitiesLinkAccessModel m, Reasons m) => LinkingResource m -> WithReason m (TamperingAbility m)
linkMetaDataSecuredByMethodM = liftA2 LinkMetaDataSecuredByMethod linkMetaDataSecuredByMethod
linkPayloadSecuredByMethodM :: (TamperAbilitiesLinkAccessModel m, Reasons m) => LinkingResource m -> WithReason m (TamperingAbility m)
linkPayloadSecuredByMethodM = liftA2 LinkPayloadSecuredByMethod linkPayloadSecuredByMethod