Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4196)

Unified Diff: chrome_elf/chrome_elf_util_unittest.cc

Issue 1656453002: [Chrome ELF] Early browser security support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Only run the new browser security test on >= Win8. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_elf/chrome_elf_security.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_elf/chrome_elf_util_unittest.cc
diff --git a/chrome_elf/chrome_elf_util_unittest.cc b/chrome_elf/chrome_elf_util_unittest.cc
index dc4f1e13c2d7c91b299c397a226c71ea0d128ec2..ad4671a5efe3913c49197780833621dfb4c37f88 100644
--- a/chrome_elf/chrome_elf_util_unittest.cc
+++ b/chrome_elf/chrome_elf_util_unittest.cc
@@ -10,6 +10,7 @@
#include "base/win/registry.h"
#include "chrome/install_static/install_util.h"
#include "chrome_elf/chrome_elf_constants.h"
+#include "chrome_elf/chrome_elf_security.h"
#include "chrome_elf/nt_registry/nt_registry.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
@@ -28,6 +29,62 @@ const wchar_t kChromeUserExePath[] =
const wchar_t kChromiumExePath[] =
L"C:\\Users\\user\\AppData\\Local\\Chromium\\Application\\chrome.exe";
+bool SetSecurityFinchFlag(bool creation) {
+ bool success = true;
+ base::win::RegKey security_key(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS);
+
+ if (creation) {
+ if (ERROR_SUCCESS !=
+ security_key.CreateKey(elf_sec::kRegSecurityFinchPath, KEY_QUERY_VALUE))
+ success = false;
+ } else {
+ if (ERROR_SUCCESS != security_key.DeleteKey(elf_sec::kRegSecurityFinchPath))
+ success = false;
+ }
+
+ security_key.Close();
+ return success;
+}
+
+bool IsSecuritySet() {
+ typedef decltype(GetProcessMitigationPolicy)* GetProcessMitigationPolicyFunc;
+
+ // Check the settings from EarlyBrowserSecurity().
+ if (::IsWindows8OrGreater()) {
+ GetProcessMitigationPolicyFunc get_process_mitigation_policy =
+ reinterpret_cast<GetProcessMitigationPolicyFunc>(::GetProcAddress(
+ ::GetModuleHandleW(L"kernel32.dll"), "GetProcessMitigationPolicy"));
+ if (!get_process_mitigation_policy)
+ return false;
+
+ // Check that extension points are disabled.
+ // (Legacy hooking.)
+ PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY policy = {};
+ if (!get_process_mitigation_policy(::GetCurrentProcess(),
+ ProcessExtensionPointDisablePolicy,
+ &policy, sizeof(policy)))
+ return false;
+
+ return policy.DisableExtensionPoints;
+ }
+
+ return true;
+}
+
+void RegRedirect(nt::ROOT_KEY key,
+ registry_util::RegistryOverrideManager& rom) {
+ base::string16 temp;
+
+ if (key == nt::HKCU) {
+ rom.OverrideRegistry(HKEY_CURRENT_USER, &temp);
+ ::wcsncpy(nt::HKCU_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
+ } else if (key == nt::HKLM) {
+ rom.OverrideRegistry(HKEY_LOCAL_MACHINE, &temp);
+ ::wcsncpy(nt::HKLM_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
+ }
+ // nt::AUTO should not be passed into this function.
+}
+
TEST(ChromeElfUtilTest, CanaryTest) {
EXPECT_TRUE(IsSxSChrome(kCanaryExePath));
EXPECT_FALSE(IsSxSChrome(kChromeUserExePath));
@@ -45,6 +102,25 @@ TEST(ChromeElfUtilTest, BrowserProcessTest) {
EXPECT_FALSE(IsNonBrowserProcess());
}
+TEST(ChromeElfUtilTest, BrowserProcessSecurityTest) {
+ if (!::IsWindows8OrGreater())
+ return;
+
+ // Set up registry override for this test.
+ registry_util::RegistryOverrideManager override_manager;
+ RegRedirect(nt::HKCU, override_manager);
+
+ // First, ensure that the emergency-off finch signal works.
+ EXPECT_TRUE(SetSecurityFinchFlag(true));
+ EarlyBrowserSecurity();
+ EXPECT_FALSE(IsSecuritySet());
+ EXPECT_TRUE(SetSecurityFinchFlag(false));
+
+ // Second, test that the process mitigation is set when no finch signal.
+ EarlyBrowserSecurity();
+ EXPECT_TRUE(IsSecuritySet());
+}
+
//------------------------------------------------------------------------------
// NT registry API tests (chrome_elf_reg)
//------------------------------------------------------------------------------
@@ -69,10 +145,8 @@ TEST(ChromeElfUtilTest, NTRegistry) {
const wchar_t* sz_new_key_3 = L"\\test\\new\\subkey\\\\blah2";
// Set up registry override for this test.
- base::string16 temp;
registry_util::RegistryOverrideManager override_manager;
- override_manager.OverrideRegistry(HKEY_CURRENT_USER, &temp);
- ::wcsncpy(nt::HKCU_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
+ RegRedirect(nt::HKCU, override_manager);
// Create a temp key to play under.
ASSERT_TRUE(nt::CreateRegKey(nt::HKCU, elf_sec::kRegSecurityPath,
@@ -162,12 +236,9 @@ class ChromeElfUtilTest
std::tuple<const char*, const char*, const char*>> {
protected:
void SetUp() override {
- base::string16 temp;
- override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE, &temp);
- ::wcsncpy(nt::HKLM_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
- temp.clear();
- override_manager_.OverrideRegistry(HKEY_CURRENT_USER, &temp);
- ::wcsncpy(nt::HKCU_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
+ // Set up registry override for these tests.
+ RegRedirect(nt::HKLM, override_manager_);
+ RegRedirect(nt::HKCU, override_manager_);
const char* app;
const char* level;
« no previous file with comments | « chrome_elf/chrome_elf_security.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698