{"id":620,"date":"2024-06-02T00:24:45","date_gmt":"2024-06-01T22:24:45","guid":{"rendered":"https:\/\/threedots.ovh\/blog\/?p=620"},"modified":"2024-06-02T23:31:38","modified_gmt":"2024-06-02T21:31:38","slug":"recall-random-notes-about-the-security-model","status":"publish","type":"post","link":"https:\/\/threedots.ovh\/blog\/2024\/06\/recall-random-notes-about-the-security-model\/","title":{"rendered":"Recall: random notes about the security model"},"content":{"rendered":"\n<p><em>Disclaimer: As everything on this blog is, this is my own opinion, and not my employer&#8217;s.<\/em><\/p>\n\n\n\n<p>The conventional Unix security model is based around users, not applications. This implies that every application running in a given user context has access to all user data, even if that&#8217;s not related at all to what the app actually needs. And administrator users have access to all data within the system.<\/p>\n\n\n\n<p>Today, when a hacker hacks an average Windows system to administrative privileges<sup data-fn=\"a84975cc-94bb-4424-9aeb-7491757d57b7\" class=\"fn\"><a href=\"#a84975cc-94bb-4424-9aeb-7491757d57b7\" id=\"a84975cc-94bb-4424-9aeb-7491757d57b7-link\">1<\/a><\/sup>, they get access to browser history, its cache and other local data. What Recall does is add a searchable activity log that includes regular snapshots<sup data-fn=\"05779bcf-47ec-49a3-a07d-721f730fbd85\" class=\"fn\"><a href=\"#05779bcf-47ec-49a3-a07d-721f730fbd85\" id=\"05779bcf-47ec-49a3-a07d-721f730fbd85-link\">2<\/a><\/sup>.<\/p>\n\n\n\n<p><em>Is that a fundamental change or a change in degree?<\/em> If the latter, then I&#8217;d argue that this isn&#8217;t such a big thing, as it fits within the well understood<sup data-fn=\"f9e95b43-c37a-4fd2-8151-ba1bde9933aa\" class=\"fn\"><a href=\"#f9e95b43-c37a-4fd2-8151-ba1bde9933aa\" id=\"f9e95b43-c37a-4fd2-8151-ba1bde9933aa-link\">3<\/a><\/sup> security model of Windows, which implies that access to an administrative account implies that you can see what&#8217;s going on across all of the system<sup data-fn=\"fe9a2cef-a42f-4e6d-9136-cbb726f2b420\" class=\"fn\"><a href=\"#fe9a2cef-a42f-4e6d-9136-cbb726f2b420\" id=\"fe9a2cef-a42f-4e6d-9136-cbb726f2b420-link\">4<\/a><\/sup>. If the former, then <em>Recall<\/em> is crossing the Rubicon by collating all of this data and making it searchable across a single place.<\/p>\n\n\n\n<p><em>What&#8217;s the biggest prior assumption that Recall breaks?<\/em> Recall doesn&#8217;t redact anything<sup data-fn=\"593d5ca2-d1c6-4630-b4ea-40d3e9f94f42\" class=\"fn\"><a href=\"#593d5ca2-d1c6-4630-b4ea-40d3e9f94f42\" id=\"593d5ca2-d1c6-4630-b4ea-40d3e9f94f42-link\">5<\/a><\/sup> on the screen from its dataset, except if the application or website<sup data-fn=\"7cce477c-fdfd-44e2-9b3b-43f6ce240861\" class=\"fn\"><a href=\"#7cce477c-fdfd-44e2-9b3b-43f6ce240861\" id=\"7cce477c-fdfd-44e2-9b3b-43f6ce240861-link\">6<\/a><\/sup> is on a deny list. Unless specifically deleted by the application<sup data-fn=\"aee4243c-79a3-493b-803f-11464b72c518\" class=\"fn\"><a href=\"#aee4243c-79a3-493b-803f-11464b72c518\" id=\"aee4243c-79a3-493b-803f-11464b72c518-link\">7<\/a><\/sup>, snapshots are kept. There&#8217;s no way<sup data-fn=\"12d45077-3456-4ceb-8a63-68fb0a30dfd3\" class=\"fn\"><a href=\"#12d45077-3456-4ceb-8a63-68fb0a30dfd3\" id=\"12d45077-3456-4ceb-8a63-68fb0a30dfd3-link\">8<\/a><\/sup> for a website to signal that some data is too sensitive to keep by default<sup data-fn=\"5f0bc878-8bec-4ffa-8798-615899dab91c\" class=\"fn\"><a href=\"#5f0bc878-8bec-4ffa-8798-615899dab91c\" id=\"5f0bc878-8bec-4ffa-8798-615899dab91c-link\">9<\/a><\/sup>. This breaks the assumption that data on screen is only recorded when the user explicitly initiates a recording session or takes a screenshot. Special care has to be taken by applications<sup data-fn=\"9802bc56-b974-4385-857b-5662bede9ac1\" class=\"fn\"><a href=\"#9802bc56-b974-4385-857b-5662bede9ac1\" id=\"9802bc56-b974-4385-857b-5662bede9ac1-link\">10<\/a><\/sup> to delete an activity when the underlying data is<sup data-fn=\"07fa962f-84f5-47b3-89f3-093f726ec0e4\" class=\"fn\"><a href=\"#07fa962f-84f5-47b3-89f3-093f726ec0e4\" id=\"07fa962f-84f5-47b3-89f3-093f726ec0e4-link\">11<\/a><\/sup>. However, there&#8217;s no current documentation<sup data-fn=\"0bdabd77-f40d-40fe-b37b-4fe5d53018e0\" class=\"fn\"><a href=\"#0bdabd77-f40d-40fe-b37b-4fe5d53018e0\" id=\"0bdabd77-f40d-40fe-b37b-4fe5d53018e0-link\">12<\/a><\/sup> covering that aspect of the security model, and we&#8217;re around two weeks away from launch.<\/p>\n\n\n\n<p><em>Does Recall allow an attacker with administrative access to have access to more info than they could collect otherwise?<\/em> I&#8217;d argue yes. Browser caches expire, might not cover uncached pages, and are not deterministic in data collection the way Recall is. When data is deleted from the system<sup data-fn=\"c3ac3227-39eb-4818-ab58-45962225ed15\" class=\"fn\"><a href=\"#c3ac3227-39eb-4818-ab58-45962225ed15\" id=\"c3ac3227-39eb-4818-ab58-45962225ed15-link\">13<\/a><\/sup>, Recall might still retain a copy unless proper integration is done to also <em>revoke<\/em> those snapshots from the Recall side.<\/p>\n\n\n\n<p><em>Do other desktop operating systems have ways to make a folder inaccessible even if you are an administrator?<\/em> macOS does, through System Integrity Protection. <em>Rootless<\/em><sup data-fn=\"d4d36b45-be09-48ee-9c14-2bb56fae6050\" class=\"fn\"><a href=\"#d4d36b45-be09-48ee-9c14-2bb56fae6050\" id=\"d4d36b45-be09-48ee-9c14-2bb56fae6050-link\">14<\/a><\/sup> systems do not allow even an administrator to access to folders protected by SIP, even if running as <code>root<\/code>. SIP also restricts debugging of signed binaries except if those explicitly allow them to be debugged. This makes exfiltration of data from folders protected by SIP significantly harder<sup data-fn=\"f28629e4-0ad5-492c-80a0-3b72e41b747e\" class=\"fn\"><a href=\"#f28629e4-0ad5-492c-80a0-3b72e41b747e\" id=\"f28629e4-0ad5-492c-80a0-3b72e41b747e-link\">15<\/a><\/sup>.<\/p>\n\n\n\n<p><em>If I&#8217;m a business, should I care?<\/em> Yes, you very likely have data retention and accuracy requirements<sup data-fn=\"e7047019-8085-4fba-a992-56353bd6479a\" class=\"fn\"><a href=\"#e7047019-8085-4fba-a992-56353bd6479a\" id=\"e7047019-8085-4fba-a992-56353bd6479a-link\">16<\/a><\/sup>. Recall can make compliance with those significantly harder, especially as your line of business applications are <em>probably<\/em> not integrated with Recall APIs. Customer data might as a result linger on decentralised systems significantly longer than necessary, heightening business risks.<\/p>\n\n\n\n<p><em>edit on June 2: Added the &#8220;What&#8217;s the biggest assumption that Recall breaks?&#8221; and &#8220;If I&#8217;m a business, why should I care?&#8221; sections.<\/em><\/p>\n\n\n<ol class=\"wp-block-footnotes\"><li id=\"a84975cc-94bb-4424-9aeb-7491757d57b7\">I&#8217;d argue that a lot of Windows systems are single-user, with UAC being the only boundary to administrative access. <em>UAC is not a security boundary<\/em> is a saying that&#8217;s often pronounced in some circles, not without reason. <a href=\"#a84975cc-94bb-4424-9aeb-7491757d57b7-link\" aria-label=\"Jump to footnote reference 1\">\u21a9\ufe0e<\/a><\/li><li id=\"05779bcf-47ec-49a3-a07d-721f730fbd85\">Screenshots, enhanced by data provided by the application through activity APIs. <a href=\"#05779bcf-47ec-49a3-a07d-721f730fbd85-link\" aria-label=\"Jump to footnote reference 2\">\u21a9\ufe0e<\/a><\/li><li id=\"f9e95b43-c37a-4fd2-8151-ba1bde9933aa\">At least I hope so. It&#8217;s not something new. <a href=\"#f9e95b43-c37a-4fd2-8151-ba1bde9933aa-link\" aria-label=\"Jump to footnote reference 3\">\u21a9\ufe0e<\/a><\/li><li id=\"fe9a2cef-a42f-4e6d-9136-cbb726f2b420\">Protected processes (incl. light) and VSM trustlets exist. The former are used for <code>csrss<\/code> since Windows 8.1 and DRM workloads notably, and the latter are used for Credential Guard and biometric data protection on some systems. However, I&#8217;m not aware of Windows components using those to protect <em>bulk<\/em> user data on a given machine.  <a href=\"#fe9a2cef-a42f-4e6d-9136-cbb726f2b420-link\" aria-label=\"Jump to footnote reference 4\">\u21a9\ufe0e<\/a><\/li><li id=\"593d5ca2-d1c6-4630-b4ea-40d3e9f94f42\">DRMed content goes through the Protected Media Path, and as such is not accessible to Recall. <a href=\"#593d5ca2-d1c6-4630-b4ea-40d3e9f94f42-link\" aria-label=\"Jump to footnote reference 5\">\u21a9\ufe0e<\/a><\/li><li id=\"7cce477c-fdfd-44e2-9b3b-43f6ce240861\">When using Microsoft Edge <a href=\"#7cce477c-fdfd-44e2-9b3b-43f6ce240861-link\" aria-label=\"Jump to footnote reference 6\">\u21a9\ufe0e<\/a><\/li><li id=\"aee4243c-79a3-493b-803f-11464b72c518\">Activity APIs provide a way for an application to delete an activity or all activities associated to it, see <a href=\"https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivitychannel.deleteactivityasync?view=winrt-22621\">https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivitychannel.deleteactivityasync?view=winrt-22621<\/a> <a href=\"#aee4243c-79a3-493b-803f-11464b72c518-link\" aria-label=\"Jump to footnote reference 7\">\u21a9\ufe0e<\/a><\/li><li id=\"12d45077-3456-4ceb-8a63-68fb0a30dfd3\">Hmm, the website can perhaps use a hardware-backed DRM solution to display 2FA recovery codes for example. But that&#8217;s not exactly the wisest idea. <a href=\"#12d45077-3456-4ceb-8a63-68fb0a30dfd3-link\" aria-label=\"Jump to footnote reference 8\">\u21a9\ufe0e<\/a><\/li><li id=\"5f0bc878-8bec-4ffa-8798-615899dab91c\">Users ideally <em>must<\/em> be able to override this if they want to. <a href=\"#5f0bc878-8bec-4ffa-8798-615899dab91c-link\" aria-label=\"Jump to footnote reference 9\">\u21a9\ufe0e<\/a><\/li><li id=\"9802bc56-b974-4385-857b-5662bede9ac1\">And utilities. Are you <em>really<\/em> sure that your print preview window is covered too? <a href=\"#9802bc56-b974-4385-857b-5662bede9ac1-link\" aria-label=\"Jump to footnote reference 10\">\u21a9\ufe0e<\/a><\/li><li id=\"07fa962f-84f5-47b3-89f3-093f726ec0e4\">An activity can directly be associated with an underlying file location: <a href=\"https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivity.contenturi?view=winrt-22621\">https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivity.contenturi?view=winrt-22621<\/a> <a href=\"#07fa962f-84f5-47b3-89f3-093f726ec0e4-link\" aria-label=\"Jump to footnote reference 11\">\u21a9\ufe0e<\/a><\/li><li id=\"0bdabd77-f40d-40fe-b37b-4fe5d53018e0\">The only developer docs about Recall right now are at <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/ai\/apis\/recall\">https:\/\/learn.microsoft.com\/en-us\/windows\/ai\/apis\/recall<\/a>. For a feature with such an impact, this is very lacking. Application developers should have told much earlier and given enough time to adapt their applications. <a href=\"#0bdabd77-f40d-40fe-b37b-4fe5d53018e0-link\" aria-label=\"Jump to footnote reference 12\">\u21a9\ufe0e<\/a><\/li><li id=\"c3ac3227-39eb-4818-ab58-45962225ed15\">Or the server. <a href=\"#c3ac3227-39eb-4818-ab58-45962225ed15-link\" aria-label=\"Jump to footnote reference 13\">\u21a9\ufe0e<\/a><\/li><li id=\"d4d36b45-be09-48ee-9c14-2bb56fae6050\">Systems where SIP is enabled, which is the default. <a href=\"#d4d36b45-be09-48ee-9c14-2bb56fae6050-link\" aria-label=\"Jump to footnote reference 14\">\u21a9\ufe0e<\/a><\/li><li id=\"f28629e4-0ad5-492c-80a0-3b72e41b747e\">Historically, there were quite a few SIP bypasses. However, SIP is still generally effective. <a href=\"#f28629e4-0ad5-492c-80a0-3b72e41b747e-link\" aria-label=\"Jump to footnote reference 15\">\u21a9\ufe0e<\/a><\/li><li id=\"e7047019-8085-4fba-a992-56353bd6479a\">In plenty of jurisdictions, customers have the right to correct errors in business records. Does that include everything that Recall might have about a given customer? <a href=\"#e7047019-8085-4fba-a992-56353bd6479a-link\" aria-label=\"Jump to footnote reference 16\">\u21a9\ufe0e<\/a><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Disclaimer: As everything on this blog is, this is my own opinion, and not my employer&#8217;s. The conventional Unix security model is based around users, not applications. This implies that every application running in a given user context has access to all user data, even if that&#8217;s not related at all to what the app&hellip;&nbsp;<a href=\"https:\/\/threedots.ovh\/blog\/2024\/06\/recall-random-notes-about-the-security-model\/\" rel=\"bookmark\">Read More &raquo;<span class=\"screen-reader-text\">Recall: random notes about the security model<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":"[{\"content\":\"I'd argue that a lot of Windows systems are single-user, with UAC being the only boundary to administrative access. <em>UAC is not a security boundary<\/em> is a saying that's often pronounced in some circles, not without reason.\",\"id\":\"a84975cc-94bb-4424-9aeb-7491757d57b7\"},{\"content\":\"Screenshots, enhanced by data provided by the application through activity APIs.\",\"id\":\"05779bcf-47ec-49a3-a07d-721f730fbd85\"},{\"content\":\"At least I hope so. It's not something new.\",\"id\":\"f9e95b43-c37a-4fd2-8151-ba1bde9933aa\"},{\"content\":\"Protected processes (incl. light) and VSM trustlets exist. The former are used for <code>csrss<\/code> since Windows 8.1 and DRM workloads notably, and the latter are used for Credential Guard and biometric data protection on some systems. However, I'm not aware of Windows components using those to protect <em>bulk<\/em> user data on a given machine. \",\"id\":\"fe9a2cef-a42f-4e6d-9136-cbb726f2b420\"},{\"content\":\"DRMed content goes through the Protected Media Path, and as such is not accessible to Recall.\",\"id\":\"593d5ca2-d1c6-4630-b4ea-40d3e9f94f42\"},{\"content\":\"When using Microsoft Edge\",\"id\":\"7cce477c-fdfd-44e2-9b3b-43f6ce240861\"},{\"content\":\"Activity APIs provide a way for an application to delete an activity or all activities associated to it, see <a href=\\\"https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivitychannel.deleteactivityasync?view=winrt-22621\\\">https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivitychannel.deleteactivityasync?view=winrt-22621<\/a>\",\"id\":\"aee4243c-79a3-493b-803f-11464b72c518\"},{\"content\":\"Hmm, the website can perhaps use a hardware-backed DRM solution to display 2FA recovery codes for example. But that's not exactly the wisest idea.\",\"id\":\"12d45077-3456-4ceb-8a63-68fb0a30dfd3\"},{\"content\":\"Users ideally <em>must<\/em> be able to override this if they want to.\",\"id\":\"5f0bc878-8bec-4ffa-8798-615899dab91c\"},{\"content\":\"And utilities. Are you <em>really<\/em> sure that your print preview window is covered too?\",\"id\":\"9802bc56-b974-4385-857b-5662bede9ac1\"},{\"content\":\"An activity can directly be associated with an underlying file location: <a href=\\\"https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivity.contenturi?view=winrt-22621\\\">https:\/\/learn.microsoft.com\/en-us\/uwp\/api\/windows.applicationmodel.useractivities.useractivity.contenturi?view=winrt-22621<\/a>\",\"id\":\"07fa962f-84f5-47b3-89f3-093f726ec0e4\"},{\"content\":\"The only developer docs about Recall right now are at <a href=\\\"https:\/\/learn.microsoft.com\/en-us\/windows\/ai\/apis\/recall\\\">https:\/\/learn.microsoft.com\/en-us\/windows\/ai\/apis\/recall<\/a>. For a feature with such an impact, this is very lacking. Application developers should have told much earlier and given enough time to adapt their applications.\",\"id\":\"0bdabd77-f40d-40fe-b37b-4fe5d53018e0\"},{\"content\":\"Or the server.\",\"id\":\"c3ac3227-39eb-4818-ab58-45962225ed15\"},{\"content\":\"Systems where SIP is enabled, which is the default.\",\"id\":\"d4d36b45-be09-48ee-9c14-2bb56fae6050\"},{\"content\":\"Historically, there were quite a few SIP bypasses. However, SIP is still generally effective.\",\"id\":\"f28629e4-0ad5-492c-80a0-3b72e41b747e\"},{\"content\":\"In plenty of jurisdictions, customers have the right to correct errors in business records. Does that include everything that Recall might have about a given customer?\",\"id\":\"e7047019-8085-4fba-a992-56353bd6479a\"}]"},"categories":[1],"tags":[],"class_list":["post-620","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/posts\/620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/comments?post=620"}],"version-history":[{"count":4,"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/posts\/620\/revisions"}],"predecessor-version":[{"id":627,"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/posts\/620\/revisions\/627"}],"wp:attachment":[{"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/media?parent=620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/categories?post=620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/threedots.ovh\/blog\/wp-json\/wp\/v2\/tags?post=620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}