Windows内部命令
Windows系统中最有用的命令行工具:包括WMIC、net、openfiles、netstat和查找命令。我将集中阐述五个比较有用的命令,并分析安全专家如何使用这些命令来帮助他们更好地工作,从而完整地列出十大命令。
与使用tasklist的程序相结合
当没有其它选择,只运行tasklist命令时,它会显示一列所有正在运行的程序,显示这些程序的名称、PID码和其它统计信息。要获得更多的tasklist信息,可以考虑这样运行该命令:
C:/> tasklist /svc
这个命令可以使tasklist显示每个进程中是哪个服务正在运行。许多Windows用户并不理解服务与进程之间的关系,Windows系统中的每个服务必须在某个程序中运行,并且一些程序内部有多个服务。因此,程序与服务之间的关系是一对多的关系,tasklist命令可以揭示这一点。
Tasklist命令的另一种有用形式是:
C:/> tasklist /m
“m”代表“模块(modules)”,或者代表tasklist指代DLL和代码库的方式,代码库是程序在运行过程中按照主机的命令而加载的。当用这种方法调用命令时,tasklist可以显示当前加载到所有运行程序中的每一个DLL。这就为用户在特定的时间内提供了大量的信息,这些信息是关于其计算机上正在发生的情况。虽然非常麻烦,Google搜索特定的程序和DLL,可能会带回反病毒厂商站点中的恶意软件描述,有了特定样本,就可以洞察到攻击者的动机。
高级注册表分析的reg命令
Reg命令可以使用户与其机器的注册表在命令行进行交互。没有采用麻烦的regedit GUI来操纵注册表,安全专家可以简单地弹出打开一个Windows命令界面,并运行reg命令,进而读取或更新注册表。然而,reg命令不允许注册表的交互式浏览;用户需要知道他们想要查看或改变的注册表索引的完整路径。但是,一旦知道了路径,reg命令是一种进行更改的简单方式。
如果要查看特定注册表索引的设置,使用reg命令的“查询”选项,具体如下所示:
C:/> reg query hklm/software/microsoft/windows/currentversion/run
这个索引控制Windows上不同的自动启动程序,当计算机启动以及随后用户登录到系统时,这些程序开始运行。许多恶意软件样本可以改变这个索引,来确保当系统重新启动时,恶意软件也开始运行。
将单个索引或者整个注册表输出到一个文件,用于分析或者将其安装在一个隔离的系统中,reg命令支持“reg输出”功能。除了读取和输出注册表设置以外,reg命令也可以进行更新。“reg add”命令将更新现有索引值,或者在不存在索引的情况下,创建一个索引。“reg import”命令可以导入多个注册表索引。
使用ipconfig进行DNS分析
大多数真正的Windows用户都熟悉ipconfig命令,它非常有用,可以显示Windows中的网络设置。但是,ipconfig有一个非常有用的功能,Ipconfig命令可以显示本地Windows机器中的DNS缓冲器,如下所示:
C:/> ipconfig /displaydns
该命令的输出可以显示各种缓冲域名、其相关的IP地址以及DNS记录的停留时间(以秒计)。如果用户重复运行这个命令,他们可以看到停留时间在减少,直到记录终止并且被放弃,或者得到更新。在研究快速通量僵尸网络时,查看DNS缓冲器和停留时间(TTL)值是非常重要的,可以利用带有小部分TTL的DNS记录,来迫使连续更新,并使研究者宁不清楚黑客主要的后端服务器的地址。无可否认,ipconfig并不拥有诸如本文中提到的其它命令(比如tasklist和reg)那么多的功能。但是,这条命令的一个用处就非常有用。
利用FOR /L循环重复运行
有时,管理员或者安全专家想要重复运行一条命令,可能在5秒的间隔内寻找其输出的变化。要实现这一目的,他们可以采用Windows 系统的FOR循环。Windows支持五种不同的FOR循环,它们可以遍历文件整数、文件名、目录名称、文件内容和字符串。这里的重点是这些循环的最简化,尤其是FOR /L,由于它可以用来使命令连续运行,进而实现无数次遍历。FOR /L循环的语法是:
C:/> for /L %[var] in ([start],[step],[stop]) do [command]
[var]是我们的迭代变量,一个英文字母将会在循环中的每一步显示不同的迭代值。然后,用户指定变量的初始值,在循环中的每一步中,数值会增加,并且其最大值会终止循环。也应当指定循环中每一步运行的命令。具体说来,需要考虑下面的几点:
C:/> for /L %i in (1,1,10) do @echo %i
这个循环会使用%i作为一个变量,初始值为1。循环中的每一次迭代,%i会增加1,直至升到10。然后,在循环中,用户可以使用echo命令,简单地在屏幕上打印出迭代变量的值。@告诉系统不要打印出命令本身,这使得输出稍微漂亮一些。用户仅仅告诉系统从1计数到10。
现在,我们来看看如何使用这条命令来实现tasklist命令的连续运行:
C:/> for /L %i in (1,0,2) do @tasklist
输入这条命令,就意味着用户告诉计算机为变量赋值为1 ,启动循环,计数为0 ,自始至终升到2。这就会无限计数,直到用户单击CTRL-C来终止它。用户可以在每次迭代中简单地运行tasklist命令。
要在迭代之间延迟几秒,只需要添加“& ping --n 6 127.0.0.1 > nul”,在循环的每次迭代中简单地多次ping本地主机(127.0.0.1)。如下所示:
C:/> for /L %i in (1,0,2) do @tasklist & ping --n 6 127.0.0.1 > nul
由于Windows命令行没有内置的睡眠功能,来等待某个特定的延迟,用户可以使用ping,进而产生一个延迟。上面的命令可以ping本地主机地址六次(-n 6),引入一个五秒的延迟(第一次ping立即发生,紧接着是每秒一次ping,持续五秒)。我们正将ping烦人的输出转储为nul,并使之消失。结果是一个命令可以让tasklist每五秒运行一次,这个技术可以用于重复运行本文中提到的每条命令,用户可以更仔细地检查输出。更复杂的语法甚至可以解析命令的输出,允许产生专门制作的脚本,进而用于详细的系统分析,但是这种语法超出了每月技巧的讨论范围。
通过命令行启动管理GUI
虽然Windows命令行有许多功能强大的工具,但是,不论你相信与否,有时候,GUI工具可以比命令行做的更好。然而,Microsoft已经在其GUI的某些地址中埋藏了不同的控件,记忆这些模糊的地址是一项令人混乱的任务。
幸运的是,用户不必挖掘GUI来寻找他们想要的东西;相反,他们可以依赖命令行快捷方式。比如,不用在开始菜单中寻找并运行本地用户管理GUI,用户可以采用就近的命令提示和类型:
C:/> lusrmgr.msc
大量的其它GUI控件都可以采用这种方法从命令行中启动,这样就可以节省大量的时间。下面是我钟爱的一些控件:
Secpol.msc:这是本地安全策略的管理者,用于在机器上配置大量的安全设置。
Services.msc:这条命令可以启动服务的控制面板GUI。
Control:这个命令可以调出工具的整个控制面板设置。
Taskmgr.exe:该命令用于启动任务管理器。
Explorer.exe:运行这条命令,可以采用便捷的方式调用Windows file explorer。
Eventvwr.ms:该命令可以运行此命令运行Windows事件查看器(Windows Event Viewer),有助于日志分析。
这些Windows命令行工具可以帮助管理员和安全专家更有力的掌控其Windows机器,当受到攻击时,可以更安全地进行配置,更详尽地进行分析。