Frag Attacks

Frag Attacks

Introduction

KRACK(Key Reinstallation Attack)을 공개했던 사람으로 유명한 Mathy Vanhoef는 이번에 FragAttacks (fragmentation and aggregation attacks)라는 취약점을 발표했습니다.
FragAttacks의 취약점은 총 12가지로, 그 중 세가지는 WiFi표준 설계 부분에서 발견되었습니다.

발견된 취약점들은 WEP부터 WPA3 까지 모든 WiFi의 보안 프로토콜에 모두 해당됩니다. 다행히도 Design flaw로 인한 취약점은 user interaction이 필요하거나, 특이한 네트워크 설정이 되어있어야만 익스플로잇이 가능하다고 합니다.

해당 취약점은 WiFi Alliance와 9개월간 패치를 준비했고, 현재 대부분의 기기는 업데이트로 취약점 패치가 이루어졌을 것입니다. (업데이트가 지원안되는.. IoT 장비들은… 계속 취약하겠네요..)

Demo

아래의 영상에서는 공격자가 취약점을 이용해 악용 가능한 예시 세 가지를 보여줍니다.

  1. Aggregation Design Flaw 를 이용하여 사용자의 민감정보 탈취하기
  2. IoT 기기 조종하기
  3. 지능형 공격을 시작하기 위해 우선, 시스템 장악하기

사용자의 데이터를 탈취 하는 것은 웹 사이트가 HSTShttps를 항상 사용하게 되어있다면, 탈취가 어려우며 요즘 브라우저에서는 https 를 사용하지 않으면 사용자에게 경고를 하기 때문에 그렇게 심각하지 않을 수 있습니다.
정말 심각한 것은 펌웨어 업데이트가 지원되지 않는 IoT 장비들이라고 할 수 있겠습니다.
위 영상에선 WiFi 내부에 존재하여, 외부에서의 공격을 바로 받지 않는것으로 안전한(?) Bluekeep 취약점이 존재하는 Windows 7 시스템을 공격합니다. WiFi 취약점을 이용하여 외부에서 다이렉트로 해당 시스템이 접근 가능하게 하여 해커에게 공격당하게 되는 것입니다.

Details

Design flaw: Aggregation Attack (CVE-2020-24588)

WiFi에서는 작은 프레임들을 여러번 보내면 매번 header와 ACK가 붙기 때문에 오버헤드가 큽니다.

이런 문제를 해결하기 위해서 Frame aggregation라는 것을 사용합니다. (A-MSDU 방식)

aggrecated 된것인지 아닌지 판단하기 위해 is_aggregated flag를 값을 기준으로 판단합니다.

이때, is_aggregated flag값이 authenticate 되지 않고 사용되어 공격자는 이를 조작하여 패킷 파싱이 다르게 되게 하여 packet injection을 수행할 수 있습니다.
위 데모 영상에서 처럼 malicious DNS Server를 victim이 이용하도록 패킷을 주입하는 등의 공격이 가능합니다.

Design flaw: Mixed Key Attack (CVE-2020-24587)

frame fragmentation 에서 발생하는 취약점입니다. frame fragmentation은 큰 프레임을 한번에 전송하면 데이터가 훼손될 가능성이 높으므로 여러 작은 fragment들로 분할하여 전송하는 것을 말합니다.
이때, 동일한 프레임에 속하는 fragment들은 동일한 키를 사용하여 암호화 됩니다. 그러나, 받는 입장에서는 동일한 키인지 확인할 필요가 없기 때문에 다른키로 fragment들이 암호화 되어있다면, 각각 다른키로 복호화하여 합치게 됩니다.

위 취약점은 데이터를 추출하는데에 사용될 수 있지만, 공격이 가능한 조건과 상황이 특수하기 때문에 실용적이진 않습니다.

Design flaw: fragment cache attack (CVE-2020-24586)

이 취약점도 frame fragmentation에서 발생합니다. 전송이 완료되지 않은 fragment들은 캐시에 저장이 됩니다. 이 점을 이용하여 데이터를 추출할 수 있습니다.

공격자는 Frag0 와 타겟의 Frag1 가 합쳐지게 하여 데이터를 추출 할 수 있습니다.

이 취약점은 네트워크 연결이 끊기거나 연결될때 마다 캐시를 날리는 방법으로 패치될 수 있습니다.

Other implementation vulnerabilities

몇몇 라우터들은 아직 인증되지도 않은 다른 클라이언트 들에게 handshake 를 보냅니다. 이 취약점은 공격자가 user interaction없이 aggregation attack, arbitrary frames injection을 가능하게 합니다.

가장 흔하게 구현 오류가 발생한 것은 수신자가 모든 fragment들이 같은 프레임에 속하는지를 체크하지 않는 것입니다. 공격자는 쉽게 두개의 다른 프레임의 fragment들을 섞어 위조할 수 있게됩니다.

또 몇몇 구현 오류들은 암호화 되지 않은 것과 암호화 된 fragment를 혼합하여 사용할 수 있습니다.

마지막으로, 몇몇 기기들은 fragmentation이나 aggregation을 지원하지 않습니만, 여전히 fragmented frame을 하나의 큰 프레임으로 처리하기 때문에 공격에 취약합니다.

CVE

설계상 취약점

  • CVE-2020-24588: aggregation attack (accepting non-SPP A-MSDU frames).
  • CVE-2020-24587: mixed key attack (reassembling fragments encrypted under different keys).
  • CVE-2020-24586: fragment cache attack (not clearing fragments from memory when (re)connecting to a network).

구현 취약점

  • CVE-2020-26145: Accepting plaintext broadcast fragments as full frames (in an encrypted network).
  • CVE-2020-26144: Accepting plaintext A-MSDU frames that start with an RFC1042 header with EtherType EAPOL (in an encrypted network).
  • CVE-2020-26140: Accepting plaintext data frames in a protected network.
  • CVE-2020-26143: Accepting fragmented plaintext data frames in a protected network.

기타 구현 취약점

  • CVE-2020-26139: Forwarding EAPOL frames even though the sender is not yet authenticated (should only affect APs).
  • CVE-2020-26146: Reassembling encrypted fragments with non-consecutive packet numbers.
  • CVE-2020-26147: Reassembling mixed encrypted/plaintext fragments.
  • CVE-2020-26142: Processing fragmented frames as full frames.
  • CVE-2020-26141: Not verifying the TKIP MIC of fragmented frames.

Tools

테스트 할 수 있는 툴은 오픈소스로 공개되어 있습니다.
https://github.com/vanhoefm/fragattacks

References

Share