introducing kmux - the kernel multiplexer

29
KMux: Kernel Extension at the Hardware Interface Tareque Hossain The George Washington University Department of Computer Science April 27, 2011 Directed by: Dr. Gabriel Parmer

Upload: tareque-hossain

Post on 24-May-2015

1.907 views

Category:

Technology


1 download

DESCRIPTION

Kernel Multiplexer or KMux is a system call interposition framework that intercepts the communciation between user and kernel space in order to extend, enhance or replace kernel extensions. It has very low overhead and can be configured to achieve fine grained control over individual processes in a system.

TRANSCRIPT

Page 1: Introducing KMux - The Kernel Multiplexer

KMux:  Kernel  Extension  at  the  Hardware  Interface  

Tareque  Hossain  The  George  Washington  University  Department  of  Computer  Science  

April  27,  2011  

 Directed  by:  Dr.  Gabriel  Parmer  

Page 2: Introducing KMux - The Kernel Multiplexer

•  Most  commercial  operating  systems  are:  – Monolithic  –  General  purpose  

•  Kernel  interfaces:  –  Tightly  coupled  into  the  kernel  code  –  Lack  customizability/extensibility  –  Generalized  to  accommodate  wide  array  of  services  –  InefRicient  for  speciRic  needs  

•  a  system  that  only  runs  a  web  server  •  Kernel  interfaces  should  be:  –  Decoupled  &  easily  conRigurable  –  Easily  enhanced,  extended  or  replaced  

Motivation  &  Background  

2  

Page 3: Introducing KMux - The Kernel Multiplexer

Motivation  

3  

Kernel  

Kernel  

•  Present  state  –  Browser  and  plugins  independently  talk  to  kernel  

•  Desired  state  –  Browser  is  in  control  

Extensions  

Page 4: Introducing KMux - The Kernel Multiplexer

Introducing  KMux  •  KMux  =  Kernel  Multiplexer  

–  Controls  user  &  kernel  space  communication  –  Input:    

•  User-­‐level  system  call  service  requests  –  Output  path:  

•  Lightweight  &  efRicient  kernels  (yes!)  •  Implement,  extend,  enhance,  or  restrict  kernel  interfaces  •  Subkernels  

•  Challenges:  (details  after  diagram)  –  Control  user  –  kernel  communication  w/o  introducing  signiRicant  overhead    

–  Implement  conRigurable  sequence  of  subkernels  to  process  user  requests  

–  KMux  &  subkernel  conRiguration  from  user  space  4  

KMux  

system  calls  

kernels  

Page 5: Introducing KMux - The Kernel Multiplexer

KMux  Overview  

KMux  

Subkernel  1   Subkernel  2   Subkernel  3  

Host  Kernel  

User  Process  1   User  Process  2  

Kernel  Space  

User  Space  

5  

Page 6: Introducing KMux - The Kernel Multiplexer

Implementation:  Extension  at  H/W  Interface  

•  How  to  intercept  system  calls?  Options:  –  POSIX  ptrace    

•  User  space  •  Unacceptable  overhead  •  Non-­‐portable  across  kernel  versions  (latest  standard  in  2008)  

–  Kernel  ModiRication  •  Non-­‐portable  (kernel  interfaces  in  Rlux)  •  Complicated  development  •  Acceptance  into  “mainline”  -­‐  large  barrier  

–  New:  Override  at  the  hardware  interface  •  Change  hardware-­‐deRined  kernel  entry  points!  

–  Change  the  default  system  call  hander  »  DeRined  in  special-­‐purpose  registers  

•  Extremely  fast  •  x86  interfaces  are  stable  

6  

Page 7: Introducing KMux - The Kernel Multiplexer

Implementation:  Multiplexing  •  Kernel  entry  point  overridden  to  point  to  KMux  routine  –  Invoked  every  time  a  system  call  is  executed  –  General  purpose  registers  saved  –  KMux  system  call  handler  invoked  

•  Different  system  calls  come  from  different  processes  –  With  different  contexts  

•  Is  this  request  from  a  browser  extension?  •  Or  the  browser  itself  •  Or  a  third  party  application  •  Or  on  a  speci1ic  CPU?!  

•  KMux  handler  analyzes  the  context    •  Delegates  control  to  appropriate  subkernel  •  Speci1ic  subkernels  handle  requests  for  speci1ic  apps!  7  

Page 8: Introducing KMux - The Kernel Multiplexer

Multiplexing  Overview  

Subkernel  Registry  

Process  Registry  

CPU  Registry  

process  1  -­‐  creat  

Rilesystem  Rilter  subkernel  

sandbox  subkernel  

process  replication  subkernel  

8  

any  call  from  process  2  on  CPU  1   process  3  -­‐  clone  

Page 9: Introducing KMux - The Kernel Multiplexer

Implementation:  Subkernels  •  Host  kernel  from  which  KMux  assumes  control  becomes  the  Rirst  subkernel  –  Boot  into  Linux,  then  activate  KMux  &  other  subkernels  

•  Ranges  from  simple  system  call  Rilters  to  self-­‐sufRicient  kernels    –  System  can  run  many  kernels  concurrently  

•  Registers  themselves  with  KMux  on  initialization  •  Examples:  Process  creation  control  kernel  – Monitors  process  creation  and  termination  –  Simply  monitor  these  calls,  or…  –  Prevent  processes  from  creating  new  process  

9  

Page 10: Introducing KMux - The Kernel Multiplexer

Subkernel  Chaining  

ls  –al  |  grep  kmux  |  less  

10  

Page 11: Introducing KMux - The Kernel Multiplexer

Creating  Subkernel/App  Mapping  

init  

syscall  handler  

conRig  handler  

exit  

Rilesys-­‐Rilter  subkernel  

unregister  process  

conRigure  subkernel  

register  process  

kmux  user  library  

register  subkernel  

unregister  subkernel  

register  process  

unregister  process  

conRigure  subkernel  

subkernel  registry  

process  registry  

KMux  

register(‘Rilesys_Rilter’,  &syscall_handler,  &conRig_handler)  

unregister(‘Rilesys_Rilter’)  

con0igure(ke

rnel_id,  

process_id,  

root_director

y_path)  

syscall  handler  

proc  

11  

User  Kernel  

Page 12: Introducing KMux - The Kernel Multiplexer

Accepting/Rejecting  a  System  Call  

Browser:  privileged  process  

Extension:  child  process  

pid  =  fork()  

KMux  User  Library  

create(‘/tmp/test.log’)  system  call  

syscall  return  

int  result  

system  entry  routine  

system  exit  routine  

register(pid,  Rilesys_Rilter)  con0igure(kernel_id,  (pid  =  path)  

syscall    handler  

syscall    handler  

handler(regs)  

next  =  host/error  

User  Space  

Kernel  Space  

Rilesys  Rilter   host  

kmux  

2

1

3

4 5

6 6

12  

7

Page 13: Introducing KMux - The Kernel Multiplexer

Benchmarks  •  KMux  overhead  •  Subkernel  overhead  •  Multiple  subkernel  overhead  

•  Subkernels  prepared:  –  Null:  does  not  perform  any  action  and  returns  to  KMux  immediately  

–  Syscall  Multiplexer:  keeps  track  of  which  system  call  should  be  handled  by  which  subkernel  

–  File  System  Filter:  conRines  Rile  creation  and  deletion  system  calls  from  a  registered  process  to  a  registered  directory  root  

–  Sandbox:  allows  a  preconRigured  list  of  system  calls  to  pass  through  for  a  given  process  or  group  of  processes      

13  

Page 14: Introducing KMux - The Kernel Multiplexer

Microbenchmarks  •  LMBench  OS  only,  on  Core  2  Duo  1.8  GHz,  876  MB  RAM  

kmux  

lmbench  

syscallmux  

host  

RilesysRilter  

1st  Run  

2nd  Run  

3rd  Run  

4th  Run  

14  

Page 15: Introducing KMux - The Kernel Multiplexer

Basic  OS  Calls  

0  

0.5  

1  

1.5  

2  

2.5  

3  

3.5  

null  call   null  I/O   stat   open/close  

microseconds  

vanilla  

kmux  

kmux  -­‐  syscallmux  

kmux  -­‐  syscallmux  -­‐  Rilesys_Rilter  

call   null  call   null  I/O   stat   open/close  

Max  overhead   40.9%   23.9%   3%   6.7%  15  

Page 16: Introducing KMux - The Kernel Multiplexer

Macrobenchmark  

•  Linux  Kernel  v2.6.33  –  Same  conRiguration  for  all  runs  –  Maximum  overhead  0.17%  

16  

700.994

700.264

699.748

695 696 697 698 699 700 701 702 703 704 705

Compile Time (s)

vanilla kmux kmux + syscallmux

Page 17: Introducing KMux - The Kernel Multiplexer

Pure  Subkernel  Chain  Overhead  

call   null  call   stat  

Max  overhead   134%   13.2%  

null call stat vanilla 0.1467 2.0567 kmux + 2 null 0.2133 2.0967 kmux + 4 null 0.2133 2.1067 kmux + 8 null 0.3433 2.33

0

0.5

1

1.5

2

2.5 L

aten

cy in

µse

c

17  

Page 18: Introducing KMux - The Kernel Multiplexer

Self-­‐sufRicient  Kernel  -­‐  Composite  

Composite,  493  

Composite  w/  KMux,  592  

0  

100  

200  

300  

400  

500  

600  

700  

Latency  per  Invocation  

Nanoseconds  

•  Only  15  lines  of  code  added  to  Composite  code,  mostly  kernel  and  process  registration/  deregistration  

•  Average  overhead  per  invocation  ~20%  18  

Page 19: Introducing KMux - The Kernel Multiplexer

Things  KMux  doesn’t  do  

•  KMux  does  not  provide  all  functions  necessary  for  subkernels,    –  Subkernels  currently  rely  on  host  kernel  for  resources  

•  Isolation  of  subkernels  not  strictly  enforced  –  One  subkernel  can  trivially  crash  the  system  –  Currently  requires  “trusted”  subkernels  

19  

Page 20: Introducing KMux - The Kernel Multiplexer

Related  Work  •  Hijack  method,  used  by  Composite  component-­‐based  system  

•  System-­‐call  table  overriding  –  SLIC,  Systrace,  virus  checking  software  

•  SPIN,  Interposition  agents  •  SFI,  XFI,  Vx32,  Native  Client  sandboxing  

20  

Page 21: Introducing KMux - The Kernel Multiplexer

Conclusion  •  KMux:  – Practically  efRicient  – Allows  multiple  kernels  in  the  system!  – Highly  conRigurable  – Works  with  commercial  systems  out  of  the  box  – Allows  extension,  enhancement,  monitoring  and  even  complete  replacement  of  system  calls  

– Perfect  for  sandboxing  untrusted  applications!  

21  

Page 22: Introducing KMux - The Kernel Multiplexer

Questions  •  Source  available  at:  –  github.com/tarequeh/kmux  

22  

Page 23: Introducing KMux - The Kernel Multiplexer

Future  •  Get  multiple  standard  Linux  kernels  to  work  with  KMux  

•  Modify  Firefox/  Chrome  to  register  extension  processes  with  KMux  –  Activate  extension  sandboxing  

•  Implement  KMux  for  Windows/  Mac  OSX  •  Provide  interfaces  necessary  for  subkernels  and  isolate  them  

23  

Page 24: Introducing KMux - The Kernel Multiplexer

Subkernels  Chaining  •  Upon  receiving  control  for  a  system  call,  a  subkernel  may:  –  Perform  necessary  action  and  delegate  to  another  subkernel,  adding  to  the  chain    

–  Return  control  to  host  kernel  or  return  to  user  space,  ending  the  chain  

•  Chaining  allows:  –  Decoupling  of  functionality    –  Subkernels  to  utilize  each  others  capabilities  –  Analysis  from  multiple  perspective  before  a  system  call  is  approved  

–  Optimal  use  of  the  subkernel  network  

24  

Page 25: Introducing KMux - The Kernel Multiplexer

CPU  Multiplexing  •  Imagine  600  processors  in  a  system  •  Multiple  kernels  should  be  able  to  function  

–  Each  claiming  a  number  of  CPUs  

•  Create  CPU  –  subkernel  mapping  –  KMux  provides  this  feature  

•  EfRicient  utilization  of  CPU  •  Easier  accommodation  of  multiple  kernels  •  Isolation  domains  

25  

Page 26: Introducing KMux - The Kernel Multiplexer

Using  KMux  in  Kernel  Space  •  KMux  provides  interface  at  kernel  level  •  Subkernel  registration  

–  Subkernels  can  register  themselves  with  KMux  upon  initialization  

–  Subkernels  can  unregister  themselves,  and  KMux  provides  a  graceful  exit  path  

•  Subkernel  conRiguration  –  Subkernels  may  choose  to  accept  conRiguration  parameters  –  Upon  initialization  they  register  a  conRiguration  handler  with  KMux  

–  Accepts  simple  character  string  containing  conRiguration  information  

26  

Page 27: Introducing KMux - The Kernel Multiplexer

Using  KMux  in  User  Space  •  KMux  user  library  provides  access  from  user  level  •  Process  Binding  

–  KMux  will  by  default  delegate  control  for  all  system  calls  to  the  host  kernel  

–  Privileged  processes  or  users  can  bind  a  process  to  a  particular  subkernel  

–  All  system  calls  from  a  bound  process  will  be  delegated  to  chosen  subkernel  

•  Subkernel  conRiguration  –  Privileged  processes  or  users  can  conRigure  subkernels  to  suit  their  needs  

–  Example  conRigurations  are:  specifying  next  subkernel  in  chain  or  set  of  system  calls  to  analyze  

27  

Page 28: Introducing KMux - The Kernel Multiplexer

File  System  Calls  

call   create  0k   create  10k   delete  0k   delete  10k  

Max  overhead   6%   4.3%   10.9%   9.3%  

create 0k create 10k delete 0k delete 10k vanilla 14.867 30.767 10.367 15.333 kmux 14.733 30.967 10.333 15.667 kmux - syscallmux 14.667 31.3 10.233 15.3 kmux - syscallmux -

filesys_filter 15.767 32.1 11.5 16.767

0 5

10 15 20 25 30 35

Lat

ency

in µ

sec

28  

Page 29: Introducing KMux - The Kernel Multiplexer

Sandbox  Performance  

0

0.5

1

1.5

2

2.5

3

3.5

null call null I/O

stat open/close

Lat

ency

in µ

sec

null call null I/O stat open/close Vanilla 0.1533 0.2233 2.1033 2.8966 KMux + Sandbox 0.2366 0.3066 2.11 3.1

call   null  call   null  I/O   stat   open/close  

Max  overhead   54%   37%   1%   7%  29