기지 평문 공격은 공격자가 평문과 그를 암호화한 암호문을 모두 알고 있을 때 사용할 수 있는 암호 해독 기법들을 가리킵니다. 이 경우 이미 알고 있는 평문을 크립(crib)이라고 부르기도 합니다. 이미 알고 있는 평문과 암호문을 바탕으로 비밀 키를 알아내기 위해 사용합니다. 암호해독가가 암호를 해독하기 위해 의미 없어보이는 암호문만 보아서는 많은 정보를 얻기 힘들지만 암호문 안에 이미 알고 있는 평문이 포함되어 있다면, 그 사실이 암호문과 평문 사이의 관계를 추정하기 위한 단서가 될 수 있습니다.

AES 등의 현대 암호체계는 기지 평문 공격의 영향을 받지 않는 것으로 알려져 있지만 예전 버전의 ZIP 파일 포맷에 사용되는 PKZIP 스트림 암호화 알고리즘은 기지 평문 공격에 취약합니다. 이 알고리즘으로 암호화된 압축 파일은 압축 파일 안에 들어있는 파일의 일부라도 알아낼 수 있으면 전체 압축 파일을 해독할 수 있습니다.

개요

무차별 대입 공격이란 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 문제를 푸는 것인데, 얼핏 무식하다고 생각할 수도 있겠지만 항상 정확도 100%를 보장한다는 점에서, 자원만 충분하면 가장 무서운 방법입니다. 이론적으로 가능한 모든 경우의 수를 다 검색해 보는 것이라 정확도 100%가 항상 보장되니, 암호학에서는 가장 확실한 방법으로 통용되고 있습니다. 무엇보다도 암호 확인 작업이라는 것이 손으로 입력한 문자열의 동일 여부를 확인하는 것이기 때문에, 가능한 경우를 하나씩 대입하다 보면 언젠가는 암호를 찾을 수 있게 되는 식입니다. 다만 정말로 그냥 무식하게 하는건 아니고, 숫자만 섞어서 대입해보기 한번, 로마자만 섞어서 대입해보기 한번 이런식으로 하다가 안되면 나머지를 순차적으로 하는 식으로 특정 규칙에 따라 우선순위를 두고 하기도 합니다.

또한 브루트 포스의 특장점은 거의 완벽하게 병렬 작업이 가능하다는 점입니다. 이 때문에 병렬 프로그래밍 기법을 사용하거나, GPGPU를 이용하기도 하며, 여러 대의 컴퓨터를 연결해서 동시에 작업할 수도 있습니다. 이렇게 하면 투자 자원에 비례해서 문제를 해결하는 시간을 줄일 수 있습니다. 즉, 컴퓨터를 10대 쓰면 10일 걸릴 작업을 1일만에 끝낼 수 있습니다.(다만 암달의 법칙 때문에 이런 식으로 병렬화가 잘 되는 작업은 흔치 않음)

단점

자원이 가장 큰 문제이며, 브루트 포스 방법에는 문제의 복잡도에 매우 민감하다는 치명적인 단점을 지니고 있습니다. 문제가 조금만 복잡해져도 매우 비효율적인 알고리즘이 될 수 있다는 것입니다. 특히 경우의 수가 문제의 복잡도에 따라 기하급수적으로 증가하는 경우, 문제를 해결하는 데에 필요한 자원 역시 기하급수적으로 증가합니다.

이러한 단점은 대부분의 암호화 알고리즘에서 역이용하고 있는데, 무어의 법칙 덕분에 컴퓨터 성능이 꾸준히 개선되고 있다 해도 그만큼 더 복잡한 암호화 기법을 이용하면 되기 때문입니다. 현 세대의 암호화 기법을 브루트 포스로 다 뚫는다 해도, 그 시간이 지나고 나면 이미 구식도 아닌 구석기 알고리즘으로 전락해 있을 법하니 그만큼 시간을 충분히 벌 수 있는 것입니다

실제로 현재 가장 흔하게 사용되는 블럭암호인 AES 기반 암호화들의 경우에는 Weak Key를 사용하지 않는 이상 키를 모르면 유의미한 시간 내에 풀 수 없으며, AES-256의 경우는 초당 100(10^18) 개의 키 대입을 하는 슈퍼컴퓨터로도 3000(3 * 10^51)년은 족히 잡아먹습니다. 아직 AES-128이 완전히 깨졌다는 보고가 없는데도 하나둘씩 AES-256으로 갈아타는 이상, AES-128이 다 깨질 때 쯤이면 이미 대다수가 AES-32k, 많이 봐 줘도 AES-2k를 쓰고 있을 판이 되는 것입니다.

방어방법

  • 암호는 최소 10자리 이상을 사용. 암호가 12자리를 넘어간다면 슈퍼 컴퓨터를 가져와도 안전. 숫자만으로 이루어져있다 해도 암호 한 자리당 경우의 수가 10배씩 늘어나고 12자리이면 10^12.

  • 암호에 특수문자를 사용하면 좀더 좋겠지만, 특수 문자 안 쓰고 그냥 암호가 길기만 해도 됨. 아무리 특수 문자를 써도 암호가 6자리 이하라면 털릴 것을 각오해야 함.

  • 대부분 사전 공격부터 가하기 때문에 최소한 다음과 같은 단어들을 쓰는 것은 자살행위. 브루트 포스 툴인 John The Ripper의 내장 사전 파일의 맨 앞의 일부는 다음과 같음. 123456, abc123, password, computer, a1b2c3, qwerty, secret. q1w2e3r4! 이것 말고도 3천여개 정도 더 존재.

  • 사전 공격에서도 브루트 포스 기술을 동시 적용하면 단어 몇개 배열해놓은 건 뚫리는 건 금방.

  • 단어조합이 힘들다면, 외국계 해커 상대로는 한타를 영타 그대로 치는 것도 좋은 방법. 중간에 쉬프트가 필요한 쌍자음이 있으면 금상첨화. 숫자랑 특문을 넣으면 거의 뚫리지 않는다고 보면 됨.

  • 웬만한 사이트나 전자거래에서는 일정 횟수 이상 암호를 잘못 입력할 경우 계정이 일시동결. 민감한 분야에서는 대면적 방법으로 새로 인증을 받지 않고서는 다시 서비스를 사용할 수 없게 해 놓기까지 함. 이럴 경우는 브루트 포스가 쉽지 않음.

  • 브루트 포스의 경우 마구 대는 게 아닌 비트 순서대로 대는 것인데, 이를 역이용해서 첫 글자의 비트 크기에 따라 비밀번호가 뚫리는 시간은 크게 차이남. 예를 들어서 아스키 코드 65인 대문자 A로 시작하는 비밀번호와 아스키 코드 122인 소문자 z로 시작하는 비밀번호는 깨지는 속도가 두 배 가까이 차이남. 심지어는 프로그램에서 로마자만 따질 경우 A보다 z로 하는 것이 50배 넘게 이득이 된다. 거의 글자 하나 있고 없고의 차이. 다만 이 방법은 현실적으로 힘든 편. 자신의 비밀번호가 원래부터 이랬다면 좋았겠지만 이미 쓰던 비밀번호를 바꾸는 것은 심히 좋지 않음.


넷스케이프사가 개발한 인터넷 상에서 정보를 암호화하여 송수신하는 프로토콜입니다. WWW나 FTP등의 데이터를 암호화하여 프라이버시에 관한 정보나 크레딧카드 번호, 기업 비밀등을 안전하게 송수신할 수 있습니다.



SSL은 공개키 암호나 비밀키암호, 디지털 증명서, 해쉬함수등의 시큐리티 기술을 조합하여 데이터의 도청이나 변경, 위장을 방지할 수가 있습니다. OSI 모델에서는 세션(5계층)과 트랜스포트(4계층)의 사이에서 동작하여 상위 프로토콜을 이용하는 어플리케이션에서는 특별히 의식할 필요없이 투과적으로 이용할 수 있습니다.

이전에 암호화에 대해 정리한거 같은데 계속이해가 안되서 다시 한번 정리합니다...

대칭키 암호(Symmetric-key Cryptography)

대칭키 암호란 암호화에 사용되는 암호화 키와 복호화에 사용되는 함호화키가 동일한 암호화 기법입니다.

대칭키 암호 방식으로 암호화한 정보를 누군가에게 보낼 때 암호키도 함께 보내야하는데  암호키 자체는 암호화가 되지 않은 평문으로 분실하거나 타인에게 노출되면 보안에 매우 취약해집니다. 키 전달 및 관리에 어려움이 있지만 대칭키 암호는 암호화 연산 속도가 빠르기 때문에 효율적인 암호 시스템을 구축할 수 있다는 장점이 있습니다.

대칭키 암호화 방식은 데이터를 변환하는 방식에 따라 블록암호와 스트림 암호로 구분됩니다.

블록암호

블록암호는 고정된 크기의 블록 단위로 암호화, 복호화 연산을 수행하는 대칭키 암호화 방식이며 암호키 크기에 따라 64~256비트 블록 크기로 연산을 수행합니다.

블록암호 알고리즘은 평문 블록을 암호 블록으로 만들 때 적용되는 방식에 따라 파이스텔 블록 구조와 SPN 블록 구조로 구분됩니다.

파이스텔 블록 구조는 입력되는 평문 블록을 좌우 두 개 블록으로 분할하고, 좌측 블록을 파이스텔 함수라 불리는 라운드 함수를 적용하여 출력된 결과를 우측 블록에 적용하는 과정을 반복적으로 수행합니다. 파이스텔 블록구조를 채택한 블록암호는 DES가 있습니다.

SPN 블록 구조는 평문 블록을 분할하지 않고 전체 블록을 적용하는 방식으로 라운드 함수의 역함수를 구해야 하는 어려움이 있는 구조지만 컴퓨팅 속도의 발전으로 어려움을 극복할 수 있게 되었습니다. SPN 블록 구조를 채택한 블록암호는 AES가 있습니다.

DES (요즘안씀)

 56비트라는 작은 암호키로 인해 암호화를 해도 깰 수가 있습니다(..) 이를 보완하여 3DES가 나왔지만 기본 알고리즘은 DES와 동일합니다. (DES를 3번 돌림) 보완적인 요소는 증가했지만 성능은 저하되었습니다.

AES

DES를 대체하기 위해 나왔으며 키의 크기는 128, 192, 256 비트를 지원하고 암호 블록 크기는 128비트입니다. 아직까지는 해독된 사례가 없어서 안전성이 보장된 알고리즘이라 할 수 있습니다.

공개키 암호(Public-key Cryptography)

공개키 암호는 대칭키 암호의 키 전달에 있어서 취약점을 해결하고자 한 노력의 결과로 탄생한 암호 방식입니다. 공개키 암호는 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키입니다.

개인키로 암호화 한 정보는 그 쌍이 되는 공개키로만 복호화 가능하고, 반대로 공개키로 암호화 한 정보는 그 쌍이 되는 개인키로만 복호화가 가능합니다. 즉 공개키 암호 방식은 암호화할 때 사용하는 암호키와 복호화할 때 사용하는 암호키가 서로 다르기 때문에 비대칭키 암호라고도 합니다. 공개키 암호는 키 전달 문제를 해결했지만 암호화, 복호화를 위해 복잡한 수학연산을 수행하기 때문에 대칭키에 비해 속도가 느립니다. 

대칭키 암호의 장점과 공개키 암호의 장점을 채택하여 용량이 큰 정보는 대칭키로 암호화하고, 암호화에 사용된 대칭키는 공개키로 암호화하여 대상에게 전달하는 하이브리드 암호화 방법이 일반적으로 활용되고 있습니다.

공개키 기반 구조

특정 사람의 개인키와 공개키는 어떻게 생성할 것이며, 어떻게 배포할 것이고, 어떻게 관리해야하는 이슈가 존재합니다. 또한 어떤 공개키가 특정한 사람의 공개키라는 것을 어떻게 보장할 수 있는지에 대한 이슈도 존재합니다.

이를 해결하기 위해 디지털 인증서를 도입하였고 이를 활용하는 소프트웨어, 하드웨어, 정책, 제도, 사용자 등을 총칭해서 공개키 기반 구조라고 합니다.

RSA

RSA는 대표적인 공개키입니다.

'보안 & 보안' 카테고리의 다른 글

무차별 대입 공격 (Brute Force Attack)  (0) 2017.03.27
SSL (Secure Socket Layer)  (0) 2017.03.27
암호 (대칭키 암호, 공개키 암호)  (1) 2017.03.14
블록 암호 운용 방식 (block cipher modes of operation)  (1) 2017.02.18
CSRF란?  (0) 2017.01.16
XSS공격이란  (0) 2017.01.16
  1. 선문기 2019.02.20 20:29 신고

    공개키는 대칭키의 키전달의 약점을 해결하고자 한것이라 하는데 그럼 대칭키처럼 키가 동일하다는 것을 기반으로 한건가요? 밑에 글보니 그건또아니어서요..
    정의를 정확히 해주셔야할듯합니다.

블록 암호란?

블록 암호(block cipher)란 기밀성있는 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호 시스템입니다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용됩니다.(예, ECB, CBC, OFB, CFB, CTR)

스트림 암호란?

스트림 암호(stream cipher)는 대칭 키 암호의 구조 중 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가집니다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻습니다. 즉 키의 길이가 유동적입니다. 스트림 암호는 일회용 난수표(OTP)를 유사난수로 대체한 것으로 볼 수 있습니다. 스트림 암호는 하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선 통신 등의 환경에 주로 사용됩니다. 

블록 암호 운용 방식이란?

블록 암호 운용 방식은 하나의 키 하에서 블록 암호를 반복적으로 안전하게 이용하게 하는 절차를 말합니다. 블록 암호는 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그리고 그 블록들을 어떻게 암호화할지를 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식으로 부릅니다. 운용 방식은 주로 암호화와 인증을 목적으로 정의되어왔습니다. 역사적으로 암호화 방식은 다양한 시나리오의 데이터 수정 측면에서 오류 증식 특성과 관련하여 널리 연구되어 왔습니다. 나중에 무결성 보호는 암호화와는 완전히 별개로 다루게 되었습니다. 현대의 일부 운용 방식은 암호화와 인증을 효율적인 방식으로 병합해 놓고 있는데, 이를 인증된 암호 방식(authenticated encryption) 방식으로 부릅니다.

운용 방식이 일반적으로 대칭형 암호화와 관련하는 것이 일반적이지만 RSA와 같은 공개 키 암호 방식 원칙에도 적용할 수 있습니다. (길이가 더 긴 메시지의 공개 키 암호 방식은 일반적으로 복합 암호 방식(hybrid encryption)이라 부름)

종류

ECB

전자 코드북(electronic codebook, ECB)은 운용 방식 중 가장 간단한 구조를 가지며, 암호화하려는 메시지를 여러 블록으로 나누어 각각 암호화하는 방식으로 되어 있습니다.

전자 코드북은 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약합니다. 만약 암호화 메시지를 여러 부분으로 나누었을 때 두 블록이 같은 값을 가진다면, 암호화한 결과 역시 같습니다. 이것은 공격자가 비슷한 메시지를 반복적으로 암호화하는 반복공격에도 취약한 성질을 가집니다.

요약

  • 가장 단순한 모드로 블록단위로 순차적으로 암호화 하는 구조
  • 한개의 블록만 해독되면 나머지 블록도 해독이 되는 단점 (Brute-Force Arttack, Dictionary Attack)
  • 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 알기 위해서 Padding을 해야함
  • error propagation : 각 블록이 독립적으로 동작하므로 한블록에서 에러가 난다고 해도 다른 블록에 영향을 주지 않음. 해당 블록까지 에러 전파.

CBC

암호 블록 체인 (cipher-block chaining, CBC) 방식은 1976년 IBM에 의해 개발되었습니다. 각 블록은 암호화되기 전에 이전 블록의 암호화 결과와 XOR되며, 첫 블록의 경우에는 초기화 벡터가 사용됩니다. 초기화 벡터가 같은 경우 출력 결과가 항상 같기 때문에, 매 암호화마다 다른 초기화 벡터를 사용해야 합니다.

CBC 방식은 현재 널리 사용되는 운용 방식 중 하나입니다. CBC는 암호화 입력 값이 이전 결과에 의존하기 때문에 병렬화가 불가능하지만, 복호화의 경우 각 블록을 복호화한 다음 이전 암호화 블록과 XOR하여 복구할 수 있기 때문에 병렬화가 가능합니다.

요약

  • 블록 암호화 운영 모드 중 보안 성이 제일 높은 암호화 방법으로 가장 많이 사용
  • 평문의 각 블록은 XOR연산을 통해 이전 암호문과 연산되고 첫번째 암호문에 대해서는 IV(Initial Vector)가 암호문 대신 사용. 이 때, IV는 제 2의 키가 될 수 있음
  • 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 얻기 위해서 Padding을 해야함
  • 암호화가 병렬처리가 아닌 순차적으로 수행되어야 함. (단점)
  • error propagation : 깨진 암호문의 해당블록과 다음블록의 평문까지 영향을 미치게 됨

CFB

암호 피드백(cipher feedback, CFB) 방식은 CBC의 변형으로, 블록 암호를 자기 동기 스트림 암호로 변환합니다. CFB의 동작 방식은 CBC와 비슷하며, 특히 CFB 암호 해제 방식은 CBC 암호화의 역순과 거의 비슷합니다.

요약

  • 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같음 (패딩이 필요 없음)
  • 최초의 키 생성 버퍼로 IV가 사용되며, 이때 IV는 제2의 키가 될수 있음
  • 스트림의 기본단위를 bit단위로 설정할 수 있으며, bit단위에 따라 CFB8~CFB128로 쓰임
  • 암호화, 복호화 모두 암호화로만 처리할 수 있음
  • CBC모드와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리할 수 있음
  • error propagation : CBC모드와 마찬가지로 한 암호문블럭의 에러는 해당평문블록과 다음 평문블록, 이렇게 총 2개의 블록에 전파됨

 

OFB

출력 피드백(output feedback, OFB)은 블록 암호를 동기식 스트림 암호로 변환합니다. XOR 명령의 대칭 때문에 암호화와 암호 해제 방식은 완전히 동일합니다.

요약

  • 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같음 (패딩이 필요없음)
  • 암호화 함수는 키 생성에만 사용되며, 암호화 방법과 복호화 방법이 동일해 암호문을 한번 더 암호화하면 평문이 나옴 (복호화시에 암호화)
  • 최초의 키생성 버퍼로 IV가 사용되며, 이 때 IV는 제2의 키가 될수 있음
  • 스트림의 기본 단위를 Bit단위로 설정할 수 있으며, Bit단위에 따라 OFB8~OFB128로 쓰임
  • error propagation : 해당블록까지만 대응되는 한 블록에만 영향을 미치므로, 영상이나 음성과 같은 digitized analog신호에 많이 사용됨

CTR 

카운터(Counter, CTR) 방식은 블록 암호를 스트림 암호로 바꾸는 구조를 가집니다. 카운터 방식에서는 각 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 nonce를 결합하여 블록 암호의 입력으로 사용합니다. 그렇게 각 블록 암호에서 연속적인 난수를 얻은 다음 암호화하려는 문자열과 XOR합니다. 카운터 모드는 각 블록의 암호화 및 복호화가 이전 블록에 의존하지 않아서 병렬적으로 동작하는 것이 가능합니다. 혹은 암호화된 문자열에서 원하는 부분만 복호화하는 것도 가능합니다.

요약

  • 블록을 암호화할 때마다 1씩 증가해 가는 카운터를 암호화 해서 키 스트림을 만듬. 즉 카운터를 암호화한 비트열과 평문블록과의 XOR를 취한 결과가 암호문 블록이 됨
  • CTR모드는 OFB와 같은 스트림 암호의 일종
  • CTR모드의 암복호화는 완전히 같은 구조가 되므로 구현이 간단함 (OFB와 같은 스트림 암호의 특징)
  • CTR모드에서는 블록의 순서를 임의로 암/복호화 할 수 있음 (비표와 블록번호로부터 카운터를 구할 수 있기 때문)
  • 블록을 임의의 순서로 처리 할 수 있다는 것은 처리를 병행 할 수 있다는 것을 의미 (병렬처리 가능)
  • error propagation : 각 블록이 병렬처리 되므로 같은 블록내에서만 이루어짐


'보안 & 보안' 카테고리의 다른 글

SSL (Secure Socket Layer)  (0) 2017.03.27
암호 (대칭키 암호, 공개키 암호)  (1) 2017.03.14
블록 암호 운용 방식 (block cipher modes of operation)  (1) 2017.02.18
CSRF란?  (0) 2017.01.16
XSS공격이란  (0) 2017.01.16
Spoofing? Sniffing?  (0) 2016.11.09
  1. 나그네 2017.11.06 15:55

    잙 읽었습니다.

CSRF란?

사이트 간 요청 위조(Cross-site Request Forgery)

웹 어플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미합니다. 2008년에 발생한 옥션의 개인정보 유출사건에서도 관리자 계정을 탈취하는데 이 방법이 사용되었습니다. 공격의 난이도가 높지 않아 널리 사용되는 방법 중 하나입니다.

공격방법

이러한 공격을 하기 위하여 해커는 우선 공격을 할 사이트를 먼저 분석합니다. 예를 들어, 나무위키의 경우에 토론은 namu.wiki/topic/ 이라고 시작하며 뒤에 숫자가 붙는 형식인데 이 뒤의 숫자에 패턴이 있습니다.(실제론 토론이 개설된 순서대로 붙는 일련번호이다.) 그러면 이 패턴을 이용하여 일반적인 방법으로 접근할 수 없는 페이지를 오픈 한다든지, 개발에 사용되고 실제로 사용하지 않는 샘플 페이지를 찾아낸다든지 이러한 방법이 가능합니다. 그것이 아니라 웹페이지가 독자적 개발이 아닌 외부에서 이미 개발된 웹 어플리케이션을 사서 조금 수정한 것이라면 공격자는 경우에 따라서 해당 웹 어플리케이션을 구매하여 개인 서버에 설치를 합니다. 그 다음에 공격 가능 패턴을 분석합니다. 주로 공격자들이 찾는 것은 사용자 패스워드 변경페이지나 타 시스템과 로그인 연동 주소 패턴같은 인증 관련된 취약점을 찾습니다. 그 다음에 여기서 나온 취약점을 이용하여 공개된 게시판이나 메일을 이용하여 사용자가 해당 링크를 열게 만들면 공격이 완료됩니다.

예시

만일, A라는 사이트의 사용자 개인 비밀번호 변경을 하는 주소 패턴이 abc.com/user.do?cmd=user_passwd_change&user=admin&newPwd=1234 라고 한다면 이러한 링크를 사용자의 메일로 XSS 형태로 보내고 메일을 읽게되면 해당 사용자의 패스워드가 1234로 초기화 됩니다. 이를 관리자에게 보내서 일반계정을 관리자 계정으로 바꾸도록 한다든지, 아니면 관리자 계정 패스워드를 바꾸는데 이용한다면 해당 사이트의 모든 정보가 해킹당하는데는 오랜 시간이 걸리지 않습니다. 참고로, img 태그도 GET 메소드를 사용해서 보내는 것이기 때문에 img를 이용할 수도 있습니다. 대부분의 사이트는 img를 필터링하지 않으므로, 혹은 필터링하지 못하므로 유용한 방법이 될 수 있습니다. 예를 들면 나무위키의 경우 <img src="https://namu.wiki/logout"> 와 같은 코드를 넣어주면 해당 문서를 볼 경우 로그아웃이 됩니다. 이는 나무위키뿐만이 아닌 대부분의 사이트의 문제입니다.

방어방법

방어 방법 중 가장 기초적인 방법은 Referer 체크를 하는 방법이 있습니다. Referer는 HTTP 헤더에 있는 정보로 해당 요청이 요청된 페이지의 정보를 가지고 있는데 해당 정보는 Paros나 Zap, fiddler같은 프로그램으로 조작이 가능하지만 방법이 간단하여 소규모 웹사이트에 주로 이용되는 방법입니다. 그 외에는 패스워드 변경 같은 민감한 정보를 다룰 때에는 세션에 임의난수(토큰)를 발급하여, 해당 난수가 없는 상황에서 해당 동작들이 이루어지면 요청을 거부하는 방법을 통하여 사용자가 정말로 변경을 의도하는 경우에만 변경을 시켜주는 방법, 변경 시에 CAPTCHA를 이용하여 캡챠 인증코드가 없거나 틀리면 거부하도록 하는 방법 등이 이용되고 있습니다. 또한 GET/POST 등을 구분하여 주는 것 역시 유용합니다. img 태그 등을 이용할 경우 GET 요청으로 들어오게 될 것이고, 반면 흔히 하듯 form을 이용해 값을 받을 경우 경우 POST를 이용하게 되는 경우가 많기 때문입니다. 위의 방법들을 일일이 적용하기 귀찮다면, 대개 프레임워크에서 위의 방법들을 통합한 플러그인 등을 제공하는 경우들이 많으니 찾아보도록 합니다. 또한 form 대신 ajax(CORS가 비활성화되어 있어야 함)를 통한 JSON API만 사용하는 방법이 있습니다.


'보안 & 보안' 카테고리의 다른 글

암호 (대칭키 암호, 공개키 암호)  (1) 2017.03.14
블록 암호 운용 방식 (block cipher modes of operation)  (1) 2017.02.18
CSRF란?  (0) 2017.01.16
XSS공격이란  (0) 2017.01.16
Spoofing? Sniffing?  (0) 2016.11.09
SandBox란?  (0) 2016.07.28

+ Random Posts