本地化:跨操作系统的信息亭模式

允许进行足够的控制,同时防止您的计算机陷入僵尸网络。

想要为用户控制的服务(从ATM和自动售货机界面到云中的公共图书馆桌面和虚拟桌面环境)提供安全解决方案的任何人都面临着这个问题。


由于我们允许用户在所有主要操作系统和版本的共享桌面上记录测试脚本,从而允许VNC对其进行访问,因此我们面临的问题甚至更加复杂。 我们需要在提供的每个操作系统(Mac / Linux / Windows)中创建一个Kiosk机器,并对每个操作系统版本重复该操作。 我们需要确保在会话之间不保留任何数据,并在我们称为“ 机器回收”的过程中删除所有用户数据。 完成此操作后,我们还需要通过我们的安全渗透测试团队(内部白帽黑客)的检查,因此我们为我们完成了工作……

我应该暂停一下,以使标题产生误导,信息亭模式显然不是您可以以跨操作系统的方式进行的操作,因此标题应显示“每个操作系统中的信息亭模式”,但是没有相同的提示音。它…

在此过程的早期,经过一些研究,我决定我们用于OS特定控件的程序不应使用OS抽象层,例如为与本机OS API交互而编写的跨OS [Python / Go / Java / JS]项目,因为它们通常会带来本机(Cpp)库或嵌入的不安全代码,因此很难在许多OS和体系结构排列上构建,因此需要很难找到的库和依赖项,并且通常使您浪费时间和精力。
相反,我选择编写本机代码实用程序,通常作为小型cmdline ObjC,Cpp或C#程序来完成每个所需的Job。 这样,我们可以为每个操作系统量身定制完美的工具,并且仅在目标系统上进行编译, 这种策略是有成效的使我们能够使用各种不同的特定于操作系统的方法来解决每个问题。

关于如何在Windows中实现Kiosk模式的指南无数,甚至有一些现成的程序可以为您完成一些工作,但是最后,为了保护您的软件,没有什么比自己动手做更多的工作了。确切知道漏洞在哪里以及您阻止了什么。 这是我们用于完整Windows控制的清单:

  1. 控制程序执行 :应用程序锁定器/组策略
  2. 文件系统访问 :文件权限/ FS过滤器
  3. 用户界面 :更换外壳(替换资源管理器)
  4. Windows设置 :Powershell脚本,动态更改的Win-Service
  5. 回收 :彻底删除用户配置文件(远非如此),删除虚拟机

手在硬化

Windows提供了一些满足某些需求的功能,可以使用文件系统权限,但它们需要轻触-系统二进制文件和dll需要保持可访问性,在配置applocker规则时也是如此。

在使用Applocker窗口功能时,应注意只阻止特定用户始终保留计算机的备份映像,因为在使用它时很有可能将自己屏蔽在系统之外

设置applocker策略

为了编写设置应用程序锁策略的脚本,您应该使用Windows UI创建初始的应用程序锁配置

  • 打开本地安全策略控制台,然后导航到“安全设置”>“应用程序控制策略”>“ AppLocker”。
  • 添加默认规则,使用一些规则
  • 在AppLocker控制台中,右键单击“ AppLocker”,然后单击“导出策略”。

根据我的经验,最好的规则是路径规则,因为哈希规则意味着您每次使用修订重新编译某些exe时都需要更新规则,如果仅使用签名的可执行文件,则发布者规则也可能是一个选择。

在将配置导出到xml之后,您应该以如下形式结束(只有大得多):

   















DLL权限 :永远不会与dll权限混淆,您永远不会知道系统在使用什么。

exe权限

  1. 我们有一个示例,允许proxy.exe按路径运行,如果用户将同一个exe下载到另一个路径,则它将不会运行,并且您应确保该用户没有写权限来追加/覆盖文件。
  2. 第二个示例显示了允许整个目录(递归),再次是对该路径没有写访问权限

您应该编辑xml,为所有用户/组ID模板化,并编辑白名单以包含要向最终用户公开的应用程序的确切集合。
要从cmdline应用策略,请使用power shell命令:

  #启动applocker服务 
设置服务-名称AppIDSvc -StartupType自动
启动服务AppIDSvc#apply策略
导入模块AppLocker
Set-AppLockerPolicy -XmlPolicy“ $ {TempDir} \ policy.xml”

更换资源管理器外壳:

要替换默认的Windows Shell,您应该首先在C#中创建一个简单的winforms或WPF程序,该程序使用全屏显示并且布局没有Windows工具栏(没有关闭和最小化按钮)。
修改注册表后,该程序将用作Windows用户的新Windows Shell(桌面+任务栏)。 随意添加您想要的任何工具栏/按钮/菜单,以便为您的客户创建所需的桌面体验。 我们的偏好是什么也没有,只是产生一个浏览器进程,这很容易从代码中完成。

我们使用Windows“默认用户”,这意味着在更改后在Windows中创建的任何新用户都将收到我们的新Windows Shell。

要设置新的shell,您需要更改注册表(再次更改powershell):

  #load默认用户注册表配置单元(可以是特定用户) 
reg load“ hku \ defuser”“ C:\ Users \ Default \ NTUSER.DAT” #update默认用户的shell替换
Set-ItemProperty -Path“注册表:: HKEY_USERS \ defuser \ SOFTWARE \ Microsoft \ windows NT \ CurrentVersion \ winlogon”“ shell”-值“ c:\ myUI.exe” -Type String#unload hive
reg卸载“ hku \ defuser”

摘要

Windows是信息亭中最难的操作系统之一,即使该操作系统提供了所有必需的功能,要访问该功能也需要:GroupPolicies,专门的Windows功能(特定于Applocker的xml文件),常规注册表编辑,服务管理和Windows为AntiVirus软件打开的API应该全部用于获得目标结果。

令我感到惊讶的是,我认为MacOS是为特定高端设备量身定制的OS,它以非常易于访问的方式作为用户管理系统的一部分显示了强化所需的一切。

尽管起初并不容易,但是plist(MCX)系统非常强大,它允许您将系统配置为允许白名单列出的程序,隐藏系统功能以及控制对功能的访问,所有这些都可以通过脚本编写。 有一个称为配置配置文件的较新系统,但看起来更适合IOS手机,并且缺少有关MacOS功能的文档。

  1. 程序执行 :家长控制的应用限制
  2. 文件系统访问 :来宾用户和文件权限
  3. 用户界面 :修改用户配置文件目录,plist以隐藏进程。
  4. 设置 :plist(MCX)/用户个人资料
  5. 回收 :访客用户自动删除,机器删除

手在硬化

MacOS家长控制可用于将可执行文件列入白名单,其方式与在Windows中非常相似,我们只使用Plist xml文件(仍然是mac配置管理的首选工具),而不是我们使用的applocker xml文件在Windows中出于相同的目的。

plist格式是一种在概念上与JSON类似的xml,具有字典和数组作为基本存储模式。

下面的示例显示如何通过appId和路径将特定应用列入白名单。 实际文件将大得多,并且包含许多用于家长控制系统的其他定义和配置标志。

   



com.apple.Dictionary

parentalControl

状态
总是
value



com.apple.DiscRecording

BurnSupport

状态
总是
value
关闭


com.apple.applicationaccess.new

CFREnabled

状态
总是
value


familyControlsEnabled

状态
总是
value


whiteList

状态
总是
value


appID

+ t4MAAAAAHQAAAABAAAABgAAAAIAAAAYY29t
Lmdvb2dsZS5DaHJvbWUuaGVscGVyAAAABwAA
AAQAAAAAAAAAFIXO6CVCFhhWIN3IhRx6n8Tf
4SDvAAAABAAAAAAAAAAAAAUyamTJMo / yyPbzDa9
X9T5dTMFEwo =

bundleID
com.google.Chrome.helper
displayName
Chrome助手



pathWhiteList

状态
总是
value

/Applications/TextEdit.app




隐藏码头也可以使用plist文件来实现:

    


自动隐藏

自动隐藏延迟
10
last-messagetrace-stamp
533043501.17593402
launchanim

mod-count
2
persistent-apps


其他人


版本
1

要通过来宾用户上的plist文件应用MacOS配置:

  dscl。  -mcximport / Users /来宾“ myPlistFile.plist” 

摘要

我喜欢我的Mac体验。 看到这一事实使我感到惊讶,因为我在深入研究这项研究的几周前就获得了我的第一台Mac机器,并花了数年时间从事专业的Windows编程,这使我赞赏为使此台式机系统变得用户友好且易于使用而付出的努力。 。 现在,我可以同时使用mac和Windows机器-在两者上编写代码,并且可以编写有关差异的卷,但最后它们都像坚固的台式机一样使用。

Mac加固和自动化需要一些努力,但是该过程得益于该地区强大的OS功能。

在Linux上,我们首先想到直接对系统进行加固,但是由于Docker提供了额外的安全层和一种在用户之间回收环境的简便方法,因此,我们创建的目标系统是在Docker容器内设置的,除了回收,这种选择使我们可以有较少数量的运行进程,并且可以更好地控制文件系统。

  1. 程序执行 :从小开始,不在Docker中安装程序
  2. 文件系统访问 :文件权限,删除docker FS
  3. 用户界面 :安装轻型外壳,删除所有菜单选项
  4. 设置 :Dockerfile脚本,一个控制docker守护进程的过程。
  5. 回收 :删除Docker容器/删除机器

手在硬化

Linux具有许多外壳程序和发行版的轻松优势,其中一些已经针对安全性或轻量级桌面环境进行了开发。

我们选择了一个桌面较小且背景良好的桌面,这使我们能够轻松删除所有选项和工具栏,并最终获得一个看起来像Linux的安全黑盒。

我们最终从一个Ubuntu docker开始(测试是在台式机上完成的,而ubuntu在任何Linux台式机上都可以说是很受欢迎的),
我们选择fluxbox作为桌面环境来获得简洁的体验。 不安装任何终端和清除菜单可确保攻击面保持较低,并且在用户权限下运行docker容器可确保文件系统安全。 要回收环境,只需杀死容器并创建一个新容器即可。

摘要

与其他操作系统相比,Linux简直是易如反掌,因为容器技术对我们来说是所有繁重的工作。

这项任务非常有趣,它使我了解了我每天使用的操作系统的新方面,向我展示了我们实际上可以完全控制桌面上显示的内容,并且可以对不同的用户应用精细的访问权限。