簡介
身份服務引擎(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及更高版本
- Cisco 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的操作。此時,終端不再被隔離,並提供完全訪問許可權。
畫素Log
架構
解決方案是在Linux電腦上安裝一組應用程式:
- pxLog應用程式用Java編寫並部署在Tomcat伺服器上。該應用程式套件括:
- 處理Web請求的Servlet -用於透過Web瀏覽器訪問管理面板。
- Enforcer模組-與Servlet一起啟動的系線。Enforcer從檔案中讀取系統日誌消息(已最佳化),根據配置的規則處理這些消息,並執行操作(例如透過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 Certificate KeyStores (一個用於受信任,一個用於辨識) (而不是預設)。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)
應透過Administration > Settings啟用(預設情況下停用)EPS:
這允許您使用隔離/取消隔離功能。
授權規則
僅當隔離終端時,才會遇到第一條規則。然後,RADIUS CoA會動態實施受限訪問。還必須使用正確的共用金鑰將交換機增加到網路裝置。
疑難排解
pxGrid狀態可使用CLI進行驗證:
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:
現在,Enforcer模組在系統日誌消息「snort[」中查詢此正規表示式(RegExp)。如果找到,則搜尋所有IP地址並選擇最後一個地址之前的地址。這與大多數安全解決方案相匹配。有關詳細資訊,請參閱Syslog部分。該IP地址(攻擊者)透過pxGrid隔離。也可以使用更精細的規則(例如,它可能包括簽名編號)。
步驟3.第一個Dot1x會話
Microsoft Windows 7工作站啟動有線dot1x會話。Cisco Anyconnect NAM已被用作請求方。已配置可擴展身份驗證協定保護的EAP (EAP-PEAP)方法。
ISE Dot1x Full Access授權配置檔案已選中。交換器下載存取清單以授與完整存取許可權:
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聯絡並接收ISE主機名,該主機名由CLI中的hostname命令定義。然後,客戶端嘗試對該主機名執行DNS解析,並嘗試聯絡該IP地址並從中獲取資料。如果ISE主機名的DNS解析失敗,客戶端不會嘗試獲取任何資料。
注意:請注意,僅主機名用於此解析(在此方案中列出),而不用於完全限定域名(FQDN)(在此方案中lise.example.com)。
開發人員注意事項
思科發佈並支援pxGrid API。有一個套件命名如下:
pxgrid-sdk-1.0.0-167
裡面有:
- 帶有類的pxGrid JAR檔案,可以輕鬆地將其解碼為Java檔案以檢查代碼
- 帶證書的Java KeyStore示例
- 使用使用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(示例)檢測時,相應的syslog消息如下所示:
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地址(最後一個地址之前的第二個地址)。
Cisco 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入侵檢測和防禦(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防火牆(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,與有線/無線dot1x相比,終端的MAC地址也不能用作身份。
解決方案是強制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)
- Symantec (SIEM amd行動裝置管理(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方法 |
取得 |
獲取/過帳/放置 |
獲取/發佈 |
預設情況下已啟用 |
是 |
否 |
否 |
作業數目 |
極少 |
許多 |
極少 |
CoA終止 |
支援 |
否 |
支援 |
CoA重新驗證 |
支援 |
否 |
支援* |
使用者操作 |
否 |
是 |
否 |
終端操作 |
否 |
是 |
否 |
端點身份組操作 |
否 |
是 |
否 |
隔離(IP、MAC) |
否 |
否 |
是 |
解除隔離(IP、MAC) |
否 |
否 |
是 |
PortBounce/關閉 |
否 |
否 |
是 |
訪客使用者操作 |
否 |
是 |
否 |
訪客門戶操作 |
否 |
是 |
否 |
網路裝置操作 |
否 |
是 |
否 |
網路裝置組操作 |
否 |
是 |
否 |
* 隔離使用ISE版本1.3.1提供的統一CoA支援。
下載
pxLog可以從Sourceforge下載。
已包含軟體開發套件(SDK)。有關pxGrid的最新SDK和API文檔,請與您的合作夥伴或思科客戶團隊聯絡。
相關資訊