disabled. The kernel does not allow any program in
user space to access physical memory directly.
Windows Vista kernel mode security includes the
following features (Conover, 2006):
¾ Driver Singing,
¾ PatchGuard,
¾ Kernel-mode code integrity checks,
¾ Optional Support for secure Bootup using a
TPM hardware chip,
¾ Restricted User mode access to
\Device\Physical Memory.
Driver signing mechanism requires any driver to
be installed in kernel to have a certificate from a
trusted third party. As long the certificate giving
process is secured no malicious driver will be
installed in the kernel. However, if any certificate is
published or compromised, then the overall security
becomes vulnerable.
The PatchGuard is designed to prevent kernel
patching, which degrade security, reliability and
performance. The kernel-mode code integrity check
protects the operating system by verifying system
binaries haven't been tampered with and by ensuring
that there are no unsigned drivers running in kernel
mode. Other security steps e.g. secure bootup and
limited user access to physical memory adds extra
protection to the kernel mode security.
Microsoft, by the integration of these security
features in its OS, has raised the security bar to a
higher level by preventing injection of unsigned,
possibly malicious code. Enforcement of the security
measure rests on the stated impossibility of disabling
these component functions of the Kernel-Mode
Security. But, as Symantec’s research (Conover,
2006) shows, there is limit to the effectiveness of
these security measures. These protections can be
disabled by patching the kernel (NTOSKRNL.EXE).
Once this is patched, WINLOAD.EXE will refuse to
load it, so loader also needs to be patched. During
execution, if PatchGuard manages to perform the
self-check, it will halt Windows as it found the
patched system files, so it needs to be disabled too.
Disabling PatchGuard does not need patching. There
is a subtle way to forcefully disable a timer, which
PatchGuard relies upon to wake up and execute its
checking, so that it never signals an event. This
means, although the kernel-mode security has
enhanced the security of Windows OS to prevent
most of the malicious codes, it does not provide an
iron-clad security.
Sandboxing.
Sandboxing (Singh, 2004) is any
technique used to separate running programs. The
term is general, and can refer to virtual machines
such as general purpose machines like VMware or
KVM, or application-specific, such as JVM or CLR
in Windows. It can also refer to protecting system
calls by trapping them and limiting their use to
specific applications; these can be outside the kernel,
and hook into it or loaded as modules. Modern OS
virtual memory also separates processes from each
other by running each of them in a separate address
space.
Java development environment uses sandboxing
to incorporate security measures. JVM could run
local as well as remote (usually applets) executable
codes. The sandbox provides a restricted
environment in which limitations are enforced on the
system resources untrusted code can access or
request. So, as used in other platforms, sandbox in
Java is used for safe running of untrusted code,
which comes from untrusted source. In Java 2
security model (Sun, 1997), untrusted code does not
imply just applets; security check is extended to all
java programs including applications. Java 2 allows
fine-grained access control with easily configurable
security policy as well as easily extensible access
control structures.
As such Java 2 does not just a sandbox with a
fixed boundary but provides multiple sandboxing
environments each with different access control
settings or permissions. Java’s overall security is
enforced via three-tier defense: a) bytecode verifier
– along with the JVM, ensures legitimacy of
bytecode and guarantees language safety and
baseline security at run time; b) class loader –
provide an important security feature of separating
name spaces for various software classes and using
separate class loaders, a degree of isolation is
established between the instances of classes; c)
security management – this is a mechanism (security
manager, access controller) for applications to check
the current effective policy and perform access
control states.
Figure 2 depicts the java sandboxing mechanism.
The important concept in the mechanism is the
protection domain, which is a domain that encloses
classes whose instance objects that are directly
accessible by a principal (an entity – individual,
corporation, login ID) to which a set of permissions
are granted. Security policy is a mapping from
classes (and their instances) to protection domains,
which in turn is mapped to corresponding set of
permissions. Protection domains can be bound to
static set of permission that is granted despite the
current dynamic policy setting. The protection
domain can also be initialized to use the static
permission as well as the dynamic security policy
SECRYPT 2010 - International Conference on Security and Cryptography
80