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