security_SandboxStatus.py revision 40f2187948887ad8e782fa4f28fba98b83f7818c
17f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 27f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar# Use of this source code is governed by a BSD-style license that can be 37f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar# found in the LICENSE file. 47f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 5f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obesimport re 6132d1f71fbc53f15a50bb2e5b739614e05abf230Jorge Lucangeli Obes 7437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkarfrom autotest_lib.client.bin import test, utils 87f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkarfrom autotest_lib.client.common_lib import error 97f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkarfrom autotest_lib.client.common_lib.cros import chrome 107f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkarfrom telemetry.core import exceptions 117f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 127f2338c4c27f543d594d134aee7764cc49ccf88aAchuith BhandarkarSANDBOXES = [u'SUID Sandbox', 13f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obes u'\xa0\xa0PID name ?spaces', 147f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar u'\xa0\xa0Network namespaces', 157f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar u'Seccomp-BPF sandbox'] 167f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 1740f2187948887ad8e782fa4f28fba98b83f7818cAchuith Bhandarkarclass security_SandboxStatus(test.test): 187f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar """Verify sandbox status.""" 197f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar version = 1 207f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 217f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 22437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar def _EvaluateJavaScript(self, js): 23437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar '''Evaluates js, returns None if an exception was thrown.''' 24437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar 25437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar try: 26437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar return self._tab.EvaluateJavaScript(js) 27437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar except exceptions.EvaluateException: 28437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar return None 29437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar 307f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def _TableEntry(self, row, column): 317f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar '''Fetches table cell text content corresponding to row, column.''' 327f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 337f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar table_js = ("document.getElementsByTagName('table')[0]." 347f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar "rows[%d].cells[%d].textContent" % (row, column)) 35437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar return utils.poll_for_condition( 36437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar lambda: self._EvaluateJavaScript(table_js), 3739d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes exception=error.TestError( 38437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar 'Failed to evaluate in chrome://sandbox "%s"' 39437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar % table_js), 40437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar timeout=30) 417f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 427f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 437f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def _CheckRowName(self, row, expected_name): 447f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar '''Ensures the name of the row is as we expect.''' 457f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 467f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar actual_name = self._TableEntry(row, 0) 47f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obes if not re.match(expected_name, actual_name): 48f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obes raise error.TestFail('Expected row %d to be "%s", found "%s"' 49f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obes % (row, expected_name, actual_name)) 507f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 517f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 527f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def _CheckRowNames(self, expected_names): 537f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar for row in range(len(expected_names)): 547f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._CheckRowName(row, expected_names[row]) 557f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 567f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 577f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def _CheckRowValues(self, num_rows): 587f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar '''Ensures all sandboxes are on.''' 597f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 607f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar for row in range(num_rows): 617f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar value = self._TableEntry(row, 1) 627f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar if value != "Yes": 637f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar name = self._TableEntry(row, 0) 64f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obes raise error.TestFail('"%s" enabled = "%s"' % (name, value)) 657f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 667f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 677f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def _CheckGPUCell(self, cell, content, error_msg): 687f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar '''Checks the content of the cells in the GPU sandbox row.''' 697f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 707f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar gpu_js = ("document.getElementsByTagName('table')" 717f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar "[1].rows[1].cells[%d].textContent" % cell) 727f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar try: 73437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar res = utils.poll_for_condition( 74437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar lambda: self._EvaluateJavaScript(gpu_js), 75437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar timeout=30) 76437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar except utils.TimeoutError: 7739d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes raise error.TestError('Failed to evaluate in chrome://gpu "%s"' 7839d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes % gpu_js) 79132d1f71fbc53f15a50bb2e5b739614e05abf230Jorge Lucangeli Obes 807f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar if res.find(content) == -1: 8139d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes raise error.TestFail(error_msg) 827f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 837f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 847f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def run_once(self): 8557c75076df269ecd843ad246c7deb4f360db8532Achuith Bhandarkar with chrome.Chrome() as cr: 867f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab = cr.browser.tabs[0] 877f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab.Navigate('chrome://sandbox') 887f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._CheckRowNames(SANDBOXES) 897f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._CheckRowValues(len(SANDBOXES)) 907f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 917f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab.Navigate('chrome://gpu') 9239d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes self._CheckGPUCell(0, 'Sandboxed', 9339d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes 'Could not locate "Sandboxed" row in table') 9439d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes self._CheckGPUCell(1, 'true', 'GPU not sandboxed') 95