"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JavaScript 애플리케이션에서 중간자(MitM) 공격을 방지하는 단계

JavaScript 애플리케이션에서 중간자(MitM) 공격을 방지하는 단계

2024-08-01에 게시됨
검색:491

Steps to Preventing Man-in-the-Middle (MitM) Attacks in JavaScript Applications

MitM(Man-in-the-Middle) 공격은 웹 보안에 심각한 위협이 됩니다. 이러한 공격에서는 악의적인 행위자가 클라이언트와 서버 간의 통신을 가로채서 데이터를 도청하거나 조작하거나 훔칠 수 있습니다. 이 블로그에서는 JavaScript 애플리케이션의 맥락에서 MitM 공격이 어떻게 작동하는지 살펴보고 이러한 위협으로부터 애플리케이션을 보호하기 위한 실질적인 단계를 제공합니다.

중간자 공격이란 무엇입니까?

중간자(Man-in-the-Middle) 공격은 공격자가 서로 직접 통신하고 있다고 믿는 두 당사자 간의 메시지를 비밀리에 가로채서 전달할 때 발생합니다. 이러한 차단으로 인해 로그인 자격 증명, 금융 정보, 개인 정보 등 민감한 데이터에 대한 무단 액세스가 발생할 수 있습니다.

MitM 공격의 작동 방식

MitM 공격은 다음과 같은 다양한 방법으로 실행될 수 있습니다.

1. DNS 스푸핑: DNS 스푸핑에는 DNS 레코드를 변경하여 사용자를 악성 웹사이트로 리디렉션하는 작업이 포함됩니다.

예:
xyz.com에 Node.js 및 React 앱을 배포했다고 가정해 보겠습니다. 해커는 사용자가 xyz.com을 방문하려고 할 때 귀하의 사이트와 동일한 악성 사이트로 리디렉션되도록 DNS 레코드를 조작할 수 있습니다.

DNS 스푸핑을 방지하는 단계:

  • DNSSEC(Domain Name System Security Extensions)를 사용하여 추가 보안 계층을 추가하세요.
  • DNS 레코드를 정기적으로 모니터링하고 업데이트하세요.
  • DNS 스푸핑에 대한 보안 기능을 제공하는 평판이 좋은 DNS 제공업체를 이용하세요.
# Example of enabling DNSSEC on your domain using Cloudflare
# Visit your domain's DNS settings on Cloudflare
# Enable DNSSEC with a single click

2. IP 스푸핑
IP 스푸핑에는 신뢰할 수 있는 IP 주소인 것처럼 가장하여 네트워크 트래픽을 가로채는 행위가 포함됩니다.

예:
공격자는 클라이언트와 Node.js 서버 간의 트래픽을 가로채기 위해 서버의 IP 주소를 스푸핑할 수 있습니다.

IP 스푸핑을 방지하는 단계:

  • 신뢰할 수 있는 IP 주소만 서버와 통신할 수 있도록 IP 화이트리스트를 구현하세요.
  • VPN 및 방화벽과 같은 네트워크 수준 보안 조치를 사용합니다.
  • 서버에서 IP 주소의 적절한 유효성 검사 및 필터링을 확인하세요.
// Example of IP whitelisting in Express.js
const express = require('express');
const app = express();

const allowedIPs = ['123.45.67.89']; // Replace with your trusted IPs

app.use((req, res, next) => {
  const clientIP = req.ip;
  if (!allowedIPs.includes(clientIP)) {
    return res.status(403).send('Forbidden');
  }
  next();
});

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

삼. HTTPS 스푸핑
HTTPS 스푸핑에는 보안 웹사이트를 가장하기 위해 가짜 SSL 인증서를 만드는 것이 포함됩니다.

예:
공격자는 xyz.com에 대한 가짜 SSL 인증서를 생성하고 합법적인 서버와 동일하게 보이는 악성 서버를 설정할 수 있습니다.

HTTPS 스푸핑을 방지하는 단계:

  • 인증서 투명성을 사용하여 도메인에 대해 발급된 모든 인증서를 모니터링하고 기록합니다.
  • HPKP(HTTP 공개 키 고정)를 구현하여 웹 서버의 암호화 공개 키를 특정 HTTPS 웹사이트 집합과 연결하세요.
// Example of implementing HPKP in Express.js
const helmet = require('helmet');
const app = express();

app.use(helmet.hpkp({
  maxAge: 60 * 60 * 24 * 90, // 90 days
  sha256s: ['yourPublicKeyHash1', 'yourPublicKeyHash2'], // Replace with your public key hashes
  includeSubDomains: true
}));

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

4. Wi-Fi 도청
Wi-Fi 도청에는 보안되지 않은 Wi-Fi 네트워크를 통해 전송되는 데이터를 가로채는 작업이 포함됩니다.

예:
해커는 악성 Wi-Fi 핫스팟을 설정하고 사용자가 서버에 연결할 때 사용자와 서버 간에 전송되는 데이터를 가로챌 수 있습니다.

Wi-Fi 도청을 방지하는 단계:

  • 사용자에게 안전한 Wi-Fi 네트워크에만 연결하도록 권장합니다.
  • 클라이언트와 서버 간에 전송되는 데이터를 보호하기 위해 E2EE(종단 간 암호화)를 구현합니다.
  • VPN을 사용하여 클라이언트와 서버 간의 트래픽을 암호화하세요.
// Example of enforcing HTTPS in Express.js
const express = require('express');
const app = express();

app.use((req, res, next) => {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  next();
});

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

JavaScript 애플리케이션에서 MitM 공격 방지

1. 어디서나 HTTPS 사용
클라이언트와 서버 간의 모든 통신이 HTTPS를 사용하여 암호화되었는지 확인하세요. Let's Encrypt와 같은 도구를 사용하여 무료 SSL/TLS 인증서를 받으세요.

// Enforce HTTPS in Express.js
const express = require('express');
const app = express();

app.use((req, res, next) => {
  if (req.headers['x-forwarded-proto'] !== 'https') {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  next();
});

// Your routes here

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

2. SSL/TLS 인증서 유효성 검사
SSL/TLS 인증서에 대해 강력한 유효성 검사를 사용하고 프로덕션에서 자체 서명된 인증서를 사용하지 마세요.

삼. 콘텐츠 보안 정책(CSP) 구현
CSP 헤더를 사용하여 애플리케이션이 리소스를 로드할 수 있는 소스를 제한하여 악성 스크립트 삽입 위험을 줄입니다.

// Setting CSP headers in Express.js
const helmet = require('helmet');
app.use(helmet.contentSecurityPolicy({
  directives: {
    defaultSrc: ["'self'"],
    scriptSrc: ["'self'", 'trusted.com'],
    styleSrc: ["'self'", 'trusted.com']
  }
}));

4. 보안 쿠키 사용
클라이언트측 스크립트를 통해 쿠키에 액세스하는 것을 방지하려면 쿠키가 Secure 및 HttpOnly로 표시되어 있는지 확인하세요.

// Setting secure cookies in Express.js
app.use(require('cookie-parser')());
app.use((req, res, next) => {
  res.cookie('session', 'token', { secure: true, httpOnly: true });
  next();
});

5. HSTS(HTTP 엄격한 전송 보안) 구현
HSTS를 사용하여 브라우저가 HTTPS를 통해서만 서버와 통신하도록 합니다.

// Setting HSTS headers in Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
  maxAge: 31536000, // 1 year
  includeSubDomains: true,
  preload: true
}));

중간자 공격은 웹 애플리케이션에 치명적인 결과를 가져오며 데이터 도난 및 주입 공격으로 이어질 수 있습니다. 이러한 공격이 어떻게 작동하는지 이해하고 강력한 보안 조치를 구현함으로써 JavaScript 애플리케이션을 보호하고 사용자 데이터의 안전을 보장할 수 있습니다. 항상 HTTPS를 사용하고, SSL/TLS 인증서를 검증하고, CSP를 구현하고, 쿠키를 보호하고, HSTS를 시행하여 MitM 공격의 위험을 완화하세요.

릴리스 선언문 이 기사는 https://dev.to/rigalpatel001/steps-to-preventing-man-in-the-middle-mitm-attacks-in-javascript-applications-3ah4?1에서 복제됩니다. 침해가 있는 경우, 문의 Study_golang@163 .comdelete
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3