返回介绍

13.5 重点应用安全

发布于 2024-10-11 22:28:32 字数 6865 浏览 0 评论 0 收藏 0

在企业内网中,有一些重点应用的安全需要特别关注,例如,活动目录、邮件系统、VPN、堡垒机等。活动目录安全和邮件安全,我们将在第 17 章和第 16 章中进行详细阐述。

1.活动目录

活动目录服务器是办公网中最重要的服务器之一,网上各种有关内网渗透的技术文章都会涉及,所以需要重点关注,尤其是域管理员账号的管理。域管理员账号如果在其他机器上登录过(比如管理员给普通用户安装软件),一旦这台机器被控制,通过执行特定程序读取内存即可获取域管理员的账号和密码。域管理员账号密码一旦被拿下,意味着整个内网几乎全部沦陷。关于活动目录安全涉及比较多的内容,我们将在第 17 章进行阐述。

2.邮件系统

邮件系统一般部署在互联网 DMZ 区,它需要接收外来的邮件,同时将邮件发送到外网的邮箱,但对企业员工来讲,邮件系统可能更类似于一个 OA 系统的内部平台。邮件系统主要两类安全问题:一类是入站邮件中的恶意 URL 或附件;一类是出站邮件中可能包含敏感数据,例如客户资料。关于邮件安全和数据安全的话题,我们将在第 16 章进行阐述。

3.VPN

有些企业为了方便员工远程办公,采用了 VPN 方案。VPN 的英文全称是“Virtual Private Network”,即“虚拟专用网络”。顾名思义,虚拟专用网络可以理解为虚拟出来的企业内部专线。虚拟专用网被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商公司的内部网建立可信的安全连接,并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。

目前 VPN 主要采用四项技术来保证安全,这四项技术分别是隧道技术(Tunneling)、加解密技术(Encryption&Decryption)、密钥管理技术(Key Management)、使用者与设备身份认证技术(Authentication)。

·隧道技术是 VPN 的基本技术,类似于点对点连接技术,它在公用网建立一条数据通道(隧道),让数据包通过这条隧道传输。隧道是由隧道协议形成的,分为第二、三层隧道协议。第二层隧道协议是先把各种网络协议封装到 PPP 中,再把整个数据包装入隧道协议中。这种双层封装方法形成的数据包靠第二层协议进行传输。第二层隧道协议有 L2F、PPTP、L2TP 等。L2TP 协议是目前 IETF 的标准,由 IETF 融合 PPTP 与 L2F 而形成。第三层隧道协议是把各种网络协议直接装入隧道协议中,形成的数据包依靠第三层协议进行传输。第三层隧道协议有 VTP、IPSec 等。IPSec(IP Security)是由一组 RFC 文档组成,定义了一个系统来提供安全协议选择、安全算法、确定服务所使用密钥等服务,从而在 IP 层提供安全保障。

·加解密技术是数据通信中一项较成熟的技术,VPN 可直接利用现有技术。

·密钥管理技术的主要任务是如何在公用数据网上安全地传递密钥而不被窃取。现行密钥管理技术分为 SKIP 与 ISAKMP/OAKLEY 两种。SKIP 主要利用 Diffie-Hellman 的演算法则,在网络上传输密钥;在 ISAKMP 中,双方都有两把密钥,分别用于公用、私用。

·身份认证技术最常用的是使用者名称与密码、卡片式认证等方式。

真实的 VPN 入侵案例,往往都是从弱口令、暴力猜解、心脏滴血漏洞开始的。心脏滴血漏洞好解决,升级对应的 OpenSSL 库就好了,而弱口令和暴力猜解,则需要 VPN 产品本身来解决。另外,针对暴力猜解,有一种思路是监测 VPN 的认证日志,当发现短时间内有大量失败时可以进行一定的锁定 IP 或账号的处理。以 PPTP 为例,笔者曾经在某互联网公司,结合开源代码实现了一套动态口令 VPN 系统,其思路即是 PPTPD+FreeRadius+MySQL 的方案,通过修改 FreeRadius 认证代码,每个用户在后台数据库保存一个 PIN 码,只有用户自己知道,而当用户登录认证失败的时候,系统只将当前动态口令以短信方式发送给用户,用户通过组合 PIN 码+动态口令来实现登录。针对暴力破解问题,每个用户只能尝试 3 次,否则后面不再发送短信。

有的企业将安全控制得比较好,VPN 账号默认都停用,当需要 VPN 时联系后台人员核实身份后做到一键开启,前提是 7×24 小时都有人在。没有 7×24 小时条件的企业,也不是没有方法,比如,在企业移动 APP 里通过认证(短信、指纹、人脸识别)后自助开启 VPN 服务也是一种思路。

4.堡垒机

堡垒机,是指在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、记录、分析、处理的一种技术手段。从功能上讲,它综合了核心系统运维和安全审计管控两大主干功能;从技术实现上讲,通过切断终端计算机对网络和服务器资源的直接访问,而采用协议代理的方式,接管了终端计算机对网络和服务器的访问。

市面上的堡垒机产品挺多,一些互联网公司也定制开发了自己的堡垒机。堡垒机后端要登录的目标对象主要是 Windows 和 Linux 机器;而在金融企业里,堡垒机还可能需要支持 AIX、OS390、AS400 主机。

商业堡垒机产品一般都会有上收服务器的用户密码,然后实现自动登录的功能,这中间涉及用户和密码的代填,常常会出现几类安全问题:

·客户端进程在执行过程中的参数包含用户、密码信息,可能会被本地操作人员发现。

·明文传输的通信协议,特别是 RDP 转接过程中容易出现。

·服务器的用户密码虽然加密保存在后台,但前台需要解密才能实现代填,如果密钥写死在程序中,经过简单的逆向还原即能发现。

有些堡垒机使用开源代码进行简单修改来实现,但 SSH 的跳转还是利用系统默认的 SSH,那就存在绕过 Passcode 或操作记录审计的风险,比如,利用 SSH 的 Port Forwarding 建立隧道,利用 SSH 执选择命令的功能,甚至直接本地提权拿到 Root 权限等。

还是那句话,商业产品的问题,需要找厂商解决,而自己用开源代码实现的,坑还得自己填,最怕的是被绕过了还不知道。堡垒机上 SSH 不需要那么多功能,我们可以对它进行剪裁,比如,ssh.c 代码如下:


case 'L':

if (parse_forward(&fwd, optarg, 0, 0))

add_local_forward(&options, &fwd);

else {fprintf(stderr,"Bad local forwarding specification '%s'\n",optarg);

exit(255);}

break;

case 'R':

if (parse_forward(&fwd, optarg, 0, 1))

{add_remote_forward(&options, &fwd);}

else {fprintf(stderr, "Bad remote forwarding specification " "'%s'\n", optarg);

exit(255);}

break;

case 'D':

if (parse_forward(&fwd, optarg, 1, 0))

{add_local_forward(&options, &fwd);}

else {fprintf(stderr, "Bad dynamic forwarding specification " "'%s'\n", optarg);

exit(255);}

break;

一看就知道其对应的 SSH 的几个参数是做 SSH Tunnel 的,在这里可以直接“干掉”,也可以改为记录相关操作看是否有人恶意利用,代码如下所示:


//add syslog by xysky

#include <syslog.h>

case 'R':

//deny by xysky

openlog("ssh_sec", LOG_PID, LOG_AUTHPRIV);

syslog(LOG_INFO, "[uid:%d]: deny remote forwarding by xysky, %s", getuid(),optarg);

closelog();

fprintf(stderr,"Bad remote forwarding deny by system.\n");

exit(255);

对其进行编译安装即可看到效果,测试效果在 syslog 里有如下信息:


Aug 18 16:23:12 localhost ssh_sec[5946]: [uid:673]: deny remote forwarding by xysky, 4444:test.xxxx.net:22

同样,针对 OpenSSHD 的代码执行功能,修改 session.c 代码中的 session_exec_req 即可,不再赘述。

针对本地提权问题,一个堡垒机尽量使用新版本内核并打上补丁;二是可以使用一些内核安全加固的手段。有兴趣的读者可以研究一下 grsecurity,其官方网站 http://grsecurity.net/ ,从网站上下载最新的 linux 内核及与之对应的 grsecurity 版本,给内核打上 grsecurity 补丁,重启后进行测试,下面是使用其加固前后的效果对比。

测试 glibc 提权漏洞,没用 grsecurity 之前,如下:


[xysky@pxe-000 ~]$ ./a.sh

mkdir: cannot create directory `/tmp/exp': File exists

lr-x------ 1 xysky xysky 64 Jul 5 23:28 /proc/4081/fd/3 -> /tmp/exp/tar

[root@pxe-000 ~]#

使用 grsecurity 之后提权失败,会在日志里看到如下信息:


Jul 5 22:50:00 pxe-000 kernel: [ 141.788669] grsec: From 192.168.70.26: denied

hardlink of /bin/ping (owned by 0.0) to /tmp/exp/tar for /bin/ln[ln:4967]

uid/euid:500/500 gid/egid:500/500, parent /home/xysky/a.sh[a.sh:4965]

uid/euid:500/500 gid/egid:500/500

测试 systemtap 提权漏洞,没用 grsecurity 之前,如下:


[xysky@pxe-000 enlightenment]$ printf "install uprobes /bin/sh" > exploit.conf;

MODPROBE_OPTIONS="-C exploit.conf" staprun -u whatever

sh-3.2#

使用 grsecurity 之后提权失败,如下:


[xysky@pxe-000 root]$ printf "install uprobes /bin/sh" > exploit.conf;

MODPROBE_OPTIONS="-C exploit.conf" staprun -u whatever

bash: exploit.conf: Permission denied

ERROR: Couldn't mount /mnt/relay: Operation not permitted

[xysky@pxe-000 root]$

效果还是很明显的。Grsecurity 类似的加固方案之所以没有在 13.4 节“服务器安全”中提及,主要是因为这个方案也受一些兼容性的影响,尤其是 Java 方面的应用。在重视高可用性、高稳定性的金融行业尝试 grsecurity,是个不太妥当的做法,但堡垒机场景相对单一,可以考虑。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文