开源堡垒机除了录相,还需要做操作识别,主要的操作识别功能包括:
Ssh/telnet的操作命令识别
ftp/sftp 的操作命令识别
RDP/VNC/X11 的打开窗口title识别
RDP/VNC/X11 窗口中的文字识别
RDP 剪切版内容识别
RDP/VNC/X11 键盘记录
对于一个只能录相的开源堡垒机,其可用性是非常差的,因为开源堡垒机的审计功能主要用于事后,如果发生了内部运维事件,并且时间点难以确定,审计员必须面对海量的日志进行识别,由专人对每个会话从头到尾看整个操作录相。而操作过程往往是一瞬间的事,比如几天的操作日志可能有上千个小时,但是出现问题的操作可能只在几秒钟,这时的劳动强度和枯燥程度是相当大的,一个人要从上千小时的录相中找到几秒种的有问题的录相,难度之大可以想像。
我们也曾经出过某电信后台数据库被人删除的问题,那时我们系统的RDP识别功能还没有做,所以我们派专人,连续看了七天的日志,最终才找到责任人。
因此,一个开源堡垒机的好坏,不只是操作界面是不是漂亮、日志报表是不是通用,最重要的标准是分析功能是不是好,如果一但分析识别做的到位,当出现问题时,可以大大缩小审计人员的精确程度,直接找到责任人。
开源堡垒机的操作识别功能中,FTP/SFTP的命令操作开发是最简单的,因为命令本身在协议中有标,开发时只要解开FTP/SFTP的协议流,可以直接得到。
telnet/ssh的命令识别是较难的功能,因为TELNET/SSH对于命令在协议中是没有标注的,和在屏上其它回显一样,都是一个一个的字符,实际开发中,很通在实际回显中找到哪个是命令,哪个是回显,而键盘记录,只能对命令识别有帮助,并不能通过键盘记录来记录到命令,因为敲击键盘的时候,用户有可能在vi等行编辑器中,这时操作的并不是命令而且一些文件编辑,另外目前的linux bash中有很多快捷键,比如命令可以通过上翻找到,可以用TAB补齐,此外,运维人员在输入命令的时候,用退格去修改等也会造成命令识别无法通过键盘记录来实现,TELNET/SSH的命令识别,只能通过将键盘与回显关联的方式识别,程序在判断用户键盘击打顺序的同时,判断回显字符,当出现回车的时候,将前面的所有键盘记录下来,并且在回显中进行一些判断,就可以准确的记录用户操作的命令,这种模式,代理程序还必须判断的出用户是不是在vi等编辑器模式中,麒麟开源开源堡垒机系统的telnet/ssh命令识别开发周期大约为2个月,后期做了很多的修改,目前命令识别率达到了99.9%。
RDP/X11/VNC的窗口title识别和窗口内部文字识别,可以说是一个业界的难题,因为RDP整个显示没有字符,完全是通过GDI函数绘出,因此,即使解开了RDP的流,也无法从流中得到任何文字,因为全部是GDI函数绘出的图形,麒麟开源开源堡垒机的RDP/X11/VNC窗口的识别开发周期大约为4个月,目前已经可以识别出窗口标题和内部操作文字。
此外,RDP的键盘记录、剪切版记录也可以在协议中识别,键盘记录比较键盘,解开RDP协议即可得到剪切版复杂些,因为涉及内部文字编码识别。
以后会在其它文章中详细描述这些识别技术的原理。