프롤로그

때는 바야흐로 1년 전 한국정보기술연구원 Best of Best 13기에서 네트워크 수업을 수강하던 중 네트워크 전문가 이경문 멘토님께서 수업 중에 흥미로운 말씀을 하셨다. “ISP가 TCP 패킷에 대해 어떻게 요금을 측정하는지 알아요?”, “3 way handshake 이후 TCP SEQ 값의 차이로 요금을 측정합니다.” 이후 한 가지 가능성을 제시하셨다. “만약 TCP SEQ 값을 고정해서 데이터를 전송한다면 요금이 발생하지 않을 수 있습니다.” 흥미로운 이야기였지만 수업이 끝나고 기억을 잃어버린 채 반년이 지나가고 SKT USIM 데이터 해킹 사건 KT 기지국 해킹 사건 등 굴직한 이동 통신사 해킹 공격이 이슈가 되었고 이동 통신사들의 보안 수준에 대해 궁금증이 생겼다. 그러던 중 이경문 멘토님이 하신 말씀이 기억에서 떠올랐고 TCP SEQ NUM 고정을 이용한 LTE 과금 우회 방법이 실제로 가능성이 있는지, 현재는 이러한 취약점이 패치가 되었는지 궁금하였고 자료를 검색하였다. 자료 검색 결과 관련한 자료로 카이스트 김용대 교수님의 논문과 블로그 포스팅 글, 인터넷 기사가 존재했다.

syssec.kaist.ac.kr

[데일리시큐 TV ] KAIST (한국과학기술원) 김용대 교수

스마트폰 해킹하니 LTE 데이터가 무제한? : zum 뉴스

네트워크 취약점을 이용한 무료 와이파이(에그, 포켓파이, 포켓와이파이) 만들기(SKT, KT , LGU 무관 )

한국 이동통신의 LTE 데이터 과금 정책을 이용한 데이터 무료 사용 (데이터 무제한, 핸드폰 과금 우회, 네트워크 취약점, retransmission 취약점, TCP retransmission)

LTE 과금 우회 Retransmission 취약점은 패치되었나?

최초로 논문이 발간되고부터 10년이 지난 시점에서 구현에 성공한 포스팅 글, 구현에 실패한 포스팅 글이 존재했지만, 해당 글 또한 2025년 기준으로 6년이 지났기 때문에 현재 시점에서도 이용이 가능한 취약점인지 매우 궁금했다. 또한 구현을 하기 위해서는 매우 많은 네트워크 지식이 필요할 것인데 직접 한번 개발하여 네트워크 공부도 하고 취약점이 패치가 되었는지 확인 해볼까하는 도전을 하였다. 결과는 취약점을 PoC하는 것에 성공하였다. LTE 데이터 과금을 우회하는 것이 실제로 가능했다. 대한민국 3대 통신사 중 대부분에서 가능했다. 엄청난 희열도 잠시 매우 많은 생각이 들었다. Zero-Day도 아니고 10년이 지났지난 현재 암암리에 얼마나 많은 네트워크 해커가 해당 취약점을 이용했을지도 모른다는 사실에 이동통신 코어망 취약점에도 경각심을 가지게 되었다. 통신사의 과금 정책에 대한 것은 이용자를 우선으로 정책을 정해야 하기 때문에 과금 부풀리기 공격에도 해당 취약점이 사용될 수 있다는 점이 역설적으로 통신사에게는 어쩔 수 없이 취약점 패치에 제한 적일 수 있다. 이는 아래의 취약점의 PoC 원리 항목에서 더 자세히 작성해두었다.

이제부터 해당 글을 작성하는 이유에 관해 말하겠다. 의도를 분명히 하고자 하며, 개발 간에 산출해 낸 것들을 악의적 목적으로 사용한 적이 없으며 연구의 목적으로 사용하였다. 또한 산출물 공유 목적이나 배포의 목적은 없으며, 해당 LTE 코어망 취약점이 패치가 안 된다면 언젠간 해커들에 의해 대규모 서비스가 가능한 서버로 발전하여 대량 사용자를 대상으로 서비스하는 것까지 할 수 있다는 가능성을 알리기 위함이다. 이미 암암리에 해커들은 서비스를 하고 있을 지도 모른다. 현재 통신사를 대상으로 한 해킹 공격이 지속적으로 발생하는 혼란스러운 시점에 이러한 취약점이 얼른 문제 제기되어 하루라도 빨리 패치되길 바란다.

취약점 PoC 원리

TCP 재전송(TCP Retransmission)

송신자는 패킷을 송신하고 나면 별도(Round Trip Time - RTT)로 정의된 Timer(Retransmission Timeout - RTO)를 시작한다. 그리고 Timer의 시간이 만료되면 다시 패킷을 전송한다. 이것이 기본적인 TCP 재전송 과정이다. 정상적인 TCP 통신 과정에서는 Timer의 시간이 만료되기 전 적절한 ACK가 오기 때문에 재전송이 발생하면 안 된다.

하지만 TCP 재전송이 발생하는 3가지 경우가 있는데

  1. Packet lost 재전송이 발생할 수 있는 첫 번째 상황. 송신자는 패킷을 보냈지만, 어떤 이유에서인지 중간에 유실되어 수신 측에 도달하지 못했다. 수신 측은 당연히 패킷이 도착하지 않았으므로 ACK를 보내줄 리가 없고, 송신자의 Timer는 만료된다.
  2. ACK lost 재전송이 발생할 수 있는 두 번째 상황. 송신자가 패킷을 보냈고, 수신 측 또한 응답으로 ACK를 보냈다. 그러나, 이번에는 중간에 ACK가 유실되어 송신자에게 도착하지 못했다. 송신자의 Timer는 만료된다.
  3. Early Timeout 재전송이 발생할 수 있는 세 번째 상황. 송신자가 패킷을 보냈고, 수신 측에서 응답으로 ACK를 보냈다. 그러나, 네트워크 지연이 발생해서 송신자의 Timer가 만료되어 버린 후에 ACK가 송신자에게 도착한다.

tcp-retransmission.png

위 사진은 TCP 재전송(Fast Retransmission without SACK)에 대한 흐름이다. 흐름을 따라가 보면 중복된 세그먼트가 재전송되는 것을 알 수 있다.

또한 이러한 TCP 재전송은 이동 통신망의 코어망에서도 망 이용 및 가용 상태에 따라서 빈번하게 발생한다.