MAC 계층에서 사용할 수 있는 보안 기능으로는
- 포트별 접근 제어 표준 IEEE 802.1X
- MACSec으로 불리는 암호화 통신 표준 IEEE 802.1AE가 있습니다.
조직 LAN에서 사용하는 스위치가 위 표준들을 지원한다면 이더넷 탭을 통한 도청 무력화, 인가되지 않은 장비의 연결 차단 및 리포팅 등 조직의 보안 목표를 달성하는 데 활용할 수 있습니다.
802.1X
먼저 IEEE 802.1X는 포트별 접근 제어를 위한 표준입니다.
802.1X에서는 인증 대상 호스트를 supplicant, 스위치를 authenticator라는 용어로 부릅니다. 그리고 RADIUS 등의 authentication server가 있다고 가정합니다.
스위치에서 802.1X가 활성화된 포트를 controlled port, 그렇지 않은 포트를 uncontrolled port라고 부릅니다. 특히 controlled port 중 접근이 허가된 상태를 authorized, 802.1X 트래픽만 허가된 상태를 unauthorized라고 표현합니다.
802.1X를 통해 호스트가 네트워크 접속을 허가받는 과정은 아래와 같습니다.
- 초기화 단계: Authenticator에 호스트가 연결된 경우, 해당 포트를 unauthorized 상태로 만들고, 802.1X 이외의 트래픽을 차단합니다.
- 시작 단계: Authenticator는 01:80:C2:00:00:03 주소를 목적지로 EAP Request Identity 요청을 주기적으로 전송합니다. 이를 수신한 supplicant는 EAP Response Identity로 응답하고, 이를 수신한 authenticator는 RADIUS 서버에 Access-Request를 보냅니다.
- 협상 단계: RADIUS 서버는 EAP 인증에 사용할 방식을 나열한 Access-Challenge로 응답합니다. Authenticator는 이를 supplicant에 전달하고, supplicant는 원하는 인증 방식 및 인증 정보를 담은 EAP Request로 응답합니다.
- 인증 단계: Authenticator는 EAP Request를 수신하고 이를 다시 RADIUS 서버에 Access-Request로 전달합니다. 그리고 Access-Accept를 수신하면 supplicant에게 EAP Success를 전송하고, 해당 포트를 authorized 상태로 전환합니다.
- Supplicant가 EAPOL-Logoff를 보내면 다시 해당 포트를 unauthorized 상태로 전환합니다.
VoIP 전화기나 네트워크 프린터처럼 802.1X를 지원하지 않는 기기가 있을 수 있습니다. 이런 경우 스위치에 MAC Authentication Bypass를 설정해서, Request Identity에 응답이 없는 경우 MAB를 통해 해당 포트를 authorize하도록 구성할 수 있습니다. 물론 RADIUS 서버에 허가할 모든 전화기와 프린터의 MAC 주소를 입력해야 합니다.
802.1X를 조직 LAN에 적용하면, 기본적으로 접근 ID가 없는 외부인의 접속을 차단할 수 있고, 부가적으로 인증 서버의 로그나 이벤트를 통해 어떤 사용자(컴퓨터)가 언제, 어떤 스위치의 몇 번 포트에 연결했는지 추적할 수 있게 됩니다. 그리고 네트워크 작업자가 작업 중 서로 다른 망에 속한 스위치끼리 연결하는 등의 사고를 방지할 수 있습니다.
그런데 802.1X도 완벽하지 않아서, 원래 표준에서는 스위치 포트에 허브를 연결하고 한 사용자만 인증에 성공하면 나머지는 인증 없이 접속이 가능한 문제가 있었습니다. 지금은 한 포트에 여러 인증 세션을 사용할 수 있는 것 같습니다.
그리고 EAPOL-Logoff 프레임을 스푸핑하여 정상적으로 인증된 supplicant의 접속을 차단할 수 있는 문제가 있습니다. 해결되었는지는 모르지만, 이는 MACSec을 같이 활용하면 해결할 수 있습니다.
802.1AE (MACSec)
IEEE 802.1AE는 MAC 계층에서 데이터 기밀성과 무결성을 보장하는 표준 기술입니다. MACSec에서 security association 확립 과정과 SAK(Secure Association Key) 관리 과정은 802.1X-2010 표준에서 다룹니다.
아래 참고란의 Switch Configuration Guide를 읽어보면, 스위치-호스트 간의 MACSec 구성과 스위치 간의 구성에 대해서 설명하는데, 여기서는 스위치-호스트 간의 구성에 대해서만 알아보겠습니다.
먼저 802.1X 인증이 성공한 뒤 Master Session Key(MSK)가 생성되고, 스위치가 특정 호스트를 위한 Secure Association Key(SAK)를 만들어 전송합니다. 스위치가 authenticator이자 key server가 되며, 호스트는 key client가 되고 단 하나의 key server와 상호작용하게 됩니다. 이 과정에서 MACSec Key Agreement(MKA)라는 프로토콜이 MACSec에 필요한 세션 키와 암호화 키를 관리하게 됩니다.
MACSec이 구성된 후 전송되는 MACSec 프레임에는 Integrity Check Value(ICV)가 포함되어 있어서, 프레임을 수신한 스위치는 세션 키를 통해 프레임을 복호화하고, ICV를 계산해서 수신한 프레임의 무결성을 검증합니다. 만약 계산된 ICV가 다르다면, 해당 프레임을 삭제하는 식으로 무결성을 유지합니다. 그리고 confidentiality offset을 설정해서 프레임에서 암호화될 부분을 정합니다. 만약 offset이 0이라면 프레임 전체가 암호화됩니다.
조직 LAN에 MACSec을 구성하면 앞서 말했던 EAPOL-Logoff같은 replay attack을 방지하고, 프레임 암호화를 통해 도청에 어느 정도 대처할 수 있게 됩니다. 도청에 대한 보호 정도에 대해서는 key server인 스위치의 보안이 관건일 것 같습니다.
MACSec이 표준화된 지 10여년 정도밖에 되지 않아, 지원하는 장비가 제한적인 것 같습니다. 스위치는 둘째치고, 하드웨어 오프로드를 지원하는 칩셋도 적고, 사용할 수 있는 MACSec 소프트웨어는 사실상 Cisco Anyconnect Plus (구 Anyconnect Network Access Manager)밖에 없습니다. 그나마 리눅스에서는 해당 기능이 구현되어 있어 ip 명령어를 통해 MACSec을 사용할 수 있는 상황입니다.