应用RPL实现数据段的特权级保护的实例

  计 算机软件一般由操作系统程序和应用程序组成。为了组建高可靠性的软件系统,要求操作系统的数据不允许被应用程序改变,否则,应用程序会影响系统的安全运 行,严重时导致系统崩溃瓦解。一个由操作系统程序与应用程序组成的软件如图1所示。在操作系统程序中有一MOVE过程把一个数据段中的数据块写到另一个数 据段中,MOVE过程是通过参数传入被调用的,即 MOVE(destination,source,count)。其中:source 源数据块的逻辑地址;destination 目标数据块的逻辑地址;count 传送的字节数

  数据块的逻辑地址由数据段选择字对应的数据段描述符和数据块偏移量所描述。

  MOVE过程是操作系统的程序,它可以合法地被操作系统中的其它过程调用,完成操作系统数据段中的数据块移动和操作系统数据段与应用程序数据段中的数据块移动。但是,若MOVE过程被应用程序调用,操作系统数据段的数据有可能失去保护作用。设应用程序的典型调用情形为:

  ①MOVE(数据块A,数据块1,count)

  ②MOVE(数据块B,数据块A,count)

  ③MOVE(数据块2,数据块1,count)

  ④MOVE(数据块1,数据块A,count)

  情形①:应用程序通过MOVE过程得到操作系统数据块的信息;

  情形②:应用程序利用MOVE过程完成应用程序数据块之间的数据移动;

  ①、②这二种情形是合法的要求。

  情形③:应用程序控制了操作系统的工作,没有按操作系统的工作步骤,强行改变了数据块2的内容;

  情形④:应用程序将应用程序数据块A的内容移动到操作系统数据块1中,自行改变了数据块1的内容;

  在③、④这二种情形使操作系统的数据得不到核心保护,操作系统的数据受到了应用程序的侵犯。

  针对上述的侵权示例,如何防止应用程序改变操作系统的数据,即情形①和②;并且,应用程序能通过调用操作系统程序中的MOVE过程合法地使用,即情形③和④;这是操作系统软件设计中必须考虑的问题。

  设调用MOVE过程的程序段Proc为:

  ……

  LDS EAX,source ;DS:EAX=source源数据块的逻辑地址

  PUSH DS ;压入source源数据块的选择字

  PUSH EAX ;压入source源数据块的偏移量

  LDS EAX,destination ;DS:EAX=destination目标数据块的逻辑地址

  PUSH DS ;压入destination目标数据块的选择字

  PUSH EAX ;压入destination目标数据块的偏移量

  MOV ECX,count ;ECX=传送的字节数count

  PUSH ECX ;压入传送的字节数count

  CALL MOVE ;调用MOVE过程,MOVE由调用门描述

  ……