SW/정보보호

무차별 대입 공격(Brute Force Attack)에 대한 방어 프로젝트

얇은생각 2018. 12. 29. 12:30
반응형

1. 문제 정의

무차별 대입 공격, 즉 브루트 포스 공격은 Encrypted된 암호를 Decrypt하여 암호를 찾아내는 것이 아니라 무차별적으로 암호를 입력하여 비밀 번호를 찾아내는 공격 방법을 의미한다. 이러한 무차별 대입 공격에 대한 예와 해결 방안에 대해서 찾아보고 설계한다.



2. 문제의 실제 사례

최근에는 무차별 대입 공격에 대한 방비가 대체적으로 이루어져 있는 경우가 많기 때문에, 브루트 포스 공격은 원시적이고 효율적이지 않으며 쉽게 방어할 수 있는 공격방법으로 알려져 있다. 하지만 아이러니하게도 이 원시적이고 단순한 공격방법은 오히려 그 단순함 때문에 방비가 허술해지면 바로 그 모습을 드러내는데 실제로도 1~2년에 한 번씩 iCloud 해킹을 통한 할리우드 스타들의 사생활 사진 노출 등의 사고가 발생한다. 보통 브루트 포스 공격을 방지하기 위해서 웹에서는 세 가지 정도의 서비스를 제공하는데, (1) ID나 비밀번호의 입력 횟수 제한, (2) ID나 비밀번호가 틀렸을 경우 둘 중 어떤 항목이 틀렸는지에 대해 알려주지 않는 방법, (3) 입력이 일정 횟수 이상 잘못된 경우 해당 계정을 잠금하는 방법 등이 있다.

 


3. 해결 방안에 대한 설계

문제의 실제 사례 부분에서 확인한 바와 같이 사실 브루트 포스 공격에 대한 방어는 크게 어렵지 않다. 브루트 포스 공격에 대한 예를 들어보면, 다음과 같은 사이트를 예시로 들 수 있다. 위 사이트는 입력하는 비밀번호 조합이 얼마나 알아내기 쉬운지의 정도를 판별해주는 사이트이다.


3_1)


문자열 하나만을 입력했을 경우 700피코세컨드 밖에 걸리지 않는다고 분석되었다. 여기서 해당 문자는 a였다.

 

3_2)


문자열 4개를 입력했을 경우 즉각적으로 찾아낼 수 있다고 분석되었다. 여기서 해당 문자열은 abcd였는데, 보통 abcd와 같은 문자열은 매우 흔하고 쉽기 때문에 더 빨리 찾아낼 수 있다. 따라서 서로 관계가 전혀 없는 조합(xqub 등)은 좀 더 오래걸린다. 또한 temp, good 등의 단순한 단어와 같이 사전에서 찾을 수 있는 단어 또한 매우 쉽게 찾을 수 있다.

 

3_3)

무작위 문자열 8개의 경우도 찾아내는데 1분대의 시간 밖에 소요되지 않으며,

 

3_4)

사전에서 찾을 수 있는 단어라 해도 2가지 이상의 단어 조합과 수의 조합은 시간을 더욱 오래 걸리게 하는데, 10개의 문자열로 이루어진 비밀번호는 찾아내는데 꼬박 하루가 걸리며, 1글자가 더 늘어나 11개의 문자열이 되면 1달이 걸린다.

 

3_5)

12개의 문자열부터는 년 단위로 넘어가게 되는데, 본 보고서 작성자 중 한 명이 사용하는 비밀번호의 경우,


찾아내는데 20억년이 걸린다고 분석되었다. 위 비밀번호는 16자리로, 4개 숫자조합+2개의 단어조합+다시 2개의 숫자조합 + 특수문자 조합으로 단어 2개를 제외하고는 사실상 상관관계가 없는 비밀번호 조합으로 이루어져있다.

 

3_6)

위 실험에서 확인한 바를 통해 알 수 있는 사실은 브루트 포스 공격에 대비할 수 있는 제일 간단한 방법은 사용자 본인이 비밀번호를 성의 있고 길게 만드는 방법이다. 그럼에도 웹 서비스에서 비밀번호의 자릿수에 제한을 두지 않는 경우도 많은 반면에 오히려 비밀번호의 자릿수에 제한을 두는 경우도 흔하다. 많은 웹 서비스에서 비밀번호는 8~12자리 정도의 문자열을 추천하고 있으며, 위의 간단한 실험에서 확인할 수 있다시피 12자리의 비밀번호는 4년 정도의 시간이 걸리지만, 11자리의 비밀번호는 1달, 그보다 짧은 경우는 더 빠르게 찾아낼 수 있다. 즉, 12자리 이상부터는 알아내는 것이 불가능하거나 가능하더라도 효율적 측면에서의 효용가치가 작으므로 효과적인 비밀번호가 될 수 있지만, 11자리정도만 되더라도 1달, 즉 공격자가 마음만 막으면 찾아낼 수 있는 보안 수준의 비밀 번호가 된다. 때문에 대부분의 웹 서비스에서는 1달을 주기로 비밀번호를 바꿀 것을 제안하지만, 실제적으로 이를 꾸준히 수행하는 사용자는 많지 않다.


이러한 브루트 포스 공격에 대해 방어할 수 있는 간단한 방법으로 이번 프로젝트의 해결 방안은 ‘입력이 일정 횟수 이상 잘못된 경우 해당 계정을 잠금’하는 방법이다. 이 방법에는 계정을 아예 사용하지 못하도록 막아버리는 방법뿐만 아니라, 일정 횟수 이상 입력을 잘못할 경우 추가적인 인증을 필요로 하도록 하는 방법도 포함할 수 있다.

예시로, 사이트에서 확인할 수 있는 방법은 다음과 같다.


위 사진과 같이 붉은 동그라미 표시 안에 마우스 클릭 이벤트를 삽입하는 경우다. 이와 비슷하게 임의적인 문자열을 입력하도록 하는 방법도 있다.


따라서 위와 같은 방법을 적용하여 브루트 포스 공격에 방어할 수 있는 해결방안을 제시하는데, 그 방법은 일종의 퀴즈를 풀도록 하여 비밀번호보다 조금 더 긴 문자열을 추가적으로 입력하는 방법이다.

 

 

4. 시스템 구성 및 구현 방법

(1) 각각의 ID에 비밀번호 횟수를 제한할 수 있는 변수를 설정하고,

(2) 해당 설정횟수가 일정 횟수를 초과하면

(3) 추가적인 인증을 필요로 하는 이벤트를 발생시킨다.

(4) 그 이벤트로는 팝업 창이나 로그인 화면 자체의 변환을 통해 여러 개의 퀴즈에 대해 조금은 긴 문자열로 답변할 수 있도록 한다.

(5) 해당 문제에 대한 답변 문자열이 저장된 인증 문자열과 일치하면 로그인을 성공시킨다.

반응형