Towards Run-time Verification in Access Control
Fatih Turkmen1, EJ Jung2, Bruno Crispo1
1DISI, University of Trento, Italy 2CS dept, University of San Francisco, USA
Towards Run-time Verification in Access Control Fatih Turkmen 1 , EJ - - PowerPoint PPT Presentation
Towards Run-time Verification in Access Control Fatih Turkmen 1 , EJ Jung 2 , Bruno Crispo 1 1 DISI, University of Trento, Italy 2 CS dept, University of San Francisco, USA Motivation How can we exploit existing software model checking tools
1DISI, University of Trento, Italy 2CS dept, University of San Francisco, USA
1: http://en.wikipedia.org/wiki/Runtime_verification
– e.g. user name, activated roles, session information, …
– coordination and synchronization over distributed systems is costly
– thus approximates dynamic Separation of Duty
Coordinator Coordinator def def act(){ authorizer.start var var authActorClose: In Int = 0 while while(tr true){ receive{ case case s : Session => requestCount(s.getUser.getUserID) if if user is allowed more sessions s.getUser.addSession s.getUser ! SessionPositive } else else { s.getUser ! SessionNegative authActorClose = authActorClose + 1 if if (authActorClose == userNum){ authorizer ! Stop exit() } } case case event : PA => authorizer ! event receive{ ca case Permit => if if (checkConstraints){ history += event event.getOwner ! Permit } ca case Deny => event.getOwner ! Deny } case case event : RA => authorizer ! event receive{ case case Permit => if if (!checkConstraints){ history += event event.getOwner ! Permit } case case Deny => event.getOwner ! Deny } } } } Authorizer Authorizer def def act(){ initialize while while(tr true){ receive{ case case e: RA => if if (checkRA(e)) sender ! Permit else else sender ! Deny case case e: PA => if if (checkPA(e)) sender ! Permit else else sender ! Deny ca case Stop => exit() } } } User User def def act(){ var var session : Session = createSession(generateRoleEntropy) while while(tr true){ receive{ ca case SessionPositive => session.start sessions += session Thread.sleep(random.nextInt(500)) session = createSession(generateRoleEntropy) case case SessionNegative => exit() } } }
– if they touch the same object