1. BGP (Border Gateway Protocol) [1]
- 서로 다른 AS(autonomous system) 사이에서 사용되는 라우팅 프로토콜
- 179/TCP 사용하여, 유니캐스트 방식으로 라우팅 정보를 전송
- 조직간에 계약된 정책(Policy)에 따라 최적 경로를 결정
- 장애가 발생할 경우 적게는 하나의 국가, 크게는 전 세계의 네트워크에 영향을 미침
> AS 간 라우팅을 수행하며, 수만 개에서 수십만 개 이상의 네트워크가 라우팅 테이블에서 관리되기 때문으로 판단됨.
2. 취약점 [2]
2.1 개요
- FRRouting, BIRD, OpenBGPd, Mikrotik RouterOS, Juniper JunOS, Cisco IOS, Arista EOS 등 7가지 BGP 구현을 분석
> BGP 보안에서 자주 간과되는 소프트웨어 구현의 취약점 발견
> 공격자가 취약한 BGP 피어에 서비스 거부(DoS)를 유발할 수 있는 BGP 메시지 구문 분석 취약점
> 각 취약점은 FRRouting 팀에 전달되었으며 다음 버전에서 수정됨
- BGP 프로토콜 보안과 관련한 많은 연구가 진행
> BGP 피어가 리소스 공개 키 인프라(RPKI)와 같은 인증 및 암호화 메커니즘을 적용
※ RPKI (Resource Public Key Infrastructure): 인터넷주소자원 소유기관 및 IP주소, AS번호 등을 PKI(공개키 기반 암호화)를 기반으로 전자서명 처리하여 해당 라우팅 정보의 무결성을 인증하는 것
> 하지만, 최근 연구에서 BGP가 여전히 안전하지 않다는 것을 보여주고 있음
- 리눅스 및 유닉스용 오픈소스 인터넷 라우팅 프로토콜 FR라우팅(FRRouting) [4] 8.4 버전(22.07 배포)에서 새로운 취약점이 발견
> FR라우팅(FRRouting)은 엔비디아, 덴트, 소닉 등 유명 기업들에서도 사용하는 라우팅 프로토콜
> 해당 취약점들을 신속히 패치하지 않으면 공급망에 큰 영향을 미칠 수 있으며, 공격자는 취약점을 악용해 다음의 행위를 수행할 수 있음
① 모든 BGP 세션 및 라우팅 테이블을 삭제
② 지속적으로 잘못된 패킷을 전송해 BGP 피어를 응답하지 않는 서비스 거부 상태로 유지
※ BGP 데몬은 일정 시간 초과 후 자동으로 재시작함
CVE ID | 설명 | CVSS v3.1 | 잠재적 영향 |
CVE-2022-40302 [5] | 확장된 선택적 매개변수 길이 옵션을 사용하여 특수 제작된 BGP OPEN 메시지를 처리할 때 발생하는 범위를 벗어난 읽기 취약점 | 6.5 | 서비스 거부 |
CVE-2022-40318 [5] | 확장된 선택적 매개변수 길이 옵션을 사용하여 특수 제작된 BGP OPEN 메시지를 처리할 때 발생하는 범위를 벗어난 읽기 취약점 (CVE-2022-40302와 다른 취약점) | ||
CVE-2022-43681 [6] | 옵션 길이 옥텟(또는 확장된 옵션 길이 메시지가 있는 OPEN의 경우 옵션 길이 단어)로 갑자기 끝나는 잘못된 형식의 BGP OPEN 메시지를 처리할 때 발생하는 범위를 벗어난 읽기 취약점 |
2.2 CVE-2022-40302
- 취약점의 근본 원인은 BGP OPEN 메시지에서 확장 옵션 길이 옥텟에 대한 불충분한 경계 검사
- line 1: 옵션 길이 옥텟(optlen 변수)을 읽음
> optlen이 0xff(BGP_OPEN_NON_EXT_OPT_LEN 상수로 정의됨)인 경우 stream_getc()를 호출하여 다음 옥텟 (optype) 읽기를 계속 수행
> 확장 옵션 매개 변수를 0xff로 끝나도록 조작된 BGP OPEN 메시지가 수신되면, stream_getc() 호출 시 범위를 벗어난 읽기가 발생하는 것으로 판단됨.
- line 8: 원시 패킷 스트림에서 다음 옥텟 값을 읽음
> optype이 0xff와 동일한 경우 OPEN 패킷에는 RFC 9072(프로토콜 표준 문서)에 따라 확장된 옵션 매개 변수가 포함된 것으로 간주
> 조작된 BGP OPEN 메시지에 의해 범위를 벗어난 읽기가 발생하며, 이로인해 SIGABRT 시그널이 발생하여 FRRouting의 bgpd 데몬이 다시 시작되어 DoS 상태가 발생하는 것으로 판단됨.
※ SIGABRT: 프로세스가 비정상적인 상태에 도달했을 때 강제로 프로세스를 종료하기 위한 시그널
2.3 CVE-2022-40318 // 불확실하므로 추가 공부 필요
- 취약점의 근본 원인은 AS4 기능(RFC 6793에 따른 4바이트 AS 번호)을 읽을 때 OPEN 메시지 패킷에 대한 잘못된 경계 검사
- peek_for_as4_capability()는 AS4의 기능을 찾기위해 구문 분석을 수행하는 함수
> line12: 수신된 옵션의 길이 검증
> 수신된 OPEN 메시지에 길이가 확장된 옵션 매개 변수가 있는 경우(RFC 9072에 따름) 원시 패킷 스트림에서 2바이트 대신 3바이트를 읽음
> 코드가 "while" 루프에서 반복되도록 하여 반복 중 하나에서 범위를 벗어난 읽기를 트리거하는 것으로 판단 됨
2.4 CVE-2022-43681 // 불확실하므로 추가 공부 필요
- bgp_open_option_parse() 함수에서 취약점이 발생
> line6: 정규 옵션 길이를 가진 패킷에 존재해야 하는 2개의 옥텟만 설명하는 경계 검사 수행
> 경계 검사는 총 세 개의 옥텟이 있어야 하는 확장 옵션 길이를 고려하지 못하여 범위를 벗어난 읽기를 트리거
2.3 완화
- BGP는 인터넷의 필수적인 부분이기 때문에 보안에 대한 몇 가지 지침이 있음
> 그러나 이러한 지침은 BGP 보안에 대한 알려진 문제와 RPKI 배포 방법에만 초점을 맞추는 경향이 있음
> 따라서 조직은 BGP 보안을 처리하기 위해 ISP에만 의존해서는 안 됨
- 네트워크 인프라 장치 패치
> 확인된 3개의 취약점과 같은 BGP 구현상 취약점 완화 목적
> 조직의 모든 네트워크 장치와 해당 장치에서 실행 중인 소프트웨어 버전 형상 관리 필요
- Forescout은 Python 기반 오픈 소스 BGP Fuzzer 도구를 제공 [7]
> 조직이 내부적으로 사용되는 BGP 제품군의 보안을 테스트하고 BGP 구현에서 새로운 결함을 찾을 수 있도록하기 위함
3. 참조
[1] https://net-study.club/entry/Routing-Protocol-BGP-Border-Gateway-Protocol
[2] https://www.forescout.com/blog/three-new-bgp-message-parsing-vulnerabilities-disclosed-in-frrouting-software/
[3] https://thehackernews.com/2023/05/researchers-uncover-new-bgp-flaws-in.html
[4] https://github.com/FRRouting/frr
[5] https://github.com/FRRouting/frr/pull/12043
[6] https://github.com/FRRouting/frr/pull/12247
[7] https://github.com/Forescout/bgp_boofuzzer/
'취약점 > Denial of Service' 카테고리의 다른 글
2009.07.07 DDoS (0) | 2023.07.06 |
---|---|
Anonymous Sudan DDoS (0) | 2023.06.23 |
Apache Commons Fileupload 서비스 거부 취약점 (CVE-2023-24998) (0) | 2023.02.27 |
DDoS 공격 유형 #2 (0) | 2023.02.02 |
DDoS 공격 유형 (0) | 2023.02.02 |