본문 바로가기
보안

🚨 WebSockets 공격: 인증되지 않은 연결을 악용한 보안 취약점 🔓

by IT 분석가 2025. 2. 20.
반응형

웹소켓 공격

 

📌 목차

  1. WebSockets란?
  2. WebSockets 공격의 원리
  3. 주요 공격 기법
  4. 보안 위협과 실제 사례
  5. 방어 방법 및 대응 방안

🔍 WebSockets란?

WebSockets클라이언트와 서버 간의 실시간 양방향 통신을 제공하는 프로토콜이다.

HTTP 요청과는 다르게 연결을 한 번 맺으면 지속적으로 데이터를 주고받을 수 있어 채팅, 실시간 알림, 스트리밍 등에 많이 사용됨

그러나, WebSockets는 기본적으로 인증 및 보안 기능이 내장되어 있지 않아
잘못된 설정이 있을 경우 인증되지 않은 사용자가 연결하여 악성 메시지를 전송하는 취약점이 발생할 수 있음.


⚙️ WebSockets 공격의 원리

WebSockets는 HTTP 기반이지만, 연결이 한 번 성립되면 추가적인 인증이 필요하지 않음
따라서, 클라이언트 측에서 인증을 우회하여 악성 데이터를 서버로 전송할 수 있음.

 

취약한 WebSocket 연결 예제

const ws = new WebSocket("ws://example.com/socket");
ws.onmessage = function(event) {
    console.log("Received: " + event.data);
};
ws.send("Hello Server!");
 

📌 취약점

  • ws://example.com/socket은 보안 없이 누구나 접근 가능
  • 서버에서 별도의 인증 없이 메시지를 처리하면 공격자가 악성 메시지를 보낼 수 있음

🚨 주요 WebSockets 공격 기법

1️⃣ 인증되지 않은 WebSocket 연결

📌 공격 방식

  • WebSocket이 사용자 인증 없이 작동하면 공격자가 직접 연결하여 악성 요청 전송 가능

공격 예시

const ws = new WebSocket("ws://vulnerable.com/socket");
ws.onopen = function() {
    ws.send(JSON.stringify({"action": "getUserData", "userId": "123"}));
};
 

🚨 결과:

  • 공격자가 userId: 123 데이터를 직접 요청하여 개인정보 유출 가능

2️⃣ Cross-Site WebSocket Hijacking(CSW)

📌 공격 방식

  • 피해자가 공격자가 만든 웹사이트를 방문하면 자동으로 WebSocket 연결이 이루어져 공격자가 악성 요청을 수행

공격 예제 (공격자 사이트에서 실행)

const ws = new WebSocket("ws://victim.com/socket");
ws.onopen = function() {
    ws.send(JSON.stringify({"action": "transferFunds", "amount": "10000"}));
};
 

🚨 결과:

  • 피해자의 계정을 이용하여 서버로 악성 요청을 전송

3️⃣ WebSocket 메시지 조작(Man-in-the-Middle, MitM)

📌 공격 방식

  • 공격자가 네트워크에서 WebSocket 메시지를 가로채고 변조하여 악성 데이터 삽입

공격 예시 (Burp Suite를 이용한 WebSocket 가로채기)

{
    "action": "updateProfile",
    "role": "admin"
}
 

🚨 결과:

  • 공격자가 자신의 계정을 관리자로 변경 가능

⚠️ 보안 위협과 실제 사례

보안 위협

  • 🛡️ 인증 우회: 공격자가 직접 WebSocket 연결을 수행하여 데이터 탈취
  • 🎭 CSRF & 세션 하이재킹: Cross-Site WebSocket Hijacking을 통해 악성 요청 수행
  • 🚀 권한 상승: 공격자가 WebSocket 메시지를 변조하여 관리자 권한 획득
  • 💣 서비스 거부 공격(DoS): 대량의 WebSocket 연결을 생성하여 서버 과부하 유발

실제 발생 사례

  1. 2018년 Slack WebSocket 취약점
    • WebSocket이 인증되지 않은 연결을 허용하여 비인가 사용자가 메시지를 가로챌 수 있는 취약점 보고됨
  2. 2020년 온라인 게임 플랫폼에서 WebSocket 공격 발생
    • 공격자가 WebSocket 메시지를 조작하여 부당한 게임 아이템을 획득

🔐 방어 방법 및 대응 방안

1. WebSocket 연결 시 인증 적용

  • WebSocket을 열 때 반드시 JWT 또는 세션 토큰을 이용한 인증 수행
  • 예제 (Node.js + WebSocket 인증)
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws, req) => {
    const token = req.headers['sec-websocket-protocol'];
    if (!isValidToken(token)) {
        ws.close();
    }
});

 

2. WebSockets에 CORS 정책 적용

  • WebSocket 요청이 신뢰할 수 있는 출처에서만 수행되도록 제한
  • 예제 (Express + WebSocket)
const server = new WebSocket.Server({ port: 8080, verifyClient: (info, cb) => {
    const allowedOrigins = ["https://trusted.com"];
    if (allowedOrigins.includes(info.origin)) {
        cb(true);
    } else {
        cb(false, 403, "Forbidden");
    }
}});

 

3. WebSocket 메시지 유효성 검사

  • 클라이언트에서 전달하는 메시지를 화이트리스트 기반으로 검증
  • 예제 (Python Flask + WebSocket)
@socketio.on('message')
def handle_message(msg):
    if msg["action"] not in ["sendMessage", "updateProfile"]:
        return {"error": "Invalid action"}

 

4. WebSocket 전송 시 암호화 적용 (wss:// 사용)

  • ws:// 대신 wss://(WebSocket Secure) 사용하여 데이터 암호화
  • 예제 (Nginx WebSocket 보안 설정)
server {
    listen 443 ssl;
    location /ws/ {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
    }
}

 

5. 웹 애플리케이션 방화벽(WAF) 적용

  • WebSocket 메시지 패턴을 분석하여 비정상적인 요청 차단

6. 정기적인 보안 테스트 수행

  • Burp Suite, OWASP ZAP 등을 활용하여 WebSocket 취약점 점검

📌 해시태그
#WebSockets #웹보안 #API보안 #정보유출 #보안취약점 #CSRF #인증우회 #실시간통신

반응형