Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

사이버 보안 용어집공격 카탈로그

레인보우 테이블 공격: 작동 방식과 방어 방법

레인보우 테이블 공격: 작동 방식과 방어 방법

많은 일반적인 비밀번호 공격 방법은 꽤 단순합니다. 마치 문 잠금장치를 열기 위해 다양한 물리 키를 시험해 보는 것과 비슷하죠. 예를 들어, 무차별 대입(brute force) 공격에서는 공격자가 정답을 찾을 때까지 비밀번호를 체계적으로 추측합니다. 또는 단순히 추측하는 대신, 다른 침해 사고에서 유출된 사용자 이름/비밀번호 조합 목록을 사용할 수 있습니다(credential stuffing). 또는 알려진 사용자 이름에 널리 사용되는 비밀번호를 조합해 번갈아 대입할 수도 있습니다 (password spraying).
하지만 해커는 더 정교한 선택지도 있습니다. 모든 키를 다 시험하는 대신, 잠금을 ‘따는’ 방식이죠. 레인보우 테이블 공격에서는 비밀번호 보호 인프라 자체의 취약점을 악용하는 데 목적이 있습니다. 이는 사용자 계정에 침입하는 한층 고급스러운 방법이며, 종종 훨씬 더 빠르게 실행됩니다.

엄선한 관련 콘텐츠:

레인보우 테이블 공격의 정의와 목적

사용자가 비밀번호를 만들면 해당 비밀번호는 해시로 변환됩니다. 해시는 고정 길이의 문자열로, 원래(평문) 비밀번호와 전혀 비슷하지 않습니다. 비밀번호를 해싱하면 해시 값에서 평문 비밀번호를 알아내기 위한 역방향 알고리즘이 없기 때문에 보안을 유지하는 데 도움이 됩니다.

사이버 보안에서 레인보우 테이블 공격은 해싱의 또 다른 핵심 특징을 악용합니다. 즉, 해싱 알고리즘은 특정 사용자의 비밀번호에 대해 항상 동일한 해시를 생성합니다. 따라서 악의적인 공격자는 널리 사용되는 비밀번호 목록을 만들고, 각 비밀번호의 해시를 계산해 레인보우 테이블을 생성할 수 있습니다. 이후 공격자가 회사의 해시된 비밀번호 데이터베이스에 접근할 수 있다면, 레인보우 테이블에서 각 해시 값을 그대로 찾아보기만 하면 됩니다. 일치하는 항목을 찾으면 공격자는 즉시 해당 평문 비밀번호를 알 수 있습니다. 이 방식은 비밀번호를 크래킹하는 것보다 훨씬 적은 시간과 계산 자원을 필요로 합니다.

해싱의 개념과 보안에서의 역할 이해하기

해싱이란 무엇인가요?

해싱(Hashing)은 입력 데이터(예: 평문 비밀번호)를 수학적 알고리즘을 통해 고정된 길이의 문자 문자열로 변환하는 과정입니다. 해싱은 비밀번호, 디지털 서명 및 기타 민감한 정보를 보호하기 위해 일반적으로 사용됩니다.

해시 함수는 어떻게 동작하나요?

해시 함수는 입력 데이터의 길이에 관계없이 이를 고유한 고정 길이의 출력 문자열로 변환합니다. 이 디지털 지문은 원래 데이터와는 전혀 무관해 보입니다. 입력에 아주 사소한 변경이 있어도 결과 해시는 상당한 차이를 보입니다. 하지만 동일한 입력이라면 항상 동일한 해시가 생성됩니다.

해싱이 레인보우 테이블 공격에 취약한 이유

레거시 해싱 알고리즘은 해당 알고리즘이 생성하는 해시가 예측하기 쉬워서 레인보우 공격에 특히 취약합니다. 이 문서의 후반부에서는 레인보우 테이블의 효과를 떨어뜨리기 위해 솔팅(salting) 같은 기법을 사용하고, 평문 비밀번호를 알아내는 데 성공한 공격자를 저지하기 위해 다중 요소 인증을 도입하는 등 위험을 줄이기 위한 효과적인 전략을 다룹니다.

레인보우 테이블 비밀번호 공격이 작동하는 방식

레인보우 테이블의 생성과 구조

레인보우 테이블은 평문 비밀번호와 해당 비밀번호의 해시 값이 짝(pair)으로 저장된 대규모 데이터베이스입니다. 미리 계산해 둔 레인보우 테이블이 있으면 평문 비밀번호를 비교적 쉽게 확인할 수 있습니다:

  1. 공격자는 침해된 시스템에서 비밀번호 해시 데이터베이스를 확보합니다.
  2. 공격자는 각 해시 값을 자신의 레인보우 테이블과 대조해 일치시키려는 프로그램을 실행합니다.
  3. 해당 해시를 찾지 못하면 프로그램은 축소 함수(reduction function)를 적용한 뒤 다시 검색합니다. 이 과정은 일치하는 값이 발견될 때까지 반복됩니다.
  4. 이후 원래의 비밀번호가 검색(복원)됩니다.

브루트 포스 공격과 사전 공격의 차이점

브루트 포스 공격에서는 공격자(해커)가 가능한 사용자 이름/비밀번호 조합을 매우 많이 추측하기만 하면 시스템에 로그인하려고 시도합니다. 사전 공격은 사전에서 가져온 단어를 후보 비밀번호로 사용하는 특정 유형의 브루트 포스 공격입니다. 이러한 공격 유형은 수행이 비교적 쉽고, 사용 중인 해싱 기법에 의존하지 않습니다. 하지만 방어자는 이를 비교적 쉽게 식별할 수 있으며, 많은 조직이 브루트 포스 공격을 막기 위해 일정 횟수의 실패한 로그인 시도 후 계정을 잠그는 모범 사례를 따릅니다.

반면 레인보우 테이블 공격은 해시 처리된 비밀번호 데이터베이스를 훔친 다음, 이를 일반적으로 쓰이는 비밀번호 해시의 표와 대조(매칭)하려는 방식입니다. 핵심 장점은 공격자가 비밀번호 데이터베이스를 탈취하면 방어자가 탐지할 수 있는 피해자 네트워크의 활동이 더 이상 없다는 점입니다. 그러나 레인보우 테이블은 생성하는 데 시간이 걸리고, 상당한 저장 공간이 필요합니다.

이 모든 공격은 약하고 흔히 사용되는 비밀번호를 대상으로 할 때 가장 잘 작동한다는 점에 주목하세요. 공격자들이 집중하는 대상이기 때문입니다. 공격자가 무차별 대입(brute-force) 공격을 수행하든 레인보우 테이블을 생성하든 상관없이, 주로 이러한 비밀번호를 노립니다.

레인보우 테이블 공격의 예

레인보우 테이블 공격은 전혀 새롭지 않습니다. 이와 관련해 잘 알려진 사건 중 하나는 2012년에 발생했습니다. 공격자들이 LinkedIn에서 비밀번호 해시를 훔쳤고, 그 결과 650만 명의 사용자 계정 자격 증명이 침해당했으며, 이후 러시아의 비밀번호 포럼에 게시되었습니다.

가상의 공격 시나리오는 다음과 같습니다.

  • 해커는 네트워크 스니핑 도구를 사용해 전자상거래 플랫폼을 호스팅하는 서버들 사이에서 전송되는 보안이 취약한 비밀번호 해시를 가로챕니다. 레인보 테이블을 사용하면 평문 비밀번호를 복호화한 뒤 이를 이용해 고객 계정에 접근하고 개인 정보를 훔칩니다.
  • 공격자는 보안이 취약한 웹 애플리케이션을 악용해, 구식 해싱 방식으로 생성된 비밀번호 해시를 훔칩니다. 그들은 레인보 테이블을 사용해 모든 비밀번호를 복호화한 뒤 기업 네트워크에 침입합니다.

레인보 테이블 공격과 다른 비밀번호 크래킹 방법 비교

레인보 테이블 vs 사전 공격

Rainbow Table Attack

Dictionary Attack

Uses precomputed hash-password mappings

Uses predefined word lists

Primarily used for offline attacks on leaked or stolen password databases

Can be used for both online and offline attacks

Limited by the algorithm used to generate the password hashes

Highly customizable; wordlists can include common passwords, patterns, or user-specific terms

Requires significant storage

Less storage-intensive

레인보 테이블 vs. 무차별 대입 공격

Rainbow Table Attack

Brute Force Attack

Attempts to match each stolen password hash against a precomputed list to determine the corresponding plaintext password

Attempts to guess a password by systematically trying various combinations of characters, numbers and symbols

Highly effective against unsalted hashes of any complexity

Guaranteed to find the password eventually, but may take an impractical amount of time

Trades computation time for storage space

Relies entirely on computational power

Easily defeated by salting passwords

레인보우 테이블 공격의 고유한 특징

  • 레인보우 테이블을 생성하려면 상당한 사전 계산 리소스와 시간 투자가 필요합니다.
  • 레인보우 테이블은 특정 해싱 알고리즘(예: MD5, SHA-1)에 한정됩니다.
  • 레인보우 테이블 공격은 최신 솔팅(salting) 기법에 대해 효과가 낮습니다.
  • 레인보우 테이블은 실시간 비밀번호 크래킹 시도에는 적합하지 않습니다.

레인보우 테이블 공격의 주요 동기와 일반적인 대상

공격자가 레인보우 테이블을 사용하는 이유

공격자가 계속해서 레인보우 테이블을 사용하는 핵심 이유는 많은 조직이 여전히 레인보우 테이블에 매우 취약한 레거시 시스템을 보유하고 있기 때문입니다. 또한 이 공격 방식은 무차별 대입 방식보다 훨씬 빠르게 평문 비밀번호를 알아낼 수 있습니다.

레인보우 테이블을 구축하는 데는 상당한 시간과 노력이 필요하지만, 동일한 해싱 알고리즘을 사용하는 한 테이블을 서로 다른 시스템에 대해 여러 번 공격하는 데 활용할 수 있습니다. 따라서 장기적으로 보면 1회성 투자 비용 효율이 매우 높습니다. 또한 평문 비밀번호가 한 번 알아내지면, 다른 인기 웹 플랫폼과 서비스에 대한 크리덴셜 스터핑 공격에 재사용할 수 있습니다.

레인보우 테이블 공격에 취약한 시스템과 상황

다음 중 하나라도 해당되는 경우, 조직은 레인보우 테이블 공격에 가장 취약합니다:

  • 솔팅(salting) 없이 MD5 또는 SHA-1 같은 오래되었고 취약한 해시 알고리즘을 여전히 사용하는 레거시 애플리케이션
  • 약한 암호 정책을 적용해 기본값, 일반적이거나 예측하기 쉬운 암호를 허용하는 시스템. 이러한 암호는 미리 계산된 레인보우 테이블에 포함될 가능성이 더 큽니다
  • 이메일 및 소셜 미디어와 같이 사용자가 암호를 자주 재사용하는 플랫폼
  • 분리된 암호 저장 방식을 사용하지 않고 보호 조치가 약한 데이터베이스
  • Active Directory 구식 NTLM 해싱 알고리즘을 사용하는 계정

레인보우 테이블 공격의 위험과 결과

레인보우 테이블 공격은 치명적인 결과를 초래할 수 있습니다. 공격자가 평문 비밀번호를 확보한 후에는 이를 사용해 네트워크에 침투 기반을 마련하고, 측면 이동을 통해 기밀 데이터를 추출하며 랜섬웨어를 배포하고 운영을 방해할 수 있습니다. 전체 피해에는 다음이 포함될 수 있습니다:

  • 웹사이트 및 기타 핵심 시스템의 가동 중단으로 인해 고객이 불만을 느끼고 수익이 손실됨
  • 비용이 많이 드는 포렌식 조사 및 시스템 복구
  • 조직의 평판과 브랜드 이미지에 대한 지속적인 피해, 그리고 고객 신뢰의 약화
  • 데이터가 유출된 사용자에 대한 신용 모니터링 및 기타 서비스와 함께 홍보(대외 관계) 캠페인의 비용
  • 침해로 피해를 입은 개인들이 제기하는 소송에 따른 비용
  • GDPR, CCPA 또는 HIPAA와 같은 개인정보 보호 규정 미준수에 따른 강력한 제재

레인보우 테이블 공격 방지

비밀번호 솔팅(Password Salting): 작동 원리와 중요성

레인보ーテ이블(rainbow table) 공격에 대응하는 가장 효과적인 방법 중 하나는 비밀번호 솔팅을 사용하는 것입니다. 이 방식은 해싱하기 전에 각 비밀번호마다 고유하고 무작위인 문자열(이를 솔트라고 함)을 추가하는 것을 의미합니다. 각 비밀번호에 서로 다른 솔트가 적용되므로, 두 사용자가 같은 비밀번호를 선택하더라도 해시 값은 달라집니다. 그 결과 레인보ーテ이블을 구성하는 것이 불가능해집니다.

예를 들어, 한 사용자가 password123 를 비밀번호로 선택한다고 가정해 보겠습니다. (참고: 이것은 단지 예시일 뿐이며, 좋은 비밀번호 도구는 이 비밀번호가 사용되지 않도록 차단합니다.) 시스템은 솔트 A1B2C3 를 추가한 뒤, 결과 문자열(password123A1B2C3)을 해싱합니다.

그러면 다른 사용자가 같은 비밀번호 password123 를 선택합니다. 이때 시스템은 솔트 Q7T4M9 를 추가하고, 결과 문자열(password123Q7T4M9)을 해싱합니다. 즉, 평문 비밀번호가 같더라도 완전히 다른 해시 값이 생성됩니다.

안전한 해싱 알고리즘 사용

최신 해싱 알고리즘은 해독(크랙)에 더 많은 자원과 시간이 필요한 계산 복잡성을 도입합니다. bcrypt, Argon2, scrypt 같은 해싱 알고리즘은 공격자가 해시의 사전 계산용 테이블을 만들거나 병렬화된 무차별 대입 공격을 수행하는 것을 어렵게 만듭니다.

해싱 알고리즘과 기타 보안 프로토콜을 정기적으로 업데이트

해싱 알고리즘과 기타 보안 프로토콜은 지속적으로 개선되고 있습니다. 위험을 줄이려면 가능한 한 빠르게 최신 옵션으로 전환하세요. 해싱 알고리즘을 업그레이드한 후에는 다음 사용자 로그인 또는 비밀번호 변경 시 모든 저장된 비밀번호를 다시 해시(재해싱)하는 것을 잊지 마세요.

비밀번호 기반 공격에 대한 폭넓은 방어 구축

다음의 모범 사례는 레인보우 테이블 공격뿐만 아니라 다른 유형의 비밀번호 공격으로부터도 방어하는 데 도움이 됩니다.

강력한 비밀번호 정책을 적용하세요

강력한 비밀번호를 요구하면 모든 공격 경로에서 비밀번호가 손상(탈취)될 가능성이 줄어들어 공격 성공이 더 어려워집니다. 길고 고유한 비밀번호는 솔팅이 없어도 해시가 서로 겹칠 가능성을 낮추며, 무차별 대입(브루트포스) 공격에 사용되는 목록에 포함될 가능성도 낮습니다.

NIST에서 제시하는 권장 사항 등 최신 비밀번호 모범 사례를 참고하여 비밀번호의 길이와 복잡성에 관한 기준을 따르세요. 비밀번호 관리자를 도입하면 사용자가 정책을 쉽게 준수하고 각 계정에 대해 강력하고 고유한 비밀번호를 만들 수 있습니다.

다중 인증(Multifactor Authentication, MFA)을 사용하세요

MFA는 사용자가 계정에 액세스하기 위해 두 가지 이상 형태의 인증 수단을 제공하도록 요구합니다. 보통 전통적인 사용자 이름/비밀번호 조합에 더해 일회용 코드, 보안 키, 또는 지문 같은 생체 데이터가 사용됩니다.

MFA를 적용해 두면, 공격자가 레인보우 테이블을 사용하거나 추측을 통해 사용자의 평문 비밀번호를 알아내더라도 두 번째 인증 요소를 제공할 수 없기 때문에 차단됩니다.

서버 및 네트워크 보안 모범 사례를 따르세요

보다 넓은 관점에서 노출된 시스템의 공격 표면을 줄이는 것이 중요합니다. 주요 모범 사례는 다음과 같습니다:

  • 서버 및 민감 데이터에 대한 접근을 엄격히 제한
  • 시스템을 업데이트하고 취약점을 수정하기 위한 엄격한 패치 관리 프로세스 수립
  • 암호화를 사용해 저장 중 및 전송 중의 데이터를 보호하기
  • 네트워크 분할을 사용해 공격자나 악성코드가 더 민감한 영역으로 확장하는 것을 방지하기
  • 정기적인 보안 감사 및 모의 침투 테스트 수행

Netwrix가 어떻게 도울 수 있는지

디지털 환경을 안전하게 보호하려면 가시성과 제어가 매우 중요하며, Netwrix는 두 영역 모두에서 고급 기능을 제공합니다. Netwrix solutions 이를 통해 조직은 공격 표면을 선제적으로 줄이고, 클라우드부터 데이터 센터까지 인프라 전반에서 활동을 지속적으로 모니터링하며, 잠재적 위협에 대해 실시간 알림을 받아 효율적인 조사와 신속한 대응을 가능하게 합니다.

특히 Netwrix solutions 는 다음을 통해 비밀번호 기반 공격으로 인한 위험을 크게 줄일 수 있습니다:

  • 비밀번호 데이터베이스를 보호하고, 그 주변의 활동을 모니터링
  • 높은 권한이 필요한 자격 증명을 사용 시점에만 제공하는 just-in-time 액세스로 교체
  • 강력한 비밀번호 정책을 적용하고, 사용자가 해당 정책을 쉽게 준수할 수 있도록 비밀번호 관리자를 제공
  • 무차별 대입(brute force) 공격의 징후를 모니터링하고 자동으로 차단
  • 정상적인 사용자 행동을 기준선으로 설정하고, 계정 탈취를 시사할 수 있는 이상 징후에 대해 경고

FAQ

레인보우 테이블 공격이란 무엇인가요?

레인보우 테이블 공격은 해시 처리된 비밀번호를 크래킹하기 위해 사용하는 기법입니다. 공격자가 해시된 비밀번호를 확보하면, 훔친 해시 값을 레인보우 테이블의 항목과 대조하려고 시도합니다. 레인보우 테이블은 일반적인 평문 비밀번호를 해당 해시 값으로 매핑합니다. 이 방법은 무차별 대입 공격보다 빠르지만, 솔트가 없는 해시 또는 취약한 해시 알고리즘을 사용하는 시스템에만 효과적입니다

무차별 대입 공격과 레인보우 테이블 공격의 차이점은 무엇인가요?

무차별 대입(brute force) 공격에서는 해커가 가능한 사용자 이름/비밀번호 조합을 체계적으로 대입해 실시간으로 시스템에 로그인합니다. 레인보우 테이블(rainbow table) 공격에서는 공격자가 오프라인에서 작업하며, 탈취한 비밀번호 해시를 일반 평문 비밀번호의 미리 계산된 해시 값이 나열된 표와 대조해 일치시키려고 합니다.

레인보우 테이블(rainbow table) 공격으로부터 어떻게 방어하나요?

레인보우 테이블(rainbow table) 공격으로부터 보호하기 위해 취할 수 있는 효과적인 조치는 다음과 같습니다.

  • 비밀번호에 대해 해싱하기 전에 각 비밀번호마다 고유한 무작위 데이터를 추가하도록 비밀번호 솔팅(salting)을 사용하세요.
  • 강력한 해싱 알고리즘을 적용하세요.
  • 비밀번호 정책을 사용하여 강력한 비밀번호를 사용하도록 요구하세요.
  • 비밀번호 기반 공격의 위험을 완전히 없애기 위해 비밀번호 없는 인증을 고려하세요.

레인보우 테이블 공격에 대한 가장 좋은 방어 방법은 무엇인가요?

레인보우 테이블 공격에 대한 가장 좋은 방어 방법은 솔티드 해시를 사용하는 것입니다. 솔트(salt)는 해싱 전에 비밀번호에 추가되는 고유하고 무작위인 값으로, 미리 계산된 표를 무력화합니다.

연산 집약적인 최신 해싱 알고리즘으로 전환하고, 강력한 비밀번호 정책을 채택하며, 다중 요소 인증(MFA)을 구현하는 것도 중요합니다.

레인보우 테이블의 예는 무엇인가요?

레인보우 테이블은 특정 해시 알고리즘을 사용해 흔히 쓰이는 평문 비밀번호를 해당 해시 값으로 매핑합니다. 예를 들어, 테이블에는 다음과 같은 행이 포함될 수 있습니다.

Plaintext Password

Hashed Value

12345678

e10adc3949ba59abbe56e057f20f883e

qwerty

qwertyd8578edf8458ce06fbc5bb76a58c5ca4

레인보우 테이블 공격은 어떻게 작동하나요?

레인보우 테이블 공격은 기본 해시 알고리즘이 특정 입력 문자열에 대해 항상 동일한 해시 값을 생성한다는 사실에 의존합니다. 이를 통해 공격자는 흔히 쓰이는 평문 비밀번호와 해당 해시를 나열한 레인보우 테이블을 만들 수 있습니다. 해시된 비밀번호를 확보하면, 공격자는 단순히 레인보우 테이블에서 해당 값을 찾기만 하면 됩니다. 일치하는 항목이 발견되면, 해당 평문 비밀번호가 공개됩니다.

이러한 유형의 공격은 솔트가 적용되지 않은 해시 또는 구식 해시 알고리즘을 사용하는 시스템에 대해서만 효과적이라는 점에 유의하세요.

사전 공격(Dictionary attack)과 레인보우 테이블 공격(Rainbow table attack)의 차이점은 무엇인가요?

레인보우 테이블 공격과 사전 공격의 차이는 다음과 같이 설명할 수 있습니다. 사전 공격에서는 해커가 사전에 있는 흔한 단어와 구문 목록을 사용해 인증을 체계적으로 시도합니다. 구현이 비교적 간단하고 필요한 저장 공간도 최소입니다.

레인보우 테이블 공격에서는 공격자들이 비밀번호 해시를 탈취한 뒤, 해당 해시가 미리 계산해 둔 레인보우 테이블에 존재하는지 확인합니다. 이 레인보우 테이블에는 흔히 쓰이는 평문 비밀번호와 그에 해당하는 해시가 나열되어 있습니다. 이 방법은 준비에 상당한 시간을 소모하지만, 실시간 처리를 최소화하면서도 빠르게 비밀번호를 복구할 수 있습니다. 레인보우 테이블은 주로 유출된 비밀번호 데이터베이스에 대한 오프라인 공격에 사용됩니다.

공유하기

Entra ID 애플리케이션 권한 악용—작동 방식과 방어 전략

AdminSDHolder 수정 — 작동 방식과 방어 전략

AS-REP Roasting 공격 — 작동 방식과 방어 전략

Hafnium 공격—작동 방식과 방어 전략

DCSync 공격 해설: Active Directory 보안에 대한 위협

패스-더-해시(PtH) 공격 이해하기

Golden Ticket 공격이란? 작동 방식, 탐지 및 대응(예방)

gMSA 악용 공격과 Golden gMSA 공격 설명

DCShadow 공격 – 작동 방식, 실제 사례 및 방어 전략

ChatGPT 프롬프트 인젝션: 위험 이해, 사례 및 예방

NTDS.dit 추출 공격 이해하기

Kerberoasting 공격 – 작동 원리와 방어 전략

패스-더-티켓(Pass-the-Ticket) 공격 설명: 위험, 예시 및 방어 전략

비밀번호 스프레이 공격 이해하기

평문 비밀번호 추출(Plaintext Password Extraction) 이해하기: 위험, 예시 및 예방

Zerologon 취약점 설명: 위험, 악용 방법 및 대응 방안

랜섬웨어 공격에 대한 완전한 가이드

Skeleton Key 공격: 작동 원리와 탐지 방법

Lateral Movement: 그것이 무엇인지, 작동 방식, 그리고 예방 방법

중간자(MITM) 공격: 무엇인지, 그리고 어떻게 예방할 수 있는가

Silver Ticket 공격

4가지 서비스 계정 공격과 이를 방어하는 방법

공격자에게 PowerShell이 특히 인기 있는 이유는 무엇일까요?

업무에 악성코드 공격이 영향을 미치지 않도록 예방하는 방법

PowerUpSQL로 SQL Server 침해하기

마우스재킹 공격이란 무엇이며, 이에 대응하는 방법

Security Support Provider(SSP)를 사용한 자격 증명 탈취

Credential Stuffing이란 무엇인가요?

비밀번호 공격에 대한 종합적 이해와 이를 막는 방법

LDAP Reconnaissance

Pass-the-Cookie 공격으로 MFA 우회하기

Golden SAML 공격을 위한 완전한 가이드