简介
身份服务引擎(ISE) 1.3版支持称为pxGrid的新API。这种支持身份验证、加密和权限(组)的现代而灵活的协议可以方便地与其他安全解决方案集成。本文档介绍已作为概念验证编写的pxLog应用程序的用法。pxLog能够从入侵防御系统(IPS)接收系统日志消息并将pxGrid消息发送到ISE以隔离攻击者。因此,ISE使用RADIUS授权更改(CoA)更改限制网络访问的终端的授权状态。所有这一切对最终用户都是透明的。
在本例中,Snort已用作IPS,但可以使用任何其他解决方案。实际上,它不必是IPS。只需要将系统日志消息与攻击者的IP地址一起发送到pxLog。这就为集成大量解决方案创造了可能。
本文档还介绍如何对pxGrid解决方案进行故障排除和测试,以及常见的问题和局限性。
免责声明:思科不支持pxLog应用。本文已作为概念验证书撰写。主要目的是在ISE上对pxGrid实施进行测试期间使用它。
先决条件
要求
建议本文档的使用者拥有配置思科 ISE 的经验,并具备以下主题的基本知识:
- ISE 部署和授权配置
- Cisco Catalyst交换机的CLI配置
使用的组件
本文档中的信息基于以下软件和硬件版本:
- Microsoft Windows 7
- Cisco Catalyst 3750X系列交换机软件,版本15.0及更高版本
- 思科ISE软件1.3及以上版本
- Cisco AnyConnect Mobile Security with Network Access Manager (NAM),版本3.1及更高版本
- Snort版本2.9.6及数据采集(DAQ)
- pxLog应用程序安装在带有MySQL版本5的Tomcat 7上
网络图和流量流程
以下是网络图所示的流量:
- Microsoft Windows 7用户连接到交换机并执行802.1x身份验证。
- 交换机使用ISE作为身份验证、授权和记帐(AAA)服务器。匹配Dot1x完全访问授权规则,并且授予完全网络访问权限(DACL:PERMIT_ALL)。
- 用户尝试连接受信任网络并违反Snort规则。
- 因此,Snort会向pxLog应用发送警报(通过syslog)。
- pxLog应用程序对其本地数据库执行验证。配置该命令是为了捕获Snort发送的系统日志消息并提取攻击者的IP地址。然后使用pxGrid向ISE发送请求,以隔离攻击者IP地址(ISE是pxGrid控制器)。
- ISE重新评估其授权策略。由于终端已隔离,因此满足Session:EPSStatus EQUALS Quarantine条件并且匹配其他授权配置文件(Dot1x Quarantine)。ISE向交换机发送CoA Terminate以终止会话。这将触发重新身份验证并应用新的可下载ACL (DACL) (PERMIT_ICMP),从而为最终用户提供有限的网络访问。
- 在此阶段,管理员可能会决定取消隔离终端。这可以通过pxLog的GUI来实现。同样,向ISE发送pxGrid消息。
- ISE执行类似于步骤6中的操作。这次,终端不再被隔离,并提供完全访问权限。
pxLog
架构
解决方案是在Linux计算机上安装一组应用程序:
- 用Java编写并部署在Tomcat服务器上的pxLog应用程序。该应用程序包括:
- 处理Web请求的Servlet -用于通过Web浏览器访问管理面板。
- Enforcer模块-与Servlet一起启动的线程。执行器从文件中读取系统日志消息(已优化),根据配置的规则处理这些消息,并执行操作(例如通过pxGrid隔离)。
- 包含pxLog配置(规则和日志)的MySQL数据库。
- 从外部系统接收系统日志消息并将其写入文件的系统日志服务器。
安装
pxLog应用程序使用以下库:
- jQuery(用于AJAX支持)
- JavaServer Pages标准标记库(JSTL) (模型视图控制器(MVC)模型,数据从逻辑中分离: JavaServer Page (JSP)代码仅用于呈现,Java类中没有HTML代码)
- Log4j作为日志记录子系统
- MySQL连接器
- 用于呈现/排序表的displaytag
- 思科提供的pxGrid API(当前版本为alpha 147)
所有这些库都已位于项目的lib目录中,因此无需再下载任何Java ARchive (JAR)文件。
要安装应用程序,请执行以下操作:
- 将整个目录解压缩到Tomcat Webapp目录。
- 编辑WEB-INF/web.xml文件。需要的唯一更改是serverip变量,该变量应指向ISE。此外,可能会生成Java证书密钥库(一个用于受信任密钥库,一个用于身份密钥)(而不是默认值)。pxGrid API使用安全套接字层(SSL)会话与客户端和服务器证书配合使用。通信双方都需要提供证书,并且需要相互信任。有关详细信息,请参阅pxGrid协议要求部分。
- 确保在pxLog上正确解析ISE主机名(请参阅域名服务器(DNS)或/etc/hosts条目中的记录)。有关详细信息,请参阅pxGrid协议要求部分。
- 使用mysql/init.sql脚本配置MySQL数据库。凭证可以更改,但应反映在WEB-INF/web.xml文件中。
Snort
本文不重点介绍任何特定IPS,因此仅提供简要说明。
Snort配置为与DAQ支持内联。使用iptables重定向流量:
iptables -I FORWARD -j ACCEPT
iptables -I FORWARD -j NFQUEUE --queue-num 1
然后,在检查之后,根据默认的iptable规则注入并转发该数据包。
已配置了一些自定义Snort规则(全局配置中包含/etc/snort/rules/test.rules文件)。
alert icmp any any -> any any (itype:8; dsize:666<>686; sid:100122)
alert icmp any any -> any any (itype:8; ttl: 6; sid:100124)
当数据包的生存时间(TTL)等于6或负载大小介于666和686之间时,Snort会发送系统日志消息。流量不被Snort阻止。
此外,还应设置阈值以确保警报触发频率不会过高(/etc/snort/threshold.conf):
event_filter gen_id 1, sig_id 100122, type limit, track by_src, count 1, seconds 60
event_filter gen_id 1, sig_id 100124, type limit, track by_src, count 1, seconds 60
然后,系统日志服务器指向pxLog计算机(/etc/snort/snort.conf):
output alert_syslog: host=10.222.0.61:514, LOG_AUTH LOG_ALER
对于某些版本的Snort,存在与syslog配置相关的错误,然后可以使用指向本地主机的默认设置,并且可以配置syslog-ng以将特定消息转发到pxLog主机。
ISE
配置
角色和证书
- 在Administration > Deployment下启用pxGrid角色,默认情况下,该角色在ISE中处于禁用状态:
- 在Administration > Certificates > System Certificates下验证证书是否用于pxGrid:
终端保护服务(EPS)
EPS应通过Administration > Settings启用(默认为禁用):
这允许您使用隔离/取消隔离功能。
授权规则
仅当终端被隔离时,才会遇到第一条规则。然后由RADIUS CoA动态实施有限访问。还必须使用正确的共享密钥将交换机添加到网络设备。
故障排除
可使用CLI验证pxGrid状态:
lise/admin# show application status ise
ISE PROCESS NAME STATE PROCESS ID
--------------------------------------------------------------------
Database Listener running 6717
Database Server running 51 PROCESSES
Application Server running 9486
Profiler Database running 7804
AD Connector running 10058
M&T Session Database running 7718
M&T Log Collector running 9752
M&T Log Processor running 9712
Certificate Authority Service running 9663
pxGrid Infrastructure Service running 14979
pxGrid Publisher Subscriber Service running 15281
pxGrid Connection Manager running 15248
pxGrid Controller running 15089
Identity Mapping Service running 9962
pxGrid也有单独的调试(管理>日志记录>调试日志配置> pxGrid)。调试文件存储在pxGrid目录中。最重要的数据在pxgrid/pxgrid-jabberd.log和pxgrid/pxgrid-controller.log中。
测试
第 1 步:注册pxGrid
当Tomcat启动时,会自动部署pxLog应用。
- 要使用pxGrid,请在ISE中注册两个用户(一个具有会话访问权限,一个具有隔离功能)。此操作可在Pxgrid操作>注册用户中完成:
注册自动开始:
- 在此阶段,需要在ISE上批准注册用户(默认情况下禁用自动批准):
批准后,pxLog会自动通知管理员(通过AJAX调用):
ISE将这两个用户的状态显示为Online或Offline(不再为Pending)。
步骤2. pxLog规则配置
pxLog必须处理系统日志消息,并根据消息执行操作。要添加新规则,请选择Manage Rules:
现在,执行器模块在系统日志消息“snort[”中查找此正则表达式(RegExp)。如果找到,它会搜索所有IP地址,并在最后一个IP地址之前选择一个IP地址。这符合大多数安全解决方案。有关详细信息,请参阅系统日志部分。该IP地址(攻击者)通过pxGrid隔离。也可以使用更精细的规则(例如,可能包括签名编号)。
第3步:第一个Dot1x会话
Microsoft Windows 7工作站发起有线dot1x会话。Cisco Anyconnect NAM已用作请求方。配置可扩展身份验证协议保护的EAP (EAP-PEAP)方法。
已选择ISE Dot1x完全访问授权配置文件。交换机下载访问列表以授予完全访问权限:
3750#show authentication sessions interface g0/17
Interface: GigabitEthernet0/17
MAC Address: 0050.b611.ed31
IP Address: 10.221.0.240
User-Name: cisco
Status: Authz Success
Domain: DATA
Security Policy: Should Secure
Security Status: Unsecure
Oper host mode: single-host
Oper control dir: both
Authorized By: Authentication Server
Vlan Policy: N/A
ACS ACL: xACSACLx-IP-PERMIT_ALL-53fc9dbe
Session timeout: N/A
Idle timeout: N/A
Common Session ID: 0A01000C000037E6BAB267CF
Acct Session ID: 0x00003A70
Handle: 0xA100080E
Runnable methods list:
Method State
dot1x Authc Success
3750#show ip access-lists interface g0/17
permit ip any any
第4步:Microsoft Windows PC发送触发警报的数据包
这说明如果确实从TTL = 7的Microsoft Windows数据包发送时会发生什么情况:
c:\> ping 10.222.0.61 -i 7 -n 1
此值在转发链中的Snort上递减,并发出警报。因此,系统会向pxLog发送系统日志消息:
Sep 6 22:10:31 snort snort[6310]: [1:100124:0] ALERT {ICMP} 10.221.0.240 ->
10.222.0.61
第5步:pxLog
pxLog接收系统日志消息,对其进行处理,并请求隔离该IP地址。如果检查日志,可以确认这一点:
步骤6.ISE隔离
ISE报告IP地址已隔离:
因此,它会检查授权策略,选择隔离,并发送RADIUS CoA以更新该特定终端的交换机上的授权状态。
即CoA终止消息,强制请求方启动新会话并获得有限访问权限(Permit_ICMP):
可以在交换机上确认结果(终端的有限访问权限):
3750#show authentication sessions interface g0/17
Interface: GigabitEthernet0/17
MAC Address: 0050.b611.ed31
IP Address: 10.221.0.240
User-Name: cisco
Status: Authz Success
Domain: DATA
Security Policy: Should Secure
Security Status: Unsecure
Oper host mode: single-host
Oper control dir: both
Authorized By: Authentication Server
Vlan Policy: N/A
ACS ACL: xACSACLx-IP-PERMIT_ICMP-53fc9dc5
Session timeout: N/A
Idle timeout: N/A
Common Session ID: 0A01000C000037E7BAB7D68C
Acct Session ID: 0x00003A71
Handle: 0xE000080F
Runnable methods list:
Method State
dot1x Authc Success
3750#show ip access-lists interface g0/17
permit icmp any any
第7步:取消隔离pxLog
在此阶段,管理员决定取消隔离该终端:
从ISE可以直接执行相同的操作:
第8步:ISE取消隔离
ISE会再次检查规则并更新交换机上的授权状态(授予完全网络访问权限):
该报告确认:
pxLog功能
编写pxLog应用程序是为了演示pxGrid API的功能。您可以通过它执行以下操作:
- 在ISE上注册会话和EPS用户
- 下载有关ISE上所有活动会话的信息
- 下载有关ISE上特定活动会话的信息(按IP地址)
- 下载有关ISE上特定活动用户的信息(按用户名)
- 显示有关所有配置文件(分析器)的信息
- 显示有关ISE上定义的TrustSec安全组标记(SGT)的信息
- 检查版本(pxGrid的功能)
- 基于IP或MAC地址进行隔离
- 根据IP或MAC地址取消隔离
未来会规划更多功能。
以下是pxLog的一些屏幕截图示例:
pxGrid协议要求
组
客户端(用户)一次可以是一个组的成员。两个最常用的组是:
- 会话-用于浏览/下载有关会话/配置文件/SGT的信息
- EPS -用于执行隔离
证书和Java KeyStore
如前所述,客户端应用(pxLog和pxGrid控制器[ISE])都必须配置证书才能进行通信。pxLog应用程序将这些保存在Java KeyStore文件中:
- store/client.jks -包括客户端和证书颁发机构(CA)证书
- store/root.jks -包括ISE链:监控和故障排除节点(MnT)身份和CA证书
文件受密码保护(默认值:cisco123)。可以在WEB-INF/web.xml中更改文件位置和口令。
以下是生成新Java KeyStore的步骤:
- 要创建根(受信任)密钥库,请导入CA证书(cert-ca.der应为DER格式):
pxgrid store # keytool -import -alias ca -keystore root.jks -file cert-ca.der
- 创建新的密钥库时,请选择密码,稍后使用该密码访问密钥库。
- 将MnT身份证书导入到根密钥库(cert-mnt.der是从ISE获取的身份证书,应采用DER格式):
pxgrid store # keytool -import -alias mnt -keystore root.jks -file cert-mnt.der
- 要创建客户端密钥库,请导入CA证书:
pxgrid store # keytool -import -alias ca -keystore client.jks -file cert-ca.der
- 在客户端密钥库中创建私钥:
pxgrid store # keytool -genkey -alias clientcert -keyalg RSA -keystore client.jks -
keysize 2048
- 在客户端密钥库中生成证书签名请求(CSR):
pxgrid store # keytool -certreq -alias clientcert -keystore client.jks -
file cert-client.csr
- 对cert-client.csr进行签名并导入签名客户端证书:
pxgrid store # keytool -import -alias clientcert -keystore client.jks -file cert-
client.der
- 验证两个密钥库是否包含正确的证书:
pxgrid store # keytool -list -v -keystore client.jks
pxgrid store # keytool -list -v -keystore root.jks
注意:升级ISE 1.3节点时,可以选择保留身份证书,但会删除CA签名。因此,升级后的ISE使用新证书,但从不在SSL/ServerHello消息中附加CA证书。这会触发预期(根据RFC)看到完整链的客户端上的故障。
主机名
用于多个功能(如会话下载)的pxGrid API执行其他验证。客户端联系ISE并接收CLI中的hostname命令定义的ISE主机名。然后,客户端尝试对该主机名执行DNS解析,并尝试联系该IP地址并从该IP地址获取数据。如果ISE主机名的DNS解析失败,客户端不会尝试获取任何数据。
注意:请注意,只有主机名用于此解析(在此场景中列出),而不是完全限定域名(FQDN)(在此场景中lise.example.com)。
开发人员须知
思科发布并支持pxGrid API。有一个软件包的名称如下所示:
pxgrid-sdk-1.0.0-167
里面有:
- 带有类的pxGrid JAR文件,可以轻松将其解码为Java文件以检查代码
- 带证书的Java密钥库示例
- 使用使用pxGrid的示例Java类的示例脚本
系统日志
以下是使用攻击者IP地址发送系统日志消息的安全解决方案列表。只要在配置中使用正确的RegExp规则,这些规则即可轻松与pxLog集成。
Snort
Snort按以下格式发送系统日志警报:
host[id] [sig_gen, sig_id, sig_sub] [action] [msg] [proto] [src] [dst]
例如:
snort[6310]: [1:100124:0] ALERT {ICMP} 10.221.0.240 -> 10.222.0.61
攻击者IP地址始终是最后一个地址(目标)之前的第二个地址。为特定签名构建精细的RegExp并提取攻击者IP地址很简单。以下是签名100124和消息互联网控制消息协议(ICMP)的RegExp示例:
snort[\.*:100124:.*ICMP.*
思科自适应安全设备(ASA)检测
当ASA配置为进行HTTP(示例)检测时,相应的系统日志消息如下所示:
Mar 12 2014 14:36:20: %ASA-5-415006: HTTP - matched Class 23:
MS13-025_class in policy-map MS_Mar_2013_policy, URI matched -
Dropping connection from inside:192.168.60.88/2135 to
outside:192.0.2.63/80
同样,可以使用精细的RegExp来过滤这些消息并提取攻击者IP地址(在最后一个IP地址之前的第二个)。
思科Sourcefire下一代入侵防御系统(NGIPS)
下面是Sourcefire传感器发送的示例消息:
Jan 28 19:46:19 IDS01 SFIMS: [CA IDS][Policy1][119:15:1] http_inspect: OVERSIZE
REQUEST-URI DIRECTORY [Classification: Potentially Bad Traffic] [Priority: 2]
{TCP} 10.12.253.47:55504 -> 10.15.224.60:80
同样,提取攻击者IP地址也很简单,因为相同的逻辑同样适用。此外,还提供策略名称和签名,因此pxLog规则可以是精细的。
Juniper NetScreen
以下是旧版Juniper Intrusion Detection & Prevention (IDP)发送的示例消息:
dayId="20061012" recordId="0" timeRecv="2006/10/12
21:52:21" timeGen="2006/10/12 21:52:21" domain="" devDomVer2="0"
device_ip="10.209.83.4" cat="Predefined" attack="TROJAN:SUBSEVEN:SCAN"
srcZn="NULL" srcIntf="NULL" srcAddr="192.168.170.20" srcPort="63396"
natSrcAddr="NULL" natSrcPort="0" dstZn="NULL" dstIntf="NULL"
dstAddr="192.168.170.10" dstPort="27374" natDstAddr="NULL" natDstPort="0"
protocol="TCP" ruleDomain="" ruleVer="5" policy="Policy2" rulebase="IDS"
ruleNo="4" action="NONE" severity="LOW" alert="no" elaspedTime="0" inbytes="0"
outbytes="0" totBytes="0" inPak="0" outPak="0" totPak="0" repCount="0"
packetData="no" varEnum="31" misc="<017>'interface=eth2" user="NULL"
app="NULL" uri="NULL"
攻击者的IP地址也可以用同样的方法提取。
Juniper JunOS
JunOS与此类似:
Jul 16 10:09:39 JuniperJunOS: asp[8265]:
ASP_IDS_TCP_SYN_ATTACK: asp 3: proto 6 (TCP),
ge-0/0/1.0 10.60.0.123:2280 -> 192.168.1.12:80, TCP
SYN flood attack
Linux iptables
下面是一些示例Linux iptables。
Jun 15 23:37:33 netfilter kernel: Inbound IN=lo OUT=
MAC=00:13:d3:38:b6:e4:00:01:5c:22:9b:c2:08:00 src=10.0.0.1 DST=10.0.0.100 LEN=60
TOS=0x10 PREC=0x00 TTL=64 ID=47312 DF PROTO=TCP SPT=40945 DPT=3003 WINDOW=32767
RES=0x00 SYN URGP=0
您可以使用iptable模块(如连接跟踪、xtables、rpfilters和模式匹配等)提供的高级功能为任何类型的数据包发送系统日志信息。
FreeBSD IP防火墙(IPFW)
以下是IPFW阻止分段的示例消息:
Sep 7 15:03:14 delta ipfw: 11400 Deny UDP 10.61.216.50 10.81.199.2 in via fxp0
(frag 52639:519@1480)
VPN就绪性和CoA处理
ISE能够根据CoA处理识别会话类型。
- 对于有线802.1x/MAC身份验证绕行(MAB),ISE发送CoA重新身份验证,这会触发第二次身份验证。
- 对于无线802.1x/MAB,ISE发送CoA终端,这将触发第二次身份验证。
- 对于ASA VPN,ISE会发送附加了新DACL的CoA(无第二次身份验证)。
EPS模块非常简单。当它执行隔离时,它始终发送CoA终止数据包。对于有线/无线会话,这不是问题(所有802.1x请求方都可以透明地启动第二个EAP会话)。但是,当ASA收到CoA终止时,它会丢弃VPN会话,并向最终用户显示以下信息:
有两个可能的解决方案可以强制AnyConnect VPN自动重新连接(在XML配置文件中配置):
- 自动重新连接,仅在与VPN网关失去连接时有效,不用于管理终止
- 永远在线,可正常工作并强制AnyConnect自动重新建立会话
即使建立了新会话,ASA也会选择新的审核会话ID。从ISE的角度来看,这是一个新会话,没有机会遇到隔离规则。此外,对于VPN,无法使用终端的MAC地址作为身份,而不是使用有线/无线dot1x。
解决方案是强制EPS像ISE一样运行,并根据会话发送正确的CoA类型。此功能将在ISE版本1.3.1中引入。
pxGrid合作伙伴和解决方案
以下是pxGrid合作伙伴和解决方案的列表:
- LogRhythm(安全信息和事件管理[SIEM]) -支持具象状态传输(REST) API
- Splunk (SIEM) -支持REST API
- HP Arcsight (SIEM) -支持REST API
- Sentinel NetIQ (SIEM) -计划支持pxGrid
- Lancope StealthWatch (SIEM) -计划支持pxGrid
- Cisco Sourcefire -计划支持pxGrid 1HCY15
- 思科网络安全设备(WSA) -计划在2014年4月支持pxGrid
以下是其他合作伙伴和解决方案:
- Tenable(漏洞评估)
- Emulex(数据包捕获和调查分析)
- Bayshore网络(防数据丢失(DLP)和物联网(IoT)策略)
- Ping身份(身份和访问管理(IAM)/单点登录(SSO))
- Qradar (SIEM)
- LogLogic (SIEM)
- 赛门铁克(SIEM与移动设备管理(MDM))
有关安全解决方案的完整列表,请参阅Marketplace解决方案目录。
ISE API:REST与EREST与pxGrid
ISE版本1.3提供三种类型的API。
下面是比较结果:
|
REST |
外部REST |
pxGrid |
客户端身份验证 |
用户名+密码 (基本HTTP身份验证) |
用户名+密码 (基本HTTP身份验证) |
证书 |
权限分离 |
否 |
受限(ERS管理) |
是(组) |
访问 |
MnT |
MnT |
MnT |
传输 |
tcp/443 (HTTPS) |
tcp/9060 (HTTPS) |
tcp/5222 (XMPP) |
HTTP 方法 |
GET |
GET/POST/PUT |
GET/POST |
默认情况下启用 |
是 |
否 |
否 |
操作数 |
极少 |
许多 |
极少 |
CoA终止 |
受支持 |
否 |
受支持 |
CoA重新身份验证 |
受支持 |
否 |
受支持* |
用户操作 |
否 |
是 |
否 |
终端操作 |
否 |
是 |
否 |
终端身份组操作 |
否 |
是 |
否 |
隔离(IP、MAC) |
否 |
否 |
是 |
取消隔离(IP、MAC) |
否 |
否 |
是 |
端口退回/关闭 |
否 |
否 |
是 |
访客用户操作 |
否 |
是 |
否 |
访客门户操作 |
否 |
是 |
否 |
网络设备操作 |
否 |
是 |
否 |
网络设备组操作 |
否 |
是 |
否 |
* 隔离使用ISE版本1.3.1提供的统一CoA支持。
下载
pxLog可以从Sourceforge下载。
已经包括软件开发套件(SDK)。有关pxGrid的最新SDK和API文档,请联系您的合作伙伴或思科客户团队。
相关信息