- Today
- Total
Byeo
리그오브레전드 디도스 체험해보기 본문
롤 디도스에 공격 받으면? (디도스를 체험해보자)
최근 2달 동안 스트리머 분들, 심지어는 LCK 대회까지 DDOS (Distributed Denial of Service)때문에 게임이 원활하게 되지 않는 사태가 빈번하게 발생했었습니다. 지금도 진행형으로 알고 있는데요.
방송을 시청하면서 '소환사 한 명이 게임을 종료했습니다.'라는 사운드가 들릴 때마다 이 공격이 어떻게 이뤄지는 건지, 롤 디도스 원리가 뭘지, 그리고 공격 받으면 어떻게 될 지 갑자기 궁금해져서 여러 공격 기법중에 한 가지를 직접 실험 해보았습니다.
타인에게 피해를 주지 않는 선 (봇전)에서 체험 테스트를 해보았습니다. 공격 방법은 UDP flooding을 사용했으며, 실행이 의외로 정말 단순합니다.
실제로 따라 하여 남에게 피해를 주는 행위는 절대 하지 마세요!
4줄 요약
- 상대 IP만 알고 있으면 UDP flooding 만으로도 롤을 못하도록 만들 수 있다.
- PC가 공유기 뒤에 숨어도 상관없다. 통신사와 내 집 공유기 사이의 link bandwidth가 전부 소진되기 때문.
- 개인 사용자에게는 해결책이 뚜렷하게 보이지 않는다. IP가 노출되지 않도록 소중히 하자.
- 특히 롤은 어디선가 (username, tag)의 조합을 이용해 IP를 가져올 수 있는 것으로 추정된다.
실제 DDOS 공격자의 방법과 제가 접근하는 방법이 다를 수도 있습니다.
(이전에 연습모드에서 테스트해본 영상. 연습모드에서 DDOS 공격을 시행해도 재접속이 뜨지 않아서 봇전으로 옮겼다.)
환경
- 입문 봇전 (PvE)
- AWS에서 작성자 로컬 PC로 hping3 DDOS
- 로컬 PC: SKT 공유기에 연결되었으며, 사설 IP를 제공받음
- SKT 공유기: 100 Mbps 상품에 가입. NAT 모드
공격 대상의 "공인" IP는 안다고 가정합니다. 이 부분이 현재 롤에서 발생하는 중대한 취약점으로 보입니다.
물론 상대의 IP를 알아내는 것은 어려운 작업은 아닙니다. 상대와 딱 1회라도 직접 통신을 맺어보면 바로 알 수 있죠.
그렇더라도 리그오브레전드에서 임의의 유저가 곧바로 공격을 당해버리는 점은 의문입니다. 방송을 보면 스트리머 본인이 아닌, 스트리머와 같은 팀 유저가 공격을 받아서 무기력하게 지는 경우가 다반사였죠. 이는 어디선가 (username, tag)의 조합을 통해서 IP를 알아낼 수 있는 방법이 있는 것이 아니면 어려워 보이긴 합니다.
참고로 상대 유저의 공인 IP를 알아내는 방법은 저도 모르고, application-specific 영역이라 제가 공부해보고 싶은 부분은 아니어서 다루지 않습니다.
1. AWS EC2 인스턴스 생성
꼭 AWS EC2 인스턴스여야 하는 것은 아닙니다. 그냥 만들기 편해서 그래요. 3개의 인스턴스를 생성했습니다!
세 개의 인스턴스에 hping3을 설치해 줍니다.
sudo apt update
sudo apt install hping3
hping3은 원하는 protocol의 packet을 생성하여 목적지로 쏘는 프로그램입니다.
2. 리그오브레전드 게임 실행
1) 봇전 시작
입문 봇전을 시작합니다.
2) hping3 flood 실행
세 개의 인스턴스에서 저의 공인 IP를 향하는 hping3 UDP flood를 실행합니다.
sudo hping3 -2 --flood {MY_PUBLIC_IP} -d 1450 -e "ABCDE"
- -2: UDP packet
- --flood: port를 순회하면서 flooding
- -d: packet size가 1450 byte
- bandwidth를 강하게 쏘는 방법은 packet를 최대한 크게 잡는 것입니다. Packet size는 통상적으로 최대 1500 bytes까지 가능합니다. (그 이상은 jumbo frame)
- -e: data
- MY_PUBLIC_IP는 네이버에 "내 ip"를 검색하시면 알 수 있습니다.
3) 게임 상태 관측
hping3을 시작하는 순간 bandwidth가 UDP에 잠식돼서 계속 튕깁니다.
게임에서 튕기지 않더라도 렉이 너무 심해서 게임을 할 수가 없는 정도군요!
3. 몇 가지 고찰
1) 내 PC는 공유기 (NAT) 뒤에 있는데 어떻게 가능해?
저는 SKT에 가입하면서 받은 공유기에 연결하여 인터넷을 사용 중입니다. 이 공유기는 NAT모드로 동작하며, NAT는 다음과 같은 특징이 있습니다.
- 공유기에 연결된 장치들은 사설 IP를 사용한다.
- (포트포워딩 설정을 하지 않았기 때문에) 외부에서 먼저 연결을 수립할 수 없다.
하지만 내 PC에 데이터를 전송할 수 없더라도, 공인 IP만 알고 있으면 그 앞단에 영향을 주는 것이 가능합니다.
SKT 공유기가 대부분의 hping3 UDP packet을 차단을 하긴 합니다. 외부에서 먼저 연결을 수립하려는 packet이기 때문이죠. (UDP는 connection 개념이 없지만, 누가 먼저 연결을 수립하는지의 개념은 존재합니다. ) 1
→ SKT 공유기가 hping3 UDP packet을 PC로 보내지 않고 drop 하기 때문에 제 PC는 특별한 흔적이 남지 않습니다. 그저 packet이 들어오지 않는다 뿐이죠. (e.g., wireshark 혹은 ctrl+alt+delete의 성능 탭에서 별 다른 징조가 없음)
하지만 SKT ISP (Internet Service Provider, 통신)에서 SKT 공유기까지 연결된 100 Mbps link가 대부분 쓸모없는 'hping3 UDP'으로 오염됨에 따라 제공받을 수 있는 bandwidth를 날린 것은 변함이 없습니다.
실제 공유기 통계입니다.
보통 192.168.x.1을 주소창에 입력하시면 공유기 설정에 들어가실 수 있습니다.
SKT 공유기에서는 유선 통계를 제공하고 있습니다. 여기서 WAN 항목이 SKT ISP와 연결된 링크인데요,
우측을 보면 알 수 있듯 Rx-bps가 107.72M죠. 가입 상품이 100 Mbps이므로, 제공받은 bandwidth를 이미 넘겼습니다.
실제 작업관리자 통계입니다.
hping3을 실행하는 순간, 내 PC에 도달하는 packet이 현저히 적어지게 됩니다.
2) 이러면 롤 뿐만 아니라 다른 모든 프로그램도 영향을 받는 것 아닌가?
맞습니다. 방송 스트리머 분들의 케이스를 포함하여 대부분 인터넷이 통째로 끊겨버리는 증상을 같이 겪으시는 듯합니다. 쓸모없는 packet으로 link bandwidth를 잠식했기 때문에 SKT 공유기 뒤에 있는 모든 장비들의 네트워크가 먹통이 됩니다.
다음은 같은 공격 상황 하에서 Youtube를 시청했을 때의 차이입니다.
좌측은 평소 상태이며 63 Mbps를 보이고 있습니다. 공격 상태인 우측은 성능이 0.8 Mbps로 떨어졌고 buffer health도 0초입니다.
3) 더 높은 bandwidth를 쓰면 되지 않을까?
저는 100Mbps라는 가장 낮은 bandwidth 상품을 쓰고 있긴 한데요. 1Gbps 상품으로 올리면 bandwidth를 더 확보를 할 수는 있겠습니다만, 마찬가지로 공격자도 동시에 더 많은 공격을 퍼부으면 돼서 의미가 없는 방법입니다.
4) 뭔가 해결 방법이 없을까?
실제로 롤 DDOS 공격자가 UDP flooding을 이용해 공격했을지는 모르겠지만, 우선 저는 개인 사용자에 대한 flooding 공격 방지책은 잘 안 보입니다..
▶ 검색되는 몇 가지 방어책으로는 앞단에 방화벽을 두어서 UDP flooding을 먼저 막는 방법이 있는 것으로 보입니다 2. 그런데 개인이 집에다가 운용하는 것은 전혀 의미가 없고, 통신사가 제공해야만 하는 방법이죠. 3
▶ 통신사가 제공하는 상품도 있긴 합니다 . 그런데 가격이 100 Mbps 기준 2,750,000원/1개월이라서 개인이 사용하기에는 부담이 되긴 하네요. 4
▶ 외부 VPN이나 Proxy를 사용해서 IP를 바꿔가며 노출 가능성을 최소화하는 노력도 가능하겠으나, 내 통신사의 공인 IP가 노출된 상태라면 공격은 계속 가능하기 때문에 해답은 아닙니다.
▶ 이미 노출이 된 경우라면 공인 IP를 바꿔서 급한 불을 끌 수도 있습니다. 단, 기존에 서버를 운영하고 있는 경우에는 이 마저도 골치아프긴 합니다.
- 내 통신사의 공인 IP 주소 부여는 ISP가 관리하는 게이트웨이의 DHCP (IP 주소 할당 프로토콜)로부터 이뤄집니다. 이 절차를 다시 수행하려면 통신사로부터 받은 공유기를 수 시간정도 꺼놓았다가 켜면 됩니다. 꺼져있을 때 해당 IP는 미사용으로 간주하고, IP 주소가 필요한 다른 사용자에게 할당합니다.
- 혹은, 직접 공유기에다가 고정 IP를 입력하는 방법이 있습니다. 이는 ISP 운영 정책이나 ISP의 DHCP 상황에 따라 결과가 달라질 수 있습니다.
근본적으로는 어려운 걸까요..?
UDP는 connectionless 기반의 protocol입니다. 보내면 끝이죠. drop이 발생했는지, 심지어는 상대가 받았는지 조차 관심 없습니다. 그래서 상대가 packet을 받지 못했으면 drop을 줄이기 위해 rate를 낮추려고 하는 congestion control도 없습니다. 현재는 이를 application 개발자에게 필요하면 구현하도록 가이드하고 있는 것으로 보입니다. (RFC 8085)
The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.
즉, protocol에 별도의 rate 제어 매커니즘이 명시되어있지 않죠. 따라서 UDP flooding 공격을 한다면, 전 세계의 네트워크는 별도의 제어 매커니즘이나 차단 없이 상대방에게 끝까지 전달하는 것이 일반적인 규칙일 것입니다. (사실, 고객의 요청이 없었는데 통신사가 정해진 protocol을 월권하여 개인의 packet을 마음대로 제어/차단하는 것이 더 이상하기도 합니다.)
정리
최근 LCK, 아프리카tv, 치지직에서 간간이 보이는 롤 DDOS 공격을 직접 체험해보았습니다. 실제 공격 수법과 다를 수는 있긴 하나, IP만 노출되면 간단한 커맨드 하나만으로도 상대방을 허수아비로 만들 수 있는 것은 분명합니다.
이미 공인 IP가 노출된 경우, 공인 IP 변경이 개인 사용자가 할 수 있는 최선으로 보이긴 합니다. (다른 방법 있으면 댓글로 공유 부탁드립니다~) 현재로서는 IP를 최대한 노출하지 않도록 유의해야겠습니다.
혹시 틀린 내용이 있다면 자유롭게 답글 남겨주시길 바랍니다!
'일상 (Life) > 게임' 카테고리의 다른 글
본체 케이스 바꾸기 (발열 잡기) (3) | 2023.08.29 |
---|---|
Ixion (익시온) 후기 (0) | 2023.04.29 |