Index: sandbox/win/tests/validation_tests/suite.cc |
diff --git a/sandbox/win/tests/validation_tests/suite.cc b/sandbox/win/tests/validation_tests/suite.cc |
deleted file mode 100644 |
index 14fba74cd17feb6277712287c416fa4f22319bef..0000000000000000000000000000000000000000 |
--- a/sandbox/win/tests/validation_tests/suite.cc |
+++ /dev/null |
@@ -1,233 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// This file contains the validation tests for the sandbox. |
-// It includes the tests that need to be performed inside the |
-// sandbox. |
- |
-#include <shlwapi.h> |
-#include <stddef.h> |
- |
-#include "base/win/windows_version.h" |
-#include "sandbox/win/tests/common/controller.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-#pragma comment(lib, "shlwapi.lib") |
- |
-namespace { |
- |
-void TestProcessAccess(sandbox::TestRunner* runner, DWORD target) { |
- const wchar_t *kCommandTemplate = L"OpenProcessCmd %d %d"; |
- wchar_t command[1024] = {0}; |
- |
- // Test all the scary process permissions. |
- wsprintf(command, kCommandTemplate, target, PROCESS_CREATE_THREAD); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, PROCESS_DUP_HANDLE); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, PROCESS_SET_INFORMATION); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, PROCESS_VM_OPERATION); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, PROCESS_VM_READ); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, PROCESS_VM_WRITE); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, PROCESS_QUERY_INFORMATION); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, WRITE_DAC); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, WRITE_OWNER); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
- wsprintf(command, kCommandTemplate, target, READ_CONTROL); |
- EXPECT_EQ(sandbox::SBOX_TEST_DENIED, runner->RunTest(command)); |
-} |
- |
-} // namespace |
- |
-namespace sandbox { |
- |
-// Returns true if the volume that contains any_path supports ACL security. The |
-// input path can contain unexpanded environment strings. Returns false on any |
-// failure or if the file system does not support file security (such as FAT). |
-bool VolumeSupportsACLs(const wchar_t* any_path) { |
- wchar_t expand[MAX_PATH +1]; |
- DWORD len =::ExpandEnvironmentStringsW(any_path, expand, _countof(expand)); |
- if (0 == len) return false; |
- if (len > _countof(expand)) return false; |
- if (!::PathStripToRootW(expand)) return false; |
- DWORD fs_flags = 0; |
- if (!::GetVolumeInformationW(expand, NULL, 0, 0, NULL, &fs_flags, NULL, 0)) |
- return false; |
- if (fs_flags & FILE_PERSISTENT_ACLS) return true; |
- return false; |
-} |
- |
-// Tests if the suite is working properly. |
-TEST(ValidationSuite, TestSuite) { |
- TestRunner runner; |
- ASSERT_EQ(SBOX_TEST_PING_OK, runner.RunTest(L"ping")); |
-} |
- |
-// Tests if the file system is correctly protected by the sandbox. |
-TEST(ValidationSuite, TestFileSystem) { |
- // Do not perform the test if the system is using FAT or any other |
- // file system that does not have file security. |
- ASSERT_TRUE(VolumeSupportsACLs(L"%SystemDrive%\\")); |
- ASSERT_TRUE(VolumeSupportsACLs(L"%SystemRoot%\\")); |
- ASSERT_TRUE(VolumeSupportsACLs(L"%ProgramFiles%\\")); |
- ASSERT_TRUE(VolumeSupportsACLs(L"%Temp%\\")); |
- ASSERT_TRUE(VolumeSupportsACLs(L"%AppData%\\")); |
- |
- TestRunner runner; |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenFileCmd %SystemDrive%")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenFileCmd %SystemRoot%")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenFileCmd %ProgramFiles%")); |
- EXPECT_EQ(SBOX_TEST_DENIED, |
- runner.RunTest(L"OpenFileCmd %SystemRoot%\\System32")); |
- EXPECT_EQ(SBOX_TEST_DENIED, |
- runner.RunTest(L"OpenFileCmd %SystemRoot%\\explorer.exe")); |
- EXPECT_EQ(SBOX_TEST_DENIED, |
- runner.RunTest(L"OpenFileCmd %SystemRoot%\\Cursors\\arrow_i.cur")); |
- EXPECT_EQ(SBOX_TEST_DENIED, |
- runner.RunTest(L"OpenFileCmd %AllUsersProfile%")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenFileCmd %Temp%")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenFileCmd %AppData%")); |
-} |
- |
-// Tests if the registry is correctly protected by the sandbox. |
-TEST(ValidationSuite, TestRegistry) { |
- TestRunner runner; |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenKey HKLM")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenKey HKCU")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenKey HKU")); |
- EXPECT_EQ(SBOX_TEST_DENIED, |
- runner.RunTest( |
- L"OpenKey HKLM " |
- L"\"Software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\"")); |
-} |
- |
-// Tests that the permissions on the Windowstation does not allow the sandbox |
-// to get to the interactive desktop or to make the sbox desktop interactive. |
-TEST(ValidationSuite, TestDesktop) { |
- TestRunner runner; |
- runner.GetPolicy()->SetAlternateDesktop(true); |
- runner.GetPolicy()->SetIntegrityLevel(INTEGRITY_LEVEL_LOW); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"OpenInteractiveDesktop NULL")); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"SwitchToSboxDesktop NULL")); |
-} |
- |
-// Tests that the permissions on the Windowstation does not allow the sandbox |
-// to get to the interactive desktop or to make the sbox desktop interactive. |
-TEST(ValidationSuite, TestAlternateDesktop) { |
- |
- TestRunner runner; |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(L"EnumAlternateWinsta NULL")); |
- |
- wchar_t command[1024] = {0}; |
- runner.SetTimeout(3600000); |
- runner.GetPolicy()->SetAlternateDesktop(true); |
- runner.GetPolicy()->SetIntegrityLevel(INTEGRITY_LEVEL_LOW); |
- base::string16 desktop_name = runner.GetPolicy()->GetAlternateDesktop(); |
- desktop_name = desktop_name.substr(desktop_name.find('\\') + 1); |
- wsprintf(command, L"OpenAlternateDesktop %lS", desktop_name.c_str()); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(command)); |
-} |
- |
-// Tests if the windows are correctly protected by the sandbox. |
-TEST(ValidationSuite, TestWindows) { |
- TestRunner runner; |
- wchar_t command[1024] = {0}; |
- |
- wsprintf(command, L"ValidWindow %Id", |
- reinterpret_cast<size_t>(::GetDesktopWindow())); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(command)); |
- |
- wsprintf(command, L"ValidWindow %Id", |
- reinterpret_cast<size_t>(::FindWindow(NULL, NULL))); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(command)); |
-} |
- |
-// Tests that a locked-down process cannot open another locked-down process. |
-TEST(ValidationSuite, TestProcessDenyLockdown) { |
- TestRunner runner; |
- TestRunner target; |
- |
- target.SetAsynchronous(true); |
- |
- EXPECT_EQ(SBOX_TEST_SUCCEEDED, target.RunTest(L"SleepCmd 30000")); |
- |
- TestProcessAccess(&runner, target.process_id()); |
-} |
- |
-// Tests that a low-integrity process cannot open a locked-down process (due |
-// to the integrity label changing after startup via SetDelayedIntegrityLevel). |
-TEST(ValidationSuite, TestProcessDenyLowIntegrity) { |
- |
- TestRunner runner; |
- TestRunner target; |
- |
- target.SetAsynchronous(true); |
- target.GetPolicy()->SetDelayedIntegrityLevel(INTEGRITY_LEVEL_LOW); |
- |
- runner.GetPolicy()->SetIntegrityLevel(INTEGRITY_LEVEL_LOW); |
- runner.GetPolicy()->SetTokenLevel(USER_RESTRICTED_SAME_ACCESS, |
- USER_INTERACTIVE); |
- |
- EXPECT_EQ(SBOX_TEST_SUCCEEDED, target.RunTest(L"SleepCmd 30000")); |
- |
- TestProcessAccess(&runner, target.process_id()); |
-} |
- |
-// Tests that a locked-down process cannot open a low-integrity process. |
-TEST(ValidationSuite, TestProcessDenyBelowLowIntegrity) { |
- |
- TestRunner runner; |
- TestRunner target; |
- |
- target.SetAsynchronous(true); |
- target.GetPolicy()->SetIntegrityLevel(INTEGRITY_LEVEL_LOW); |
- target.GetPolicy()->SetTokenLevel(USER_RESTRICTED_SAME_ACCESS, |
- USER_INTERACTIVE); |
- |
- runner.GetPolicy()->SetDelayedIntegrityLevel(INTEGRITY_LEVEL_UNTRUSTED); |
- runner.GetPolicy()->SetTokenLevel(USER_RESTRICTED_SAME_ACCESS, |
- USER_INTERACTIVE); |
- |
- EXPECT_EQ(SBOX_TEST_SUCCEEDED, target.RunTest(L"SleepCmd 30000")); |
- |
- TestProcessAccess(&runner, target.process_id()); |
-} |
- |
-// Tests if the threads are correctly protected by the sandbox. |
-TEST(ValidationSuite, TestThread) { |
- TestRunner runner; |
- wchar_t command[1024] = {0}; |
- |
- wsprintf(command, L"OpenThreadCmd %d", ::GetCurrentThreadId()); |
- EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(command)); |
-} |
- |
-// Tests if an over-limit allocation will be denied. |
-TEST(ValidationSuite, TestMemoryLimit) { |
- TestRunner runner; |
- wchar_t command[1024] = {0}; |
- const int kAllocationSize = 256 * 1024 * 1024; |
- |
- wsprintf(command, L"AllocateCmd %d", kAllocationSize); |
- runner.GetPolicy()->SetJobMemoryLimit(kAllocationSize); |
- EXPECT_EQ(SBOX_FATAL_MEMORY_EXCEEDED, runner.RunTest(command)); |
-} |
- |
-// Tests a large allocation will succeed absent limits. |
-TEST(ValidationSuite, TestMemoryNoLimit) { |
- TestRunner runner; |
- wchar_t command[1024] = {0}; |
- const int kAllocationSize = 256 * 1024 * 1024; |
- |
- wsprintf(command, L"AllocateCmd %d", kAllocationSize); |
- EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(command)); |
-} |
- |
-} // namespace sandbox |