본 제품에 대한 문서 세트는 편견 없는 언어를 사용하기 위해 노력합니다. 본 설명서 세트의 목적상, 편견 없는 언어는 나이, 장애, 성별, 인종 정체성, 민족 정체성, 성적 지향성, 사회 경제적 지위 및 교차성에 기초한 차별을 의미하지 않는 언어로 정의됩니다. 제품 소프트웨어의 사용자 인터페이스에서 하드코딩된 언어, RFP 설명서에 기초한 언어 또는 참조된 서드파티 제품에서 사용하는 언어로 인해 설명서에 예외가 있을 수 있습니다. 시스코에서 어떤 방식으로 포용적인 언어를 사용하고 있는지 자세히 알아보세요.
Cisco는 전 세계 사용자에게 다양한 언어로 지원 콘텐츠를 제공하기 위해 기계 번역 기술과 수작업 번역을 병행하여 이 문서를 번역했습니다. 아무리 품질이 높은 기계 번역이라도 전문 번역가의 번역 결과물만큼 정확하지는 않습니다. Cisco Systems, Inc.는 이 같은 번역에 대해 어떠한 책임도 지지 않으며 항상 원본 영문 문서(링크 제공됨)를 참조할 것을 권장합니다.
ISE(Identity Services Engine) 버전 1.3은 pxGrid라는 새 API를 지원합니다.인증, 암호화 및 권한(그룹)을 지원하는 이 현대적이고 유연한 프로토콜은 다른 보안 솔루션과의 손쉬운 통합을 지원합니다.이 문서에서는 개념 증명으로 작성된 pxLog 애플리케이션의 사용에 대해 설명합니다.pxLog는 공격자를 격리하기 위해 IPS(Intrusion Prevention System)에서 syslog 메시지를 수신하고 pxGrid 메시지를 ISE로 전송할 수 있습니다.따라서 ISE는 네트워크 액세스를 제한하는 엔드포인트의 권한 부여 상태를 변경하기 위해 RADIUS CoA(Change of Authorization)를 사용합니다.이 모든 작업은 최종 사용자에게 투명하게 수행됩니다.
이 예에서는 Snort가 IPS로 사용되었지만 다른 솔루션은 사용할 수 있습니다.실제로 IPS일 필요는 없습니다.필요한 모든 것은 공격자의 IP 주소를 사용하여 syslog 메시지를 pxLog에 전송하는 것입니다.이렇게 하면 많은 수의 솔루션이 통합될 수 있습니다.
이 문서에서는 일반적인 문제 및 제한 사항과 함께 pxGrid 솔루션의 문제 해결 및 테스트 방법을 소개합니다.
면책조항:pxLog 애플리케이션은 Cisco에서 지원하지 않습니다.이 글은 발상의 증거로 쓰여졌다.주 목적은 ISE에서 pxGrid 구현을 더 잘 수행하는 동안 이를 사용하는 것이었습니다.
Cisco에서는 Cisco ISE 컨피그레이션 및 이러한 주제에 대한 기본 지식을 보유하고 있는 것이 좋습니다.
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
다음은 네트워크 다이어그램에 표시된 트래픽 흐름입니다.
이 솔루션은 Linux 시스템에 애플리케이션 세트를 설치하는 것입니다.
pxLog 애플리케이션은 다음 라이브러리를 사용합니다.
이러한 모든 라이브러리는 프로젝트의 lib 디렉토리에 이미 있으므로 더 이상 JAR(Java ARchive) 파일을 다운로드할 필요가 없습니다.
응용 프로그램을 설치하려면 다음을 수행합니다.
이 문서에서는 특정 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(Time To Live)이 6이거나 페이로드의 크기가 666에서 686 사이인 경우 Snort는 syslog 메시지를 전송합니다. 트래픽은 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
그런 다음 syslog 서버가 pxLog 시스템(/etc/snort/snort.conf)을 가리킵니다.
output alert_syslog: host=10.222.0.61:514, LOG_AUTH LOG_ALER
일부 버전의 Snort에서는 syslog 컨피그레이션과 관련된 버그가 있습니다. 그런 다음, 특정 메시지를 pxLog 호스트로 전달하기 위해 localhost 및 syslog-ng를 가리키도록 기본 설정을 사용할 수 있습니다.
EPS는 Administration(관리) > Settings(설정)에서 활성화(기본적으로 비활성화)해야 합니다.
이를 통해 격리/격리 해제 기능을 사용할 수 있습니다.
첫 번째 규칙은 엔드포인트가 격리된 경우에만 발생합니다.그러면 제한된 액세스는 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에 대한 별도의 디버그도 있습니다(Administration > Logging > Debug Log Configuration > pxGrid). 디버그 파일은 pxGrid 디렉토리에 저장됩니다.가장 중요한 데이터는 pxgrid/pxgrid-jabberd.log 및 pxgrid/pxgrid-controller.log에 있습니다.
Tomcat이 시작되면 pxLog 애플리케이션이 자동으로 구축됩니다.
pxLog는 syslog 메시지를 처리하고 이에 따라 작업을 실행해야 합니다.새 규칙을 추가하려면 Manage Rules(규칙 관리)를 선택합니다.
이제 enforcer 모듈은 syslog 메시지에서 이 정규식(RegExp)을 찾습니다."snort[". 검색되면 모든 IP 주소를 검색하고 마지막 주소 앞에 있는 주소를 선택합니다.대부분의 보안 솔루션과 일치합니다.자세한 내용은 Syslog 섹션을 참조하십시오.해당 IP 주소(공격자)는 pxGrid를 통해 격리됩니다.또한 더 세분화된 규칙을 사용할 수도 있습니다(예: 시그니처 번호가 포함될 수 있음).
Microsoft Windows 7 스테이션은 유선 dot1x 세션을 시작합니다.Cisco Anyconnect NAM은 신청자로 사용되었습니다.EAP-PEAP(Extensible Authentication Protocol-Protected EAP) 방법이 구성됩니다.
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
이것은 TTL = 7인 Microsoft Windows 패킷에서 보내는 경우 발생하는 상황을 보여줍니다.
c:\> ping 10.222.0.61 -i 7 -n 1
이 값은 전달 체인의 Snort에서 감소하며 경보가 발생합니다.따라서 pxLog에 대한 syslog 메시지가 전송됩니다.
Sep 6 22:10:31 snort snort[6310]: [1:100124:0] ALERT {ICMP} 10.221.0.240 ->
10.222.0.61
pxLog는 syslog 메시지를 수신하여 처리하고 해당 IP 주소를 격리하도록 요청합니다.다음 로그를 확인할 경우 확인할 수 있습니다.
ISE는 IP 주소가 격리되었음을 보고합니다.
그 결과, 특정 엔드포인트의 스위치에서 권한 부여 상태를 업데이트하기 위해 권한 부여 정책을 검토하고, 격리를 선택하고, RADIUS CoA를 전송합니다.
이는 신청자가 새 세션을 시작하고 제한된 액세스(Permit_ICMP)를 받도록 강제하는 CoA 종료 메시지입니다.
스위치에서 결과를 확인할 수 있습니다(엔드포인트에 대한 제한된 액세스).
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
이 단계에서는 관리자가 해당 엔드포인트의 격리 해제를 결정합니다.
동일한 작업을 ISE에서 직접 실행할 수 있습니다.
ISE는 다시 규칙을 검토하고 스위치에서 권한 부여 상태를 업데이트합니다(전체 네트워크 액세스가 부여됨).
보고서는 다음을 확인합니다.
pxLog 애플리케이션은 pxGrid API의 기능을 보여주기 위해 작성되었습니다.이를 통해 다음을 수행할 수 있습니다.
향후 더 많은 기능이 계획됩니다.
다음은 pxLog의 몇 가지 스크린샷입니다.
클라이언트(사용자)는 한 번에 하나의 그룹의 구성원이 될 수 있습니다.가장 일반적으로 사용되는 두 그룹은 다음과 같습니다.
앞서 언급한 대로, 클라이언트 애플리케이션인 pxLog 및 pxGrid 컨트롤러(ISE)에 통신을 위해 구성된 인증서가 있어야 합니다.pxLog 애플리케이션은 Java KeyStore 파일에 보관합니다.
파일은 암호로 보호됩니다(기본값:cisco123). 파일 위치 및 비밀번호는 WEB-INF/web.xml에서 변경할 수 있습니다.
다음은 새 Java KeyStore를 생성하는 단계입니다.
pxgrid store # keytool -import -alias ca -keystore root.jks -file cert-ca.der
pxgrid store # keytool -import -alias mnt -keystore root.jks -file cert-mnt.der
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
pxgrid store # keytool -certreq -alias clientcert -keystore client.jks -
file 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 노드가 업그레이드되면 ID 인증서를 유지할 수 있는 옵션이 있지만 CA 서명은 제거됩니다.따라서 업그레이드된 ISE는 새 인증서를 사용하지만 SSL/ServerHello 메시지에 CA 인증서를 첨부하지 않습니다.이렇게 하면 (RFC에 따라) 전체 체인을 볼 것으로 예상되는 클라이언트에서 오류가 트리거됩니다.
세션 다운로드와 같은 여러 기능을 위한 pxGrid API는 추가 검증을 수행합니다.클라이언트는 ISE에 연결하고 CLI의 hostname 명령으로 정의된 ISE 호스트 이름을 수신합니다.그런 다음 클라이언트는 해당 호스트 이름에 대해 DNS 확인을 시도하고 해당 IP 주소에서 데이터를 연결하고 가져오려고 시도합니다.ISE 호스트 이름에 대한 DNS 확인에 실패하면 클라이언트는 데이터를 가져오려고 시도하지 않습니다.
주의:이 시나리오에서 lise.example.com인 FQDN(Fully Qualified Domain Name)이 아니라 이 시나리오에서는 호스트 이름만 이 확인에 사용됩니다.
Cisco는 pxGrid API를 게시하고 지원합니다.다음과 같은 패키지가 있습니다.
pxgrid-sdk-1.0.0-167
내부에는 다음이 포함됩니다.
다음은 공격자 IP 주소로 syslog 메시지를 전송하는 보안 솔루션의 목록입니다.컨피그레이션에서 올바른 RegExp 규칙을 사용하는 경우 이러한 규칙을 pxLog에 쉽게 통합할 수 있습니다.
Snort는 다음 형식으로 syslog 알림을 전송합니다.
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 주소는 항상 마지막 IP 주소(대상)보다 두 번째입니다. 특정 서명에 대한 세분화된 RegExp를 구축하고 공격자 IP 주소를 추출하는 것은 간단합니다.다음은 서명 100124 및 메시지 ICMP(Internet Control Message Protocol)에 대한 RegExp 예입니다.
snort[\.*:100124:.*ICMP.*
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 주소를 추출할 수 있습니다(마지막 IP 주소 앞에 두 번째).
다음은 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 IDP(Intrusion Detection & Prevention)에서 보낸 메시지의 예입니다.
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 주소는 동일한 방법으로 추출할 수 있습니다.
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의 예입니다.
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
연결 추적, xtables, rpfilters, pattern matching 등과 같은 iptable 모듈에서 제공하는 고급 기능을 사용하여 모든 유형의 패킷에 대한 syslog 정보를 전송할 수 있습니다.
다음은 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)
ISE는 CoA 처리 측면에서 세션 유형을 인식할 수 있습니다.
EPS 모듈은 간단합니다.쿼런틴을 실행하면 항상 CoA 종료 패킷을 전송합니다.유선/무선 세션의 경우 문제가 되지 않습니다(모든 802.1x 신청자는 투명하게 두 번째 EAP 세션을 시작할 수 있음). 그러나 ASA가 CoA 종료를 수신하면 VPN 세션이 삭제되고 최종 사용자에게 다음과 같은 메시지가 표시됩니다.
AnyConnect VPN이 자동으로 다시 연결되도록(XML 프로필에 구성됨)하는 두 가지 가능한 솔루션이 있습니다.
새 세션이 설정되더라도 ASA는 새 audit-session-id를 선택합니다. ISE 관점에서 이 세션은 새 세션이며 격리 규칙을 발견할 가능성이 없습니다.또한 VPN에서는 유선/무선 dot1x와 달리 엔드포인트의 MAC 주소를 ID로 사용할 수 없습니다.
이 솔루션은 EPS가 ISE처럼 동작하도록 하고 세션을 기반으로 올바른 유형의 CoA를 전송하도록 하는 것입니다.이 기능은 ISE 버전 1.3.1에 도입됩니다.
다음은 pxGrid 파트너 및 솔루션의 목록입니다.
다른 파트너 및 솔루션은 다음과 같습니다.
보안 솔루션 전체 목록은 Marketplace Solutions Catalog를 참조하십시오.
ISE 버전 1.3에서는 3가지 유형의 API를 사용할 수 있습니다.
비교 내용은 다음과 같습니다.
REST | 외부 RESTful | pxGrid | |
---|---|---|---|
클라이언트 인증 | 사용자 이름 + 암호 (기본 HTTP 인증) |
사용자 이름 + 암호 (기본 HTTP 인증) |
인증서 |
권한 분리 | 아니요 |
제한(ERS 관리자) |
예(그룹) |
액세스 | MnT | MnT | MnT |
전송 | tcp/443(HTTPS) | tcp/9060(HTTPS) | tcp/5222(XMPP) |
HTTP 메서드 | 다운로드 | 가져오기/게시/넣기 | 가져오기/게시 |
기본적으로 활성화됨 | 예 | 아니요 | 아니요 |
작업 수 | 몇 분 | 많은 | 몇 분 |
CoA 종료 | 지원 | 아니요 | 지원 |
CoA 재인증 | 지원 | 아니요 | 지원되는 * |
사용자 작업 | 아니요 | 예 | 아니요 |
엔드포인트 작업 | 아니요 | 예 | 아니요 |
엔드포인트 ID 그룹 작업 | 아니요 | 예 | 아니요 |
격리(IP, MAC) | 아니요 | 아니요 | 예 |
격리 해제(IP, MAC) | 아니요 | 아니요 | 예 |
포트 바운스/종료 | 아니요 | 아니요 | 예 |
게스트 사용자 작업 | 아니요 | 예 | 아니요 |
게스트 포털 작업 | 아니요 | 예 | 아니요 |
네트워크 장치 작업 | 아니요 | 예 | 아니요 |
네트워크 장치 그룹 작업 | 아니요 | 예 | 아니요 |
* 격리는 ISE 버전 1.3.1의 Unified CoA 지원을 사용합니다.
pxLog는 Sourceforge에서 다운로드할 수 있습니다.
SDK(소프트웨어 개발 키트)가 이미 포함되어 있습니다.pxGrid에 대한 최신 SDK 및 API 문서는 파트너 또는 Cisco 어카운트 팀에 문의하십시오.