在许多渗透测试活动中,我注意到许多攻击是通过使用法律证据进行的SSH访问开始了。现在你可能会想,为什么用户macOS上启用SSH服务。这真的需要普通用户吗?当然,对于普通用户来说,答案是否定的。这是完全没有必要的,但我认为这是基于macOS常用于构建服务器、测试服务器和开发人员系统SSH不仅如此,一旦攻击者以任何方式访问系统,SSH它成了一种奇妙的东西“live of the land”该技术用于在受攻击的网络上横向移动。
了解如何最好地跟踪不同的SSH行为,我们首先必须熟悉在创建SSH不同的二进制文件在会话中发挥作用。
smd实际控制二进制文件(可能是服务管理和保护过程)SSH是启用还是禁用。随着时间的推移,苹果将更多的责任转移到这个守护过程中。
这是主要的SSH当您尝试登录一个系统时,服务可执行文件将启动多个系统sshd为了处理登录过程和用户对话,这可能是在处理SSH最常见的服务。
这个sshd在尝试登录时启动帮助过程,通常会立即执行sshd服务。在某些用例中,SSH -keygen-wrapper会执行一些不同的操作,但在大多数情况下SSH在设置过程中,操作行为与名称完全一致。
不管它的名字是什么,SSH -agent其实不是侦听SSH连接服务。事实上,即使禁止SSH,这个过程也可能在你的系统上运行,这是最重要的SSH密钥管理闻名。事实上,用户不需要通过用户名和密码登录。可以在/System/Library/LaunchAgents/com.openssh.ssh-agent.plist中找到启动程序,并在启动时使用未记录的-l参数加载启动程序。
身份验证过程结束后,在系统上生成交互式shell,它将根据用户的要求执行命令。shell是用户设置为默认的shell。对我来说,是的zsh。
一般的行为
为了更好地理解这些过程是如何连接的,让我们看看通过SSH登录时使用的具体步骤。macOS上,可以通过系统首选项>共享>远程登录启用SSH登录。请注意,使用此功能实际上不会创建任何类型的新功能sshd过程。这有点令人失望,因为这意味着我们不能通过简单的过程监控来确定SSH是启用还是禁用,但如果你使用它SSH登录并保持会话处于开放状态,您现在应该程树。
若检查标准ps你会注意到这棵树看起来有点不同。事实上,使用TrueTree是我意识到smd在SSH在管理中发挥作用的唯一途径。这就是为什么在试图登录之前,你ps没有输出SSH服务侦听器的迹象。smd通过系统截图中,服务处理多个不同的远程登录服务和其他通过系统首选项启用或禁用的项目smd登录尝试发生后,将存在以下所有过程,但zsh shell在登录成功后出现。首先,我们看到创建了sshd-keygen-wrapper。这个小的二进制文件正在执行到sshd有些检查之前会很快处理,是的,登录发生时会创建两个sshd过程。但请注意,如果在此登录过程中发生了另一个登录,上面看到的所有相同的过程都将再次创建。我的意思是上面看到的两个sshd服务不会作为额外登录。“主服务器”。最后,第二个sshd一个例子将被衍生出来shell,未来用户输入的所有命令都将通过shell派生。
在继续之前,请注意其他方法SSHD服务。事实上,我认为远程登录比命令行更值得注意。用户可以使用它systemsetup远程登录从命令行开始,而不是加载LaunchDaemon。
要使命令发挥作用,需要root权限,好消息是,在执行此类命令时,你应该能够监控任何类型的命令EDR。
尝试登录
有了上面讨论的流程树,你可能已经知道我将在本节工作了。如上所述,我们最终通过SSH登录尝试生成三个过程:一是sshd-keygen-wrapper,另一个是sshd。我们知道sshd-keygen-wrapper只存在一秒钟,然后执行sshd,这是系统中可能的三次登录尝试。
请注意,我们在上图中使用非TrueTree因为这是进程视图EDR提供。这就是为什么launchd显示为父级而非smd的原因。
在上图中,你看到了三次尝试SSH登录。有两个失败,因此从未生成shell(红色),另一个成功(绿色)。无论登录是否成功,sshd-keygen-wrapper总是按照登录试验的比例生成,这意味着我们可以跟踪登录试验。
试着获得字典攻击
很奇怪,现在有人用字典攻击SSH。通常,这是原因Linux僵尸网发送大量凭证,试图以他们的方式进入公众SSH服务器。在macOS面向公众的SSH服务器也很少见。具体原因是什么?显然,我不能解释你的具体设置和工具,所以我只使用一些通用的Splunk术语,因为它通常是事件监控的标准。在这里,你最好遵循上述逻辑,寻找sshd-keygen-wrapper大型分组尝试。我发现使用它Splunk的“bin”功能(也叫bucket)最容易做到这一点。
让我们分解具体的过程:
查找执行sshd-keygen-wrapper所有时间。
将找到的sshd-keygen-wrapper进程分组到两分钟窗口。
以目前的分类过程为例,并根据主机进行不同的计数,以获得发生了多少次尝试,并将新统计的字段命名为“attempts”。
在一个两分钟的桶里发生了20多次尝试。
返回符合上述条件的主机名称。
如果你的Splunk如果实例可以访问这类数据,它将在两分钟内返回20次登录尝试的实例。您可以随意设置时间,但我怀疑在两分钟内进行20次登录尝试可能表明存在恶意攻击。
单次登录
成功的登录不会太复杂。事实上,我将使用与以前相同的图像。
只要你的工具允许你通过父子关系建立联系,你需要做的就是建立联系shell随时使用sshd作为该shell父对象。请注意,在macOS上,默认内置shell(如/ etc / shells中所示)为/ bin / bash,/ bin / csh,/ bin / dash,/ bin / ksh,/ bin / sh,/ bin / tcsh和/ bin / zsh。
从Splunk从这个角度来看,这里不应该有太复杂的东西。shell运行时查找ppid路径为“/usr/sbin/sshd”的位置即可。请注意,在某些情况下,如果有人选择通过SSH在不创建交互式登录的情况下运行单个命令也会引起注意。
ssh user@ip_address whoami
上述命令不是通过创建互动对话,而是通过SSH登录,执行whoami命令并将输出返回到运行它的客户端。sshd通过可执行文件-c参数和发送方指定的命令一起传递给它shell执行此操作。
假如要找交互式SSH请查找登录名SSH下创建shell命令行不包括其他参数(或)CommandLine == Path)时间。如果你只想通过。SSH操作一次性命令,请查找包含多个参数的时间。
获取根登录
通过SSH显然,登录不能保证恶意事件的发生。许多技术人员和开发人员依赖它SSH为了完成不同的任务,激活它。然而,这些技术和开发人员应该以正常的权限登录系统,然后通过sudo升级。直接登录超级用户。SSH服务器不被视为最佳实践。
许多进程跟踪技术为执行过程提供了用户ID,它通常被称为uid。 Unix系统中的每个用户都被分配了uid。在macOS上,第一个用户uid为501,根用户为0。通过查看创建shell进程的uid,我们可以确定哪个用户已经登录。这是用户使用基本权限登录的树形示例。
在上图中,我们可以看到衍生物sshd子对象和shell的uid与基本用户501uid所以我们知道登录系统的用户没有匹配root权限。同时,我们看到登录前的所有过程都是由root因为用户拥有它是有意义的sshd在系统上以root用户身份运行,用户登录时按用户权限移交。当然,如果有人使用它root身份登录,创建shell将继续为uid 0SSH上的root登录只需使用与上一节相同的方法,但指定只关心SSH下创建的shell的uid何时为0。
最后,我想简单谈谈一个经常被忽视的项目。这个项目是tty。每当有人打开真正的互动shell时,tty或teletype终端将被分配。也就是说,用户可以输入命令,shell如果没有,可以返回提示。tty,当sudo当命令要求您输入密码时,您将无法与之互动。您只需在无效区域操作,tty它将被分配给创建Shell这个过程将继续使用SSH会话期间创建的所有子过程。
此时,您可以看到登录时shell上的tty是/dev/ttys001。同样,这取决于你的工具和输入是实时检测到的还是可追溯的,但这意味着如果你发现恶意的话SSH登录并可查看tty通过搜索和共享,只需撤回所有内容即可tty过程来了SSH会议执行的命令。
唯一的问题是,当用户关闭时tty它将在下一次需要时重用。换句话说,如果系统上的用户经常打开终端,搜索使用/ dev / ttys001所有的过程也可能为用户提供一些旧的但合法的操作。如果发生这种情况,您可能不得不依靠一些时间表(或完全不同的方法)来撤回所有恶意操作SSH命令。
总结
正如本文中多次提到的,上面看到的许多查询都取决于您的技术和工具,但最重要的是了解您的环境和哪些系统应该实际使用SSH。对于在小公司工作的人来说,很容易掌握谁在哪里登录,但对于大公司来说,监控这些项目也很重要。对于需要登录系统进行操作的管理员来说,远程登录是一个很好的工具,但从安全的角度来看,它们会带来三重威胁。
1.它们是内置的;
2.它们可以用于初始输入;
3.可用于横向运动和攻击。
我们只谈了和SSH什么样的流程活动是锁定的?SSH以及攻击者如何使用它SSH还有很多内容需要探索。
本文翻译自:https://themittenmac.com/detecting-ssh-activity-via-process-monitoring/如果转载,请注明原始地址。