본문 바로가기

네트워크

ipsec(Internet Protocol Security)

반응형

ி 개요


IP(Internet Protocol)는 통신 데이터가 노출되는 단점이 있다.
이를 보완하기 위해 안전한 통신을 보장하는 IPsec이 개발되었다.
IPsec은 인터넷 프로토콜 스위트라고 불리우며 각 IP 패킷을 암호화하고 인증하는 기능을 제공한다.
VPN을 구현하는 데 사용되고, 통신 규약을 탑재한 단말은 서로 안전하게 데이터를 주고받을 수 있다.
IPv6에선 IPsec을 기본 사용하지만, IPv4에선 선택적으로 사용할 수 있다.



ி 프로토콜 구조


IPsec은 데이터 보호를 위한 보안 프로토콜을 제공하며
이를 통해 제공되는 보안 서비스는 다음과 같다.

통신 상대방 인증
출발지 인증
기밀성
무결성
접근제어
재생 공격 방지

보안 프로토콜에는 헤더 프로토콜이 있는데
두 가지 중 하나를 사용한다.


헤더 프로토콜


➽ AH(Authentication Header)
무결성 및 데이터 인증을 제공하는 프로토콜로써
IP 헤더에서 전송 헤더까지 패킷을 보호한다.


➽ ESP(Encapsulating Security Payload)
IP 페이로드를 암호화하여 데이터 기밀성을 제공하는 프로토콜로써
데이터그램에서 ESP 시작 이후의 패킷을 보호한다.



키 관리 프로토콜


IPsec을 이용하여 통신하기 위해서는 사전에 사용할 암호화 방식을 공유하고,
공유할 비밀키를 서로 분배하는 과정을 거쳐야 한다.
이 과정을 보안 협상(Security Association)이라고 부른다.

보안 협상 설정 방법 수작업으로 하는 방법도 있지만
키 관리의 편의성을 위해서 자동화된 프로토콜을 이용한다.

➽ IKE (Internet Key Exchange)
자동화된 협상 및 키 생성/키 분배/키 갱신 등을 관리하는 프로토콜이다.

➽ ISAKMP(Internet Security Association and Key Management Protocol)
ISAKMP는 IKE 키 교환을 위한 메시지 형식 및 전달 방법을 정하기 위해 설계된 프로토콜이다.
(SA를 설정하는 각 과정과 패킷 구조를 정의하는 프로토콜)

키 결정 방식은 두 가지로 나뉜다.
OAKLEY - 일련의 키 교환 메커니즘들을 기술한다.
(DaffieDiffie-Hellman의 약점을 보완한 프로토콜)
SKEME - OAKLEY와는 또 다른 키 교환 프로토콜

IKE는 위에 나온 ISAKMP/OAKLEY/SKEME 프로토콜을 참조하여 만들어진 복합 프로토콜이다.


IKE 동작 과정은 다음과 같다.

IKE 1단계(Phase1) - Main Mode

모드 Main Mode, Aggressive Mode로 구성되며
주로 사용되는 Main Mode로 설명한다.

보안 협상 메시지는 중요한 내용을 담고 있어서, 협상하기 전에
안전하게 메시지를 전달할 보안 채널(암호화 구간)을 만든다.

상호 동작 가능한 장비/시스템인지 검증한다.
인증/검사 방식 : 사전 공유키, RSA 공개키 교환 방식

IKE 2단계(Phase2) - Quick Mode

통신 메시지를 암호화/인증방식 등 어떤 형식으로 보호할 것인지에 대해서 협상한다.
2단계가 끝나면 연결을 맺어서 통신을 진행한다.



ி 운용 모드



Transport 모드


원래의 IP 헤더는 그대로 이용하고 나머지 데이터 부분만 보호하는 방식이다.

IP - AH/ESP - TCP/UDP - DATA
                                   ↑ 보호 영역 ↑
주로 호스트-호스트(종단대종간)에, 상위 계층 프로토콜을 보호하기 위해 사용한다.

Tunnel 모드


IP 패킷 전체를 보호하고 앞에 새로운 IP 헤더를 추가하는 방식이다.

IP - AH/ESP - IP - TCP/UDP - DATA
                                         ↑ 보호 영역 ↑

AH/ESP 앞에 새로운 IP 헤더가 추가되는 이유는
원본 IP까지 암호화되므로 ISP 업체 장비가 패킷 수신 시
원본 IP 헤더를 볼 수 없어서 라우팅이 안 되기 때문이다.

다음 사진은 터널을 통해 패킷이 전송되는 모습이다.

IP 터널의 패킷 처리 방식은 호스트 단위가 아닌
여러 호스트에서 생성된 IP 패킷을 한꺼번에 묶어서 처리하고
터널의 시작점에서 새 IP 헤더로 기존 IP 데이터 그램을 캡슐화하여 전송한다.

터널 모드 운영 시 터널의 시작점 종점 IPsec Gateway 설치가 필요함에 따라서
IPsec 응용 소프트웨어의 설치/변경이 필요 없기 때문에 기존 호스트에게 투명한 보안 서비스를 제공한다.

두 라우터 간, 호스트와 라우터 간, 두 게이트웨이 간에 주로 사용한다.



ி 상세




오클리(OAKLEY) 프로토콜


현재는 IKE 보안 채널을 설정할 때 Diffie-Hellman의 장점을 유지하며,
취약성을 개선한 오클리(OAKLEY) 프로토콜을 사용한다.
해당 프로토콜이 어떤 방식으로 취약한 부분을 방어하는지 알아보자.


➽ 방해 공격(Clogging Attack)
공격자가 IP 주소를 위조하여 특정 통신 장치에 대해
DH 기법으로 계산이 복잡한 많은 수의 비밀 세션 키를 만들도록 무한정 시도한다.
대량의 키 생산 요청 때문에 어마무시한 지수 연산을 감행하게 하는 DOS 공격이다.

해당 공격은 쿠키 기법을 통해서 방어한다.

여기서 쿠키는 CSMA/CD의 토큰과 비슷한 개념이고,
생성자의 랜덤 번호와 타임 스탬프를 해시함수로 해싱한 값으로 씌워진다.

대응 절차는 다음과 같다.
syn에 대한 쿠키를 받은 클라이언트만 ack를 보낼 수 있도록 정한다.
서버 측에서 쿠키를 보냈을 때 그 쿠키를 받지 못한 클라이언트는 통신이 안된다.
공격자는 DOS를 위해 가공 IP 주소를 사용했기 때문에 쿠키를 받지 못한다.
쿠키를 추론할 수 없어서 서버에 ack를 보내지 못한다. < 통신 불가 >
즉 쿠키를 수신한 사용자만 서로 세션 키를 생성할 수 있게 하는 방법으로 방어한다.

➽ 중간자 공격(Middle Attack)
공격자가 공개키인 반키(Half-key)를 가로채고 자신의 반키(Half-key)를
제공하는 공격이다.

대응 방법은 다음과 같다.
비밀키 사전 공유 기법
메시지 송신자(자신하고 비밀키를 공유하는 상대)를 인증함으로써
무결성을 보장한다.

공개키 암호화 기법(주로 사용)
ipsec 장치 A가 먼저 임의의 넌스값을
ipsec 장치 B의 공개키로 암호화하여 전송한다.

ipsec 장치 B는 자신의 개인 키로 A로부터 수신한
넌스 값을 복호화한 후, 넌스 값이 포함된
IKE 메시지의 해시 함수 결괏값을
IKE 메시지와 함께 IPsec 장치 A에게 전송한다.

ipsec 장치 A는 자신이 전송한 원래 넌스 값을 포함해서
수신된 IKE 메시지에 대한 해시함수 결괏값을 생성하여
수신된 해시 함수 결괏값과 비교한다.


➽ 재생 공격(Replay Attack)
키 정보를 가로챈 제 3자가
재사용하여 합법적인 사용자인 것처럼 비밀키 생성 시도하는 것을 말한다.
대응 방법은 반키(Half-Key) 교환 시 임의의 임시 번호인 넌스를 포함하여 전달한다.



SA 식별자



➽ 보안 매개변수 색인 (SPI, Security Parameter Index)
동일한 출발지의 호스트가
동일한 프로토콜을 써서 여러 개의 SA를 만들 수 있기 때문에
보안 협상을 식별할 수 있는 ID인 SPI(Security Parameter Index)가 존재한다.
SPI는 SA에 4byte로 할당된다.

➽ 보안 프로토콜 식별자 (SPI, Security Protocol Identifier)
AH 헤더 또는 ESP 헤더를 구분하기 위한 식별자다.



ி 실습



김대리는 부산에 위치한 지사에서 서울에 있는 본사 PC에 접속하여 중요한 업무를 보려고 한다.
전용선을 직접 만들면 비용이 많이 들기 때문에,
인터넷이라는 기존의 네트워크선을 이용해서 통신하려고 한다.

이때 터널링을 사용한다.
먼저 시스코 라우터에 GRE 터널링을 통해 통신할 터널을 뚫자.
GRE 터널링은 암호화가 안돼서 데이터가 그대로 노출되므로
IPsec을 이용하여 안전하게 암호화시킨다.
즉 GRE의 취약점인 보안 부분에 IPsec VPN 기술을 적용하여서
안전한 Secure GRE VPN을 설정하는 것이다.

VPN 구축 방법은 두 가지가 있다.
Site-to-Site(공용 네트워크를 통해 내부 네트워크 간 연결)
Site-to-Client(VPN SW를 통해 접속)

우선 IPsec을 사용하려면 VPN 장비가 2대 필요한데,
A와 B에 설치해서 암호화 통신을 한다.
서울에서 부산이 연결될 때 서울 사람이 대전으로 출장을 가면
부산과 암호화 통신을 못 하므로 보통 SSL-VPN을 사용하곤 하는데,
여기서 SSL은 논외이므로 패킷 트레이서에서 IPsec VPN 구축 실습을 진행해본다.



ISAKMP 등록 명령어



Pahse1 설정 - 마스터 키 생성

(config)# crypto isakmp policy [정책 식별 번호]
(config-isakmp)# authentication [인증 방식]
(config-isakmp)# encryption [대칭키 알고리즘] [키 사이즈]
(config-isakmp)# hash [hash 알고리즘]
(config-isakmp)# group [DH그룹 번호]
(config-isakmp)# lifetime [VPN 지속시간]
(config)# crypto isakmp key [비밀번호] address [상대 장비 IP] [서브넷 마스크]

➽ 해설
ISAKMP 보안 정책을 만든다. 정책 번호는 1~10000까지 사용가능하며,
낮은 번호 우선 적용된다.
데이터 무결성을 체크한다.
번호가 높을 수록 강력한 암호화를 제공한다.
시간 범위는 60~86400초이며, 양측 수명이 다르면 짧은 것을 적용한다.



Pahse2 설정 - 세션 키 생성

(config)# crypto ipsec transform-set [정책 식별 이름] [IPsec 암호화 알고리즘] [인증 알고리즘]
(config-crypto-trans)# mode [IPsec 연결 모드]
(config)# crypto map [정책 식별 이름] [정책 식별 번호] ipsec-isakmp
(config-crypto-map)# match address [IPsec 통신데이터 - ACL]
(config-crypto-map)# set peer [상대 장비 주소]
(config-crypto-map)# set transform-set [암호화 적용할 IPsec 정책 이름]
(config-if)# crypto map [정책 식별 이름]

➽ 해설
암호화 방법 및 Hash를 정의한다.
mode의 기본 설정 값은 tunnle이다.
③-⑥ 적용할 정책을 구성한다.
crypto map을 인터페이스에 적용한다.



장비 설정



IKE - 키 관리 프로토콜 사용


➽ Seoul Router
Seoul(Config)# crypto isakmp policy 1
Seoul(Config-isakmp)# authentication pre-share
Seoul(Config-isakmp)# hash sha
Seoul(Config-isakmp)# encryption aes 128
Seoul(Config-isakmp)# group 2
Seoul(Config-isakmp)# lifetime 43000
Seoul(Config-isakmp)# exit
Seoul(Config)# crypto isakmp key 5 address 10.10.20.10

Seoul(Config)# access-list 110 permit ip 172.168.10.0 0.0.0.255 192.168.0.0 0.0.0.255
Seoul(Config)# crypto ipsec transform-set IPSEC-VPN esp-aes 128 esp-md5-hmac
Seoul(Config)# crypto map ToBranch 10 ipsec-isakmp
Seoul(Config-crypto-map)# match address 110
Seoul(Config-crypto-map)# set peer 10.10.20.10
Seoul(Config-crypto-map)# set transform-set IPSEC-VPN

Seoul(Config)# interface fastethernet 0/0
Seoul(Config-if)# crypto map ToBranch



➽ Busan Router
Seoul(Config)# crypto isakmp policy 1
Seoul(Config-isakmp)# authentication pre-share
Seoul(Config-isakmp)# hash sha
Seoul(Config-isakmp)# encryption aes 128
Seoul(Config-isakmp)# group 2
Seoul(Config-isakmp)# lifetime 43000
Seoul(Config-isakmp)# exit
Seoul(Config)# crypto isakmp key 5 address 10.10.10.10

Seoul(Config)# access-list 120 permit ip 192.168.0.0 0.0.0.255 172.168.10.0 0.0.0.255
Seoul(Config)# crypto ipsec transform-set IPSEC-VPN esp-aes 128 esp-md5-hmac
Seoul(Config)# crypto map ToHead 10 ipsec-isakmp
Seoul(Config-crypto-map)# match address 120
Seoul(Config-crypto-map)# set peer 10.10.10.10
Seoul(Config-crypto-map)# set transform-set IPSEC-VPN

Seoul(Config)# interface fastethernet 0/0
Seoul(Config-if)# crypto map ToHead




키 수동 등록


➽ Seoul Router
Seoul(config)# access-list 110 permit ip 172.168.10.0 0.0.0.255 192.168.0.0 0.0.0.255
Seoul(config)# crypto ipsec transform-set CISCO esp-des esp-md5-hmac
Seoul(Config)# crypto map IPSEC 10 ipsec-manual
Seoul(Config-crypto-..)# set peer 10.10.20.10
Seoul(Config-crypto-..)# set transform-set CISCO
Seoul(Config-crypto-..)# set session-key outbound esp 1000 cipher abcd1234 authenticator 1234
Seoul(Config-crypto-..)# set session-key inbound esp 2000 cipher qwer1234 authenticator 1234
Seoul(Config-crypto-..)# match address 110

Seoul(Config)# interface serial0/0
Seoul(Config-if)# crypto map IPSEC


➽ Busan Router
Busan(config)# access-list 120 permit ip 192.168.0.0 0.0.0.255 172.168.10.0 0.0.0.255
Busan(config)# crypto ipsec transform-set CISCO esp-des esp-md5-hmac
Busan(config)# crypto map IPSEC 10 ipsec-manual
Seoul(Config-crypto-..)# set peer 10.10.10.10
Seoul(Config-crypto-..)# set transform-set CISCO
Seoul(Config-crypto-..)# set session-key outbound esp 2000 cipher qwer1234 authenticator 1234
Seoul(Config-crypto-..)# set session-key inbound esp 1000 cipher abcd1234 authenticator 1234
Seoul(Config-crypto-..)# match address 120

Seoul(Config)# interface serial0/1
Seoul(Config-if)# crypto map IPSEC


※ 키를 수동으로 등록할 때는 다음 사항을 고려한다.

--------------------------------------------------------------------------------------

session-key 명령에서 cipher 값은 16진수이며 짝수가 되어야 한다.

또한 외부로 데이터를 보낼 때 암호화 및 인증, 수신 시 복호화 및 검증 등의 
과정이 있기 때문에,두 라우터 간의 session-key inbound,outbound 규칙
거꾸로 설정해야한다.
Seoul 라우터의 session-key outbound 규칙을
Busan 라우터 inbound로, Seoul inbound outbound로 한다.
그러면 정상적으로 암복호화 과정이 이루어 질 것이다.
--------------------------------------------------------------------------------------

Crypto map이 적용된 인터페이스는
본사의 IP(10.10.10.10) 터널 출발지의 IP 헤더로 사용하고
목적지를 set peer에 입력된 지사쪽 IP(10.10.20.10)로 사용한다.
ESP 헤더 뒤는 모두 암호화되서 내부 IP 및 데이터는 볼 수 없기 때문에 안전한 통신이 이루어진다.



조회 명령어


설정한 정보들을 조회하고 암호화 통신이 원활한지 확인하는 명령은 다음과 같다.

➽ 정책 확인
show crypto isakmp policy
➽ sa 상태 확인
show crypto sa
➽ 세션 출력
show crypto session
➽ 암복호화 상태 출력
show crypto engine connections active


자료 참고


반응형